LibreOffice Module svx (master)  1
viewobjectcontact.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #ifndef INCLUDED_SVX_SDR_CONTACT_VIEWOBJECTCONTACT_HXX
21 #define INCLUDED_SVX_SDR_CONTACT_VIEWOBJECTCONTACT_HXX
22 
23 #include <memory>
24 #include <svx/svxdllapi.h>
26 
27 namespace vcl { class Region; }
28 
29 namespace sdr::animation {
30  class PrimitiveAnimation;
31 }
32 namespace drawinglayer::primitive2d { class Primitive2DDecompositionVisitor; }
33 
34 namespace sdr::contact {
35 
36 class DisplayInfo;
37 class ObjectContact;
38 class ViewContact;
39 class ViewObjectContactRedirector;
40 
42 {
43 private:
44  // must-exist and constant contacts
47 
48  // This range defines the object's BoundRect
50 
51  // PrimitiveSequence of the ViewContact. This contains all necessary information
52  // for the graphical visualisation and needs to be supported by all VCs which
53  // can be visualized.
55 
56  // the PrimitiveAnimation if Primitive2DContainer contains animations
57  std::unique_ptr<sdr::animation::PrimitiveAnimation> mpPrimitiveAnimation;
58 
59  // possible on-demand calculated GridOffset for non-linear ViewToDevice transformation (calc)
61 
62  // used to detect ActionChanged() during primitive construction
64 
65  // This bool gets set when the object gets invalidated by ActionChanged() and
66  // can be used from the OC to late-invalidates
67  bool mbLazyInvalidate : 1;
68 
69 protected:
70  // make redirector a protected friend, it needs to call createPrimitives as default action
72 
73  // Called from getPrimitive2DSequence() when vector has changed. Evaluate object animation
74  // and setup accordingly
75  void checkForPrimitive2DAnimations();
76 
77  // This method is responsible for creating the graphical visualisation data which is
78  // stored/cached in the local primitive. Default gets view-independent Primitive
79  // from the ViewContact using ViewContact::getViewIndependentPrimitive2DContainer(), takes care of
80  // visibility, handles glue and ghosted.
81  // This method will not handle included hierarchies and not check geometric visibility.
82  virtual void createPrimitive2DSequence(const DisplayInfo& rDisplayInfo, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const;
83 
84  // method for flushing Primitive2DContainer for VOC implementations
85  void flushPrimitive2DSequence() { mxPrimitive2DSequence.clear(); }
86 
87 public:
88  // basic constructor.
89  ViewObjectContact(ObjectContact& rObjectContact, ViewContact& rViewContact);
90  virtual ~ViewObjectContact();
91 
92  // access to ObjectContact
93  ObjectContact& GetObjectContact() const { return mrObjectContact; }
94 
95  // access to ViewContact
96  ViewContact& GetViewContact() const { return mrViewContact; }
97 
98  // get the object size range
99  const basegfx::B2DRange& getObjectRange() const;
100 
101  // React on changes of the object of this ViewContact
102  virtual void ActionChanged();
103 
104  // LazyInvalidate handling
105  void triggerLazyInvalidate();
106 
107  // Check if this primitive is animated in any OC (View) which means it has
108  // generated a PrimitiveAnimation
109  bool isAnimated() const { return (nullptr != mpPrimitiveAnimation); }
110 
111  // Take some action when new objects are inserted
112  void ActionChildInserted(ViewContact& rChild);
113 
114  // access to the local primitive. This will ensure that the local primitive is
115  // current in comparing the local one with a fresh created incarnation
116  // This method will not handle included hierarchies and not check visibility.
117  drawinglayer::primitive2d::Primitive2DContainer const & getPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const;
118 
119  // test this VOC for visibility concerning model-view stuff like e.g. Layer
120  virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const;
121 
122  // test this VOC for ghosted mode
123  virtual bool isPrimitiveGhosted(const DisplayInfo& rDisplayInfo) const;
124 
125  // process this primitive: Eventually also recursively travel an existing hierarchy,
126  // e.g. for group objects, scenes or pages. This method will test geometrical visibility.
127  virtual void getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const;
128 
129  // just process the sub-hierarchy, used as tooling from getPrimitive2DSequenceHierarchy
130  void getPrimitive2DSequenceSubHierarchy(DisplayInfo& rDisplayInfo, drawinglayer::primitive2d::Primitive2DDecompositionVisitor& rVisitor) const;
131 
132  // interface to support GridOffset for non-linear ViewToDevice transformation (calc)
133  const basegfx::B2DVector& getGridOffset() const;
134  void resetGridOffset();
135 };
136 
137 }
138 
139 
140 #endif // INCLUDED_SVX_SDR_CONTACT_VIEWOBJECTCONTACT_HXX
141 
142 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
drawinglayer::primitive2d::Primitive2DContainer mxPrimitive2DSequence
ObjectContact & GetObjectContact() const
std::unique_ptr< sdr::animation::PrimitiveAnimation > mpPrimitiveAnimation
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
ViewContact & GetViewContact() const