diff options
| author | Greg Ercolano <erco@seriss.com> | 2024-02-16 04:46:05 -0800 |
|---|---|---|
| committer | Greg Ercolano <erco@seriss.com> | 2024-02-16 04:46:05 -0800 |
| commit | 1069ebc1b65bdd2b69dddab300414f47002d3e4b (patch) | |
| tree | 378348b051e249e5f60a7eb8103b3562e08de95e | |
| parent | cc562761c2d3a589766a20cfbaefc30310bfc423 (diff) | |
Fix Fl_Terminal xterm CharStyle charflags (#909)
| -rw-r--r-- | FL/Fl_Terminal.H | 10 | ||||
| -rw-r--r-- | src/Fl_Terminal.cxx | 23 |
2 files changed, 26 insertions, 7 deletions
diff --git a/FL/Fl_Terminal.H b/FL/Fl_Terminal.H index 06a8b211f..e1ad5e91f 100644 --- a/FL/Fl_Terminal.H +++ b/FL/Fl_Terminal.H @@ -439,6 +439,8 @@ protected: void bgcolor(int r,int g,int b) { bgcolor_ = (r<<24) | (g<<16) | (b<<8); clr_charflag(BG_XTERM); } void fgcolor(Fl_Color val) { fgcolor_ = val; clr_charflag(FG_XTERM); } void bgcolor(Fl_Color val) { bgcolor_ = val; clr_charflag(BG_XTERM); } + void fgcolor_xterm(Fl_Color val) { fgcolor_ = val; set_charflag(FG_XTERM); } + void bgcolor_xterm(Fl_Color val) { bgcolor_ = val; set_charflag(BG_XTERM); } void defaultfgcolor(Fl_Color val) { defaultfgcolor_ = val; } void defaultbgcolor(Fl_Color val) { defaultbgcolor_ = val; } void fontface(Fl_Font val) { fontface_ = val; update(); } @@ -448,8 +450,10 @@ protected: // SGR MODES: Set Graphics Rendition void sgr_reset(void) { // e.g. ESC[0m attrib(Fl_Terminal::NORMAL); - fgcolor(defaultfgcolor_); - bgcolor(defaultbgcolor_); + if (charflags() & FG_XTERM) fgcolor_xterm(defaultfgcolor_); + else fgcolor(defaultfgcolor_); + if (charflags() & BG_XTERM) bgcolor_xterm(defaultbgcolor_); + else bgcolor(defaultbgcolor_); } int onoff(bool flag, Attrib a) { return (flag ? (attrib_ | a) : (attrib_ & ~a)); } void sgr_bold(bool val) { attrib_ = onoff(val, Fl_Terminal::BOLD); } // e.g. ESC[1m @@ -868,7 +872,7 @@ private: // Screen management protected: - const CharStyle& current_style(void) const; + CharStyle& current_style(void) const; void current_style(const CharStyle& sty); private: int x_to_glob_col(int X, int grow, int &gcol) const; diff --git a/src/Fl_Terminal.cxx b/src/Fl_Terminal.cxx index ce1921560..acd1b2177 100644 --- a/src/Fl_Terminal.cxx +++ b/src/Fl_Terminal.cxx @@ -1430,8 +1430,8 @@ void Fl_Terminal::display_columns(int dcols) { update_screen(false); // false: no font change ?NEED? } -/** Return current style for rendering text. */ -const Fl_Terminal::CharStyle& Fl_Terminal::current_style(void) const { +/** Return reference to internal current style for rendering text. */ +Fl_Terminal::CharStyle& Fl_Terminal::current_style(void) const { return *current_style_; } @@ -1542,6 +1542,7 @@ void Fl_Terminal::textsize(Fl_Fontsize val) { */ void Fl_Terminal::textfgcolor_xterm(uchar val) { current_style_->fgcolor(fltk_fg_color(val)); + current_style_->set_charflag(FG_XTERM); } /** @@ -1574,6 +1575,7 @@ void Fl_Terminal::textfgcolor_xterm(uchar val) { */ void Fl_Terminal::textbgcolor_xterm(uchar val) { current_style_->bgcolor(fltk_bg_color(val)); + current_style_->set_charflag(BG_XTERM); } /** @@ -1581,6 +1583,11 @@ void Fl_Terminal::textbgcolor_xterm(uchar val) { This is a convenience method that sets *both* textfgcolor() and textfgcolor_default(), ensuring both are set to the same value. + + Colors set this way will NOT be influenced by the xterm Dim/Bold color intensity attributes. + For that, use textcolor_xterm() instead. + + \see textfgcolor(Fl_Color), textfgcolor_default(Fl_Color), textbgcolor_xterm(uchar) */ void Fl_Terminal::textcolor(Fl_Color val) { textfgcolor(val); @@ -1609,6 +1616,9 @@ void Fl_Terminal::color(Fl_Color val) { Set text foreground drawing color to fltk color \p val used by any new text added. Use this for temporary color changes, similar to \<ESC\>[38;2;\<R\>;\<G\>;\<B\>m + Colors set this way will NOT be influenced by the xterm Dim/Bold color intensity + attributes. For that, use textfgcolor_xterm(uchar) instead. + This setting does _not_ affect the 'default' text colors used by \<ESC\>[0m, \<ESC\>c, reset_terminal(), etc. To change both the current _and_ default fg color, also use textfgcolor_default(Fl_Color). Example: @@ -1619,16 +1629,20 @@ void Fl_Terminal::color(Fl_Color val) { tty->textfgcolor(amber); // set 'current' fg color tty->textfgcolor_default(amber); // set 'default' fg color used by ESC[0m reset \endcode - \see textfgcolor_default(Fl_Color) + \see textfgcolor_default(Fl_Color), textfgcolor_xterm(uchar) */ void Fl_Terminal::textfgcolor(Fl_Color val) { current_style_->fgcolor(val); + current_style_->clr_charflag(FG_XTERM); } /** Set text background color to fltk color \p val used by any new text added. Use this for temporary color changes, similar to \<ESC\>[48;2;\<R\>;\<G\>;\<B\>m + Colors set this way will NOT be influenced by the xterm Dim/Bold color intensity + attributes. For that, use textbgcolor_xterm(uchar) instead. + This setting does _not_ affect the 'default' text colors used by \<ESC\>[0m, \<ESC\>c, reset_terminal(), etc. To set that too, also set textbgcolor_default(Fl_Color), e.g. \par @@ -1643,10 +1657,11 @@ void Fl_Terminal::textfgcolor(Fl_Color val) { the widget's own Fl_Group::color() show through behind the text. This special text background color is the _default_, and is what most situations need. - \see textbgcolor_default(Fl_Color) + \see textbgcolor_default(Fl_Color), textbgcolor_xterm(uchar) */ void Fl_Terminal::textbgcolor(Fl_Color val) { current_style_->bgcolor(val); + current_style_->clr_charflag(BG_XTERM); } /** |
