X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6e348b12dcc7f994da8c2552b80d60140578a745..11d1adbfda13e56736ef62d07a7220134e62c5e5:/src/os2/window.cpp diff --git a/src/os2/window.cpp b/src/os2/window.cpp index e99ecaa4d2..df354d8733 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -294,17 +294,11 @@ bool wxWindowOS2::OS2Command( void wxWindowOS2::Init() { - // - // Generic - // - InitBase(); - // // PM specific // m_bWinCaptured = FALSE; - m_isBeingDeleted = FALSE; m_fnOldWndProc = NULL; m_bUseCtl3D = FALSE; m_bMouseInWindow = FALSE; @@ -362,9 +356,6 @@ wxWindowOS2::~wxWindowOS2() DestroyChildren(); - if (m_parent) - m_parent->RemoveChild(this); - if (m_hWnd) { if(!::WinDestroyWindow(GetHWND())) @@ -691,81 +682,11 @@ void wxWindowOS2::WarpPointer( ::WinSetPointerPos(HWND_DESKTOP, (LONG)nX, (LONG)(nY)); } // end of wxWindowOS2::WarpPointer -#if WXWIN_COMPATIBILITY -void wxWindowOS2::OS2DeviceToLogical (float *x, float *y) const -{ -} -#endif // WXWIN_COMPATIBILITY // --------------------------------------------------------------------------- // scrolling stuff // --------------------------------------------------------------------------- -#if WXWIN_COMPATIBILITY -void wxWindowOS2::SetScrollRange( - int nOrient -, int nRange -, bool bRefresh -) -{ - int nRange1 = nRange; - int nPageSize = GetScrollPage(nOrient); - - if (nPpageSize > 1 && nRange > 0) - { - nRange1 += (nPageSize - 1); - } - - if (nOrient == wxHORIZONTAL) - { - ::WinSendMsg(m_hWndScrollBarHorz, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, (SHORT)nRange1)); - ::WinSendMsg(m_hWndScrollBarHorz, SBM_SETTHUMBSIZE, MPFROM2SHORT((SHORT)nThumbVisible, (SHORT)nRange1), (MPARAM)0); - } - else - { - ::WinSendMsg(m_hWndScrollBarVert, SBM_SETSCROLLBAR, (MPARAM)0, MPFROM2SHORT(0, (SHORT)nRange1)); - ::WinSendMsg(m_hWndScrollBarVert, SBM_SETTHUMBSIZE, MPFROM2SHORT((SHORT)nThumbVisible, (SHORT)nRange1), (MPARAM)0); - } -} // end of wxWindowOS2::SetScrollRange - -void wxWindowOS2::SetScrollPage( - int nOrient -, int nPage -, bool bRefresh -) -{ - if (nOrient == wxHORIZONTAL ) - m_nXThumbSize = nPage; - else - m_nYThumbSize = nPage; -} // end of wxWindowOS2::SetScrollPage - -int wxWindowOS2::OldGetScrollRange( - int nOrient -) const -{ - MRESULT mRc; - HWND hWnd = GetHwnd(); - - if (hWnd) - { - mRc = WinSendMsg(hWnd, SBM_QUERYRANGE, (MPARAM)0L, (MPARAM)0L); - return(SHORT2FROMMR(mRc)); - } - return 0; -} // end of wxWindowOS2::OldGetScrollRange - -int wxWindowOS2::GetScrollPage( - int nOrient -) const -{ - if (nOrient == wxHORIZONTAL) - return m_nXThumbSize; - else - return m_nYThumbSize; -} // end of wxWindowOS2::GetScrollPage -#endif // WXWIN_COMPATIBILITY - int wxWindowOS2::GetScrollPos( int nOrient ) const @@ -1202,118 +1123,6 @@ WXDWORD wxWindowOS2::MakeExtendedStyle( return dwStyle; } // end of wxWindowOS2::MakeExtendedStyle -// -// Determines whether simulated 3D effects or CTL3D should be used, -// applying a default border style if required, and returning an extended -// style to pass to OS2Create. -// -WXDWORD wxWindowOS2::Determine3DEffects( - WXDWORD dwDefaultBorderStyle -, bool* pbWant3D -) const -{ - WXDWORD dwStyle = 0L; - - // - // Native PM does not have any specialize 3D effects like WIN32 does, - // so we have to try and invent them. - // - - // - // If matches certain criteria, then assume no 3D effects - // unless specifically requested (dealt with in MakeExtendedStyle) - // - if (!GetParent() || - !IsKindOf(CLASSINFO(wxControl)) || - (m_windowStyle & wxNO_BORDER) - ) - { - *pbWant3D = FALSE; - return MakeExtendedStyle(m_windowStyle, FALSE); - } - - // - // 1) App can specify global 3D effects - // - *pbWant3D = wxTheApp->GetAuto3D(); - - // - // 2) If the parent is being drawn with user colours, or simple border - // specified, switch effects off. - // - if (GetParent() && - (GetParent()->GetWindowStyleFlag() & wxUSER_COLOURS) || - (m_windowStyle & wxSIMPLE_BORDER) - ) - *pbWant3D = FALSE; - - // - // 3) Control can override this global setting by defining - // a border style, e.g. wxSUNKEN_BORDER - // - if ((m_windowStyle & wxDOUBLE_BORDER) || - (m_windowStyle & wxRAISED_BORDER) || - (m_windowStyle & wxSTATIC_BORDER) || - (m_windowStyle & wxSUNKEN_BORDER) - ) - *pbWant3D = TRUE; - - dwStyle = MakeExtendedStyle( m_windowStyle - ,FALSE - ); - - // - // If we want 3D, but haven't specified a border here, - // apply the default border style specified. - // - if (dwDefaultBorderStyle && (*pbWant3D) && - !((m_windowStyle & wxDOUBLE_BORDER) || - (m_windowStyle & wxRAISED_BORDER) || - (m_windowStyle & wxSTATIC_BORDER) || - (m_windowStyle & wxSIMPLE_BORDER) - ) - ) - dwStyle |= dwDefaultBorderStyle; - return dwStyle; -} // end of wxWindowOS2::Determine3DEffects - -#if WXWIN_COMPATIBILITY -void wxWindowOS2::OnCommand( - wxWindow& rWin -, wxCommandEvent& rEvent -) -{ - if (GetEventHandler()->ProcessEvent(rEvent)) - return; - if (m_parent) - m_parent->GetEventHandler()->OnCommand( rWin - ,rEvent - ); -} // end of wxWindowOS2::OnCommand - -wxObject* wxWindowOS2::GetChild( - int nNumber -) const -{ - // - // Return a pointer to the Nth object in the Panel - // - wxNode* pNode = GetChildren().First(); - int n = nNumber; - - while (pNode && n--) - pNode = pNode->Next(); - if (pNode) - { - wxObject* pObj = (wxObject*)pNode->Data(); - return(pObj); - } - else - return NULL; -} // end of wxWindowOS2::GetChild - -#endif // WXWIN_COMPATIBILITY - // // Setup background and foreground colours correctly // @@ -1349,10 +1158,10 @@ void wxWindowOS2::OnIdle( // int nState = 0; - if (::WinGetKeyState(HWND_DESKTOP, VK_SHIFT) != 0) - nState |= VK_SHIFT; - if (::WinGetKeyState(HWND_DESKTOP, VK_CTRL) != 0); - nState |= VK_CTRL; + if (IsShiftDown()) + nState |= KC_SHIFT; + if (IsCtrlDown()) + nState |= KC_CTRL; wxMouseEvent rEvent(wxEVT_LEAVE_WINDOW); @@ -1364,7 +1173,8 @@ void wxWindowOS2::OnIdle( (void)GetEventHandler()->ProcessEvent(rEvent); } } - UpdateWindowUI(); + if (wxUpdateUIEvent::CanUpdate(this)) + UpdateWindowUI(wxUPDATE_UI_FROMIDLE); } // end of wxWindowOS2::OnIdle // @@ -1384,17 +1194,6 @@ bool wxWindowOS2::Reparent( return TRUE; } // end of wxWindowOS2::Reparent -void wxWindowOS2::Clear() -{ - wxClientDC vDc((wxWindow*)this); - wxBrush vBrush( GetBackgroundColour() - ,wxSOLID - ); - - vDc.SetBackground(vBrush); - vDc.Clear(); -} // end of wxWindowOS2::Clear - void wxWindowOS2::Update() { ::WinUpdateWindow(GetHwnd()); @@ -1430,9 +1229,9 @@ void wxWindowOS2::Refresh( RECTL vOs2Rect; vOs2Rect.xLeft = pRect->x; - vOs2Rect.yTop = pRect->y; + vOs2Rect.yBottom = pRect->y; vOs2Rect.xRight = pRect->x + pRect->width; - vOs2Rect.yBottom = pRect->y + pRect->height; + vOs2Rect.yTop = pRect->y + pRect->height; ::WinInvalidateRect(hWnd, &vOs2Rect, bEraseBack); } @@ -2044,7 +1843,7 @@ void wxWindowOS2::GetTextExtent( int i; int l; FONTMETRICS vFM; // metrics structure - BOOL bRc; + BOOL bRc = FALSE; char* pStr; ERRORID vErrorCode; // last error id code HPS hPS; @@ -2147,67 +1946,6 @@ bool wxWindowOS2::IsMouseInWindow() const return hWnd != NULL; } // end of wxWindowOS2::IsMouseInWindow -#if wxUSE_CARET && WXWIN_COMPATIBILITY -// --------------------------------------------------------------------------- -// Caret manipulation -// --------------------------------------------------------------------------- - -void wxWindowOS2::CreateCaret( - int nWidth -, int nHeight -) -{ - SetCaret(new wxCaret( this - ,nWidth - ,nHeight - )); -} // end of wxWindowOS2::CreateCaret - -void wxWindowOS2::CreateCaret( - const wxBitmap* pBitmap -) -{ - wxFAIL_MSG("not implemented"); -} // end of wxWindowOS2::CreateCaret - -void wxWindowOS2::ShowCaret( - bool bShow -) -{ - wxCHECK_RET( m_caret, "no caret to show" ); - - m_caret->Show(bShow); -} // end of wxWindowOS2::ShowCaret - -void wxWindowOS2::DestroyCaret() -{ - SetCaret(NULL); -} // end of wxWindowOS2::DestroyCaret - -void wxWindowOS2::SetCaretPos( - int nX -, int nY) -{ - wxCHECK_RET( m_caret, "no caret to move" ); - - m_caret->Move( nX - ,nY - ); -} // end of wxWindowOS2::SetCaretPos - -void wxWindowOS2::GetCaretPos( - int* pX -, int* pY -) const -{ - wxCHECK_RET( m_caret, "no caret to get position of" ); - - m_caret->GetPosition( pX - ,pY - ); -} // end of wxWindowOS2::GetCaretPos - -#endif //wxUSE_CARET // --------------------------------------------------------------------------- // popup menu @@ -2225,7 +1963,10 @@ static void wxYieldForCommandsOnly() while (::WinPeekMsg(vHabmain, &vMsg, (HWND)0, WM_COMMAND, WM_COMMAND, PM_REMOVE) && vMsg.msg != WM_QUIT) { - wxTheApp->DoMessage((WXMSG*)&vMsg); + // luckily (as we don't have access to wxEventLoopImpl method from here + // anyhow...) we don't need to pre process WM_COMMANDs so dispatch it + // immediately + ::WinDispatchMsg(vHabmain, &vMsg); } if (vMsg.msg == WM_QUIT) ::WinPostMsg(NULL, WM_QUIT, 0, 0); @@ -2809,7 +2550,7 @@ MRESULT wxWindowOS2::OS2WindowProc( bProcessed = HandleMouseEvent( uMsg ,nX ,nY - ,(WXUINT)SHORT1FROMMP(wParam) + ,(WXUINT)SHORT2FROMMP(lParam) ); } else @@ -2826,7 +2567,7 @@ MRESULT wxWindowOS2::OS2WindowProc( bProcessed = pWin->HandleMouseEvent( uMsg ,nX ,nY - ,(WXUINT)SHORT1FROMMP(wParam) + ,(WXUINT)SHORT2FROMMP(lParam) ); } } @@ -3441,7 +3182,7 @@ bool wxWindowOS2::OS2Create( // which is the same but without CS_[HV]REDRAW class styles so using it // ensures that the window is not fully repainted on each resize // - if (GetWindowStyleFlag() & wxNO_FULL_REPAINT_ON_RESIZE) + if (!HasFlag(wxFULL_REPAINT_ON_RESIZE)) { sClassName += wxT("NR"); } @@ -3480,7 +3221,7 @@ bool wxWindowOS2::OS2Create( { vError = ::WinGetLastError(vHabmain); sError = wxPMErrorToStr(vError); - wxLogError("Error creating frame. Error: %s\n", sError); + wxLogError("Error creating frame. Error: %s\n", sError.c_str()); return FALSE; } SetSize( nX @@ -3731,7 +3472,7 @@ bool wxWindowOS2::OS2OnDrawItem( { vError = ::WinGetLastError(vHabmain); sError = wxPMErrorToStr(vError); - wxLogError("Unable to set current color table. Error: %s\n", sError); + wxLogError("Unable to set current color table. Error: %s\n", sError.c_str()); } // // Set the color table to RGB mode @@ -3746,7 +3487,7 @@ bool wxWindowOS2::OS2OnDrawItem( { vError = ::WinGetLastError(vHabmain); sError = wxPMErrorToStr(vError); - wxLogError("Unable to set current color table. Error: %s\n", sError); + wxLogError("Unable to set current color table. Error: %s\n", sError.c_str()); } wxCHECK( pMenuItem->IsKindOf(CLASSINFO(wxMenuItem)), FALSE ); @@ -4298,13 +4039,20 @@ void wxWindowOS2::InitMouseEvent( , WXUINT uFlags ) { + int nHeight; + DoGetSize(0, &nHeight); rEvent.m_x = nX; - rEvent.m_y = nY; - rEvent.m_shiftDown = ((uFlags & VK_SHIFT) != 0); - rEvent.m_controlDown = ((uFlags & VK_CTRL) != 0); - rEvent.m_leftDown = ((uFlags & VK_BUTTON1) != 0); - rEvent.m_middleDown = ((uFlags & VK_BUTTON3) != 0); - rEvent.m_rightDown = ((uFlags & VK_BUTTON2) != 0); + // Convert to wxWindows standard coordinate system! + rEvent.m_y = nHeight - nY; + rEvent.m_shiftDown = ((uFlags & KC_SHIFT) != 0); + rEvent.m_controlDown = ((uFlags & KC_CTRL) != 0); + rEvent.m_altDown = ((uFlags & KC_ALT) != 0); + rEvent.m_leftDown = (::WinGetKeyState(HWND_DESKTOP, VK_BUTTON1) & + 0x8000) != 0; + rEvent.m_middleDown = (::WinGetKeyState(HWND_DESKTOP, VK_BUTTON3) & + 0x8000) != 0; + rEvent.m_rightDown = (::WinGetKeyState(HWND_DESKTOP, VK_BUTTON2) & + 0x8000) != 0; rEvent.SetTimestamp(s_currentMsg.time); rEvent.m_eventObject = this; rEvent.SetId(GetId());