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_xmloff.hxx"
26*b1cdbd2cSJim Jagielski #include <com/sun/star/style/GraphicLocation.hpp>
27*b1cdbd2cSJim Jagielski
28*b1cdbd2cSJim Jagielski #include <xmloff/xmlnmspe.hxx>
29*b1cdbd2cSJim Jagielski #include <xmloff/xmltoken.hxx>
30*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
31*b1cdbd2cSJim Jagielski #include <xmloff/xmlexp.hxx>
32*b1cdbd2cSJim Jagielski #include "XMLBackgroundImageExport.hxx"
33*b1cdbd2cSJim Jagielski #include <xmloff/xmluconv.hxx>
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielski using ::rtl::OUString;
36*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
37*b1cdbd2cSJim Jagielski
38*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
39*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
40*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::style;
41*b1cdbd2cSJim Jagielski using namespace ::xmloff::token;
42*b1cdbd2cSJim Jagielski
XMLBackgroundImageExport(SvXMLExport & rExp)43*b1cdbd2cSJim Jagielski XMLBackgroundImageExport::XMLBackgroundImageExport( SvXMLExport& rExp ) :
44*b1cdbd2cSJim Jagielski rExport( rExp )
45*b1cdbd2cSJim Jagielski {
46*b1cdbd2cSJim Jagielski }
47*b1cdbd2cSJim Jagielski
~XMLBackgroundImageExport()48*b1cdbd2cSJim Jagielski XMLBackgroundImageExport::~XMLBackgroundImageExport()
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski }
51*b1cdbd2cSJim Jagielski
exportXML(const Any & rURL,const Any * pPos,const Any * pFilter,const Any * pTransparency,sal_uInt16 nPrefix,const::rtl::OUString & rLocalName)52*b1cdbd2cSJim Jagielski void XMLBackgroundImageExport::exportXML( const Any& rURL,
53*b1cdbd2cSJim Jagielski const Any *pPos,
54*b1cdbd2cSJim Jagielski const Any *pFilter,
55*b1cdbd2cSJim Jagielski const Any *pTransparency,
56*b1cdbd2cSJim Jagielski sal_uInt16 nPrefix,
57*b1cdbd2cSJim Jagielski const ::rtl::OUString& rLocalName )
58*b1cdbd2cSJim Jagielski {
59*b1cdbd2cSJim Jagielski GraphicLocation ePos;
60*b1cdbd2cSJim Jagielski if( !(pPos && ((*pPos) >>= ePos)) )
61*b1cdbd2cSJim Jagielski ePos = GraphicLocation_AREA;
62*b1cdbd2cSJim Jagielski
63*b1cdbd2cSJim Jagielski OUString sURL;
64*b1cdbd2cSJim Jagielski rURL >>= sURL;
65*b1cdbd2cSJim Jagielski if( sURL.getLength() && GraphicLocation_NONE != ePos )
66*b1cdbd2cSJim Jagielski {
67*b1cdbd2cSJim Jagielski OUString sTempURL( GetExport().AddEmbeddedGraphicObject( sURL ) );
68*b1cdbd2cSJim Jagielski if( sTempURL.getLength() )
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_HREF, sTempURL );
71*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_TYPE,
72*b1cdbd2cSJim Jagielski XML_SIMPLE );
73*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE,
74*b1cdbd2cSJim Jagielski XML_ONLOAD );
75*b1cdbd2cSJim Jagielski }
76*b1cdbd2cSJim Jagielski
77*b1cdbd2cSJim Jagielski OUStringBuffer aOut;
78*b1cdbd2cSJim Jagielski switch( ePos )
79*b1cdbd2cSJim Jagielski {
80*b1cdbd2cSJim Jagielski case GraphicLocation_LEFT_TOP:
81*b1cdbd2cSJim Jagielski case GraphicLocation_MIDDLE_TOP:
82*b1cdbd2cSJim Jagielski case GraphicLocation_RIGHT_TOP:
83*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_TOP) );
84*b1cdbd2cSJim Jagielski break;
85*b1cdbd2cSJim Jagielski case GraphicLocation_LEFT_MIDDLE:
86*b1cdbd2cSJim Jagielski case GraphicLocation_MIDDLE_MIDDLE:
87*b1cdbd2cSJim Jagielski case GraphicLocation_RIGHT_MIDDLE:
88*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_CENTER) );
89*b1cdbd2cSJim Jagielski break;
90*b1cdbd2cSJim Jagielski case GraphicLocation_LEFT_BOTTOM:
91*b1cdbd2cSJim Jagielski case GraphicLocation_MIDDLE_BOTTOM:
92*b1cdbd2cSJim Jagielski case GraphicLocation_RIGHT_BOTTOM:
93*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_BOTTOM) );
94*b1cdbd2cSJim Jagielski break;
95*b1cdbd2cSJim Jagielski default:
96*b1cdbd2cSJim Jagielski break;
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski if( aOut.getLength() )
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski aOut.append( sal_Unicode( ' ' ) );
102*b1cdbd2cSJim Jagielski
103*b1cdbd2cSJim Jagielski switch( ePos )
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski case GraphicLocation_LEFT_TOP:
106*b1cdbd2cSJim Jagielski case GraphicLocation_LEFT_BOTTOM:
107*b1cdbd2cSJim Jagielski case GraphicLocation_LEFT_MIDDLE:
108*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_LEFT) );
109*b1cdbd2cSJim Jagielski break;
110*b1cdbd2cSJim Jagielski case GraphicLocation_MIDDLE_TOP:
111*b1cdbd2cSJim Jagielski case GraphicLocation_MIDDLE_MIDDLE:
112*b1cdbd2cSJim Jagielski case GraphicLocation_MIDDLE_BOTTOM:
113*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_CENTER) );
114*b1cdbd2cSJim Jagielski break;
115*b1cdbd2cSJim Jagielski case GraphicLocation_RIGHT_MIDDLE:
116*b1cdbd2cSJim Jagielski case GraphicLocation_RIGHT_TOP:
117*b1cdbd2cSJim Jagielski case GraphicLocation_RIGHT_BOTTOM:
118*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_RIGHT) );
119*b1cdbd2cSJim Jagielski break;
120*b1cdbd2cSJim Jagielski default:
121*b1cdbd2cSJim Jagielski break;
122*b1cdbd2cSJim Jagielski }
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski if( aOut.getLength() )
125*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_STYLE,
126*b1cdbd2cSJim Jagielski XML_POSITION, aOut.makeStringAndClear() );
127*b1cdbd2cSJim Jagielski
128*b1cdbd2cSJim Jagielski if( GraphicLocation_AREA == ePos )
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_BACKGROUND_STRETCH) );
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski else if( GraphicLocation_NONE != ePos && GraphicLocation_TILED != ePos )
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski aOut.append( GetXMLToken(XML_BACKGROUND_NO_REPEAT) );
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski if( aOut.getLength() )
137*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_REPEAT,
138*b1cdbd2cSJim Jagielski aOut.makeStringAndClear() );
139*b1cdbd2cSJim Jagielski
140*b1cdbd2cSJim Jagielski if( pFilter )
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski OUString sFilter;
143*b1cdbd2cSJim Jagielski (*pFilter) >>= sFilter;
144*b1cdbd2cSJim Jagielski if( sFilter.getLength() )
145*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_STYLE, XML_FILTER_NAME,
146*b1cdbd2cSJim Jagielski sFilter );
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski
149*b1cdbd2cSJim Jagielski if( pTransparency )
150*b1cdbd2cSJim Jagielski {
151*b1cdbd2cSJim Jagielski sal_Int8 nTransparency = sal_Int8();
152*b1cdbd2cSJim Jagielski if( (*pTransparency) >>= nTransparency )
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski OUStringBuffer aTransOut;
155*b1cdbd2cSJim Jagielski SvXMLUnitConverter::convertPercent( aTransOut, 100-nTransparency );
156*b1cdbd2cSJim Jagielski GetExport().AddAttribute( XML_NAMESPACE_DRAW, XML_OPACITY,
157*b1cdbd2cSJim Jagielski aTransOut.makeStringAndClear() );
158*b1cdbd2cSJim Jagielski }
159*b1cdbd2cSJim Jagielski }
160*b1cdbd2cSJim Jagielski }
161*b1cdbd2cSJim Jagielski
162*b1cdbd2cSJim Jagielski {
163*b1cdbd2cSJim Jagielski SvXMLElementExport aElem( GetExport(), nPrefix, rLocalName, sal_True, sal_True );
164*b1cdbd2cSJim Jagielski if( sURL.getLength() && GraphicLocation_NONE != ePos )
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski // optional office:binary-data
167*b1cdbd2cSJim Jagielski GetExport().AddEmbeddedGraphicObjectAsBase64( sURL );
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski }
170*b1cdbd2cSJim Jagielski }
171