Kaydet (Commit) 420aa16a authored tarafından Michael Stahl's avatar Michael Stahl

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 5913506b turned off
anti-aliasing for FontWork objects simply by creating a
temporary VclPixelProcessor2D.

Change-Id: I7f7fcbf86b0dd425f599cd8e62fce3c69a2744bb
üst dd547e4a
...@@ -62,8 +62,18 @@ namespace drawinglayer ...@@ -62,8 +62,18 @@ namespace drawinglayer
{ {
namespace processor2d 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) 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 // prepare maCurrentTransformation matrix with viewTransformation to target directly to pixels
maCurrentTransformation = rViewInformation.getObjectToViewTransformation(); maCurrentTransformation = rViewInformation.getObjectToViewTransformation();
...@@ -75,11 +85,13 @@ namespace drawinglayer ...@@ -75,11 +85,13 @@ namespace drawinglayer
// react on AntiAliasing settings // react on AntiAliasing settings
if(getOptionsDrawinglayer().IsAntiAliasing()) if(getOptionsDrawinglayer().IsAntiAliasing())
{ {
mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() | ANTIALIASING_ENABLE_B2DDRAW); mpOutputDevice->SetAntialiasing(
m_pImpl->m_nOrigAntiAliasing | ANTIALIASING_ENABLE_B2DDRAW);
} }
else else
{ {
mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); mpOutputDevice->SetAntialiasing(
m_pImpl->m_nOrigAntiAliasing & ~ANTIALIASING_ENABLE_B2DDRAW);
} }
} }
...@@ -89,7 +101,7 @@ namespace drawinglayer ...@@ -89,7 +101,7 @@ namespace drawinglayer
mpOutputDevice->Pop(); mpOutputDevice->Pop();
// restore AntiAliasing // restore AntiAliasing
mpOutputDevice->SetAntialiasing(mpOutputDevice->GetAntialiasing() & ~ANTIALIASING_ENABLE_B2DDRAW); mpOutputDevice->SetAntialiasing(m_pImpl->m_nOrigAntiAliasing);
} }
bool VclPixelProcessor2D::tryDrawPolyPolygonColorPrimitive2DDirect(const drawinglayer::primitive2d::PolyPolygonColorPrimitive2D& rSource, double fTransparency) bool VclPixelProcessor2D::tryDrawPolyPolygonColorPrimitive2DDirect(const drawinglayer::primitive2d::PolyPolygonColorPrimitive2D& rSource, double fTransparency)
......
...@@ -25,6 +25,8 @@ ...@@ -25,6 +25,8 @@
#include "vclprocessor2d.hxx" #include "vclprocessor2d.hxx"
#include <vcl/outdev.hxx> #include <vcl/outdev.hxx>
#include <boost/scoped_ptr.hpp>
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// predefines // predefines
...@@ -49,6 +51,9 @@ namespace drawinglayer ...@@ -49,6 +51,9 @@ namespace drawinglayer
class VclPixelProcessor2D : public VclProcessor2D class VclPixelProcessor2D : public VclProcessor2D
{ {
private: private:
struct Impl;
boost::scoped_ptr<Impl> m_pImpl;
protected: protected:
/* the local processor for BasePrinitive2D-Implementation based primitives, /* the local processor for BasePrinitive2D-Implementation based primitives,
called from the common process()-implementation called from the common process()-implementation
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment