xref: /AOO41X/main/svx/inc/svx/sdr/overlay/overlaymanager.hxx (revision a56bd57b6589a8d3cc2cdff6932c7993d643327b)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SDR_OVERLAY_OVERLAYMANAGER_HXX
25 #define _SDR_OVERLAY_OVERLAYMANAGER_HXX
26 
27 #include <svx/sdr/animation/scheduler.hxx>
28 #include <svx/sdr/overlay/overlayobject.hxx>
29 #include <vcl/mapmod.hxx>
30 #include <tools/color.hxx>
31 #include "svx/svxdllapi.h"
32 #include <svtools/optionsdrawinglayer.hxx>
33 #include <basegfx/matrix/b2dhommatrix.hxx>
34 #include <drawinglayer/geometry/viewinformation2d.hxx>
35 
36 //////////////////////////////////////////////////////////////////////////////
37 // predeclarations
38 
39 class OutputDevice;
40 class Region;
41 
42 namespace sdr { namespace overlay {
43     class OverlayObject;
44 }}
45 
46 namespace basegfx {
47     class B2DRange;
48 }
49 
50 //////////////////////////////////////////////////////////////////////////////
51 
52 namespace sdr
53 {
54     namespace overlay
55     {
56         class SVX_DLLPUBLIC OverlayManager : public ::sdr::animation::Scheduler
57         {
58         protected:
59             // the OutputDevice to work on, set on construction and not to be changed
60             OutputDevice&                               rmOutputDevice;
61 
62             // the vector of registered OverlayObjects
63             OverlayObjectVector                         maOverlayObjects;
64 
65             // Stripe support. All striped OverlayObjects use these stripe
66             // values. Changes change all those objects.
67             Color                                       maStripeColorA; // defaults to Color(COL_BLACK)
68             Color                                       maStripeColorB; // defaults to Color(COL_WHITE)
69             sal_uInt32                                  mnStripeLengthPixel; // defaults to 4L
70 
71             // hold an incarnation of Drawinglayer configuration options
72             SvtOptionsDrawinglayer                      maDrawinglayerOpt;
73 
74             // hold buffered the logic length of discrete vector (1.0, 0.0) and the
75             // view transformation belonging to it. Update happens in getDiscreteOne()
76             basegfx::B2DHomMatrix                       maViewTransformation;
77             drawinglayer::geometry::ViewInformation2D   maViewInformation2D;
78             double                                      mfDiscreteOne;
79 
80             // internal
81             void ImpDrawMembers(const basegfx::B2DRange& rRange, OutputDevice& rDestinationDevice) const;
82             void ImpStripeDefinitionChanged();
83             void impApplyRemoveActions(OverlayObject& rTarget);
84             void impApplyAddActions(OverlayObject& rTarget);
85 
86             // return mfDiscreteOne to derivations, but also check for buffered local
87             // ViewTransformation and evtl. correct mfDiscreteOne
88             double getDiscreteOne() const;
89 
90         public:
91             OverlayManager(OutputDevice& rOutputDevice);
92             virtual ~OverlayManager();
93 
94             // access to current ViewInformation2D; this call checks and evtl. updates ViewInformation2D
95             const drawinglayer::geometry::ViewInformation2D getCurrentViewInformation2D() const;
96 
97             // complete redraw
98             virtual void completeRedraw(const Region& rRegion, OutputDevice* pPreRenderDevice = 0) const;
99 
100             // flush. Do buffered updates.
101             virtual void flush();
102 
103             // #i68597# part of content gets copied, react on it
104             virtual void copyArea(const Point& rDestPt, const Point& rSrcPt, const Size& rSrcSize);
105 
106             // restore part of background. Implemented form buffered versions only.
107             virtual void restoreBackground(const Region& rRegion) const;
108 
109             // get the OutputDevice
getOutputDevice() const110             OutputDevice& getOutputDevice() const { return rmOutputDevice; }
111 
112             // add and remove OverlayObjects
113             void add(OverlayObject& rOverlayObject);
114             void remove(OverlayObject& rOverlayObject);
115 
116             // invalidate the given range at local OutputDevice
117             virtual void invalidateRange(const basegfx::B2DRange& rRange);
118 
119             // stripe support ColA
getStripeColorA() const120             Color getStripeColorA() const { return maStripeColorA; }
121             void setStripeColorA(Color aNew= Color(COL_BLACK));
122 
123             // stripe support ColB
getStripeColorB() const124             Color getStripeColorB() const { return maStripeColorB; }
125             void setStripeColorB(Color aNew = Color(COL_WHITE));
126 
127             // stripe support StripeLengthPixel
getStripeLengthPixel() const128             sal_uInt32 getStripeLengthPixel() const { return mnStripeLengthPixel; }
129             void setStripeLengthPixel(sal_uInt32 nNew = 5L);
130 
131             // access to maDrawinglayerOpt
getDrawinglayerOpt() const132             const SvtOptionsDrawinglayer& getDrawinglayerOpt() const { return maDrawinglayerOpt; }
133         };
134     } // end of namespace overlay
135 } // end of namespace sdr
136 
137 //////////////////////////////////////////////////////////////////////////////
138 
139 #endif //_SDR_OVERLAY_OVERLAYMANAGER_HXX
140 
141 // eof
142