]> git.saurik.com Git - wxWidgets.git/commitdiff
support SetBackgroundMode and SetTextBackground with GTK+2
authorVáclav Slavík <vslavik@fastmail.fm>
Sat, 31 May 2003 17:30:00 +0000 (17:30 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sat, 31 May 2003 17:30:00 +0000 (17:30 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20783 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/dcclient.cpp
src/gtk1/dcclient.cpp

index a0edbd5c1a6be5e41cd8804c64e0787bfb6a7a66..43183328f995e5491208dce8dfd7b64d75f6909f 100644 (file)
@@ -1451,6 +1451,8 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
 #endif
     pango_layout_set_text( m_layout, (const char*) data, strlen( (const char*) data ));
 
 #endif
     pango_layout_set_text( m_layout, (const char*) data, strlen( (const char*) data ));
 
+    int w,h;
+    
     if (m_scaleY != 1.0)
     {
          // If there is a user or actually any scale applied to
     if (m_scaleY != 1.0)
     {
          // If there is a user or actually any scale applied to
@@ -1464,6 +1466,14 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
          
          // actually apply scaled font
          pango_layout_set_font_description( m_layout, m_fontdesc );
          
          // actually apply scaled font
          pango_layout_set_font_description( m_layout, m_fontdesc );
+        
+         pango_layout_get_pixel_size( m_layout, &w, &h );
+         if ( m_backgroundMode == wxSOLID )
+         {
+            gdk_gc_set_foreground(m_textGC, m_textBackgroundColour.GetColor());
+            gdk_draw_rectangle(m_window, m_textGC, TRUE, x, y, w, h);
+            gdk_gc_set_foreground(m_textGC, m_textForegroundColour.GetColor());
+         }
          
          // Draw layout.
          gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
          
          // Draw layout.
          gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
@@ -1476,19 +1486,17 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
     }
     else
     {
     }
     else
     {
-         // Draw layout.
-         gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
+        pango_layout_get_pixel_size( m_layout, &w, &h );
+        if ( m_backgroundMode == wxSOLID )
+        {
+            gdk_gc_set_foreground(m_textGC, m_textBackgroundColour.GetColor());
+            gdk_draw_rectangle(m_window, m_textGC, TRUE, x, y, w, h);
+            gdk_gc_set_foreground(m_textGC, m_textForegroundColour.GetColor());
+        }
+        // Draw layout.
+        gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
     }
     
     }
     
-#if 0
-    // Measure layout
-    int w,h;
-    pango_layout_get_pixel_size( m_layout, &w, &h );
-#else
-    int w = 10;
-    int h = 10;
-#endif
-
     wxCoord width = w;
     wxCoord height = h;
     
     wxCoord width = w;
     wxCoord height = h;
     
index a0edbd5c1a6be5e41cd8804c64e0787bfb6a7a66..43183328f995e5491208dce8dfd7b64d75f6909f 100644 (file)
@@ -1451,6 +1451,8 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
 #endif
     pango_layout_set_text( m_layout, (const char*) data, strlen( (const char*) data ));
 
 #endif
     pango_layout_set_text( m_layout, (const char*) data, strlen( (const char*) data ));
 
+    int w,h;
+    
     if (m_scaleY != 1.0)
     {
          // If there is a user or actually any scale applied to
     if (m_scaleY != 1.0)
     {
          // If there is a user or actually any scale applied to
@@ -1464,6 +1466,14 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
          
          // actually apply scaled font
          pango_layout_set_font_description( m_layout, m_fontdesc );
          
          // actually apply scaled font
          pango_layout_set_font_description( m_layout, m_fontdesc );
+        
+         pango_layout_get_pixel_size( m_layout, &w, &h );
+         if ( m_backgroundMode == wxSOLID )
+         {
+            gdk_gc_set_foreground(m_textGC, m_textBackgroundColour.GetColor());
+            gdk_draw_rectangle(m_window, m_textGC, TRUE, x, y, w, h);
+            gdk_gc_set_foreground(m_textGC, m_textForegroundColour.GetColor());
+         }
          
          // Draw layout.
          gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
          
          // Draw layout.
          gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
@@ -1476,19 +1486,17 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
     }
     else
     {
     }
     else
     {
-         // Draw layout.
-         gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
+        pango_layout_get_pixel_size( m_layout, &w, &h );
+        if ( m_backgroundMode == wxSOLID )
+        {
+            gdk_gc_set_foreground(m_textGC, m_textBackgroundColour.GetColor());
+            gdk_draw_rectangle(m_window, m_textGC, TRUE, x, y, w, h);
+            gdk_gc_set_foreground(m_textGC, m_textForegroundColour.GetColor());
+        }
+        // Draw layout.
+        gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
     }
     
     }
     
-#if 0
-    // Measure layout
-    int w,h;
-    pango_layout_get_pixel_size( m_layout, &w, &h );
-#else
-    int w = 10;
-    int h = 10;
-#endif
-
     wxCoord width = w;
     wxCoord height = h;
     
     wxCoord width = w;
     wxCoord height = h;