summaryrefslogtreecommitdiff
path: root/src/Fl_Terminal.cxx
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2024-04-07 15:35:45 +0200
committerAlbrecht Schlosser <fltk@aljus.de>2024-04-09 12:53:12 +0200
commit05a95e146b2429154b360030d098f0dae5555706 (patch)
tree54ffef34dec94724be4843c3d77e24b71286bc6d /src/Fl_Terminal.cxx
parent265e5cd77b30581e7701927930d8fa887e0361df (diff)
Fix Fl_Terminal::handle_unknown_char() for plot_char() (#948)
- Add 'int Fl_Terminal::handle_unknown_char(int drow, int dcol)' to write the "unknown" character to the intended display position. - Define Fl_Terminal::unknown_char as a static variable to avoid redundancy. In the future this might be overridden by users.
Diffstat (limited to 'src/Fl_Terminal.cxx')
-rw-r--r--src/Fl_Terminal.cxx50
1 files changed, 40 insertions, 10 deletions
diff --git a/src/Fl_Terminal.cxx b/src/Fl_Terminal.cxx
index ad41f31fe..29cac10d2 100644
--- a/src/Fl_Terminal.cxx
+++ b/src/Fl_Terminal.cxx
@@ -38,6 +38,12 @@
#include "Fl_String.H"
/////////////////////////////////
+////// Static Class Data ////////
+/////////////////////////////////
+
+const char *Fl_Terminal::unknown_char = "¿";
+
+/////////////////////////////////
////// Static Functions /////////
/////////////////////////////////
@@ -2995,8 +3001,10 @@ const Fl_Terminal::Utf8Char* Fl_Terminal::utf8_char_at_glob(int grow, int gcol)
void Fl_Terminal::plot_char(const char *text, int len, int drow, int dcol) {
Utf8Char *u8c = u8c_disp_row(drow) + dcol;
// text_utf8() warns we must do invalid checks first
- if (!text || len<1 || len>u8c->max_utf8() || len!=fl_utf8len(*text))
- { handle_unknown_char(); return; }
+ if (!text || len<1 || len>u8c->max_utf8() || len!=fl_utf8len(*text)) {
+ handle_unknown_char(drow, dcol);
+ return;
+ }
u8c->text_utf8(text, len, *current_style_);
}
@@ -3019,7 +3027,10 @@ void Fl_Terminal::plot_char(const char *text, int len, int drow, int dcol) {
\see show_unknown(bool), handle_unknown_char(), is_printable()
*/
void Fl_Terminal::plot_char(char c, int drow, int dcol) {
- if (!is_printable(c)) { handle_unknown_char(); return; }
+ if (!is_printable(c)) {
+ handle_unknown_char(drow, dcol);
+ return;
+ }
Utf8Char *u8c = u8c_disp_row(drow) + dcol;
u8c->text_ascii(c, *current_style_);
}
@@ -3233,17 +3244,36 @@ void Fl_Terminal::append(const char *s, int len/*=-1*/) {
/**
Handle an unknown char by either emitting an error symbol to the tty, or do nothing,
depending on the user configurable value of show_unknown().
+
+ This writes the "unknown" character to the output stream
+ if show_unknown() is true.
+
Returns 1 if tty modified, 0 if not.
\see show_unknown()
*/
int Fl_Terminal::handle_unknown_char(void) {
- const char *unknown = "¿";
- if (show_unknown_) {
- escseq.reset(); // disable any pending esc seq to prevent eating unknown char
- print_char(unknown);
- return 1;
- }
- return 0;
+ if (!show_unknown_) return 0;
+ escseq.reset(); // disable any pending esc seq to prevent eating unknown char
+ print_char(unknown_char);
+ return 1;
+}
+
+/**
+ Handle an unknown char by either emitting an error symbol to the tty, or do nothing,
+ depending on the user configurable value of show_unknown().
+
+ This writes the "unknown" character to the display position \p (drow,dcol)
+ if show_unknown() is true.
+
+ Returns 1 if tty modified, 0 if not.
+ \see show_unknown()
+*/
+int Fl_Terminal::handle_unknown_char(int drow, int dcol) {
+ if (!show_unknown_) return 0;
+ int len = (int)strlen(unknown_char);
+ Utf8Char *u8c = u8c_disp_row(drow) + dcol;
+ u8c->text_utf8(unknown_char, len, *current_style_);
+ return 1;
}
// Handle user interactive scrolling