From e2fde83031a2cdb8b0efd958398865f4dd99f9ae Mon Sep 17 00:00:00 2001 From: Explorer09 Date: Thu, 24 Dec 2015 17:18:33 +0800 Subject: [PATCH] Fix graph coloring algorithm (again, this time I get it right). --- Meter.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Meter.c b/Meter.c index 20b5130..2ed0f1b 100644 --- a/Meter.c +++ b/Meter.c @@ -435,10 +435,12 @@ static void GraphMeterMode_draw(Meter* this, int x, int y, int w) { double maxArea = 0.0; for (int i = 0; i < items; i++) { double area; - area = MIN(currentItemSums[i], this->total * (GRAPH_HEIGHT - line) / GRAPH_HEIGHT) + - MIN(prevItemSums[i], this->total * (GRAPH_HEIGHT - line) / GRAPH_HEIGHT); - area -= MAX(((i > 0) ? currentItemSums[i-1] : 0), this->total * (GRAPH_HEIGHT - 1 - line) / GRAPH_HEIGHT) + - MAX(((i > 0) ? currentItemSums[i-1] : 0), this->total * (GRAPH_HEIGHT - 1 - line) / GRAPH_HEIGHT); + double upperBound = this->total * (GRAPH_HEIGHT - line) / GRAPH_HEIGHT; + double lowerBound = this->total * (GRAPH_HEIGHT - 1 - line) / GRAPH_HEIGHT; + area = MAX(lowerBound, MIN(currentItemSums[i], upperBound)) + + MAX(lowerBound, MIN(prevItemSums[i], upperBound)); + area -= MAX(lowerBound, MIN(((i > 0) ? currentItemSums[i-1] : 0), upperBound)) + + MAX(lowerBound, MIN(((i > 0) ? prevItemSums[i-1] : 0), upperBound)); if (area > maxArea) { maxArea = area; dominantColor = CRT_colors[Meter_attributes(this)[i]]; -- GitLab