summaryrefslogtreecommitdiffstats
path: root/Meter.c
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2023-04-09 14:18:26 +0200
committerBenBE <BenBE@geshi.org>2023-04-11 23:09:10 +0200
commitccf745ee7ea017230827ad0c5332d1e14fa3ee10 (patch)
treec5360591b85d52acf2291c738c6f7d8af876bfbd /Meter.c
parentda255cb33fd8ddd233232850f9465e6ddb47015f (diff)
Meter: introduce comprisedValues option
Useful for bar mode if latter values of the meter comprise previous ones.
Diffstat (limited to 'Meter.c')
-rw-r--r--Meter.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/Meter.c b/Meter.c
index 7f634f19..a88de04a 100644
--- a/Meter.c
+++ b/Meter.c
@@ -219,6 +219,7 @@ static void BarMeterMode_draw(Meter* this, int x, int y, int w) {
assert(startPos + w <= RichString_sizeVal(bar));
int blockSizes[10];
+ int blockSizeSum = 0;
// First draw in the bar[] buffer...
int offset = 0;
@@ -230,6 +231,12 @@ static void BarMeterMode_draw(Meter* this, int x, int y, int w) {
} else {
blockSizes[i] = 0;
}
+
+ if (Meter_comprisedValues(this)) {
+ blockSizes[i] = MAXIMUM(blockSizes[i] - blockSizeSum, 0);
+ blockSizeSum += blockSizes[i];
+ }
+
int nextOffset = offset + blockSizes[i];
// (Control against invalid values)
nextOffset = CLAMP(nextOffset, 0, w);
@@ -323,10 +330,14 @@ static void GraphMeterMode_draw(Meter* this, int x, int y, int w) {
for (int i = 0; i < nValues - 1; i++)
data->values[i] = data->values[i + 1];
- double value = 0.0;
- for (uint8_t i = 0; i < this->curItems; i++)
- value += !isnan(this->values[i]) ? this->values[i] : 0;
- data->values[nValues - 1] = value;
+ if (Meter_comprisedValues(this)) {
+ data->values[nValues - 1] = (this->curItems > 0) ? this->values[this->curItems - 1] : 0.0;
+ } else {
+ double value = 0.0;
+ for (uint8_t i = 0; i < this->curItems; i++)
+ value += !isnan(this->values[i]) ? this->values[i] : 0;
+ data->values[nValues - 1] = value;
+ }
}
int i = nValues - (w * 2), k = 0;

© 2014-2024 Faster IT GmbH | imprint | privacy policy