]> git.saurik.com Git - wxWidgets.git/commitdiff
Various update to Blit() SetBackground() Clear() etc.
authorRobert Roebling <robert@roebling.de>
Wed, 10 Feb 1999 11:56:15 +0000 (11:56 +0000)
committerRobert Roebling <robert@roebling.de>
Wed, 10 Feb 1999 11:56:15 +0000 (11:56 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1664 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

distrib/gtk/copy_src
samples/forty/card.cpp
src/gtk/colour.cpp
src/gtk/dcclient.cpp
src/gtk/dialog.cpp
src/gtk/window.cpp
src/gtk1/colour.cpp
src/gtk1/dcclient.cpp
src/gtk1/dialog.cpp
src/gtk1/window.cpp
wxGTK.spec

index 0a532c00c8dcbd203cd3133b63dcc13b5d743a83..1233b6aa0702be10c5cc7830dc43b3ba7ff430fc 100755 (executable)
@@ -190,6 +190,7 @@ cp ./gtk/glcanvas.h ~/wxgtk_dist/wxGTK/utils/glcanvas/gtk
 
 mkdir ~/wxgtk_dist/wxGTK/utils/glcanvas/samples
 mkdir ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/cube
+mkdir ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/isosurf
 mkdir ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/penguin
 
 cd samples/cube
@@ -198,6 +199,13 @@ cp cube.h ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/cube
 cp cube.cpp ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/cube
 cd ..
 
+cd isosurf
+cp Makefile ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/isosurf
+cp isosurf.h ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/isosurf
+cp isosurf.cpp ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/isosurf
+cp isosurf.dat.gz ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/isosurf
+cd ..
+
 cd penguin
 cp Makefile ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/penguin
 cp penguin.h ~/wxgtk_dist/wxGTK/utils/glcanvas/samples/penguin
index 691347254c15bb0229a8b5ea696c3386dbafb61e..5b5af43963483889e109c087a059bf7cb8c76b91 100644 (file)
@@ -171,7 +171,7 @@ void Card::Erase(wxDC& dc, int x, int y)
 //+-------------------------------------------------------------+
 void Card::Draw(wxDC& dc, int x, int y)
 {
-       wxBrush* backgroundBrush = & dc.GetBackground();
+       wxBrush backgroundBrush( dc.GetBackground() );
        dc.SetBrush(* wxWHITE_BRUSH);
        dc.SetPen(* wxBLACK_PEN);
        dc.DrawRoundedRectangle(x, y, CardWidth, CardHeight, 4);
@@ -336,7 +336,7 @@ void Card::Draw(wxDC& dc, int x, int y)
                }
 
        }
-       dc.SetBackground(* backgroundBrush);
+       dc.SetBackground( backgroundBrush );
 } // Card:Draw()
 
 
index a3292d450daafb1ba65df6aeddad52eacd5a3c63..88a76bba564dc470c4a8969acfa77d8bbc0b9a47 100644 (file)
@@ -167,6 +167,7 @@ void wxColour::CalcPixel( GdkColormap *cmap )
     if (!Ok()) return;
 
     if ((M_COLDATA->m_hasPixel) && (M_COLDATA->m_colormap == cmap)) return;
+    
     M_COLDATA->FreeColour();
 
     GdkColormapPrivate *private_colormap = (GdkColormapPrivate*) cmap;
index 2dec4c304d5781cf2f2242c593658384b5069c88..f03ce148a90d9645cba46945abc67121dbdaf583 100644 (file)
@@ -611,19 +611,37 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
         /* we use the "XCopyArea" way to copy a memory dc into
           y different window if the memory dc BOTH
           a) doesn't have any mask or its mask isn't used
-          b) it is clipped.
-          we HAVE TO use the direct way for memory dcs
-          that have mask since the XCopyArea doesn't know
-          about masks and we SHOULD use the direct way if
-          all of the bitmap in the memory dc is copied in
-          which case XCopyArea wouldn't be able able to
-          boost performace by reducing the area to be scaled */
+          b) it is clipped
+          c) is not 1-bit */
     
