X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/127eab18f80e5b298b8c0326609ed811035e6829..511383f91b1443d576276c826fdfd5286f9dbbdb:/src/mgl/window.cpp diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index 9d0595d88d..85f2abeee3 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -23,27 +23,28 @@ #pragma hdrstop #endif +#include "wx/window.h" + #ifndef WX_PRECOMP - #include "wx/window.h" #include "wx/msgdlg.h" #include "wx/accel.h" - #include "wx/setup.h" #include "wx/dc.h" #include "wx/dcclient.h" #include "wx/utils.h" #include "wx/app.h" #include "wx/panel.h" + #include "wx/intl.h" + #include "wx/log.h" + #include "wx/dcscreen.h" + #include "wx/menu.h" #endif #if wxUSE_DRAG_AND_DROP #include "wx/dnd.h" #endif -#include "wx/log.h" #include "wx/sysopt.h" #include "wx/mgl/private.h" -#include "wx/intl.h" -#include "wx/dcscreen.h" #include "wx/caret.h" #include @@ -72,6 +73,8 @@ static wxWindowMGL *gs_mouseCapture = NULL; // the frame that is currently active (i.e. its child has focus). It is // used to generate wxActivateEvents static wxWindowMGL *gs_activeFrame = NULL; +// track the mouse button state for wxGetMouseState() +unsigned long g_buttonState = 0; // --------------------------------------------------------------------------- // constants @@ -150,6 +153,8 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) wxPoint orig(win->GetClientAreaOrigin()); wxPoint where; + g_buttonState = e->modifiers; + MGL_wmCoordGlobalToLocal(win->GetHandle(), e->where_x, e->where_y, &where.x, &where.y); @@ -167,19 +172,19 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) event.SetTimestamp(e->when); event.m_x = where.x - orig.x; event.m_y = where.y - orig.y; - event.m_shiftDown = ( e->modifiers & EVT_SHIFTKEY ) == EVT_SHIFTKEY; - event.m_controlDown = ( e->modifiers & EVT_CTRLSTATE ) == EVT_CTRLSTATE; - event.m_altDown = ( e->modifiers & EVT_LEFTALT ) == EVT_LEFTALT; - event.m_metaDown = ( e->modifiers & EVT_RIGHTALT ) == EVT_RIGHTALT; - event.m_leftDown = ( e->modifiers & EVT_LEFTBUT ) == EVT_LEFTBUT; - event.m_middleDown = ( e->modifiers & EVT_MIDDLEBUT ) == EVT_MIDDLEBUT; - event.m_rightDown = ( e->modifiers & EVT_RIGHTBUT ) == EVT_RIGHTBUT; + event.m_shiftDown = ( e->modifiers & EVT_SHIFTKEY ) != 0; + event.m_controlDown = ( e->modifiers & EVT_CTRLSTATE ) != 0; + event.m_altDown = ( e->modifiers & EVT_LEFTALT ) != 0; + event.m_metaDown = ( e->modifiers & EVT_RIGHTALT ) != 0; + event.m_leftDown = ( e->modifiers & EVT_LEFTBUT ) != 0; + event.m_middleDown = ( e->modifiers & EVT_MIDDLEBUT ) != 0; + event.m_rightDown = ( e->modifiers & EVT_RIGHTBUT ) != 0; switch (e->what) { case EVT_MOUSEDOWN: // Change focus if the user clicks outside focused window: - if ( win->AcceptsFocus() && wxWindow::FindFocus() != win ) + if ( win->CanAcceptFocus() && wxWindow::FindFocus() != win ) win->SetFocus(); if ( e->message & EVT_DBLCLICK ) @@ -296,25 +301,25 @@ static long wxScanToKeyCode(event_t *event, bool translate) if ( translate ) { + bool numlock = (event->modifiers & EVT_NUMLOCK) != 0; + switch ( EVT_scanCode(event->message) ) { KEY (KB_padMinus, WXK_NUMPAD_SUBTRACT) KEY (KB_padPlus, WXK_NUMPAD_ADD) KEY (KB_padTimes, WXK_NUMPAD_MULTIPLY) KEY (KB_padDivide, WXK_NUMPAD_DIVIDE) - KEY (KB_padCenter, WXK_NUMPAD_SEPARATOR) // ? - KEY (KB_padLeft, WXK_NUMPAD_LEFT) - KEY (KB_padRight, WXK_NUMPAD_RIGHT) - KEY (KB_padUp, WXK_NUMPAD_UP) - KEY (KB_padDown, WXK_NUMPAD_DOWN) - KEY (KB_padInsert, WXK_NUMPAD_INSERT) - KEY (KB_padDelete, WXK_NUMPAD_DELETE) - KEY (KB_padHome, WXK_NUMPAD_HOME) - KEY (KB_padEnd, WXK_NUMPAD_END) - KEY (KB_padPageUp, WXK_NUMPAD_PAGEUP) - //KEY (KB_padPageUp, WXK_NUMPAD_PRIOR) - KEY (KB_padPageDown, WXK_NUMPAD_PAGEDOWN) - //KEY (KB_padPageDown, WXK_NUMPAD_NEXT) + KEY (KB_padCenter, numlock ? WXK_NUMPAD5 : WXK_NUMPAD_SEPARATOR) // ? + KEY (KB_padLeft, numlock ? WXK_NUMPAD4 : WXK_NUMPAD_LEFT) + KEY (KB_padRight, numlock ? WXK_NUMPAD6 : WXK_NUMPAD_RIGHT) + KEY (KB_padUp, numlock ? WXK_NUMPAD8 : WXK_NUMPAD_UP) + KEY (KB_padDown, numlock ? WXK_NUMPAD2 : WXK_NUMPAD_DOWN) + KEY (KB_padInsert, numlock ? WXK_NUMPAD0 : WXK_NUMPAD_INSERT) + KEY (KB_padDelete, numlock ? WXK_DECIMAL : WXK_NUMPAD_DELETE) + KEY (KB_padHome, numlock ? WXK_NUMPAD7 : WXK_NUMPAD_HOME) + KEY (KB_padEnd, numlock ? WXK_NUMPAD1 : WXK_NUMPAD_END) + KEY (KB_padPageUp, numlock ? WXK_NUMPAD9 : WXK_NUMPAD_PAGEUP) + KEY (KB_padPageDown, numlock ? WXK_NUMPAD3 : WXK_NUMPAD_PAGEDOWN) KEY (KB_1, '1') KEY (KB_2, '2') KEY (KB_3, '3') @@ -458,10 +463,10 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e) event.m_scanCode = 0; // not used by wx at all event.m_x = where.x; event.m_y = where.y; - event.m_shiftDown = ( e->modifiers & EVT_SHIFTKEY ) == EVT_SHIFTKEY; - event.m_controlDown = ( e->modifiers & EVT_CTRLSTATE ) == EVT_CTRLSTATE; - event.m_altDown = ( e->modifiers & EVT_LEFTALT ) == EVT_LEFTALT; - event.m_metaDown = ( e->modifiers & EVT_RIGHTALT ) == EVT_RIGHTALT; + event.m_shiftDown = ( e->modifiers & EVT_SHIFTKEY ) != 0; + event.m_controlDown = ( e->modifiers & EVT_CTRLSTATE ) != 0; + event.m_altDown = ( e->modifiers & EVT_LEFTALT ) != 0; + event.m_metaDown = ( e->modifiers & EVT_RIGHTALT ) != 0; if ( e->what == EVT_KEYUP ) { @@ -699,6 +704,11 @@ void wxWindowMGL::SetFocus() gs_activeFrame->GetEventHandler()->ProcessEvent(event); } + // notify the parent keeping track of focus for the kbd navigation + // purposes that we got it + wxChildFocusEvent eventFocus((wxWindow*)this); + GetEventHandler()->ProcessEvent(eventFocus); + wxFocusEvent event(wxEVT_SET_FOCUS, GetId()); event.SetEventObject(this); event.SetWindow((wxWindow*)oldFocusedWindow); @@ -1097,7 +1107,6 @@ void wxWindowMGL::Clear() dc.Clear(); } -#include "wx/menu.h" void wxWindowMGL::Refresh(bool eraseBack, const wxRect *rect) { if ( m_eraseBackground == -1 ) @@ -1153,7 +1162,7 @@ void wxWindowMGL::HandlePaint(MGLDevCtx *dc) { dc->setColorRGB(255,0,255); dc->fillRect(-1000,-1000,2000,2000); - wxUsleep(50); + wxMilliSleep(50); } #endif