Added textcolor() and color(), doc fixes.

textcolor() needed for consistency, color() behavior documented.

Both added to the test/terminal app.

Elaborated on the special background "see through" color value + behavior,
tested with color() in test/terminal app.
This commit is contained in:
Greg Ercolano 2023-11-14 12:23:23 -08:00
parent 155909ec30
commit 605328e045
3 changed files with 231 additions and 172 deletions

View File

@ -250,6 +250,10 @@
- The printf() and vprintf() functions are limited to strings no longer than
1024 characters (including NULL). For printing longer strings, use append()
which has no string limits.
\par
- For background colors textbgcolor() and textbgcolor_default(), the special
color value 0xffffffff lets the widget's box() color() show through behind
the text.
**/
class Fl_Terminal : public Fl_Group {
@ -953,6 +957,8 @@ public:
// API: Text font/size/color
void textfont(Fl_Font val);
void textsize(Fl_Fontsize val);
void textcolor(Fl_Color val);
void color(Fl_Color val);
void textfgcolor(Fl_Color val);
void textbgcolor(Fl_Color val);
void textfgcolor_default(Fl_Color val);
@ -961,6 +967,10 @@ public:
Fl_Font textfont(void) const { return current_style_.fontface(); }
/// Return text font size used to draw all text in the terminal.
Fl_Fontsize textsize(void) const { return current_style_.fontsize(); }
// Return base widget Fl_Group's box() color()
Fl_Color color(void) const { return Fl_Group::color(); }
// Return textcolor(). This is a convenience method that returns textfgcolor_default()
Fl_Color textcolor(void) const { return textfgcolor_default(); }
/// Return text's current foreground color.
Fl_Color textfgcolor(void) const { return current_style_.fgcolor(); }
/// Return text's current background color.

View File

@ -603,7 +603,7 @@ int Fl_Terminal::Utf8Char::pwidth_int(void) const {
// influenced by the attribute bits /if/ \p col matches the \p grp widget's own color().
//
Fl_Color Fl_Terminal::Utf8Char::attr_color(Fl_Color col, const Fl_Widget *grp) const {
// Don't modify color if it's the special 'see thru' color 0x0 or widget's color()
// Don't modify color if it's the special 'see thru' color 0xffffffff or widget's color()
if (grp && ((col == 0xffffffff) || (col == grp->color()))) return grp->color();
switch (attrib_ & (Fl_Terminal::BOLD|Fl_Terminal::DIM)) {
case 0: return col; // not bold or dim? no change
@ -1445,7 +1445,36 @@ void Fl_Terminal::textbgcolor_xterm(uchar val) {
}
/**
Set text foreground drawing color to fltk color \p val.
Set the text color for the terminal.
This is a convenience method that sets *both* textfgcolor() and textfgcolor_default(),
ensuring both are set to the same value.
*/
void Fl_Terminal::textcolor(Fl_Color val) {
textfgcolor(val);
textfgcolor_default(val);
}
/**
Sets the background color for the terminal's Fl_Group::box().
If the textbgcolor() and textbgcolor_default() are set to the special
"see through" color 0xffffffff when any text was added, changing color()
affects the color that shows through behind that existing text.
Otherwise, whatever specific background color was set for existing text
will persist after changing color().
To see the effects of a change to color(), follow up with a call to redraw().
The default value is 0x0.
*/
void Fl_Terminal::color(Fl_Color val) {
Fl_Group::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
This setting does _not_ affect the 'default' text colors used by \<ESC\>[0m,
@ -1465,12 +1494,11 @@ void Fl_Terminal::textfgcolor(Fl_Color val) {
}
/**
Set text background color to fltk color \p val.
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
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 bg color, also use textbgcolor_default(Fl_Color). Example:
\<ESC\>c, reset_terminal(), etc. To set that too, also set textbgcolor_default(Fl_Color), e.g.
\par
\code
// Set both 'current' and 'default' colors
@ -1479,6 +1507,10 @@ void Fl_Terminal::textfgcolor(Fl_Color val) {
tty->textbgcolor_default(darkamber); // set 'default' bg color used by ESC[0m reset
\endcode
The special color value 0xffffffff (all ff's) is the "see through" color, which lets
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)
*/
void Fl_Terminal::textbgcolor(Fl_Color val) {
@ -1489,8 +1521,7 @@ void Fl_Terminal::textbgcolor(Fl_Color val) {
Set the default text foreground color used by \c \<ESC\>c, \c \<ESC\>[0m,
and reset_terminal().
Does not affect the 'current' text fg color; use textfgcolor(Fl_Color) to
set that.
Does not affect the 'current' text foreground color; use textfgcolor(Fl_Color) to set that.
\see textfgcolor(Fl_Color)
*/
@ -1499,11 +1530,14 @@ void Fl_Terminal::textfgcolor_default(Fl_Color val) {
}
/**
Set the default text background color used by \c \<ESC\>c, \c \<ESC\>[0m,
and reset_terminal().
Set the default text background color used by any new text added
after a reset (\c \<ESC\>c, \c \<ESC\>[0m, or reset_terminal()).
Does not affect the 'current' text fg color; use textbgcolor(Fl_Color) to
set that.
Does not affect the 'current' text background color; use textbgcolor(Fl_Color) to set that.
The special color value 0xffffffff (all ff's) is the "see through" color, which lets
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(Fl_Color)
*/
@ -2240,8 +2274,8 @@ void Fl_Terminal::handle_SGR(void) { // ESC[...m?
case 0:
// RGB mode values?
switch (val) {
case 38: // fg RGB mode? e.g. ESC[38;2;<R>;<G>;<B>m
case 48: // bg RGB mode? e.g. ESC[48;2;<R>;<G>;<B>m
case 38: // fg RGB mode? e.g. ESC[38;2;<R>;<G>;<B>m
case 48: // bg RGB mode? e.g. ESC[48;2;<R>;<G>;<B>m
rgbmode = 1;
rgbcode = val;
continue;
@ -2943,7 +2977,7 @@ Fl_Terminal::Fl_Terminal(int X,int Y,int W,int H,const char*L) : Fl_Group(X,Y,W,
vscroll_->callback(scrollbar_cb, (void*)this);
resizable(0);
Fl_Group::box(FL_DOWN_FRAME);
color(0x0); // black bg by default
Fl_Group::color(0x0); // black bg by default
update_screen(true); // update internal vars after setting screen size/font
clear_screen_home(); // clear screen, home cursor
clear_history(); // clear history buffer
@ -3030,8 +3064,8 @@ void Fl_Terminal::draw_row_bg(int grow, int X, int Y) const {
: (u8c->attrib() & Fl_Terminal::INVERSE) // Inverse mode?
? u8c->attr_fg_color(this) // ..use fg color for bg
: u8c->attr_bg_color(this); // ..use bg color for bg
// Draw only if color != 0x0 ('show through' color) or widget's own color().
if (bg_col != 0xffffffff && bg_col != color()) {
// Draw only if color != 0xffffffff ('see through' color) or widget's own color().
if (bg_col != 0xffffffff && bg_col != Fl_Group::color()) {
fl_color(bg_col);
fl_rectf(X, bg_y, pwidth, bg_h);
}
@ -3133,7 +3167,7 @@ void Fl_Terminal::draw(void) {
// FL_XXX_FRAME types allow Fl_Terminal to have a /flat/ background.
// FL_XXX_BOX types inherit Fl::scheme() which can provide unwanted gradients.
//
fl_color(color());
fl_color(Fl_Group::color());
// Draw flat field (inside border drawn by Fl_Group::draw() above)
int X = x() + Fl::box_dx(box());
int Y = y() + Fl::box_dy(box());

View File

@ -1267,7 +1267,7 @@ test_firstpage(false);} {}
}
Function {show_colorbars()} {
comment {Show colorbars in terminal
} return_type void
} open return_type void
} {
code {// If cursor floating, do a crlf first
if (G_tty->cursor_col()!=0) G_tty->append("\\n");
@ -1321,8 +1321,8 @@ G_tty->append("\\033[2J\\033[H");
}
}
// Restore fg/bg colors
G_tty->textfgcolor(fgsave );
G_tty->textbgcolor(bgsave );} {}
G_tty->textfgcolor(fgsave);
G_tty->textbgcolor(bgsave);} {}
}
Function {unicode_alignment()} {
comment {Show unicode alignment test
@ -1396,6 +1396,16 @@ G_tty->append_ascii("\\033[33;2m<<END_OF_OUTPUT>>\\033[0m\\n");
G_tty->redraw();} {}
}
decl {////// GUI LAYOUT //////} {private local
}
Function {parse_color(const char *val_str, Fl_Color &col)} {
comment {Parse color in 'val_str', returns 0 and color in 'col', or -1 on error} return_type int
} {
code {unsigned long ival;
if (sscanf(val_str, "\#%lx", &ival) == 1 ) { col = Fl_Color(ival); return 0; }
if (sscanf(val_str, "%ld", &ival) == 1 ) { col = Fl_Color(ival); return 0; }
fl_alert("Illegal color value '%s'\\n(can be e.g. '12' or '\#0c', etc)", val_str);
return -1;} {}
}
Function {update_inputs()} {
comment {Resync the inputs with widget's values} return_type void
@ -1443,17 +1453,24 @@ switch ( G_tty->box() ) {
// color()
{
char s[80];
sprintf(s, "\#%08x", G_tty->color());
color_input->value(s);
sprintf(s, "\#%08x", G_tty->color()); color_input->value(s);
}
// textcolor()
{
char s[80];
sprintf(s, "\#%08x", G_tty->textcolor()); textcolor_input->value(s);
}
// textfg/bgcolor()
{
char s[80];
sprintf(s, "\#%08x", G_tty->textfgcolor());
textfgcolor_input->value(s);
sprintf(s, "\#%08x", G_tty->textbgcolor());
textbgcolor_input->value(s);
sprintf(s, "\#%08x", G_tty->textfgcolor()); textfgcolor_input->value(s);
sprintf(s, "\#%08x", G_tty->textbgcolor()); textbgcolor_input->value(s);
// defaults
sprintf(s, "\#%08x", G_tty->textfgcolor_default()); textfgcolor_default_input->value(s);
sprintf(s, "\#%08x", G_tty->textbgcolor_default()); textbgcolor_default_input->value(s);
}
// cursorfg/bg color
@ -1477,10 +1494,8 @@ switch ( G_tty->box() ) {
// selectionfg/bgcolor()
{
char s[80];
sprintf(s, "\#%08x", G_tty->selectionfgcolor());
selectionfgcolor_input->value(s);
sprintf(s, "\#%08x", G_tty->selectionbgcolor());
selectionbgcolor_input->value(s);
sprintf(s, "\#%08x", G_tty->selectionfgcolor()); selectionfgcolor_input->value(s);
sprintf(s, "\#%08x", G_tty->selectionbgcolor()); selectionbgcolor_input->value(s);
}} {}
}
Function {make_window()} {open
@ -1488,26 +1503,26 @@ switch ( G_tty->box() ) {
Fl_Window win {
label {Fl_Terminal Test}
callback {exit(0);} open
xywh {626 129 772 863} type Double visible
xywh {626 129 857 838} type Double visible
} {
Fl_Spinner scrollhistory_input {
label {Scroll History}
callback {int val = int(scrollhistory_input->value() + .5);
G_tty->history_rows(val);}
tooltip {Scrollback history size.
10,000 max.} xywh {115 10 115 20} labelsize 12 minimum 0 maximum 10000 textsize 12
10,000 max.} xywh {109 10 115 20} labelsize 10 minimum 0 maximum 10000 textsize 10
}
Fl_Spinner fontsize_input {
label {Font Size}
callback {int val = int(fontsize_input->value() + .5);
G_tty->textsize(val);}
xywh {115 38 115 20} labelsize 12 textsize 12
xywh {109 38 115 20} labelsize 10 textsize 10
}
Fl_Spinner scrollbarsize_input {
label {Scrollbar Size}
callback {int val = int(scrollbarsize_input->value() + .5);
G_tty->scrollbar_size(val); G_tty->redraw();}
tooltip {Size of scrollbar width in pixels} xywh {115 67 115 20} labelsize 12 textsize 12
tooltip {Size of scrollbar width in pixels} xywh {109 67 115 20} labelsize 10 textsize 10
}
Fl_Spinner redraw_rate_spinner {
label {Min Redraw Time}
@ -1515,16 +1530,16 @@ G_tty->scrollbar_size(val); G_tty->redraw();}
//printf("Setting redraw rate to %.2f\\n", rate);
G_tty->redraw_rate(rate);}
tooltip {Minimum time between redraws
Default is 0.10 secs.} xywh {115 94 115 20} type Float labelsize 12 minimum 0.05 maximum 5 step 0.1 textsize 12
Default is 0.10 secs.} xywh {109 94 115 20} type Float labelsize 10 minimum 0.05 maximum 5 step 0.1 textsize 10
}
Fl_Choice scheme_widget {
label scheme open
tooltip Scheme xywh {115 120 115 23} down_box BORDER_BOX labelsize 12 textsize 12
tooltip Scheme xywh {109 120 115 20} down_box BORDER_BOX labelsize 10 textsize 10
class Fl_Scheme_Choice
} {}
Fl_Choice box_choice {
label {box()} open
tooltip {The border box for the Fl_Terminal} xywh {115 147 115 23} down_box BORDER_BOX labelsize 12 textsize 12
tooltip {The border box for the Fl_Terminal} xywh {109 147 115 20} down_box BORDER_BOX labelsize 10 textsize 10
} {
MenuItem {} {
label FL_UP_FRAME
@ -1606,64 +1621,6 @@ G_tty->redraw();}
xywh {10 10 100 20} labelsize 8
}
}
Fl_Input selectionfgcolor_input {
label {selectionfgcolor()}
callback {ulong ival;
const char *val_str = selectionfgcolor_input->value();
if (sscanf(val_str, "\#%lx", &ival) != 1)
if (sscanf(val_str, "%ld", &ival) != 1) {
fl_alert("Illegal color value (can be e.g. '12' or '\#0c', etc)");
update_inputs();
return;
}
G_tty->selectionfgcolor(Fl_Color(ival));
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The mouse selection foreground color.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {115 185 115 20} labelsize 10 when 28 textfont 4 textsize 12
}
Fl_Input selectionbgcolor_input {
label {selectionbgcolor()}
callback {ulong ival;
const char *val_str = selectionbgcolor_input->value();
if (sscanf(val_str, "\#%lx", &ival) != 1)
if (sscanf(val_str, "%ld", &ival) != 1) {
fl_alert("Illegal color value (can be e.g. '12' or '\#0c', etc)");
update_inputs();
return;
}
G_tty->selectionbgcolor(Fl_Color(ival));
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The mouse selection background color.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {115 210 115 20} labelsize 10 when 28 textfont 4 textsize 12
}
Fl_Check_Button showunknown_radio {
label {show_unknown()}
callback {G_tty->show_unknown(showunknown_radio->value() ? true : false);
G_tty->redraw();}
tooltip {Shows unknown escape sequences/unprintable chars as "¿" character} xywh {255 9 105 22} down_box DOWN_BOX labelsize 10
}
Fl_Check_Button interactivecursor_radio {
label {Interactive Cursor}
callback {bool val = interactivecursor_radio->value() ? true : false;
G_tty->interactive_cursor(val);}
tooltip {Allow Up/Dn/Lt/Rt keys to move cursor
when terminal has focus} xywh {365 9 125 22} down_box DOWN_BOX labelsize 10
}
Fl_Check_Button ansi_radio {
label {ansi()}
callback {G_tty->ansi(ansi_radio->value() ? true : false);}
tooltip {Handle ANSI/xterm escape sequences} xywh {255 30 95 20} down_box DOWN_BOX labelsize 10
}
Fl_Check_Button stdout_radio {
label {Echo tests to stdout}
tooltip {Also send test output to stdout} xywh {365 28 121 20} down_box DOWN_BOX labelsize 10
}
Fl_Box {} {
label {Lt, Rt, Top, Bot}
xywh {345 50 145 20} labelsize 10
}
Fl_Input margins_input {
label Margins
callback {int lt,rt,top,bot;
@ -1677,92 +1634,150 @@ G_tty->margin_right(rt);
G_tty->margin_top(top);
G_tty->margin_bottom(bot);
G_tty->redraw();}
xywh {345 70 145 20} labelsize 12 when 28 textsize 12
xywh {110 187 114 20} labelsize 10 when 28 textsize 10
}
Fl_Input color_input {
label {color()}
callback {ulong ival;
const char *val_str = color_input->value();
if (sscanf(val_str, "\#%lx", &ival) != 1)
if (sscanf(val_str, "%ld", &ival) != 1) {
fl_alert("Illegal color value (can be e.g. '12' or '\#0c', etc)");
update_inputs();
return;
}
G_tty->color(Fl_Color(ival));
Fl_Check_Button showunknown_radio {
label {show_unknown()}
callback {G_tty->show_unknown(showunknown_radio->value() ? true : false);
G_tty->redraw();}
tooltip {Shows unknown escape sequences/unprintable chars as "¿" character} xywh {331 7 105 20} down_box DOWN_BOX labelsize 9
}
Fl_Check_Button interactivecursor_radio {
label {Interactive Cursor}
callback {bool val = interactivecursor_radio->value() ? true : false;
G_tty->interactive_cursor(val);}
tooltip {Allow Up/Dn/Lt/Rt keys to move cursor
when terminal has focus} xywh {473 7 125 20} down_box DOWN_BOX labelsize 9
}
Fl_Check_Button ansi_radio {
label {ansi()}
callback {G_tty->ansi(ansi_radio->value() ? true : false);}
tooltip {Handle ANSI/xterm escape sequences} xywh {331 27 95 20} down_box DOWN_BOX labelsize 9
}
Fl_Check_Button stdout_radio {
label {Echo tests to stdout}
tooltip {Also send test output to stdout} xywh {473 27 121 20} down_box DOWN_BOX labelsize 9
}
Fl_Box {} {
label {Lt, Rt, Top, Bot}
xywh {110 172 114 15} labelsize 10
}
Fl_Input textcolor_input {
label {textcolor()}
callback {Fl_Color c;
if (parse_color(textcolor_input->value(), c) == -1 ) return;
G_tty->textcolor(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The widget's background color()
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {345 95 145 20} labelsize 12 when 28 textfont 4 textsize 12
tooltip {The widget's text color. Has the effect of simultaneously setting:
> textfgcolor()
>textfgcolor_default()
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {333 55 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input textfgcolor_input {
label {textfgcolor()}
callback {ulong ival;
const char *val_str = textfgcolor_input->value();
if (sscanf(val_str, "\#%lx", &ival) != 1)
if (sscanf(val_str, "%ld", &ival) != 1) {
fl_alert("Illegal color value (can be e.g. '12' or '\#0c', etc)");
update_inputs();
return;
}
G_tty->textfgcolor(Fl_Color(ival));
G_tty->textfgcolor_default(Fl_Color(ival));
callback {Fl_Color c;
if (parse_color(textfgcolor_input->value(), c) == -1 ) return;
G_tty->textfgcolor(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The text foreground color.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {345 120 145 20} labelsize 12 when 28 textfont 4 textsize 12
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {333 79 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input textbgcolor_input {
label {textbgcolor()}
callback {ulong ival;
const char *val_str = textbgcolor_input->value();
if (sscanf(val_str, "\#%lx", &ival) != 1)
if (sscanf(val_str, "%ld", &ival) != 1) {
fl_alert("Illegal color value (can be e.g. '12' or '\#0c', etc)");
update_inputs();
return;
}
G_tty->textbgcolor(Fl_Color(ival));
G_tty->textbgcolor_default(Fl_Color(ival));
Fl_Input textfgcolor_default_input {
label {textfgcolor_default()}
callback {Fl_Color c;
if (parse_color(textfgcolor_default_input->value(), c) == -1 ) return;
G_tty->textfgcolor_default(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The text background color.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {345 145 145 20} labelsize 12 when 28 textfont 4 textsize 12
tooltip {The text foreground default color.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {333 103 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input cursorfgcolor_input {
label {cursorfgcolor()}
callback {ulong ival;
const char *val_str = cursorfgcolor_input->value();
if (sscanf(val_str, "\#%lx", &ival) != 1)
if (sscanf(val_str, "%ld", &ival) != 1) {
fl_alert("Illegal color value (can be e.g. '12' or '\#0c', etc)");
update_inputs();
return;
}
G_tty->cursorfgcolor(Fl_Color(ival));
callback {Fl_Color c;
if (parse_color(cursorfgcolor_input->value(), c) == -1 ) return;
G_tty->cursorfgcolor(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {Foreground color for text under the cursor.} xywh {345 170 145 20} labelsize 12 when 28 textfont 4 textsize 12
tooltip {Foreground color for text under the cursor.} xywh {333 127 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input selectionfgcolor_input {
label {selectionfgcolor()}
callback {Fl_Color c;
if (parse_color(selectionfgcolor_input->value(), c) == -1 ) return;
G_tty->selectionfgcolor(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The mouse selection foreground color.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {333 151 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input color_input {
label {color()}
callback {Fl_Color c;
if (parse_color(color_input->value(), c) == -1 ) return;
G_tty->color(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The widget's background color().
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {521 55 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input textbgcolor_input {
label {textbgcolor()}
callback {Fl_Color c;
if (parse_color(textbgcolor_input->value(), c) == -1 ) return;
G_tty->textbgcolor(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The text background color.
Refer to the docs for the special value 0xffffffff.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {521 79 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input textbgcolor_default_input {
label {textbgcolor_default()}
callback {Fl_Color c;
if (parse_color(textbgcolor_default_input->value(), c) == -1 ) return;
G_tty->textbgcolor_default(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();} selected
tooltip {The text background default color.
Refer to the docs for the special value 0xffffffff.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {521 103 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input cursorbgcolor_input {
label {cursorbgcolor()}
callback {ulong ival;
const char *val_str = cursorbgcolor_input->value();
if (sscanf(val_str, "\#%lx", &ival) != 1)
if (sscanf(val_str, "%ld", &ival) != 1) {
fl_alert("Illegal color value (can be e.g. '12' or '\#0c', etc)");
update_inputs();
return;
}
G_tty->cursorbgcolor(Fl_Color(ival));
callback {Fl_Color c;
if (parse_color(cursorbgcolor_input->value(), c) == -1 ) return;
G_tty->cursorbgcolor(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {Background color for the cursor.
This is the cursor block's color} xywh {345 195 145 20} labelsize 12 when 28 textfont 4 textsize 12
This is the cursor block's color} xywh {521 127 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Input selectionbgcolor_input {
label {selectionbgcolor()}
callback {Fl_Color c;
if (parse_color(selectionbgcolor_input->value(), c) == -1 ) return;
G_tty->selectionbgcolor(c);
update_inputs();
//DEBUG ::printf("IVAL is %08lx\\n",ival);
G_tty->redraw();}
tooltip {The mouse selection background color.
Can be decimal (e.g. 12) or hex (e.g. \#0c, \#0000000c, etc)} xywh {521 151 77 20} labelsize 9 when 28 textfont 4 textsize 9
}
Fl_Choice {} {
label {Terminal Color}
xywh {345 220 145 20} down_box BORDER_BOX labelsize 12 textsize 12
xywh {364 187 145 20} down_box BORDER_BOX labelsize 12 textsize 12
} {
MenuItem {} {
label {White on DarkAmber}
@ -1812,7 +1827,7 @@ add_lines(50);}
}
Fl_Group {} {
label {Terminal Ops}
xywh {505 15 120 210} box ENGRAVED_FRAME labelsize 11
xywh {608 21 115 210} box ENGRAVED_FRAME labelsize 11
} {
Fl_Button {} {
label {Clear Screen}
@ -1821,31 +1836,31 @@ G_tty->redraw();
// Reset the 'Add +50' line counter to 1
G_lines = 1;}
tooltip {Clear terminal screen.
Moves what was on the screen to the scroll history.} xywh {520 31 90 25} labelsize 11
Moves what was on the screen to the scroll history.} xywh {620 37 90 25} labelsize 11
}
Fl_Button {} {
label {Clear History}
callback {G_tty->append("\\033[3J"); // clr history
G_tty->redraw();}
tooltip {Clear scrollback history.} xywh {520 62 90 25} labelsize 11
tooltip {Clear scrollback history.} xywh {620 68 90 25} labelsize 11
}
Fl_Button {} {
label {Reset Terminal}
callback {G_tty->append("\\033c"); // reset terminal
G_tty->redraw();}
tooltip {Reset terminal.
Clears: screen, history, sets default tabstops, etc.} xywh {520 93 90 25} labelsize 11
Clears: screen, history, sets default tabstops, etc.} xywh {620 99 90 25} labelsize 11
}
Fl_Button {} {
label {Home Cursor}
callback {G_tty->append("\\033[H");}
tooltip {Moves cursor to home position (top/left) using ESC[H} xywh {520 124 90 25} labelsize 11
tooltip {Moves cursor to home position (top/left) using ESC[H} xywh {620 130 90 25} labelsize 11
}
Fl_Button {} {
label {Speed Test}
callback {speed_test();}
tooltip {Runs a full screen random chars/colors
Shortcut: S} xywh {520 155 90 25} shortcut 0x73 labelsize 11
Shortcut: S} xywh {620 161 90 25} shortcut 0x73 labelsize 11
}
Fl_Button {} {
label {Ring Debug}
@ -1858,50 +1873,50 @@ if (scrollhistory_input->value() > 35) {
// Show debug window
G_tty->show_ring_debug_window();}
tooltip {Show the Fl_Terminal raw ring buffer contents.
(Warning: This slows the UI and uses continuous cpu until closed)} xywh {520 187 90 25} labelsize 11
(Warning: This slows the UI and uses continuous cpu until closed)} xywh {620 193 90 25} labelsize 11
}
}
Fl_Group {} {
label {Terminal Tests}
xywh {640 15 120 210} box ENGRAVED_FRAME labelsize 11
xywh {731 21 115 210} box ENGRAVED_FRAME labelsize 11
} {
Fl_Button {} {
label {Unicode
Alignment}
callback {unicode_alignment();}
tooltip {Show a Unicode screen alignment test
Checks that troublesome Unicode chars don't cause misalignment} xywh {655 25 90 30} labelsize 9
Checks that troublesome Unicode chars don't cause misalignment} xywh {742 31 90 30} labelsize 9
}
Fl_Button {} {
label {+50 Lines}
callback {add_lines(50);}
tooltip {Add 50 lines of text to terminal.
Tests screen history, scrollup} xywh {655 60 90 30} labelsize 9
Tests screen history, scrollup} xywh {742 66 90 30} labelsize 9
}
Fl_Button {} {
label {Color Bars}
callback {show_colorbars();}
tooltip {Show colorbar test
Tests API for setting colors
Does *NOT* use ESC codes} xywh {655 95 90 30} labelsize 11
Does *NOT* use ESC codes} xywh {742 101 90 30} labelsize 11
}
Fl_Box {} {
label {Self Tests}
xywh {655 167 90 15} labelsize 10
xywh {746 173 90 15} labelsize 10
}
Fl_Button {} {
label {@<<}
callback {NextEscapeTest(-1);}
comment {Move to previous test}
tooltip {Reverse through the ESC code self tests
Shortcut: SHIFT+E} xywh {655 185 40 30} shortcut 0x10065 labelsize 11
Shortcut: SHIFT+E} xywh {742 191 40 30} shortcut 0x10065 labelsize 11
}
Fl_Button {} {
label {@>>}
callback {NextEscapeTest(1);}
comment {Move to next test}
tooltip {Advance through the ESC code self tests
Shortcut: 'e'} xywh {705 185 40 30} shortcut 0x65 labelsize 11
Shortcut: 'e'} xywh {792 191 40 30} shortcut 0x65 labelsize 11
}
}
Fl_Input showfile_input {
@ -1915,7 +1930,7 @@ showfile_input->activate();
command_input->activate();
Fl::focus(showfile_input); // return focus
win->redraw();}
tooltip {Type in the pathname of a file to cat to the screen} xywh {109 250 650 25} labelsize 12 when 10 textfont 4
tooltip {Type in the pathname of a file to cat to the screen} xywh {109 238 737 25} labelsize 12 when 10 textfont 4
}
Fl_Input command_input {
label Command
@ -1930,10 +1945,10 @@ Fl::focus(command_input); // return focus
win->redraw();}
tooltip {Command to run.
Hit ENTER to run command.
The command's stdout will appear in terminal.} xywh {109 285 650 25} labelsize 12 when 12 textfont 4
The command's stdout will appear in terminal.} xywh {109 269 737 25} labelsize 12 when 12 textfont 4
}
Fl_Group tty {open
xywh {10 320 750 530} box DOWN_FRAME color 0
xywh {10 302 836 524} box DOWN_FRAME color 0
class MyTerminal
} {}
}