-       use_bitmap_method = ( (useMask && (memDC->m_selected.GetMask())) ||
-                              ((xsrc == 0) && (ysrc == 0) &&
-                               (width == memDC->m_selected.GetWidth()) &&
-                               (height == memDC->m_selected.GetHeight()) )
-                           );
+        if (useMask && (memDC->m_selected.GetMask()))
+       {
+          /* we HAVE TO use the direct way for memory dcs
+             that have mask since the XCopyArea doesn't know
+             about masks and */
+           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
+             with different bit depths */
+           use_bitmap_method = TRUE;
+       }
+       else if ((xsrc == 0) && (ysrc == 0) &&
+                (width == memDC->m_selected.GetWidth()) &&
+                (height == memDC->m_selected.GetHeight()))
+       {
+          /* we SHOULD use the direct way if all of the bitmap 
+             in the memory dc is copied in which case XCopyArea 
+             wouldn't be able able to boost performace by reducing 
+             the area to be scaled */
+           use_bitmap_method = TRUE;
+       }
+       else
+       {
+           use_bitmap_method = FALSE;
+       }
     }
     
     CalcBoundingBox( xdest, ydest );
@@ -648,6 +666,8 @@ 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 );
        
@@ -682,14 +702,16 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
         GdkPixmap *pm = use_bitmap.GetPixmap();
         if (pm)
         {
-            gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, ww, hh );
+            gdk_draw_pixmap( m_window, m_penGC, pm, xsrc, ysrc, xx, yy, ww, hh );
         }
         else
         {
             GdkBitmap *bm = use_bitmap.GetBitmap();
             if (bm)
             {
-                gdk_draw_bitmap( m_window, m_penGC, bm, 0, 0, xx, yy, ww, hh );
+               /* we use the textGC here because blitting a bitmap is done
+                  using the current text colour */
+                gdk_draw_bitmap( m_window, m_textGC, bm, xsrc, ysrc, xx, yy, ww, hh );
            }
         }
     
@@ -837,15 +859,27 @@ void wxWindowDC::Clear()
 {
     wxCHECK_RET( Ok(), "invalid window dc" );
   
-    if (!m_isMemDC)
+    /* - we either are a memory dc or have a window as the
+       owner. anything else shouldn't happen.
+       - we don't use gdk_window_clear() as we don't set
+       the window's background colour anymore. it is too
+       much pain to keep the DC's and the window's back-
+       ground colour in synch. */
+  
+    if (m_owner)
     {
-        gdk_window_clear( m_window );
+        int width,height;
+        m_owner->GetSize( &width, &height );
+        gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
+       return;
     }
-    else
+
+    if (m_isMemDC)
     {
         int width,height;
         GetSize( &width, &height );
         gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
+       return;
     }
 }
 
@@ -962,11 +996,6 @@ void wxWindowDC::SetBackground( const wxBrush &brush )
   
     if (!m_backgroundBrush.Ok()) return;
   
-    if (m_owner)
-    {
-        m_owner->SetBackgroundColour( m_backgroundBrush.GetColour() );
-    }
-  
     m_backgroundBrush.GetColour().CalcPixel( m_cmap );
     gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() );
     gdk_gc_set_background( m_penGC, m_backgroundBrush.GetColour().GetColor() );
index b64413f338c61256e360615e9296c35dd690dc7b..b8c54679b7dbe8fb51c42ffc644ab6fefaaa1488 100644 (file)
@@ -433,7 +433,7 @@ int wxDialog::ShowModal()
        wxFAIL_MSG( "wxDialog:ShowModal called twice" );
        return GetReturnCode();
     }
-
+    
     Show( TRUE );
 
     m_modalShowing = TRUE;
index 7f2da39fec6abe0813ff9db5c24ed5e16cfa9254..d450141f21e07ccb5b655f923d3b4b2a363587b6 100644 (file)
@@ -2424,12 +2424,11 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
         {
             gdk_window_clear_area( m_wxwindow->window,
                                    rect->x, rect->y,
-                                   rect->width,
-                                   rect->height );
+                                   rect->width, rect->height );
         }
         else
         {
-            Clear();
+            gdk_window_clear( m_wxwindow->window );
         }
     }
 
@@ -2484,7 +2483,10 @@ void wxWindow::Clear()
 {
     wxCHECK_RET( m_widget != NULL, "invalid window" );
 
-    if (m_wxwindow && m_wxwindow->window) gdk_window_clear( m_wxwindow->window );
+    if (m_wxwindow && m_wxwindow->window)
+    {
+        gdk_window_clear( m_wxwindow->window );
+    }
 }
 
 #if wxUSE_TOOLTIPS
@@ -2537,14 +2539,18 @@ void wxWindow::SetBackgroundColour( const wxColour &colour )
     m_backgroundColour = colour;
     if (!m_backgroundColour.Ok()) return;
 
