diff options
Diffstat (limited to 'src/drivers/Cocoa')
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H | 2 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx | 76 |
2 files changed, 78 insertions, 0 deletions
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H index 3f475a637..afcaad924 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H +++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.H @@ -39,6 +39,7 @@ class Fl_Window; +class Fl_Input; class FL_EXPORT Fl_Cocoa_Screen_Driver : public Fl_Screen_Driver { @@ -87,6 +88,7 @@ public: virtual int dnd(int use_selection); virtual int compose(int &del); virtual uchar *read_image(uchar *p, int x, int y, int w, int h, int alpha); + virtual int input_widget_handle_key(int key, unsigned mods, unsigned shift, Fl_Input *input); }; diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx index c23046e30..786bbde12 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx +++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx @@ -23,6 +23,7 @@ #include <FL/Fl.H> #include <FL/x.H> #include <FL/Fl_Graphics_Driver.H> +#include <FL/Fl_Input.H> #include <FL/fl_ask.H> #include <stdio.h> @@ -370,6 +371,81 @@ Fl_Cocoa_Screen_Driver::read_image(uchar *p, // I - Pixel buffer or NULL to all return p; } + +int Fl_Cocoa_Screen_Driver::input_widget_handle_key(int key, unsigned mods, unsigned shift, Fl_Input *input) +{ + switch (key) { + case FL_Delete: { + if (mods==0) return input->kf_delete_char_right(); // Delete (OSX-HIG,TE,SA,WOX) + if (mods==FL_CTRL) return input->kf_delete_char_right(); // Ctrl-Delete (??? TE,!SA,!WOX) + if (mods==FL_ALT) return input->kf_delete_word_right(); // Alt-Delete (OSX-HIG,TE,SA) + return 0; // ignore other combos, pass to parent + } + + case FL_Left: + if (mods==0) return input->kf_move_char_left(); // Left (OSX-HIG) + if (mods==FL_ALT) return input->kf_move_word_left(); // Alt-Left (OSX-HIG) + if (mods==FL_META) return input->kf_move_sol(); // Meta-Left (OSX-HIG) + if (mods==FL_CTRL) return input->kf_move_sol(); // Ctrl-Left (TE/SA) + return 0; // ignore other combos, pass to parent + + case FL_Right: + if (mods==0) return input->kf_move_char_right(); // Right (OSX-HIG) + if (mods==FL_ALT) return input->kf_move_word_right(); // Alt-Right (OSX-HIG) + if (mods==FL_META) return input->kf_move_eol(); // Meta-Right (OSX-HIG) + if (mods==FL_CTRL) return input->kf_move_eol(); // Ctrl-Right (TE/SA) + return 0; // ignore other combos, pass to parent + + case FL_Up: + if (mods==0) return input->kf_lines_up(1); // Up (OSX-HIG) + if (mods==FL_CTRL) return input->kf_page_up(); // Ctrl-Up (TE !HIG) + if (mods==FL_ALT) return input->kf_move_up_and_sol(); // Alt-Up (OSX-HIG) + if (mods==FL_META) return input->kf_top(); // Meta-Up (OSX-HIG) + return 0; // ignore other combos, pass to parent + + case FL_Down: + if (mods==0) return input->kf_lines_down(1); // Dn (OSX-HIG) + if (mods==FL_CTRL) return input->kf_page_down(); // Ctrl-Dn (TE !HIG) + if (mods==FL_ALT) return input->kf_move_down_and_eol(); // Alt-Dn (OSX-HIG) + if (mods==FL_META) return input->kf_bottom(); // Meta-Dn (OSX-HIG) + return 0; // ignore other combos, pass to parent + + case FL_Page_Up: + // Fl_Input has no scroll control, so instead we move the cursor by one page + // OSX-HIG recommends Alt increase one semantic unit, Meta next higher.. + if (mods==0) return input->kf_page_up(); // PgUp (OSX-HIG) + if (mods==FL_ALT) return input->kf_page_up(); // Alt-PageUp (OSX-HIG) + if (mods==FL_META) return input->kf_top(); // Meta-PageUp (OSX-HIG,!TE) + return 0; // ignore other combos, pass to parent + + case FL_Page_Down: + // Fl_Input has no scroll control, so instead we move the cursor by one page + // OSX-HIG recommends Alt increase one semantic unit, Meta next higher.. + if (mods==0) return input->kf_page_down(); // PgDn (OSX-HIG) + if (mods==FL_ALT) return input->kf_page_down(); // Alt-PageDn (OSX-HIG) + if (mods==FL_META) return input->kf_bottom(); // Meta-PageDn (OSX-HIG,!TE) + return 0; // ignore other combos, pass to parent + + case FL_Home: + if (mods==0) return input->kf_top(); // Home (OSX-HIG) + if (mods==FL_ALT) return input->kf_top(); // Alt-Home (???) + return 0; // ignore other combos, pass to parent + + case FL_End: + if (mods==0) return input->kf_bottom(); // End (OSX-HIG) + if (mods==FL_ALT) return input->kf_bottom(); // Alt-End (???) + return 0; // ignore other combos, pass to parent + + case FL_BackSpace: + if (mods==0) return input->kf_delete_char_left(); // Backspace (OSX-HIG) + if (mods==FL_CTRL) return input->kf_delete_char_left(); // Ctrl-Backspace (TE/SA) + if (mods==FL_ALT) return input->kf_delete_word_left(); // Alt-Backspace (OSX-HIG) + if (mods==FL_META) return input->kf_delete_sol(); // Meta-Backspace (OSX-HIG,!TE) + return 0; // ignore other combos, pass to parent + } + return -1; +} + // // End of "$Id$". // |
