]> git.saurik.com Git - wxWidgets.git/commitdiff
Added code for erasing the small square between scrollbars.
authorRobert Roebling <robert@roebling.de>
Sat, 30 Mar 2002 11:16:24 +0000 (11:16 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 30 Mar 2002 11:16:24 +0000 (11:16 +0000)
  Corrected window size if scrollbars is removed/added.
  Reduce flicker in scrollbars.
  Prevent scrollbars from jumping back to original position
    if the mouse just barely left the scrollbar.

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

src/univ/scrolbar.cpp
src/univ/themes/win32.cpp
src/univ/winuniv.cpp
src/x11/app.cpp
src/x11/window.cpp

index 464681e6453fa9801ea676af6bc63fac175796cc..66d0d7a1735bc7d4c93c545a45bcd5ee0e1416dd 100644 (file)
@@ -42,6 +42,7 @@
 #include "wx/univ/renderer.h"
 #include "wx/univ/inphand.h"
 #include "wx/univ/theme.h"
 #include "wx/univ/renderer.h"
 #include "wx/univ/inphand.h"
 #include "wx/univ/theme.h"
+#include "wx/log.h"
 
 #define WXDEBUG_SCROLLBAR
 
 
 #define WXDEBUG_SCROLLBAR
 
@@ -388,7 +389,7 @@ void wxScrollBar::UpdateThumb()
         }
 #endif // WXDEBUG_SCROLLBAR
 
         }
 #endif // WXDEBUG_SCROLLBAR
 
-                    Refresh(TRUE, &rect);
+                    Refresh(FALSE, &rect);
                 }
 
                 m_elementsState[n] &= ~wxCONTROL_DIRTY;
                 }
 
                 m_elementsState[n] &= ~wxCONTROL_DIRTY;
