]> git.saurik.com Git - wxWidgets.git/commitdiff
implemented underlined text drawing for GTK2
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 Jun 2004 13:10:29 +0000 (13:10 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 Jun 2004 13:10:29 +0000 (13:10 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28040 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/gtk/dcclient.cpp
src/gtk1/dcclient.cpp

index 7ec0f5c900114aec469286fae2c935d6ecefd0b8..e4eb22953210a9188d66dd1864dbfde5112ae66f 100644 (file)
@@ -136,6 +136,7 @@ wxGTK:
 - implemented wxColourDialog as native dialog
 - wxTreeCtrl::GetCount() counts root as well now (compatible with MSW)
 - added support for wxCHK_3STATE style (GTK2 only)
+- implemented text underlining under GTK2
 
 wxMotif:
 
index 94df22e7d94810ac07f410c2d677b4b07c3dd9f3..ef602b5ea8c753f1ed4844e213a66892be6f261c 100644 (file)
@@ -1467,13 +1467,27 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
     wxCHECK_RET( m_layout, wxT("no Pango layout") );
     wxCHECK_RET( m_fontdesc, wxT("no Pango font description") );
 
+    bool underlined = m_font.Ok() && m_font.GetUnderlined();
+
 #if wxUSE_UNICODE
     const wxCharBuffer data = wxConvUTF8.cWC2MB( text );
 #else
     const wxWCharBuffer wdata = wxConvLocal.cMB2WC( text );
     const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata );
 #endif
-    pango_layout_set_text( m_layout, (const char*) data, strlen( (const char*) data ));
+    size_t datalen = strlen((const char*)data);
+    pango_layout_set_text( m_layout, (const char*) data, datalen);
+    
+    if (underlined)
+    {
+        PangoAttrList *attrs = pango_attr_list_new();
+        PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE);
+        a->start_index = 0;
+        a->end_index = datalen;
+        pango_attr_list_insert(attrs, a);
+        pango_layout_set_attributes(m_layout, attrs);
+        pango_attr_list_unref(attrs);
+    }
 
     int w,h;
     
@@ -1520,6 +1534,12 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
         // Draw layout.
         gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
     }
+
+    if (underlined)
+    {
+        // undo underline attributes setting:
+        pango_layout_set_attributes(m_layout, NULL);
+    }
     
     wxCoord width = w;
     wxCoord height = h;
index 94df22e7d94810ac07f410c2d677b4b07c3dd9f3..ef602b5ea8c753f1ed4844e213a66892be6f261c 100644 (file)
@@ -1467,13 +1467,27 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
     wxCHECK_RET( m_layout, wxT("no Pango layout") );
     wxCHECK_RET( m_fontdesc, wxT("no Pango font description") );
 
+    bool underlined = m_font.Ok() && m_font.GetUnderlined();
+
 #if wxUSE_UNICODE
     const wxCharBuffer data = wxConvUTF8.cWC2MB( text );
 #else
     const wxWCharBuffer wdata = wxConvLocal.cMB2WC( text );
     const wxCharBuffer data = wxConvUTF8.cWC2MB( wdata );
 #endif
-    pango_layout_set_text( m_layout, (const char*) data, strlen( (const char*) data ));
+    size_t datalen = strlen((const char*)data);
+    pango_layout_set_text( m_layout, (const char*) data, datalen);
+    
+    if (underlined)
+    {
+        PangoAttrList *attrs = pango_attr_list_new();
+        PangoAttribute *a = pango_attr_underline_new(PANGO_UNDERLINE_SINGLE);
+        a->start_index = 0;
+        a->end_index = datalen;
+        pango_attr_list_insert(attrs, a);
+        pango_layout_set_attributes(m_layout, attrs);
+        pango_attr_list_unref(attrs);
+    }
 
     int w,h;
     
@@ -1520,6 +1534,12 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
         // Draw layout.
         gdk_draw_layout( m_window, m_textGC, x, y, m_layout );
     }
+
+    if (underlined)
+    {
+        // undo underline attributes setting:
+        pango_layout_set_attributes(m_layout, NULL);
+    }
     
     wxCoord width = w;
     wxCoord height = h;