X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7c081bd21c8f2a6331eae678328f23e45224b917..18138662efd0bc550d78cbe32e93e25b43bbcbd2:/src/richtext/richtextbuffer.cpp diff --git a/src/richtext/richtextbuffer.cpp b/src/richtext/richtextbuffer.cpp index 8d7b93134c..47f1e8d8e3 100644 --- a/src/richtext/richtextbuffer.cpp +++ b/src/richtext/richtextbuffer.cpp @@ -1561,11 +1561,12 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const bool parasOnly = ((flags & wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY) != 0); bool charactersOnly = ((flags & wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY) != 0); bool resetExistingStyle = ((flags & wxRICHTEXT_SETSTYLE_RESET) != 0); + bool removeStyle = ((flags & wxRICHTEXT_SETSTYLE_REMOVE) != 0); // Apply paragraph style first, if any wxRichTextAttr wholeStyle(style); - if (wholeStyle.HasParagraphStyleName() && GetStyleSheet()) + if (!removeStyle && wholeStyle.HasParagraphStyleName() && GetStyleSheet()) { wxRichTextParagraphStyleDefinition* def = GetStyleSheet()->FindParagraphStyle(wholeStyle.GetParagraphStyleName()); if (def) @@ -1576,7 +1577,7 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const wxRichTextAttr characterAttributes(wholeStyle); characterAttributes.SetFlags(characterAttributes.GetFlags() & (wxTEXT_ATTR_CHARACTER)); - if (characterAttributes.HasCharacterStyleName() && GetStyleSheet()) + if (!removeStyle && characterAttributes.HasCharacterStyleName() && GetStyleSheet()) { wxRichTextCharacterStyleDefinition* def = GetStyleSheet()->FindCharacterStyle(characterAttributes.GetCharacterStyleName()); if (def) @@ -1630,7 +1631,12 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const // to be included in the paragraph style if ((paragraphStyle || parasOnly) && !charactersOnly) { - if (resetExistingStyle) + if (removeStyle) + { + // Removes the given style from the paragraph + wxRichTextRemoveStyle(newPara->GetAttributes(), style); + } + else if (resetExistingStyle) newPara->GetAttributes() = wholeStyle; else { @@ -1705,7 +1711,12 @@ bool wxRichTextParagraphLayoutBox::SetStyle(const wxRichTextRange& range, const { wxRichTextObject* child = node2->GetData(); - if (resetExistingStyle) + if (removeStyle) + { + // Removes the given style from the paragraph + wxRichTextRemoveStyle(child->GetAttributes(), style); + } + else if (resetExistingStyle) child->GetAttributes() = characterAttributes; else { @@ -3017,6 +3028,16 @@ bool wxRichTextParagraph::Draw(wxDC& dc, const wxRichTextRange& range, const wxR wxTextAttrEx bulletAttr(GetCombinedAttributes()); + // Combine with the font of the first piece of content, if one is specified + if (GetChildren().GetCount() > 0) + { + wxRichTextObject* firstObj = (wxRichTextObject*) GetChildren().GetFirst()->GetData(); + if (firstObj->GetAttributes().HasFont()) + { + wxRichTextApplyStyle(bulletAttr, firstObj->GetAttributes()); + } + } + // Get line height from first line, if any wxRichTextLine* line = m_cachedLines.GetFirst() ? (wxRichTextLine* ) m_cachedLines.GetFirst()->GetData() : (wxRichTextLine*) NULL; @@ -3658,12 +3679,12 @@ int wxRichTextParagraph::HitTest(wxDC& dc, const wxPoint& pt, long& textPosition if (pt.x < linePos.x) { textPosition = lineRange.GetStart(); - return wxRICHTEXT_HITTEST_BEFORE; + return wxRICHTEXT_HITTEST_BEFORE|wxRICHTEXT_HITTEST_OUTSIDE; } else if (pt.x >= (linePos.x + lineSize.x)) { textPosition = lineRange.GetEnd(); - return wxRICHTEXT_HITTEST_AFTER; + return wxRICHTEXT_HITTEST_AFTER|wxRICHTEXT_HITTEST_OUTSIDE; } else { @@ -7089,6 +7110,17 @@ bool wxRichTextApplyStyle(wxTextAttrEx& destStyle, const wxRichTextAttr& style, return true; } +// Remove attributes +bool wxRichTextRemoveStyle(wxTextAttrEx& destStyle, const wxRichTextAttr& style) +{ + int flags = style.GetFlags(); + int destFlags = destStyle.GetFlags(); + + destStyle.SetFlags(destFlags & ~flags); + + return true; +} + /// Combine two bitlists, specifying the bits of interest with separate flags. bool wxRichTextCombineBitlists(int& valueA, int valueB, int& flagsA, int flagsB) {