LCOV - code coverage report
Current view: top level - libreoffice/chart2/source/view/main - LabelPositionHelper.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 44 245 18.0 %
Date: 2012-12-27 Functions: 5 16 31.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 "LabelPositionHelper.hxx"
      22             : #include "PlottingPositionHelper.hxx"
      23             : #include "CommonConverters.hxx"
      24             : #include "PropertyMapper.hxx"
      25             : #include "ShapeFactory.hxx"
      26             : #include "macros.hxx"
      27             : #include "RelativeSizeHelper.hxx"
      28             : #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
      29             : #include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
      30             : 
      31             : //.............................................................................
      32             : namespace chart
      33             : {
      34             : //.............................................................................
      35             : using namespace ::com::sun::star;
      36             : using namespace ::com::sun::star::chart2;
      37             : 
      38           0 : LabelPositionHelper::LabelPositionHelper(
      39             :                     PlottingPositionHelper* pPosHelper
      40             :                     , sal_Int32 nDimensionCount
      41             :                     , const uno::Reference< drawing::XShapes >& xLogicTarget
      42             :                     , ShapeFactory* pShapeFactory )
      43             :                     : m_pPosHelper(pPosHelper)
      44             :                     , m_nDimensionCount(nDimensionCount)
      45             :                     , m_xLogicTarget(xLogicTarget)
      46           0 :                     , m_pShapeFactory(pShapeFactory)
      47             : {
      48           0 : }
      49             : 
      50           0 : LabelPositionHelper::~LabelPositionHelper()
      51             : {
      52           0 : }
      53             : 
      54           0 : awt::Point LabelPositionHelper::transformSceneToScreenPosition( const drawing::Position3D& rScenePosition3D ) const
      55             : {
      56             :     return PlottingPositionHelper::transformSceneToScreenPosition(
      57           0 :                   rScenePosition3D, m_xLogicTarget, m_pShapeFactory, m_nDimensionCount );
      58             : }
      59             : 
      60         164 : void LabelPositionHelper::changeTextAdjustment( tAnySequence& rPropValues, const tNameSequence& rPropNames, LabelAlignment eAlignment)
      61             : {
      62             :     //HorizontalAdjustment
      63             :     {
      64         164 :         drawing::TextHorizontalAdjust eHorizontalAdjust = drawing::TextHorizontalAdjust_CENTER;
      65         164 :         if( LABEL_ALIGN_RIGHT==eAlignment || LABEL_ALIGN_RIGHT_TOP==eAlignment || LABEL_ALIGN_RIGHT_BOTTOM==eAlignment )
      66           0 :             eHorizontalAdjust = drawing::TextHorizontalAdjust_LEFT;
      67         164 :         else if( LABEL_ALIGN_LEFT==eAlignment || LABEL_ALIGN_LEFT_TOP==eAlignment || LABEL_ALIGN_LEFT_BOTTOM==eAlignment )
      68          82 :             eHorizontalAdjust = drawing::TextHorizontalAdjust_RIGHT;
      69         164 :         uno::Any* pHorizontalAdjustAny = PropertyMapper::getValuePointer(rPropValues,rPropNames,C2U("TextHorizontalAdjust"));
      70         164 :         if(pHorizontalAdjustAny)
      71         164 :             *pHorizontalAdjustAny = uno::makeAny(eHorizontalAdjust);
      72             :     }
      73             : 
      74             :     //VerticalAdjustment
      75             :     {
      76         164 :         drawing::TextVerticalAdjust eVerticalAdjust = drawing::TextVerticalAdjust_CENTER;
      77         164 :         if( LABEL_ALIGN_TOP==eAlignment || LABEL_ALIGN_RIGHT_TOP==eAlignment || LABEL_ALIGN_LEFT_TOP==eAlignment )
      78           0 :             eVerticalAdjust = drawing::TextVerticalAdjust_BOTTOM;
      79         164 :         else if( LABEL_ALIGN_BOTTOM==eAlignment || LABEL_ALIGN_RIGHT_BOTTOM==eAlignment || LABEL_ALIGN_LEFT_BOTTOM==eAlignment )
      80          82 :             eVerticalAdjust = drawing::TextVerticalAdjust_TOP;
      81         164 :         uno::Any* pVerticalAdjustAny = PropertyMapper::getValuePointer(rPropValues,rPropNames,C2U("TextVerticalAdjust"));
      82         164 :         if(pVerticalAdjustAny)
      83         164 :             *pVerticalAdjustAny = uno::makeAny(eVerticalAdjust);
      84             :     }
      85         164 : }
      86             : 
      87           0 : void lcl_doDynamicFontResize( uno::Any* pAOldAndNewFontHeightAny
      88             :                           , const awt::Size& rOldReferenceSize
      89             :                           , const awt::Size& rNewReferenceSize  )
      90             : {
      91           0 :     double fOldFontHeight = 0;
      92           0 :     if( pAOldAndNewFontHeightAny && ( *pAOldAndNewFontHeightAny >>= fOldFontHeight ) )
      93             :     {
      94           0 :         double fNewFontHeight = RelativeSizeHelper::calculate( fOldFontHeight, rOldReferenceSize, rNewReferenceSize );
      95           0 :         *pAOldAndNewFontHeightAny = uno::makeAny(fNewFontHeight);
      96             :     }
      97           0 : }
      98             : 
      99         164 : void LabelPositionHelper::doDynamicFontResize( tAnySequence& rPropValues
     100             :                     , const tNameSequence& rPropNames
     101             :                     , const uno::Reference< beans::XPropertySet >& xAxisModelProps
     102             :                     , const awt::Size& rNewReferenceSize
     103             :                     )
     104             : {
     105             :     //-------------------------
     106             :     //handle dynamic font resize:
     107         164 :     awt::Size aOldReferenceSize;
     108         164 :     if( xAxisModelProps->getPropertyValue( C2U("ReferencePageSize")) >>= aOldReferenceSize )
     109             :     {
     110           0 :         uno::Any* pAOldAndNewFontHeightAny = PropertyMapper::getValuePointer( rPropValues, rPropNames, C2U("CharHeight") );
     111           0 :         lcl_doDynamicFontResize( pAOldAndNewFontHeightAny, aOldReferenceSize, rNewReferenceSize );
     112           0 :         pAOldAndNewFontHeightAny = PropertyMapper::getValuePointer( rPropValues, rPropNames, C2U("CharHeightAsian") );
     113           0 :         lcl_doDynamicFontResize( pAOldAndNewFontHeightAny, aOldReferenceSize, rNewReferenceSize );
     114           0 :         pAOldAndNewFontHeightAny = PropertyMapper::getValuePointer( rPropValues, rPropNames, C2U("CharHeightComplex") );
     115           0 :         lcl_doDynamicFontResize( pAOldAndNewFontHeightAny, aOldReferenceSize, rNewReferenceSize );
     116             :     }
     117         164 : }
     118             : 
     119             : namespace
     120             : {
     121             : 
     122         738 : void lcl_correctRotation_Left( double& rfXCorrection, double& rfYCorrection
     123             :                            , double fAnglePositiveDegree, const awt::Size& aSize, bool bRotateAroundCenter )
     124             : {
     125             :     //correct label positions for labels on a left side of something with a right centered alignment
     126         738 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     127         738 :     if( fAnglePositiveDegree==0.0 )
     128             :     {
     129             :     }
     130           0 :     else if( fAnglePositiveDegree<= 90.0 )
     131             :     {
     132           0 :         rfXCorrection = -aSize.Height*rtl::math::sin( fAnglePi )/2.0;
     133           0 :         if( bRotateAroundCenter )
     134           0 :             rfYCorrection = -aSize.Width*rtl::math::sin( fAnglePi )/2.0;
     135             :     }
     136           0 :     else if( fAnglePositiveDegree<= 180.0 )
     137             :     {
     138           0 :         double beta = fAnglePi-F_PI/2.0;
     139           0 :         rfXCorrection = -aSize.Width *rtl::math::sin( beta )
     140           0 :             -aSize.Height *rtl::math::cos( beta )/2.0;
     141           0 :         if( bRotateAroundCenter )
     142           0 :             rfYCorrection = -aSize.Width *rtl::math::cos( beta )/2.0;
     143             :         else
     144           0 :             rfYCorrection = -aSize.Width *rtl::math::cos( beta );
     145             :     }
     146           0 :     else if( fAnglePositiveDegree<= 270.0 )
     147             :     {
     148           0 :         double beta = fAnglePi - F_PI;
     149           0 :         rfXCorrection = -aSize.Width *rtl::math::cos( beta )
     150           0 :             -aSize.Height*rtl::math::sin( beta )/2.0;
     151           0 :         if( bRotateAroundCenter )
     152           0 :             rfYCorrection = aSize.Width *rtl::math::sin( beta )/2.0;
     153             :         else
     154           0 :             rfYCorrection = aSize.Width *rtl::math::sin( beta );
     155             :     }
     156             :     else
     157             :     {
     158           0 :         double beta = 2*F_PI - fAnglePi;
     159           0 :         rfXCorrection = -aSize.Height*rtl::math::sin( beta )/2.0;
     160           0 :         if( bRotateAroundCenter )
     161           0 :             rfYCorrection = aSize.Width*rtl::math::sin( beta )/2.0;
     162             :     }
     163         738 : }
     164             : 
     165           0 : void lcl_correctRotation_Right( double& rfXCorrection, double& rfYCorrection
     166             :                            , double fAnglePositiveDegree, const awt::Size& aSize, bool bRotateAroundCenter )
     167             : {
     168             :     //correct label positions for labels on a right side of something with a left centered alignment
     169           0 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     170           0 :     if( fAnglePositiveDegree== 0.0 )
     171             :     {
     172             :     }
     173           0 :     else if( fAnglePositiveDegree<= 90.0 )
     174             :     {
     175           0 :         rfXCorrection = aSize.Height*rtl::math::sin( fAnglePi )/2.0;
     176           0 :         if( bRotateAroundCenter )
     177           0 :             rfYCorrection = aSize.Width*rtl::math::sin( fAnglePi )/2.0;
     178             :     }
     179           0 :     else if( fAnglePositiveDegree<= 180.0 )
     180             :     {
     181           0 :         double beta = F_PI - fAnglePi;
     182           0 :         rfXCorrection = aSize.Width *rtl::math::cos( beta )
     183           0 :             + aSize.Height*rtl::math::sin( beta )/2.0;
     184           0 :         if( bRotateAroundCenter )
     185           0 :             rfYCorrection = aSize.Width *rtl::math::sin( beta )/2.0;
     186             :         else
     187           0 :             rfYCorrection = aSize.Width *rtl::math::sin( beta );
     188             :     }
     189           0 :     else if( fAnglePositiveDegree<= 270.0 )
     190             :     {
     191           0 :         double beta = 3*F_PI/2.0 - fAnglePi;
     192           0 :         rfXCorrection = aSize.Width *rtl::math::sin( beta )
     193           0 :                     +aSize.Height*rtl::math::cos( beta )/2.0;
     194           0 :         if( bRotateAroundCenter )
     195           0 :             rfYCorrection = -aSize.Width *rtl::math::cos( beta )/2.0;
     196             :         else
     197           0 :             rfYCorrection = -aSize.Width *rtl::math::cos( beta );
     198             :     }
     199             :     else
     200             :     {
     201           0 :         rfXCorrection  = aSize.Height*rtl::math::sin( 2*F_PI - fAnglePi )/2.0;
     202           0 :         if( bRotateAroundCenter )
     203           0 :             rfYCorrection = -aSize.Width*rtl::math::sin( 2*F_PI - fAnglePi )/2.0;
     204             :     }
     205           0 : }
     206             : 
     207           0 : void lcl_correctRotation_Top( double& rfXCorrection, double& rfYCorrection
     208             :                            , double fAnglePositiveDegree, const awt::Size& aSize, bool bRotateAroundCenter )
     209             : {
     210             :     //correct label positions for labels on top of something with a bottom centered alignment
     211           0 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     212           0 :     if( fAnglePositiveDegree== 0.0 )
     213             :     {
     214             :     }
     215           0 :     else if( fAnglePositiveDegree<= 90.0 )
     216             :     {
     217           0 :         rfXCorrection = aSize.Height*rtl::math::sin( fAnglePi )/2.0;
     218           0 :         if( !bRotateAroundCenter )
     219           0 :             rfXCorrection += aSize.Width*rtl::math::cos( fAnglePi )/2.0;
     220           0 :         rfYCorrection = -aSize.Width*rtl::math::sin( fAnglePi )/2.0;
     221             :     }
     222           0 :     else if( fAnglePositiveDegree<= 180.0 )
     223             :     {
     224           0 :         double beta = fAnglePi - F_PI/2.0;
     225           0 :         rfXCorrection = aSize.Height*rtl::math::cos( beta )/2.0;
     226           0 :         if( !bRotateAroundCenter )
     227           0 :             rfXCorrection -= aSize.Width*rtl::math::sin( beta )/2.0;
     228           0 :         rfYCorrection = -aSize.Width*rtl::math::cos( beta )/2.0
     229           0 :             - aSize.Height*rtl::math::sin( beta );
     230             :     }
     231           0 :     else if( fAnglePositiveDegree<= 270.0 )
     232             :     {
     233           0 :         double beta = fAnglePi - F_PI;
     234           0 :         rfXCorrection = -aSize.Height *rtl::math::sin( beta )/2.0;
     235           0 :         if( !bRotateAroundCenter )
     236           0 :             rfXCorrection += aSize.Width *rtl::math::cos( beta )/2.0;
     237           0 :         rfYCorrection = -aSize.Width *rtl::math::sin( beta )/2.0
     238           0 :             -aSize.Height *rtl::math::cos( beta );
     239             :     }
     240             :     else
     241             :     {
     242           0 :         rfXCorrection = aSize.Height*rtl::math::sin( fAnglePi )/2.0;
     243           0 :         if( !bRotateAroundCenter )
     244           0 :             rfXCorrection -= aSize.Width*rtl::math::cos( fAnglePi )/2.0;
     245           0 :         rfYCorrection = aSize.Width*rtl::math::sin( fAnglePi )/2.0;
     246             :     }
     247           0 : }
     248             : 
     249         492 : void lcl_correctRotation_Bottom( double& rfXCorrection, double& rfYCorrection
     250             :                            , double fAnglePositiveDegree, const awt::Size& aSize, bool bRotateAroundCenter )
     251             : {
     252             :     //correct label positions for labels below something with a top centered alignment
     253         492 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     254         492 :     if( fAnglePositiveDegree==0.0 )
     255             :     {
     256             :     }
     257           0 :     else if( fAnglePositiveDegree<= 90.0 )
     258             :     {
     259           0 :         rfXCorrection = -aSize.Height*rtl::math::sin( fAnglePi )/2.0;
     260           0 :         if( !bRotateAroundCenter )
     261           0 :             rfXCorrection -= aSize.Width *rtl::math::cos( fAnglePi )/2.0;
     262           0 :         rfYCorrection = aSize.Width*rtl::math::sin( fAnglePi )/2.0;
     263             :     }
     264           0 :     else if( fAnglePositiveDegree<= 180.0 )
     265             :     {
     266           0 :         double beta = fAnglePi-F_PI/2.0;
     267           0 :         rfXCorrection = -aSize.Height*rtl::math::cos( beta )/2.0;
     268           0 :         if( !bRotateAroundCenter )
     269           0 :             rfXCorrection += aSize.Width *rtl::math::sin( beta )/2.0;
     270           0 :         rfYCorrection = aSize.Width *rtl::math::cos( beta )/2.0
     271           0 :             +aSize.Height*rtl::math::sin( beta );
     272             :     }
     273           0 :     else if( fAnglePositiveDegree<= 270.0 )
     274             :     {
     275           0 :         double beta = 3*F_PI/2.0 - fAnglePi;
     276           0 :         rfXCorrection = aSize.Height*rtl::math::cos( beta )/2.0;
     277           0 :         if( !bRotateAroundCenter )
     278           0 :             rfXCorrection -= aSize.Width *rtl::math::sin( beta )/2.0;
     279           0 :         rfYCorrection = aSize.Height*rtl::math::sin( beta )
     280           0 :                         +aSize.Width*rtl::math::cos( beta )/2.0;
     281             :     }
     282             :     else
     283             :     {
     284           0 :         double beta = 2*F_PI - fAnglePi;
     285           0 :         rfXCorrection = aSize.Height*rtl::math::sin( beta )/2.0;
     286           0 :         if( !bRotateAroundCenter )
     287           0 :             rfXCorrection += aSize.Width*rtl::math::cos( beta )/2.0;
     288           0 :         rfYCorrection = aSize.Width*rtl::math::sin( beta )/2.0;
     289             :     }
     290         492 : }
     291             : 
     292           0 : void lcl_correctRotation_Left_Top( double& rfXCorrection, double& rfYCorrection
     293             :                            , double fAnglePositiveDegree, const awt::Size& aSize )
     294             : {
     295             :     //correct position for labels at the left top corner of something with a bottom right alignment
     296           0 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     297           0 :     if( fAnglePositiveDegree==0.0 )
     298             :     {
     299             :     }
     300           0 :     else if( fAnglePositiveDegree<= 90.0 )
     301             :     {
     302           0 :         rfYCorrection = -aSize.Width*rtl::math::sin( fAnglePi );
     303             :     }
     304           0 :     else if( fAnglePositiveDegree<= 180.0 )
     305             :     {
     306           0 :         double beta = fAnglePi-F_PI/2.0;
     307           0 :         rfXCorrection = -aSize.Width*rtl::math::sin( beta );
     308           0 :         rfYCorrection = -aSize.Height*rtl::math::sin( beta )
     309           0 :                         -aSize.Width*rtl::math::cos( beta );
     310             :     }
     311           0 :     else if( fAnglePositiveDegree<= 270.0 )
     312             :     {
     313           0 :         double beta = 3*F_PI/2.0 - fAnglePi;
     314           0 :         rfXCorrection = -aSize.Height*rtl::math::cos( beta )
     315           0 :                         -aSize.Width*rtl::math::sin( beta );
     316           0 :         rfYCorrection = -aSize.Height*rtl::math::sin( beta );
     317             :     }
     318             :     else
     319             :     {
     320           0 :         rfXCorrection = aSize.Height*rtl::math::sin( fAnglePi );
     321             :     }
     322           0 : }
     323             : 
     324           0 : void lcl_correctRotation_Left_Bottom( double& rfXCorrection, double& rfYCorrection
     325             :                            , double fAnglePositiveDegree, const awt::Size& aSize )
     326             : {
     327             :     //correct position for labels at the left bottom corner of something with a top right alignment
     328           0 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     329           0 :     if( fAnglePositiveDegree==0.0 )
     330             :     {
     331             :     }
     332           0 :     else if( fAnglePositiveDegree<= 90.0 )
     333             :     {
     334           0 :         rfXCorrection = -aSize.Height*rtl::math::sin( fAnglePi );
     335             :     }
     336           0 :     else if( fAnglePositiveDegree<= 180.0 )
     337             :     {
     338           0 :         double beta = fAnglePi-F_PI/2.0;
     339           0 :         rfXCorrection = -aSize.Width*rtl::math::sin( beta )
     340           0 :                         -aSize.Height*rtl::math::cos( beta );;
     341           0 :         rfYCorrection = aSize.Height*rtl::math::sin( beta );
     342             :     }
     343           0 :     else if( fAnglePositiveDegree<= 270.0 )
     344             :     {
     345           0 :         double beta = 3*F_PI/2.0 - fAnglePi;
     346           0 :         rfXCorrection = -aSize.Width*rtl::math::sin( beta );
     347           0 :         rfYCorrection = aSize.Width*rtl::math::cos( beta )
     348           0 :                         +aSize.Height*rtl::math::sin( beta );
     349             :     }
     350             :     else
     351             :     {
     352           0 :         rfYCorrection = -aSize.Width*rtl::math::sin( fAnglePi );
     353             :     }
     354           0 : }
     355             : 
     356           0 : void lcl_correctRotation_Right_Top( double& rfXCorrection, double& rfYCorrection
     357             :                            , double fAnglePositiveDegree, const awt::Size& aSize )
     358             : {
     359             :     //correct position for labels at the right top corner of something with a bottom left alignment
     360           0 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     361           0 :     if( fAnglePositiveDegree==0.0 )
     362             :     {
     363             :     }
     364           0 :     else if( fAnglePositiveDegree<= 90.0 )
     365             :     {
     366           0 :         rfXCorrection = aSize.Height*rtl::math::sin( fAnglePi );
     367             :     }
     368           0 :     else if( fAnglePositiveDegree<= 180.0 )
     369             :     {
     370           0 :         double beta = fAnglePi-F_PI/2.0;
     371           0 :         rfXCorrection = aSize.Width*rtl::math::sin( beta )
     372           0 :                         +aSize.Height*rtl::math::cos( beta );
     373           0 :         rfYCorrection = -aSize.Height*rtl::math::sin( beta );
     374             :     }
     375           0 :     else if( fAnglePositiveDegree<= 270.0 )
     376             :     {
     377           0 :         double beta = 3*F_PI/2.0 - fAnglePi;
     378           0 :         rfXCorrection = aSize.Width*rtl::math::sin( beta );
     379           0 :         rfYCorrection = -aSize.Width*rtl::math::cos( beta )
     380           0 :                         -aSize.Height*rtl::math::sin( beta );
     381             :     }
     382             :     else
     383             :     {
     384           0 :         rfYCorrection = aSize.Width*rtl::math::sin( fAnglePi );
     385             :     }
     386           0 : }
     387             : 
     388           0 : void lcl_correctRotation_Right_Bottom( double& rfXCorrection, double& rfYCorrection
     389             :                            , double fAnglePositiveDegree, const awt::Size& aSize )
     390             : {
     391             :     //correct position for labels at the right bottom corner of something with a top left alignment
     392           0 :     double fAnglePi = fAnglePositiveDegree*F_PI/180.0;
     393           0 :     if( fAnglePositiveDegree==0.0 )
     394             :     {
     395             :     }
     396           0 :     else if( fAnglePositiveDegree<= 90.0 )
     397             :     {
     398           0 :         rfYCorrection = aSize.Width*rtl::math::sin( fAnglePi );
     399             :     }
     400           0 :     else if( fAnglePositiveDegree<= 180.0 )
     401             :     {
     402           0 :         double beta = fAnglePi-F_PI/2.0;
     403           0 :         rfXCorrection = aSize.Width*rtl::math::sin( beta );
     404           0 :         rfYCorrection = aSize.Height*rtl::math::sin( beta )
     405           0 :                         +aSize.Width*rtl::math::cos( beta );
     406             :     }
     407           0 :     else if( fAnglePositiveDegree<= 270.0 )
     408             :     {
     409           0 :         double beta = 3*F_PI/2.0 - fAnglePi;
     410           0 :         rfXCorrection = aSize.Height*rtl::math::cos( beta )
     411           0 :                         +aSize.Width*rtl::math::sin( beta );
     412           0 :         rfYCorrection = aSize.Height*rtl::math::sin( beta );
     413             :     }
     414             :     else
     415             :     {
     416           0 :         rfXCorrection = -aSize.Height*rtl::math::sin( fAnglePi );
     417             :     }
     418           0 : }
     419             : 
     420             : }//end anonymous namespace
     421             : 
     422        1230 : void LabelPositionHelper::correctPositionForRotation( const uno::Reference< drawing::XShape >& xShape2DText
     423             :                      , LabelAlignment eLabelAlignment, const double fRotationAngle, bool bRotateAroundCenter )
     424             : {
     425        1230 :     if( !xShape2DText.is() )
     426        1230 :         return;
     427             : 
     428        1230 :     awt::Point aOldPos = xShape2DText->getPosition();
     429        1230 :     awt::Size  aSize   = xShape2DText->getSize();
     430             : 
     431        1230 :     double fYCorrection = 0.0;
     432        1230 :     double fXCorrection  = 0.0;
     433             : 
     434        1230 :     double fAnglePositiveDegree = fRotationAngle;
     435        2460 :     while(fAnglePositiveDegree<0.0)
     436           0 :         fAnglePositiveDegree+=360.0;
     437             : 
     438        1230 :     switch(eLabelAlignment)
     439             :     {
     440             :         case LABEL_ALIGN_LEFT:
     441         738 :             lcl_correctRotation_Left( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize, bRotateAroundCenter );
     442         738 :             break;
     443             :         case LABEL_ALIGN_RIGHT:
     444           0 :             lcl_correctRotation_Right( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize, bRotateAroundCenter );
     445           0 :             break;
     446             :         case LABEL_ALIGN_TOP:
     447           0 :             lcl_correctRotation_Top( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize, bRotateAroundCenter );
     448           0 :             break;
     449             :         case LABEL_ALIGN_BOTTOM:
     450         492 :             lcl_correctRotation_Bottom( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize, bRotateAroundCenter );
     451         492 :             break;
     452             :         case LABEL_ALIGN_LEFT_TOP:
     453           0 :             lcl_correctRotation_Left_Top( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize );
     454           0 :             break;
     455             :         case LABEL_ALIGN_LEFT_BOTTOM:
     456           0 :             lcl_correctRotation_Left_Bottom( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize );
     457           0 :             break;
     458             :         case LABEL_ALIGN_RIGHT_TOP:
     459           0 :             lcl_correctRotation_Right_Top( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize );
     460           0 :             break;
     461             :         case LABEL_ALIGN_RIGHT_BOTTOM:
     462           0 :             lcl_correctRotation_Right_Bottom( fXCorrection, fYCorrection, fAnglePositiveDegree, aSize );
     463           0 :             break;
     464             :         default: //LABEL_ALIGN_CENTER
     465           0 :             break;
     466             :     }
     467             : 
     468        1230 :     xShape2DText->setPosition( awt::Point(
     469             :           static_cast<sal_Int32>(aOldPos.X + fXCorrection  )
     470        1230 :         , static_cast<sal_Int32>(aOldPos.Y + fYCorrection ) ) );
     471             : }
     472             : 
     473             : //.............................................................................
     474             : } //namespace chart
     475             : //.............................................................................
     476             : 
     477             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10