From: Vadim Zeitlin Date: Sat, 31 Mar 2007 14:38:38 +0000 (+0000) Subject: don't remove the old tags of different kinds when setting new style, this removes... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7b377ed9b65b7554471e7347aa09960c77e35c15 don't remove the old tags of different kinds when setting new style, this removes the need for combining any style being set with the default one (based on patch 1518118) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45186 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index 4fc49796fb..90d8220629 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -51,6 +51,24 @@ static void wxGtkOnRemoveTag(GtkTextBuffer *buffer, } } +// remove all tags starting with the given prefix from the start..end range +static void +wxGtkTextRemoveTagsWithPrefix(GtkTextBuffer *text_buffer, + const char *prefix, + GtkTextIter *start, + GtkTextIter *end) +{ + gulong remove_handler_id = g_signal_connect + ( + text_buffer, + "remove_tag", + G_CALLBACK(wxGtkOnRemoveTag), + gpointer(prefix) + ); + gtk_text_buffer_remove_all_tags(text_buffer, start, end); + g_signal_handler_disconnect(text_buffer, remove_handler_id); +} + static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, GtkTextBuffer *text_buffer, const wxTextAttr& attr, @@ -60,13 +78,10 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, static gchar buf[1024]; GtkTextTag *tag; - gulong remove_handler_id = g_signal_connect (text_buffer, "remove_tag", - G_CALLBACK (wxGtkOnRemoveTag), gpointer("WX")); - gtk_text_buffer_remove_all_tags(text_buffer, start, end); - g_signal_handler_disconnect (text_buffer, remove_handler_id); - if (attr.HasFont()) { + wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXFONT", start, end); + PangoFontDescription *font_description = attr.GetFont().GetNativeFontInfo()->description; wxGtkString font_string(pango_font_description_to_string(font_description)); g_snprintf(buf, sizeof(buf), "WXFONT %s", font_string.c_str()); @@ -94,6 +109,8 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, if (attr.HasTextColour()) { + wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXFORECOLOR", start, end); + const GdkColor *colFg = attr.GetTextColour().GetColor(); g_snprintf(buf, sizeof(buf), "WXFORECOLOR %d %d %d", colFg->red, colFg->green, colFg->blue); @@ -107,6 +124,8 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, if (attr.HasBackgroundColour()) { + wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXBACKCOLOR", start, end); + const GdkColor *colBg = attr.GetBackgroundColour().GetColor(); g_snprintf(buf, sizeof(buf), "WXBACKCOLOR %d %d %d", colBg->red, colBg->green, colBg->blue); @@ -126,11 +145,7 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, gtk_text_iter_get_line(start) ); gtk_text_iter_forward_line(¶_end); - remove_handler_id = g_signal_connect (text_buffer, "remove_tag", - G_CALLBACK(wxGtkOnRemoveTag), - gpointer("WXALIGNMENT")); - gtk_text_buffer_remove_all_tags( text_buffer, ¶_start, ¶_end ); - g_signal_handler_disconnect (text_buffer, remove_handler_id); + wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXALIGNMENT", start, end); GtkJustification align; switch (attr.GetAlignment()) @@ -167,11 +182,7 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, gtk_text_iter_get_line(start) ); gtk_text_iter_forward_line(¶_end); - remove_handler_id = g_signal_connect (text_buffer, "remove_tag", - G_CALLBACK(wxGtkOnRemoveTag), - gpointer("WXINDENT")); - gtk_text_buffer_remove_all_tags( text_buffer, ¶_start, ¶_end ); - g_signal_handler_disconnect (text_buffer, remove_handler_id); + wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXINDENT", start, end); // Convert indent from 1/10th of a mm into pixels float factor; @@ -220,11 +231,7 @@ static void wxGtkTextApplyTagsFromAttr(GtkWidget *text, gtk_text_iter_get_line(start) ); gtk_text_iter_forward_line(¶_end); - remove_handler_id = g_signal_connect (text_buffer, "remove_tag", - G_CALLBACK(wxGtkOnRemoveTag), - gpointer("WXTABS")); - gtk_text_buffer_remove_all_tags( text_buffer, ¶_start, ¶_end ); - g_signal_handler_disconnect (text_buffer, remove_handler_id); + wxGtkTextRemoveTagsWithPrefix(text_buffer, "WXTABS", start, end); const wxArrayInt& tabs = attr.GetTabs(); @@ -821,9 +828,6 @@ bool wxTextCtrl::Create( wxWindow *parent, m_cursor = wxCursor( wxCURSOR_IBEAM ); - wxTextAttr attrDef(GetForegroundColour(), GetBackgroundColour(), GetFont()); - SetDefaultStyle( attrDef ); - return true; } @@ -1801,18 +1805,12 @@ bool wxTextCtrl::SetStyle( long start, long end, const wxTextAttr& style ) gtk_text_buffer_get_iter_at_offset( m_buffer, &starti, start ); gtk_text_buffer_get_iter_at_offset( m_buffer, &endi, end ); - // use the attributes from style which are set in it and fall back - // first to the default style and then to the text control default - // colours for the others - wxTextAttr attr = wxTextAttr::Combine(style, m_defaultStyle, this); - - wxGtkTextApplyTagsFromAttr( m_widget, m_buffer, attr, &starti, &endi ); + wxGtkTextApplyTagsFromAttr( m_widget, m_buffer, style, &starti, &endi ); return true; } + //else: single line text controls don't support styles - // else single line - // cannot do this for GTK+'s Entry widget return false; }