xref: /trunk/main/svx/source/sdr/overlay/overlayanimatedbitmapex.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_svx.hxx"
30 #include <svx/sdr/overlay/overlayanimatedbitmapex.hxx>
31 #include <vcl/salbtype.hxx>
32 #include <vcl/outdev.hxx>
33 #include <svx/sdr/overlay/overlaymanager.hxx>
34 #include <basegfx/matrix/b2dhommatrix.hxx>
35 #include <svx/sdr/overlay/overlaytools.hxx>
36 
37 //////////////////////////////////////////////////////////////////////////////
38 
39 namespace sdr
40 {
41     namespace overlay
42     {
43         // #i53216# check blink time value range
44         void OverlayAnimatedBitmapEx::impCheckBlinkTimeValueRange()
45         {
46             if(mnBlinkTime < 25)
47             {
48                 mnBlinkTime = 25;
49             }
50             else if(mnBlinkTime > 10000)
51             {
52                 mnBlinkTime = 10000;
53             }
54         }
55 
56         drawinglayer::primitive2d::Primitive2DSequence OverlayAnimatedBitmapEx::createOverlayObjectPrimitive2DSequence()
57         {
58             if(mbOverlayState)
59             {
60                 const drawinglayer::primitive2d::Primitive2DReference aPrimitive(
61                     new drawinglayer::primitive2d::OverlayBitmapExPrimitive(
62                         getBitmapEx1(),
63                         getBasePosition(),
64                         getCenterX1(),
65                         getCenterY1()));
66 
67                 return drawinglayer::primitive2d::Primitive2DSequence(&aPrimitive, 1);
68             }
69             else
70             {
71                 const drawinglayer::primitive2d::Primitive2DReference aPrimitive(
72                     new drawinglayer::primitive2d::OverlayBitmapExPrimitive(
73                         getBitmapEx2(),
74                         getBasePosition(),
75                         getCenterX2(),
76                         getCenterY2()));
77 
78                 return drawinglayer::primitive2d::Primitive2DSequence(&aPrimitive, 1);
79             }
80         }
81 
82         OverlayAnimatedBitmapEx::OverlayAnimatedBitmapEx(
83             const basegfx::B2DPoint& rBasePos,
84             const BitmapEx& rBitmapEx1,
85             const BitmapEx& rBitmapEx2,
86             sal_uInt32 nBlinkTime,
87             sal_uInt16 nCenX1,
88             sal_uInt16 nCenY1,
89             sal_uInt16 nCenX2,
90             sal_uInt16 nCenY2)
91         :   OverlayObjectWithBasePosition(rBasePos, Color(COL_WHITE)),
92             maBitmapEx1(rBitmapEx1),
93             maBitmapEx2(rBitmapEx2),
94             mnCenterX1(nCenX1), mnCenterY1(nCenY1),
95             mnCenterX2(nCenX2), mnCenterY2(nCenY2),
96             mnBlinkTime(nBlinkTime),
97             mbOverlayState(false)
98         {
99             // set AllowsAnimation flag to mark this object as animation capable
100             mbAllowsAnimation = true;
101 
102             // #i53216# check blink time value range
103             impCheckBlinkTimeValueRange();
104         }
105 
106         OverlayAnimatedBitmapEx::~OverlayAnimatedBitmapEx()
107         {
108         }
109 
110         void OverlayAnimatedBitmapEx::setBitmapEx1(const BitmapEx& rNew)
111         {
112             if(rNew != maBitmapEx1)
113             {
114                 // remember new Bitmap
115                 maBitmapEx1 = rNew;
116 
117                 // register change (after change)
118                 objectChange();
119             }
120         }
121 
122         void OverlayAnimatedBitmapEx::setBitmapEx2(const BitmapEx& rNew)
123         {
124             if(rNew != maBitmapEx2)
125             {
126                 // remember new Bitmap
127                 maBitmapEx2 = rNew;
128 
129                 // register change (after change)
130                 objectChange();
131             }
132         }
133 
134         void OverlayAnimatedBitmapEx::setCenterXY1(sal_uInt16 nNewX, sal_uInt16 nNewY)
135         {
136             if(nNewX != mnCenterX1 || nNewY != mnCenterY1)
137             {
138                 // remember new values
139                 if(nNewX != mnCenterX1)
140                 {
141                     mnCenterX1 = nNewX;
142                 }
143 
144                 if(nNewY != mnCenterY1)
145                 {
146                     mnCenterY1 = nNewY;
147                 }
148 
149                 // register change (after change)
150                 objectChange();
151             }
152         }
153 
154         void OverlayAnimatedBitmapEx::setCenterXY2(sal_uInt16 nNewX, sal_uInt16 nNewY)
155         {
156             if(nNewX != mnCenterX2 || nNewY != mnCenterY2)
157             {
158                 // remember new values
159                 if(nNewX != mnCenterX2)
160                 {
161                     mnCenterX2 = nNewX;
162                 }
163 
164                 if(nNewY != mnCenterY2)
165                 {
166                     mnCenterY2 = nNewY;
167                 }
168 
169                 // register change (after change)
170                 objectChange();
171             }
172         }
173 
174         void OverlayAnimatedBitmapEx::setBlinkTime(sal_uInt32 nNew)
175         {
176             if(mnBlinkTime != nNew)
177             {
178                 // remember new value
179                 mnBlinkTime = nNew;
180 
181                 // #i53216# check blink time value range
182                 impCheckBlinkTimeValueRange();
183 
184                 // register change (after change)
185                 objectChange();
186             }
187         }
188 
189         void OverlayAnimatedBitmapEx::Trigger(sal_uInt32 nTime)
190         {
191             if(getOverlayManager())
192             {
193                 // #i53216# produce event after nTime + x
194                 SetTime(nTime + mnBlinkTime);
195 
196                 // switch state
197                 if(mbOverlayState)
198                 {
199                     mbOverlayState = false;
200                 }
201                 else
202                 {
203                     mbOverlayState = true;
204                 }
205 
206                 // re-insert me as event
207                 getOverlayManager()->InsertEvent(this);
208 
209                 // register change (after change)
210                 objectChange();
211             }
212         }
213     } // end of namespace overlay
214 } // end of namespace sdr
215 
216 //////////////////////////////////////////////////////////////////////////////
217 // eof
218