Bump version to 6.4-15
[LibreOffice.git] / include / svx / sdr / contact / viewobjectcontact.hxx
blob460dd83b51f193c4f703d8a697e36f31353901ea
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #ifndef INCLUDED_SVX_SDR_CONTACT_VIEWOBJECTCONTACT_HXX
21 #define INCLUDED_SVX_SDR_CONTACT_VIEWOBJECTCONTACT_HXX
23 #include <memory>
24 #include <svx/svxdllapi.h>
25 #include <drawinglayer/primitive2d/baseprimitive2d.hxx>
27 namespace vcl { class Region; }
29 namespace sdr { namespace animation {
30 class PrimitiveAnimation;
33 namespace sdr { namespace contact {
35 class DisplayInfo;
36 class ObjectContact;
37 class ViewContact;
38 class ViewObjectContactRedirector;
40 class SVX_DLLPUBLIC ViewObjectContact
42 private:
43 // must-exist and constant contacts
44 ObjectContact& mrObjectContact;
45 ViewContact& mrViewContact;
47 // This range defines the object's BoundRect
48 basegfx::B2DRange maObjectRange;
50 // PrimitiveSequence of the ViewContact. This contains all necessary information
51 // for the graphical visualisation and needs to be supported by all VCs which
52 // can be visualized.
53 drawinglayer::primitive2d::Primitive2DContainer mxPrimitive2DSequence;
55 // the PrimitiveAnimation if Primitive2DContainer contains animations
56 std::unique_ptr<sdr::animation::PrimitiveAnimation> mpPrimitiveAnimation;
58 // possible on-demand calculated GridOffset for non-linear ViewToDevice transformation (calc)
59 basegfx::B2DVector maGridOffset;
61 // This bool gets set when the object gets invalidated by ActionChanged() and
62 // can be used from the OC to late-invalidates
63 bool mbLazyInvalidate : 1;
65 protected:
66 // make redirector a protected friend, it needs to call createPrimitives as default action
67 friend class ViewObjectContactRedirector;
69 // Called from getPrimitive2DSequence() when vector has changed. Evaluate object animation
70 // and setup accordingly
71 void checkForPrimitive2DAnimations();
73 // This method is responsible for creating the graphical visualisation data which is
74 // stored/cached in the local primitive. Default gets view-independent Primitive
75 // from the ViewContact using ViewContact::getViewIndependentPrimitive2DContainer(), takes care of
76 // visibility, handles glue and ghosted.
77 // This method will not handle included hierarchies and not check geometric visibility.
78 virtual drawinglayer::primitive2d::Primitive2DContainer createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const;
80 // method for flushing Primitive2DContainer for VOC implementations
81 void flushPrimitive2DSequence() { mxPrimitive2DSequence.clear(); }
83 public:
84 // basic constructor.
85 ViewObjectContact(ObjectContact& rObjectContact, ViewContact& rViewContact);
86 virtual ~ViewObjectContact();
88 // access to ObjectContact
89 ObjectContact& GetObjectContact() const { return mrObjectContact; }
91 // access to ViewContact
92 ViewContact& GetViewContact() const { return mrViewContact; }
94 // get the object size range
95 const basegfx::B2DRange& getObjectRange() const;
97 // React on changes of the object of this ViewContact
98 virtual void ActionChanged();
100 // LazyInvalidate handling
101 void triggerLazyInvalidate();
103 // Check if this primitive is animated in any OC (View) which means it has
104 // generated a PrimitiveAnimation
105 bool isAnimated() const { return (nullptr != mpPrimitiveAnimation); }
107 // Take some action when new objects are inserted
108 void ActionChildInserted(ViewContact& rChild);
110 // access to the local primitive. This will ensure that the local primitive is
111 // current in comparing the local one with a fresh created incarnation
112 // This method will not handle included hierarchies and not check visibility.
113 drawinglayer::primitive2d::Primitive2DContainer const & getPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const;
115 // test this VOC for visibility concerning model-view stuff like e.g. Layer
116 virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const;
118 // test this VOC for ghosted mode
119 virtual bool isPrimitiveGhosted(const DisplayInfo& rDisplayInfo) const;
121 // process this primitive: Eventually also recursively travel an existing hierarchy,
122 // e.g. for group objects, scenes or pages. This method will test geometrical visibility.
123 virtual drawinglayer::primitive2d::Primitive2DContainer getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const;
125 // just process the sub-hierarchy, used as tooling from getPrimitive2DSequenceHierarchy
126 drawinglayer::primitive2d::Primitive2DContainer getPrimitive2DSequenceSubHierarchy(DisplayInfo& rDisplayInfo) const;
128 // interface to support GridOffset for non-linear ViewToDevice transformation (calc)
129 const basegfx::B2DVector& getGridOffset() const;
130 void resetGridOffset();
136 #endif // INCLUDED_SVX_SDR_CONTACT_VIEWOBJECTCONTACT_HXX
138 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */