Improve test/handle_keys.cxx

- colorize output
- improve formatting
- log status of Fl::OPTION_SIMPLE_ZOOM_SHORTCUT
This commit is contained in:
Albrecht Schlosser 2024-07-01 00:30:35 +02:00
parent 54f44d5ac9
commit d411d39092

View File

@ -35,9 +35,11 @@ Fl_Check_Button *scaling = NULL;
// Text in the headline and after clearing the terminal buffer. For alignment ...
// 1 2 3 4 5 6 7 8
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
// 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345
static const char *headline_text =
"[nnn] Event Key Name, Flags: C A S M N L Text Unicode UTF-8/hex";
"[nnn] Event Key Name, Flags: C A S M N L Text Unicode UTF-8/hex";
static const int lkn = 14; // length of key name field
// Tooltip for headline and terminal widgets
static const char *tt =
@ -101,7 +103,9 @@ struct keycode_table {
const char *get_keyname(int k, int &lg) {
static char buffer[32];
lg = 0;
if (!k) {
lg = 1;
return "0";
}
else if (k < 32) { // control character
@ -197,12 +201,15 @@ int app::print_event(int ev) {
switch(ev) {
case FL_KEYBOARD:
if (!keydown->value()) return 0;
tty->textfgcolor(FL_BLACK);
break;
case FL_KEYUP:
if (!keyup->value()) return 0;
tty->textfgcolor(FL_BLUE);
break;
case FL_SHORTCUT:
if (!shortcut->value()) return 0;
tty->textfgcolor(0x00aa0000); // dark green
break;
default:
return 0;
@ -231,11 +238,16 @@ int app::handle(int ev) {
char numlk = (Fl::event_state() & FL_NUM_LOCK) ? 'N' : '.';
char capslk = (Fl::event_state() & FL_CAPS_LOCK) ? 'L' : '.';
tty->printf("%06x ", ekey); // event key number (hex)
int lg = 0;
char ekns[12]; // event key (hex) as string
sprintf(ekns, "0x%04x", ekey); // may be up to 10 chars
tty->printf("%10s ", ekns); // event key number (hex)
tty->printf("%s", get_keyname(ekey, lg));
for (int i = lg; i < 14; i++) {
tty->printf(" ");
if (lg < lkn) {
for (int i = 0; i < lkn - lg; i++) {
tty->append_ascii(" ");
}
}
tty->printf("%c %c %c %c %c %c ", ctrl, alt, shift, meta, numlk, capslk);
@ -254,6 +266,7 @@ int app::handle(int ev) {
} else {
tty->printf("'' ");
}
tty->textfgcolor(FL_BLACK);
tty->printf("\n");
return res;
} // app::handle()
@ -302,6 +315,12 @@ void toggle_cb(Fl_Widget *w, void *) {
void toggle_scaling(Fl_Widget *w, void *v) {
int toggle = ((Fl_Button*)w)->value() ? 1 : 0;
Fl::keyboard_screen_scaling(toggle);
if (toggle) {
Terminal *tty = ((app *)w->window())->tty;
int simple_zoom = Fl::option(Fl::OPTION_SIMPLE_ZOOM_SHORTCUT);
tty->printf("GUI-Scaling = %s, OPTION_SIMPLE_ZOOM_SHORTCUT = %s\n",
toggle ? "ON" : "OFF", simple_zoom ? "ON" : "OFF");
}
toggle_cb(w, v); // give focus to 'app'
}
@ -319,7 +338,7 @@ int main(int argc, char **argv) {
// Set an appropriate font for Wine on Linux (test only).
// This is very likely not necessary on a real Windows system
#if (1) // test/experimental for wine on Linux (maybe missing fonts)
#if (0) // test/experimental for wine on Linux (maybe missing fonts)
#ifdef _WIN32
// Fl::set_font(FL_COURIER, " DejaVu Sans Mono"); // DejaVu Mono
// Fl::set_font(FL_COURIER, "BNimbus Mono PS"); // Nimbus Mono PS bold
@ -331,6 +350,7 @@ int main(int argc, char **argv) {
app *win = new app(0, 0, WW, WH);
win->tty->box(FL_DOWN_BOX);
win->tty->show_unknown(true);
win->tty->textfgcolor(FL_BLACK);
win->tty->printf("Please press any key ...\n");
Fl_Grid *grid = new Fl_Grid(0, WH - 75, WW, 75);