summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2013-07-12 19:04:21 +0200
committerPetr Mladek <pmladek@suse.cz>2013-07-15 11:15:59 +0000
commit99cf5f9b1ca3471ee9d9b869127dbfc355418054 (patch)
tree1480d13121f8507d8ed123eff0e7cd460cc07b4c
parente7a43ee7c00b2e244ceb6218b8d342f7656736a9 (diff)
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/4872 Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org> Tested-by: Fridrich Strba <fridrich@documentfoundation.org> (cherry picked from commit 56ed1221d4d578260d9e20715d073b70a099efa4) Reviewed-on: https://gerrit.libreoffice.org/4903 Reviewed-by: David Tardon <dtardon@redhat.com> Tested-by: David Tardon <dtardon@redhat.com> Reviewed-by: Petr Mladek <pmladek@suse.cz> Tested-by: Petr Mladek <pmladek@suse.cz>
-rw-r--r--drawinglayer/source/processor2d/vclpixelprocessor2d.cxx20
-rw-r--r--include/drawinglayer/processor2d/vclpixelprocessor2d.hxx5
2 files changed, 21 insertions, 4 deletions
diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
index dde9bb5724dc..a626d60a4d6e 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)
diff --git a/include/drawinglayer/processor2d/vclpixelprocessor2d.hxx b/include/drawinglayer/processor2d/vclpixelprocessor2d.hxx
index c3003f096467..f280da72ccdc 100644
--- a/include/drawinglayer/processor2d/vclpixelprocessor2d.hxx
+++ b/include/drawinglayer/processor2d/vclpixelprocessor2d.hxx
@@ -25,6 +25,8 @@
#include <drawinglayer/processor2d/vclprocessor2d.hxx>
#include <vcl/outdev.hxx>
+#include <boost/scoped_ptr.hpp>
+
//////////////////////////////////////////////////////////////////////////////
namespace drawinglayer
@@ -40,6 +42,9 @@ namespace drawinglayer
class DRAWINGLAYER_DLLPUBLIC VclPixelProcessor2D : public VclProcessor2D
{
private:
+ struct Impl;
+ boost::scoped_ptr<Impl> m_pImpl;
+
protected:
/* the local processor for BasePrinitive2D-Implementation based primitives,
called from the common process()-implementation