Move all handling of AA allowing from svt to drawinglayer
Commit 444bf8710d5da7b584fbcb94693e4ed8d2e29297 (Update handling of
AntiAliasing settings and processor2d, 2022-11-08) moved the actual
variable holding the AA state to drawinglayer, which introduced a
duplication of the information.
This moves all the handling from svt to drawinglayer, so that svt
functions only use respective drawinglayer functions. Well, almost:
the IsAAPossibleOnThisSystem function needs vcl, so stays in svt.
Change-Id: I887307fbca1ca0cff1f5f32446e3599817099c3f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151163
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
diff --git a/drawinglayer/source/geometry/viewinformation2d.cxx b/drawinglayer/source/geometry/viewinformation2d.cxx
index 7e02406..03089e4 100644
--- a/drawinglayer/source/geometry/viewinformation2d.cxx
+++ b/drawinglayer/source/geometry/viewinformation2d.cxx
@@ -25,8 +25,11 @@
#include <com/sun/star/drawing/XDrawPage.hpp>
#include <com/sun/star/geometry/AffineMatrix2D.hpp>
#include <com/sun/star/geometry/RealRectangle2D.hpp>
#include <o3tl/temporary.hxx>
#include <officecfg/Office/Common.hxx>
#include <unotools/configmgr.hxx>
#include <atomic>
#include <utility>
using namespace com::sun::star;
@@ -48,7 +51,6 @@ constexpr OUStringLiteral g_PropertyName_PixelSnapHairline = u"PixelSnapHairline
namespace
{
bool bForwardsAreInitialized(false);
bool bForwardedAntiAliasing(true);
bool bForwardPixelSnapHairline(true);
}
@@ -105,8 +107,8 @@ public:
, mxVisualizedPage()
, mfViewTime(0.0)
, mbReducedDisplayQuality(false)
, mbUseAntiAliasing(bForwardedAntiAliasing)
, mbPixelSnapHairline(bForwardedAntiAliasing && bForwardPixelSnapHairline)
, mbUseAntiAliasing(ViewInformation2D::getGlobalAntiAliasing())
, mbPixelSnapHairline(mbUseAntiAliasing && bForwardPixelSnapHairline)
{
}
@@ -227,13 +229,12 @@ ViewInformation2D::ViewInformation2D()
bForwardsAreInitialized = true;
if (!utl::ConfigManager::IsFuzzing())
{
bForwardedAntiAliasing = officecfg::Office::Common::Drawinglayer::AntiAliasing::get();
bForwardPixelSnapHairline
= officecfg::Office::Common::Drawinglayer::SnapHorVerLinesToDiscrete::get();
}
}
setUseAntiAliasing(bForwardedAntiAliasing);
setUseAntiAliasing(ViewInformation2D::getGlobalAntiAliasing());
setPixelSnapHairline(bForwardPixelSnapHairline);
}
@@ -352,11 +353,31 @@ void ViewInformation2D::setPixelSnapHairline(bool bNew)
mpViewInformation2D->setPixelSnapHairline(bNew);
}
void ViewInformation2D::forwardAntiAliasing(bool bAntiAliasing)
static std::atomic<bool>& globalAntiAliasing()
{
bForwardedAntiAliasing = bAntiAliasing;
static std::atomic<bool> g_GlobalAntiAliasing
= utl::ConfigManager::IsFuzzing()
|| officecfg::Office::Common::Drawinglayer::AntiAliasing::get();
return g_GlobalAntiAliasing;
}
/**
* Some code like to turn this stuff on and off during a drawing operation
* so it can "tunnel" information down through several layers,
* so we don't want to actually do a config write all the time.
*/
void ViewInformation2D::setGlobalAntiAliasing(bool bAntiAliasing, bool bTemporary)
{
if (globalAntiAliasing().compare_exchange_strong(o3tl::temporary(!bAntiAliasing), bAntiAliasing)
&& !bTemporary)
{
auto batch = comphelper::ConfigurationChanges::create();
officecfg::Office::Common::Drawinglayer::AntiAliasing::set(bAntiAliasing, batch);
batch->commit();
}
}
bool ViewInformation2D::getGlobalAntiAliasing() { return globalAntiAliasing(); }
void ViewInformation2D::forwardPixelSnapHairline(bool bPixelSnapHairline)
{
bForwardPixelSnapHairline = bPixelSnapHairline;
diff --git a/include/drawinglayer/geometry/viewinformation2d.hxx b/include/drawinglayer/geometry/viewinformation2d.hxx
index e71ab08..8f1bd63 100644
--- a/include/drawinglayer/geometry/viewinformation2d.hxx
+++ b/include/drawinglayer/geometry/viewinformation2d.hxx
@@ -159,7 +159,8 @@ public:
bool getPixelSnapHairline() const;
void setPixelSnapHairline(bool bNew);
static void forwardAntiAliasing(bool bAntiAliasing);
static void setGlobalAntiAliasing(bool bAntiAliasing, bool bTemporary);
static bool getGlobalAntiAliasing();
static void forwardPixelSnapHairline(bool bPixelSnapHairline);
};
diff --git a/svtools/source/config/optionsdrawinglayer.cxx b/svtools/source/config/optionsdrawinglayer.cxx
index 0564adf..a4ec26a 100644
--- a/svtools/source/config/optionsdrawinglayer.cxx
+++ b/svtools/source/config/optionsdrawinglayer.cxx
@@ -119,53 +119,25 @@ sal_uInt32 GetMaximumPaperBottomMargin()
return officecfg::Office::Common::Drawinglayer::MaximumPaperBottomMargin::get();
}
static std::mutex gaAntiAliasMutex;
static bool gbAntiAliasingInit = false;
static bool gbAntiAliasing = false;
static bool gbAllowAAInit = false;
static bool gbAllowAA = false;
static bool gbAntiAliasingForwardInitial(false);
static bool gbAntiAliasingForwardLast(true);
static bool gbPixelSnapHairlineForwardInitial(false);
static bool gbPixelSnapHairlineForwardLast(true);
bool IsAAPossibleOnThisSystem()
{
std::scoped_lock aGuard(gaAntiAliasMutex);
if (!gbAllowAAInit)
{
gbAllowAAInit = true;
gbAllowAA = Application::GetDefaultDevice()->SupportsOperation( OutDevSupportType::TransparentRect );
}
static const bool gbAllowAA
= Application::GetDefaultDevice()->SupportsOperation(OutDevSupportType::TransparentRect);
return gbAllowAA;
}
bool IsAntiAliasing()
{
bool bAntiAliasing;
bool bAntiAliasing = drawinglayer::geometry::ViewInformation2D::getGlobalAntiAliasing();
if (bAntiAliasing && !IsAAPossibleOnThisSystem())
{
std::scoped_lock aGuard(gaAntiAliasMutex);
if (!gbAntiAliasingInit)
{
gbAntiAliasingInit = true;
gbAntiAliasing = officecfg::Office::Common::Drawinglayer::AntiAliasing::get();
}
bAntiAliasing = gbAntiAliasing;
drawinglayer::geometry::ViewInformation2D::setGlobalAntiAliasing(false, true);
bAntiAliasing = false;
}
bAntiAliasing = bAntiAliasing && IsAAPossibleOnThisSystem();
//
if (!gbAntiAliasingForwardInitial || gbAntiAliasingForwardLast != bAntiAliasing)
{
gbAntiAliasingForwardInitial = true;
gbAntiAliasingForwardLast = bAntiAliasing;
drawinglayer::geometry::ViewInformation2D::forwardAntiAliasing(bAntiAliasing);
}
return bAntiAliasing;
}
@@ -176,23 +148,7 @@ bool IsAntiAliasing()
*/
void SetAntiAliasing( bool bOn, bool bTemporary )
{
std::scoped_lock aGuard(gaAntiAliasMutex);
if (!bTemporary)
{
std::shared_ptr<comphelper::ConfigurationChanges> batch =
comphelper::ConfigurationChanges::create();
officecfg::Office::Common::Drawinglayer::AntiAliasing::set(bOn, batch);
batch->commit();
}
if (!gbAntiAliasingForwardInitial || gbAntiAliasingForwardLast != bOn)
{
gbAntiAliasingForwardInitial = true;
gbAntiAliasingForwardLast = bOn;
drawinglayer::geometry::ViewInformation2D::forwardAntiAliasing(bOn);
}
gbAntiAliasing = bOn;
drawinglayer::geometry::ViewInformation2D::setGlobalAntiAliasing(bOn, bTemporary);
}