From f631f732af72353b3ab73cbe8c4e07964187e11d Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Thu, 27 Feb 2014 10:03:53 +0000 Subject: [PATCH] Corrections to attribute manipulation git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76022 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/textcmn.cpp | 18 ++++++++++++++++++ src/richtext/richtextbuffer.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/common/textcmn.cpp b/src/common/textcmn.cpp index 4cba1dec5b..c1f1c45256 100644 --- a/src/common/textcmn.cpp +++ b/src/common/textcmn.cpp @@ -392,6 +392,12 @@ bool wxTextAttr::EqPartial(const wxTextAttr& attr, bool weakTest) const if ((HasPageBreak() != attr.HasPageBreak())) return false; + if ((GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE) != (attr.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE)) + return false; + + if ((GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER) != (attr.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER)) + return false; + if (HasTextEffects() && attr.HasTextEffects()) { if (!BitlistsEqPartial(GetTextEffects(), attr.GetTextEffects(), GetTextEffectFlags())) @@ -705,6 +711,18 @@ bool wxTextAttr::Apply(const wxTextAttr& style, const wxTextAttr* compareWith) destStyle.SetPageBreak(); } + if (style.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE) + { + if (!(compareWith && (compareWith->GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE))) + destStyle.SetFlags(destStyle.GetFlags()|wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE); + } + + if (style.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER) + { + if (!(compareWith && (compareWith->GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER))) + destStyle.SetFlags(destStyle.GetFlags()|wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER); + } + if (style.HasTextEffects()) { if (!(compareWith && compareWith->HasTextEffects() && compareWith->GetTextEffects() == style.GetTextEffects())) diff --git a/src/richtext/richtextbuffer.cpp b/src/richtext/richtextbuffer.cpp index 91a57f23ee..90adb1e49d 100644 --- a/src/richtext/richtextbuffer.cpp +++ b/src/richtext/richtextbuffer.cpp @@ -14445,6 +14445,36 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt currentStyle.RemoveFlag(wxTEXT_ATTR_LINE_SPACING); } + if (attr.HasPageBreak() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_PAGE_BREAK)) + { + currentStyle.SetPageBreak(true); + } + else if (!attr.HasPageBreak() && currentStyle.HasPageBreak()) + { + clashingAttr.AddFlag(wxTEXT_ATTR_PAGE_BREAK); + currentStyle.RemoveFlag(wxTEXT_ATTR_PAGE_BREAK); + } + + if ((attr.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE) && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE)) + { + currentStyle.AddFlag(wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE); + } + else if (!(attr.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE) && (currentStyle.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE)) + { + clashingAttr.AddFlag(wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE); + currentStyle.RemoveFlag(wxTEXT_ATTR_AVOID_PAGE_BREAK_BEFORE); + } + + if ((attr.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER) && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER)) + { + currentStyle.AddFlag(wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER); + } + else if (!(attr.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER) && (currentStyle.GetFlags() & wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER)) + { + clashingAttr.AddFlag(wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER); + currentStyle.RemoveFlag(wxTEXT_ATTR_AVOID_PAGE_BREAK_AFTER); + } + if (attr.HasCharacterStyleName() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_CHARACTER_STYLE_NAME)) { if (currentStyle.HasCharacterStyleName())