1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef INCLUDED_SDR_PRIMITIVE2D_SDRTEXTPRIMITIVE2D_HXX 25 #define INCLUDED_SDR_PRIMITIVE2D_SDRTEXTPRIMITIVE2D_HXX 26 27 #include <drawinglayer/primitive2d/baseprimitive2d.hxx> 28 #include <basegfx/polygon/b2dpolypolygon.hxx> 29 #include <basegfx/matrix/b2dhommatrix.hxx> 30 #include <com/sun/star/drawing/XDrawPage.hpp> 31 #include <editeng/outlobj.hxx> 32 #include <tools/color.hxx> 33 #include <svx/sdr/attribute/sdrformtextattribute.hxx> 34 #include <tools/weakbase.hxx> 35 #include <svx/sdtaitm.hxx> 36 37 ////////////////////////////////////////////////////////////////////////////// 38 // predefines 39 class SdrText; 40 41 ////////////////////////////////////////////////////////////////////////////// 42 43 namespace drawinglayer 44 { 45 namespace primitive2d 46 { 47 class SdrTextPrimitive2D : public BufferedDecompositionPrimitive2D 48 { 49 private: 50 // The text model data; this sould later just be the OutlinerParaObject or 51 // something equal 52 ::tools::WeakReference< SdrText > mrSdrText; 53 54 // #i97628# 55 // The text content; now as local OutlinerParaObject copy (internally RefCounted and 56 // COW) and in exclusive, local form as needed in a primitive 57 const OutlinerParaObject maOutlinerParaObject; 58 59 // remeber last VisualizingPage for which a decomposition was made. If the new target 60 // is not given or different, the decomposition needs to be potentially removed 61 // for supporting e.g. page number change on MasterPage objects or the different 62 // field renderings in SubGeometry and MasterPage mnode 63 com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > mxLastVisualizingPage; 64 65 // remember last PageNumber for which a decomposition was made. This is only used 66 // when mbContainsPageField is true, else it is 0 67 sal_Int16 mnLastPageNumber; 68 69 // remember last PageCount for which a decomposition was made. This is only used 70 // when mbContainsPageCountField is true, else it is 0 71 sal_Int16 mnLastPageCount; 72 73 // #i101443# remember last TextBackgroundColor to decide if a new decomposition is 74 // needed because of background color change 75 Color maLastTextBackgroundColor; 76 77 // bitfield 78 // is there a PageNumber, Header, Footer or DateTimeField used? Evaluated at construction 79 unsigned mbContainsPageField : 1; 80 unsigned mbContainsPageCountField : 1; 81 unsigned mbContainsOtherFields : 1; 82 83 protected: 84 // support for XTEXT_PAINTSHAPE_BEGIN/XTEXT_PAINTSHAPE_END Metafile comments 85 Primitive2DSequence encapsulateWithTextHierarchyBlockPrimitive2D(const Primitive2DSequence& rCandidate) const; 86 87 public: 88 SdrTextPrimitive2D( 89 const SdrText* pSdrText, 90 const OutlinerParaObject& rOutlinerParaObjectPtr); 91 92 // get data getSdrText() const93 const SdrText* getSdrText() const { return mrSdrText.get(); } getOutlinerParaObject() const94 const OutlinerParaObject& getOutlinerParaObject() const { return maOutlinerParaObject; } 95 96 // compare operator 97 virtual bool operator==(const BasePrimitive2D& rPrimitive) const; 98 99 // own get2DDecomposition to take aspect of decomposition with or without spell checker 100 // into account 101 virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; 102 103 // transformed clone operator 104 virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const = 0; 105 }; 106 } // end of namespace primitive2d 107 } // end of namespace drawinglayer 108 109 ////////////////////////////////////////////////////////////////////////////// 110 111 namespace drawinglayer 112 { 113 namespace primitive2d 114 { 115 class SdrContourTextPrimitive2D : public SdrTextPrimitive2D 116 { 117 private: 118 // unit contour polygon (scaled to [0.0 .. 1.0]) 119 basegfx::B2DPolyPolygon maUnitPolyPolygon; 120 121 // complete contour polygon transform (scale, rotate, shear, translate) 122 basegfx::B2DHomMatrix maObjectTransform; 123 124 protected: 125 // local decomposition. 126 virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; 127 128 public: 129 SdrContourTextPrimitive2D( 130 const SdrText* pSdrText, 131 const OutlinerParaObject& rOutlinerParaObjectPtr, 132 const basegfx::B2DPolyPolygon& rUnitPolyPolygon, 133 const basegfx::B2DHomMatrix& rObjectTransform); 134 135 // get data getUnitPolyPolygon() const136 const basegfx::B2DPolyPolygon& getUnitPolyPolygon() const { return maUnitPolyPolygon; } getObjectTransform() const137 const basegfx::B2DHomMatrix& getObjectTransform() const { return maObjectTransform; } 138 139 // compare operator 140 virtual bool operator==(const BasePrimitive2D& rPrimitive) const; 141 142 // transformed clone operator 143 virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; 144 145 // provide unique ID 146 DeclPrimitrive2DIDBlock() 147 }; 148 } // end of namespace primitive2d 149 } // end of namespace drawinglayer 150 151 ////////////////////////////////////////////////////////////////////////////// 152 153 namespace drawinglayer 154 { 155 namespace primitive2d 156 { 157 class SdrPathTextPrimitive2D : public SdrTextPrimitive2D 158 { 159 private: 160 // the path to use. Each paragraph will use one Polygon. 161 basegfx::B2DPolyPolygon maPathPolyPolygon; 162 163 // the Fontwork parameters 164 attribute::SdrFormTextAttribute maSdrFormTextAttribute; 165 166 protected: 167 // local decomposition. 168 virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; 169 170 public: 171 SdrPathTextPrimitive2D( 172 const SdrText* pSdrText, 173 const OutlinerParaObject& rOutlinerParaObjectPtr, 174 const basegfx::B2DPolyPolygon& rPathPolyPolygon, 175 const attribute::SdrFormTextAttribute& rSdrFormTextAttribute); 176 177 // get data getPathPolyPolygon() const178 const basegfx::B2DPolyPolygon& getPathPolyPolygon() const { return maPathPolyPolygon; } getSdrFormTextAttribute() const179 const attribute::SdrFormTextAttribute& getSdrFormTextAttribute() const { return maSdrFormTextAttribute; } 180 181 // compare operator 182 virtual bool operator==(const BasePrimitive2D& rPrimitive) const; 183 184 // transformed clone operator 185 virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; 186 187 // provide unique ID 188 DeclPrimitrive2DIDBlock() 189 }; 190 } // end of namespace primitive2d 191 } // end of namespace drawinglayer 192 193 ////////////////////////////////////////////////////////////////////////////// 194 195 namespace drawinglayer 196 { 197 namespace primitive2d 198 { 199 class SdrBlockTextPrimitive2D : public SdrTextPrimitive2D 200 { 201 private: 202 // text range transformation from unit range ([0.0 .. 1.0]) to text range 203 basegfx::B2DHomMatrix maTextRangeTransform; 204 205 // text alignments 206 SdrTextHorzAdjust maSdrTextHorzAdjust; 207 SdrTextVertAdjust maSdrTextVertAdjust; 208 209 // bitfield 210 unsigned mbFixedCellHeight : 1; 211 unsigned mbUnlimitedPage : 1; // force layout with no text break 212 unsigned mbCellText : 1; // this is a cell text as block text 213 unsigned mbWordWrap : 1; // for CustomShapes text layout 214 unsigned mbClipOnBounds : 1; // for CustomShapes text layout 215 216 protected: 217 // local decomposition. 218 virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; 219 220 public: 221 SdrBlockTextPrimitive2D( 222 const SdrText* pSdrText, 223 const OutlinerParaObject& rOutlinerParaObjectPtr, 224 const basegfx::B2DHomMatrix& rTextRangeTransform, 225 SdrTextHorzAdjust aSdrTextHorzAdjust, 226 SdrTextVertAdjust aSdrTextVertAdjust, 227 bool bFixedCellHeight, 228 bool bUnlimitedPage, 229 bool bCellText, 230 bool bWordWrap, 231 bool bClipOnBounds); 232 233 // get data getTextRangeTransform() const234 const basegfx::B2DHomMatrix& getTextRangeTransform() const { return maTextRangeTransform; } getSdrTextHorzAdjust() const235 SdrTextHorzAdjust getSdrTextHorzAdjust() const { return maSdrTextHorzAdjust; } getSdrTextVertAdjust() const236 SdrTextVertAdjust getSdrTextVertAdjust() const { return maSdrTextVertAdjust; } isFixedCellHeight() const237 bool isFixedCellHeight() const { return mbFixedCellHeight; } getUnlimitedPage() const238 bool getUnlimitedPage() const { return mbUnlimitedPage; } getCellText() const239 bool getCellText() const { return mbCellText; } getWordWrap() const240 bool getWordWrap() const { return mbWordWrap; } getClipOnBounds() const241 bool getClipOnBounds() const { return mbClipOnBounds; } 242 243 // compare operator 244 virtual bool operator==(const BasePrimitive2D& rPrimitive) const; 245 246 // transformed clone operator 247 virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; 248 249 // provide unique ID 250 DeclPrimitrive2DIDBlock() 251 }; 252 } // end of namespace primitive2d 253 } // end of namespace drawinglayer 254 255 ////////////////////////////////////////////////////////////////////////////// 256 257 namespace drawinglayer 258 { 259 namespace primitive2d 260 { 261 class SdrStretchTextPrimitive2D : public SdrTextPrimitive2D 262 { 263 private: 264 // text range transformation from unit range ([0.0 .. 1.0]) to text range 265 basegfx::B2DHomMatrix maTextRangeTransform; 266 267 // bitfield 268 unsigned mbFixedCellHeight : 1; 269 270 protected: 271 // local decomposition. 272 virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; 273 274 public: 275 SdrStretchTextPrimitive2D( 276 const SdrText* pSdrText, 277 const OutlinerParaObject& rOutlinerParaObjectPtr, 278 const basegfx::B2DHomMatrix& rTextRangeTransform, 279 bool bFixedCellHeight); 280 281 // get data getTextRangeTransform() const282 const basegfx::B2DHomMatrix& getTextRangeTransform() const { return maTextRangeTransform; } isFixedCellHeight() const283 bool isFixedCellHeight() const { return mbFixedCellHeight; } 284 285 // compare operator 286 virtual bool operator==(const BasePrimitive2D& rPrimitive) const; 287 288 // transformed clone operator 289 virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; 290 291 // provide unique ID 292 DeclPrimitrive2DIDBlock() 293 }; 294 } // end of namespace primitive2d 295 } // end of namespace drawinglayer 296 297 ////////////////////////////////////////////////////////////////////////////// 298 299 #endif //INCLUDED_SDR_PRIMITIVE2D_SDRTEXTPRIMITIVE2D_HXX 300 301 // eof 302