diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-07-12 19:04:21 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-08-14 11:18:33 +0000 |
commit | cc8f9f46f08a576f5c6a7e1538c1d9a21cc029ac (patch) | |
tree | a683fe8edd9c9d8e49f5eb485a31eb27fe587c38 /drawinglayer/source | |
parent | a0e98a12f8979286f2418606cfa4f75fcbc63b6e (diff) |
fdo#51688 fdo#66745: drawinglayer: properly restore anti-aliasing mode
VclPixelProcessor2D: the constructor changes the anti-aliasing mode of
the given output device, and the destructor restores a hard-coded mode
instead of what was there before.
Due to this commit 5913506b2193e93ca2767ab7365ab2e76ed7848f turned off
anti-aliasing for FontWork objects simply by creating a
temporary VclPixelProcessor2D.
Change-Id: I7f7fcbf86b0dd425f599cd8e62fce3c69a2744bb
(cherry picked from commit 420aa16af0bbab4bdef80ceeb8d44cabe65840e0)
Reviewed-on: https://gerrit.libreoffice.org/5393
Reviewed-by: Tor Lillqvist <tml@iki.fi>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'drawinglayer/source')
-rw-r--r-- | drawinglayer/source/processor2d/vclpixelprocessor2d.cxx | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx index 87c76e202b8a..2e0a6cdd11df 100644 --- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx @@ -62,8 +62,18 @@ namespace drawinglayer { namespace processor2d { + struct VclPixelProcessor2D::Impl + { + sal_uInt16 m_nOrigAntiAliasing; + + explicit Impl(OutputDevice const& rOutDev) + : m_nOrigAntiAliasing(rOutDev.GetAntialiasing()) + { } + }; + VclPixelProcessor2D::VclPixelProcessor2D(const geometry::ViewInformation2D& rViewInformation, OutputDevice& rOutDev) - : VclProcessor2D(rViewInformation, rOutDev) + : VclProcessor2D(rViewInformation, rOutDev) + , m_pImpl(new Impl(rOutDev)) { // prepare maCurrentTransformation matrix with viewTransformation to target directly to pixels maCurrentTransformation = rViewInformation.getObjectToViewTransformation(); @@ -75,11 +85,13 @@ namespace drawinglayer // react on AntiAliasing settings if(getOptionsDrawinglayer().IsAntiAliasing()) { - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() | ANTIALIASING_ENABLE_B2DDRAW); + mpOutputDevice->SetAntialiasing( + m_pImpl->m_nOrigAntiAliasing | ANTIALIASING_ENABLE_B2DDRAW); } else { - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); + mpOutputDevice->SetAntialiasing( + m_pImpl->m_nOrigAntiAliasing & ~ANTIALIASING_ENABLE_B2DDRAW); } } @@ -89,7 +101,7 @@ namespace drawinglayer mpOutputDevice->Pop(); // restore AntiAliasing - mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); + mpOutputDevice->SetAntialiasing(m_pImpl->m_nOrigAntiAliasing); } void VclPixelProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate) |