-    if (m_wxwindow)
+    if (m_wxwindow && m_wxwindow->window)
     {
-        GdkWindow *window = m_wxwindow->window;
-        m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
-        gdk_window_set_background( window, m_backgroundColour.GetColor() );
+       /* wxMSW doesn't clear the window here. I don't do that
+          either to provide compatibility. call Clear() to do 
+          the job. */
+          
+        m_backgroundColour.CalcPixel( gdk_window_get_colormap( m_wxwindow->window ) );
+        gdk_window_set_background( m_wxwindow->window, m_backgroundColour.GetColor() );
     }
 
     wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
+    
     if (sysbg.Red() == colour.Red() &&
         sysbg.Green() == colour.Green() &&
         sysbg.Blue() == colour.Blue())
index a3292d450daafb1ba65df6aeddad52eacd5a3c63..88a76bba564dc470c4a8969acfa77d8bbc0b9a47 100644 (file)
@@ -167,6 +167,7 @@ void wxColour::CalcPixel( GdkColormap *cmap )
     if (!Ok()) return;
 
     if ((M_COLDATA->m_hasPixel) && (M_COLDATA->m_colormap == cmap)) return;
+    
     M_COLDATA->FreeColour();
 
     GdkColormapPrivate *private_colormap = (GdkColormapPrivate*) cmap;
index 2dec4c304d5781cf2f2242c593658384b5069c88..f03ce148a90d9645cba46945abc67121dbdaf583 100644 (file)
@@ -611,19 +611,37 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
         /* we use the "XCopyArea" way to copy a memory dc into
           y different window if the memory dc BOTH
           a) doesn't have any mask or its mask isn't used
-          b) it is clipped.
-          we HAVE TO use the direct way for memory dcs
-          that have mask since the XCopyArea doesn't know
-          about masks and we SHOULD use the direct way if
-          all of the bitmap in the memory dc is copied in
-          which case XCopyArea wouldn't be able able to
-          boost performace by reducing the area to be scaled */
+          b) it is clipped
+          c) is not 1-bit */
     
-       use_bitmap_method = ( (useMask && (memDC->m_selected.GetMask())) ||
-                              ((xsrc == 0) && (ysrc == 0) &&
-                               (width == memDC->m_selected.GetWidth()) &&
-                               (height == memDC->m_selected.GetHeight()) )
-                           );
+        if (useMask && (memDC->m_selected.GetMask()))
+       {
+          /* we HAVE TO use the direct way for memory dcs
+             that have mask since the XCopyArea doesn't know
+             about masks and */
+           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
+             with different bit depths */
+           use_bitmap_method = TRUE;
+       }
+       else if ((xsrc == 0) && (ysrc == 0) &&
+                (width == memDC->m_selected.GetWidth()) &&
+                (height == memDC->m_selected.GetHeight()))
+       {
+          /* we SHOULD use the direct way if all of the bitmap 
+             in the memory dc is copied in which case XCopyArea 
+             wouldn't be able able to boost performace by reducing 
+             the area to be scaled */
+           use_bitmap_method = TRUE;
+       }
+       else
+       {
+           use_bitmap_method = FALSE;
+       }
     }
     
     CalcBoundingBox( xdest, ydest );
@@ -648,6 +666,8 @@ 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 );
        
@@ -682,14 +702,16 @@ bool wxWindowDC::Blit( long xdest, long ydest, long width, long height,
         GdkPixmap *pm = use_bitmap.GetPixmap();
         if (pm)
         {
-            gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, ww, hh );
+            gdk_draw_pixmap( m_window, m_penGC, pm, xsrc, ysrc, xx, yy, ww, hh );
         }
         else
         {
             GdkBitmap *bm = use_bitmap.GetBitmap();
             if (bm)
             {
-                gdk_draw_bitmap( m_window, m_penGC, bm, 0, 0, xx, yy, ww, hh );
+               /* we use the textGC here because blitting a bitmap is done
+                  using the current text colour */
+                gdk_draw_bitmap( m_window, m_textGC, bm, xsrc, ysrc, xx, yy, ww, hh );
            }
         }
     
