diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-07-14 22:43:58 +0200 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2014-07-15 15:38:29 +0000 |
commit | f7005e2a21d974f0b195e950a967a09b6a0d2520 (patch) | |
tree | 09da9ba527a1b1f53fc4236dcd66edd8883a0f38 | |
parent | e662655c6afacc9c67d2381411d838e2be16d3ed (diff) |
fdo#79673 revert to old NPC for MacOSX only
Change-Id: I83cfa2f11e76e03b919216e8dd04d1121ea6afd8
Reviewed-on: https://gerrit.libreoffice.org/10316
Reviewed-by: Norbert Thiebaud <nthiebaud@gmail.com>
Reviewed-by: Tor Lillqvist <tml@collabora.com>
Tested-by: Tor Lillqvist <tml@collabora.com>
Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
Tested-by: Michael Meeks <michael.meeks@collabora.com>
-rw-r--r-- | sw/source/core/inc/txtfrm.hxx | 12 | ||||
-rw-r--r-- | sw/source/core/text/frmpaint.cxx | 3 | ||||
-rw-r--r-- | sw/source/core/text/inftxt.cxx | 20 | ||||
-rw-r--r-- | sw/source/core/text/porrst.cxx | 5 | ||||
-rw-r--r-- | sw/source/core/txtnode/fntcache.cxx | 25 |
5 files changed, 63 insertions, 2 deletions
diff --git a/sw/source/core/inc/txtfrm.hxx b/sw/source/core/inc/txtfrm.hxx index 9aaccd4940ad..66ce49a246ee 100644 --- a/sw/source/core/inc/txtfrm.hxx +++ b/sw/source/core/inc/txtfrm.hxx @@ -45,7 +45,19 @@ class SwScriptInfo; class SwViewOption; class SwWrongList; +// LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY +// Old handling of non printing character color - color is the same as current color +// Because of problems drawing glyphs on correct position in OSX, this functionallity is +// disabled on OSX. See fdo#79673 for details. +#ifdef MACOSX +#define LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY +#else +#undef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY +#endif + +#ifndef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY #define NON_PRINTING_CHARACTER_COLOR RGB_COLORDATA( 0x6A, 0xBE, 0xD3 ) +#endif /// Represents the visualization of a paragraph. class SwTxtFrm: public SwCntntFrm diff --git a/sw/source/core/text/frmpaint.cxx b/sw/source/core/text/frmpaint.cxx index 112c1486038c..cfc31377cab9 100644 --- a/sw/source/core/text/frmpaint.cxx +++ b/sw/source/core/text/frmpaint.cxx @@ -562,8 +562,9 @@ bool SwTxtFrm::PaintEmpty( const SwRect &rRect, bool bCheck ) const aDrawInf.SetFrm( this ); aDrawInf.SetFont( pFnt ); aDrawInf.SetSnapToGrid( false ); - + #ifndef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY pFnt->SetColor(NON_PRINTING_CHARACTER_COLOR); + #endif pFnt->_DrawText( aDrawInf ); } delete pClip; diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx index 1b133fb167e2..39b4afe516de 100644 --- a/sw/source/core/text/inftxt.cxx +++ b/sw/source/core/text/inftxt.cxx @@ -887,6 +887,16 @@ static void lcl_DrawSpecial( const SwTxtPaintInfo& rInf, const SwLinePortion& rP ((SwTxtPaintInfo&)rInf).SetPos( aOldPos ); } +#ifdef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY +static void lcl_DrawSpecial( const SwTxtPaintInfo& rInf, const SwLinePortion& rPor, + SwRect& rRect, sal_Unicode cChar, sal_uInt8 nOptions ) +{ + const SwFont* pOldFnt = rInf.GetFont(); + Color aColor = pOldFnt->GetColor(); + lcl_DrawSpecial(rInf, rPor, rRect, aColor, cChar, nOptions); +} +#endif + void SwTxtPaintInfo::DrawRect( const SwRect &rRect, bool bNoGraphic, bool bRetouche ) const { @@ -941,7 +951,11 @@ void SwTxtPaintInfo::DrawTab( const SwLinePortion &rPor ) const const sal_Unicode cChar = GetTxtFrm()->IsRightToLeft() ? CHAR_TAB_RTL : CHAR_TAB; const sal_uInt8 nOptions = DRAW_SPECIAL_OPTIONS_CENTER | DRAW_SPECIAL_OPTIONS_ROTATE; - lcl_DrawSpecial( *this, rPor, aRect, Color(0x6a, 0xbe, 0xd3), cChar, nOptions ); + #ifdef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY + lcl_DrawSpecial( *this, rPor, aRect, cChar, nOptions ); + #else + lcl_DrawSpecial( *this, rPor, aRect, NON_PRINTING_CHARACTER_COLOR, cChar, nOptions ); + #endif } } @@ -961,7 +975,11 @@ void SwTxtPaintInfo::DrawLineBreak( const SwLinePortion &rPor ) const CHAR_LINEBREAK_RTL : CHAR_LINEBREAK; const sal_uInt8 nOptions = 0; + #ifdef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY + lcl_DrawSpecial( *this, rPor, aRect, cChar, nOptions ); + #else lcl_DrawSpecial( *this, rPor, aRect, Color(NON_PRINTING_CHARACTER_COLOR), cChar, nOptions ); + #endif } ((SwLinePortion&)rPor).Width( nOldWidth ); diff --git a/sw/source/core/text/porrst.cxx b/sw/source/core/text/porrst.cxx index be6676ef218d..8aed6aacbf41 100644 --- a/sw/source/core/text/porrst.cxx +++ b/sw/source/core/text/porrst.cxx @@ -61,7 +61,12 @@ void SwTmpEndPortion::Paint( const SwTxtPaintInfo &rInf ) const { if( rInf.OnWin() && rInf.GetOpt().IsParagraph() ) { + #ifdef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY + const OUString aTmp( CH_PAR ); + rInf.DrawText( aTmp, *this ); + #else rInf.DrawSpecial( *this, CH_PAR, Color(NON_PRINTING_CHARACTER_COLOR) ); + #endif } } diff --git a/sw/source/core/txtnode/fntcache.cxx b/sw/source/core/txtnode/fntcache.cxx index b4a80b771d96..5b507f0d2b9a 100644 --- a/sw/source/core/txtnode/fntcache.cxx +++ b/sw/source/core/txtnode/fntcache.cxx @@ -1353,7 +1353,11 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) { const OUString* pStr = &rInf.GetText(); OUString aStr; + + #ifndef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY OUString aBulletOverlay; + #endif + bool bBullet = rInf.GetBullet(); if( bSymbol ) bBullet = false; @@ -1479,9 +1483,26 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) aStr = rInf.GetText().copy( nCopyStart, nCopyLen ); pStr = &aStr; + #ifdef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY + for (sal_Int32 i = 0; i < aStr.getLength(); ++i) + { + if (CH_BLANK == aStr[i]) + { + /* fdo#72488 Hack: try to see if the space is zero width + * and don't bother with inserting a bullet in this case. + */ + if ((i + nCopyStart + 1 >= rInf.GetLen()) || + pKernArray[i + nCopyStart] != pKernArray[ i + nCopyStart + 1]) + { + aStr = aStr.replaceAt(i, 1, OUString(CH_BULLET)); + } + } + } + #else aBulletOverlay = rInf.GetText().copy( nCopyStart, nCopyLen ); for( sal_Int32 i = 0; i < aBulletOverlay.getLength(); ++i ) + { if( CH_BLANK == aBulletOverlay[ i ] ) { /* fdo#72488 Hack: try to see if the space is zero width @@ -1501,6 +1522,8 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) { aBulletOverlay = aBulletOverlay.replaceAt(i, 1, OUString(CH_BLANK)); } + } + #endif } sal_Int32 nCnt = rInf.GetText().getLength(); @@ -1724,6 +1747,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) rInf.GetOut().DrawTextArray( aPos, *pStr, pKernArray + nOffs, nTmpIdx + nOffs , nLen - nOffs ); + #ifndef LEGACY_NON_PRINTING_CHARACTER_COLOR_FUNCTIONALITY if (bBullet) { rInf.GetOut().Push(); @@ -1747,6 +1771,7 @@ void SwFntObj::DrawText( SwDrawTextInfo &rInf ) pTmpFont->SetStrikeout(aPreviousStrikeout); rInf.GetOut().Pop(); } + #endif } } delete[] pScrArray; |