]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/window.cpp
no message
[wxWidgets.git] / src / gtk / window.cpp
index a76a068ebde04772b779e9b28080b4106a050225..f220749ead717a3c0817dab5a3581f812ef2c2f4 100644 (file)
@@ -2,9 +2,8 @@
 // Name:        window.cpp
 // Purpose:
 // Author:      Robert Roebling
-// Created:     01/02/97
-// Id:
-// Copyright:   (c) 1998 Robert Roebling, Julian Smart and Markus Holzem
+// Id:          $id$
+// Copyright:   (c) 1998 Robert Roebling, Julian Smart
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -914,6 +913,7 @@ wxWindow::wxWindow()
   m_pDropTarget = (wxDropTarget *) NULL;
   m_resizing = FALSE;
   m_hasOwnStyle = FALSE;
+  m_scrollGC = (GdkGC*) NULL;
 }
 
 bool wxWindow::Create( wxWindow *parent, wxWindowID id,
@@ -983,7 +983,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
 
   m_wxwindow = gtk_myfixed_new();
 
-  if (m_wxwindow) GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
+  GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
 
   if (m_windowStyle & wxTAB_TRAVERSAL == wxTAB_TRAVERSAL)
     GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
@@ -1015,13 +1015,13 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
   gtk_widget_show( m_wxwindow );
 
   PostCreation();
-
+  
   Show( TRUE );
 
   return TRUE;
 }
 
-wxWindow::~wxWindow(void)
+wxWindow::~wxWindow()
 {
   m_hasVMT = FALSE;
 
@@ -1032,6 +1032,8 @@ wxWindow::~wxWindow(void)
 
   DestroyChildren();
 
+  if (m_scrollGC) gdk_gc_unref( m_scrollGC );
+    
   if (m_wxwindow) gtk_widget_destroy( m_wxwindow );
 
   if (m_widget) gtk_widget_destroy( m_widget );
@@ -1096,7 +1098,7 @@ void wxWindow::PreCreation( wxWindow *parent, wxWindowID id,
   if (m_cursor == NULL)
     m_cursor = new wxCursor( wxCURSOR_ARROW );
   m_font = *wxSWISS_FONT;
-  m_backgroundColour = wxWHITE;
+//  m_backgroundColour = wxWHITE;
   m_foregroundColour = wxBLACK;
   m_windowStyle = style;
   m_windowName = name;
@@ -1113,7 +1115,7 @@ void wxWindow::PreCreation( wxWindow *parent, wxWindowID id,
   m_hasOwnStyle = FALSE;
 }
 
-void wxWindow::PostCreation(void)
+void wxWindow::PostCreation()
 {
   if (m_parent) m_parent->AddChild( this );
 
@@ -1130,11 +1132,7 @@ void wxWindow::PostCreation(void)
 
   if (m_widget && m_parent) gtk_widget_realize( m_widget );
 
-  if (m_wxwindow)
-  {
-    gtk_widget_realize( m_wxwindow );
-    gdk_gc_set_exposures( m_wxwindow->style->fg_gc[0], TRUE );
-  }
+  if (m_wxwindow) gtk_widget_realize( m_wxwindow );
 
   SetCursor( *wxSTANDARD_CURSOR );
 
@@ -1168,7 +1166,7 @@ void wxWindow::ConnectWidget( GtkWidget *widget )
     GTK_SIGNAL_FUNC(gtk_window_leave_callback), (gpointer)this );
 }
 
-bool wxWindow::HasVMT(void)
+bool wxWindow::HasVMT()
 {
   return m_hasVMT;
 }
@@ -1184,7 +1182,7 @@ bool wxWindow::Close( bool force )
   return GetEventHandler()->ProcessEvent(event);
 }
 
-bool wxWindow::Destroy(void)
+bool wxWindow::Destroy()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -1193,7 +1191,7 @@ bool wxWindow::Destroy(void)
   return TRUE;
 }
 
