X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fc54776e31f04962739980d6cdcc894bb87a9c53..f4a4bd13d46c34069661766e9d3d2cfbdd0dbb86:/src/gtk1/window.cpp diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 1e6c3b6b92..790af537fe 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -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,7 +1015,7 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id, gtk_widget_show( m_wxwindow ); PostCreation(); - + Show( TRUE ); return TRUE; @@ -1032,6 +1032,8 @@ wxWindow::~wxWindow() 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 ); @@ -1111,6 +1113,7 @@ void wxWindow::PreCreation( wxWindow *parent, wxWindowID id, m_resizing = FALSE; m_windowValidator = (wxValidator *) NULL; m_hasOwnStyle = FALSE; + m_scrollGC = (GdkGC*) NULL; } void wxWindow::PostCreation() @@ -1130,11 +1133,7 @@ void wxWindow::PostCreation() 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 ); @@ -1949,23 +1948,35 @@ 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 ) { wxCHECK_RET( m_widget != NULL, "invalid window" ); m_backgroundColour = colour; + if (!m_backgroundColour.Ok()) return; - GtkWidget *widget = m_wxwindow == NULL ? m_widget : m_wxwindow; - SetBackgroundColourHelper( widget->window ); + if (m_wxwindow) + { + GdkWindow *window = m_wxwindow->window; + m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) ); + gdk_window_set_background( window, m_backgroundColour.GetColor() ); + gdk_window_clear( window ); + } + else + { + GtkStyle *style = gtk_widget_get_style( m_widget ); + if (!m_hasOwnStyle) + { + m_hasOwnStyle = TRUE; + style = gtk_style_copy( style ); + } + + m_backgroundColour.CalcPixel( gdk_window_get_colormap( m_widget->window ) ); + style->bg[GTK_STATE_NORMAL] = *m_backgroundColour.GetColor(); + style->base[GTK_STATE_NORMAL] = *m_backgroundColour.GetColor(); + + gtk_widget_set_style( m_widget, style ); + } } wxColour wxWindow::GetForegroundColour() const @@ -2138,15 +2149,11 @@ void wxWindow::SetFont( const wxFont &font ) else m_font = *wxSWISS_FONT; - GtkStyle *style = (GtkStyle*) NULL; + GtkStyle *style = gtk_widget_get_style( m_widget ); if (!m_hasOwnStyle) { m_hasOwnStyle = TRUE; - style = gtk_style_copy( gtk_widget_get_style( m_widget ) ); - } - else - { - style = gtk_widget_get_style( m_widget ); + style = gtk_style_copy( style ); } gdk_font_unref( style->font ); @@ -2431,7 +2438,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;