static gboolean _GuiGtkDrawingArea_keyCallback (GuiObject widget, GdkEvent *gevent, gpointer void_me) { iam (GuiDrawingArea); trace (U"begin"); if (my d_keyCallback && gevent -> type == GDK_KEY_PRESS) { struct structGuiDrawingArea_KeyEvent event { me, 0 }; GdkEventKey *gkeyEvent = (GdkEventKey *) gevent; event. key = gkeyEvent -> keyval; /* * Translate with the help of /usr/include/gtk-2.0/gdk/gdkkeysyms.h */ if (event. key == GDK_KEY_Escape) event. key = 27; if (event. key == GDK_KEY_Left) event. key = 0x2190; if (event. key == GDK_KEY_Up) event. key = 0x2191; if (event. key == GDK_KEY_Right) event. key = 0x2192; if (event. key == GDK_KEY_Down) event. key = 0x2193; event. shiftKeyPressed = (gkeyEvent -> state & GDK_SHIFT_MASK) != 0; event. commandKeyPressed = (gkeyEvent -> state & GDK_CONTROL_MASK) != 0; event. optionKeyPressed = (gkeyEvent -> state & GDK_MOD1_MASK) != 0; event. extraControlKeyPressed = false; try { my d_keyCallback (my d_keyBoss, & event); } catch (MelderError) { Melder_flushError (U"Key press not completely handled."); } /* * FIXME: here we should empty the type-ahead buffer */ return true; } return false; // if the drawing area has no keyCallback, the system will send the key press to a text field. }
void _GuiWinDrawingArea_handleKey (GuiObject widget, TCHAR kar) { // TODO: event? iam_drawingarea; if (my d_keyCallback) { struct structGuiDrawingAreaKeyEvent event = { me, 0 }; event. key = kar; if (event. key == VK_LEFT) event. key = 0x2190; if (event. key == VK_RIGHT) event. key = 0x2192; if (event. key == VK_UP) event. key = 0x2191; if (event. key == VK_DOWN) event. key = 0x2193; event. shiftKeyPressed = GetKeyState (VK_SHIFT) < 0; // TODO: event -> key? try { my d_keyCallback (my d_keyBoss, & event); } catch (MelderError) { Melder_flushError ("Key press not completely handled."); } } }
bool _GuiMacDrawingArea_tryToHandleKey (GuiObject widget, EventRecord *macEvent) { iam_drawingarea; if (my d_keyCallback) { struct structGuiDrawingAreaKeyEvent event = { me, 0 }; event. key = macEvent -> message & charCodeMask; if (event. key == 28) event. key = 0x2190; if (event. key == 29) event. key = 0x2192; if (event. key == 30) event. key = 0x2191; if (event. key == 31) event. key = 0x2193; event. shiftKeyPressed = (macEvent -> modifiers & shiftKey) != 0; event. commandKeyPressed = (macEvent -> modifiers & cmdKey) != 0; event. optionKeyPressed = (macEvent -> modifiers & optionKey) != 0; event. extraControlKeyPressed = (macEvent -> modifiers & controlKey) != 0; try { my d_keyCallback (my d_keyBoss, & event); } catch (MelderError) { Melder_flushError ("Key press not completely handled."); } return true; } return false; }