-bool wxWindow::DestroyChildren(void)
+bool wxWindow::DestroyChildren()
 {
   if (GetChildren())
   {
@@ -1216,7 +1214,7 @@ void wxWindow::PrepareDC( wxDC &WXUNUSED(dc) )
   // are we to set fonts here ?
 }
 
-void wxWindow::ImplementSetSize(void)
+void wxWindow::ImplementSetSize()
 {
   if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
   if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
@@ -1225,7 +1223,7 @@ void wxWindow::ImplementSetSize(void)
   gtk_widget_set_usize( m_widget, m_width, m_height );
 }
 
-void wxWindow::ImplementSetPosition(void)
+void wxWindow::ImplementSetPosition()
 {
   if (IS_KIND_OF(this,wxFrame) || IS_KIND_OF(this,wxDialog))
   {
@@ -1523,7 +1521,7 @@ void wxWindow::Centre( int direction )
   }
 }
 
-void wxWindow::Fit(void)
+void wxWindow::Fit()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -1582,7 +1580,7 @@ void wxWindow::Enable( bool enable )
   if (m_wxwindow) gtk_widget_set_sensitive( m_wxwindow, enable );
 }
 
-int wxWindow::GetCharHeight(void) const
+int wxWindow::GetCharHeight() const
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -1596,7 +1594,7 @@ int wxWindow::GetCharHeight(void) const
   return font->ascent + font->descent;
 }
 
-int wxWindow::GetCharWidth(void) const
+int wxWindow::GetCharWidth() const
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -1650,7 +1648,7 @@ void wxWindow::MakeModal( bool modal )
   }
 }
 
-void wxWindow::SetFocus(void)
+void wxWindow::SetFocus()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -1664,7 +1662,7 @@ void wxWindow::SetFocus(void)
   }
 }
 
-bool wxWindow::OnClose(void)
+bool wxWindow::OnClose()
 {
   return TRUE;
 }
@@ -1740,7 +1738,7 @@ void wxWindow::AddChild( wxWindow *child )
   gtk_widget_set_usize( child->m_widget, child->m_width, child->m_height );
 }
 
-wxList *wxWindow::GetChildren(void)
+wxList *wxWindow::GetChildren()
 {
   return (&m_children);
 }
@@ -1757,26 +1755,26 @@ void wxWindow::SetReturnCode( int retCode )
   m_retCode = retCode;
 }
 
-int wxWindow::GetReturnCode(void)
+int wxWindow::GetReturnCode()
 {
   return m_retCode;
 }
 
-void wxWindow::Raise(void)
+void wxWindow::Raise()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
   if (m_widget) gdk_window_raise( m_widget->window );
 }
 
-void wxWindow::Lower(void)
+void wxWindow::Lower()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
   if (m_widget) gdk_window_lower( m_widget->window );
 }
 
-wxEvtHandler *wxWindow::GetEventHandler(void)
+wxEvtHandler *wxWindow::GetEventHandler()
 {
   return m_eventHandler;
 }
@@ -1812,7 +1810,7 @@ wxEvtHandler *wxWindow::PopEventHandler(bool deleteHandler)
    return (wxEvtHandler *) NULL;
 }
 
-wxValidator *wxWindow::GetValidator(void)
+wxValidator *wxWindow::GetValidator()
 {
   return m_windowValidator;
 }
@@ -1824,7 +1822,7 @@ void wxWindow::SetValidator( const wxValidator& validator )
   if (m_windowValidator) m_windowValidator->SetWindow(this);
 }
 
-bool wxWindow::IsBeingDeleted(void)
+bool wxWindow::IsBeingDeleted()
 {
   return FALSE;
 }
@@ -1834,7 +1832,7 @@ void wxWindow::SetId( wxWindowID id )
   m_windowId = id;
 }
 
-wxWindowID wxWindow::GetId(void)
+wxWindowID wxWindow::GetId()
 {
   return m_windowId;
 }
@@ -1937,33 +1935,38 @@ bool wxWindow::IsExposed( const wxRect& rect ) const
   return (m_updateRegion.Contains( rect.x, rect.y, rect.width, rect.height ) != wxOutRegion );
 }
 
