diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2021-09-18 15:37:20 +0200 |
---|---|---|
committer | Christian Göttsche <cgzones@googlemail.com> | 2021-09-18 17:21:32 +0200 |
commit | bdb015ffa36ebedadc2bc5266660182e49596f3d (patch) | |
tree | 320958e0578fc3473d340ba4bffb7e0b0a77ed3f | |
parent | 5000cefc138a8ca2c0a1dbef420cdb3a70116789 (diff) |
Header: do not let multi-column meters expand to empty neighbors
Extending to right neighbors is intended for text meters with an
overlong content, so the whole text is shown if possible.
Multi column meters, like the combined memory and swap meter, position
its text depending on the given total width; keep the position to the
original assigned header slot.
Short term resolution for #796
-rw-r--r-- | CPUMeter.c | 11 | ||||
-rw-r--r-- | Header.c | 5 | ||||
-rw-r--r-- | MemorySwapMeter.c | 1 | ||||
-rw-r--r-- | Meter.h | 2 |
4 files changed, 18 insertions, 1 deletions
@@ -381,6 +381,7 @@ const MeterClass AllCPUs2Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "AllCPUs2", @@ -401,6 +402,7 @@ const MeterClass LeftCPUsMeter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs", @@ -421,6 +423,7 @@ const MeterClass RightCPUsMeter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs", @@ -441,6 +444,7 @@ const MeterClass LeftCPUs2Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs2", @@ -461,6 +465,7 @@ const MeterClass RightCPUs2Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs2", @@ -481,6 +486,7 @@ const MeterClass AllCPUs4Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "AllCPUs4", @@ -501,6 +507,7 @@ const MeterClass LeftCPUs4Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs4", @@ -521,6 +528,7 @@ const MeterClass RightCPUs4Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs4", @@ -541,6 +549,7 @@ const MeterClass AllCPUs8Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "AllCPUs8", @@ -561,6 +570,7 @@ const MeterClass LeftCPUs8Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs8", @@ -581,6 +591,7 @@ const MeterClass RightCPUs8Meter_class = { }, .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs8", @@ -212,7 +212,10 @@ void Header_draw(const Header* this) { Meter* meter = (Meter*) Vector_get(meters, i); float actualWidth = colWidth; - if (meter->mode == TEXT_METERMODE) { + + /* Let meters in text mode expand to the right on empty neighbors; + except for multi column meters. */ + if (meter->mode == TEXT_METERMODE && !Meter_isMultiColumn(meter)) { for (int j = 1; j < meter->columnWidthCount; j++) { actualWidth += (float)width * HeaderLayout_layouts[this->headerLayout].widths[col + j] / 100.0F; } diff --git a/MemorySwapMeter.c b/MemorySwapMeter.c index ffd57331..612549d1 100644 --- a/MemorySwapMeter.c +++ b/MemorySwapMeter.c @@ -95,6 +95,7 @@ const MeterClass MemorySwapMeter_class = { }, .updateValues = MemorySwapMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .name = "MemorySwap", .uiName = "Memory & Swap", .description = "Combined memory and swap usage", @@ -73,6 +73,7 @@ typedef struct MeterClass_ { const char* const caption; /* prefix in the actual header */ 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) */ } MeterClass; #define As_Meter(this_) ((const MeterClass*)((this_)->super.klass)) @@ -92,6 +93,7 @@ typedef struct MeterClass_ { #define Meter_attributes(this_) As_Meter(this_)->attributes #define Meter_name(this_) As_Meter(this_)->name #define Meter_uiName(this_) As_Meter(this_)->uiName +#define Meter_isMultiColumn(this_) As_Meter(this_)->isMultiColumn typedef struct GraphData_ { struct timeval time; |