diff --git a/Meter.c b/Meter.c index 20b5130fc62e3a7f821d50483edc23babf9e36fc..2ed0f1b261070ad530a6d08ead56148aacb01a73 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]];