diff options
author | Armin Le Grand <Armin.Le.Grand@cib.de> | 2017-08-04 18:56:43 +0200 |
---|---|---|
committer | Armin Le Grand <Armin.Le.Grand@cib.de> | 2017-08-10 15:17:58 +0200 |
commit | f06b48a5dddab20fd1bbf9b5f3e8543593f5e590 (patch) | |
tree | ce3bb9e57cdb21a8414a49bf919b1c442d2687ea /include/editeng/editview.hxx | |
parent | 2ae717f2d722d78b29b51dc40194b64ab3bb5bc8 (diff) |
editviewoverlay: Allow EditView to run in Overlay
This is the first basic functionality to get the active
EditView with EditEngine work in the Overlay which all
Apps support. Reason is that the current EditEngine 'plugs'
into the Window and uses Invalidate() calls to repaint
deeply everything under a text change. While this is
acceptable for simple cases it can get very slow when
there are excessive, expensive to paint objects in the
background, e.g. MasterPages in Draw/Impress with gradients
and other stuff. This was avoided in older versions (LO51)
by 'guessing' a good BackgrundColor by the EditEngine,
not invalidating but painting actively using that guess
(with better or worse results) which someone removed.
For the future it is anyways the better way to get the
EditEngine functionality to Overlay and using Primitives,
this will be a first step. This may enable Text Editing
without repainting the Background (fast), using a non-XOR
selection paint and more. It will need thorough testing
and further experimenting due to EditEngine being used in
many places (DrawObjects, Calc Cells, Formular Fields,
Controls, ...)
Change-Id: Ib9eb0f3999fd61a82ddf7a60ab1ea6ccda3a60da
Diffstat (limited to 'include/editeng/editview.hxx')
-rw-r--r-- | include/editeng/editview.hxx | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/include/editeng/editview.hxx b/include/editeng/editview.hxx index 07333c75fe93..ac6ffc5433d1 100644 --- a/include/editeng/editview.hxx +++ b/include/editeng/editview.hxx @@ -72,6 +72,7 @@ namespace linguistic2 { class XLanguageGuessing; } }}} +namespace basegfx { class B2DRange; } enum class ScrollRangeCheck { @@ -79,6 +80,21 @@ enum class ScrollRangeCheck PaperWidthTextSize = 2, // VisArea must be within paper width, Text Size }; +// Helper class that allows to set a callback at the EditView. When +// set, Invalidates and repains are suppressed at the EditView, but +// EditViewInvalidate() will be triggered to allow the consumer to +// react itself as needed. +// Also Selection visualization is suppressed and EditViewSelectionChange +// is triggered when Selection changes and needs reaction. +class EDITENG_DLLPUBLIC EditViewCallbacks +{ +public: + EditViewCallbacks() {} + virtual ~EditViewCallbacks(); + + virtual void EditViewInvalidate() const = 0; + virtual void EditViewSelectionChange(const std::vector<basegfx::B2DRange>& rLogicRanges) const = 0; +}; class EDITENG_DLLPUBLIC EditView final { @@ -105,6 +121,10 @@ public: EditView( EditEngine* pEng, vcl::Window* pWindow ); ~EditView(); + // set EditViewCallbacks for external handling of Repaints/Visualization + void setEditViewCallbacks(const EditViewCallbacks* pEditViewCallbacks); + bool hasEditViewCallbacks() const; + void SetEditEngine( EditEngine* pEditEngine ); EditEngine* GetEditEngine() const; @@ -117,6 +137,7 @@ public: void Paint( const tools::Rectangle& rRect, OutputDevice* pTargetDevice = nullptr ); tools::Rectangle GetInvalidateRect() const; + void InvalidateWindow(const tools::Rectangle& rClipRect); void InvalidateOtherViewWindows( const tools::Rectangle& rInvRect ); void Invalidate(); Pair Scroll( long nHorzScroll, long nVertScroll, ScrollRangeCheck nRangeCheck = ScrollRangeCheck::NoNegative ); |