wxRTC text box layout fixes

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73133 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2012-12-05 16:23:12 +00:00
parent 739c5499fc
commit c4168888e3
2 changed files with 297 additions and 128 deletions

View File

@@ -4237,7 +4237,7 @@ public:
/**
Lays out the floating objects.
*/
void LayoutFloat(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, int style, wxRichTextFloatCollector* floatCollector);
void LayoutFloat(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style, wxRichTextFloatCollector* floatCollector);
protected:

View File

@@ -1580,12 +1580,19 @@ void wxRichTextCompositeObject::Invalidate(const wxRichTextRange& invalidRange)
// Skip
}
else if (child->IsTopLevel())
{
if (child->IsFloating() && GetBuffer()->GetFloatCollector() && GetBuffer()->GetFloatCollector()->HasFloat(child))
{
// Don't invalidate subhierarchy if we've already been laid out
}
else
{
if (invalidRange == wxRICHTEXT_NONE)
child->Invalidate(wxRICHTEXT_NONE);
else
child->Invalidate(wxRICHTEXT_ALL); // All children must be invalidated if within parent range
}
}
else
child->Invalidate(invalidRange);
node = node->GetNext();
@@ -3389,7 +3396,7 @@ bool wxRichTextParagraphLayoutBox::GetStyleForRange(const wxRichTextRange& range
{
style = wxRichTextAttr();
wxRichTextAttr clashingAttr;
wxRichTextAttr clashingAttrPara, clashingAttrChar;
wxRichTextAttr absentAttrPara, absentAttrChar;
wxRichTextObjectList::compatibility_iterator node = GetChildren().GetFirst();
@@ -3402,7 +3409,7 @@ bool wxRichTextParagraphLayoutBox::GetStyleForRange(const wxRichTextRange& range
{
wxRichTextAttr paraStyle = para->GetCombinedAttributes(true /* use box attributes */);
CollectStyle(style, paraStyle, clashingAttr, absentAttrPara);
CollectStyle(style, paraStyle, clashingAttrPara, absentAttrPara);
}
else
{
@@ -3412,7 +3419,7 @@ bool wxRichTextParagraphLayoutBox::GetStyleForRange(const wxRichTextRange& range
// First collect paragraph attributes only
wxRichTextAttr paraStyle = para->GetCombinedAttributes();
paraStyle.SetFlags(paraStyle.GetFlags() & wxTEXT_ATTR_PARAGRAPH);
CollectStyle(style, paraStyle, clashingAttr, absentAttrPara);
CollectStyle(style, paraStyle, clashingAttrPara, absentAttrPara);
wxRichTextObjectList::compatibility_iterator childNode = para->GetChildren().GetFirst();
@@ -3426,7 +3433,7 @@ bool wxRichTextParagraphLayoutBox::GetStyleForRange(const wxRichTextRange& range
// Now collect character attributes only
childStyle.SetFlags(childStyle.GetFlags() & wxTEXT_ATTR_CHARACTER);
CollectStyle(style, childStyle, clashingAttr, absentAttrChar);
CollectStyle(style, childStyle, clashingAttrChar, absentAttrChar);
}
childNode = childNode->GetNext();
@@ -3990,7 +3997,6 @@ bool wxRichTextParagraphLayoutBox::SetListStyle(const wxRichTextRange& range, wx
newPara->GetAttributes().SetBulletStyle(newPara->GetAttributes().GetBulletStyle()|wxTEXT_ATTR_BULLET_STYLE_CONTINUATION);
else
{
// Now we need to do numbering
if (renumber)
{
newPara->GetAttributes().SetBulletNumber(n);
@@ -4007,6 +4013,7 @@ bool wxRichTextParagraphLayoutBox::SetListStyle(const wxRichTextRange& range, wx
newPara->GetAttributes().SetListStyleName(wxEmptyString);
newPara->GetAttributes().SetLeftIndent(0, 0);
newPara->GetAttributes().SetBulletText(wxEmptyString);
newPara->GetAttributes().SetBulletStyle(0);
// Eliminate the main list-related attributes
newPara->GetAttributes().SetFlags(newPara->GetAttributes().GetFlags() & ~wxTEXT_ATTR_LEFT_INDENT & ~wxTEXT_ATTR_BULLET_STYLE & ~wxTEXT_ATTR_BULLET_NUMBER & ~wxTEXT_ATTR_BULLET_TEXT & wxTEXT_ATTR_LIST_STYLE_NAME);
@@ -4287,6 +4294,7 @@ bool wxRichTextParagraphLayoutBox::PromoteList(int promoteBy, const wxRichTextRa
/// position of the paragraph that it had to start looking from.
bool wxRichTextParagraphLayoutBox::FindNextParagraphNumber(wxRichTextParagraph* previousParagraph, wxRichTextAttr& attr) const
{
// TODO: add GetNextChild/GetPreviousChild to composite
// Search for a paragraph that isn't a continuation paragraph (no bullet)
while (previousParagraph && previousParagraph->GetAttributes().HasBulletStyle() && previousParagraph->GetAttributes().GetBulletStyle() & wxTEXT_ATTR_BULLET_STYLE_CONTINUATION)
{
@@ -4303,7 +4311,7 @@ bool wxRichTextParagraphLayoutBox::FindNextParagraphNumber(wxRichTextParagraph*
previousParagraph = NULL;
}
if (!previousParagraph->GetAttributes().HasFlag(wxTEXT_ATTR_BULLET_STYLE) || previousParagraph->GetAttributes().GetBulletStyle() == wxTEXT_ATTR_BULLET_STYLE_NONE)
if (!previousParagraph || !previousParagraph->GetAttributes().HasFlag(wxTEXT_ATTR_BULLET_STYLE) || previousParagraph->GetAttributes().GetBulletStyle() == wxTEXT_ATTR_BULLET_STYLE_NONE)
return false;
wxRichTextBuffer* buffer = GetBuffer();
@@ -4569,7 +4577,7 @@ bool wxRichTextParagraph::Layout(wxDC& dc, wxRichTextDrawingContext& context, co
wxASSERT(buffer);
wxRichTextFloatCollector* collector = GetContainer()->GetFloatCollector();
wxASSERT(collector);
LayoutFloat(dc, context, rect, style, collector);
LayoutFloat(dc, context, rect, parentRect, style, collector);
wxRichTextAttr attr = GetCombinedAttributes();
context.ApplyVirtualAttributes(attr, this);
@@ -6112,7 +6120,7 @@ void wxRichTextParagraph::ClearDefaultTabs()
sm_defaultTabs.Clear();
}
void wxRichTextParagraph::LayoutFloat(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, int style, wxRichTextFloatCollector* floatCollector)
void wxRichTextParagraph::LayoutFloat(wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int style, wxRichTextFloatCollector* floatCollector)
{
wxRichTextObjectList::compatibility_iterator node = GetChildren().GetFirst();
while (node)
@@ -6120,9 +6128,23 @@ void wxRichTextParagraph::LayoutFloat(wxDC& dc, wxRichTextDrawingContext& contex
wxRichTextObject* anchored = node->GetData();
if (anchored && anchored->IsFloating() && !floatCollector->HasFloat(anchored))
{
int x = 0;
wxRichTextAttr parentAttr(GetAttributes());
context.ApplyVirtualAttributes(parentAttr, this);
#if 1
// 27-09-2012
wxRect availableSpace = GetParent()->GetAvailableContentArea(dc, context, rect);
anchored->LayoutToBestSize(dc, context, GetBuffer(),
parentAttr, anchored->GetAttributes(),
parentRect, availableSpace,
style);
wxSize size = anchored->GetCachedSize();
#else
wxSize size;
int descent, x = 0;
int descent = 0;
anchored->GetRangeSize(anchored->GetRange(), size, descent, dc, context, style);
#endif
int offsetY = 0;
if (anchored->GetAttributes().GetTextBoxAttr().GetTop().IsValid())
@@ -6150,7 +6172,8 @@ void wxRichTextParagraph::LayoutFloat(wxDC& dc, wxRichTextDrawingContext& contex
else if (anchored->GetAttributes().GetTextBoxAttr().GetFloatMode() == wxTEXT_BOX_ATTR_FLOAT_RIGHT)
x = rect.x + rect.width - size.x;
anchored->SetPosition(wxPoint(x, pos));
//anchored->SetPosition(wxPoint(x, pos));
anchored->Move(wxPoint(x, pos)); // should move children
anchored->SetCachedSize(size);
floatCollector->CollectFloat(this, anchored);
}
@@ -10261,9 +10284,15 @@ bool wxRichTextAction::Do()
{
ApplyParagraphs(GetNewParagraphs());
// Invalidate the whole buffer if there were floating objects
if (container->GetFloatingObjectCount() > 0)
m_buffer->InvalidateHierarchy(wxRICHTEXT_ALL);
else
{
// InvalidateHierarchy goes up the hierarchy as well as down, otherwise with a nested object,
// Layout() would stop prematurely at the top level.
container->InvalidateHierarchy(GetRange());
}
UpdateAppearance(GetPosition());
@@ -10291,6 +10320,10 @@ bool wxRichTextAction::Do()
// InvalidateHierarchy goes up the hierarchy as well as down, otherwise with a nested object,
// Layout() would stop prematurely at the top level.
// Invalidate the whole buffer if there were floating objects
if (container->GetFloatingObjectCount() > 0)
m_buffer->InvalidateHierarchy(wxRICHTEXT_ALL);
else
container->InvalidateHierarchy(GetRange());
UpdateAppearance(GetPosition());
@@ -10324,6 +10357,10 @@ bool wxRichTextAction::Do()
// InvalidateHierarchy goes up the hierarchy as well as down, otherwise with a nested object,
// Layout() would stop prematurely at the top level.
// Invalidate the whole buffer if there were floating objects
if (container->GetFloatingObjectCount() > 0)
m_buffer->InvalidateHierarchy(wxRICHTEXT_ALL);
else
container->InvalidateHierarchy(GetRange());
UpdateAppearance(GetPosition());
@@ -12451,8 +12488,6 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
long forbiddenFlags = clashingAttr.GetFlags()|absentAttr.GetFlags();
if (attr.HasFont())
{
// If different font size units are being used, this is a clash.
if (((attr.GetFlags() & wxTEXT_ATTR_FONT_SIZE) | (currentStyle.GetFlags() & wxTEXT_ATTR_FONT_SIZE)) == wxTEXT_ATTR_FONT_SIZE)
{
@@ -12476,6 +12511,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontSize(attr.GetFontSize());
}
else if (!attr.HasFontPointSize() && currentStyle.HasFontPointSize())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_POINT_SIZE);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_POINT_SIZE);
}
if (attr.HasFontPixelSize() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_FONT_PIXEL_SIZE))
{
@@ -12491,6 +12531,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontPixelSize(attr.GetFontSize());
}
else if (!attr.HasFontPixelSize() && currentStyle.HasFontPixelSize())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_PIXEL_SIZE);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_PIXEL_SIZE);
}
}
if (attr.HasFontItalic() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_FONT_ITALIC))
@@ -12507,6 +12552,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontStyle(attr.GetFontStyle());
}
else if (!attr.HasFontItalic() && currentStyle.HasFontItalic())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_ITALIC);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_ITALIC);
}
if (attr.HasFontFamily() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_FONT_FAMILY))
{
@@ -12522,6 +12572,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontFamily(attr.GetFontFamily());
}
else if (!attr.HasFontFamily() && currentStyle.HasFontFamily())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_FAMILY);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_FAMILY);
}
if (attr.HasFontWeight() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_FONT_WEIGHT))
{
@@ -12537,6 +12592,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontWeight(attr.GetFontWeight());
}
else if (!attr.HasFontWeight() && currentStyle.HasFontWeight())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_WEIGHT);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_WEIGHT);
}
if (attr.HasFontFaceName() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_FONT_FACE))
{
@@ -12555,6 +12615,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontFaceName(attr.GetFontFaceName());
}
else if (!attr.HasFontFaceName() && currentStyle.HasFontFaceName())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_FACE);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_FACE);
}
if (attr.HasFontUnderlined() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_FONT_UNDERLINE))
{
@@ -12570,6 +12635,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontUnderlined(attr.GetFontUnderlined());
}
else if (!attr.HasFontUnderlined() && currentStyle.HasFontUnderlined())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_UNDERLINE);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_UNDERLINE);
}
if (attr.HasFontStrikethrough() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_FONT_STRIKETHROUGH))
{
@@ -12585,6 +12655,10 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetFontStrikethrough(attr.GetFontStrikethrough());
}
else if (!attr.HasFontStrikethrough() && currentStyle.HasFontStrikethrough())
{
clashingAttr.AddFlag(wxTEXT_ATTR_FONT_STRIKETHROUGH);
currentStyle.RemoveFlag(wxTEXT_ATTR_FONT_STRIKETHROUGH);
}
if (attr.HasTextColour() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_TEXT_COLOUR))
@@ -12601,6 +12675,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetTextColour(attr.GetTextColour());
}
else if (!attr.HasTextColour() && currentStyle.HasTextColour())
{
clashingAttr.AddFlag(wxTEXT_ATTR_TEXT_COLOUR);
currentStyle.RemoveFlag(wxTEXT_ATTR_TEXT_COLOUR);
}
if (attr.HasBackgroundColour() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_BACKGROUND_COLOUR))
{
@@ -12616,6 +12695,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetBackgroundColour(attr.GetBackgroundColour());
}
else if (!attr.HasBackgroundColour() && currentStyle.HasBackgroundColour())
{
clashingAttr.AddFlag(wxTEXT_ATTR_BACKGROUND_COLOUR);
currentStyle.RemoveFlag(wxTEXT_ATTR_BACKGROUND_COLOUR);
}
if (attr.HasAlignment() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_ALIGNMENT))
{
@@ -12631,6 +12715,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetAlignment(attr.GetAlignment());
}
else if (!attr.HasAlignment() && currentStyle.HasAlignment())
{
clashingAttr.AddFlag(wxTEXT_ATTR_ALIGNMENT);
currentStyle.RemoveFlag(wxTEXT_ATTR_ALIGNMENT);
}
if (attr.HasTabs() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_TABS))
{
@@ -12646,6 +12735,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetTabs(attr.GetTabs());
}
else if (!attr.HasTabs() && currentStyle.HasTabs())
{
clashingAttr.AddFlag(wxTEXT_ATTR_TABS);
currentStyle.RemoveFlag(wxTEXT_ATTR_TABS);
}
if (attr.HasLeftIndent() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_LEFT_INDENT))
{
@@ -12661,6 +12755,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetLeftIndent(attr.GetLeftIndent(), attr.GetLeftSubIndent());
}
else if (!attr.HasLeftIndent() && currentStyle.HasLeftIndent())
{
clashingAttr.AddFlag(wxTEXT_ATTR_LEFT_INDENT);
currentStyle.RemoveFlag(wxTEXT_ATTR_LEFT_INDENT);
}
if (attr.HasRightIndent() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_RIGHT_INDENT))
{
@@ -12676,6 +12775,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetRightIndent(attr.GetRightIndent());
}
else if (!attr.HasRightIndent() && currentStyle.HasRightIndent())
{
clashingAttr.AddFlag(wxTEXT_ATTR_RIGHT_INDENT);
currentStyle.RemoveFlag(wxTEXT_ATTR_RIGHT_INDENT);
}
if (attr.HasParagraphSpacingAfter() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_PARA_SPACING_AFTER))
{
@@ -12691,6 +12795,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetParagraphSpacingAfter(attr.GetParagraphSpacingAfter());
}
else if (!attr.HasParagraphSpacingAfter() && currentStyle.HasParagraphSpacingAfter())
{
clashingAttr.AddFlag(wxTEXT_ATTR_PARA_SPACING_AFTER);
currentStyle.RemoveFlag(wxTEXT_ATTR_PARA_SPACING_AFTER);
}
if (attr.HasParagraphSpacingBefore() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_PARA_SPACING_BEFORE))
{
@@ -12706,6 +12815,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetParagraphSpacingBefore(attr.GetParagraphSpacingBefore());
}
else if (!attr.HasParagraphSpacingBefore() && currentStyle.HasParagraphSpacingBefore())
{
clashingAttr.AddFlag(wxTEXT_ATTR_PARA_SPACING_BEFORE);
currentStyle.RemoveFlag(wxTEXT_ATTR_PARA_SPACING_BEFORE);
}
if (attr.HasLineSpacing() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_LINE_SPACING))
{
@@ -12721,6 +12835,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetLineSpacing(attr.GetLineSpacing());
}
else if (!attr.HasLineSpacing() && currentStyle.HasLineSpacing())
{
clashingAttr.AddFlag(wxTEXT_ATTR_LINE_SPACING);
currentStyle.RemoveFlag(wxTEXT_ATTR_LINE_SPACING);
}
if (attr.HasCharacterStyleName() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_CHARACTER_STYLE_NAME))
{
@@ -12736,6 +12855,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetCharacterStyleName(attr.GetCharacterStyleName());
}
else if (!attr.HasCharacterStyleName() && currentStyle.HasCharacterStyleName())
{
clashingAttr.AddFlag(wxTEXT_ATTR_CHARACTER_STYLE_NAME);
currentStyle.RemoveFlag(wxTEXT_ATTR_CHARACTER_STYLE_NAME);
}
if (attr.HasParagraphStyleName() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_PARAGRAPH_STYLE_NAME))
{
@@ -12751,6 +12875,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetParagraphStyleName(attr.GetParagraphStyleName());
}
else if (!attr.HasParagraphStyleName() && currentStyle.HasParagraphStyleName())
{
clashingAttr.AddFlag(wxTEXT_ATTR_PARAGRAPH_STYLE_NAME);
currentStyle.RemoveFlag(wxTEXT_ATTR_PARAGRAPH_STYLE_NAME);
}
if (attr.HasListStyleName() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_LIST_STYLE_NAME))
{
@@ -12766,6 +12895,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetListStyleName(attr.GetListStyleName());
}
else if (!attr.HasListStyleName() && currentStyle.HasListStyleName())
{
clashingAttr.AddFlag(wxTEXT_ATTR_LIST_STYLE_NAME);
currentStyle.RemoveFlag(wxTEXT_ATTR_LIST_STYLE_NAME);
}
if (attr.HasBulletStyle() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_BULLET_STYLE))
{
@@ -12781,6 +12915,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetBulletStyle(attr.GetBulletStyle());
}
else if (!attr.HasBulletStyle() && currentStyle.HasBulletStyle())
{
clashingAttr.AddFlag(wxTEXT_ATTR_BULLET_STYLE);
currentStyle.RemoveFlag(wxTEXT_ATTR_BULLET_STYLE);
}
if (attr.HasBulletNumber() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_BULLET_NUMBER))
{
@@ -12796,6 +12935,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetBulletNumber(attr.GetBulletNumber());
}
else if (!attr.HasBulletNumber() && currentStyle.HasBulletNumber())
{
clashingAttr.AddFlag(wxTEXT_ATTR_BULLET_NUMBER);
currentStyle.RemoveFlag(wxTEXT_ATTR_BULLET_NUMBER);
}
if (attr.HasBulletText() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_BULLET_TEXT))
{
@@ -12814,6 +12958,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
currentStyle.SetBulletFont(attr.GetBulletFont());
}
}
else if (!attr.HasBulletText() && currentStyle.HasBulletText())
{
clashingAttr.AddFlag(wxTEXT_ATTR_BULLET_TEXT);
currentStyle.RemoveFlag(wxTEXT_ATTR_BULLET_TEXT);
}
if (attr.HasBulletName() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_BULLET_NAME))
{
@@ -12831,6 +12980,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
currentStyle.SetBulletName(attr.GetBulletName());
}
}
else if (!attr.HasBulletName() && currentStyle.HasBulletName())
{
clashingAttr.AddFlag(wxTEXT_ATTR_BULLET_NAME);
currentStyle.RemoveFlag(wxTEXT_ATTR_BULLET_NAME);
}
if (attr.HasURL() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_URL))
{
@@ -12848,6 +13002,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
currentStyle.SetURL(attr.GetURL());
}
}
else if (!attr.HasURL() && currentStyle.HasURL())
{
clashingAttr.AddFlag(wxTEXT_ATTR_URL);
currentStyle.RemoveFlag(wxTEXT_ATTR_URL);
}
if (attr.HasTextEffects() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_EFFECTS))
{
@@ -12887,6 +13046,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
if (currentStyle.GetTextEffectFlags() == 0)
currentStyle.RemoveFlag(wxTEXT_ATTR_EFFECTS);
}
else if (!attr.HasTextEffects() && currentStyle.HasTextEffects())
{
clashingAttr.AddFlag(wxTEXT_ATTR_EFFECTS);
currentStyle.RemoveFlag(wxTEXT_ATTR_EFFECTS);
}
if (attr.HasOutlineLevel() && !wxHasStyle(forbiddenFlags, wxTEXT_ATTR_OUTLINE_LEVEL))
{
@@ -12902,6 +13066,11 @@ void wxTextAttrCollectCommonAttributes(wxTextAttr& currentStyle, const wxTextAtt
else
currentStyle.SetOutlineLevel(attr.GetOutlineLevel());
}
else if (!attr.HasOutlineLevel() && currentStyle.HasOutlineLevel())
{
clashingAttr.AddFlag(wxTEXT_ATTR_OUTLINE_LEVEL);
currentStyle.RemoveFlag(wxTEXT_ATTR_OUTLINE_LEVEL);
}
}
WX_DEFINE_OBJARRAY(wxRichTextVariantArray);