diff options
Diffstat (limited to 'drawinglayer/source/primitive2d/textlineprimitive2d.cxx')
-rw-r--r-- | drawinglayer/source/primitive2d/textlineprimitive2d.cxx | 376 |
1 files changed, 188 insertions, 188 deletions
diff --git a/drawinglayer/source/primitive2d/textlineprimitive2d.cxx b/drawinglayer/source/primitive2d/textlineprimitive2d.cxx index 0a8905164fcd..2238fc383d5c 100644 --- a/drawinglayer/source/primitive2d/textlineprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/textlineprimitive2d.cxx @@ -30,220 +30,220 @@ namespace drawinglayer::primitive2d { void TextLinePrimitive2D::create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& /*rViewInformation*/) const { - if(TEXT_LINE_NONE != getTextLine()) + if(TEXT_LINE_NONE == getTextLine()) + return; + + bool bDoubleLine(false); + bool bWaveLine(false); + bool bBoldLine(false); + const int* pDotDashArray(nullptr); + basegfx::B2DLineJoin eLineJoin(basegfx::B2DLineJoin::NONE); + double fOffset(getOffset()); + double fHeight(getHeight()); + + static const int aDottedArray[] = { 1, 1, 0}; // DOTTED LINE + static const int aDotDashArray[] = { 1, 1, 4, 1, 0}; // DASHDOT + static const int aDashDotDotArray[] = { 1, 1, 1, 1, 4, 1, 0}; // DASHDOTDOT + static const int aDashedArray[] = { 5, 2, 0}; // DASHED LINE + static const int aLongDashArray[] = { 7, 2, 0}; // LONGDASH + + // get decomposition + basegfx::B2DVector aScale, aTranslate; + double fRotate, fShearX; + getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX); + + switch(getTextLine()) { - bool bDoubleLine(false); - bool bWaveLine(false); - bool bBoldLine(false); - const int* pDotDashArray(nullptr); - basegfx::B2DLineJoin eLineJoin(basegfx::B2DLineJoin::NONE); - double fOffset(getOffset()); - double fHeight(getHeight()); - - static const int aDottedArray[] = { 1, 1, 0}; // DOTTED LINE - static const int aDotDashArray[] = { 1, 1, 4, 1, 0}; // DASHDOT - static const int aDashDotDotArray[] = { 1, 1, 1, 1, 4, 1, 0}; // DASHDOTDOT - static const int aDashedArray[] = { 5, 2, 0}; // DASHED LINE - static const int aLongDashArray[] = { 7, 2, 0}; // LONGDASH - - // get decomposition - basegfx::B2DVector aScale, aTranslate; - double fRotate, fShearX; - getObjectTransformation().decompose(aScale, aTranslate, fRotate, fShearX); - - switch(getTextLine()) + default: // case TEXT_LINE_SINGLE: { - default: // case TEXT_LINE_SINGLE: - { - break; - } - case TEXT_LINE_DOUBLE: - { - bDoubleLine = true; - break; - } - case TEXT_LINE_DOTTED: - { - pDotDashArray = aDottedArray; - break; - } - case TEXT_LINE_DASH: - { - pDotDashArray = aDashedArray; - break; - } - case TEXT_LINE_LONGDASH: - { - pDotDashArray = aLongDashArray; - break; - } - case TEXT_LINE_DASHDOT: - { - pDotDashArray = aDotDashArray; - break; - } - case TEXT_LINE_DASHDOTDOT: - { - pDotDashArray = aDashDotDotArray; - break; - } - case TEXT_LINE_SMALLWAVE: - { - bWaveLine = true; - break; - } - case TEXT_LINE_WAVE: - { - bWaveLine = true; - break; - } - case TEXT_LINE_DOUBLEWAVE: - { - bDoubleLine = true; - bWaveLine = true; - break; - } - case TEXT_LINE_BOLD: - { - bBoldLine = true; - break; - } - case TEXT_LINE_BOLDDOTTED: - { - bBoldLine = true; - pDotDashArray = aDottedArray; - break; - } - case TEXT_LINE_BOLDDASH: - { - bBoldLine = true; - pDotDashArray = aDashedArray; - break; - } - case TEXT_LINE_BOLDLONGDASH: - { - bBoldLine = true; - pDotDashArray = aLongDashArray; - break; - } - case TEXT_LINE_BOLDDASHDOT: - { - bBoldLine = true; - pDotDashArray = aDotDashArray; - break; - } - case TEXT_LINE_BOLDDASHDOTDOT: - { - bBoldLine = true; - pDotDashArray = aDashDotDotArray; - break; - } - case TEXT_LINE_BOLDWAVE: - { - bWaveLine = true; - bBoldLine = true; - break; - } + break; } - - if(bBoldLine) + case TEXT_LINE_DOUBLE: { - fHeight *= 2.0; + bDoubleLine = true; + break; } - - if(bDoubleLine) + case TEXT_LINE_DOTTED: { - fOffset -= 0.50 * fHeight; - fHeight *= 0.64; + pDotDashArray = aDottedArray; + break; } - - if(bWaveLine) + case TEXT_LINE_DASH: + { + pDotDashArray = aDashedArray; + break; + } + case TEXT_LINE_LONGDASH: + { + pDotDashArray = aLongDashArray; + break; + } + case TEXT_LINE_DASHDOT: + { + pDotDashArray = aDotDashArray; + break; + } + case TEXT_LINE_DASHDOTDOT: + { + pDotDashArray = aDashDotDotArray; + break; + } + case TEXT_LINE_SMALLWAVE: + { + bWaveLine = true; + break; + } + case TEXT_LINE_WAVE: + { + bWaveLine = true; + break; + } + case TEXT_LINE_DOUBLEWAVE: + { + bDoubleLine = true; + bWaveLine = true; + break; + } + case TEXT_LINE_BOLD: + { + bBoldLine = true; + break; + } + case TEXT_LINE_BOLDDOTTED: + { + bBoldLine = true; + pDotDashArray = aDottedArray; + break; + } + case TEXT_LINE_BOLDDASH: + { + bBoldLine = true; + pDotDashArray = aDashedArray; + break; + } + case TEXT_LINE_BOLDLONGDASH: + { + bBoldLine = true; + pDotDashArray = aLongDashArray; + break; + } + case TEXT_LINE_BOLDDASHDOT: + { + bBoldLine = true; + pDotDashArray = aDotDashArray; + break; + } + case TEXT_LINE_BOLDDASHDOTDOT: + { + bBoldLine = true; + pDotDashArray = aDashDotDotArray; + break; + } + case TEXT_LINE_BOLDWAVE: { - eLineJoin = basegfx::B2DLineJoin::Round; - fHeight *= 0.25; + bWaveLine = true; + bBoldLine = true; + break; } + } - // prepare Line and Stroke Attributes - const attribute::LineAttribute aLineAttribute(getLineColor(), fHeight, eLineJoin); - attribute::StrokeAttribute aStrokeAttribute; + if(bBoldLine) + { + fHeight *= 2.0; + } - if(pDotDashArray) - { - std::vector< double > aDoubleArray; + if(bDoubleLine) + { + fOffset -= 0.50 * fHeight; + fHeight *= 0.64; + } - for(const int* p = pDotDashArray; *p; ++p) - { - aDoubleArray.push_back(static_cast<double>(*p) * fHeight); - } + if(bWaveLine) + { + eLineJoin = basegfx::B2DLineJoin::Round; + fHeight *= 0.25; + } - aStrokeAttribute = attribute::StrokeAttribute(aDoubleArray); + // prepare Line and Stroke Attributes + const attribute::LineAttribute aLineAttribute(getLineColor(), fHeight, eLineJoin); + attribute::StrokeAttribute aStrokeAttribute; + + if(pDotDashArray) + { + std::vector< double > aDoubleArray; + + for(const int* p = pDotDashArray; *p; ++p) + { + aDoubleArray.push_back(static_cast<double>(*p) * fHeight); } - // create base polygon and new primitive - basegfx::B2DPolygon aLine; - Primitive2DReference aNewPrimitive; + aStrokeAttribute = attribute::StrokeAttribute(aDoubleArray); + } + + // create base polygon and new primitive + basegfx::B2DPolygon aLine; + Primitive2DReference aNewPrimitive; - aLine.append(basegfx::B2DPoint(0.0, fOffset)); - aLine.append(basegfx::B2DPoint(getWidth(), fOffset)); + aLine.append(basegfx::B2DPoint(0.0, fOffset)); + aLine.append(basegfx::B2DPoint(getWidth(), fOffset)); - const basegfx::B2DHomMatrix aUnscaledTransform( - basegfx::utils::createShearXRotateTranslateB2DHomMatrix( - fShearX, fRotate, aTranslate)); + const basegfx::B2DHomMatrix aUnscaledTransform( + basegfx::utils::createShearXRotateTranslateB2DHomMatrix( + fShearX, fRotate, aTranslate)); - aLine.transform(aUnscaledTransform); + aLine.transform(aUnscaledTransform); - if(bWaveLine) + if(bWaveLine) + { + double fWaveWidth(10.6 * fHeight); + + if(TEXT_LINE_SMALLWAVE == getTextLine()) { - double fWaveWidth(10.6 * fHeight); - - if(TEXT_LINE_SMALLWAVE == getTextLine()) - { - fWaveWidth *= 0.7; - } - else if(TEXT_LINE_WAVE == getTextLine()) - { - // extra multiply to get the same WaveWidth as with the bold version - fWaveWidth *= 2.0; - } - - aNewPrimitive = Primitive2DReference(new PolygonWavePrimitive2D(aLine, aLineAttribute, aStrokeAttribute, fWaveWidth, fWaveWidth * 0.5)); + fWaveWidth *= 0.7; } - else + else if(TEXT_LINE_WAVE == getTextLine()) { - aNewPrimitive = Primitive2DReference(new PolygonStrokePrimitive2D(aLine, aLineAttribute, aStrokeAttribute)); + // extra multiply to get the same WaveWidth as with the bold version + fWaveWidth *= 2.0; } - // add primitive - rContainer.push_back(aNewPrimitive); + aNewPrimitive = Primitive2DReference(new PolygonWavePrimitive2D(aLine, aLineAttribute, aStrokeAttribute, fWaveWidth, fWaveWidth * 0.5)); + } + else + { + aNewPrimitive = Primitive2DReference(new PolygonStrokePrimitive2D(aLine, aLineAttribute, aStrokeAttribute)); + } - if(bDoubleLine) - { - // double line, create 2nd primitive with offset using TransformPrimitive based on - // already created NewPrimitive - double fLineDist(2.3 * fHeight); - - if(bWaveLine) - { - fLineDist = 6.3 * fHeight; - } - - // move base point of text to 0.0 and de-rotate - basegfx::B2DHomMatrix aTransform(basegfx::utils::createTranslateB2DHomMatrix( - -aTranslate.getX(), -aTranslate.getY())); - aTransform.rotate(-fRotate); - - // translate in Y by offset - aTransform.translate(0.0, fLineDist); - - // move back and rotate - aTransform.rotate(fRotate); - aTransform.translate(aTranslate.getX(), aTranslate.getY()); - - // add transform primitive - const Primitive2DContainer aContent { aNewPrimitive }; - rContainer.push_back( new TransformPrimitive2D(aTransform, aContent) ); - } + // add primitive + rContainer.push_back(aNewPrimitive); + + if(!bDoubleLine) + return; + + // double line, create 2nd primitive with offset using TransformPrimitive based on + // already created NewPrimitive + double fLineDist(2.3 * fHeight); + + if(bWaveLine) + { + fLineDist = 6.3 * fHeight; } + + // move base point of text to 0.0 and de-rotate + basegfx::B2DHomMatrix aTransform(basegfx::utils::createTranslateB2DHomMatrix( + -aTranslate.getX(), -aTranslate.getY())); + aTransform.rotate(-fRotate); + + // translate in Y by offset + aTransform.translate(0.0, fLineDist); + + // move back and rotate + aTransform.rotate(fRotate); + aTransform.translate(aTranslate.getX(), aTranslate.getY()); + + // add transform primitive + const Primitive2DContainer aContent { aNewPrimitive }; + rContainer.push_back( new TransformPrimitive2D(aTransform, aContent) ); } TextLinePrimitive2D::TextLinePrimitive2D( |