xref: /AOO41X/main/svx/inc/svx/sdr/contact/viewobjectcontact.hxx (revision 3334a7e6acdae9820fa1a6f556bb10129a8de6b2)
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_CONTACT_VIEWOBJECTCONTACT_HXX
25 #define _SDR_CONTACT_VIEWOBJECTCONTACT_HXX
26 
27 #include <sal/types.h>
28 
29 #include <vector>
30 #include <tools/debug.hxx>
31 #include <tools/gen.hxx>
32 #include "svx/svxdllapi.h"
33 #include <drawinglayer/primitive2d/baseprimitive2d.hxx>
34 
35 //////////////////////////////////////////////////////////////////////////////
36 // predeclarations
37 
38 class Region;
39 
40 namespace sdr { namespace contact {
41     class DisplayInfo;
42     class ObjectContact;
43     class ViewContact;
44     class ViewObjectContactRedirector;
45 }}
46 
47 namespace sdr { namespace animation {
48     class PrimitiveAnimation;
49 }}
50 
51 //////////////////////////////////////////////////////////////////////////////
52 
53 namespace sdr
54 {
55     namespace contact
56     {
57         class SVX_DLLPUBLIC ViewObjectContact
58         {
59         private:
60             // must-exist and constant contacts
61             ObjectContact&                                  mrObjectContact;
62             ViewContact&                                    mrViewContact;
63 
64             // This range defines the object's BoundRect
65             basegfx::B2DRange                               maObjectRange;
66 
67             // PrimitiveSequence of the ViewContact. This contains all necessary information
68             // for the graphical visualisation and needs to be supported by all VCs which
69             // can be visualized.
70             drawinglayer::primitive2d::Primitive2DSequence  mxPrimitive2DSequence;
71 
72             // the PrimitiveAnimation if Primitive2DSequence contains animations
73             sdr::animation::PrimitiveAnimation*             mpPrimitiveAnimation;
74 
75             // bitfield
76             // This bool gets set when the object gets invalidated by ActionChanged() and
77             // can be used from the OC to late-invalidates
78             unsigned                                        mbLazyInvalidate : 1;
79 
80         protected:
81             // make redirector a protected friend, it needs to call createPrimitives as default action
82             friend class ViewObjectContactRedirector;
83 
84             // Called from getPrimitive2DSequence() when vector has changed. Evaluate object animation
85             // and setup accordingly
86             void checkForPrimitive2DAnimations();
87 
88             // This method is responsible for creating the graphical visualisation data which is
89             // stored/cached in the local primitive. Default gets view-independent Primitive
90             // from the ViewContact using ViewContact::getViewIndependentPrimitive2DSequence(), takes care of
91             // visibility, handles glue and ghosted.
92             // This method will not handle included hierarchies and not check geometric visibility.
93             virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const;
94 
95             // method for flushing Primitive2DSequence for VOC implementations
flushPrimitive2DSequence()96             void flushPrimitive2DSequence() { mxPrimitive2DSequence.realloc(0); }
97 
98         public:
99             // basic constructor.
100             ViewObjectContact(ObjectContact& rObjectContact, ViewContact& rViewContact);
101             virtual ~ViewObjectContact();
102 
103             // access to ObjectContact
GetObjectContact() const104             ObjectContact& GetObjectContact() const { return mrObjectContact; }
105 
106             // access to ViewContact
GetViewContact() const107             ViewContact& GetViewContact() const { return mrViewContact; }
108 
109             // get the oebject's size range
110             const basegfx::B2DRange& getObjectRange() const;
111 
112             // A ViewObjectContact was deleted and shall be forgotten.
113             void RemoveViewObjectContact(ViewObjectContact& rVOContact);
114 
115             // React on changes of the object of this ViewContact
116             virtual void ActionChanged();
117 
118             // LazyInvalidate handling
119             void triggerLazyInvalidate();
120 
121             // Check if this primitive is animated in any OC (View) which means it has
122             // generated a PrimitiveAnimation
isAnimated() const123             bool isAnimated() const { return (0 != mpPrimitiveAnimation); }
124 
125             // Take some action when new objects are inserted
126             virtual void ActionChildInserted(ViewContact& rChild);
127 
128             // access to the local primitive. This will ensure that the local primitive is
129             // current in comparing the local one with a fresh created incarnation
130             // This method will not handle included hierarchies and not check visibility.
131             drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const;
132 
133             // test this VOC for visibility concerning model-view stuff like e.g. Layer
134             virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const;
135 
136             // test this VOC for ghosted mode
137             virtual bool isPrimitiveGhosted(const DisplayInfo& rDisplayInfo) const;
138 
139             // process this primitive: Eventually also recursively travel an existing hierarchy,
140             // e.g. for group objects, scenes or pages. This method will test geometrical visibility.
141             virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const;
142 
143             // just process the sub-hierarchy, used as tooling from getPrimitive2DSequenceHierarchy
144             drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceSubHierarchy(DisplayInfo& rDisplayInfo) const;
145         };
146     } // end of namespace contact
147 } // end of namespace sdr
148 
149 //////////////////////////////////////////////////////////////////////////////
150 
151 #endif //_SDR_CONTACT_VIEWOBJECTCONTACT_HXX
152 
153 // eof
154