-void wxWindow::Clear(void)
+void wxWindow::Clear()
 {
-  wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+  wxCHECK_RET( m_widget != NULL, "invalid window" );
 
   if (m_wxwindow && m_wxwindow->window) gdk_window_clear( m_wxwindow->window );
 }
 
-wxColour wxWindow::GetBackgroundColour(void) const
+wxColour wxWindow::GetBackgroundColour() const
 {
   return m_backgroundColour;
 }
 
+void wxWindow::SetBackgroundColourHelper( GdkWindow *window )
+{
+  if (!m_backgroundColour.Ok()) return;
+  
+  m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
+  gdk_window_set_background( window, m_backgroundColour.GetColor() );
+  gdk_window_clear( window );
+}
+
 void wxWindow::SetBackgroundColour( const wxColour &colour )
 {
-  wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+  wxCHECK_RET( m_widget != NULL, "invalid window" );
 
   m_backgroundColour = colour;
-  if (m_wxwindow)
-  {
-    m_backgroundColour.CalcPixel( m_wxwindow->style->colormap );
-    gdk_window_set_background( m_wxwindow->window, m_backgroundColour.GetColor() );
-    gdk_window_clear( m_wxwindow->window );
-  }
-  // do something ?
+  
+  GtkWidget *widget = m_wxwindow == NULL ? m_widget : m_wxwindow;
+  SetBackgroundColourHelper( widget->window );
 }
 
-wxColour wxWindow::GetForegroundColour(void) const
+wxColour wxWindow::GetForegroundColour() const
 {
   return m_foregroundColour;
 }
@@ -1973,9 +1976,9 @@ void wxWindow::SetForegroundColour( const wxColour &colour )
   m_foregroundColour = colour;
 }
 
-bool wxWindow::Validate(void)
+bool wxWindow::Validate()
 {
-  wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+  wxCHECK_MSG( m_widget != NULL, FALSE, "invalid window" );
 
   wxNode *node = GetChildren()->First();
   while (node)
@@ -1988,9 +1991,9 @@ bool wxWindow::Validate(void)
   return TRUE;
 }
 
-bool wxWindow::TransferDataToWindow(void)
+bool wxWindow::TransferDataToWindow()
 {
-  wxASSERT_MSG( (m_widget != NULL), "invalid window" );
+  wxCHECK_MSG( m_widget != NULL, FALSE, "invalid window" );
 
   wxNode *node = GetChildren()->First();
   while (node)
@@ -2007,7 +2010,7 @@ bool wxWindow::TransferDataToWindow(void)
   return TRUE;
 }
 
-bool wxWindow::TransferDataFromWindow(void)
+bool wxWindow::TransferDataFromWindow()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -2032,7 +2035,7 @@ void wxWindow::OnInitDialog( wxInitDialogEvent &WXUNUSED(event) )
   TransferDataToWindow();
 }
 
-void wxWindow::InitDialog(void)
+void wxWindow::InitDialog()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -2110,7 +2113,7 @@ void wxWindow::DisconnectDnDWidget( GtkWidget *widget )
   m_pDropTarget->UnregisterWidget( widget );
 }
 
-GtkWidget* wxWindow::GetConnectWidget(void)
+GtkWidget* wxWindow::GetConnectWidget()
 {
   GtkWidget *connect_widget = m_widget;
   if (m_wxwindow) connect_widget = m_wxwindow;
@@ -2150,7 +2153,7 @@ void wxWindow::SetFont( const wxFont &font )
   gtk_widget_set_style( m_widget, style );
 }
 
-wxFont *wxWindow::GetFont(void)
+wxFont *wxWindow::GetFont()
 {
   return &m_font;
 }
@@ -2160,12 +2163,12 @@ void wxWindow::SetWindowStyleFlag( long flag )
   m_windowStyle = flag;
 }
 
-long wxWindow::GetWindowStyleFlag(void) const
+long wxWindow::GetWindowStyleFlag() const
 {
   return m_windowStyle;
 }
 
