blob: dd1606e380fd24c2660c421d9b2c881a6779e033 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SVX_SDR_CONTACT_OBJECTCONTACT_HXX
#define INCLUDED_SVX_SDR_CONTACT_OBJECTCONTACT_HXX
#include <svx/sdr/animation/objectanimator.hxx>
#include <svx/svxdllapi.h>
#include <drawinglayer/geometry/viewinformation2d.hxx>
#include <memory>
class SdrLayerIDSet;
namespace tools { class Rectangle; }
class SdrPageView;
class OutputDevice;
namespace basegfx {
class B2DRange;
class B2DHomMatrix;
}
namespace sdr { namespace contact {
class DisplayInfo;
class ViewContact;
class ViewObjectContactRedirector;
class SVX_DLLPUBLIC ObjectContact
{
private:
// make ViewObjectContact a friend to exclusively allow it to use
// AddViewObjectContact/RemoveViewObjectContact
friend class ViewObjectContact;
// All VOCs which are created using this OC, thus remembering this OC
// as a reference. All those VOCs need to be deleted when the OC goes down.
// Registering and de-registering is done in the VOC constructors/destructors.
std::vector< ViewObjectContact* > maViewObjectContactVector;
// A new ViewObjectContact was created and shall be remembered.
void AddViewObjectContact(ViewObjectContact& rVOContact);
// A ViewObjectContact was deleted and shall be forgotten.
void RemoveViewObjectContact(ViewObjectContact& rVOContact);
// the primitiveAnimator which is used if this View and/or the contained primitives
// support animatedSwitchPrimitives
sdr::animation::primitiveAnimator maPrimitiveAnimator;
// The redirector. If set it is used to pipe all supported calls
// to the redirector
ViewObjectContactRedirector* mpViewObjectContactRedirector;
// the Primitive2DParameters containing view information
drawinglayer::geometry::ViewInformation2D maViewInformation2D;
// flag for preview renderer
bool mbIsPreviewRenderer : 1;
protected:
// Interface to allow derivates to travel over the registered VOC's
sal_uInt32 getViewObjectContactCount() const { return maViewObjectContactVector.size(); }
ViewObjectContact* getViewObjectContact(sal_uInt32 a) const { return maViewObjectContactVector[a]; }
// interface to allow derivates to set PreviewRenderer flag
void setPreviewRenderer(bool bNew) { mbIsPreviewRenderer = bNew; }
// interface to allow derivates to set ViewInformation2D
void updateViewInformation2D(const drawinglayer::geometry::ViewInformation2D& rViewInformation2D) { maViewInformation2D = rViewInformation2D; }
public:
// basic constructor
ObjectContact();
virtual ~ObjectContact() COVERITY_NOEXCEPT_FALSE;
// LazyInvalidate request. This is used from the VOCs to mark that they
// got invalidated by an ActionChanged() call. An active view needs to remember
// this and take action on it. Default implementation directly calls back
// triggerLazyInvalidate() which promptly handles the request
virtual void setLazyInvalidate(ViewObjectContact& rVOC);
// call this to support evtl. preparations for repaint. Default does nothing
virtual void PrepareProcessDisplay();
// Process the whole displaying
virtual void ProcessDisplay(DisplayInfo& rDisplayInfo);
// test if visualizing of entered groups is switched on at all. Default
// implementation returns sal_False.
virtual bool DoVisualizeEnteredGroup() const;
// get active group's (the entered group) ViewContact
virtual const ViewContact* getActiveViewContact() const;
// Invalidate given rectangle at the window/output which is represented by
// this ObjectContact. Default does nothing.
virtual void InvalidatePartOfView(const basegfx::B2DRange& rRange) const;
// Get info about the need to visualize GluePoints. The default
// is that it is not necessary.
virtual bool AreGluePointsVisible() const;
// method to get the primitiveAnimator
sdr::animation::primitiveAnimator& getPrimitiveAnimator() { return maPrimitiveAnimator; }
// check if text animation is allowed. Default is sal_true.
virtual bool IsTextAnimationAllowed() const;
// check if graphic animation is allowed. Default is sal_true.
virtual bool IsGraphicAnimationAllowed() const;
// access to ViewObjectContactRedirector
ViewObjectContactRedirector* GetViewObjectContactRedirector() const { return mpViewObjectContactRedirector; }
void SetViewObjectContactRedirector(ViewObjectContactRedirector* pNew);
// print? Default is false
virtual bool isOutputToPrinter() const;
// recording MetaFile? Default is false
virtual bool isOutputToRecordingMetaFile() const;
// pdf export? Default is false
virtual bool isOutputToPDFFile() const;
// gray display mode
virtual bool isDrawModeGray() const;
// high contrast display mode
virtual bool isDrawModeHighContrast() const;
// check if this is a preview renderer. Default is sal_False.
bool IsPreviewRenderer() const { return mbIsPreviewRenderer; }
// get Primitive2DParameters for this view
const drawinglayer::geometry::ViewInformation2D& getViewInformation2D() const { return maViewInformation2D; }
/// access to SdrPageView. May return 0L like the default implementations do. Override as needed.
virtual SdrPageView* TryToGetSdrPageView() const;
/// access to OutputDevice. May return 0L like the default implementations do. Override as needed.
virtual OutputDevice* TryToGetOutputDevice() const;
// reset ViewPort at internal ViewInformation2D. This is needed when the OC is used
// not for ProcessDisplay() but to get a VOC associated with it. When trying to get
// a sequence of primitives from the VOC then, the last initialized ViewPort from
// the last ProcessDisplay() is used for geometric visibility testing. If this is not
// wanted (like in such cases) this method is used. It will reuse the current
// ViewInformation2D, but clear the ViewPort (no ViewPort means all is visible)
void resetViewPort();
// interface to support GridOffset for non-linear ViewToDevice transformation (calc)
virtual bool supportsGridOffsets() const;
virtual void calculateGridOffsetForViewOjectContact(
basegfx::B2DVector& rTarget,
const ViewObjectContact& rClient) const;
virtual void calculateGridOffsetForB2DRange(
basegfx::B2DVector& rTarget,
const basegfx::B2DRange& rB2DRange) const;
void resetAllGridOffsets();
};
}}
#endif // INCLUDED_SVX_SDR_CONTACT_OBJECTCONTACT_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|