From 5fde0e012762b07e4955306b743afcf43fe237c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Wed, 13 Jan 2021 19:22:33 +0100 Subject: [PATCH] RichString_appendChr: add parameter to set attributes Allows to set attributes when padding process fields in non-wide ncurses mode. Closes: #475 --- Meter.c | 2 +- Process.c | 2 +- RichString.c | 27 ++++++++++++++++++--------- RichString.h | 2 +- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Meter.c b/Meter.c index 5189c87a..0fbdcb9d 100644 --- a/Meter.c +++ b/Meter.c @@ -201,7 +201,7 @@ static void BarMeterMode_draw(Meter* this, int x, int y, int w) { // The text in the bar is right aligned; // Pad with maximal spaces and then calculate needed starting position offset RichString_begin(bar); - RichString_appendChr(&bar, ' ', w); + RichString_appendChr(&bar, 0, ' ', w); RichString_appendWide(&bar, 0, buffer); int startPos = RichString_sizeVal(bar) - w; if (startPos > w) { diff --git a/Process.c b/Process.c index a78fd235..152fbe68 100644 --- a/Process.c +++ b/Process.c @@ -246,7 +246,7 @@ void Process_outputRate(RichString* str, char* buffer, size_t n, double rate, in void Process_printLeftAlignedField(RichString* str, int attr, const char* content, unsigned int width) { int c = RichString_appendnWide(str, attr, content, MINIMUM(width, strlen(content))); - RichString_appendChr(str, ' ', width + 1 - c); + RichString_appendChr(str, attr, ' ', width + 1 - c); } void Process_writeField(const Process* this, RichString* str, ProcessField field) { diff --git a/RichString.c b/RichString.c index ee06dce3..86344eac 100644 --- a/RichString.c +++ b/RichString.c @@ -80,6 +80,15 @@ inline void RichString_setAttrn(RichString* this, int attrs, int start, int char } } +void RichString_appendChr(RichString* this, int attrs, char c, int count) { + int from = this->chlen; + int newLen = from + count; + RichString_setLen(this, newLen); + for (int i = from; i < newLen; i++) { + this->chptr[i] = (CharType) { .attr = attrs, .chars = { c, 0 } }; + } +} + int RichString_findChar(const RichString* this, char c, int start) { const wchar_t wc = btowc(c); const cchar_t* ch = this->chptr + start; @@ -115,6 +124,15 @@ void RichString_setAttrn(RichString* this, int attrs, int start, int charcount) } } +void RichString_appendChr(RichString* this, int attrs, char c, int count) { + int from = this->chlen; + int newLen = from + count; + RichString_setLen(this, newLen); + for (int i = from; i < newLen; i++) { + this->chptr[i] = c | attrs; + } +} + int RichString_findChar(const RichString* this, char c, int start) { const chtype* ch = this->chptr + start; for (int i = start; i < this->chlen; i++) { @@ -134,15 +152,6 @@ void RichString_prune(RichString* this) { this->chptr = this->chstr; } -void RichString_appendChr(RichString* this, char c, int count) { - int from = this->chlen; - int newLen = from + count; - RichString_setLen(this, newLen); - for (int i = from; i < newLen; i++) { - RichString_setChar(this, i, c); - } -} - void RichString_setAttr(RichString* this, int attrs) { RichString_setAttrn(this, attrs, 0, this->chlen); } diff --git a/RichString.h b/RichString.h index 594db23c..73e78204 100644 --- a/RichString.h +++ b/RichString.h @@ -50,7 +50,7 @@ void RichString_prune(RichString* this); void RichString_setAttr(RichString* this, int attrs); -void RichString_appendChr(RichString* this, char c, int count); +void RichString_appendChr(RichString* this, int attrs, char c, int count); int RichString_appendWide(RichString* this, int attrs, const char* data);