LCOV - code coverage report
Current view: top level - svx/source/sdr/attribute - sdrtextattribute.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 128 143 89.5 %
Date: 2014-11-03 Functions: 49 52 94.2 %
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 the 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             :             bool                                mbContour : 1;
      64             :             bool                                mbFitToSize : 1;
      65             :             bool                                mbAutoFit : 1;
      66             :             bool                                mbHideContour : 1;
      67             :             bool                                mbBlink : 1;
      68             :             bool                                mbScroll : 1;
      69             :             bool                                mbInEditMode : 1;
      70             :             bool                                mbFixedCellHeight : 1;
      71             :             bool                                mbWrongSpell : 1;
      72             : 
      73             :         public:
      74       18469 :             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       18469 :                 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       36938 :                 mbWrongSpell(bWrongSpell)
     113             :             {
     114       18469 :                 if(pSdrText)
     115             :                 {
     116       18469 :                     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       18469 :                     maPropertiesVersion = pSdrText->GetObject().GetProperties().getVersion();
     127             :                 }
     128       18469 :             }
     129             : 
     130         100 :             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         100 :                 mbWrongSpell(false)
     151             :             {
     152         100 :             }
     153             : 
     154       18165 :             ~ImpSdrTextAttribute()
     155       18165 :             {
     156       18165 :                 if(mpOutlinerParaObject)
     157             :                 {
     158       18165 :                     delete mpOutlinerParaObject;
     159             :                 }
     160       18165 :             }
     161             : 
     162             :             // data read access
     163       12468 :             const SdrText& getSdrText() const
     164             :             {
     165             :                 assert(mpSdrText && "Access to text of default version of ImpSdrTextAttribute (!)");
     166       12468 :                 return *mpSdrText;
     167             :             }
     168             : 
     169       45348 :             const OutlinerParaObject& getOutlinerParaObject() const
     170             :             {
     171             :                 assert(mpOutlinerParaObject && "Access to OutlinerParaObject of default version of ImpSdrTextAttribute (!)");
     172       45348 :                 return *mpOutlinerParaObject;
     173             :             }
     174             : 
     175       25780 :             bool isContour() const { return mbContour; }
     176       25780 :             bool isFitToSize() const { return mbFitToSize; }
     177       25780 :             bool isAutoFit() const { return mbAutoFit; }
     178       13314 :             bool isHideContour() const { return mbHideContour; }
     179       25780 :             bool isBlink() const { return mbBlink; }
     180       38176 :             bool isScroll() const { return mbScroll; }
     181       25780 :             bool isInEditMode() const { return mbInEditMode; }
     182       25708 :             bool isFixedCellHeight() const { return mbFixedCellHeight; }
     183       13314 :             bool isWrongSpell() const { return mbWrongSpell; }
     184       86297 :             const SdrFormTextAttribute& getSdrFormTextAttribute() const { return maSdrFormTextAttribute; }
     185       26764 :             sal_Int32 getTextLeftDistance() const { return maTextLeftDistance; }
     186       26764 :             sal_Int32 getTextUpperDistance() const { return maTextUpperDistance; }
     187       26766 :             sal_Int32 getTextRightDistance() const { return maTextRightDistance; }
     188       26766 :             sal_Int32 getTextLowerDistance() const { return maTextLowerDistance; }
     189       14298 :             sal_uInt32 getPropertiesVersion() const { return maPropertiesVersion; }
     190       25708 :             SdrTextHorzAdjust getSdrTextHorzAdjust() const { return maSdrTextHorzAdjust; }
     191       25708 :             SdrTextVertAdjust getSdrTextVertAdjust() const { return maSdrTextVertAdjust; }
     192             : 
     193             :             // compare operator
     194        9291 :             bool operator==(const ImpSdrTextAttribute& rCandidate) const
     195             :             {
     196        9291 :                 if(mpOutlinerParaObject != rCandidate.mpOutlinerParaObject)
     197             :                 {
     198        9291 :                     if(mpOutlinerParaObject && rCandidate.mpOutlinerParaObject)
     199             :                     {
     200             :                         // compares OPO and it's contents, but traditionally not the RedLining
     201             :                         // which is not seen as model, but as temporary information
     202        9291 :                         if(!(getOutlinerParaObject() == rCandidate.getOutlinerParaObject()))
     203             :                         {
     204        2142 :                             return false;
     205             :                         }
     206             : 
     207             :                         // #i102062# for primitive visualisation, the WrongList (SpellChecking)
     208             :                         // is important, too, so use isWrongListEqual since there is no WrongList
     209             :                         // comparison in the regular OutlinerParaObject compare (since it's
     210             :                         // not-persistent data)
     211       14298 :                         if(!(getOutlinerParaObject().isWrongListEqual(rCandidate.getOutlinerParaObject())))
     212             :                         {
     213           0 :                             return false;
     214             :                         }
     215             :                     }
     216             :                     else
     217             :                     {
     218             :                         // only one is zero; not equal
     219           0 :                         return false;
     220             :                     }
     221             :                 }
     222             : 
     223             :                 return (
     224        7149 :                        getSdrFormTextAttribute() == rCandidate.getSdrFormTextAttribute()
     225        7149 :                     && getTextLeftDistance() == rCandidate.getTextLeftDistance()
     226        7149 :                     && getTextUpperDistance() == rCandidate.getTextUpperDistance()
     227        7149 :                     && getTextRightDistance() == rCandidate.getTextRightDistance()
     228        7149 :                     && getTextLowerDistance() == rCandidate.getTextLowerDistance()
     229        7149 :                     && getPropertiesVersion() == rCandidate.getPropertiesVersion()
     230             : 
     231        6657 :                     && getSdrTextHorzAdjust() == rCandidate.getSdrTextHorzAdjust()
     232        6657 :                     && getSdrTextVertAdjust() == rCandidate.getSdrTextVertAdjust()
     233             : 
     234        6657 :                     && isContour() == rCandidate.isContour()
     235        6657 :                     && isFitToSize() == rCandidate.isFitToSize()
     236        6657 :                     && isAutoFit() == rCandidate.isAutoFit()
     237        6657 :                     && isHideContour() == rCandidate.isHideContour()
     238        6657 :                     && isBlink() == rCandidate.isBlink()
     239        6657 :                     && isScroll() == rCandidate.isScroll()
     240        6657 :                     && isInEditMode() == rCandidate.isInEditMode()
     241        6657 :                     && isFixedCellHeight() == rCandidate.isFixedCellHeight()
     242       13806 :                     && isWrongSpell() == rCandidate.isWrongSpell());
     243             :             }
     244             : 
     245      234747 :             static ImpSdrTextAttribute* get_global_default()
     246             :             {
     247             :                 static ImpSdrTextAttribute* pDefault = 0;
     248             : 
     249      234747 :                 if(!pDefault)
     250             :                 {
     251             :                     // use default constructor
     252         100 :                     pDefault = new ImpSdrTextAttribute();
     253             : 
     254             :                     // never delete; start with RefCount 1, not 0
     255         100 :                     pDefault->mnRefCount++;
     256             :                 }
     257             : 
     258      234747 :                 return pDefault;
     259             :             }
     260             :         };
     261             : 
     262       18469 :         SdrTextAttribute::SdrTextAttribute(
     263             :             const SdrText& rSdrText,
     264             :             const OutlinerParaObject& rOutlinerParaObject,
     265             :             XFormTextStyle eFormTextStyle,
     266             :             sal_Int32 aTextLeftDistance,
     267             :             sal_Int32 aTextUpperDistance,
     268             :             sal_Int32 aTextRightDistance,
     269             :             sal_Int32 aTextLowerDistance,
     270             :             SdrTextHorzAdjust aSdrTextHorzAdjust,
     271             :             SdrTextVertAdjust aSdrTextVertAdjust,
     272             :             bool bContour,
     273             :             bool bFitToSize,
     274             :             bool bAutoFit,
     275             :             bool bHideContour,
     276             :             bool bBlink,
     277             :             bool bScroll,
     278             :             bool bInEditMode,
     279             :             bool bFixedCellHeight,
     280             :             bool bWrongSpell)
     281             :         :   mpSdrTextAttribute(new ImpSdrTextAttribute(
     282             :                 &rSdrText, rOutlinerParaObject, eFormTextStyle, aTextLeftDistance, aTextUpperDistance,
     283             :                 aTextRightDistance, aTextLowerDistance, aSdrTextHorzAdjust, aSdrTextVertAdjust, bContour,
     284       18469 :                 bFitToSize, bAutoFit, bHideContour, bBlink, bScroll, bInEditMode, bFixedCellHeight, bWrongSpell))
     285             :         {
     286       18469 :         }
     287             : 
     288      134056 :         SdrTextAttribute::SdrTextAttribute()
     289      134056 :         :   mpSdrTextAttribute(ImpSdrTextAttribute::get_global_default())
     290             :         {
     291      134056 :             mpSdrTextAttribute->mnRefCount++;
     292      134056 :         }
     293             : 
     294      136729 :         SdrTextAttribute::SdrTextAttribute(const SdrTextAttribute& rCandidate)
     295      136729 :         :   mpSdrTextAttribute(rCandidate.mpSdrTextAttribute)
     296             :         {
     297      136729 :             mpSdrTextAttribute->mnRefCount++;
     298      136729 :         }
     299             : 
     300      288313 :         SdrTextAttribute::~SdrTextAttribute()
     301             :         {
     302      288313 :             if(mpSdrTextAttribute->mnRefCount)
     303             :             {
     304      270148 :                 mpSdrTextAttribute->mnRefCount--;
     305             :             }
     306             :             else
     307             :             {
     308       18165 :                 delete mpSdrTextAttribute;
     309             :             }
     310      288313 :         }
     311             : 
     312      100691 :         bool SdrTextAttribute::isDefault() const
     313             :         {
     314      100691 :             return mpSdrTextAttribute == ImpSdrTextAttribute::get_global_default();
     315             :         }
     316             : 
     317       73287 :         SdrTextAttribute& SdrTextAttribute::operator=(const SdrTextAttribute& rCandidate)
     318             :         {
     319       73287 :             if(rCandidate.mpSdrTextAttribute != mpSdrTextAttribute)
     320             :             {
     321       18469 :                 if(mpSdrTextAttribute->mnRefCount)
     322             :                 {
     323       18469 :                     mpSdrTextAttribute->mnRefCount--;
     324             :                 }
     325             :                 else
     326             :                 {
     327           0 :                     delete mpSdrTextAttribute;
     328             :                 }
     329             : 
     330       18469 :                 mpSdrTextAttribute = rCandidate.mpSdrTextAttribute;
     331       18469 :                 mpSdrTextAttribute->mnRefCount++;
     332             :             }
     333             : 
     334       73287 :             return *this;
     335             :         }
     336             : 
     337       48773 :         bool SdrTextAttribute::operator==(const SdrTextAttribute& rCandidate) const
     338             :         {
     339       48773 :             if(rCandidate.mpSdrTextAttribute == mpSdrTextAttribute)
     340             :             {
     341       39074 :                 return true;
     342             :             }
     343             : 
     344        9699 :             if(rCandidate.isDefault() != isDefault())
     345             :             {
     346         408 :                 return false;
     347             :             }
     348             : 
     349        9291 :             return (*rCandidate.mpSdrTextAttribute == *mpSdrTextAttribute);
     350             :         }
     351             : 
     352       12468 :         const SdrText& SdrTextAttribute::getSdrText() const
     353             :         {
     354       12468 :             return mpSdrTextAttribute->getSdrText();
     355             :         }
     356             : 
     357       12468 :         const OutlinerParaObject& SdrTextAttribute::getOutlinerParaObject() const
     358             :         {
     359       12468 :             return mpSdrTextAttribute->getOutlinerParaObject();
     360             :         }
     361             : 
     362       12466 :         bool SdrTextAttribute::isContour() const
     363             :         {
     364       12466 :             return mpSdrTextAttribute->isContour();
     365             :         }
     366             : 
     367       12466 :         bool SdrTextAttribute::isFitToSize() const
     368             :         {
     369       12466 :             return mpSdrTextAttribute->isFitToSize();
     370             :         }
     371             : 
     372       12466 :         bool SdrTextAttribute::isAutoFit() const
     373             :         {
     374       12466 :             return mpSdrTextAttribute->isAutoFit();
     375             :         }
     376             : 
     377           0 :         bool SdrTextAttribute::isHideContour() const
     378             :         {
     379           0 :             return mpSdrTextAttribute->isHideContour();
     380             :         }
     381             : 
     382       12466 :         bool SdrTextAttribute::isBlink() const
     383             :         {
     384       12466 :             return mpSdrTextAttribute->isBlink();
     385             :         }
     386             : 
     387       24862 :         bool SdrTextAttribute::isScroll() const
     388             :         {
     389       24862 :             return mpSdrTextAttribute->isScroll();
     390             :         }
     391             : 
     392       12466 :         bool SdrTextAttribute::isInEditMode() const
     393             :         {
     394       12466 :             return mpSdrTextAttribute->isInEditMode();
     395             :         }
     396             : 
     397       12394 :         bool SdrTextAttribute::isFixedCellHeight() const
     398             :         {
     399       12394 :             return mpSdrTextAttribute->isFixedCellHeight();
     400             :         }
     401             : 
     402       71999 :         const SdrFormTextAttribute& SdrTextAttribute::getSdrFormTextAttribute() const
     403             :         {
     404       71999 :             return mpSdrTextAttribute->getSdrFormTextAttribute();
     405             :         }
     406             : 
     407       12466 :         sal_Int32 SdrTextAttribute::getTextLeftDistance() const
     408             :         {
     409       12466 :             return mpSdrTextAttribute->getTextLeftDistance();
     410             :         }
     411             : 
     412       12466 :         sal_Int32 SdrTextAttribute::getTextUpperDistance() const
     413             :         {
     414       12466 :             return mpSdrTextAttribute->getTextUpperDistance();
     415             :         }
     416             : 
     417       12468 :         sal_Int32 SdrTextAttribute::getTextRightDistance() const
     418             :         {
     419       12468 :             return mpSdrTextAttribute->getTextRightDistance();
     420             :         }
     421             : 
     422       12468 :         sal_Int32 SdrTextAttribute::getTextLowerDistance() const
     423             :         {
     424       12468 :             return mpSdrTextAttribute->getTextLowerDistance();
     425             :         }
     426             : 
     427       12394 :         SdrTextHorzAdjust SdrTextAttribute::getSdrTextHorzAdjust() const
     428             :         {
     429       12394 :             return mpSdrTextAttribute->getSdrTextHorzAdjust();
     430             :         }
     431             : 
     432       12394 :         SdrTextVertAdjust SdrTextAttribute::getSdrTextVertAdjust() const
     433             :         {
     434       12394 :             return mpSdrTextAttribute->getSdrTextVertAdjust();
     435             :         }
     436             : 
     437           0 :         void SdrTextAttribute::getBlinkTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList) const
     438             :         {
     439           0 :             if(isBlink())
     440             :             {
     441           0 :                 getSdrText().GetObject().impGetBlinkTextTiming(rAnimList);
     442             :             }
     443           0 :         }
     444             : 
     445           0 :         void SdrTextAttribute::getScrollTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList, double fFrameLength, double fTextLength) const
     446             :         {
     447           0 :             if(isScroll())
     448             :             {
     449           0 :                 getSdrText().GetObject().impGetScrollTextTiming(rAnimList, fFrameLength, fTextLength);
     450             :             }
     451           0 :         }
     452             :     } // end of namespace attribute
     453         651 : } // end of namespace drawinglayer
     454             : 
     455             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10