drawinglayer/source/geometry/viewinformation2d.cxx | 35 +++++++++--- include/drawinglayer/geometry/viewinformation2d.hxx | 3 - svtools/source/config/optionsdrawinglayer.cxx | 58 ++------------------ 3 files changed, 37 insertions(+), 59 deletions(-)
New commits: commit 424bdeda9fea09f0b48b5551baf872656845c7c3 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Fri Apr 28 12:32:19 2023 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri Apr 28 16:29:56 2023 +0200 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.kagan...@collabora.com> diff --git a/drawinglayer/source/geometry/viewinformation2d.cxx b/drawinglayer/source/geometry/viewinformation2d.cxx index 7e0240690a68..03089e41e36f 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,10 +353,30 @@ void ViewInformation2D::setPixelSnapHairline(bool bNew) mpViewInformation2D->setPixelSnapHairline(bNew); } -void ViewInformation2D::forwardAntiAliasing(bool bAntiAliasing) +static std::atomic<bool>& globalAntiAliasing() +{ + 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) { - bForwardedAntiAliasing = bAntiAliasing; + 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) { diff --git a/include/drawinglayer/geometry/viewinformation2d.hxx b/include/drawinglayer/geometry/viewinformation2d.hxx index e71ab08faead..8f1bd634fd58 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 0564adffa94c..a4ec26ad921d 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; - { - std::scoped_lock aGuard(gaAntiAliasMutex); - if (!gbAntiAliasingInit) - { - gbAntiAliasingInit = true; - gbAntiAliasing = officecfg::Office::Common::Drawinglayer::AntiAliasing::get(); - } - bAntiAliasing = gbAntiAliasing; - } - - bAntiAliasing = bAntiAliasing && IsAAPossibleOnThisSystem(); - - // - if (!gbAntiAliasingForwardInitial || gbAntiAliasingForwardLast != bAntiAliasing) + bool bAntiAliasing = drawinglayer::geometry::ViewInformation2D::getGlobalAntiAliasing(); + if (bAntiAliasing && !IsAAPossibleOnThisSystem()) { - gbAntiAliasingForwardInitial = true; - gbAntiAliasingForwardLast = bAntiAliasing; - drawinglayer::geometry::ViewInformation2D::forwardAntiAliasing(bAntiAliasing); + drawinglayer::geometry::ViewInformation2D::setGlobalAntiAliasing(false, true); + bAntiAliasing = false; } - 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); }