summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Meter.c19
-rw-r--r--Meter.h2
2 files changed, 17 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;
diff --git a/Meter.h b/Meter.h
index bd7604a0..8e8618d6 100644
--- a/Meter.h
+++ b/Meter.h
@@ -74,6 +74,7 @@ typedef struct MeterClass_ {
const char* const description; /* optional meter description in header setup menu */
const uint8_t maxItems;
const bool isMultiColumn; /* whether the meter draws multiple sub-columns (defaults to false) */
+ const bool comprisedValues; /* whether latter values comprise previous ones (defaults to false) */
} MeterClass;
#define As_Meter(this_) ((const MeterClass*)((this_)->super.klass))
@@ -94,6 +95,7 @@ typedef struct MeterClass_ {
#define Meter_name(this_) As_Meter(this_)->name
#define Meter_uiName(this_) As_Meter(this_)->uiName
#define Meter_isMultiColumn(this_) As_Meter(this_)->isMultiColumn
+#define Meter_comprisedValues(this_) As_Meter(this_)->comprisedValues
typedef struct GraphData_ {
struct timeval time;