Author: alg Date: Tue Apr 22 15:36:34 2014 New Revision: 1589174 URL: http://svn.apache.org/r1589174 Log: i71056 also create TabSpace's fill characters if used
Modified: openoffice/trunk/main/editeng/source/editeng/impedit3.cxx Modified: openoffice/trunk/main/editeng/source/editeng/impedit3.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/editeng/source/editeng/impedit3.cxx?rev=1589174&r1=1589173&r2=1589174&view=diff ============================================================================== --- openoffice/trunk/main/editeng/source/editeng/impedit3.cxx (original) +++ openoffice/trunk/main/editeng/source/editeng/impedit3.cxx Tue Apr 22 15:36:34 2014 @@ -3558,7 +3558,74 @@ void ImpEditEngine::Paint( OutputDevice* String aText; aText.Fill( (sal_uInt16)nChars, pTextPortion->GetExtraValue() ); - pOutDev->DrawStretchText( aTmpPos, pTextPortion->GetSize().Width(), aText ); + + if(bStripOnly) + { + // #71056# when converting to primitives, visualized TAB spaces need to be + // visualized. Add tab#ed text here. Alternatively a primitive especially + // representing this space and the single fill character would be possible, too. + // For now, use what we have (the DrawingText callback) + const lang::Locale aLocale(GetLocale(EditPaM(pPortion->GetNode(),nIndex + 1))); + + // get Overline color (from ((const SvxOverlineItem*)GetItem())->GetColor() in + // consequence, but also already set at pOutDev) + const Color aOverlineColor(pOutDev->GetOverlineColor()); + + // get TextLine color (from ((const SvxUnderlineItem*)GetItem())->GetColor() in + // consequence, but also already set at pOutDev) + const Color aTextLineColor(pOutDev->GetTextLineColor()); + + // get AllWidth and together with nCharWidth create DXArray using per character + // difference + const sal_Int32 nAllWidth(pTextPortion->GetSize().Width()); + const double fSingleCharDiff((double(nAllWidth) / double(nChars)) - double(nCharWidth)); + sal_Int32* pTmpDXArray = 0; + + if(fSingleCharDiff > 1.0) + { + // if more than one unit per character, create DXArray to create + // something adequate to StretchText + const double fAdvance(nCharWidth + fSingleCharDiff); + const sal_uInt32 nCount(static_cast< sal_uInt32 >(nChars)); + pTmpDXArray = new sal_Int32[nCount]; + double fPos(0.0); + + for(sal_uInt32 a(0); a < nCount; a++) + { + fPos += fAdvance; + pTmpDXArray[a] = basegfx::fround(fPos); + } + } + + // StripPortions() data callback + GetEditEnginePtr()->DrawingText( + aTmpPos, + aText, + 0, + nChars, + pTmpDXArray, + aTmpFont, + n, + nIndex, + pTextPortion->GetRightToLeft(), + 0, + 0, + false, + false, + false, // support for EOL/EOP TEXT comments + &aLocale, + aOverlineColor, + aTextLineColor); + + if(pTmpDXArray) + { + delete pTmpDXArray; + } + } + else + { + pOutDev->DrawStretchText(aTmpPos,pTextPortion->GetSize().Width(),aText); + } } } break;