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);
 }
 
 

Reply via email to