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 #ifndef OOX_VML_VMLFORMATTING_HXX 29 #define OOX_VML_VMLFORMATTING_HXX 30 31 #include "oox/helper/helper.hxx" 32 33 namespace oox { 34 class GraphicHelper; 35 namespace drawingml { class Color; } 36 namespace drawingml { class ShapePropertyMap; } 37 } 38 39 namespace oox { 40 namespace vml { 41 42 // ============================================================================ 43 44 typedef ::std::pair< sal_Int32, sal_Int32 > Int32Pair; 45 typedef ::std::pair< double, double > DoublePair; 46 47 // ============================================================================ 48 49 class ConversionHelper 50 { 51 public: 52 /** Returns two values contained in rValue separated by cSep. 53 */ 54 static bool separatePair( 55 ::rtl::OUString& orValue1, ::rtl::OUString& orValue2, 56 const ::rtl::OUString& rValue, sal_Unicode cSep ); 57 58 /** Returns the boolean value from the passed string of a VML attribute. 59 Supported values: 'f', 't', 'false', 'true'. False for anything else. 60 */ 61 static bool decodeBool( const ::rtl::OUString& rValue ); 62 63 /** Converts the passed VML percentage measure string to a normalized 64 floating-point value. 65 66 @param rValue The VML percentage value. This is a floating-point value 67 with optional following '%' sign. If the '%' sign is missing, the 68 floating point value will be returned unmodified. If the '%' sign 69 is present, the value will be divided by 100. 70 */ 71 static double decodePercent( 72 const ::rtl::OUString& rValue, 73 double fDefValue ); 74 75 /** Converts the passed VML measure string to EMU (English Metric Units). 76 77 @param rGraphicHelper The graphic helper needed to perform pixel 78 conversion according to the current output device. 79 80 @param rValue The VML measure value. This is a floating-point value 81 with optional measure string following the value. 82 83 @param nRefValue Reference value needed for percentage measure. 84 85 @param bPixelX Set to true if the value is oriented horizontally (e.g. 86 X coordinates, widths). Set to false if the value is oriented 87 vertically (e.g. Y coordinates, heights). This is needed because 88 output devices may specify different width and height for a pixel. 89 90 @param bDefaultAsPixel Set to true if omitted measure unit means 91 pixel. Set to false if omitted measure unit means EMU. 92 */ 93 static sal_Int64 decodeMeasureToEmu( 94 const GraphicHelper& rGraphicHelper, 95 const ::rtl::OUString& rValue, 96 sal_Int32 nRefValue, 97 bool bPixelX, 98 bool bDefaultAsPixel ); 99 100 /** Converts the passed VML measure string to 1/100 mm. 101 102 @param rGraphicHelper See above. 103 @param rValue See above. 104 @param nRefValue See above. 105 @param bPixelX See above. 106 @param bDefaultAsPixel See above. 107 */ 108 static sal_Int32 decodeMeasureToHmm( 109 const GraphicHelper& rGraphicHelper, 110 const ::rtl::OUString& rValue, 111 sal_Int32 nRefValue, 112 bool bPixelX, 113 bool bDefaultAsPixel ); 114 115 /** Converts VML color attributes to a DrawingML color. 116 117 @param roVmlColor The VML string representation of the color. If 118 existing, this can be a 3-digit or 6-digit hexadecimal RGB value 119 with leading '#' character, a predefined color name (e.g. 'black', 120 'red', etc.), the index into an application defined color palette 121 in brackets with leading color name (e.g. 'red [9]' or 122 'windowColor [64]'), or a color modifier used in one-color 123 gradients (e.g. 'fill darken(128)' or 'fill lighten(0)'). 124 125 @param roVmlOpacity The opacity of the color. If existing, this should 126 be a floating-point value in the range [0.0;1.0]. 127 128 @param nDefaultRgb Deafult RGB color used if the parameter roVmlColor 129 is empty. 130 131 @param nPrimaryRgb If set to something else than API_RGB_TRANSPARENT, 132 specifies the color to be used to resolve the color modifiers used 133 in one-color gradients. 134 135 @return The resulting DrawingML color. 136 */ 137 static ::oox::drawingml::Color decodeColor( 138 const GraphicHelper& rGraphicHelper, 139 const OptValue< ::rtl::OUString >& roVmlColor, 140 const OptValue< double >& roVmlOpacity, 141 sal_Int32 nDefaultRgb, 142 sal_Int32 nPrimaryRgb = API_RGB_TRANSPARENT ); 143 144 private: 145 ConversionHelper(); 146 ~ConversionHelper(); 147 }; 148 149 // ============================================================================ 150 151 /** The stroke arrow model structure contains all properties for an line end arrow. */ 152 struct StrokeArrowModel 153 { 154 OptValue< sal_Int32 > moArrowType; 155 OptValue< sal_Int32 > moArrowWidth; 156 OptValue< sal_Int32 > moArrowLength; 157 158 void assignUsed( const StrokeArrowModel& rSource ); 159 }; 160 161 // ============================================================================ 162 163 /** The stroke model structure contains all shape border properties. */ 164 struct StrokeModel 165 { 166 OptValue< bool > moStroked; /// Shape border line on/off. 167 StrokeArrowModel maStartArrow; /// Start line arrow style. 168 StrokeArrowModel maEndArrow; /// End line arrow style. 169 OptValue< ::rtl::OUString > moColor; /// Solid line color. 170 OptValue< double > moOpacity; /// Solid line color opacity. 171 OptValue< ::rtl::OUString > moWeight; /// Line width. 172 OptValue< ::rtl::OUString > moDashStyle; /// Line dash (predefined or manually). 173 OptValue< sal_Int32 > moLineStyle; /// Line style (single, double, ...). 174 OptValue< sal_Int32 > moEndCap; /// Type of line end cap. 175 OptValue< sal_Int32 > moJoinStyle; /// Type of line join. 176 177 void assignUsed( const StrokeModel& rSource ); 178 179 /** Writes the properties to the passed property map. */ 180 void pushToPropMap( 181 ::oox::drawingml::ShapePropertyMap& rPropMap, 182 const GraphicHelper& rGraphicHelper ) const; 183 }; 184 185 // ============================================================================ 186 187 /** The fill model structure contains all shape fill properties. */ 188 struct FillModel 189 { 190 OptValue< bool > moFilled; /// Shape fill on/off. 191 OptValue< ::rtl::OUString > moColor; /// Solid fill color. 192 OptValue< double > moOpacity; /// Solid fill color opacity. 193 OptValue< ::rtl::OUString > moColor2; /// End color of gradient. 194 OptValue< double > moOpacity2; /// End color opycity of gradient. 195 OptValue< sal_Int32 > moType; /// Fill type. 196 OptValue< sal_Int32 > moAngle; /// Gradient rotation angle. 197 OptValue< double > moFocus; /// Linear gradient focus of second color. 198 OptValue< DoublePair > moFocusPos; /// Rectanguar gradient focus position of second color. 199 OptValue< DoublePair > moFocusSize; /// Rectanguar gradient focus size of second color. 200 OptValue< ::rtl::OUString > moBitmapPath; /// Path to fill bitmap fragment. 201 OptValue< bool > moRotate; /// True = rotate gradient/bitmap with shape. 202 203 void assignUsed( const FillModel& rSource ); 204 205 /** Writes the properties to the passed property map. */ 206 void pushToPropMap( 207 ::oox::drawingml::ShapePropertyMap& rPropMap, 208 const GraphicHelper& rGraphicHelper ) const; 209 }; 210 211 // ============================================================================ 212 213 } // namespace vml 214 } // namespace oox 215 216 #endif 217