]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dcclient.cpp
Fox around a bug in GTK's GtkNotebook
[wxWidgets.git] / src / gtk / dcclient.cpp
index 4c19c24458ca8205c1a929f6a24244721a3eb3f5..34eb8de724260651caf3e4c93670416aef8bc5d4 100644 (file)
@@ -109,10 +109,23 @@ wxWindowDC::wxWindowDC( wxWindow *window )
     m_owner = (wxWindow *)NULL;
   
     if (!window) return;
+    
     GtkWidget *widget = window->m_wxwindow;
     if (!widget) return;
+    
     m_window = widget->window;
+    
+    /* not realized ? */
+    if (!m_window)
+    {
+         /* force realization */
+         gtk_widget_realize( widget );
+         m_window = widget->window;
+    }
+    
+    /* still not realized ? */
     if (!m_window) return;
+    
     if (window->m_wxwindow)
         m_cmap = gtk_widget_get_colormap( window->m_wxwindow );
     else
@@ -618,13 +631,13 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
        {
           /* we HAVE TO use the direct way for memory dcs
              that have mask since the XCopyArea doesn't know
-             about masks and */
+             about masks */
            use_bitmap_method = TRUE;
        }
        else if (memDC->m_selected.GetDepth() == 1)
        {
           /* we HAVE TO use the direct way for memory dcs
-             that are bitmaps because XCopyArea doesn't copy
+             that are bitmaps because XCopyArea doesn't cope
              with different bit depths */
            use_bitmap_method = TRUE;
        }
@@ -666,8 +679,6 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
     
         if ((bm_width != bm_ww) || (bm_height != bm_hh))
         {
-           printf( "scaling.\n" );
-       
             wxImage image( memDC->m_selected );
            image = image.Scale( bm_ww, bm_hh );
        
@@ -827,8 +838,6 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
                      long *descent, long *externalLeading,
                      wxFont *theFont, bool WXUNUSED(use16) )
 {
-    wxCHECK_RET( Ok(), _T("invalid window dc") );
-  
     wxFont fontToUse = m_font;
     if (theFont) fontToUse = *theFont;
   
@@ -841,16 +850,12 @@ void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *heigh
 
 long wxWindowDC::GetCharWidth()
 {
-    wxCHECK_MSG( Ok(), 0, _T("invalid window dc") );
-  
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
     return long(gdk_string_width( font, "H" ) / m_scaleX);
 }
 
 long wxWindowDC::GetCharHeight()
 {
-    wxCHECK_MSG( Ok(), 0, _T("invalid window dc") );
-  
     GdkFont *font = m_font.GetInternalFont( m_scaleY );
     return long((font->ascent + font->descent) / m_scaleY);
 }
@@ -885,8 +890,6 @@ void wxWindowDC::Clear()
 
 void wxWindowDC::SetFont( const wxFont &font )
 {
-    wxCHECK_RET( Ok(), _T("invalid window dc") );
-  
     m_font = font;
 }
 
@@ -1038,8 +1041,21 @@ void wxWindowDC::SetLogicalFunction( int function )
     GdkFunction mode = GDK_COPY;
     switch (function)
     {
-        case wxXOR:    mode = GDK_INVERT; break;
-        case wxINVERT: mode = GDK_INVERT; break;
+        case wxXOR:          mode = GDK_INVERT; break;
+        case wxINVERT:       mode = GDK_INVERT; break;
+#if (GDK_MINOR_VERSION > 0)
+        case wxOR_REVERSE:   mode = GDK_OR_REVERSE; break;
+        case wxAND_REVERSE:  mode = GDK_AND_REVERSE; break;
+        case wxCLEAR:        mode = GDK_CLEAR; break;
+        case wxSET:          mode = GDK_SET; break;
+        case wxOR_INVERT:    mode = GDK_OR_INVERT; break;
+        case wxAND:          mode = GDK_AND; break;
+        case wxOR:           mode = GDK_OR; break;
+        case wxEQUIV:        mode = GDK_EQUIV; break;
+        case wxNAND:         mode = GDK_NAND; break;
+        case wxAND_INVERT:   mode = GDK_AND_INVERT; break;
+/*   ?   wxSRC_INVERT   GDK_AND_REVERSE, GDK_OR_REVERSE, GDK_OR_INVERT */
+#endif
         default:       break;
     }