-void wxWindow::CaptureMouse(void)
+void wxWindow::CaptureMouse()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -2182,7 +2185,7 @@ void wxWindow::CaptureMouse(void)
   g_capturing = TRUE;
 }
 
-void wxWindow::ReleaseMouse(void)
+void wxWindow::ReleaseMouse()
 {
   wxASSERT_MSG( (m_widget != NULL), "invalid window" );
 
@@ -2198,12 +2201,12 @@ void wxWindow::SetTitle( const wxString &WXUNUSED(title) )
 {
 }
 
-wxString wxWindow::GetTitle(void) const
+wxString wxWindow::GetTitle() const
 {
   return (wxString&)m_windowName;
 }
 
-wxString wxWindow::GetLabel(void) const
+wxString wxWindow::GetLabel() const
 {
   return GetTitle();
 }
@@ -2213,17 +2216,17 @@ void wxWindow::SetName( const wxString &name )
   m_windowName = name;
 }
 
-wxString wxWindow::GetName(void) const
+wxString wxWindow::GetName() const
 {
   return (wxString&)m_windowName;
 }
 
-bool wxWindow::IsShown(void) const
+bool wxWindow::IsShown() const
 {
   return m_isShown;
 }
 
-bool wxWindow::IsRetained(void)
+bool wxWindow::IsRetained()
 {
   return FALSE;
 }
@@ -2426,7 +2429,14 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
     int d_y = 0;
     if (dx > 0) d_x = dx;
     if (dy > 0) d_y = dy;
-    gdk_window_copy_area( m_wxwindow->window, m_wxwindow->style->fg_gc[0], d_x, d_y,
+    
+    if (!m_scrollGC)
+    {
+      m_scrollGC = gdk_gc_new( m_wxwindow->window );
+      gdk_gc_set_exposures( m_scrollGC, TRUE );
+    }
+    
+    gdk_window_copy_area( m_wxwindow->window, m_scrollGC, d_x, d_y,
       m_wxwindow->window, s_x, s_y, w, h );
 
     wxRect rect;
@@ -2442,7 +2452,7 @@ void wxWindow::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) )
 //          Layout
 //-------------------------------------------------------------------------------------
 
-wxLayoutConstraints *wxWindow::GetConstraints(void) const
+wxLayoutConstraints *wxWindow::GetConstraints() const
 {
   return m_constraints;
 }
@@ -2484,12 +2494,12 @@ void wxWindow::SetAutoLayout( bool autoLayout )
   m_autoLayout = autoLayout;
 }
 
-bool wxWindow::GetAutoLayout(void) const
+bool wxWindow::GetAutoLayout() const
 {
   return m_autoLayout;
 }
 
-wxSizer *wxWindow::GetSizer(void) const
+wxSizer *wxWindow::GetSizer() const
 {
   return m_windowSizer;
 }
@@ -2499,7 +2509,7 @@ void wxWindow::SetSizerParent( wxWindow *win )
   m_sizerParent = win;
 }
 
-wxWindow *wxWindow::GetSizerParent(void) const
+wxWindow *wxWindow::GetSizerParent() const
 {
   return m_sizerParent;
 }
@@ -2547,7 +2557,7 @@ void wxWindow::RemoveConstraintReference(wxWindow *otherWin)
 }
 
 // Reset any constraints that mention this window
-void wxWindow::DeleteRelatedConstraints(void)
+void wxWindow::DeleteRelatedConstraints()
 {
   if (m_constraintsInvolvedIn)
   {
@@ -2589,7 +2599,7 @@ void wxWindow::SetSizer(wxSizer *sizer)
  * New version
  */
 
-bool wxWindow::Layout(void)
+bool wxWindow::Layout()
 {
   if (GetConstraints())
   {
@@ -2689,7 +2699,7 @@ bool wxWindow::DoPhase(int phase)
   return TRUE;
 }
 
-void wxWindow::ResetConstraints(void)
+void wxWindow::ResetConstraints()
 {
   wxLayoutConstraints *constr = GetConstraints();
   if (constr)