index 7bb3909034e9a51ea55aa0174f307bafd8091b90..dae32a197b7695eb6841a8cc58fb0803ee1ee2b0 100644 (file)
@@ -4145,6 +4145,8 @@ bool wxWin32ScrollBarInputHandler::HandleMouseMove(wxInputConsumer *control,
         // if we're scrolling the scrollbar because the arrow or the shaft was
         // pressed, check that the mouse stays on the same scrollbar element
 
         // if we're scrolling the scrollbar because the arrow or the shaft was
         // pressed, check that the mouse stays on the same scrollbar element
 
+#if 0
+        // Always let thumb jump back if we leave the scrollbar
         if ( event.Moving() )
         {
             ht = m_renderer->HitTestScrollbar(scrollbar, event.GetPosition());
         if ( event.Moving() )
         {
             ht = m_renderer->HitTestScrollbar(scrollbar, event.GetPosition());
@@ -4153,6 +4155,21 @@ bool wxWin32ScrollBarInputHandler::HandleMouseMove(wxInputConsumer *control,
         {
             ht = wxHT_NOWHERE;
         }
         {
             ht = wxHT_NOWHERE;
         }
+#else
+        // Jump back only if we get far away from it
+        wxPoint pos = event.GetPosition();
+        if (scrollbar->HasFlag( wxVERTICAL ))
+        {
+            if (pos.x > -20 && pos.x < scrollbar->GetSize().x+20)
+               pos.x = 5;
+        }
+        else
+        {
+            if (pos.y > -20 && pos.y < scrollbar->GetSize().y+20)
+               pos.y = 5;
+        }
+        ht = m_renderer->HitTestScrollbar(scrollbar, pos );
+#endif
 
         // if we're dragging the thumb and the mouse stays in the scrollbar, it
         // is still ok - we only want to catch the case when the mouse leaves
 
         // if we're dragging the thumb and the mouse stays in the scrollbar, it
         // is still ok - we only want to catch the case when the mouse leaves
index be8a2ba4e3a23759b05a3eb0ac38d1b886558de7..d8ff488e5a8b13044a9e2804a298baca6c72095d 100644 (file)
@@ -843,8 +843,12 @@ void wxWindow::SetScrollbar(int orient,
     // give the window a chance to relayout
     if ( hasClientSizeChanged )
     {
     // give the window a chance to relayout
     if ( hasClientSizeChanged )
     {
+#if wxUSE_TWO_WINDOWS
+        wxWindowNative::SetSize( GetSize() );
+#else
         wxSizeEvent event(GetSize());
         (void)GetEventHandler()->ProcessEvent(event);
         wxSizeEvent event(GetSize());
         (void)GetEventHandler()->ProcessEvent(event);
+#endif
     }
 }
 
     }
 }
 
index fdbabd8a8575a4dc4ed156b42d91cbb0ffa4cf2f..84963e8d2edb5582cb2920b753fc603db48ddb98 100644 (file)
@@ -734,7 +734,7 @@ bool wxApp::ProcessXEvent(WXEvent* _event)
         {
             if (!win->IsEnabled())
                 return FALSE;
         {
             if (!win->IsEnabled())
                 return FALSE;
-
+                
             // Here we check if the top level window is
             // disabled, which is one aspect of modality.
             wxWindow *tlw = win;
             // Here we check if the top level window is
             // disabled, which is one aspect of modality.
             wxWindow *tlw = win;
index 18aad1d21288deed199a117eabd156c1565e6132..ce08b9fd81c786eed722eac96b820e0e2218149f 100644 (file)
@@ -40,6 +40,7 @@
 #include "wx/module.h"
 #include "wx/menuitem.h"
 #include "wx/log.h"
 #include "wx/module.h"
 #include "wx/menuitem.h"
 #include "wx/log.h"
+#include "wx/univ/renderer.h"
 
 #if  wxUSE_DRAG_AND_DROP
     #include "wx/dnd.h"
 
 #if  wxUSE_DRAG_AND_DROP
     #include "wx/dnd.h"
@@ -837,15 +838,13 @@ void wxWindowX11::DoSetClientSize(int width, int height)
     {
         xwindow = (Window) m_clientWindow;
         
     {
         xwindow = (Window) m_clientWindow;
         
-        if (HasFlag( wxSUNKEN_BORDER) || HasFlag( wxRAISED_BORDER))
-        {
-            width -= 4;
-            height -= 4;
-        } else
-        if (HasFlag( wxSIMPLE_BORDER ))
+        wxWindow *window = (wxWindow*) this;
+        wxRenderer *renderer = window->GetRenderer();
+        if (renderer)
         {
         {
-            width -= 2;
-            height -= 2;
+            wxRect border = renderer->GetBorderDimensions( (wxBorder)(m_windowStyle & wxBORDER_MASK) );
+            width -= border.x + border.width;
+            height -= border.y + border.height;
         }
         
         XResizeWindow( wxGlobalDisplay(), xwindow, width, height );
         }
         
         XResizeWindow( wxGlobalDisplay(), xwindow, width, height );
@@ -872,26 +871,22 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height)
     {
         xwindow = (Window) m_clientWindow;
         
     {
         xwindow = (Window) m_clientWindow;
         
-        if (HasFlag( wxSUNKEN_BORDER) || HasFlag( wxRAISED_BORDER))
-        {
-            x = 2;
-            y = 2;
-            width -= 4;
-            height -= 4;
-        } else
-        if (HasFlag( wxSIMPLE_BORDER ))
+        wxWindow *window = (wxWindow*) this;
+        wxRenderer *renderer = window->GetRenderer();
+        if (renderer)
         {
         {
-            x = 1;
-            y = 1;
-            width -= 2;
-            height -= 2;
-        } else
+            wxRect border = renderer->GetBorderDimensions( (wxBorder)(m_windowStyle & wxBORDER_MASK) );
+            x = border.x;
+            y = border.y;
+            width -= border.x + border.width;
+            height -= border.y + border.height;
+        }
+        else
         {
             x = 0;
             y = 0;
         }
         
         {
             x = 0;
             y = 0;
         }
         
-        wxWindow *window = (wxWindow*) this;
         wxScrollBar *sb = window->GetScrollbar( wxHORIZONTAL );
         if (sb && sb->IsShown())
         {
         wxScrollBar *sb = window->GetScrollbar( wxHORIZONTAL );
         if (sb && sb->IsShown())
         {
@@ -1139,6 +1134,37 @@ void wxWindowX11::SendPaintEvents()
 
 void wxWindowX11::SendNcPaintEvents()
 {
 
 void wxWindowX11::SendNcPaintEvents()
 {
+    wxWindow *window = (wxWindow*) this;
+
+    // All this for drawing the small square between the scrollbars.
+    int width = 0;
+    int height = 0;
+    int x = 0;
+    int y = 0;
+    wxScrollBar *sb = window->GetScrollbar( wxHORIZONTAL );
+    if (sb && sb->IsShown())
+    {
+        height = sb->GetSize().y;
+        y = sb->GetPosition().y;
+        
+        sb = window->GetScrollbar( wxVERTICAL );
+        if (sb && sb->IsShown())
+        {
+            width = sb->GetSize().x;
+            x = sb->GetPosition().x;
+
+            Display *xdisplay = wxGlobalDisplay();
+            Window xwindow = (Window) GetMainWindow();
+            Colormap cm = (Colormap) wxTheApp->GetMainColormap( wxGetDisplay() );
+            wxColour colour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE);
+            colour.CalcPixel( (WXColormap) cm );
+            
+            XSetForeground( xdisplay, g_eraseGC, colour.GetPixel() );
+        
+            XFillRectangle( xdisplay, xwindow, g_eraseGC, x, y, width, height );
+        }
+    }
+        
     wxNcPaintEvent nc_paint_event( GetId() );
     nc_paint_event.SetEventObject( this );
     GetEventHandler()->ProcessEvent( nc_paint_event );
     wxNcPaintEvent nc_paint_event( GetId() );
     nc_paint_event.SetEventObject( this );
     GetEventHandler()->ProcessEvent( nc_paint_event );