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;