]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/textctrl.cpp
Do trunk builds on ravnsgaard.
[wxWidgets.git] / src / gtk / textctrl.cpp
index 81a1502eb483b3a0e268d98d0b1c3b89cf237278..8af511ffc7cbf04e1b908d613f9986fcd83baec7 100644 (file)
@@ -22,6 +22,7 @@
     #include "wx/math.h"
 #endif
 
+#include "wx/scopeguard.h"
 #include "wx/strconv.h"
 #include "wx/fontutil.h"        // for wxNativeFontInfo (GetNativeFontInfo())
 
@@ -818,6 +819,11 @@ GtkEditable *wxTextCtrl::GetEditable() const
     return GTK_EDITABLE(m_text);
 }
 
+GtkEntry *wxTextCtrl::GetEntry() const
+{
+    return GTK_ENTRY(m_text);
+}
+
 // ----------------------------------------------------------------------------
 // flags handling
 // ----------------------------------------------------------------------------
@@ -1680,6 +1686,50 @@ bool wxTextCtrl::SetStyle( long start, long end, const wxTextAttr& style )
     return false;
 }
 
+bool wxTextCtrl::GetStyle(long position, wxTextAttr& style)
+{
+    if ( !IsMultiLine() )
+    {
+        // no styles for GtkEntry
+        return false;
+    }
+
+    gint l = gtk_text_buffer_get_char_count( m_buffer );
+
+    wxCHECK_MSG( position >= 0 && position <= l, false,
+                 _T("invalid range in wxTextCtrl::GetStyle") );
+
+    GtkTextIter positioni;
+    gtk_text_buffer_get_iter_at_offset(m_buffer, &positioni, position);
+
+    // Obtain a copy of the default attributes
+    GtkTextAttributes * const
+        pattr = gtk_text_view_get_default_attributes(GTK_TEXT_VIEW(m_text));
+    wxON_BLOCK_EXIT1( g_free, pattr );
+
+    // And query GTK for the attributes at the given position using it as base
+    if ( !gtk_text_iter_get_attributes(&positioni, pattr) )
+    {
+        style = m_defaultStyle;
+    }
+    else // have custom attributes
+    {
+        style.SetBackgroundColour(pattr->appearance.bg_color);
+        style.SetTextColour(pattr->appearance.fg_color);
+
+        const wxGtkString
+            pangoFontString(pango_font_description_to_string(pattr->font));
+
+        wxFont font;
+        if ( font.SetNativeFontInfo(wxString(pangoFontString)) )
+            style.SetFont(font);
+
+        // TODO: set alignment, tabs and indents
+    }
+
+    return true;
+}
+
 void wxTextCtrl::DoApplyWidgetStyle(GtkRcStyle *style)
 {
     gtk_widget_modify_style(m_text, style);