summaryrefslogtreecommitdiff
path: root/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx')
-rw-r--r--drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx69
1 files changed, 59 insertions, 10 deletions
diff --git a/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx b/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx
index df4aa6a748ae..6ca69433827e 100644
--- a/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx
+++ b/drawinglayer/source/primitive2d/textdecoratedprimitive2d.cxx
@@ -503,6 +503,16 @@ namespace drawinglayer
}
else
{
+ // prepare TextLayouter
+ const bool bNoDXArray(getDXArray().empty());
+ TextLayouterDevice aTextLayouter;
+
+ if(bNoDXArray)
+ {
+ // ..but only completely when no DXArray
+ aTextLayouter.setFontAttributes(getFontAttributes(), rDecTrans.getScale().getX(), rDecTrans.getScale().getY());
+ }
+
// do iterate over single words
while(aNextWordBoundary.startPos != aNextWordBoundary.endPos)
{
@@ -512,17 +522,18 @@ namespace drawinglayer
// prepare transform for the single word
basegfx::B2DHomMatrix aNewTransform;
- double fDistance(0.0);
+ ::std::vector< double > aNewDXArray;
const bool bNewStartIsNotOldStart(nNewTextStart > getTextPosition());
- if(bNewStartIsNotOldStart)
+ if(!bNoDXArray)
{
- // needs to be moved to a new start position (get from DXArray)
- const sal_uInt32 nIndex(static_cast< sal_uInt32 >(nNewTextStart - getTextPosition()));
- fDistance = getDXArray()[nIndex - 1];
- aNewTransform.translate(fDistance, 0.0);
+ // prepare new DXArray for the single word
+ aNewDXArray = ::std::vector< double >(
+ getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextStart - getTextPosition()),
+ getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextEnd - getTextPosition()));
}
+<<<<<<< .working
aNewTransform *= rDecTrans.getB2DHomMatrix();
// prepare new DXArray for the single word
@@ -530,26 +541,64 @@ namespace drawinglayer
getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextStart - getTextPosition()),
getDXArray().begin() + static_cast< sal_uInt32 >(nNewTextEnd - getTextPosition()));
+=======
+>>>>>>> .merge-right.r266521
if(bNewStartIsNotOldStart)
{
- // DXArray values need to be corrected
- const sal_uInt32 nArraySize(aNewDXArray.size());
+ // needs to be moved to a new start position
+ double fOffset(0.0);
- for(sal_uInt32 a(0); a < nArraySize; a++)
+ if(bNoDXArray)
{
- aNewDXArray[a] -= fDistance;
+ // evaluate using TextLayouter
+ fOffset = aTextLayouter.getTextWidth(getText(), getTextPosition(), nNewTextStart);
+ }
+ else
+ {
+ // get from DXArray
+ const sal_uInt32 nIndex(static_cast< sal_uInt32 >(nNewTextStart - getTextPosition()));
+ fOffset = getDXArray()[nIndex - 1];
+ }
+
+ // apply needed offset to transformation
+ aNewTransform.translate(fOffset, 0.0);
+
+ if(!bNoDXArray)
+ {
+ // DXArray values need to be corrected with the offset, too
+ const sal_uInt32 nArraySize(aNewDXArray.size());
+
+ for(sal_uInt32 a(0); a < nArraySize; a++)
+ {
+ aNewDXArray[a] -= fOffset;
+ }
}
}
+<<<<<<< .working
// create geometry content for the single word
+=======
+
+ // add text transformation to new transformation
+ aNewTransform *= rDecTrans.getB2DHomMatrix();
+
+ // create geometry content for the single word. Do not forget
+ // to use the new transformation
+>>>>>>> .merge-right.r266521
basegfx::DecomposedB2DHomMatrixContainer aDecTrans(aNewTransform);
+<<<<<<< .working
+ impCreateGeometryContent(rTarget, aDecTrans, getText(), nNewTextStart,
+=======
+
impCreateGeometryContent(rTarget, aDecTrans, getText(), nNewTextStart,
+>>>>>>> .merge-right.r266521
nNewTextEnd - nNewTextStart, aNewDXArray, aNewFontAttributes);
// prepare next word and truncate to possibilities
aNextWordBoundary = xLocalBreakIterator->nextWord(
getText(), aNextWordBoundary.endPos, getLocale(),
::com::sun::star::i18n::WordType::ANYWORD_IGNOREWHITESPACES);
+
impCorrectTextBoundary(aNextWordBoundary);
}
}