]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/topluniv.cpp
synthesize NM_RCLICK ourselves now that def window proc doesn't do it as we don't...
[wxWidgets.git] / src / univ / topluniv.cpp
index 8918eccaea8415dbbd2b724dc80133b49a8529f3..6b69e2fb2636b1fd4a9622fb06da8a29667ba9f5 100644 (file)
@@ -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;
 }