LCOV - code coverage report
Current view: top level - svx/source/sdr/overlay - overlaytools.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 51 241 21.2 %
Date: 2015-06-13 12:38:46 Functions: 5 24 20.8 %
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 <sdr/overlay/overlaytools.hxx>
      22             : #include <svx/sdr/primitive2d/svx_primitivetypes2d.hxx>
      23             : #include <basegfx/matrix/b2dhommatrix.hxx>
      24             : #include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
      25             : #include <basegfx/polygon/b2dpolygon.hxx>
      26             : #include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
      27             : #include <basegfx/polygon/b2dpolygontools.hxx>
      28             : #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
      29             : #include <drawinglayer/geometry/viewinformation2d.hxx>
      30             : #include <basegfx/matrix/b2dhommatrixtools.hxx>
      31             : #include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
      32             : #include <vcl/svapp.hxx>
      33             : #include <vcl/settings.hxx>
      34             : 
      35             : 
      36             : namespace drawinglayer
      37             : {
      38             : namespace primitive2d
      39             : {
      40             : 
      41           0 : OverlayStaticRectanglePrimitive::OverlayStaticRectanglePrimitive(
      42             :                                     const basegfx::B2DPoint& rPosition,
      43             :                                     const basegfx::B2DSize& rSize,
      44             :                                     const basegfx::BColor& rStrokeColor,
      45             :                                     const basegfx::BColor& rFillColor,
      46             :                                     double fTransparence,
      47             :                                     double fRotation)
      48             :     : DiscreteMetricDependentPrimitive2D()
      49             :     , maPosition(rPosition)
      50             :     , maSize(rSize)
      51             :     , maStrokeColor(rStrokeColor)
      52             :     , maFillColor(rFillColor)
      53             :     , mfTransparence(fTransparence)
      54           0 :     , mfRotation(fRotation)
      55           0 : {}
      56             : 
      57           0 : Primitive2DSequence OverlayStaticRectanglePrimitive::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
      58             : {
      59           0 :     Primitive2DSequence aPrimitive2DSequence;
      60           0 :     const double fHalfWidth = maSize.getX() * getDiscreteUnit() / 2.0;
      61           0 :     const double fHalfHeight = maSize.getY() * getDiscreteUnit() / 2.0;
      62             : 
      63             :     basegfx::B2DRange aRange(
      64           0 :         maPosition.getX() - fHalfWidth, maPosition.getY() - fHalfHeight,
      65           0 :         maPosition.getX() + fHalfWidth, maPosition.getY() + fHalfHeight);
      66             : 
      67           0 :     if (basegfx::fTools::more(getDiscreteUnit(), 0.0) && mfTransparence <= 1.0)
      68             :     {
      69             :         basegfx::B2DPolygon aPolygon(
      70           0 :             basegfx::tools::createPolygonFromRect(aRange));
      71             : 
      72             :         // create filled primitive
      73           0 :         basegfx::B2DPolyPolygon aPolyPolygon;
      74           0 :         aPolyPolygon.append(aPolygon);
      75             : 
      76           0 :         const attribute::LineAttribute aLineAttribute(maStrokeColor, 1.0);
      77             : 
      78             :         // create data
      79             :         const Primitive2DReference aStroke(
      80           0 :             new PolyPolygonStrokePrimitive2D(aPolyPolygon, aLineAttribute));
      81             : 
      82             :         // create fill primitive
      83             :         const Primitive2DReference aFill(
      84           0 :             new PolyPolygonColorPrimitive2D(aPolyPolygon, maFillColor));
      85             : 
      86           0 :         aPrimitive2DSequence = Primitive2DSequence(2);
      87           0 :         aPrimitive2DSequence[0] = aFill;
      88           0 :         aPrimitive2DSequence[1] = aStroke;
      89             : 
      90             :         // embed filled to transparency (if used)
      91           0 :         if (mfTransparence > 0.0)
      92             :         {
      93             :             const Primitive2DReference aFillTransparent(
      94             :                 new UnifiedTransparencePrimitive2D(
      95             :                     aPrimitive2DSequence,
      96           0 :                     mfTransparence));
      97             : 
      98           0 :             aPrimitive2DSequence = Primitive2DSequence(&aFillTransparent, 1);
      99           0 :         }
     100             :     }
     101             : 
     102           0 :     return aPrimitive2DSequence;
     103             : }
     104             : 
     105           0 : bool OverlayStaticRectanglePrimitive::operator==(const BasePrimitive2D& rPrimitive) const
     106             : {
     107           0 :     if (DiscreteMetricDependentPrimitive2D::operator==(rPrimitive))
     108             :     {
     109           0 :         const OverlayStaticRectanglePrimitive& rCompare = static_cast<const OverlayStaticRectanglePrimitive&>(rPrimitive);
     110             : 
     111           0 :         return (maPosition == rCompare.maPosition
     112           0 :             && maSize == rCompare.maSize
     113           0 :             && maStrokeColor == rCompare.maStrokeColor
     114           0 :             && maFillColor == rCompare.maFillColor
     115           0 :             && mfTransparence == rCompare.mfTransparence
     116           0 :             && mfRotation == rCompare.mfRotation);
     117             :     }
     118             : 
     119           0 :     return false;
     120             : }
     121             : 
     122           0 : ImplPrimitive2DIDBlock(OverlayStaticRectanglePrimitive, PRIMITIVE2D_ID_OVERLAYRECTANGLEPRIMITIVE)
     123             : 
     124             : }} // end of namespace drawinglayer::primitive2d
     125             : 
     126             : namespace drawinglayer
     127             : {
     128             :     namespace primitive2d
     129             :     {
     130         329 :         OverlayBitmapExPrimitive::OverlayBitmapExPrimitive(
     131             :             const BitmapEx& rBitmapEx,
     132             :             const basegfx::B2DPoint& rBasePosition,
     133             :             sal_uInt16 nCenterX,
     134             :             sal_uInt16 nCenterY,
     135             :             double fShearX,
     136             :             double fRotation)
     137             :         :   DiscreteMetricDependentPrimitive2D(),
     138             :             maBitmapEx(rBitmapEx),
     139             :             maBasePosition(rBasePosition),
     140             :             mnCenterX(nCenterX),
     141             :             mnCenterY(nCenterY),
     142             :             mfShearX(fShearX),
     143         329 :             mfRotation(fRotation)
     144         329 :         {}
     145             : 
     146         329 :         Primitive2DSequence OverlayBitmapExPrimitive::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
     147             :         {
     148         329 :             Primitive2DSequence aRetval;
     149         329 :             const Size aBitmapSize(getBitmapEx().GetSizePixel());
     150             : 
     151         329 :             if(aBitmapSize.Width() && aBitmapSize.Height() && basegfx::fTools::more(getDiscreteUnit(), 0.0))
     152             :             {
     153             :                 // calculate back from internal bitmap's extreme coordinates (the edges)
     154             :                 // to logical coordinates. Only use a unified scaling value (getDiscreteUnit(),
     155             :                 // the prepared one which expresses how many logic units form a discrete unit)
     156             :                 // for this step. This primitive is to be displayed always unscaled (in it's pixel size)
     157             :                 // and unrotated, more like a marker
     158         329 :                 const double fLeft((0.0 - getCenterX()) * getDiscreteUnit());
     159         329 :                 const double fTop((0.0 - getCenterY()) * getDiscreteUnit());
     160         329 :                 const double fRight((aBitmapSize.getWidth() - getCenterX()) * getDiscreteUnit());
     161         329 :                 const double fBottom((aBitmapSize.getHeight() - getCenterY()) * getDiscreteUnit());
     162             : 
     163             :                 // create a BitmapPrimitive2D using those positions
     164         329 :                 basegfx::B2DHomMatrix aTransform;
     165             : 
     166         329 :                 aTransform.set(0, 0, fRight - fLeft);
     167         329 :                 aTransform.set(1, 1, fBottom - fTop);
     168         329 :                 aTransform.set(0, 2, fLeft);
     169         329 :                 aTransform.set(1, 2, fTop);
     170             : 
     171             :                 // if shearX is used, apply it, too
     172         329 :                 if(!basegfx::fTools::equalZero(getShearX()))
     173             :                 {
     174           0 :                     aTransform.shearX(getShearX());
     175             :                 }
     176             : 
     177             :                 // if rotation is used, apply it, too
     178         329 :                 if(!basegfx::fTools::equalZero(getRotation()))
     179             :                 {
     180           0 :                     aTransform.rotate(getRotation());
     181             :                 }
     182             : 
     183             :                 // add BasePosition
     184         329 :                 aTransform.translate(getBasePosition().getX(), getBasePosition().getY());
     185             : 
     186         658 :                 const Primitive2DReference aPrimitive(new BitmapPrimitive2D(getBitmapEx(), aTransform));
     187         658 :                 aRetval = Primitive2DSequence(&aPrimitive, 1);
     188             :             }
     189             : 
     190         329 :             return aRetval;
     191             :         }
     192             : 
     193           0 :         bool OverlayBitmapExPrimitive::operator==( const BasePrimitive2D& rPrimitive ) const
     194             :         {
     195           0 :             if(DiscreteMetricDependentPrimitive2D::operator==(rPrimitive))
     196             :             {
     197           0 :                 const OverlayBitmapExPrimitive& rCompare = static_cast< const OverlayBitmapExPrimitive& >(rPrimitive);
     198             : 
     199           0 :                 return (getBitmapEx() == rCompare.getBitmapEx()
     200           0 :                     && getBasePosition() == rCompare.getBasePosition()
     201           0 :                     && getCenterX() == rCompare.getCenterX()
     202           0 :                     && getCenterY() == rCompare.getCenterY()
     203           0 :                     && getShearX() == rCompare.getShearX()
     204           0 :                     && getRotation() == rCompare.getRotation());
     205             :             }
     206             : 
     207           0 :             return false;
     208             :         }
     209             : 
     210         164 :         ImplPrimitive2DIDBlock(OverlayBitmapExPrimitive, PRIMITIVE2D_ID_OVERLAYBITMAPEXPRIMITIVE)
     211             : 
     212             :     } // end of namespace primitive2d
     213             : } // end of namespace drawinglayer
     214             : 
     215             : 
     216             : 
     217             : namespace drawinglayer
     218             : {
     219             :     namespace primitive2d
     220             :     {
     221           0 :         OverlayCrosshairPrimitive::OverlayCrosshairPrimitive(
     222             :             const basegfx::B2DPoint& rBasePosition,
     223             :             const basegfx::BColor& rRGBColorA,
     224             :             const basegfx::BColor& rRGBColorB,
     225             :             double fDiscreteDashLength)
     226             :         :   ViewportDependentPrimitive2D(),
     227             :             maBasePosition(rBasePosition),
     228             :             maRGBColorA(rRGBColorA),
     229             :             maRGBColorB(rRGBColorB),
     230           0 :             mfDiscreteDashLength(fDiscreteDashLength)
     231           0 :         {}
     232             : 
     233           0 :         Primitive2DSequence OverlayCrosshairPrimitive::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
     234             :         {
     235             :             // use the prepared Viewport information accessible using getViewport()
     236           0 :             Primitive2DSequence aRetval;
     237             : 
     238           0 :             if(!getViewport().isEmpty())
     239             :             {
     240           0 :                 aRetval.realloc(2);
     241           0 :                 basegfx::B2DPolygon aPolygon;
     242             : 
     243           0 :                 aPolygon.append(basegfx::B2DPoint(getViewport().getMinX(), getBasePosition().getY()));
     244           0 :                 aPolygon.append(basegfx::B2DPoint(getViewport().getMaxX(), getBasePosition().getY()));
     245             : 
     246           0 :                 aRetval[0] = Primitive2DReference(
     247             :                     new PolygonMarkerPrimitive2D(
     248             :                         aPolygon,
     249             :                         getRGBColorA(),
     250             :                         getRGBColorB(),
     251           0 :                         getDiscreteDashLength()));
     252             : 
     253           0 :                 aPolygon.clear();
     254           0 :                 aPolygon.append(basegfx::B2DPoint(getBasePosition().getX(), getViewport().getMinY()));
     255           0 :                 aPolygon.append(basegfx::B2DPoint(getBasePosition().getX(), getViewport().getMaxY()));
     256             : 
     257           0 :                 aRetval[1] = Primitive2DReference(
     258             :                     new PolygonMarkerPrimitive2D(
     259             :                         aPolygon,
     260             :                         getRGBColorA(),
     261             :                         getRGBColorB(),
     262           0 :                         getDiscreteDashLength()));
     263             :             }
     264             : 
     265           0 :             return aRetval;
     266             :         }
     267             : 
     268           0 :         bool OverlayCrosshairPrimitive::operator==( const BasePrimitive2D& rPrimitive ) const
     269             :         {
     270           0 :             if(ViewportDependentPrimitive2D::operator==(rPrimitive))
     271             :             {
     272           0 :                 const OverlayCrosshairPrimitive& rCompare = static_cast< const OverlayCrosshairPrimitive& >(rPrimitive);
     273             : 
     274           0 :                 return (getBasePosition() == rCompare.getBasePosition()
     275           0 :                     && getRGBColorA() == rCompare.getRGBColorA()
     276           0 :                     && getRGBColorB() == rCompare.getRGBColorB()
     277           0 :                     && getDiscreteDashLength() == rCompare.getDiscreteDashLength());
     278             :             }
     279             : 
     280           0 :             return false;
     281             :         }
     282             : 
     283           0 :         ImplPrimitive2DIDBlock(OverlayCrosshairPrimitive, PRIMITIVE2D_ID_OVERLAYCROSSHAIRPRIMITIVE)
     284             : 
     285             :     } // end of namespace primitive2d
     286             : } // end of namespace drawinglayer
     287             : 
     288             : 
     289             : 
     290             : namespace drawinglayer
     291             : {
     292             :     namespace primitive2d
     293             :     {
     294          24 :         OverlayRectanglePrimitive::OverlayRectanglePrimitive(
     295             :             const basegfx::B2DRange& rObjectRange,
     296             :             const basegfx::BColor& rColor,
     297             :             double fTransparence,
     298             :             double fDiscreteGrow,
     299             :             double fDiscreteShrink,
     300             :             double fRotation)
     301             :         :   DiscreteMetricDependentPrimitive2D(),
     302             :             maObjectRange(rObjectRange),
     303             :             maColor(rColor),
     304             :             mfTransparence(fTransparence),
     305             :             mfDiscreteGrow(fDiscreteGrow),
     306             :             mfDiscreteShrink(fDiscreteShrink),
     307          24 :             mfRotation(fRotation)
     308          24 :         {}
     309             : 
     310          24 :         Primitive2DSequence OverlayRectanglePrimitive::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
     311             :         {
     312          24 :             Primitive2DSequence aRetval;
     313          24 :             basegfx::B2DRange aInnerRange(getObjectRange());
     314             : 
     315          24 :             if(!aInnerRange.isEmpty() && basegfx::fTools::more(getDiscreteUnit(), 0.0) && getTransparence() <= 1.0)
     316             :             {
     317          24 :                 basegfx::B2DRange aOuterRange(getObjectRange());
     318             : 
     319             :                 // grow/shrink inner/outer polygons
     320          24 :                 aOuterRange.grow(getDiscreteUnit() * getDiscreteGrow());
     321          24 :                 aInnerRange.grow(getDiscreteUnit() * -getDiscreteShrink());
     322             : 
     323             :                 // convert to polygons
     324          24 :                 const double fFullGrow(getDiscreteGrow() + getDiscreteShrink());
     325          24 :                 const double fRelativeRadiusX(fFullGrow / aOuterRange.getWidth());
     326          24 :                 const double fRelativeRadiusY(fFullGrow / aOuterRange.getHeight());
     327             :                 basegfx::B2DPolygon aOuterPolygon(
     328             :                     basegfx::tools::createPolygonFromRect(
     329             :                         aOuterRange,
     330             :                         fRelativeRadiusX,
     331          24 :                         fRelativeRadiusY));
     332             :                 basegfx::B2DPolygon aInnerPolygon(
     333             :                     basegfx::tools::createPolygonFromRect(
     334          48 :                         aInnerRange));
     335             : 
     336             :                 // apply evtl. existing rotation
     337          24 :                 if(!basegfx::fTools::equalZero(getRotation()))
     338             :                 {
     339             :                     const basegfx::B2DHomMatrix aTransform(basegfx::tools::createRotateAroundPoint(
     340           0 :                         getObjectRange().getMinX(), getObjectRange().getMinY(), getRotation()));
     341             : 
     342           0 :                     aOuterPolygon.transform(aTransform);
     343           0 :                     aInnerPolygon.transform(aTransform);
     344             :                 }
     345             : 
     346             :                 // create filled primitive
     347          48 :                 basegfx::B2DPolyPolygon aPolyPolygon;
     348             : 
     349          24 :                 aPolyPolygon.append(aOuterPolygon);
     350          24 :                 aPolyPolygon.append(aInnerPolygon);
     351             : 
     352          24 :                 if(Application::GetSettings().GetStyleSettings().GetHighContrastMode())
     353             :                 {
     354             :                     // for high contrast, use hatch
     355           0 :                     const basegfx::BColor aHighContrastLineColor(Application::GetSettings().GetStyleSettings().GetFontColor().getBColor());
     356           0 :                     const basegfx::BColor aEmptyColor(0.0, 0.0, 0.0);
     357           0 :                     const double fHatchRotation(45 * F_PI180);
     358           0 :                     const double fDiscreteHatchDistance(3.0);
     359             :                     const drawinglayer::attribute::FillHatchAttribute aFillHatchAttribute(
     360             :                         drawinglayer::attribute::HATCHSTYLE_SINGLE,
     361           0 :                         fDiscreteHatchDistance * getDiscreteUnit(),
     362           0 :                         fHatchRotation - getRotation(),
     363             :                         aHighContrastLineColor,
     364             :                         3, // same default as VCL, a minimum of three discrete units (pixels) offset
     365           0 :                         false);
     366             :                     const Primitive2DReference aHatch(
     367             :                         new PolyPolygonHatchPrimitive2D(
     368             :                             aPolyPolygon,
     369             :                             aEmptyColor,
     370           0 :                             aFillHatchAttribute));
     371             : 
     372           0 :                     aRetval = Primitive2DSequence(&aHatch, 1);
     373             :                 }
     374             :                 else
     375             :                 {
     376             :                     // create fill primitive
     377             :                     const Primitive2DReference aFill(
     378             :                         new PolyPolygonColorPrimitive2D(
     379             :                             aPolyPolygon,
     380          24 :                             getColor()));
     381             : 
     382          24 :                     aRetval = Primitive2DSequence(&aFill, 1);
     383             : 
     384             :                     // embed filled to transparency (if used)
     385          24 :                     if(getTransparence() > 0.0)
     386             :                     {
     387             :                         const Primitive2DReference aFillTransparent(
     388             :                             new UnifiedTransparencePrimitive2D(
     389             :                                 aRetval,
     390          24 :                                 getTransparence()));
     391             : 
     392          24 :                         aRetval = Primitive2DSequence(&aFillTransparent, 1);
     393          24 :                     }
     394          24 :                 }
     395             :             }
     396             : 
     397          24 :             return aRetval;
     398             :         }
     399             : 
     400           0 :         bool OverlayRectanglePrimitive::operator==( const BasePrimitive2D& rPrimitive ) const
     401             :         {
     402           0 :             if(DiscreteMetricDependentPrimitive2D::operator==(rPrimitive))
     403             :             {
     404           0 :                 const OverlayRectanglePrimitive& rCompare = static_cast< const OverlayRectanglePrimitive& >(rPrimitive);
     405             : 
     406           0 :                 return (getObjectRange() == rCompare.getObjectRange()
     407           0 :                     && getColor() == rCompare.getColor()
     408           0 :                     && getTransparence() == rCompare.getTransparence()
     409           0 :                     && getDiscreteGrow() == rCompare.getDiscreteGrow()
     410           0 :                     && getDiscreteShrink() == rCompare.getDiscreteShrink()
     411           0 :                     && getRotation() == rCompare.getRotation());
     412             :             }
     413             : 
     414           0 :             return false;
     415             :         }
     416             : 
     417           0 :         ImplPrimitive2DIDBlock(OverlayRectanglePrimitive, PRIMITIVE2D_ID_OVERLAYRECTANGLEPRIMITIVE)
     418             : 
     419             :     } // end of namespace primitive2d
     420             : } // end of namespace drawinglayer
     421             : 
     422             : 
     423             : 
     424             : namespace drawinglayer
     425             : {
     426             :     namespace primitive2d
     427             :     {
     428           0 :         OverlayHelplineStripedPrimitive::OverlayHelplineStripedPrimitive(
     429             :             const basegfx::B2DPoint& rBasePosition,
     430             :             HelplineStyle eStyle,
     431             :             const basegfx::BColor& rRGBColorA,
     432             :             const basegfx::BColor& rRGBColorB,
     433             :             double fDiscreteDashLength)
     434             :         :   ViewportDependentPrimitive2D(),
     435             :             maBasePosition(rBasePosition),
     436             :             meStyle(eStyle),
     437             :             maRGBColorA(rRGBColorA),
     438             :             maRGBColorB(rRGBColorB),
     439           0 :             mfDiscreteDashLength(fDiscreteDashLength)
     440           0 :         {}
     441             : 
     442           0 :         Primitive2DSequence OverlayHelplineStripedPrimitive::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
     443             :         {
     444             :             // use the prepared Viewport information accessible using getViewport()
     445           0 :             Primitive2DSequence aRetval;
     446             : 
     447           0 :             if(!getViewport().isEmpty())
     448             :             {
     449           0 :                 switch(getStyle())
     450             :                 {
     451             :                     case HELPLINESTYLE_VERTICAL :
     452             :                     {
     453           0 :                         aRetval.realloc(1);
     454           0 :                         basegfx::B2DPolygon aLine;
     455             : 
     456           0 :                         aLine.append(basegfx::B2DPoint(getBasePosition().getX(), getViewport().getMinY()));
     457           0 :                         aLine.append(basegfx::B2DPoint(getBasePosition().getX(), getViewport().getMaxY()));
     458             : 
     459           0 :                         aRetval[0] = Primitive2DReference(
     460             :                             new PolygonMarkerPrimitive2D(
     461             :                                 aLine,
     462             :                                 getRGBColorA(),
     463             :                                 getRGBColorB(),
     464           0 :                                 getDiscreteDashLength()));
     465           0 :                         break;
     466             :                     }
     467             : 
     468             :                     case HELPLINESTYLE_HORIZONTAL :
     469             :                     {
     470           0 :                         aRetval.realloc(1);
     471           0 :                         basegfx::B2DPolygon aLine;
     472             : 
     473           0 :                         aLine.append(basegfx::B2DPoint(getViewport().getMinX(), getBasePosition().getY()));
     474           0 :                         aLine.append(basegfx::B2DPoint(getViewport().getMaxX(), getBasePosition().getY()));
     475             : 
     476           0 :                         aRetval[0] = Primitive2DReference(
     477             :                             new PolygonMarkerPrimitive2D(
     478             :                                 aLine,
     479             :                                 getRGBColorA(),
     480             :                                 getRGBColorB(),
     481           0 :                                 getDiscreteDashLength()));
     482           0 :                         break;
     483             :                     }
     484             : 
     485             :                     default: // case HELPLINESTYLE_POINT :
     486             :                     {
     487           0 :                         const double fDiscreteUnit((rViewInformation.getInverseObjectToViewTransformation() * basegfx::B2DVector(1.0, 0.0)).getLength());
     488           0 :                         aRetval.realloc(2);
     489           0 :                         basegfx::B2DPolygon aLineA, aLineB;
     490             : 
     491           0 :                         aLineA.append(basegfx::B2DPoint(getBasePosition().getX(), getBasePosition().getY() - fDiscreteUnit));
     492           0 :                         aLineA.append(basegfx::B2DPoint(getBasePosition().getX(), getBasePosition().getY() + fDiscreteUnit));
     493             : 
     494           0 :                         aRetval[0] = Primitive2DReference(
     495             :                             new PolygonMarkerPrimitive2D(
     496             :                                 aLineA,
     497             :                                 getRGBColorA(),
     498             :                                 getRGBColorB(),
     499           0 :                                 getDiscreteDashLength()));
     500             : 
     501           0 :                         aLineB.append(basegfx::B2DPoint(getBasePosition().getX() - fDiscreteUnit, getBasePosition().getY()));
     502           0 :                         aLineB.append(basegfx::B2DPoint(getBasePosition().getX() + fDiscreteUnit, getBasePosition().getY()));
     503             : 
     504           0 :                         aRetval[1] = Primitive2DReference(
     505             :                             new PolygonMarkerPrimitive2D(
     506             :                                 aLineB,
     507             :                                 getRGBColorA(),
     508             :                                 getRGBColorB(),
     509           0 :                                 getDiscreteDashLength()));
     510             : 
     511           0 :                         break;
     512             :                     }
     513             :                 }
     514             :             }
     515             : 
     516           0 :             return aRetval;
     517             :         }
     518             : 
     519           0 :         bool OverlayHelplineStripedPrimitive::operator==( const BasePrimitive2D& rPrimitive ) const
     520             :         {
     521           0 :             if(ViewportDependentPrimitive2D::operator==(rPrimitive))
     522             :             {
     523           0 :                 const OverlayHelplineStripedPrimitive& rCompare = static_cast< const OverlayHelplineStripedPrimitive& >(rPrimitive);
     524             : 
     525           0 :                 return (getBasePosition() == rCompare.getBasePosition()
     526           0 :                     && getStyle() == rCompare.getStyle()
     527           0 :                     && getRGBColorA() == rCompare.getRGBColorA()
     528           0 :                     && getRGBColorB() == rCompare.getRGBColorB()
     529           0 :                     && getDiscreteDashLength() == rCompare.getDiscreteDashLength());
     530             :             }
     531             : 
     532           0 :             return false;
     533             :         }
     534             : 
     535           0 :         ImplPrimitive2DIDBlock(OverlayHelplineStripedPrimitive, PRIMITIVE2D_ID_OVERLAYHELPLINESTRIPEDPRIMITIVE)
     536             : 
     537             :     } // end of namespace primitive2d
     538             : } // end of namespace drawinglayer
     539             : 
     540             : 
     541             : 
     542             : namespace drawinglayer
     543             : {
     544             :     namespace primitive2d
     545             :     {
     546           0 :         OverlayRollingRectanglePrimitive::OverlayRollingRectanglePrimitive(
     547             :             const basegfx::B2DRange& aRollingRectangle,
     548             :             const basegfx::BColor& rRGBColorA,
     549             :             const basegfx::BColor& rRGBColorB,
     550             :             double fDiscreteDashLength)
     551             :         :   ViewportDependentPrimitive2D(),
     552             :             maRollingRectangle(aRollingRectangle),
     553             :             maRGBColorA(rRGBColorA),
     554             :             maRGBColorB(rRGBColorB),
     555           0 :             mfDiscreteDashLength(fDiscreteDashLength)
     556           0 :         {}
     557             : 
     558           0 :         Primitive2DSequence OverlayRollingRectanglePrimitive::create2DDecomposition(const geometry::ViewInformation2D& /*rViewInformation*/) const
     559             :         {
     560             :             // use the prepared Viewport information accessible using getViewport()
     561           0 :             Primitive2DSequence aRetval;
     562             : 
     563           0 :             if(!getViewport().isEmpty())
     564             :             {
     565           0 :                 basegfx::B2DPolygon aLine;
     566           0 :                 aRetval.realloc(8);
     567             : 
     568             :                 // Left lines
     569           0 :                 aLine.append(basegfx::B2DPoint(getViewport().getMinX(), getRollingRectangle().getMinY()));
     570           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMinX(), getRollingRectangle().getMinY()));
     571           0 :                 aRetval[0] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     572             : 
     573           0 :                 aLine.clear();
     574           0 :                 aLine.append(basegfx::B2DPoint(getViewport().getMinX(), getRollingRectangle().getMaxY()));
     575           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMinX(), getRollingRectangle().getMaxY()));
     576           0 :                 aRetval[1] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     577             : 
     578             :                 // Right lines
     579           0 :                 aLine.clear();
     580           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMaxX(), getRollingRectangle().getMinY()));
     581           0 :                 aLine.append(basegfx::B2DPoint(getViewport().getMaxX(), getRollingRectangle().getMinY()));
     582           0 :                 aRetval[2] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     583             : 
     584           0 :                 aLine.clear();
     585           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMaxX(), getRollingRectangle().getMaxY()));
     586           0 :                 aLine.append(basegfx::B2DPoint(getViewport().getMaxX(), getRollingRectangle().getMaxY()));
     587           0 :                 aRetval[3] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     588             : 
     589             :                 // Top lines
     590           0 :                 aLine.clear();
     591           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMinX(), getViewport().getMinY()));
     592           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMinX(), getRollingRectangle().getMinY()));
     593           0 :                 aRetval[4] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     594             : 
     595           0 :                 aLine.clear();
     596           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMaxX(), getViewport().getMinY()));
     597           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMaxX(), getRollingRectangle().getMinY()));
     598           0 :                 aRetval[5] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     599             : 
     600             :                 // Bottom lines
     601           0 :                 aLine.clear();
     602           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMinX(), getRollingRectangle().getMaxY()));
     603           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMinX(), getViewport().getMaxY()));
     604           0 :                 aRetval[6] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     605             : 
     606           0 :                 aLine.clear();
     607           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMaxX(), getRollingRectangle().getMaxY()));
     608           0 :                 aLine.append(basegfx::B2DPoint(getRollingRectangle().getMaxX(), getViewport().getMaxY()));
     609           0 :                 aRetval[7] = Primitive2DReference(new PolygonMarkerPrimitive2D(aLine, getRGBColorA(), getRGBColorB(), getDiscreteDashLength()));
     610             :             }
     611             : 
     612           0 :             return aRetval;
     613             :         }
     614             : 
     615           0 :         bool OverlayRollingRectanglePrimitive::operator==( const BasePrimitive2D& rPrimitive ) const
     616             :         {
     617           0 :             if(ViewportDependentPrimitive2D::operator==(rPrimitive))
     618             :             {
     619           0 :                 const OverlayRollingRectanglePrimitive& rCompare = static_cast< const OverlayRollingRectanglePrimitive& >(rPrimitive);
     620             : 
     621           0 :                 return (getRollingRectangle() == rCompare.getRollingRectangle()
     622           0 :                     && getRGBColorA() == rCompare.getRGBColorA()
     623           0 :                     && getRGBColorB() == rCompare.getRGBColorB()
     624           0 :                     && getDiscreteDashLength() == rCompare.getDiscreteDashLength());
     625             :             }
     626             : 
     627           0 :             return false;
     628             :         }
     629             : 
     630           0 :         ImplPrimitive2DIDBlock(OverlayRollingRectanglePrimitive, PRIMITIVE2D_ID_OVERLAYROLLINGRECTANGLEPRIMITIVE)
     631             : 
     632             :     } // end of namespace primitive2d
     633             : } // end of namespace drawinglayer
     634             : 
     635             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11