LibreOffice Module drawinglayer (master) 1
textureprimitive3d.cxx
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
24#include <utility>
25
26
27using namespace com::sun::star;
28
29
31{
33 const Primitive3DContainer& rChildren,
34 const basegfx::B2DVector& rTextureSize,
35 bool bModulate, bool bFilter)
36 : GroupPrimitive3D(rChildren),
37 maTextureSize(rTextureSize),
38 mbModulate(bModulate),
39 mbFilter(bFilter)
40 {
41 }
42
43 bool TexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
44 {
45 if(GroupPrimitive3D::operator==(rPrimitive))
46 {
47 const TexturePrimitive3D& rCompare = static_cast<const TexturePrimitive3D&>(rPrimitive);
48
49 return (getModulate() == rCompare.getModulate()
50 && getFilter() == rCompare.getFilter());
51 }
52
53 return false;
54 }
55
56
57
59 double fTransparence,
60 const Primitive3DContainer& rChildren)
61 : TexturePrimitive3D(rChildren, basegfx::B2DVector(), false, false),
62 mfTransparence(fTransparence)
63 {
64 }
65
67 {
68 if(TexturePrimitive3D::operator==(rPrimitive))
69 {
70 const UnifiedTransparenceTexturePrimitive3D& rCompare = static_cast<const UnifiedTransparenceTexturePrimitive3D&>(rPrimitive);
71
72 return (getTransparence() == rCompare.getTransparence());
73 }
74
75 return false;
76 }
77
79 {
80 // do not use the fallback to decomposition here since for a correct BoundRect we also
81 // need invisible (1.0 == getTransparence()) geometry; these would be deleted in the decomposition
82 return getChildren().getB3DRange(rViewInformation);
83 }
84
86 {
87 if(0.0 == getTransparence())
88 {
89 // no transparence used, so just use content
90 return getChildren();
91 }
92 else if(getTransparence() > 0.0 && getTransparence() < 1.0)
93 {
94 // create TransparenceTexturePrimitive3D with fixed transparence as replacement
96
97 // create ColorStops with StartColor == EndColor == aGray
98 const basegfx::BColorStops aColorStops {
99 basegfx::BColorStop(0.0, aGray),
100 basegfx::BColorStop(1.0, aGray) };
101
102 const attribute::FillGradientAttribute aFillGradient(css::awt::GradientStyle_LINEAR, 0.0, 0.0, 0.0, 0.0, aColorStops);
104 return { xRef };
105 }
106 else
107 {
108 // completely transparent or invalid definition, add nothing
109 return Primitive3DContainer();
110 }
111 }
112
113 // provide unique ID
115
116
117
120 const Primitive3DContainer& rChildren,
121 const basegfx::B2DVector& rTextureSize,
122 bool bModulate,
123 bool bFilter)
124 : TexturePrimitive3D(rChildren, rTextureSize, bModulate, bFilter),
125 maGradient(std::move(aGradient))
126 {
127 }
128
129 bool GradientTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
130 {
131 if(TexturePrimitive3D::operator==(rPrimitive))
132 {
133 const GradientTexturePrimitive3D& rCompare = static_cast<const GradientTexturePrimitive3D&>(rPrimitive);
134
135 return (getGradient() == rCompare.getGradient());
136 }
137
138 return false;
139 }
140
141 // provide unique ID
143
144
145
146 BitmapTexturePrimitive3D::BitmapTexturePrimitive3D(
147 const attribute::FillGraphicAttribute& rFillGraphicAttribute,
148 const Primitive3DContainer& rChildren,
149 const basegfx::B2DVector& rTextureSize,
150 bool bModulate, bool bFilter)
151 : TexturePrimitive3D(rChildren, rTextureSize, bModulate, bFilter),
152 maFillGraphicAttribute(rFillGraphicAttribute)
153 {
154 }
155
156 bool BitmapTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
157 {
158 if(TexturePrimitive3D::operator==(rPrimitive))
159 {
160 const BitmapTexturePrimitive3D& rCompare = static_cast<const BitmapTexturePrimitive3D&>(rPrimitive);
161
162 return (getFillGraphicAttribute() == rCompare.getFillGraphicAttribute());
163 }
164
165 return false;
166 }
167
168 // provide unique ID
170
171
172
173 TransparenceTexturePrimitive3D::TransparenceTexturePrimitive3D(
174 const attribute::FillGradientAttribute& rGradient,
175 const Primitive3DContainer& rChildren,
176 const basegfx::B2DVector& rTextureSize)
177 : GradientTexturePrimitive3D(rGradient, rChildren, rTextureSize, false, false)
178 {
179 }
180
181 bool TransparenceTexturePrimitive3D::operator==(const BasePrimitive3D& rPrimitive) const
182 {
183 return GradientTexturePrimitive3D::operator==(rPrimitive);
184 }
185
186 // provide unique ID
188
189} // end of namespace
190
191/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
#define ImplPrimitive3DIDBlock(TheClass, TheID)
const attribute::FillGraphicAttribute & getFillGraphicAttribute() const
data read access
GradientTexturePrimitive3D(attribute::FillGradientAttribute aGradient, const Primitive3DContainer &rChildren, const basegfx::B2DVector &rTextureSize, bool bModulate, bool bFilter)
constructor
const attribute::FillGradientAttribute & getGradient() const
data read access
const Primitive3DContainer & getChildren() const
data read access
basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D &aViewInformation) const
const basegfx::B2DVector & getTextureSize() const
data read access
TexturePrimitive3D(const Primitive3DContainer &rChildren, const basegfx::B2DVector &rTextureSize, bool bModulate, bool bFilter)
constructor
virtual bool operator==(const BasePrimitive3D &rPrimitive) const override
compare operator
virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D &rViewInformation) const override
own getB3DRange implementation to include transparent geometries to BoundRect calculations
UnifiedTransparenceTexturePrimitive3D(double fTransparence, const Primitive3DContainer &rChildren)
constructor
virtual bool operator==(const BasePrimitive3D &rPrimitive) const override
compare operator
virtual Primitive3DContainer get3DDecomposition(const geometry::ViewInformation3D &rViewInformation) const override
local decomposition.
#define PRIMITIVE3D_ID_UNIFIEDTRANSPARENCETEXTUREPRIMITIVE3D
#define PRIMITIVE3D_ID_GRADIENTTEXTUREPRIMITIVE3D
#define PRIMITIVE3D_ID_TRANSPARENCETEXTUREPRIMITIVE3D
#define PRIMITIVE3D_ID_BITMAPTEXTUREPRIMITIVE3D
SdrPrimitive3D class.
css::uno::Reference< css::graphic::XPrimitive3D > Primitive3DReference
ImplPrimitive3DIDBlock(PolygonHairlinePrimitive3D, PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D) Primitive3DContainer PolygonStrokePrimitive3D