From 5745a287c06fdd0352e6a91dfbad9445069700f6 Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Thu, 24 Apr 2025 17:13:45 +0200 Subject: [PATCH] fix: changed diff calculation for BarChart value update that prevents widget redraw every time even if the value is the same as previously --- Kit/Widgets/BarChart.swift | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Kit/Widgets/BarChart.swift b/Kit/Widgets/BarChart.swift index f32ef8d1..bd883549 100644 --- a/Kit/Widgets/BarChart.swift +++ b/Kit/Widgets/BarChart.swift @@ -223,7 +223,13 @@ public class BarChart: WidgetWrapper { } public func setValue(_ newValue: [[ColorValue]]) { - guard self._value != newValue else { return } + let tolerance: CGFloat = 0.01 + let isDifferent = self._value.count != newValue.count || zip(self._value, newValue).contains { row1, row2 in + row1.count != row2.count || zip(row1, row2).contains { val1, val2 in + abs(val1.value - val2.value) > tolerance || val1.color != val2.color + } + } + guard isDifferent else { return } self._value = newValue DispatchQueue.main.async(execute: { self.display()