]> git.saurik.com Git - wxWidgets.git/commitdiff
No more pixel junk when resizing windows that
authorRobert Roebling <robert@roebling.de>
Wed, 20 Mar 2002 21:36:36 +0000 (21:36 +0000)
committerRobert Roebling <robert@roebling.de>
Wed, 20 Mar 2002 21:36:36 +0000 (21:36 +0000)
    use the wxNO_FULL_REPAINT_ON_RESIZE flag
    and which have a border.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14695 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/univ/window.h
src/univ/winuniv.cpp
src/x11/window.cpp

index 8a53c0b34e886ad0fab127ed2878647d065833e2..02b48e85ebd95b371ad531543714db11d2166e2d 100644 (file)
@@ -265,6 +265,9 @@ protected:
     wxBitmap  m_bitmapBg;
     int       m_alignBgBitmap;
     wxStretch m_stretchBgBitmap;
+    
+    // old size
+    wxSize m_oldSize;
 
     // is the mouse currently inside the window?
     bool m_isCurrent:1;
index ba8e12716460d25a5d002486e36bdfc2e0d5a118..83a0c68761afccef3477e4b5569c084c1c57fd7d 100644 (file)
@@ -108,6 +108,9 @@ void wxWindow::Init()
     m_isCurrent = FALSE;
 
     m_renderer = wxTheme::Get()->GetRenderer();
+    
+    m_oldSize.x = -1;
+    m_oldSize.y = -1;
 }
 
 bool wxWindow::Create(wxWindow *parent,
@@ -446,18 +449,29 @@ int wxWindow::GetStateFlags() const
 
 void wxWindow::OnSize(wxSizeEvent& event)
 {
+    event.Skip();
+    
     if ( m_scrollbarVert || m_scrollbarHorz )
     {
         PositionScrollbars();
     }
     
-#if 0
+#ifndef __WXMSW__
     // Refresh the area (strip) previously occupied by the border
     
-    if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ))
+    if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ) && IsShown())
     {
+        // This code assumes that wxSizeEvent.GetSize() returns
+        // the area of the entire window, not just the client
+        // area.
         wxSize newSize = event.GetSize();
         
+        if (m_oldSize.x == -1 && m_oldSize.y == -1)
+        {
+            m_oldSize = newSize;
+            return;
+        }
+        
         if (HasFlag( wxSIMPLE_BORDER ))
         {
             if (newSize.y > m_oldSize.y)
@@ -465,19 +479,38 @@ void wxWindow::OnSize(wxSizeEvent& event)
                 wxRect rect;
                 rect.x = 0;
                 rect.width = m_oldSize.x;
-                rect.y = m_oldSize.y;
+                rect.y = m_oldSize.y-2;
                 rect.height = 1;
                 Refresh( TRUE, &rect );
             }
+            else if (newSize.y < m_oldSize.y)
+            {
+                wxRect rect;
+                rect.y = newSize.y;
+                rect.x = 0;
+                rect.height = 1;
+                rect.width = newSize.x;
+                wxWindowNative::Refresh( TRUE, &rect );
+            }
+            
             if (newSize.x > m_oldSize.x)
             {
                 wxRect rect;
                 rect.y = 0;
                 rect.height = m_oldSize.y;
-                rect.x = m_oldSize.x;
+                rect.x = m_oldSize.x-2;
                 rect.width = 1;
                 Refresh( TRUE, &rect );
             }
+            else if (newSize.x < m_oldSize.x)
+            {
+                wxRect rect;
+                rect.x = newSize.x;
+                rect.y = 0;
+                rect.width = 1;
+                rect.height = newSize.y;
+                wxWindowNative::Refresh( TRUE, &rect );
+            }
         }
         else
         if (HasFlag( wxSUNKEN_BORDER ) || HasFlag( wxRAISED_BORDER ))
@@ -487,26 +520,43 @@ void wxWindow::OnSize(wxSizeEvent& event)
                 wxRect rect;
                 rect.x = 0;
                 rect.width = m_oldSize.x;
-                rect.y = m_oldSize.y-1;
+                rect.y = m_oldSize.y-4;
                 rect.height = 2;
                 Refresh( TRUE, &rect );
             }
+            else if (newSize.y < m_oldSize.y)
+            {
+                wxRect rect;
+                rect.y = newSize.y;
+                rect.x = 0;
+                rect.height = 2;
+                rect.width = newSize.x;
+                wxWindowNative::Refresh( TRUE, &rect );
+            }
+            
             if (newSize.x > m_oldSize.x)
             {
                 wxRect rect;
                 rect.y = 0;
                 rect.height = m_oldSize.y;
-                rect.x = m_oldSize.x-1;
+                rect.x = m_oldSize.x-4;
                 rect.width = 2;
                 Refresh( TRUE, &rect );
             }
+            else if (newSize.x < m_oldSize.x)
+            {
+                wxRect rect;
+                rect.x = newSize.x;
+                rect.y = 0;
+                rect.width = 2;
+                rect.height = newSize.y;
+                wxWindowNative::Refresh( TRUE, &rect );
+            }
         }
         
         m_oldSize = newSize;
     }
 #endif
-
-    event.Skip();
 }
 
 wxSize wxWindow::DoGetBestSize() const
index b40174b341fa764326b03466a41998efd168ffe9..5724880368b341e4de0454ec6e765b47bd839086 100644 (file)
@@ -1054,7 +1054,7 @@ void wxWindowX11::SendEraseEvents()
 void wxWindowX11::SendPaintEvents()
 {
     m_clipPaintRegion = TRUE;
-
+    
     wxNcPaintEvent nc_paint_event( GetId() );
     nc_paint_event.SetEventObject( this );
     GetEventHandler()->ProcessEvent( nc_paint_event );