diff --git a/include/wx/richtext/richtextctrl.h b/include/wx/richtext/richtextctrl.h index 52fe8f17b4..a1f2221b98 100644 --- a/include/wx/richtext/richtextctrl.h +++ b/include/wx/richtext/richtextctrl.h @@ -1418,6 +1418,11 @@ public: */ virtual bool LayoutContent(bool onlyVisibleRect = false); + /** + Implements layout. An application may override this to perform operations before or after layout. + */ + virtual void DoLayoutBuffer(wxRichTextBuffer& buffer, wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int flags); + /** Move the caret to the given character position. diff --git a/interface/wx/richtext/richtextctrl.h b/interface/wx/richtext/richtextctrl.h index 2ada97c629..0d15bdb185 100644 --- a/interface/wx/richtext/richtextctrl.h +++ b/interface/wx/richtext/richtextctrl.h @@ -1374,6 +1374,11 @@ public: */ virtual bool LayoutContent(bool onlyVisibleRect = false); + /** + Implements layout. An application may override this to perform operations before or after layout. + */ + virtual void DoLayoutBuffer(wxRichTextBuffer& buffer, wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int flags); + /** Move the caret to the given character position. diff --git a/src/richtext/richtextctrl.cpp b/src/richtext/richtextctrl.cpp index 95420c6688..ca31b9484e 100644 --- a/src/richtext/richtextctrl.cpp +++ b/src/richtext/richtextctrl.cpp @@ -468,7 +468,11 @@ void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) { dc.SetUserScale(GetScale(), GetScale()); - GetBuffer().Layout(dc, context, availableSpace, availableSpace, wxRICHTEXT_FIXED_WIDTH|wxRICHTEXT_VARIABLE_HEIGHT); + GetBuffer().Defragment(context); + GetBuffer().UpdateRanges(); // If items were deleted, ranges need recalculation + + DoLayoutBuffer(GetBuffer(), dc, context, availableSpace, availableSpace, wxRICHTEXT_FIXED_WIDTH|wxRICHTEXT_VARIABLE_HEIGHT); + GetBuffer().Invalidate(wxRICHTEXT_NONE); dc.SetUserScale(1.0, 1.0); @@ -4058,7 +4062,7 @@ bool wxRichTextCtrl::LayoutContent(bool onlyVisibleRect) wxRichTextDrawingContext context(& GetBuffer()); GetBuffer().Defragment(context); GetBuffer().UpdateRanges(); // If items were deleted, ranges need recalculation - GetBuffer().Layout(dc, context, availableSpace, availableSpace, flags); + DoLayoutBuffer(GetBuffer(), dc, context, availableSpace, availableSpace, flags); GetBuffer().Invalidate(wxRICHTEXT_NONE); dc.SetUserScale(1.0, 1.0); @@ -4073,6 +4077,11 @@ bool wxRichTextCtrl::LayoutContent(bool onlyVisibleRect) return true; } +void wxRichTextCtrl::DoLayoutBuffer(wxRichTextBuffer& buffer, wxDC& dc, wxRichTextDrawingContext& context, const wxRect& rect, const wxRect& parentRect, int flags) +{ + buffer.Layout(dc, context, rect, parentRect, flags); +} + /// Is all of the selection, or the current caret position, bold? bool wxRichTextCtrl::IsSelectionBold() {