1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_slideshow.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski // must be first
28*b1cdbd2cSJim Jagielski #include <canvas/debug.hxx>
29*b1cdbd2cSJim Jagielski #include <vcl/cvtgrf.hxx>
30*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
31*b1cdbd2cSJim Jagielski #include <tools/stream.hxx>
32*b1cdbd2cSJim Jagielski #include <svtools/grfmgr.hxx>
33*b1cdbd2cSJim Jagielski #include <unotools/ucbstreamhelper.hxx>
34*b1cdbd2cSJim Jagielski #include <unotools/streamwrap.hxx>
35*b1cdbd2cSJim Jagielski #include <basegfx/point/b2dpoint.hxx>
36*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolygon.hxx>
37*b1cdbd2cSJim Jagielski #include <cppcanvas/basegfxfactory.hxx>
38*b1cdbd2cSJim Jagielski #include <cppcanvas/polypolygon.hxx>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Rectangle.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/ColorMode.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/text/GraphicCrop.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/PointSequenceSequence.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/PointSequence.hpp>
45*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiComponentFactory.hpp>
46*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XLayerSupplier.hpp>
47*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XLayerManager.hpp>
48*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XComponent.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski #include "drawshapesubsetting.hxx"
53*b1cdbd2cSJim Jagielski #include "drawshape.hxx"
54*b1cdbd2cSJim Jagielski #include "backgroundshape.hxx"
55*b1cdbd2cSJim Jagielski #include "mediashape.hxx"
56*b1cdbd2cSJim Jagielski #include "appletshape.hxx"
57*b1cdbd2cSJim Jagielski #include "shapeimporter.hxx"
58*b1cdbd2cSJim Jagielski #include "slideshowexceptions.hxx"
59*b1cdbd2cSJim Jagielski #include "gdimtftools.hxx"
60*b1cdbd2cSJim Jagielski #include "tools.hxx"
61*b1cdbd2cSJim Jagielski #include "slideshowcontext.hxx"
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp>
64*b1cdbd2cSJim Jagielski #include <boost/scoped_ptr.hpp>
65*b1cdbd2cSJim Jagielski
66*b1cdbd2cSJim Jagielski using namespace com::sun::star;
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski namespace slideshow {
69*b1cdbd2cSJim Jagielski namespace internal {
70*b1cdbd2cSJim Jagielski
71*b1cdbd2cSJim Jagielski namespace {
72*b1cdbd2cSJim Jagielski
importShapeGraphic(GraphicObject & o_rGraphic,uno::Reference<beans::XPropertySet> const & xPropSet)73*b1cdbd2cSJim Jagielski bool importShapeGraphic(
74*b1cdbd2cSJim Jagielski GraphicObject & o_rGraphic,
75*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> const& xPropSet )
76*b1cdbd2cSJim Jagielski {
77*b1cdbd2cSJim Jagielski rtl::OUString aURL;
78*b1cdbd2cSJim Jagielski if( !getPropertyValue( aURL, xPropSet, OUSTR("GraphicURL")) ||
79*b1cdbd2cSJim Jagielski aURL.getLength() == 0 )
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski // no or empty property - cannot import shape graphic
82*b1cdbd2cSJim Jagielski return false;
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski rtl::OUString const aVndUrl(
86*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.GraphicObject:" ) );
87*b1cdbd2cSJim Jagielski sal_Int32 nIndex( aURL.indexOf( aVndUrl ) );
88*b1cdbd2cSJim Jagielski
89*b1cdbd2cSJim Jagielski if(nIndex != -1)
90*b1cdbd2cSJim Jagielski {
91*b1cdbd2cSJim Jagielski // skip past the end of the "vnd..." prefix
92*b1cdbd2cSJim Jagielski nIndex += aVndUrl.getLength();
93*b1cdbd2cSJim Jagielski
94*b1cdbd2cSJim Jagielski if(nIndex >= aURL.getLength())
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "ShapeImporter::importShape(): "
97*b1cdbd2cSJim Jagielski "embedded graphic has no graphic ID" );
98*b1cdbd2cSJim Jagielski return false;
99*b1cdbd2cSJim Jagielski }
100*b1cdbd2cSJim Jagielski
101*b1cdbd2cSJim Jagielski // unique ID string found in URL, extract
102*b1cdbd2cSJim Jagielski // to separate string
103*b1cdbd2cSJim Jagielski rtl::OUString const aUniqueId(
104*b1cdbd2cSJim Jagielski aURL.copy( nIndex, aURL.getLength() - nIndex ) );
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski // TODO(T2): Creating a GraphicObject is not
107*b1cdbd2cSJim Jagielski // thread safe (internally calls VCL, and has
108*b1cdbd2cSJim Jagielski // unguarded internal singleton mpGlobalMgr)
109*b1cdbd2cSJim Jagielski
110*b1cdbd2cSJim Jagielski // fetch already loaded graphic from graphic manager.
111*b1cdbd2cSJim Jagielski ByteString const aOldString( static_cast<String>(aUniqueId),
112*b1cdbd2cSJim Jagielski RTL_TEXTENCODING_UTF8 );
113*b1cdbd2cSJim Jagielski o_rGraphic = GraphicObject( aOldString );
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski
116*b1cdbd2cSJim Jagielski if( GRAPHIC_DEFAULT == o_rGraphic.GetType()
117*b1cdbd2cSJim Jagielski || GRAPHIC_NONE == o_rGraphic.GetType() )
118*b1cdbd2cSJim Jagielski {
119*b1cdbd2cSJim Jagielski // even the GrfMgr does not seem to know this graphic
120*b1cdbd2cSJim Jagielski return false;
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski }
123*b1cdbd2cSJim Jagielski else
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski // no special string found, graphic must be
126*b1cdbd2cSJim Jagielski // external. Load via GraphicIm porter
127*b1cdbd2cSJim Jagielski INetURLObject aTmp( aURL );
128*b1cdbd2cSJim Jagielski boost::scoped_ptr<SvStream> pGraphicStream(
129*b1cdbd2cSJim Jagielski utl::UcbStreamHelper::CreateStream(
130*b1cdbd2cSJim Jagielski aTmp.GetMainURL( INetURLObject::NO_DECODE ),
131*b1cdbd2cSJim Jagielski STREAM_READ ) );
132*b1cdbd2cSJim Jagielski if( !pGraphicStream )
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "ShapeImporter::importShape(): "
135*b1cdbd2cSJim Jagielski "cannot create input stream for graphic" );
136*b1cdbd2cSJim Jagielski return false;
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski
139*b1cdbd2cSJim Jagielski Graphic aTmpGraphic;
140*b1cdbd2cSJim Jagielski if( GraphicConverter::Import(
141*b1cdbd2cSJim Jagielski *pGraphicStream, aTmpGraphic ) != ERRCODE_NONE )
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski OSL_ENSURE( false, "ShapeImporter::importShape(): "
144*b1cdbd2cSJim Jagielski "Failed to import shape graphic from given URL" );
145*b1cdbd2cSJim Jagielski return false;
146*b1cdbd2cSJim Jagielski }
147*b1cdbd2cSJim Jagielski
148*b1cdbd2cSJim Jagielski o_rGraphic = GraphicObject( aTmpGraphic );
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski return true;
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski /** This shape implementation just acts as a dummy for the layermanager.
154*b1cdbd2cSJim Jagielski Its sole role is for hit test detection of group shapes.
155*b1cdbd2cSJim Jagielski */
156*b1cdbd2cSJim Jagielski class ShapeOfGroup : public Shape
157*b1cdbd2cSJim Jagielski {
158*b1cdbd2cSJim Jagielski public:
159*b1cdbd2cSJim Jagielski ShapeOfGroup( ShapeSharedPtr const& pGroupShape,
160*b1cdbd2cSJim Jagielski uno::Reference<drawing::XShape> const& xShape,
161*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> const& xPropSet,
162*b1cdbd2cSJim Jagielski double nPrio );
163*b1cdbd2cSJim Jagielski
164*b1cdbd2cSJim Jagielski // Shape:
165*b1cdbd2cSJim Jagielski virtual uno::Reference<drawing::XShape> getXShape() const;
166*b1cdbd2cSJim Jagielski virtual void addViewLayer( ViewLayerSharedPtr const& pNewLayer,
167*b1cdbd2cSJim Jagielski bool bRedrawLayer );
168*b1cdbd2cSJim Jagielski virtual bool removeViewLayer( ViewLayerSharedPtr const& pNewLayer );
169*b1cdbd2cSJim Jagielski virtual bool clearAllViewLayers();
170*b1cdbd2cSJim Jagielski virtual bool update() const;
171*b1cdbd2cSJim Jagielski virtual bool render() const;
172*b1cdbd2cSJim Jagielski virtual bool isContentChanged() const;
173*b1cdbd2cSJim Jagielski virtual basegfx::B2DRectangle getBounds() const;
174*b1cdbd2cSJim Jagielski virtual basegfx::B2DRectangle getDomBounds() const;
175*b1cdbd2cSJim Jagielski virtual basegfx::B2DRectangle getUpdateArea() const;
176*b1cdbd2cSJim Jagielski virtual bool isVisible() const;
177*b1cdbd2cSJim Jagielski virtual double getPriority() const;
178*b1cdbd2cSJim Jagielski virtual bool isBackgroundDetached() const;
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski private:
181*b1cdbd2cSJim Jagielski ShapeSharedPtr const mpGroupShape;
182*b1cdbd2cSJim Jagielski uno::Reference<drawing::XShape> const mxShape;
183*b1cdbd2cSJim Jagielski double const mnPrio;
184*b1cdbd2cSJim Jagielski basegfx::B2DPoint maPosOffset;
185*b1cdbd2cSJim Jagielski double mnWidth;
186*b1cdbd2cSJim Jagielski double mnHeight;
187*b1cdbd2cSJim Jagielski };
188*b1cdbd2cSJim Jagielski
ShapeOfGroup(ShapeSharedPtr const & pGroupShape,uno::Reference<drawing::XShape> const & xShape,uno::Reference<beans::XPropertySet> const & xPropSet,double nPrio)189*b1cdbd2cSJim Jagielski ShapeOfGroup::ShapeOfGroup( ShapeSharedPtr const& pGroupShape,
190*b1cdbd2cSJim Jagielski uno::Reference<drawing::XShape> const& xShape,
191*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> const& xPropSet,
192*b1cdbd2cSJim Jagielski double nPrio ) :
193*b1cdbd2cSJim Jagielski mpGroupShape(pGroupShape),
194*b1cdbd2cSJim Jagielski mxShape(xShape),
195*b1cdbd2cSJim Jagielski mnPrio(nPrio)
196*b1cdbd2cSJim Jagielski {
197*b1cdbd2cSJim Jagielski // read bound rect
198*b1cdbd2cSJim Jagielski uno::Any const aTmpRect_( xPropSet->getPropertyValue( OUSTR("BoundRect") ));
199*b1cdbd2cSJim Jagielski awt::Rectangle const aTmpRect( aTmpRect_.get<awt::Rectangle>() );
200*b1cdbd2cSJim Jagielski basegfx::B2DRectangle const groupPosSize( pGroupShape->getBounds() );
201*b1cdbd2cSJim Jagielski maPosOffset = basegfx::B2DPoint( aTmpRect.X - groupPosSize.getMinX(),
202*b1cdbd2cSJim Jagielski aTmpRect.Y - groupPosSize.getMinY() );
203*b1cdbd2cSJim Jagielski mnWidth = aTmpRect.Width;
204*b1cdbd2cSJim Jagielski mnHeight = aTmpRect.Height;
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski
getXShape() const207*b1cdbd2cSJim Jagielski uno::Reference<drawing::XShape> ShapeOfGroup::getXShape() const
208*b1cdbd2cSJim Jagielski {
209*b1cdbd2cSJim Jagielski return mxShape;
210*b1cdbd2cSJim Jagielski }
211*b1cdbd2cSJim Jagielski
addViewLayer(ViewLayerSharedPtr const &,bool)212*b1cdbd2cSJim Jagielski void ShapeOfGroup::addViewLayer( ViewLayerSharedPtr const& /*pNewLayer*/,
213*b1cdbd2cSJim Jagielski bool /*bRedrawLayer*/ )
214*b1cdbd2cSJim Jagielski {
215*b1cdbd2cSJim Jagielski }
216*b1cdbd2cSJim Jagielski
removeViewLayer(ViewLayerSharedPtr const &)217*b1cdbd2cSJim Jagielski bool ShapeOfGroup::removeViewLayer( ViewLayerSharedPtr const& /*pNewLayer*/ )
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski return true;
220*b1cdbd2cSJim Jagielski }
221*b1cdbd2cSJim Jagielski
clearAllViewLayers()222*b1cdbd2cSJim Jagielski bool ShapeOfGroup::clearAllViewLayers()
223*b1cdbd2cSJim Jagielski {
224*b1cdbd2cSJim Jagielski return true;
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski
update() const227*b1cdbd2cSJim Jagielski bool ShapeOfGroup::update() const
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski return true;
230*b1cdbd2cSJim Jagielski }
231*b1cdbd2cSJim Jagielski
render() const232*b1cdbd2cSJim Jagielski bool ShapeOfGroup::render() const
233*b1cdbd2cSJim Jagielski {
234*b1cdbd2cSJim Jagielski return true;
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski
isContentChanged() const237*b1cdbd2cSJim Jagielski bool ShapeOfGroup::isContentChanged() const
238*b1cdbd2cSJim Jagielski {
239*b1cdbd2cSJim Jagielski return false;
240*b1cdbd2cSJim Jagielski }
241*b1cdbd2cSJim Jagielski
getBounds() const242*b1cdbd2cSJim Jagielski basegfx::B2DRectangle ShapeOfGroup::getBounds() const
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski basegfx::B2DRectangle const groupPosSize( mpGroupShape->getBounds() );
245*b1cdbd2cSJim Jagielski double const posX = (groupPosSize.getMinX() + maPosOffset.getX());
246*b1cdbd2cSJim Jagielski double const posY = (groupPosSize.getMinY() + maPosOffset.getY());
247*b1cdbd2cSJim Jagielski return basegfx::B2DRectangle( posX, posY, posX + mnWidth, posY + mnHeight );
248*b1cdbd2cSJim Jagielski }
249*b1cdbd2cSJim Jagielski
getDomBounds() const250*b1cdbd2cSJim Jagielski basegfx::B2DRectangle ShapeOfGroup::getDomBounds() const
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski return getBounds();
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski
getUpdateArea() const255*b1cdbd2cSJim Jagielski basegfx::B2DRectangle ShapeOfGroup::getUpdateArea() const
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski return getBounds();
258*b1cdbd2cSJim Jagielski }
259*b1cdbd2cSJim Jagielski
isVisible() const260*b1cdbd2cSJim Jagielski bool ShapeOfGroup::isVisible() const
261*b1cdbd2cSJim Jagielski {
262*b1cdbd2cSJim Jagielski return mpGroupShape->isVisible();
263*b1cdbd2cSJim Jagielski }
264*b1cdbd2cSJim Jagielski
getPriority() const265*b1cdbd2cSJim Jagielski double ShapeOfGroup::getPriority() const
266*b1cdbd2cSJim Jagielski {
267*b1cdbd2cSJim Jagielski return mnPrio;
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski
isBackgroundDetached() const270*b1cdbd2cSJim Jagielski bool ShapeOfGroup::isBackgroundDetached() const
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski return false;
273*b1cdbd2cSJim Jagielski }
274*b1cdbd2cSJim Jagielski
275*b1cdbd2cSJim Jagielski } // anon namespace
276*b1cdbd2cSJim Jagielski
createShape(uno::Reference<drawing::XShape> const & xCurrShape,uno::Reference<beans::XPropertySet> const & xPropSet,rtl::OUString const & shapeType) const277*b1cdbd2cSJim Jagielski ShapeSharedPtr ShapeImporter::createShape(
278*b1cdbd2cSJim Jagielski uno::Reference<drawing::XShape> const& xCurrShape,
279*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> const& xPropSet,
280*b1cdbd2cSJim Jagielski rtl::OUString const& shapeType ) const
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski if( shapeType.equalsAsciiL(
283*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.MediaShape") ) ||
284*b1cdbd2cSJim Jagielski shapeType.equalsAsciiL(
285*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.presentation.MediaShape") ) )
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski // Media shape (video etc.). This is a special object
288*b1cdbd2cSJim Jagielski return createMediaShape(xCurrShape,
289*b1cdbd2cSJim Jagielski mnAscendingPrio,
290*b1cdbd2cSJim Jagielski mrContext);
291*b1cdbd2cSJim Jagielski }
292*b1cdbd2cSJim Jagielski else if( shapeType.equalsAsciiL(
293*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.PluginShape") ))
294*b1cdbd2cSJim Jagielski {
295*b1cdbd2cSJim Jagielski // PropertyValues to copy from XShape to plugin
296*b1cdbd2cSJim Jagielski static const char* aPropertyValues[] =
297*b1cdbd2cSJim Jagielski {
298*b1cdbd2cSJim Jagielski "PluginURL",
299*b1cdbd2cSJim Jagielski "PluginMimeType",
300*b1cdbd2cSJim Jagielski "PluginCommands"
301*b1cdbd2cSJim Jagielski };
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski // (Netscape)Plugin shape. This is a special object
304*b1cdbd2cSJim Jagielski return createAppletShape( xCurrShape,
305*b1cdbd2cSJim Jagielski mnAscendingPrio,
306*b1cdbd2cSJim Jagielski ::rtl::OUString(
307*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM(
308*b1cdbd2cSJim Jagielski "com.sun.star.comp.sfx2.PluginObject" )),
309*b1cdbd2cSJim Jagielski aPropertyValues,
310*b1cdbd2cSJim Jagielski sizeof(aPropertyValues)/sizeof(*aPropertyValues),
311*b1cdbd2cSJim Jagielski mrContext );
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski else if( shapeType.equalsAsciiL(
314*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.AppletShape") ))
315*b1cdbd2cSJim Jagielski {
316*b1cdbd2cSJim Jagielski // PropertyValues to copy from XShape to applet
317*b1cdbd2cSJim Jagielski static const char* aPropertyValues[] =
318*b1cdbd2cSJim Jagielski {
319*b1cdbd2cSJim Jagielski "AppletCodeBase",
320*b1cdbd2cSJim Jagielski "AppletName",
321*b1cdbd2cSJim Jagielski "AppletCode",
322*b1cdbd2cSJim Jagielski "AppletCommands",
323*b1cdbd2cSJim Jagielski "AppletIsScript"
324*b1cdbd2cSJim Jagielski };
325*b1cdbd2cSJim Jagielski
326*b1cdbd2cSJim Jagielski // (Java)Applet shape. This is a special object
327*b1cdbd2cSJim Jagielski return createAppletShape( xCurrShape,
328*b1cdbd2cSJim Jagielski mnAscendingPrio,
329*b1cdbd2cSJim Jagielski ::rtl::OUString(
330*b1cdbd2cSJim Jagielski RTL_CONSTASCII_USTRINGPARAM(
331*b1cdbd2cSJim Jagielski "com.sun.star.comp.sfx2.AppletObject" )),
332*b1cdbd2cSJim Jagielski aPropertyValues,
333*b1cdbd2cSJim Jagielski sizeof(aPropertyValues)/sizeof(*aPropertyValues),
334*b1cdbd2cSJim Jagielski mrContext );
335*b1cdbd2cSJim Jagielski }
336*b1cdbd2cSJim Jagielski else if( shapeType.equalsAsciiL(
337*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.drawing.OLE2Shape") ) ||
338*b1cdbd2cSJim Jagielski shapeType.equalsAsciiL(
339*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.presentation.OLE2Shape") ) )
340*b1cdbd2cSJim Jagielski {
341*b1cdbd2cSJim Jagielski // #i46224# Mark OLE shapes as foreign content - scan them for
342*b1cdbd2cSJim Jagielski // unsupported actions, and fallback to bitmap, if necessary
343*b1cdbd2cSJim Jagielski return DrawShape::create( xCurrShape,
344*b1cdbd2cSJim Jagielski mxPage,
345*b1cdbd2cSJim Jagielski mnAscendingPrio,
346*b1cdbd2cSJim Jagielski true,
347*b1cdbd2cSJim Jagielski mrContext );
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski else if( shapeType.equalsAsciiL(
350*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM(
351*b1cdbd2cSJim Jagielski "com.sun.star.drawing.GraphicObjectShape") ) ||
352*b1cdbd2cSJim Jagielski shapeType.equalsAsciiL(
353*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM(
354*b1cdbd2cSJim Jagielski "com.sun.star.presentation.GraphicObjectShape") ) )
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski GraphicObject aGraphicObject;
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski // to get hold of GIF animations, inspect Graphic
359*b1cdbd2cSJim Jagielski // objects more thoroughly (the plain-jane shape
360*b1cdbd2cSJim Jagielski // metafile of course would only contain the first
361*b1cdbd2cSJim Jagielski // animation frame)
362*b1cdbd2cSJim Jagielski if( !importShapeGraphic( aGraphicObject, xPropSet ) )
363*b1cdbd2cSJim Jagielski return ShapeSharedPtr(); // error loading graphic -
364*b1cdbd2cSJim Jagielski // #142147# no placeholders in
365*b1cdbd2cSJim Jagielski // slideshow
366*b1cdbd2cSJim Jagielski
367*b1cdbd2cSJim Jagielski if( !aGraphicObject.IsAnimated() )
368*b1cdbd2cSJim Jagielski {
369*b1cdbd2cSJim Jagielski // no animation - simply utilize plain draw shape import
370*b1cdbd2cSJim Jagielski
371*b1cdbd2cSJim Jagielski // import shape as bitmap - either its a bitmap
372*b1cdbd2cSJim Jagielski // anyway, or its a metafile, which currently the
373*b1cdbd2cSJim Jagielski // metafile renderer might not display correctly.
374*b1cdbd2cSJim Jagielski return DrawShape::create( xCurrShape,
375*b1cdbd2cSJim Jagielski mxPage,
376*b1cdbd2cSJim Jagielski mnAscendingPrio,
377*b1cdbd2cSJim Jagielski true,
378*b1cdbd2cSJim Jagielski mrContext );
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski // now extract relevant shape attributes via API
383*b1cdbd2cSJim Jagielski // ---------------------------------------------
384*b1cdbd2cSJim Jagielski
385*b1cdbd2cSJim Jagielski drawing::ColorMode eColorMode( drawing::ColorMode_STANDARD );
386*b1cdbd2cSJim Jagielski sal_Int16 nLuminance(0);
387*b1cdbd2cSJim Jagielski sal_Int16 nContrast(0);
388*b1cdbd2cSJim Jagielski sal_Int16 nRed(0);
389*b1cdbd2cSJim Jagielski sal_Int16 nGreen(0);
390*b1cdbd2cSJim Jagielski sal_Int16 nBlue(0);
391*b1cdbd2cSJim Jagielski double nGamma(1.0);
392*b1cdbd2cSJim Jagielski sal_Int16 nTransparency(0);
393*b1cdbd2cSJim Jagielski sal_Int32 nRotation(0);
394*b1cdbd2cSJim Jagielski
395*b1cdbd2cSJim Jagielski getPropertyValue( eColorMode, xPropSet, OUSTR("GraphicColorMode") );
396*b1cdbd2cSJim Jagielski getPropertyValue( nLuminance, xPropSet, OUSTR("AdjustLuminance") );
397*b1cdbd2cSJim Jagielski getPropertyValue( nContrast, xPropSet, OUSTR("AdjustContrast") );
398*b1cdbd2cSJim Jagielski getPropertyValue( nRed, xPropSet, OUSTR("AdjustRed") );
399*b1cdbd2cSJim Jagielski getPropertyValue( nGreen, xPropSet, OUSTR("AdjustGreen") );
400*b1cdbd2cSJim Jagielski getPropertyValue( nBlue, xPropSet, OUSTR("AdjustBlue") );
401*b1cdbd2cSJim Jagielski getPropertyValue( nGamma, xPropSet, OUSTR("Gamma") );
402*b1cdbd2cSJim Jagielski getPropertyValue( nTransparency, xPropSet, OUSTR("Transparency") );
403*b1cdbd2cSJim Jagielski getPropertyValue( nRotation, xPropSet, OUSTR("RotateAngle") );
404*b1cdbd2cSJim Jagielski
405*b1cdbd2cSJim Jagielski GraphicAttr aGraphAttrs;
406*b1cdbd2cSJim Jagielski aGraphAttrs.SetDrawMode( (GraphicDrawMode)eColorMode );
407*b1cdbd2cSJim Jagielski aGraphAttrs.SetLuminance( nLuminance );
408*b1cdbd2cSJim Jagielski aGraphAttrs.SetContrast( nContrast );
409*b1cdbd2cSJim Jagielski aGraphAttrs.SetChannelR( nRed );
410*b1cdbd2cSJim Jagielski aGraphAttrs.SetChannelG( nGreen );
411*b1cdbd2cSJim Jagielski aGraphAttrs.SetChannelB( nBlue );
412*b1cdbd2cSJim Jagielski aGraphAttrs.SetGamma( nGamma );
413*b1cdbd2cSJim Jagielski aGraphAttrs.SetTransparency( static_cast<sal_uInt8>(nTransparency) );
414*b1cdbd2cSJim Jagielski aGraphAttrs.SetRotation( static_cast<sal_uInt16>(nRotation*10) );
415*b1cdbd2cSJim Jagielski
416*b1cdbd2cSJim Jagielski text::GraphicCrop aGraphCrop;
417*b1cdbd2cSJim Jagielski if( getPropertyValue( aGraphCrop, xPropSet, OUSTR("GraphicCrop") ))
418*b1cdbd2cSJim Jagielski {
419*b1cdbd2cSJim Jagielski aGraphAttrs.SetCrop( aGraphCrop.Left,
420*b1cdbd2cSJim Jagielski aGraphCrop.Top,
421*b1cdbd2cSJim Jagielski aGraphCrop.Right,
422*b1cdbd2cSJim Jagielski aGraphCrop.Bottom );
423*b1cdbd2cSJim Jagielski }
424*b1cdbd2cSJim Jagielski
425*b1cdbd2cSJim Jagielski // fetch readily transformed and color-modified
426*b1cdbd2cSJim Jagielski // graphic
427*b1cdbd2cSJim Jagielski // ---------------------------------------------
428*b1cdbd2cSJim Jagielski
429*b1cdbd2cSJim Jagielski Graphic aGraphic(
430*b1cdbd2cSJim Jagielski aGraphicObject.GetTransformedGraphic(
431*b1cdbd2cSJim Jagielski aGraphicObject.GetPrefSize(),
432*b1cdbd2cSJim Jagielski aGraphicObject.GetPrefMapMode(),
433*b1cdbd2cSJim Jagielski aGraphAttrs ) );
434*b1cdbd2cSJim Jagielski
435*b1cdbd2cSJim Jagielski return DrawShape::create( xCurrShape,
436*b1cdbd2cSJim Jagielski mxPage,
437*b1cdbd2cSJim Jagielski mnAscendingPrio,
438*b1cdbd2cSJim Jagielski aGraphic,
439*b1cdbd2cSJim Jagielski mrContext );
440*b1cdbd2cSJim Jagielski }
441*b1cdbd2cSJim Jagielski else
442*b1cdbd2cSJim Jagielski {
443*b1cdbd2cSJim Jagielski return DrawShape::create( xCurrShape,
444*b1cdbd2cSJim Jagielski mxPage,
445*b1cdbd2cSJim Jagielski mnAscendingPrio,
446*b1cdbd2cSJim Jagielski false,
447*b1cdbd2cSJim Jagielski mrContext );
448*b1cdbd2cSJim Jagielski }
449*b1cdbd2cSJim Jagielski }
450*b1cdbd2cSJim Jagielski
isSkip(uno::Reference<beans::XPropertySet> const & xPropSet,rtl::OUString const & shapeType,uno::Reference<drawing::XLayer> const & xLayer)451*b1cdbd2cSJim Jagielski bool ShapeImporter::isSkip(
452*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> const& xPropSet,
453*b1cdbd2cSJim Jagielski rtl::OUString const& shapeType,
454*b1cdbd2cSJim Jagielski uno::Reference< drawing::XLayer> const& xLayer )
455*b1cdbd2cSJim Jagielski {
456*b1cdbd2cSJim Jagielski // skip empty presentation objects:
457*b1cdbd2cSJim Jagielski bool bEmpty = false;
458*b1cdbd2cSJim Jagielski if( getPropertyValue( bEmpty,
459*b1cdbd2cSJim Jagielski xPropSet,
460*b1cdbd2cSJim Jagielski OUSTR("IsEmptyPresentationObject")) &&
461*b1cdbd2cSJim Jagielski bEmpty )
462*b1cdbd2cSJim Jagielski {
463*b1cdbd2cSJim Jagielski return true;
464*b1cdbd2cSJim Jagielski }
465*b1cdbd2cSJim Jagielski
466*b1cdbd2cSJim Jagielski //skip shapes which corresponds to annotations
467*b1cdbd2cSJim Jagielski if(xLayer.is())
468*b1cdbd2cSJim Jagielski {
469*b1cdbd2cSJim Jagielski rtl::OUString layerName;
470*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> xPropLayerSet(
471*b1cdbd2cSJim Jagielski xLayer, uno::UNO_QUERY );
472*b1cdbd2cSJim Jagielski const uno::Any& a(xPropLayerSet->getPropertyValue(rtl::OUString::createFromAscii("Name")) );
473*b1cdbd2cSJim Jagielski bool const bRet = (a >>= layerName);
474*b1cdbd2cSJim Jagielski if(bRet)
475*b1cdbd2cSJim Jagielski {
476*b1cdbd2cSJim Jagielski if( layerName.equals(rtl::OUString::createFromAscii("DrawnInSlideshow")))
477*b1cdbd2cSJim Jagielski {
478*b1cdbd2cSJim Jagielski //Transform shapes into PolyPolygons
479*b1cdbd2cSJim Jagielski importPolygons(xPropSet);
480*b1cdbd2cSJim Jagielski
481*b1cdbd2cSJim Jagielski return true;
482*b1cdbd2cSJim Jagielski }
483*b1cdbd2cSJim Jagielski }
484*b1cdbd2cSJim Jagielski }
485*b1cdbd2cSJim Jagielski
486*b1cdbd2cSJim Jagielski // don't export presentation placeholders on masterpage
487*b1cdbd2cSJim Jagielski // they can be non empty when user edits the default texts
488*b1cdbd2cSJim Jagielski if(mbConvertingMasterPage)
489*b1cdbd2cSJim Jagielski {
490*b1cdbd2cSJim Jagielski if(shapeType.equalsAsciiL(
491*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.presentation."
492*b1cdbd2cSJim Jagielski "TitleTextShape") ) ||
493*b1cdbd2cSJim Jagielski shapeType.equalsAsciiL(
494*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM("com.sun.star.presentation."
495*b1cdbd2cSJim Jagielski "OutlinerShape") ))
496*b1cdbd2cSJim Jagielski {
497*b1cdbd2cSJim Jagielski return true;
498*b1cdbd2cSJim Jagielski }
499*b1cdbd2cSJim Jagielski }
500*b1cdbd2cSJim Jagielski return false;
501*b1cdbd2cSJim Jagielski }
502*b1cdbd2cSJim Jagielski
503*b1cdbd2cSJim Jagielski
importPolygons(uno::Reference<beans::XPropertySet> const & xPropSet)504*b1cdbd2cSJim Jagielski void ShapeImporter::importPolygons(uno::Reference<beans::XPropertySet> const& xPropSet) {
505*b1cdbd2cSJim Jagielski
506*b1cdbd2cSJim Jagielski drawing::PointSequenceSequence aRetval;
507*b1cdbd2cSJim Jagielski sal_Int32 nLineColor=0;
508*b1cdbd2cSJim Jagielski double fLineWidth;
509*b1cdbd2cSJim Jagielski getPropertyValue( aRetval, xPropSet, OUSTR("PolyPolygon") );
510*b1cdbd2cSJim Jagielski getPropertyValue( nLineColor, xPropSet, OUSTR("LineColor") );
511*b1cdbd2cSJim Jagielski getPropertyValue( fLineWidth, xPropSet, OUSTR("LineWidth") );
512*b1cdbd2cSJim Jagielski
513*b1cdbd2cSJim Jagielski drawing::PointSequence* pOuterSequence = aRetval.getArray();
514*b1cdbd2cSJim Jagielski awt::Point* pInnerSequence = pOuterSequence->getArray();
515*b1cdbd2cSJim Jagielski
516*b1cdbd2cSJim Jagielski ::basegfx::B2DPolygon aPoly;
517*b1cdbd2cSJim Jagielski basegfx::B2DPoint aPoint;
518*b1cdbd2cSJim Jagielski for( sal_Int32 nCurrPoly=0; nCurrPoly<pOuterSequence->getLength(); ++nCurrPoly, ++pInnerSequence )
519*b1cdbd2cSJim Jagielski {
520*b1cdbd2cSJim Jagielski aPoint.setX((*pInnerSequence).X);
521*b1cdbd2cSJim Jagielski aPoint.setY((*pInnerSequence).Y);
522*b1cdbd2cSJim Jagielski aPoly.append( aPoint );
523*b1cdbd2cSJim Jagielski }
524*b1cdbd2cSJim Jagielski UnoViewVector::const_iterator aIter=(mrContext.mrViewContainer).begin();
525*b1cdbd2cSJim Jagielski UnoViewVector::const_iterator aEnd=(mrContext.mrViewContainer).end();
526*b1cdbd2cSJim Jagielski while(aIter != aEnd)
527*b1cdbd2cSJim Jagielski {
528*b1cdbd2cSJim Jagielski ::cppcanvas::PolyPolygonSharedPtr pPolyPoly(
529*b1cdbd2cSJim Jagielski ::cppcanvas::BaseGfxFactory::getInstance().createPolyPolygon( (*aIter)->getCanvas(),
530*b1cdbd2cSJim Jagielski aPoly ) );
531*b1cdbd2cSJim Jagielski if( pPolyPoly )
532*b1cdbd2cSJim Jagielski {
533*b1cdbd2cSJim Jagielski pPolyPoly->setRGBALineColor( unoColor2RGBColor( nLineColor ).getIntegerColor() );
534*b1cdbd2cSJim Jagielski pPolyPoly->setStrokeWidth(fLineWidth);
535*b1cdbd2cSJim Jagielski pPolyPoly->draw();
536*b1cdbd2cSJim Jagielski maPolygons.push_back(pPolyPoly);
537*b1cdbd2cSJim Jagielski }
538*b1cdbd2cSJim Jagielski aIter++;
539*b1cdbd2cSJim Jagielski }
540*b1cdbd2cSJim Jagielski }
541*b1cdbd2cSJim Jagielski
importBackgroundShape()542*b1cdbd2cSJim Jagielski ShapeSharedPtr ShapeImporter::importBackgroundShape() // throw (ShapeLoadFailedException)
543*b1cdbd2cSJim Jagielski {
544*b1cdbd2cSJim Jagielski if( maShapesStack.empty() )
545*b1cdbd2cSJim Jagielski throw ShapeLoadFailedException();
546*b1cdbd2cSJim Jagielski
547*b1cdbd2cSJim Jagielski XShapesEntry& rTop = maShapesStack.top();
548*b1cdbd2cSJim Jagielski ShapeSharedPtr pBgShape(
549*b1cdbd2cSJim Jagielski createBackgroundShape(mxPage,
550*b1cdbd2cSJim Jagielski uno::Reference<drawing::XDrawPage>(
551*b1cdbd2cSJim Jagielski rTop.mxShapes,
552*b1cdbd2cSJim Jagielski uno::UNO_QUERY_THROW),
553*b1cdbd2cSJim Jagielski mrContext) );
554*b1cdbd2cSJim Jagielski mnAscendingPrio += 1.0;
555*b1cdbd2cSJim Jagielski
556*b1cdbd2cSJim Jagielski return pBgShape;
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski
importShape()559*b1cdbd2cSJim Jagielski ShapeSharedPtr ShapeImporter::importShape() // throw (ShapeLoadFailedException)
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski ShapeSharedPtr pRet;
562*b1cdbd2cSJim Jagielski bool bIsGroupShape = false;
563*b1cdbd2cSJim Jagielski
564*b1cdbd2cSJim Jagielski while( !maShapesStack.empty() && !pRet )
565*b1cdbd2cSJim Jagielski {
566*b1cdbd2cSJim Jagielski XShapesEntry& rTop = maShapesStack.top();
567*b1cdbd2cSJim Jagielski if( rTop.mnPos < rTop.mnCount )
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski uno::Reference<drawing::XShape> const xCurrShape(
570*b1cdbd2cSJim Jagielski rTop.mxShapes->getByIndex( rTop.mnPos ), uno::UNO_QUERY );
571*b1cdbd2cSJim Jagielski ++rTop.mnPos;
572*b1cdbd2cSJim Jagielski uno::Reference<beans::XPropertySet> xPropSet(
573*b1cdbd2cSJim Jagielski xCurrShape, uno::UNO_QUERY );
574*b1cdbd2cSJim Jagielski if( !xPropSet.is() )
575*b1cdbd2cSJim Jagielski {
576*b1cdbd2cSJim Jagielski // we definitely need the properties of
577*b1cdbd2cSJim Jagielski // the shape here. This will also fail,
578*b1cdbd2cSJim Jagielski // if getByIndex did not return a valid
579*b1cdbd2cSJim Jagielski // shape
580*b1cdbd2cSJim Jagielski throw ShapeLoadFailedException();
581*b1cdbd2cSJim Jagielski }
582*b1cdbd2cSJim Jagielski
583*b1cdbd2cSJim Jagielski //Retrieve the layer for the current shape
584*b1cdbd2cSJim Jagielski uno::Reference< drawing::XLayer > xDrawnInSlideshow;
585*b1cdbd2cSJim Jagielski
586*b1cdbd2cSJim Jagielski uno::Reference< drawing::XLayerSupplier > xLayerSupplier(mxPagesSupplier, uno::UNO_QUERY);
587*b1cdbd2cSJim Jagielski if(xLayerSupplier.is())
588*b1cdbd2cSJim Jagielski {
589*b1cdbd2cSJim Jagielski uno::Reference< container::XNameAccess > xNameAccess = xLayerSupplier->getLayerManager();
590*b1cdbd2cSJim Jagielski
591*b1cdbd2cSJim Jagielski uno::Reference< drawing::XLayerManager > xLayerManager(xNameAccess, uno::UNO_QUERY);
592*b1cdbd2cSJim Jagielski
593*b1cdbd2cSJim Jagielski xDrawnInSlideshow = xLayerManager->getLayerForShape(xCurrShape);
594*b1cdbd2cSJim Jagielski }
595*b1cdbd2cSJim Jagielski
596*b1cdbd2cSJim Jagielski rtl::OUString const shapeType( xCurrShape->getShapeType());
597*b1cdbd2cSJim Jagielski
598*b1cdbd2cSJim Jagielski // is this shape presentation-invisible?
599*b1cdbd2cSJim Jagielski if( !isSkip(xPropSet, shapeType, xDrawnInSlideshow) )
600*b1cdbd2cSJim Jagielski {
601*b1cdbd2cSJim Jagielski bIsGroupShape = shapeType.equalsAsciiL(
602*b1cdbd2cSJim Jagielski RTL_CONSTASCII_STRINGPARAM(
603*b1cdbd2cSJim Jagielski "com.sun.star.drawing.GroupShape") );
604*b1cdbd2cSJim Jagielski
605*b1cdbd2cSJim Jagielski if( rTop.mpGroupShape ) // in group particle mode?
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski pRet.reset( new ShapeOfGroup(
608*b1cdbd2cSJim Jagielski rTop.mpGroupShape /* container shape */,
609*b1cdbd2cSJim Jagielski xCurrShape, xPropSet,
610*b1cdbd2cSJim Jagielski mnAscendingPrio ) );
611*b1cdbd2cSJim Jagielski }
612*b1cdbd2cSJim Jagielski else
613*b1cdbd2cSJim Jagielski {
614*b1cdbd2cSJim Jagielski pRet = createShape( xCurrShape, xPropSet, shapeType );
615*b1cdbd2cSJim Jagielski }
616*b1cdbd2cSJim Jagielski mnAscendingPrio += 1.0;
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski }
619*b1cdbd2cSJim Jagielski if( rTop.mnPos >= rTop.mnCount )
620*b1cdbd2cSJim Jagielski {
621*b1cdbd2cSJim Jagielski // group or top-level shapes finished:
622*b1cdbd2cSJim Jagielski maShapesStack.pop();
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski if( bIsGroupShape && pRet )
625*b1cdbd2cSJim Jagielski {
626*b1cdbd2cSJim Jagielski // push new group on the stack: group traversal
627*b1cdbd2cSJim Jagielski maShapesStack.push( XShapesEntry( pRet ) );
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski }
630*b1cdbd2cSJim Jagielski
631*b1cdbd2cSJim Jagielski return pRet;
632*b1cdbd2cSJim Jagielski }
633*b1cdbd2cSJim Jagielski
isImportDone() const634*b1cdbd2cSJim Jagielski bool ShapeImporter::isImportDone() const
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski return maShapesStack.empty();
637*b1cdbd2cSJim Jagielski }
638*b1cdbd2cSJim Jagielski
getPolygons()639*b1cdbd2cSJim Jagielski PolyPolygonVector ShapeImporter::getPolygons()
640*b1cdbd2cSJim Jagielski {
641*b1cdbd2cSJim Jagielski return maPolygons;
642*b1cdbd2cSJim Jagielski }
643*b1cdbd2cSJim Jagielski
ShapeImporter(uno::Reference<drawing::XDrawPage> const & xPage,uno::Reference<drawing::XDrawPage> const & xActualPage,uno::Reference<drawing::XDrawPagesSupplier> const & xPagesSupplier,const SlideShowContext & rContext,sal_Int32 nOrdNumStart,bool bConvertingMasterPage)644*b1cdbd2cSJim Jagielski ShapeImporter::ShapeImporter( uno::Reference<drawing::XDrawPage> const& xPage,
645*b1cdbd2cSJim Jagielski uno::Reference<drawing::XDrawPage> const& xActualPage,
646*b1cdbd2cSJim Jagielski uno::Reference<drawing::XDrawPagesSupplier> const& xPagesSupplier,
647*b1cdbd2cSJim Jagielski const SlideShowContext& rContext,
648*b1cdbd2cSJim Jagielski sal_Int32 nOrdNumStart,
649*b1cdbd2cSJim Jagielski bool bConvertingMasterPage ) :
650*b1cdbd2cSJim Jagielski mxPage( xActualPage ),
651*b1cdbd2cSJim Jagielski mxPagesSupplier( xPagesSupplier ),
652*b1cdbd2cSJim Jagielski mrContext( rContext ),
653*b1cdbd2cSJim Jagielski maPolygons(),
654*b1cdbd2cSJim Jagielski maShapesStack(),
655*b1cdbd2cSJim Jagielski mnAscendingPrio( nOrdNumStart ),
656*b1cdbd2cSJim Jagielski mbConvertingMasterPage( bConvertingMasterPage )
657*b1cdbd2cSJim Jagielski {
658*b1cdbd2cSJim Jagielski uno::Reference<drawing::XShapes> const xShapes(
659*b1cdbd2cSJim Jagielski xPage, uno::UNO_QUERY_THROW );
660*b1cdbd2cSJim Jagielski maShapesStack.push( XShapesEntry(xShapes) );
661*b1cdbd2cSJim Jagielski }
662*b1cdbd2cSJim Jagielski
663*b1cdbd2cSJim Jagielski } // namespace internal
664*b1cdbd2cSJim Jagielski } // namespace presentation
665*b1cdbd2cSJim Jagielski
666