X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/71cb2ca1e324624806cfb2cc999cfcd313a10e14..286694ba265d1bf68290cac192bbe54259c313d9:/src/univ/topluniv.cpp diff --git a/src/univ/topluniv.cpp b/src/univ/topluniv.cpp index 8918eccaea..6b69e2fb26 100644 --- a/src/univ/topluniv.cpp +++ b/src/univ/topluniv.cpp @@ -14,7 +14,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "univtoplevel.h" #endif @@ -61,7 +61,7 @@ int wxTopLevelWindow::ms_canIconize = -1; void wxTopLevelWindow::Init() { - m_isActive = FALSE; + m_isActive = false; m_windowStyle = 0; m_pressedButton = 0; } @@ -101,14 +101,14 @@ bool wxTopLevelWindow::Create(wxWindow *parent, style &= ~(wxCAPTION | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxSYSTEM_MENU | wxRESIZE_BORDER | wxFRAME_TOOL_WINDOW | wxTHICK_FRAME); - style = wxSIMPLE_BORDER; + style |= wxSIMPLE_BORDER; SetExtraStyle(exstyleOrig & ~(wxFRAME_EX_CONTEXTHELP | wxDIALOG_EX_CONTEXTHELP)); } if ( !wxTopLevelWindowNative::Create(parent, id, title, pos, size, style, name) ) - return FALSE; + return false; if ( ms_drawDecorations ) { @@ -116,12 +116,12 @@ bool wxTopLevelWindow::Create(wxWindow *parent, m_exStyle = exstyleOrig; } - return TRUE; + return true; } bool wxTopLevelWindow::ShowFullScreen(bool show, long style) { - if ( show == IsFullScreen() ) return FALSE; + if ( show == IsFullScreen() ) return false; if ( ms_drawDecorations ) { @@ -238,7 +238,7 @@ void wxTopLevelWindow::DoSetClientSize(int width, int height) wxTopLevelWindowNative::DoSetClientSize(width, height); } -void wxTopLevelWindow::OnNcPaint(wxPaintEvent& event) +void wxTopLevelWindow::OnNcPaint(wxNcPaintEvent& event) { if ( !ms_drawDecorations || !m_renderer ) event.Skip(); @@ -296,15 +296,16 @@ int wxTopLevelWindow::GetMinHeight() const // icons // ---------------------------------------------------------------------------- -void wxTopLevelWindow::SetIcon(const wxIcon& icon) +void wxTopLevelWindow::SetIcons(const wxIconBundle& icons) { - wxTopLevelWindowNative::SetIcon(icon); + wxTopLevelWindowNative::SetIcons(icons); if ( ms_drawDecorations && m_renderer ) { wxSize size = m_renderer->GetFrameIconSize(); + const wxIcon& icon = icons.GetIcon( size ); - if ( !icon.Ok() || size.x == -1 ) + if ( !icon.Ok() || size.x == wxDefaultCoord ) m_titlebarIcon = icon; else { @@ -328,13 +329,49 @@ void wxTopLevelWindow::SetIcon(const wxIcon& icon) // interactive manipulation // ---------------------------------------------------------------------------- + +static bool wxGetResizingCursor(long hitTestResult, wxCursor& cursor) +{ + if ( hitTestResult & wxHT_TOPLEVEL_ANY_BORDER ) + { + switch (hitTestResult) + { + case wxHT_TOPLEVEL_BORDER_N: + case wxHT_TOPLEVEL_BORDER_S: + cursor = wxCursor(wxCURSOR_SIZENS); + break; + case wxHT_TOPLEVEL_BORDER_W: + case wxHT_TOPLEVEL_BORDER_E: + cursor = wxCursor(wxCURSOR_SIZEWE); + break; + case wxHT_TOPLEVEL_BORDER_NE: + case wxHT_TOPLEVEL_BORDER_SW: + cursor = wxCursor(wxCURSOR_SIZENESW); + break; + case wxHT_TOPLEVEL_BORDER_NW: + case wxHT_TOPLEVEL_BORDER_SE: + cursor = wxCursor(wxCURSOR_SIZENWSE); + break; + default: + return false; + #if 0 + // not rachable due to earlier return + break; + #endif + } + return true; + } + + return false; +} + #define wxINTERACTIVE_RESIZE_DIR \ (wxINTERACTIVE_RESIZE_W | wxINTERACTIVE_RESIZE_E | \ wxINTERACTIVE_RESIZE_S | wxINTERACTIVE_RESIZE_N) struct wxInteractiveMoveData { - wxTopLevelWindowBase *m_window; + wxTopLevelWindow *m_window; wxEventLoop *m_evtLoop; int m_flags; wxRect m_rect; @@ -389,25 +426,25 @@ void wxApplyResize(wxInteractiveMoveData& data, const wxPoint& diff) data.m_rect.height += diff.y; } - if ( data.m_minSize.x != -1 && data.m_rect.width < data.m_minSize.x ) + if ( data.m_minSize.x != wxDefaultCoord && data.m_rect.width < data.m_minSize.x ) { if ( data.m_flags & wxINTERACTIVE_RESIZE_W ) data.m_rect.x -= data.m_minSize.x - data.m_rect.width; data.m_rect.width = data.m_minSize.x; } - if ( data.m_maxSize.x != -1 && data.m_rect.width > data.m_maxSize.x ) + if ( data.m_maxSize.x != wxDefaultCoord && data.m_rect.width > data.m_maxSize.x ) { if ( data.m_flags & wxINTERACTIVE_RESIZE_W ) data.m_rect.x -= data.m_minSize.x - data.m_rect.width; data.m_rect.width = data.m_maxSize.x; } - if ( data.m_minSize.y != -1 && data.m_rect.height < data.m_minSize.y ) + if ( data.m_minSize.y != wxDefaultCoord && data.m_rect.height < data.m_minSize.y ) { if ( data.m_flags & wxINTERACTIVE_RESIZE_N ) data.m_rect.y -= data.m_minSize.y - data.m_rect.height; data.m_rect.height = data.m_minSize.y; } - if ( data.m_maxSize.y != -1 && data.m_rect.height > data.m_maxSize.y ) + if ( data.m_maxSize.y != wxDefaultCoord && data.m_rect.height > data.m_maxSize.y ) { if ( data.m_flags & wxINTERACTIVE_RESIZE_N ) data.m_rect.y -= data.m_minSize.y - data.m_rect.height; @@ -437,7 +474,7 @@ void wxInteractiveMoveHandler::OnMouseMove(wxMouseEvent& event) } } -void wxInteractiveMoveHandler::OnMouseDown(wxMouseEvent& event) +void wxInteractiveMoveHandler::OnMouseDown(wxMouseEvent& WXUNUSED(event)) { if ( m_data.m_flags & wxINTERACTIVE_WAIT_FOR_INPUT ) { @@ -447,7 +484,7 @@ void wxInteractiveMoveHandler::OnMouseDown(wxMouseEvent& event) void wxInteractiveMoveHandler::OnKeyDown(wxKeyEvent& event) { - wxPoint diff(-1,-1); + wxPoint diff(wxDefaultCoord,wxDefaultCoord); switch ( event.GetKeyCode() ) { @@ -464,7 +501,7 @@ void wxInteractiveMoveHandler::OnKeyDown(wxKeyEvent& event) return; } - if ( diff.x != -1 ) + if ( diff.x != wxDefaultCoord ) { if ( m_data.m_flags & wxINTERACTIVE_WAIT_FOR_INPUT ) { @@ -472,7 +509,7 @@ void wxInteractiveMoveHandler::OnKeyDown(wxKeyEvent& event) if ( m_data.m_sizingCursor ) { wxEndBusyCursor(); - m_data.m_sizingCursor = FALSE; + m_data.m_sizingCursor = false; } if ( m_data.m_flags & wxINTERACTIVE_MOVE ) @@ -483,6 +520,7 @@ void wxInteractiveMoveHandler::OnKeyDown(wxKeyEvent& event) } wxPoint warp; + bool changeCur = false; if ( m_data.m_flags & wxINTERACTIVE_MOVE ) { @@ -499,12 +537,14 @@ void wxInteractiveMoveHandler::OnKeyDown(wxKeyEvent& event) { m_data.m_flags |= wxINTERACTIVE_RESIZE_N; m_data.m_pos.y = m_data.m_window->GetPosition().y; + changeCur = true; } else if ( diff.y > 0 ) { m_data.m_flags |= wxINTERACTIVE_RESIZE_S; m_data.m_pos.y = m_data.m_window->GetPosition().y + m_data.m_window->GetSize().y; + changeCur = true; } } if ( !(m_data.m_flags & @@ -514,15 +554,17 @@ void wxInteractiveMoveHandler::OnKeyDown(wxKeyEvent& event) { m_data.m_flags |= wxINTERACTIVE_RESIZE_W; m_data.m_pos.x = m_data.m_window->GetPosition().x; + changeCur = true; } else if ( diff.x > 0 ) { m_data.m_flags |= wxINTERACTIVE_RESIZE_E; m_data.m_pos.x = m_data.m_window->GetPosition().x + m_data.m_window->GetSize().x; + changeCur = true; } } - + wxApplyResize(m_data, diff); m_data.m_window->SetSize(m_data.m_rect); @@ -543,10 +585,23 @@ void wxInteractiveMoveHandler::OnKeyDown(wxKeyEvent& event) warp -= m_data.m_window->GetClientAreaOrigin(); m_data.m_window->WarpPointer(warp.x, warp.y); + + if ( changeCur ) + { + long hit = m_data.m_window->HitTest(warp); + wxCursor cur; + if ( wxGetResizingCursor(hit, cur) ) + { + if ( m_data.m_sizingCursor ) + wxEndBusyCursor(); + wxBeginBusyCursor(&cur); + m_data.m_sizingCursor = true; + } + } } } -void wxInteractiveMoveHandler::OnMouseUp(wxMouseEvent& event) +void wxInteractiveMoveHandler::OnMouseUp(wxMouseEvent& WXUNUSED(event)) { m_data.m_evtLoop->Exit(); } @@ -572,11 +627,11 @@ void wxTopLevelWindow::InteractiveMove(int flags) { wxCursor sizingCursor(wxCURSOR_SIZING); wxBeginBusyCursor(&sizingCursor); - data.m_sizingCursor = TRUE; + data.m_sizingCursor = true; } else #endif - data.m_sizingCursor = FALSE; + data.m_sizingCursor = false; data.m_window = this; data.m_evtLoop = &loop; @@ -639,7 +694,7 @@ void wxTopLevelWindow::ClickTitleBarButton(long button) bool wxTopLevelWindow::PerformAction(const wxControlAction& action, long numArg, - const wxString& strArg) + const wxString& WXUNUSED(strArg)) { bool isActive = numArg != 0; @@ -650,21 +705,21 @@ bool wxTopLevelWindow::PerformAction(const wxControlAction& action, m_isActive = isActive; RefreshTitleBar(); } - return TRUE; + return true; } else if ( action == wxACTION_TOPLEVEL_BUTTON_PRESS ) { m_pressedButton = numArg; RefreshTitleBar(); - return TRUE; + return true; } else if ( action == wxACTION_TOPLEVEL_BUTTON_RELEASE ) { m_pressedButton = 0; RefreshTitleBar(); - return TRUE; + return true; } else if ( action == wxACTION_TOPLEVEL_BUTTON_CLICK ) @@ -672,13 +727,13 @@ bool wxTopLevelWindow::PerformAction(const wxControlAction& action, m_pressedButton = 0; RefreshTitleBar(); ClickTitleBarButton(numArg); - return TRUE; + return true; } else if ( action == wxACTION_TOPLEVEL_MOVE ) { InteractiveMove(wxINTERACTIVE_MOVE); - return TRUE; + return true; } else if ( action == wxACTION_TOPLEVEL_RESIZE ) @@ -693,16 +748,16 @@ bool wxTopLevelWindow::PerformAction(const wxControlAction& action, if ( numArg & wxHT_TOPLEVEL_BORDER_E ) flags |= wxINTERACTIVE_RESIZE_E; InteractiveMove(flags); - return TRUE; + return true; } else - return FALSE; + return false; } void wxTopLevelWindow::OnSystemMenu(wxCommandEvent& event) { - bool ret = TRUE; + bool ret = true; switch (event.GetId()) { @@ -730,7 +785,7 @@ void wxTopLevelWindow::OnSystemMenu(wxCommandEvent& event) break; default: - ret = FALSE; + ret = false; } if ( !ret ) @@ -748,7 +803,7 @@ wxStdFrameInputHandler::wxStdFrameInputHandler(wxInputHandler *inphand) m_winCapture = NULL; m_winHitTest = 0; m_winPressed = 0; - m_borderCursorOn = FALSE; + m_borderCursorOn = false; } bool wxStdFrameInputHandler::HandleMouse(wxInputConsumer *consumer, @@ -776,18 +831,18 @@ bool wxStdFrameInputHandler::HandleMouse(wxInputConsumer *consumer, m_winHitTest = hit; m_winPressed = hit; consumer->PerformAction(wxACTION_TOPLEVEL_BUTTON_PRESS, m_winPressed); - return TRUE; + return true; } else if ( (hit & wxHT_TOPLEVEL_TITLEBAR) && !w->IsMaximized() ) { consumer->PerformAction(wxACTION_TOPLEVEL_MOVE); - return TRUE; + return true; } else if ( (consumer->GetInputWindow()->GetWindowStyle() & wxRESIZE_BORDER) && (hit & wxHT_TOPLEVEL_ANY_BORDER) ) { consumer->PerformAction(wxACTION_TOPLEVEL_RESIZE, hit); - return TRUE; + return true; } } @@ -801,7 +856,7 @@ bool wxStdFrameInputHandler::HandleMouse(wxInputConsumer *consumer, if ( m_winHitTest == m_winPressed ) { consumer->PerformAction(wxACTION_TOPLEVEL_BUTTON_CLICK, m_winPressed); - return TRUE; + return true; } } //else: the mouse was released outside the window, this doesn't @@ -827,7 +882,7 @@ bool wxStdFrameInputHandler::HandleMouseMove(wxInputConsumer *consumer, consumer->PerformAction(wxACTION_TOPLEVEL_BUTTON_PRESS, m_winPressed); m_winHitTest = hit; - return TRUE; + return true; } } else if ( consumer->GetInputWindow()->GetWindowStyle() & wxRESIZE_BORDER ) @@ -842,37 +897,15 @@ bool wxStdFrameInputHandler::HandleMouseMove(wxInputConsumer *consumer, if ( m_borderCursorOn ) { - m_borderCursorOn = FALSE; + m_borderCursorOn = false; win->SetCursor(m_origCursor); } if ( hit & wxHT_TOPLEVEL_ANY_BORDER ) { - m_borderCursorOn = TRUE; wxCursor cur; - switch (hit) - { - case wxHT_TOPLEVEL_BORDER_N: - case wxHT_TOPLEVEL_BORDER_S: - cur = wxCursor(wxCURSOR_SIZENS); - break; - case wxHT_TOPLEVEL_BORDER_W: - case wxHT_TOPLEVEL_BORDER_E: - cur = wxCursor(wxCURSOR_SIZEWE); - break; - case wxHT_TOPLEVEL_BORDER_NE: - case wxHT_TOPLEVEL_BORDER_SW: - cur = wxCursor(wxCURSOR_SIZENESW); - break; - case wxHT_TOPLEVEL_BORDER_NW: - case wxHT_TOPLEVEL_BORDER_SE: - cur = wxCursor(wxCURSOR_SIZENWSE); - break; - default: - m_borderCursorOn = FALSE; - break; - } + m_borderCursorOn = wxGetResizingCursor(hit, cur); if ( m_borderCursorOn ) { m_origCursor = win->GetCursor(); @@ -891,8 +924,8 @@ bool wxStdFrameInputHandler::HandleActivation(wxInputConsumer *consumer, if ( m_borderCursorOn ) { consumer->GetInputWindow()->SetCursor(m_origCursor); - m_borderCursorOn = FALSE; + m_borderCursorOn = false; } consumer->PerformAction(wxACTION_TOPLEVEL_ACTIVATE, activated); - return FALSE; + return false; }