]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed #12566 (assert on deletion) due to inconsistent commit
authorJulian Smart <julian@anthemion.co.uk>
Thu, 14 Oct 2010 18:06:02 +0000 (18:06 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 14 Oct 2010 18:06:02 +0000 (18:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65805 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/richtext/richtextbuffer.h
samples/richtext/richtext.cpp
src/richtext/richtextbuffer.cpp

index 6f79ca90d3258612095245558fd400246559f435..afb4139089a2f51ec752e46ca3e637328e30a213 100644 (file)
@@ -1510,14 +1510,14 @@ protected:
  * TODO: a floating text box
  */
 
-class WXDLLIMPEXP_RICHTEXT wxRichTextBox: public wxRichTextParagraphLayoutBox
+class WXDLLIMPEXP_RICHTEXT wxRichTextBox: public wxRichTextCompositeObject
 {
     DECLARE_DYNAMIC_CLASS(wxRichTextBox)
 public:
 // Constructors
 
     wxRichTextBox(wxRichTextObject* parent = NULL);
-    wxRichTextBox(const wxRichTextBox& obj): wxRichTextParagraphLayoutBox() { Copy(obj); }
+    wxRichTextBox(const wxRichTextBox& obj): wxRichTextCompositeObject() { Copy(obj); }
 
 // Overrideables
 
@@ -1527,6 +1527,10 @@ public:
     /// Lay the item out
     virtual bool Layout(wxDC& dc, const wxRect& rect, int style);
 
+    /// Get/set the object size for the given range. Returns false if the range
+    /// is invalid for this object.
+    virtual bool GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position = wxPoint(0,0), wxArrayInt* partialExtents = NULL) const;
+
 // Accessors
 
 // Operations
index 1c5b0b97b72bf759a160f34681ab180b97eeaaa2..1f728785aec62893ad39e13d79330ae03772ded3 100644 (file)
@@ -792,7 +792,7 @@ void MyFrame::WriteInitialText()
     imageAttr.GetTextBoxAttr().GetTop().SetUnits(wxTEXT_ATTR_UNITS_PIXELS);
     imageAttr.GetTextBoxAttr().SetFloatMode(wxTEXT_BOX_ATTR_FLOAT_RIGHT);
     r.WriteImage(wxBitmap(zebra_xpm), wxBITMAP_TYPE_PNG, imageAttr);
-    r.WriteText(wxString(wxT("This is a simple test for a floating left image test. The zebra image should be placed at the left side of the current buffer and all the text should flow around it at the right side. This is a simple test for a floating left image test. The zebra image should be placed at the left side of the current buffer and all the text should flow around it at the right side. This is a simple test for a floating left image test. The zebra image should be placed at the left side of the current buffer and all the text should flow around it at the right side.")));
+    r.WriteText(wxString(wxT("This is a simple test for a floating right image test. The zebra image should be placed at the right side of the current buffer and all the text should flow around it at the left side. This is a simple test for a floating left image test. The zebra image should be placed at the right side of the current buffer and all the text should flow around it at the left side. This is a simple test for a floating left image test. The zebra image should be placed at the right side of the current buffer and all the text should flow around it at the left side.")));
     r.EndAlignment();
     r.Newline();
 
index e7a1a328f53ee4ad4eb18d063e91893e0d8bd287..0473d2f20e35e1b3fb414b2c196ae7751860ab2c 100644 (file)
@@ -6866,26 +6866,59 @@ bool wxRichTextStdRenderer::EnumerateStandardBulletNames(wxArrayString& bulletNa
 IMPLEMENT_DYNAMIC_CLASS(wxRichTextBox, wxRichTextCompositeObject)
 
 wxRichTextBox::wxRichTextBox(wxRichTextObject* parent):
-    wxRichTextParagraphLayoutBox(parent)
+    wxRichTextCompositeObject(parent)
 {
 }
 
 /// Draw the item
-bool wxRichTextBox::Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& rect, int descent, int style)
+bool wxRichTextBox::Draw(wxDC& dc, const wxRichTextRange& range, const wxRichTextRange& selectionRange, const wxRect& WXUNUSED(rect), int descent, int style)
 {
-    return wxRichTextParagraphLayoutBox::Draw(dc, range, selectionRange, rect, descent, style);
+    wxRichTextObjectList::compatibility_iterator node = m_children.GetFirst();
+    while (node)
+    {
+        wxRichTextObject* child = node->GetData();
+
+        wxRect childRect = wxRect(child->GetPosition(), child->GetCachedSize());
+        child->Draw(dc, range, selectionRange, childRect, descent, style);
+
+        node = node->GetNext();
+    }
+    return true;
 }
 
 /// Lay the item out
 bool wxRichTextBox::Layout(wxDC& dc, const wxRect& rect, int style)
 {
-    return wxRichTextParagraphLayoutBox::Layout(dc, rect, style);
+    wxRichTextObjectList::compatibility_iterator node = m_children.GetFirst();
+    while (node)
+    {
+        wxRichTextObject* child = node->GetData();
+        child->Layout(dc, rect, style);
+
+        node = node->GetNext();
+    }
+    m_dirty = false;
+    return true;
+
 }
 
 /// Copy
 void wxRichTextBox::Copy(const wxRichTextBox& obj)
 {
-    wxRichTextParagraphLayoutBox::Copy(obj);
+    wxRichTextCompositeObject::Copy(obj);
+}
+
+/// Get/set the size for the given range. Assume only has one child.
+bool wxRichTextBox::GetRangeSize(const wxRichTextRange& range, wxSize& size, int& descent, wxDC& dc, int flags, wxPoint position, wxArrayInt* partialExtents) const
+{
+    wxRichTextObjectList::compatibility_iterator node = m_children.GetFirst();
+    if (node)
+    {
+        wxRichTextObject* child = node->GetData();
+        return child->GetRangeSize(range, size, descent, dc, flags, position, partialExtents);
+    }
+    else
+        return false;
 }
 
 /*