summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Terminal.H40
-rw-r--r--src/Fl_Terminal.cxx59
2 files changed, 49 insertions, 50 deletions
diff --git a/FL/Fl_Terminal.H b/FL/Fl_Terminal.H
index ff0062000..c58a60ae5 100644
--- a/FL/Fl_Terminal.H
+++ b/FL/Fl_Terminal.H
@@ -353,7 +353,7 @@ public:
enum CharFlags {
FG_XTERM = 0x01, ///< this char's fg color is an XTERM color; can be affected by Dim+Bold
BG_XTERM = 0x02, ///< this char's bg color is an XTERM color; can be affected by Dim+Bold
- EOL = 0x04, ///< this char at end of line, used for line wrap during screen resizing
+ EOL = 0x04, ///< TODO: char at EOL, used for line re-wrap during screen resizing
RESV_A = 0x08,
RESV_B = 0x10,
RESV_C = 0x20,
@@ -405,7 +405,7 @@ protected:
//
class FL_EXPORT CharStyle {
uchar attrib_; // bold, underline..
- uchar flags_; // CharFlags
+ uchar charflags_; // CharFlags (xterm color management)
Fl_Color fgcolor_; // foreground color for text
Fl_Color bgcolor_; // background color for text
Fl_Color defaultfgcolor_; // default fg color used by ESC[0m
@@ -428,19 +428,19 @@ protected:
int fontdescent(void) const { return fontdescent_; }
int charwidth(void) const { return charwidth_; }
uchar colorbits_only(uchar inflags) const;
- void attrib(uchar val) { attrib_ = val; }
- void set_flag(uchar val) { flags_ |= val; }
- void clr_flag(uchar val) { flags_ &= ~val; }
+ void attrib(uchar val) { attrib_ = val; }
+ void set_charflag(uchar val) { charflags_ |= val; }
+ void clr_charflag(uchar val) { charflags_ &= ~val; }
void fgcolor_uchar(uchar val);
void bgcolor_uchar(uchar val);
- void fgcolor(int r,int g,int b) { fgcolor_ = (r<<24) | (g<<16) | (b<<8); clr_flag(FG_XTERM); }
- void bgcolor(int r,int g,int b) { bgcolor_ = (r<<24) | (g<<16) | (b<<8); clr_flag(BG_XTERM); }
- void fgcolor(Fl_Color val) { fgcolor_ = val; clr_flag(FG_XTERM); }
- void bgcolor(Fl_Color val) { bgcolor_ = val; clr_flag(BG_XTERM); }
- void defaultfgcolor(Fl_Color val) { defaultfgcolor_ = val; }
- void defaultbgcolor(Fl_Color val) { defaultbgcolor_ = val; }
- void fontface(Fl_Font val) { fontface_ = val; update(); }
- void fontsize(Fl_Fontsize val) { fontsize_ = val; update(); }
+ void fgcolor(int r,int g,int b) { fgcolor_ = (r<<24) | (g<<16) | (b<<8); clr_charflag(FG_XTERM); }
+ 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 defaultfgcolor(Fl_Color val) { defaultfgcolor_ = val; }
+ void defaultbgcolor(Fl_Color val) { defaultbgcolor_ = val; }
+ void fontface(Fl_Font val) { fontface_ = val; update(); }
+ void fontsize(Fl_Fontsize val) { fontsize_ = val; update(); }
void update(void);
void update_fake(void);
// SGR MODES: Set Graphics Rendition
@@ -506,11 +506,11 @@ protected:
class FL_EXPORT Utf8Char {
static const int max_utf8_ = 4; // RFC 3629 paraphrased: In UTF-8, chars are encoded with 1 to 4 octets
char text_[max_utf8_]; // memory for actual ASCII or UTF-8 byte contents
- uchar len_; // length of bytes in text_[] buffer; 1 for ASCII, >1 for UTF-8
- uchar attrib_; // attribute bits for this char (bold, underline..)
- uchar flags_; // CharFlags bits
- Fl_Color fgcolor_; // fltk fg color (supports 8color or 24bit color set w/ESC[37;<r>;<g>;<b>m)
- Fl_Color bgcolor_; // fltk bg color (supports 8color or 24bit color set w/ESC[47;<r>;<g>;<b>m)
+ uchar len_; // length of bytes in text_[] buffer; 1 for ASCII, >1 for UTF-8
+ uchar attrib_; // attribute bits for this char (bold, underline..)
+ uchar charflags_; // CharFlags (xterm colors management)
+ Fl_Color fgcolor_; // fltk fg color (supports 8color or 24bit color set w/ESC[37;<r>;<g>;<b>m)
+ Fl_Color bgcolor_; // fltk bg color (supports 8color or 24bit color set w/ESC[47;<r>;<g>;<b>m)
// Private methods
void text_utf8_(const char *text, int len);
public:
@@ -529,8 +529,8 @@ protected:
//
const char* text_utf8(void) const { return text_; }
// Return the attribute for this char
- uchar attrib(void) const { return attrib_; }
- uchar flags(void) const { return flags_; }
+ uchar attrib(void) const { return attrib_; }
+ uchar charflags(void) const { return charflags_; }
Fl_Color fgcolor(void) const;
Fl_Color bgcolor(void) const;
// Return the length of this character in bytes (UTF-8 can be multibyte..)
diff --git a/src/Fl_Terminal.cxx b/src/Fl_Terminal.cxx
index bd8f18524..95b6ef924 100644
--- a/src/Fl_Terminal.cxx
+++ b/src/Fl_Terminal.cxx
@@ -424,12 +424,11 @@ pfail:
//
Fl_Terminal::CharStyle::CharStyle(bool fontsize_defer) {
attrib_ = 0;
- flags_ = 0;
+ charflags_ = (FG_XTERM | BG_XTERM);
defaultfgcolor_ = 0xd0d0d000; // off white
defaultbgcolor_ = 0xffffffff; // special color: doesn't draw, 'shows thru' to box()
fgcolor_ = defaultfgcolor_;
bgcolor_ = defaultbgcolor_;
- flags_ |= (FG_XTERM | BG_XTERM);
fontface_ = FL_COURIER;
fontsize_ = 14;
if (!fontsize_defer) update(); // normal behavior
@@ -469,17 +468,17 @@ Fl_Color Fl_Terminal::CharStyle::bgcolor(void) const {
// Only the color bits of 'inflags' are modified with our color bits.
//
uchar Fl_Terminal::CharStyle::colorbits_only(uchar inflags) const {
- return (inflags & ~COLORMASK) | (flags_ & COLORMASK); // add color bits only
+ return (inflags & ~COLORMASK) | (charflags_ & COLORMASK); // add color bits only
}
void Fl_Terminal::CharStyle::fgcolor_uchar(uchar val) {
fgcolor_ = fltk_fg_color(val);
- set_flag(FG_XTERM);
+ set_charflag(FG_XTERM);
}
void Fl_Terminal::CharStyle::bgcolor_uchar(uchar val) {
bgcolor_ = fltk_bg_color(val);
- set_flag(BG_XTERM);
+ set_charflag(BG_XTERM);
}
///////////////////////////////////
@@ -502,23 +501,23 @@ void Fl_Terminal::Cursor::scroll(int nrows) {
// Ctor
Fl_Terminal::Utf8Char::Utf8Char(void) {
- text_[0] = ' ';
- len_ = 1;
- attrib_ = 0;
- flags_ = 0;
- fgcolor_ = 0xffffff00;
- bgcolor_ = 0xffffffff; // special color: doesn't draw, 'shows thru' to box()
+ text_[0] = ' ';
+ len_ = 1;
+ attrib_ = 0;
+ charflags_ = 0;
+ fgcolor_ = 0xffffff00;
+ bgcolor_ = 0xffffffff; // special color: doesn't draw, 'shows thru' to box()
}
// copy ctor
Fl_Terminal::Utf8Char::Utf8Char(const Utf8Char& src) {
// local instance not initialized yet; init first, then copy text
- text_[0] = ' ';
- len_ = 1;
- attrib_ = src.attrib_;
- flags_ = src.flags_;
- fgcolor_ = src.fgcolor_;
- bgcolor_ = src.bgcolor_;
+ text_[0] = ' ';
+ len_ = 1;
+ attrib_ = src.attrib_;
+ charflags_ = src.charflags_;
+ fgcolor_ = src.fgcolor_;
+ bgcolor_ = src.bgcolor_;
text_utf8_(src.text_utf8(), src.length()); // copy the src text
}
@@ -526,10 +525,10 @@ Fl_Terminal::Utf8Char::Utf8Char(const Utf8Char& src) {
Fl_Terminal::Utf8Char& Fl_Terminal::Utf8Char::operator=(const Utf8Char& src) {
// local instance is already initialized, so just change its contents
text_utf8_(src.text_utf8(), src.length()); // local copy src text
- attrib_ = src.attrib_;
- flags_ = src.flags_;
- fgcolor_ = src.fgcolor_;
- bgcolor_ = src.bgcolor_;
+ attrib_ = src.attrib_;
+ charflags_ = src.charflags_;
+ fgcolor_ = src.fgcolor_;
+ bgcolor_ = src.bgcolor_;
return *this;
}
@@ -560,10 +559,10 @@ void Fl_Terminal::Utf8Char::text_utf8(const char *text,
const CharStyle& style) {
text_utf8_(text, len); // updates text_, len_
//issue 837 // fl_font(style.fontface(), style.fontsize()); // need font to calc UTF-8 width
- attrib_ = style.attrib();
- flags_ = style.colorbits_only(flags_);
- fgcolor_ = style.fgcolor();
- bgcolor_ = style.bgcolor();
+ attrib_ = style.attrib();
+ charflags_ = style.colorbits_only(charflags_);
+ fgcolor_ = style.fgcolor();
+ bgcolor_ = style.bgcolor();
}
// Set char to single printable ASCII character 'c'
@@ -634,7 +633,7 @@ Fl_Color Fl_Terminal::Utf8Char::attr_color(Fl_Color col, const Fl_Widget *grp) c
Fl_Color Fl_Terminal::Utf8Char::attr_fg_color(const Fl_Widget *grp) const {
if (grp && (fgcolor_ == 0xffffffff)) // see thru color?
{ return grp->color(); } // return grp's color()
- return (flags_ & Fl_Terminal::FG_XTERM) // fg is an xterm color?
+ return (charflags_ & Fl_Terminal::FG_XTERM) // fg is an xterm color?
? attr_color(fgcolor(), grp) // ..use attributes
: fgcolor(); // ..ignore attributes.
}
@@ -642,7 +641,7 @@ Fl_Color Fl_Terminal::Utf8Char::attr_fg_color(const Fl_Widget *grp) const {
Fl_Color Fl_Terminal::Utf8Char::attr_bg_color(const Fl_Widget *grp) const {
if (grp && (bgcolor_ == 0xffffffff)) // see thru color?
{ return grp->color(); } // return grp's color()
- return (flags_ & Fl_Terminal::BG_XTERM) // bg is an xterm color?
+ return (charflags_ & Fl_Terminal::BG_XTERM) // bg is an xterm color?
? attr_color(bgcolor(), grp) // ..use attributes
: bgcolor(); // ..ignore attributes.
}
@@ -1191,11 +1190,11 @@ void Fl_Terminal::update_scrollbar(void) {
// Refit the display to match screen
void Fl_Terminal::refit_disp_to_screen(void) {
- int dh = h_to_row(scrn_.h());
- int dw = MAX(w_to_col(scrn_.w()), disp_cols()); // enlarge cols only
+ int dh = h_to_row(scrn_.h()); // height in rows for tty pixel height
+ int dw = MAX(w_to_col(scrn_.w()), disp_cols()); // width in cols for tty pixel width - enlarge only!
int drows = clamp(dh, 2, dh); // 2 rows minimum
int dcols = clamp(dw, 10, dw); // 10 cols minimum
- int drow_diff = drows - ring_.disp_rows(); // change in rows?
+ int drow_diff = drows - display_rows(); // change in rows?
ring_.resize(drows, dcols, hist_rows(), *current_style_);
cursor_.scroll(-drow_diff);
clear_mouse_selection();