LCOV - code coverage report
Current view: top level - svx/source/sdr/attribute - sdrtextattribute.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 109 122 89.3 %
Date: 2015-06-13 12:38:46 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             : #include <rtl/instance.hxx>
      29             : 
      30             : 
      31             : namespace drawinglayer
      32             : {
      33             :     namespace attribute
      34             :     {
      35       87406 :         class ImpSdrTextAttribute
      36             :         {
      37             :         public:
      38             :             // all-text attributes. The SdrText itself and a copy
      39             :             // of the OPO
      40             :             const SdrText*                      mpSdrText;
      41             :             std::shared_ptr<OutlinerParaObject> mxOutlinerParaObject;
      42             : 
      43             :             // Set when it's a FormText; contains all FormText attributes
      44             :             SdrFormTextAttribute                maSdrFormTextAttribute;
      45             : 
      46             :             // text distances
      47             :             sal_Int32                           maTextLeftDistance;
      48             :             sal_Int32                           maTextUpperDistance;
      49             :             sal_Int32                           maTextRightDistance;
      50             :             sal_Int32                           maTextLowerDistance;
      51             : 
      52             :             // #i101556# use versioning from text attributes to detect changes
      53             :             sal_uInt32                          maPropertiesVersion;
      54             : 
      55             :             // text alignments
      56             :             SdrTextHorzAdjust                   maSdrTextHorzAdjust;
      57             :             SdrTextVertAdjust                   maSdrTextVertAdjust;
      58             : 
      59             :             // bitfield
      60             :             bool                                mbContour : 1;
      61             :             bool                                mbFitToSize : 1;
      62             :             bool                                mbAutoFit : 1;
      63             :             bool                                mbHideContour : 1;
      64             :             bool                                mbBlink : 1;
      65             :             bool                                mbScroll : 1;
      66             :             bool                                mbInEditMode : 1;
      67             :             bool                                mbFixedCellHeight : 1;
      68             :             bool                                mbWrongSpell : 1;
      69             : 
      70             :         public:
      71       29180 :             ImpSdrTextAttribute(
      72             :                 const SdrText* pSdrText,
      73             :                 const OutlinerParaObject& rOutlinerParaObject,
      74             :                 XFormTextStyle eFormTextStyle,
      75             :                 sal_Int32 aTextLeftDistance,
      76             :                 sal_Int32 aTextUpperDistance,
      77             :                 sal_Int32 aTextRightDistance,
      78             :                 sal_Int32 aTextLowerDistance,
      79             :                 SdrTextHorzAdjust aSdrTextHorzAdjust,
      80             :                 SdrTextVertAdjust aSdrTextVertAdjust,
      81             :                 bool bContour,
      82             :                 bool bFitToSize,
      83             :                 bool bAutoFit,
      84             :                 bool bHideContour,
      85             :                 bool bBlink,
      86             :                 bool bScroll,
      87             :                 bool bInEditMode,
      88             :                 bool bFixedCellHeight,
      89             :                 bool bWrongSpell)
      90             :             :   mpSdrText(pSdrText),
      91       29180 :                 mxOutlinerParaObject(new OutlinerParaObject(rOutlinerParaObject)),
      92             :                 maSdrFormTextAttribute(),
      93             :                 maTextLeftDistance(aTextLeftDistance),
      94             :                 maTextUpperDistance(aTextUpperDistance),
      95             :                 maTextRightDistance(aTextRightDistance),
      96             :                 maTextLowerDistance(aTextLowerDistance),
      97             :                 maPropertiesVersion(0),
      98             :                 maSdrTextHorzAdjust(aSdrTextHorzAdjust),
      99             :                 maSdrTextVertAdjust(aSdrTextVertAdjust),
     100             :                 mbContour(bContour),
     101             :                 mbFitToSize(bFitToSize),
     102             :                 mbAutoFit(bAutoFit),
     103             :                 mbHideContour(bHideContour),
     104             :                 mbBlink(bBlink),
     105             :                 mbScroll(bScroll),
     106             :                 mbInEditMode(bInEditMode),
     107             :                 mbFixedCellHeight(bFixedCellHeight),
     108       58360 :                 mbWrongSpell(bWrongSpell)
     109             :             {
     110       29180 :                 if(pSdrText)
     111             :                 {
     112       29180 :                     if(XFT_NONE != eFormTextStyle)
     113             :                     {
     114             :                         // text on path. Create FormText attribute
     115           0 :                         const SfxItemSet& rSet = pSdrText->GetItemSet();
     116           0 :                         maSdrFormTextAttribute = SdrFormTextAttribute(rSet);
     117             :                     }
     118             : 
     119             :                     // #i101556# init with version number to detect changes of single text
     120             :                     // attribute and/or style sheets in primitive data without having to
     121             :                     // copy that data locally (which would be better from principle)
     122       29180 :                     maPropertiesVersion = pSdrText->GetObject().GetProperties().getVersion();
     123             :                 }
     124       29180 :             }
     125             : 
     126          64 :             ImpSdrTextAttribute()
     127             :             :   mpSdrText(0),
     128             :                 maSdrFormTextAttribute(),
     129             :                 maTextLeftDistance(0),
     130             :                 maTextUpperDistance(0),
     131             :                 maTextRightDistance(0),
     132             :                 maTextLowerDistance(0),
     133             :                 maPropertiesVersion(0),
     134             :                 maSdrTextHorzAdjust(SDRTEXTHORZADJUST_LEFT),
     135             :                 maSdrTextVertAdjust(SDRTEXTVERTADJUST_TOP),
     136             :                 mbContour(false),
     137             :                 mbFitToSize(false),
     138             :                 mbAutoFit(false),
     139             :                 mbHideContour(false),
     140             :                 mbBlink(false),
     141             :                 mbScroll(false),
     142             :                 mbInEditMode(false),
     143             :                 mbFixedCellHeight(false),
     144          64 :                 mbWrongSpell(false)
     145             :             {
     146          64 :             }
     147             : 
     148             :             // data read access
     149       16854 :             const SdrText& getSdrText() const
     150             :             {
     151             :                 assert(mpSdrText && "Access to text of default version of ImpSdrTextAttribute (!)");
     152       16854 :                 return *mpSdrText;
     153             :             }
     154             : 
     155       72760 :             const OutlinerParaObject& getOutlinerParaObject() const
     156             :             {
     157             :                 assert(mxOutlinerParaObject && "Access to OutlinerParaObject of default version of ImpSdrTextAttribute (!)");
     158       72760 :                 return *mxOutlinerParaObject;
     159             :             }
     160             : 
     161       42489 :             bool isContour() const { return mbContour; }
     162       42489 :             bool isFitToSize() const { return mbFitToSize; }
     163       42489 :             bool isAutoFit() const { return mbAutoFit; }
     164       25648 :             bool isHideContour() const { return mbHideContour; }
     165       42489 :             bool isBlink() const { return mbBlink; }
     166       59275 :             bool isScroll() const { return mbScroll; }
     167       42489 :             bool isInEditMode() const { return mbInEditMode; }
     168       42411 :             bool isFixedCellHeight() const { return mbFixedCellHeight; }
     169       25638 :             bool isWrongSpell() const { return mbWrongSpell; }
     170      131416 :             const SdrFormTextAttribute& getSdrFormTextAttribute() const { return maSdrFormTextAttribute; }
     171       43017 :             sal_Int32 getTextLeftDistance() const { return maTextLeftDistance; }
     172       43005 :             sal_Int32 getTextUpperDistance() const { return maTextUpperDistance; }
     173       43018 :             sal_Int32 getTextRightDistance() const { return maTextRightDistance; }
     174       43018 :             sal_Int32 getTextLowerDistance() const { return maTextLowerDistance; }
     175       26164 :             sal_uInt32 getPropertiesVersion() const { return maPropertiesVersion; }
     176       42421 :             SdrTextHorzAdjust getSdrTextHorzAdjust() const { return maSdrTextHorzAdjust; }
     177       42421 :             SdrTextVertAdjust getSdrTextVertAdjust() const { return maSdrTextVertAdjust; }
     178             : 
     179             :             // compare operator
     180       14861 :             bool operator==(const ImpSdrTextAttribute& rCandidate) const
     181             :             {
     182       14861 :                 if (mxOutlinerParaObject.get() != rCandidate.mxOutlinerParaObject.get())
     183             :                 {
     184       14861 :                     if (mxOutlinerParaObject && rCandidate.mxOutlinerParaObject)
     185             :                     {
     186             :                         // compares OPO and it's contents, but traditionally not the RedLining
     187             :                         // which is not seen as model, but as temporary information
     188       14861 :                         if(!(getOutlinerParaObject() == rCandidate.getOutlinerParaObject()))
     189             :                         {
     190        1769 :                             return false;
     191             :                         }
     192             : 
     193             :                         // #i102062# for primitive visualisation, the WrongList (SpellChecking)
     194             :                         // is important, too, so use isWrongListEqual since there is no WrongList
     195             :                         // comparison in the regular OutlinerParaObject compare (since it's
     196             :                         // not-persistent data)
     197       13092 :                         if(!(getOutlinerParaObject().isWrongListEqual(rCandidate.getOutlinerParaObject())))
     198             :                         {
     199          10 :                             return false;
     200             :                         }
     201             :                     }
     202             :                     else
     203             :                     {
     204             :                         // only one is zero; not equal
     205           0 :                         return false;
     206             :                     }
     207             :                 }
     208             : 
     209             :                 return (
     210       13082 :                        getSdrFormTextAttribute() == rCandidate.getSdrFormTextAttribute()
     211       13082 :                     && getTextLeftDistance() == rCandidate.getTextLeftDistance()
     212       13082 :                     && getTextUpperDistance() == rCandidate.getTextUpperDistance()
     213       13082 :                     && getTextRightDistance() == rCandidate.getTextRightDistance()
     214       13082 :                     && getTextLowerDistance() == rCandidate.getTextLowerDistance()
     215       13082 :                     && getPropertiesVersion() == rCandidate.getPropertiesVersion()
     216             : 
     217       12824 :                     && getSdrTextHorzAdjust() == rCandidate.getSdrTextHorzAdjust()
     218       12824 :                     && getSdrTextVertAdjust() == rCandidate.getSdrTextVertAdjust()
     219             : 
     220       12824 :                     && isContour() == rCandidate.isContour()
     221       12824 :                     && isFitToSize() == rCandidate.isFitToSize()
     222       12824 :                     && isAutoFit() == rCandidate.isAutoFit()
     223       12824 :                     && isHideContour() == rCandidate.isHideContour()
     224       12824 :                     && isBlink() == rCandidate.isBlink()
     225       12824 :                     && isScroll() == rCandidate.isScroll()
     226       12824 :                     && isInEditMode() == rCandidate.isInEditMode()
     227       12819 :                     && isFixedCellHeight() == rCandidate.isFixedCellHeight()
     228       25901 :                     && isWrongSpell() == rCandidate.isWrongSpell());
     229             :             }
     230             :         };
     231             : 
     232             :         namespace
     233             :         {
     234             :             struct theGlobalDefault :
     235             :                 public rtl::Static< SdrTextAttribute::ImplType, theGlobalDefault > {};
     236             :         }
     237             : 
     238       29180 :         SdrTextAttribute::SdrTextAttribute(
     239             :             const SdrText& rSdrText,
     240             :             const OutlinerParaObject& rOutlinerParaObject,
     241             :             XFormTextStyle eFormTextStyle,
     242             :             sal_Int32 aTextLeftDistance,
     243             :             sal_Int32 aTextUpperDistance,
     244             :             sal_Int32 aTextRightDistance,
     245             :             sal_Int32 aTextLowerDistance,
     246             :             SdrTextHorzAdjust aSdrTextHorzAdjust,
     247             :             SdrTextVertAdjust aSdrTextVertAdjust,
     248             :             bool bContour,
     249             :             bool bFitToSize,
     250             :             bool bAutoFit,
     251             :             bool bHideContour,
     252             :             bool bBlink,
     253             :             bool bScroll,
     254             :             bool bInEditMode,
     255             :             bool bFixedCellHeight,
     256             :             bool bWrongSpell)
     257             :         :   mpSdrTextAttribute(
     258             :                 ImpSdrTextAttribute(
     259             :                     &rSdrText, rOutlinerParaObject, eFormTextStyle, aTextLeftDistance,
     260             :                     aTextUpperDistance, aTextRightDistance, aTextLowerDistance,
     261             :                     aSdrTextHorzAdjust, aSdrTextVertAdjust, bContour, bFitToSize, bAutoFit,
     262       29180 :                     bHideContour, bBlink, bScroll, bInEditMode, bFixedCellHeight, bWrongSpell))
     263             :         {
     264       29180 :         }
     265             : 
     266      173153 :         SdrTextAttribute::SdrTextAttribute()
     267      173153 :             :   mpSdrTextAttribute(theGlobalDefault::get())
     268             :         {
     269      173153 :         }
     270             : 
     271      178705 :         SdrTextAttribute::SdrTextAttribute(const SdrTextAttribute& rCandidate)
     272      178705 :         :   mpSdrTextAttribute(rCandidate.mpSdrTextAttribute)
     273             :         {
     274      178705 :         }
     275             : 
     276      380437 :         SdrTextAttribute::~SdrTextAttribute()
     277             :         {
     278      380437 :         }
     279             : 
     280      207398 :         bool SdrTextAttribute::isDefault() const
     281             :         {
     282      207398 :             return mpSdrTextAttribute.same_object(theGlobalDefault::get());
     283             :         }
     284             : 
     285       95771 :         SdrTextAttribute& SdrTextAttribute::operator=(const SdrTextAttribute& rCandidate)
     286             :         {
     287       95771 :             mpSdrTextAttribute = rCandidate.mpSdrTextAttribute;
     288       95771 :             return *this;
     289             :         }
     290             : 
     291       54636 :         bool SdrTextAttribute::operator==(const SdrTextAttribute& rCandidate) const
     292             :         {
     293             :             // tdf#87509 default attr is always != non-default attr, even with same values
     294       54636 :             if(rCandidate.isDefault() != isDefault())
     295         218 :                 return false;
     296             : 
     297       54418 :             return rCandidate.mpSdrTextAttribute == mpSdrTextAttribute;
     298             :         }
     299             : 
     300       16854 :         const SdrText& SdrTextAttribute::getSdrText() const
     301             :         {
     302       16854 :             return mpSdrTextAttribute->getSdrText();
     303             :         }
     304             : 
     305       16854 :         const OutlinerParaObject& SdrTextAttribute::getOutlinerParaObject() const
     306             :         {
     307       16854 :             return mpSdrTextAttribute->getOutlinerParaObject();
     308             :         }
     309             : 
     310       16841 :         bool SdrTextAttribute::isContour() const
     311             :         {
     312       16841 :             return mpSdrTextAttribute->isContour();
     313             :         }
     314             : 
     315       16841 :         bool SdrTextAttribute::isFitToSize() const
     316             :         {
     317       16841 :             return mpSdrTextAttribute->isFitToSize();
     318             :         }
     319             : 
     320       16841 :         bool SdrTextAttribute::isAutoFit() const
     321             :         {
     322       16841 :             return mpSdrTextAttribute->isAutoFit();
     323             :         }
     324             : 
     325           0 :         bool SdrTextAttribute::isHideContour() const
     326             :         {
     327           0 :             return mpSdrTextAttribute->isHideContour();
     328             :         }
     329             : 
     330       16841 :         bool SdrTextAttribute::isBlink() const
     331             :         {
     332       16841 :             return mpSdrTextAttribute->isBlink();
     333             :         }
     334             : 
     335       33627 :         bool SdrTextAttribute::isScroll() const
     336             :         {
     337       33627 :             return mpSdrTextAttribute->isScroll();
     338             :         }
     339             : 
     340       16841 :         bool SdrTextAttribute::isInEditMode() const
     341             :         {
     342       16841 :             return mpSdrTextAttribute->isInEditMode();
     343             :         }
     344             : 
     345       16773 :         bool SdrTextAttribute::isFixedCellHeight() const
     346             :         {
     347       16773 :             return mpSdrTextAttribute->isFixedCellHeight();
     348             :         }
     349             : 
     350      105252 :         const SdrFormTextAttribute& SdrTextAttribute::getSdrFormTextAttribute() const
     351             :         {
     352      105252 :             return mpSdrTextAttribute->getSdrFormTextAttribute();
     353             :         }
     354             : 
     355       16853 :         sal_Int32 SdrTextAttribute::getTextLeftDistance() const
     356             :         {
     357       16853 :             return mpSdrTextAttribute->getTextLeftDistance();
     358             :         }
     359             : 
     360       16841 :         sal_Int32 SdrTextAttribute::getTextUpperDistance() const
     361             :         {
     362       16841 :             return mpSdrTextAttribute->getTextUpperDistance();
     363             :         }
     364             : 
     365       16854 :         sal_Int32 SdrTextAttribute::getTextRightDistance() const
     366             :         {
     367       16854 :             return mpSdrTextAttribute->getTextRightDistance();
     368             :         }
     369             : 
     370       16854 :         sal_Int32 SdrTextAttribute::getTextLowerDistance() const
     371             :         {
     372       16854 :             return mpSdrTextAttribute->getTextLowerDistance();
     373             :         }
     374             : 
     375       16773 :         SdrTextHorzAdjust SdrTextAttribute::getSdrTextHorzAdjust() const
     376             :         {
     377       16773 :             return mpSdrTextAttribute->getSdrTextHorzAdjust();
     378             :         }
     379             : 
     380       16773 :         SdrTextVertAdjust SdrTextAttribute::getSdrTextVertAdjust() const
     381             :         {
     382       16773 :             return mpSdrTextAttribute->getSdrTextVertAdjust();
     383             :         }
     384             : 
     385           0 :         void SdrTextAttribute::getBlinkTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList) const
     386             :         {
     387           0 :             if(isBlink())
     388             :             {
     389           0 :                 getSdrText().GetObject().impGetBlinkTextTiming(rAnimList);
     390             :             }
     391           0 :         }
     392             : 
     393           0 :         void SdrTextAttribute::getScrollTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList, double fFrameLength, double fTextLength) const
     394             :         {
     395           0 :             if(isScroll())
     396             :             {
     397           0 :                 getSdrText().GetObject().impGetScrollTextTiming(rAnimList, fFrameLength, fTextLength);
     398             :             }
     399           0 :         }
     400             :     } // end of namespace attribute
     401         435 : } // end of namespace drawinglayer
     402             : 
     403             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11