Do not leave empty last column in header

Do not leave empty last column in header meters by refactoring the width
and separator logic.

Closes: #784
This commit is contained in:
Christian Göttsche 2021-09-10 16:36:13 +02:00
parent bc08c7dc2a
commit 5c8670717a
2 changed files with 9 additions and 6 deletions

View File

@ -194,7 +194,8 @@ void Header_draw(const Header* this) {
for (int y = 0; y < height; y++) { for (int y = 0; y < height; y++) {
mvhline(y, 0, ' ', COLS); mvhline(y, 0, ' ', COLS);
} }
const int width = COLS - pad; const int numCols = HeaderLayout_getColumns(this->headerLayout);
const int width = COLS - 2 * pad - (numCols - 1);
int x = pad; int x = pad;
float roundingLoss = 0.0F; float roundingLoss = 0.0F;
@ -217,6 +218,7 @@ void Header_draw(const Header* this) {
except for multi column meters. */ except for multi column meters. */
if (meter->mode == TEXT_METERMODE && !Meter_isMultiColumn(meter)) { if (meter->mode == TEXT_METERMODE && !Meter_isMultiColumn(meter)) {
for (int j = 1; j < meter->columnWidthCount; j++) { for (int j = 1; j < meter->columnWidthCount; j++) {
actualWidth++; /* separator column */
actualWidth += (float)width * HeaderLayout_layouts[this->headerLayout].widths[col + j] / 100.0F; actualWidth += (float)width * HeaderLayout_layouts[this->headerLayout].widths[col + j] / 100.0F;
} }
} }
@ -227,6 +229,7 @@ void Header_draw(const Header* this) {
} }
x += floorf(colWidth); x += floorf(colWidth);
x++; /* separator column */
} }
} }

10
Meter.c
View File

@ -155,7 +155,7 @@ ListItem* Meter_toListItem(const Meter* this, bool moving) {
static void TextMeterMode_draw(Meter* this, int x, int y, int w) { static void TextMeterMode_draw(Meter* this, int x, int y, int w) {
const char* caption = Meter_getCaption(this); const char* caption = Meter_getCaption(this);
attrset(CRT_colors[METER_TEXT]); attrset(CRT_colors[METER_TEXT]);
mvaddnstr(y, x, caption, w - 1); mvaddnstr(y, x, caption, w);
attrset(CRT_colors[RESET_COLOR]); attrset(CRT_colors[RESET_COLOR]);
int captionLen = strlen(caption); int captionLen = strlen(caption);
@ -166,7 +166,7 @@ static void TextMeterMode_draw(Meter* this, int x, int y, int w) {
RichString_begin(out); RichString_begin(out);
Meter_displayBuffer(this, &out); Meter_displayBuffer(this, &out);
RichString_printoffnVal(out, y, x, 0, w - 1); RichString_printoffnVal(out, y, x, 0, w);
RichString_delete(&out); RichString_delete(&out);
} }
@ -176,7 +176,6 @@ static const char BarMeterMode_characters[] = "|#*@$%&.";
static void BarMeterMode_draw(Meter* this, int x, int y, int w) { static void BarMeterMode_draw(Meter* this, int x, int y, int w) {
const char* caption = Meter_getCaption(this); const char* caption = Meter_getCaption(this);
w -= 2;
attrset(CRT_colors[METER_TEXT]); attrset(CRT_colors[METER_TEXT]);
int captionLen = 3; int captionLen = 3;
mvaddnstr(y, x, caption, captionLen); mvaddnstr(y, x, caption, captionLen);
@ -184,10 +183,11 @@ static void BarMeterMode_draw(Meter* this, int x, int y, int w) {
w -= captionLen; w -= captionLen;
attrset(CRT_colors[BAR_BORDER]); attrset(CRT_colors[BAR_BORDER]);
mvaddch(y, x, '['); mvaddch(y, x, '[');
w--;
mvaddch(y, x + MAXIMUM(w, 0), ']'); mvaddch(y, x + MAXIMUM(w, 0), ']');
w--;
attrset(CRT_colors[RESET_COLOR]); attrset(CRT_colors[RESET_COLOR]);
w--;
x++; x++;
if (w < 1) if (w < 1)
@ -329,7 +329,7 @@ static void GraphMeterMode_draw(Meter* this, int x, int y, int w) {
data->values[nValues - 1] = value; data->values[nValues - 1] = value;
} }
int i = nValues - (w * 2) + 2, k = 0; int i = nValues - (w * 2), k = 0;
if (i < 0) { if (i < 0) {
k = -i / 2; k = -i / 2;
i = 0; i = 0;