From edae63b0769fab90e3a64d0e211ae3090b6120c8 Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Wed, 1 Sep 2010 14:48:54 +0000 Subject: [PATCH] wxRichTextCtrl::ApplyStyle now applies a paragraph style at the cursor without needing a selection, and setting the default style now avoids duplicating character attributes in subsequently typed text when they exist in the paragraph style. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65456 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/richtext/richtextctrl.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/richtext/richtextctrl.cpp b/src/richtext/richtextctrl.cpp index 0b115f6b6b..d46d6c31dd 100644 --- a/src/richtext/richtextctrl.cpp +++ b/src/richtext/richtextctrl.cpp @@ -3248,9 +3248,12 @@ bool wxRichTextCtrl::ApplyStyle(wxRichTextStyleDefinition* def) return SetListStyle(range, (wxRichTextListStyleDefinition*) def, flags); } + bool isPara = false; + // Make sure the attr has the style name if (def->IsKindOf(CLASSINFO(wxRichTextParagraphStyleDefinition))) { + isPara = true; attr.SetParagraphStyleName(def->GetName()); // If applying a paragraph style, we only want the paragraph nodes to adopt these @@ -3265,9 +3268,28 @@ bool wxRichTextCtrl::ApplyStyle(wxRichTextStyleDefinition* def) return SetStyleEx(GetSelectionRange(), attr, flags); else { - wxRichTextAttr current = GetDefaultStyleEx(); - current.Apply(attr); + wxTextAttr current = GetDefaultStyleEx(); + wxTextAttr defaultStyle(attr); + if (isPara) + { + // Don't apply extra character styles since they are already implied + // in the paragraph style + defaultStyle.SetFlags(defaultStyle.GetFlags() & ~wxTEXT_ATTR_CHARACTER); + } + current.Apply(defaultStyle); SetAndShowDefaultStyle(current); + + // If it's a paragraph style, we want to apply the style to the + // current paragraph even if we didn't select any text. + if (isPara) + { + long pos = GetAdjustedCaretPosition(GetCaretPosition()); + wxRichTextParagraph* para = GetBuffer().GetParagraphAtPosition(pos); + if (para) + { + return SetStyleEx(para->GetRange().FromInternal(), attr, flags); + } + } return true; } } -- 2.45.2