diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2023-04-09 14:18:26 +0200 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2023-04-11 23:09:10 +0200 |
commit | ccf745ee7ea017230827ad0c5332d1e14fa3ee10 (patch) | |
tree | c5360591b85d52acf2291c738c6f7d8af876bfbd /Meter.c | |
parent | da255cb33fd8ddd233232850f9465e6ddb47015f (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.c | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -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; |