From bdb015ffa36ebedadc2bc5266660182e49596f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Sat, 18 Sep 2021 15:37:20 +0200 Subject: 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 --- CPUMeter.c | 11 +++++++++++ Header.c | 5 ++++- MemorySwapMeter.c | 1 + Meter.h | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CPUMeter.c b/CPUMeter.c index 5fd7cc0f..28fb730a 100644 --- a/CPUMeter.c +++ b/CPUMeter.c @@ -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", diff --git a/Header.c b/Header.c index 8940b368..26cd9236 100644 --- a/Header.c +++ b/Header.c @@ -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", diff --git a/Meter.h b/Meter.h index da5792f9..0e6b3f9f 100644 --- a/Meter.h +++ b/Meter.h @@ -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; -- cgit v1.2.3