]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/scrolwin.cpp
fixed check for bitmapType match (thanks to HP compiler for the warning)
[wxWidgets.git] / src / gtk / scrolwin.cpp
index 484aa181832fc513bb625e99d5bcbffc7621ddd0..80ba00f515f2f5144c553641d93fa410fa2aca40 100644 (file)
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "scrolwin.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -33,6 +29,7 @@
 #include "wx/dcclient.h"
 #include "wx/panel.h"
 #include "wx/sizer.h"
+#include "wx/math.h"
 
 #include "wx/gtk/private.h"
 #include "wx/gtk/win_gtk.h"
@@ -72,6 +69,7 @@ extern bool g_isIdle;
 // "value_changed" from m_vAdjust
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static void gtk_scrolled_window_vscroll_callback( GtkAdjustment *adjust,
                                                   SCROLLBAR_CBACK_ARG
                                                   wxScrolledWindow *win )
@@ -82,15 +80,17 @@ static void gtk_scrolled_window_vscroll_callback( GtkAdjustment *adjust,
     if (g_blockEventsOnDrag) return;
 
     if (!win->m_hasVMT) return;
-    
+
     win->GtkVScroll( adjust->value,
             GET_SCROLL_TYPE(GTK_SCROLLED_WINDOW(win->m_widget)->vscrollbar) );
 }
+}
 
 //-----------------------------------------------------------------------------
 // "value_changed" from m_hAdjust
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static void gtk_scrolled_window_hscroll_callback( GtkAdjustment *adjust,
                                                   SCROLLBAR_CBACK_ARG
                                                   wxScrolledWindow *win )
@@ -104,11 +104,13 @@ static void gtk_scrolled_window_hscroll_callback( GtkAdjustment *adjust,
     win->GtkHScroll( adjust->value,
             GET_SCROLL_TYPE(GTK_SCROLLED_WINDOW(win->m_widget)->hscrollbar) );
 }
+}
 
 //-----------------------------------------------------------------------------
 // "button_press_event" from scrollbar
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static gint gtk_scrollbar_button_press_callback( GtkRange *widget,
                                                  GdkEventButton *gdk_event,
                                                  wxWindowGTK *win)
@@ -125,11 +127,13 @@ static gint gtk_scrollbar_button_press_callback( GtkRange *widget,
 
     return FALSE;
 }
+}
 
 //-----------------------------------------------------------------------------
 // "button_release_event" from scrollbar
 //-----------------------------------------------------------------------------
 
+extern "C" {
 static gint gtk_scrollbar_button_release_callback( GtkRange *widget,
                                                    GdkEventButton *WXUNUSED(gdk_event),
                                                    wxWindowGTK *win)
@@ -168,6 +172,7 @@ static gint gtk_scrollbar_button_release_callback( GtkRange *widget,
 
     return FALSE;
 }
+}
 
 //-----------------------------------------------------------------------------
 // InsertChild for wxScrolledWindow
@@ -312,7 +317,7 @@ bool wxScrolledWindow::Create(wxWindow *parent,
     PostCreation();
 
     Show( TRUE );
-    
+
     return TRUE;
 }
 