@@ -837,15 +859,27 @@ void wxWindowDC::Clear()
 {
     wxCHECK_RET( Ok(), "invalid window dc" );
   
-    if (!m_isMemDC)
+    /* - we either are a memory dc or have a window as the
+       owner. anything else shouldn't happen.
+       - we don't use gdk_window_clear() as we don't set
+       the window's background colour anymore. it is too
+       much pain to keep the DC's and the window's back-
+       ground colour in synch. */
+  
+    if (m_owner)
     {
-        gdk_window_clear( m_window );
+        int width,height;
+        m_owner->GetSize( &width, &height );
+        gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
+       return;
     }
-    else
+
+    if (m_isMemDC)
     {
         int width,height;
         GetSize( &width, &height );
         gdk_draw_rectangle( m_window, m_bgGC, TRUE, 0, 0, width, height );
+       return;
     }
 }
 
@@ -962,11 +996,6 @@ void wxWindowDC::SetBackground( const wxBrush &brush )
   
     if (!m_backgroundBrush.Ok()) return;
   
-    if (m_owner)
-    {
-        m_owner->SetBackgroundColour( m_backgroundBrush.GetColour() );
-    }
-  
     m_backgroundBrush.GetColour().CalcPixel( m_cmap );
     gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() );
     gdk_gc_set_background( m_penGC, m_backgroundBrush.GetColour().GetColor() );
index b64413f338c61256e360615e9296c35dd690dc7b..b8c54679b7dbe8fb51c42ffc644ab6fefaaa1488 100644 (file)
@@ -433,7 +433,7 @@ int wxDialog::ShowModal()
        wxFAIL_MSG( "wxDialog:ShowModal called twice" );
        return GetReturnCode();
     }
-
+    
     Show( TRUE );
 
     m_modalShowing = TRUE;
index 7f2da39fec6abe0813ff9db5c24ed5e16cfa9254..d450141f21e07ccb5b655f923d3b4b2a363587b6 100644 (file)
@@ -2424,12 +2424,11 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
         {
             gdk_window_clear_area( m_wxwindow->window,
                                    rect->x, rect->y,
-                                   rect->width,
-                                   rect->height );
+                                   rect->width, rect->height );
         }
         else
         {
-            Clear();
+            gdk_window_clear( m_wxwindow->window );
         }
     }
 
@@ -2484,7 +2483,10 @@ void wxWindow::Clear()
 {
     wxCHECK_RET( m_widget != NULL, "invalid window" );
 
-    if (m_wxwindow && m_wxwindow->window) gdk_window_clear( m_wxwindow->window );
+    if (m_wxwindow && m_wxwindow->window)
+    {
+        gdk_window_clear( m_wxwindow->window );
+    }
 }
 
 #if wxUSE_TOOLTIPS
@@ -2537,14 +2539,18 @@ void wxWindow::SetBackgroundColour( const wxColour &colour )
     m_backgroundColour = colour;
     if (!m_backgroundColour.Ok()) return;
 
-    if (m_wxwindow)
+    if (m_wxwindow && m_wxwindow->window)
     {
-        GdkWindow *window = m_wxwindow->window;
-        m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
-        gdk_window_set_background( window, m_backgroundColour.GetColor() );
+       /* wxMSW doesn't clear the window here. I don't do that
+          either to provide compatibility. call Clear() to do 
+          the job. */
+          
+        m_backgroundColour.CalcPixel( gdk_window_get_colormap( m_wxwindow->window ) );
+        gdk_window_set_background( m_wxwindow->window, m_backgroundColour.GetColor() );
     }
 
     wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
+    
     if (sysbg.Red() == colour.Red() &&
         sysbg.Green() == colour.Green() &&
         sysbg.Blue() == colour.Blue())
index 0c91a27c3e3b7c4f2a0ac97ea305d178cc2c4bd5..2485a714d51a63d7970b5a9eac5dbf2ba23c23cb 100644 (file)
@@ -1,10 +1,10 @@
 Summary: The GTK+ 1.0 port of wxWindows library
 Name: wxGTK
-Version: 1.99.3
+Version: 1.99.4
 Release: 1
 Copyright: wxWindows Licence
 Group: X11/Libraries
-Source: ftp://wesley.informatik.uni-freiburg.de/pub/linux/wxxt/source/wxGTK2b3.tgz
+Source: ftp://wesley.informatik.uni-freiburg.de/pub/linux/wxxt/source/wxGTK2b4.tgz
 URL: http://www.freiburg.linux.de/~wxxt/docs.html
 Packager: Robert Roebling <roebling@ruf.uni-freiburg.de>
 Requires: gtk+ >= 1.0.4