]> git.saurik.com Git - wxWidgets.git/commitdiff
fixes to client area origin handling
authorVáclav Slavík <vslavik@fastmail.fm>
Wed, 19 Sep 2001 22:45:14 +0000 (22:45 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Wed, 19 Sep 2001 22:45:14 +0000 (22:45 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11652 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/frame.h
include/wx/gtk1/frame.h
src/gtk/window.cpp
src/gtk1/window.cpp

index ec5261621e5150802c0c573f8e5a4d87ec9ca20a..5240e7b8846b4673bea4b2aad4be036c8db91442 100644 (file)
@@ -73,6 +73,8 @@ public:
                                      const wxString& name = wxToolBarNameStr);
     void SetToolBar(wxToolBar *toolbar);
 #endif // wxUSE_TOOLBAR
+    
+    wxPoint GetClientAreaOrigin() const { return wxPoint(0, 0); }
 
     // implementation from now on
     // --------------------------
index ec5261621e5150802c0c573f8e5a4d87ec9ca20a..5240e7b8846b4673bea4b2aad4be036c8db91442 100644 (file)
@@ -73,6 +73,8 @@ public:
                                      const wxString& name = wxToolBarNameStr);
     void SetToolBar(wxToolBar *toolbar);
 #endif // wxUSE_TOOLBAR
+    
+    wxPoint GetClientAreaOrigin() const { return wxPoint(0, 0); }
 
     // implementation from now on
     // --------------------------
index 866d2b4f8b1dd47f9d6ecc10619c70accdfc32b3..1c2d765a7e9494c9b360d6198a9f8cbc0461180b 100644 (file)
@@ -2690,10 +2690,12 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags
     if (m_resizing) return; /* I don't like recursions */
     m_resizing = TRUE;
 
-    if (x == -1) 
-        x = m_x;
+    int currentX, currentY;
+    GetPosition(&currentX, &currentY);
+    if (x == -1)
+        x = currentX;
     if (y == -1)
-        y = m_y;
+        y = currentY;
     AdjustForParentClientOrigin(x, y, sizeFlags);
 
     if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
@@ -2986,9 +2988,21 @@ void wxWindowGTK::DoGetPosition( int *x, int *y ) const
         dx = pizza->xoffset;
         dy = pizza->yoffset;
     }
+    
+    int nx = m_x - dx;
+    int ny = m_y - dy;
+    
+    if ( !IsTopLevel() && m_parent )
+    {
+        // We may be faking the client origin. So a window that's really at (0,
+        // 30) may appear (to wxWin apps) to be at (0, 0).
+        wxPoint pt(m_parent->GetClientAreaOrigin());
+        nx -= pt.x;
+        ny -= pt.y;
+    }
 
-    if (x) (*x) = m_x - dx;
-    if (y) (*y) = m_y - dy;
+    if (x) (*x) = nx;
+    if (y) (*y) = ny;
 }
 
 void wxWindowGTK::DoClientToScreen( int *x, int *y ) const
index 866d2b4f8b1dd47f9d6ecc10619c70accdfc32b3..1c2d765a7e9494c9b360d6198a9f8cbc0461180b 100644 (file)
@@ -2690,10 +2690,12 @@ void wxWindowGTK::DoSetSize( int x, int y, int width, int height, int sizeFlags
     if (m_resizing) return; /* I don't like recursions */
     m_resizing = TRUE;
 
-    if (x == -1) 
-        x = m_x;
+    int currentX, currentY;
+    GetPosition(&currentX, &currentY);
+    if (x == -1)
+        x = currentX;
     if (y == -1)
-        y = m_y;
+        y = currentY;
     AdjustForParentClientOrigin(x, y, sizeFlags);
 
     if (m_parent->m_wxwindow == NULL) /* i.e. wxNotebook */
@@ -2986,9 +2988,21 @@ void wxWindowGTK::DoGetPosition( int *x, int *y ) const
         dx = pizza->xoffset;
         dy = pizza->yoffset;
     }
+    
+    int nx = m_x - dx;
+    int ny = m_y - dy;
+    
+    if ( !IsTopLevel() && m_parent )
+    {
+        // We may be faking the client origin. So a window that's really at (0,
+        // 30) may appear (to wxWin apps) to be at (0, 0).
+        wxPoint pt(m_parent->GetClientAreaOrigin());
+        nx -= pt.x;
+        ny -= pt.y;
+    }
 
-    if (x) (*x) = m_x - dx;
-    if (y) (*y) = m_y - dy;
+    if (x) (*x) = nx;
+    if (y) (*y) = ny;
 }
 
 void wxWindowGTK::DoClientToScreen( int *x, int *y ) const