@@ -393,7 +398,7 @@ void wxScrolledWindow::SetScrollbars( int pixelsPerUnitX, int pixelsPerUnitY,
 {
     int xs, ys;
     GetViewStart (& xs, & ys);
-    
+
     int old_x = m_xScrollPixelsPerLine * xs;
     int old_y = m_yScrollPixelsPerLine * ys;
 
@@ -407,7 +412,10 @@ void wxScrolledWindow::SetScrollbars( int pixelsPerUnitX, int pixelsPerUnitY,
     // a sizer might override this manual scrollbar setting in old code.
     // m_targetWindow->SetVirtualSizeHints( noUnitsX * pixelsPerUnitX, noUnitsY * pixelsPerUnitY );
 
-    m_targetWindow->SetVirtualSize( noUnitsX * pixelsPerUnitX, noUnitsY * pixelsPerUnitY );
+    int w = noUnitsX * pixelsPerUnitX;
+    int h = noUnitsY * pixelsPerUnitY;
+    m_targetWindow->SetVirtualSize( w ? w : wxDefaultCoord,
+                                    h ? h : wxDefaultCoord);
 
     if (!noRefresh)
     {
@@ -425,7 +433,7 @@ void wxScrolledWindow::AdjustScrollbars()
 
     m_targetWindow->GetClientSize( &w, &h );
     m_targetWindow->GetVirtualSize( &vw, &vh );
-    
+
     if (m_xScrollPixelsPerLine == 0)
     {
         m_hAdjust->upper = 1.0;
@@ -440,19 +448,20 @@ void wxScrolledWindow::AdjustScrollbars()
 
         // Special case. When client and virtual size are very close but
         // the client is big enough, kill scrollbar.
-        
-        if ((m_hAdjust->page_size < m_hAdjust->upper) && (w >= vw)) 
+
+        if ((m_hAdjust->page_size < m_hAdjust->upper) && (w >= vw))
             m_hAdjust->page_size += 1.0;
-        
+
         // If the scrollbar hits the right side, move the window
         // right to keep it from over extending.
 
-        if ((m_hAdjust->value != 0.0) && (m_hAdjust->value + m_hAdjust->page_size > m_hAdjust->upper))
+        if ( !wxIsNullDouble(m_hAdjust->value) &&
+                (m_hAdjust->value + m_hAdjust->page_size > m_hAdjust->upper) )
         {
             m_hAdjust->value = m_hAdjust->upper - m_hAdjust->page_size;
             if (m_hAdjust->value < 0.0)
                 m_hAdjust->value = 0.0;
-                
+
             if (GetChildren().GetCount() == 0)
                 m_xScrollPosition = (int)m_hAdjust->value; // This is enough without child windows
             else
@@ -471,18 +480,19 @@ void wxScrolledWindow::AdjustScrollbars()
         m_vAdjust->upper = (vh+m_yScrollPixelsPerLine-1) / m_yScrollPixelsPerLine;
         m_vAdjust->page_size = h / m_yScrollPixelsPerLine;
         m_vAdjust->page_increment = h / m_yScrollPixelsPerLine;
-        
-        if ((m_vAdjust->page_size < m_vAdjust->upper) && (h >= vh)) 
+
+        if ((m_vAdjust->page_size < m_vAdjust->upper) && (h >= vh))
             m_vAdjust->page_size += 1.0;
 
-        if ((m_vAdjust->value != 0.0) && (m_vAdjust->value + m_vAdjust->page_size > m_vAdjust->upper))
+        if ( !wxIsNullDouble(m_vAdjust->value) &&
+                (m_vAdjust->value + m_vAdjust->page_size > m_vAdjust->upper) )
         {
             m_vAdjust->value = m_vAdjust->upper - m_vAdjust->page_size;
             if (m_vAdjust->value < 0.0)
                 m_vAdjust->value = 0.0;
-                
+
             if (GetChildren().GetCount() == 0)
-                m_yScrollPosition = (int)m_vAdjust->value;  
+                m_yScrollPosition = (int)m_vAdjust->value;
             else
                 gtk_signal_emit_by_name( GTK_OBJECT(m_vAdjust), "value_changed" );
         }
@@ -707,7 +717,7 @@ void wxScrolledWindow::DoCalcScrolledPosition(int x, int y, int *xx, int *yy) co
 {
     int xs, ys;
     GetViewStart (& xs, & ys);
-    
+
     if ( xx )
         *xx = x - xs * m_xScrollPixelsPerLine;
     if ( yy )
@@ -718,7 +728,7 @@ void wxScrolledWindow::DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy)
 {
     int xs, ys;
     GetViewStart (& xs, & ys);
-    
+
     if ( xx )
         *xx = x + xs * m_xScrollPixelsPerLine;
     if ( yy )
@@ -909,7 +919,7 @@ void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
     if ( m_targetWindow->GetAutoLayout() )
     {
         wxSize size = m_targetWindow->GetBestVirtualSize();
-        
+
         // This will call ::Layout() and ::AdjustScrollbars()
         SetVirtualSize( size );
     }
@@ -1014,19 +1024,19 @@ void wxScrolledWindow::OnChar(wxKeyEvent& event)
     int xScroll = GetScrollPos(wxHORIZONTAL);
     if ( xScroll != xScrollOld )
     {
-        wxScrollWinEvent event(wxEVT_SCROLLWIN_THUMBTRACK, xScroll,
-                               wxHORIZONTAL);
-        event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
+        wxScrollWinEvent eventS(wxEVT_SCROLLWIN_THUMBTRACK, xScroll,
+                                wxHORIZONTAL);
+        eventS.SetEventObject(this);
+        GetEventHandler()->ProcessEvent(eventS);
     }
 
     int yScroll = GetScrollPos(wxVERTICAL);
     if ( yScroll != yScrollOld )
     {
-        wxScrollWinEvent event(wxEVT_SCROLLWIN_THUMBTRACK, yScroll,
-                               wxVERTICAL);
-        event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
+        wxScrollWinEvent eventS(wxEVT_SCROLLWIN_THUMBTRACK, yScroll,
+                                wxVERTICAL);
+        eventS.SetEventObject(this);
+        GetEventHandler()->ProcessEvent(eventS);
     }
 }