LCOV - code coverage report
Current view: top level - libreoffice/svx/source/sdr/attribute - sdrtextattribute.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 126 142 88.7 %
Date: 2012-12-27 Functions: 47 50 94.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include <svx/sdr/attribute/sdrtextattribute.hxx>
      22             : #include <svx/sdr/attribute/sdrformtextattribute.hxx>
      23             : #include <svx/svdotext.hxx>
      24             : #include <editeng/outlobj.hxx>
      25             : #include <editeng/editobj.hxx>
      26             : #include <editeng/flditem.hxx>
      27             : #include <svx/sdr/properties/properties.hxx>
      28             : 
      29             : //////////////////////////////////////////////////////////////////////////////
      30             : 
      31             : namespace drawinglayer
      32             : {
      33             :     namespace attribute
      34             :     {
      35             :         class ImpSdrTextAttribute
      36             :         {
      37             :         public:
      38             :             // refcounter
      39             :             sal_uInt32                          mnRefCount;
      40             : 
      41             :             // all-text attributes. The SdrText itself and a copy
      42             :             // of te OPO
      43             :             const SdrText*                      mpSdrText;
      44             :             const OutlinerParaObject*           mpOutlinerParaObject;
      45             : 
      46             :             // Set when it's a FormText; contains all FormText attributes
      47             :             SdrFormTextAttribute                maSdrFormTextAttribute;
      48             : 
      49             :             // text distances
      50             :             sal_Int32                           maTextLeftDistance;
      51             :             sal_Int32                           maTextUpperDistance;
      52             :             sal_Int32                           maTextRightDistance;
      53             :             sal_Int32                           maTextLowerDistance;
      54             : 
      55             :             // #i101556# use versioning from text attributes to detect changes
      56             :             sal_uInt32                          maPropertiesVersion;
      57             : 
      58             :             // text alignments
      59             :             SdrTextHorzAdjust                   maSdrTextHorzAdjust;
      60             :             SdrTextVertAdjust                   maSdrTextVertAdjust;
      61             : 
      62             :             // bitfield
      63             :             unsigned                            mbContour : 1;
      64             :             unsigned                            mbFitToSize : 1;
      65             :             unsigned                            mbAutoFit : 1;
      66             :             unsigned                            mbHideContour : 1;
      67             :             unsigned                            mbBlink : 1;
      68             :             unsigned                            mbScroll : 1;
      69             :             unsigned                            mbInEditMode : 1;
      70             :             unsigned                            mbFixedCellHeight : 1;
      71             :             unsigned                            mbWrongSpell : 1;
      72             : 
      73             :         public:
      74          88 :             ImpSdrTextAttribute(
      75             :                 const SdrText* pSdrText,
      76             :                 const OutlinerParaObject& rOutlinerParaObject,
      77             :                 XFormTextStyle eFormTextStyle,
      78             :                 sal_Int32 aTextLeftDistance,
      79             :                 sal_Int32 aTextUpperDistance,
      80             :                 sal_Int32 aTextRightDistance,
      81             :                 sal_Int32 aTextLowerDistance,
      82             :                 SdrTextHorzAdjust aSdrTextHorzAdjust,
      83             :                 SdrTextVertAdjust aSdrTextVertAdjust,
      84             :                 bool bContour,
      85             :                 bool bFitToSize,
      86             :                 bool bAutoFit,
      87             :                 bool bHideContour,
      88             :                 bool bBlink,
      89             :                 bool bScroll,
      90             :                 bool bInEditMode,
      91             :                 bool bFixedCellHeight,
      92             :                 bool bWrongSpell)
      93             :             :   mnRefCount(0),
      94             :                 mpSdrText(pSdrText),
      95          88 :                 mpOutlinerParaObject(new OutlinerParaObject(rOutlinerParaObject)),
      96             :                 maSdrFormTextAttribute(),
      97             :                 maTextLeftDistance(aTextLeftDistance),
      98             :                 maTextUpperDistance(aTextUpperDistance),
      99             :                 maTextRightDistance(aTextRightDistance),
     100             :                 maTextLowerDistance(aTextLowerDistance),
     101             :                 maPropertiesVersion(0),
     102             :                 maSdrTextHorzAdjust(aSdrTextHorzAdjust),
     103             :                 maSdrTextVertAdjust(aSdrTextVertAdjust),
     104             :                 mbContour(bContour),
     105             :                 mbFitToSize(bFitToSize),
     106             :                 mbAutoFit(bAutoFit),
     107             :                 mbHideContour(bHideContour),
     108             :                 mbBlink(bBlink),
     109             :                 mbScroll(bScroll),
     110             :                 mbInEditMode(bInEditMode),
     111             :                 mbFixedCellHeight(bFixedCellHeight),
     112         176 :                 mbWrongSpell(bWrongSpell)
     113             :             {
     114          88 :                 if(pSdrText)
     115             :                 {
     116          88 :                     if(XFT_NONE != eFormTextStyle)
     117             :                     {
     118             :                         // text on path. Create FormText attribute
     119           0 :                         const SfxItemSet& rSet = pSdrText->GetItemSet();
     120           0 :                         maSdrFormTextAttribute = SdrFormTextAttribute(rSet);
     121             :                     }
     122             : 
     123             :                     // #i101556# init with version number to detect changes of single text
     124             :                     // attribute and/or style sheets in primitive data without having to
     125             :                     // copy that data locally (which would be better from principle)
     126          88 :                     maPropertiesVersion = pSdrText->GetObject().GetProperties().getVersion();
     127             :                 }
     128          88 :             }
     129             : 
     130          11 :             ImpSdrTextAttribute()
     131             :             :   mnRefCount(0),
     132             :                 mpSdrText(0),
     133             :                 mpOutlinerParaObject(0),
     134             :                 maSdrFormTextAttribute(),
     135             :                 maTextLeftDistance(0),
     136             :                 maTextUpperDistance(0),
     137             :                 maTextRightDistance(0),
     138             :                 maTextLowerDistance(0),
     139             :                 maPropertiesVersion(0),
     140             :                 maSdrTextHorzAdjust(SDRTEXTHORZADJUST_LEFT),
     141             :                 maSdrTextVertAdjust(SDRTEXTVERTADJUST_TOP),
     142             :                 mbContour(false),
     143             :                 mbFitToSize(false),
     144             :                 mbAutoFit(false),
     145             :                 mbHideContour(false),
     146             :                 mbBlink(false),
     147             :                 mbScroll(false),
     148             :                 mbInEditMode(false),
     149             :                 mbFixedCellHeight(false),
     150          11 :                 mbWrongSpell(false)
     151             :             {
     152          11 :             }
     153             : 
     154          81 :             ~ImpSdrTextAttribute()
     155          81 :             {
     156          81 :                 if(mpOutlinerParaObject)
     157             :                 {
     158          81 :                     delete mpOutlinerParaObject;
     159             :                 }
     160          81 :             }
     161             : 
     162             :             // data read access
     163          84 :             const SdrText& getSdrText() const
     164             :             {
     165             :                 OSL_ENSURE(mpSdrText, "Access to text of default version of ImpSdrTextAttribute (!)");
     166          84 :                 return *mpSdrText;
     167             :             }
     168         176 :             const OutlinerParaObject& getOutlinerParaObject() const
     169             :             {
     170             :                 OSL_ENSURE(mpOutlinerParaObject, "Access to OutlinerParaObject of default version of ImpSdrTextAttribute (!)");
     171         176 :                 return *mpOutlinerParaObject;
     172             :             }
     173         100 :             bool isContour() const { return mbContour; }
     174         100 :             bool isFitToSize() const { return mbFitToSize; }
     175         100 :             bool isAutoFit() const { return mbAutoFit; }
     176          16 :             bool isHideContour() const { return mbHideContour; }
     177         100 :             bool isBlink() const { return mbBlink; }
     178         182 :             bool isScroll() const { return mbScroll; }
     179         100 :             bool isInEditMode() const { return mbInEditMode; }
     180          98 :             bool isFixedCellHeight() const { return mbFixedCellHeight; }
     181          16 :             bool isWrongSpell() const { return mbWrongSpell; }
     182         445 :             const SdrFormTextAttribute& getSdrFormTextAttribute() const { return maSdrFormTextAttribute; }
     183         100 :             sal_Int32 getTextLeftDistance() const { return maTextLeftDistance; }
     184         100 :             sal_Int32 getTextUpperDistance() const { return maTextUpperDistance; }
     185         100 :             sal_Int32 getTextRightDistance() const { return maTextRightDistance; }
     186         100 :             sal_Int32 getTextLowerDistance() const { return maTextLowerDistance; }
     187          16 :             sal_uInt32 getPropertiesVersion() const { return maPropertiesVersion; }
     188          98 :             SdrTextHorzAdjust getSdrTextHorzAdjust() const { return maSdrTextHorzAdjust; }
     189          98 :             SdrTextVertAdjust getSdrTextVertAdjust() const { return maSdrTextVertAdjust; }
     190             : 
     191             :             // compare operator
     192          38 :             bool operator==(const ImpSdrTextAttribute& rCandidate) const
     193             :             {
     194          38 :                 if(mpOutlinerParaObject != rCandidate.mpOutlinerParaObject)
     195             :                 {
     196          38 :                     if(mpOutlinerParaObject && rCandidate.mpOutlinerParaObject)
     197             :                     {
     198             :                         // compares OPO and it's contents, but traditionally not the RedLining
     199             :                         // which is not seen as model, but as temporary information
     200          38 :                         if(!(getOutlinerParaObject() == rCandidate.getOutlinerParaObject()))
     201             :                         {
     202          30 :                             return false;
     203             :                         }
     204             : 
     205             :                         // #i102062# for primitive visualisation, the WrongList (SpellChecking)
     206             :                         // is important, too, so use isWrongListEqual since there is no WrongList
     207             :                         // comparison in the regular OutlinerParaObject compare (since it's
     208             :                         // not-persistent data)
     209          16 :                         if(!(getOutlinerParaObject().isWrongListEqual(rCandidate.getOutlinerParaObject())))
     210             :                         {
     211           0 :                             return false;
     212             :                         }
     213             :                     }
     214             :                     else
     215             :                     {
     216             :                         // only one is zero; not equal
     217           0 :                         return false;
     218             :                     }
     219             :                 }
     220             : 
     221             :                 return (
     222           8 :                        getSdrFormTextAttribute() == rCandidate.getSdrFormTextAttribute()
     223           8 :                     && getTextLeftDistance() == rCandidate.getTextLeftDistance()
     224           8 :                     && getTextUpperDistance() == rCandidate.getTextUpperDistance()
     225           8 :                     && getTextRightDistance() == rCandidate.getTextRightDistance()
     226           8 :                     && getTextLowerDistance() == rCandidate.getTextLowerDistance()
     227           8 :                     && getPropertiesVersion() == rCandidate.getPropertiesVersion()
     228             : 
     229           8 :                     && getSdrTextHorzAdjust() == rCandidate.getSdrTextHorzAdjust()
     230           8 :                     && getSdrTextVertAdjust() == rCandidate.getSdrTextVertAdjust()
     231             : 
     232           8 :                     && isContour() == rCandidate.isContour()
     233           8 :                     && isFitToSize() == rCandidate.isFitToSize()
     234           8 :                     && isAutoFit() == rCandidate.isAutoFit()
     235           8 :                     && isHideContour() == rCandidate.isHideContour()
     236           8 :                     && isBlink() == rCandidate.isBlink()
     237           8 :                     && isScroll() == rCandidate.isScroll()
     238           8 :                     && isInEditMode() == rCandidate.isInEditMode()
     239           8 :                     && isFixedCellHeight() == rCandidate.isFixedCellHeight()
     240         128 :                     && isWrongSpell() == rCandidate.isWrongSpell());
     241             :             }
     242             : 
     243        2161 :             static ImpSdrTextAttribute* get_global_default()
     244             :             {
     245             :                 static ImpSdrTextAttribute* pDefault = 0;
     246             : 
     247        2161 :                 if(!pDefault)
     248             :                 {
     249             :                     // use default constructor
     250          11 :                     pDefault = new ImpSdrTextAttribute();
     251             : 
     252             :                     // never delete; start with RefCount 1, not 0
     253          11 :                     pDefault->mnRefCount++;
     254             :                 }
     255             : 
     256        2161 :                 return pDefault;
     257             :             }
     258             :         };
     259             : 
     260          88 :         SdrTextAttribute::SdrTextAttribute(
     261             :             const SdrText& rSdrText,
     262             :             const OutlinerParaObject& rOutlinerParaObject,
     263             :             XFormTextStyle eFormTextStyle,
     264             :             sal_Int32 aTextLeftDistance,
     265             :             sal_Int32 aTextUpperDistance,
     266             :             sal_Int32 aTextRightDistance,
     267             :             sal_Int32 aTextLowerDistance,
     268             :             SdrTextHorzAdjust aSdrTextHorzAdjust,
     269             :             SdrTextVertAdjust aSdrTextVertAdjust,
     270             :             bool bContour,
     271             :             bool bFitToSize,
     272             :             bool bAutoFit,
     273             :             bool bHideContour,
     274             :             bool bBlink,
     275             :             bool bScroll,
     276             :             bool bInEditMode,
     277             :             bool bFixedCellHeight,
     278             :             bool bWrongSpell)
     279             :         :   mpSdrTextAttribute(new ImpSdrTextAttribute(
     280             :                 &rSdrText, rOutlinerParaObject, eFormTextStyle, aTextLeftDistance, aTextUpperDistance,
     281             :                 aTextRightDistance, aTextLowerDistance, aSdrTextHorzAdjust, aSdrTextVertAdjust, bContour,
     282          88 :                 bFitToSize, bAutoFit, bHideContour, bBlink, bScroll, bInEditMode, bFixedCellHeight, bWrongSpell))
     283             :         {
     284          88 :         }
     285             : 
     286        1251 :         SdrTextAttribute::SdrTextAttribute()
     287        1251 :         :   mpSdrTextAttribute(ImpSdrTextAttribute::get_global_default())
     288             :         {
     289        1251 :             mpSdrTextAttribute->mnRefCount++;
     290        1251 :         }
     291             : 
     292         822 :         SdrTextAttribute::SdrTextAttribute(const SdrTextAttribute& rCandidate)
     293         822 :         :   mpSdrTextAttribute(rCandidate.mpSdrTextAttribute)
     294             :         {
     295         822 :             mpSdrTextAttribute->mnRefCount++;
     296         822 :         }
     297             : 
     298        2134 :         SdrTextAttribute::~SdrTextAttribute()
     299             :         {
     300        2134 :             if(mpSdrTextAttribute->mnRefCount)
     301             :             {
     302        2053 :                 mpSdrTextAttribute->mnRefCount--;
     303             :             }
     304             :             else
     305             :             {
     306          81 :                 delete mpSdrTextAttribute;
     307             :             }
     308        2134 :         }
     309             : 
     310         910 :         bool SdrTextAttribute::isDefault() const
     311             :         {
     312         910 :             return mpSdrTextAttribute == ImpSdrTextAttribute::get_global_default();
     313             :         }
     314             : 
     315         601 :         SdrTextAttribute& SdrTextAttribute::operator=(const SdrTextAttribute& rCandidate)
     316             :         {
     317         601 :             if(rCandidate.mpSdrTextAttribute != mpSdrTextAttribute)
     318             :             {
     319          88 :                 if(mpSdrTextAttribute->mnRefCount)
     320             :                 {
     321          88 :                     mpSdrTextAttribute->mnRefCount--;
     322             :                 }
     323             :                 else
     324             :                 {
     325           0 :                     delete mpSdrTextAttribute;
     326             :                 }
     327             : 
     328          88 :                 mpSdrTextAttribute = rCandidate.mpSdrTextAttribute;
     329          88 :                 mpSdrTextAttribute->mnRefCount++;
     330             :             }
     331             : 
     332         601 :             return *this;
     333             :         }
     334             : 
     335          78 :         bool SdrTextAttribute::operator==(const SdrTextAttribute& rCandidate) const
     336             :         {
     337          78 :             if(rCandidate.mpSdrTextAttribute == mpSdrTextAttribute)
     338             :             {
     339          40 :                 return true;
     340             :             }
     341             : 
     342          38 :             if(rCandidate.isDefault() != isDefault())
     343             :             {
     344           0 :                 return false;
     345             :             }
     346             : 
     347          38 :             return (*rCandidate.mpSdrTextAttribute == *mpSdrTextAttribute);
     348             :         }
     349             : 
     350          84 :         const SdrText& SdrTextAttribute::getSdrText() const
     351             :         {
     352          84 :             return mpSdrTextAttribute->getSdrText();
     353             :         }
     354             : 
     355          84 :         const OutlinerParaObject& SdrTextAttribute::getOutlinerParaObject() const
     356             :         {
     357          84 :             return mpSdrTextAttribute->getOutlinerParaObject();
     358             :         }
     359             : 
     360          84 :         bool SdrTextAttribute::isContour() const
     361             :         {
     362          84 :             return mpSdrTextAttribute->isContour();
     363             :         }
     364             : 
     365          84 :         bool SdrTextAttribute::isFitToSize() const
     366             :         {
     367          84 :             return mpSdrTextAttribute->isFitToSize();
     368             :         }
     369             : 
     370          84 :         bool SdrTextAttribute::isAutoFit() const
     371             :         {
     372          84 :             return mpSdrTextAttribute->isAutoFit();
     373             :         }
     374             : 
     375           0 :         bool SdrTextAttribute::isHideContour() const
     376             :         {
     377           0 :             return mpSdrTextAttribute->isHideContour();
     378             :         }
     379             : 
     380          84 :         bool SdrTextAttribute::isBlink() const
     381             :         {
     382          84 :             return mpSdrTextAttribute->isBlink();
     383             :         }
     384             : 
     385         166 :         bool SdrTextAttribute::isScroll() const
     386             :         {
     387         166 :             return mpSdrTextAttribute->isScroll();
     388             :         }
     389             : 
     390          84 :         bool SdrTextAttribute::isInEditMode() const
     391             :         {
     392          84 :             return mpSdrTextAttribute->isInEditMode();
     393             :         }
     394             : 
     395          82 :         bool SdrTextAttribute::isFixedCellHeight() const
     396             :         {
     397          82 :             return mpSdrTextAttribute->isFixedCellHeight();
     398             :         }
     399             : 
     400         429 :         const SdrFormTextAttribute& SdrTextAttribute::getSdrFormTextAttribute() const
     401             :         {
     402         429 :             return mpSdrTextAttribute->getSdrFormTextAttribute();
     403             :         }
     404             : 
     405          84 :         sal_Int32 SdrTextAttribute::getTextLeftDistance() const
     406             :         {
     407          84 :             return mpSdrTextAttribute->getTextLeftDistance();
     408             :         }
     409             : 
     410          84 :         sal_Int32 SdrTextAttribute::getTextUpperDistance() const
     411             :         {
     412          84 :             return mpSdrTextAttribute->getTextUpperDistance();
     413             :         }
     414             : 
     415          84 :         sal_Int32 SdrTextAttribute::getTextRightDistance() const
     416             :         {
     417          84 :             return mpSdrTextAttribute->getTextRightDistance();
     418             :         }
     419             : 
     420          84 :         sal_Int32 SdrTextAttribute::getTextLowerDistance() const
     421             :         {
     422          84 :             return mpSdrTextAttribute->getTextLowerDistance();
     423             :         }
     424             : 
     425          82 :         SdrTextHorzAdjust SdrTextAttribute::getSdrTextHorzAdjust() const
     426             :         {
     427          82 :             return mpSdrTextAttribute->getSdrTextHorzAdjust();
     428             :         }
     429             : 
     430          82 :         SdrTextVertAdjust SdrTextAttribute::getSdrTextVertAdjust() const
     431             :         {
     432          82 :             return mpSdrTextAttribute->getSdrTextVertAdjust();
     433             :         }
     434             : 
     435           0 :         void SdrTextAttribute::getBlinkTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList) const
     436             :         {
     437           0 :             if(isBlink())
     438             :             {
     439           0 :                 getSdrText().GetObject().impGetBlinkTextTiming(rAnimList);
     440             :             }
     441           0 :         }
     442             : 
     443           0 :         void SdrTextAttribute::getScrollTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList, double fFrameLength, double fTextLength) const
     444             :         {
     445           0 :             if(isScroll())
     446             :             {
     447           0 :                 getSdrText().GetObject().impGetScrollTextTiming(rAnimList, fFrameLength, fTextLength);
     448             :             }
     449           0 :         }
     450             :     } // end of namespace attribute
     451             : } // end of namespace drawinglayer
     452             : 
     453             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10