1*efeef26fSAndrew Rist /**************************************************************
2*efeef26fSAndrew Rist *
3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*efeef26fSAndrew Rist * distributed with this work for additional information
6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10*efeef26fSAndrew Rist *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist *
13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17*efeef26fSAndrew Rist * specific language governing permissions and limitations
18*efeef26fSAndrew Rist * under the License.
19*efeef26fSAndrew Rist *
20*efeef26fSAndrew Rist *************************************************************/
21*efeef26fSAndrew Rist
22*efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <ShadowOverlayObject.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <view.hxx>
30cdf0e10cSrcweir #include <svx/sdrpaintwindow.hxx>
31cdf0e10cSrcweir #include <svx/svdview.hxx>
32cdf0e10cSrcweir #include <svx/sdr/overlay/overlaymanager.hxx>
33cdf0e10cSrcweir
34cdf0e10cSrcweir #include <sw_primitivetypes2d.hxx>
35cdf0e10cSrcweir #include <drawinglayer/primitive2d/primitivetools2d.hxx>
36cdf0e10cSrcweir #include <drawinglayer/primitive2d/fillgradientprimitive2d.hxx>
37cdf0e10cSrcweir
38cdf0e10cSrcweir namespace sw { namespace sidebarwindows {
39cdf0e10cSrcweir
40cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////
41cdf0e10cSrcweir // helper SwPostItShadowPrimitive
42cdf0e10cSrcweir //
43cdf0e10cSrcweir // Used to allow view-dependent primitive definition. For that purpose, the
44cdf0e10cSrcweir // initially created primitive (this one) always has to be view-independent,
45cdf0e10cSrcweir // but the decomposition is made view-dependent. Very simple primitive which
46cdf0e10cSrcweir // just remembers the discrete data and applies it at decomposition time.
47cdf0e10cSrcweir
48cdf0e10cSrcweir class ShadowPrimitive : public drawinglayer::primitive2d::DiscreteMetricDependentPrimitive2D
49cdf0e10cSrcweir {
50cdf0e10cSrcweir private:
51cdf0e10cSrcweir basegfx::B2DPoint maBasePosition;
52cdf0e10cSrcweir basegfx::B2DPoint maSecondPosition;
53cdf0e10cSrcweir ShadowState maShadowState;
54cdf0e10cSrcweir
55cdf0e10cSrcweir protected:
56cdf0e10cSrcweir virtual drawinglayer::primitive2d::Primitive2DSequence create2DDecomposition(
57cdf0e10cSrcweir const drawinglayer::geometry::ViewInformation2D& rViewInformation) const;
58cdf0e10cSrcweir
59cdf0e10cSrcweir public:
ShadowPrimitive(const basegfx::B2DPoint & rBasePosition,const basegfx::B2DPoint & rSecondPosition,ShadowState aShadowState)60cdf0e10cSrcweir ShadowPrimitive(
61cdf0e10cSrcweir const basegfx::B2DPoint& rBasePosition,
62cdf0e10cSrcweir const basegfx::B2DPoint& rSecondPosition,
63cdf0e10cSrcweir ShadowState aShadowState)
64cdf0e10cSrcweir : drawinglayer::primitive2d::DiscreteMetricDependentPrimitive2D(),
65cdf0e10cSrcweir maBasePosition(rBasePosition),
66cdf0e10cSrcweir maSecondPosition(rSecondPosition),
67cdf0e10cSrcweir maShadowState(aShadowState)
68cdf0e10cSrcweir {}
69cdf0e10cSrcweir
70cdf0e10cSrcweir // data access
getBasePosition() const71cdf0e10cSrcweir const basegfx::B2DPoint& getBasePosition() const { return maBasePosition; }
getSecondPosition() const72cdf0e10cSrcweir const basegfx::B2DPoint& getSecondPosition() const { return maSecondPosition; }
getShadowState() const73cdf0e10cSrcweir ShadowState getShadowState() const { return maShadowState; }
74cdf0e10cSrcweir
75cdf0e10cSrcweir virtual bool operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const;
76cdf0e10cSrcweir
77cdf0e10cSrcweir DeclPrimitrive2DIDBlock()
78cdf0e10cSrcweir };
79cdf0e10cSrcweir
create2DDecomposition(const drawinglayer::geometry::ViewInformation2D &) const80cdf0e10cSrcweir drawinglayer::primitive2d::Primitive2DSequence ShadowPrimitive::create2DDecomposition(
81cdf0e10cSrcweir const drawinglayer::geometry::ViewInformation2D& /*rViewInformation*/) const
82cdf0e10cSrcweir {
83cdf0e10cSrcweir // get logic sizes in object coordinate system
84cdf0e10cSrcweir drawinglayer::primitive2d::Primitive2DSequence xRetval;
85cdf0e10cSrcweir basegfx::B2DRange aRange(getBasePosition());
86cdf0e10cSrcweir
87cdf0e10cSrcweir switch(maShadowState)
88cdf0e10cSrcweir {
89cdf0e10cSrcweir case SS_NORMAL:
90cdf0e10cSrcweir {
91cdf0e10cSrcweir aRange.expand(basegfx::B2DTuple(getSecondPosition().getX(), getSecondPosition().getY() + (2.0 * getDiscreteUnit())));
92cdf0e10cSrcweir const ::drawinglayer::attribute::FillGradientAttribute aFillGradientAttribute(
93cdf0e10cSrcweir drawinglayer::attribute::GRADIENTSTYLE_LINEAR,
94cdf0e10cSrcweir 0.0,
95cdf0e10cSrcweir 0.5,
96cdf0e10cSrcweir 0.5,
97cdf0e10cSrcweir 1800.0 * F_PI1800,
98cdf0e10cSrcweir basegfx::BColor(230.0/255.0,230.0/255.0,230.0/255.0),
99cdf0e10cSrcweir basegfx::BColor(180.0/255.0,180.0/255.0,180.0/255.0),
100cdf0e10cSrcweir 2);
101cdf0e10cSrcweir
102cdf0e10cSrcweir const drawinglayer::primitive2d::Primitive2DReference xReference(
103cdf0e10cSrcweir new drawinglayer::primitive2d::FillGradientPrimitive2D(
104cdf0e10cSrcweir aRange,
105cdf0e10cSrcweir aFillGradientAttribute));
106cdf0e10cSrcweir
107cdf0e10cSrcweir xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
108cdf0e10cSrcweir break;
109cdf0e10cSrcweir }
110cdf0e10cSrcweir case SS_VIEW:
111cdf0e10cSrcweir {
112cdf0e10cSrcweir aRange.expand(basegfx::B2DTuple(getSecondPosition().getX(), getSecondPosition().getY() + (4.0 * getDiscreteUnit())));
113cdf0e10cSrcweir const drawinglayer::attribute::FillGradientAttribute aFillGradientAttribute(
114cdf0e10cSrcweir drawinglayer::attribute::GRADIENTSTYLE_LINEAR,
115cdf0e10cSrcweir 0.0,
116cdf0e10cSrcweir 0.5,
117cdf0e10cSrcweir 0.5,
118cdf0e10cSrcweir 1800.0 * F_PI1800,
119cdf0e10cSrcweir basegfx::BColor(230.0/255.0,230.0/255.0,230.0/255.0),
120cdf0e10cSrcweir basegfx::BColor(180.0/255.0,180.0/255.0,180.0/255.0),
121cdf0e10cSrcweir 4);
122cdf0e10cSrcweir
123cdf0e10cSrcweir const drawinglayer::primitive2d::Primitive2DReference xReference(
124cdf0e10cSrcweir new drawinglayer::primitive2d::FillGradientPrimitive2D(
125cdf0e10cSrcweir aRange,
126cdf0e10cSrcweir aFillGradientAttribute));
127cdf0e10cSrcweir
128cdf0e10cSrcweir xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
129cdf0e10cSrcweir break;
130cdf0e10cSrcweir }
131cdf0e10cSrcweir case SS_EDIT:
132cdf0e10cSrcweir {
133cdf0e10cSrcweir aRange.expand(basegfx::B2DTuple(getSecondPosition().getX(), getSecondPosition().getY() + (4.0 * getDiscreteUnit())));
134cdf0e10cSrcweir const drawinglayer::attribute::FillGradientAttribute aFillGradientAttribute(
135cdf0e10cSrcweir drawinglayer::attribute::GRADIENTSTYLE_LINEAR,
136cdf0e10cSrcweir 0.0,
137cdf0e10cSrcweir 0.5,
138cdf0e10cSrcweir 0.5,
139cdf0e10cSrcweir 1800.0 * F_PI1800,
140cdf0e10cSrcweir basegfx::BColor(230.0/255.0,230.0/255.0,230.0/255.0),
141cdf0e10cSrcweir basegfx::BColor(83.0/255.0,83.0/255.0,83.0/255.0),
142cdf0e10cSrcweir 4);
143cdf0e10cSrcweir
144cdf0e10cSrcweir const drawinglayer::primitive2d::Primitive2DReference xReference(
145cdf0e10cSrcweir new drawinglayer::primitive2d::FillGradientPrimitive2D(
146cdf0e10cSrcweir aRange,
147cdf0e10cSrcweir aFillGradientAttribute));
148cdf0e10cSrcweir
149cdf0e10cSrcweir xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1);
150cdf0e10cSrcweir break;
151cdf0e10cSrcweir }
152cdf0e10cSrcweir default:
153cdf0e10cSrcweir {
154cdf0e10cSrcweir break;
155cdf0e10cSrcweir }
156cdf0e10cSrcweir }
157cdf0e10cSrcweir
158cdf0e10cSrcweir return xRetval;
159cdf0e10cSrcweir }
160cdf0e10cSrcweir
operator ==(const drawinglayer::primitive2d::BasePrimitive2D & rPrimitive) const161cdf0e10cSrcweir bool ShadowPrimitive::operator==( const drawinglayer::primitive2d::BasePrimitive2D& rPrimitive ) const
162cdf0e10cSrcweir {
163cdf0e10cSrcweir if(drawinglayer::primitive2d::DiscreteMetricDependentPrimitive2D::operator==(rPrimitive))
164cdf0e10cSrcweir {
165cdf0e10cSrcweir const ShadowPrimitive& rCompare = static_cast< const ShadowPrimitive& >(rPrimitive);
166cdf0e10cSrcweir
167cdf0e10cSrcweir return (getBasePosition() == rCompare.getBasePosition()
168cdf0e10cSrcweir && getSecondPosition() == rCompare.getSecondPosition()
169cdf0e10cSrcweir && getShadowState() == rCompare.getShadowState());
170cdf0e10cSrcweir }
171cdf0e10cSrcweir
172cdf0e10cSrcweir return false;
173cdf0e10cSrcweir }
174cdf0e10cSrcweir
ImplPrimitrive2DIDBlock(ShadowPrimitive,PRIMITIVE2D_ID_SWSIDEBARSHADOWPRIMITIVE)175cdf0e10cSrcweir ImplPrimitrive2DIDBlock(ShadowPrimitive, PRIMITIVE2D_ID_SWSIDEBARSHADOWPRIMITIVE)
176cdf0e10cSrcweir
177cdf0e10cSrcweir /****** ShadowOverlayObject **************************************************/
178cdf0e10cSrcweir /* static */ ShadowOverlayObject* ShadowOverlayObject::CreateShadowOverlayObject( SwView& rDocView )
179cdf0e10cSrcweir {
180cdf0e10cSrcweir ShadowOverlayObject* pShadowOverlayObject( 0 );
181cdf0e10cSrcweir
182cdf0e10cSrcweir if ( rDocView.GetDrawView() )
183cdf0e10cSrcweir {
184cdf0e10cSrcweir SdrPaintWindow* pPaintWindow = rDocView.GetDrawView()->GetPaintWindow(0);
185cdf0e10cSrcweir if( pPaintWindow )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir sdr::overlay::OverlayManager* pOverlayManager = pPaintWindow->GetOverlayManager();
188cdf0e10cSrcweir
189cdf0e10cSrcweir if ( pOverlayManager )
190cdf0e10cSrcweir {
191cdf0e10cSrcweir pShadowOverlayObject = new ShadowOverlayObject( basegfx::B2DPoint(0,0),
192cdf0e10cSrcweir basegfx::B2DPoint(0,0),
193cdf0e10cSrcweir Color(0,0,0),
194cdf0e10cSrcweir SS_NORMAL );
195cdf0e10cSrcweir pOverlayManager->add(*pShadowOverlayObject);
196cdf0e10cSrcweir }
197cdf0e10cSrcweir }
198cdf0e10cSrcweir }
199cdf0e10cSrcweir
200cdf0e10cSrcweir return pShadowOverlayObject;
201cdf0e10cSrcweir }
202cdf0e10cSrcweir
DestroyShadowOverlayObject(ShadowOverlayObject * pShadow)203cdf0e10cSrcweir /* static */ void ShadowOverlayObject::DestroyShadowOverlayObject( ShadowOverlayObject* pShadow )
204cdf0e10cSrcweir {
205cdf0e10cSrcweir if ( pShadow )
206cdf0e10cSrcweir {
207cdf0e10cSrcweir if ( pShadow->getOverlayManager() )
208cdf0e10cSrcweir {
209cdf0e10cSrcweir pShadow->getOverlayManager()->remove(*pShadow);
210cdf0e10cSrcweir }
211cdf0e10cSrcweir delete pShadow;
212cdf0e10cSrcweir }
213cdf0e10cSrcweir }
214cdf0e10cSrcweir
ShadowOverlayObject(const basegfx::B2DPoint & rBasePos,const basegfx::B2DPoint & rSecondPosition,Color aBaseColor,ShadowState aState)215cdf0e10cSrcweir ShadowOverlayObject::ShadowOverlayObject( const basegfx::B2DPoint& rBasePos,
216cdf0e10cSrcweir const basegfx::B2DPoint& rSecondPosition,
217cdf0e10cSrcweir Color aBaseColor,
218cdf0e10cSrcweir ShadowState aState )
219cdf0e10cSrcweir : OverlayObjectWithBasePosition(rBasePos, aBaseColor)
220cdf0e10cSrcweir , maSecondPosition(rSecondPosition)
221cdf0e10cSrcweir , mShadowState(aState)
222cdf0e10cSrcweir {
223cdf0e10cSrcweir }
224cdf0e10cSrcweir
~ShadowOverlayObject()225cdf0e10cSrcweir ShadowOverlayObject::~ShadowOverlayObject()
226cdf0e10cSrcweir {
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
createOverlayObjectPrimitive2DSequence()229cdf0e10cSrcweir drawinglayer::primitive2d::Primitive2DSequence ShadowOverlayObject::createOverlayObjectPrimitive2DSequence()
230cdf0e10cSrcweir {
231cdf0e10cSrcweir const drawinglayer::primitive2d::Primitive2DReference aReference(
232cdf0e10cSrcweir new ShadowPrimitive( getBasePosition(),
233cdf0e10cSrcweir GetSecondPosition(),
234cdf0e10cSrcweir GetShadowState() ) );
235cdf0e10cSrcweir return drawinglayer::primitive2d::Primitive2DSequence(&aReference, 1);
236cdf0e10cSrcweir }
237cdf0e10cSrcweir
SetShadowState(ShadowState aState)238cdf0e10cSrcweir void ShadowOverlayObject::SetShadowState(ShadowState aState)
239cdf0e10cSrcweir {
240cdf0e10cSrcweir if (mShadowState != aState)
241cdf0e10cSrcweir {
242cdf0e10cSrcweir mShadowState = aState;
243cdf0e10cSrcweir
244cdf0e10cSrcweir objectChange();
245cdf0e10cSrcweir }
246cdf0e10cSrcweir }
247cdf0e10cSrcweir
SetPosition(const basegfx::B2DPoint & rPoint1,const basegfx::B2DPoint & rPoint2)248cdf0e10cSrcweir void ShadowOverlayObject::SetPosition( const basegfx::B2DPoint& rPoint1,
249cdf0e10cSrcweir const basegfx::B2DPoint& rPoint2)
250cdf0e10cSrcweir {
251cdf0e10cSrcweir if(!rPoint1.equal(getBasePosition()) || !rPoint2.equal(GetSecondPosition()))
252cdf0e10cSrcweir {
253cdf0e10cSrcweir maBasePosition = rPoint1;
254cdf0e10cSrcweir maSecondPosition = rPoint2;
255cdf0e10cSrcweir
256cdf0e10cSrcweir objectChange();
257cdf0e10cSrcweir }
258cdf0e10cSrcweir }
259cdf0e10cSrcweir
260cdf0e10cSrcweir } } // end of namespace sw::sidebarwindows
261cdf0e10cSrcweir
262