From 57ee7deddd0934dab58199cb1d0b95439e2ba6b3 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 26 Jul 2021 11:32:15 +0200 Subject: UBSAN fix after commit 28993c0a8d8628c650b661767fd8ab2228c507d9 Author: Noel Grandin Date: Sun Jul 25 15:05:51 2021 +0200 use officecfg for drawing options I had the IsAAPossibleOnThisSystem() check inverted, and I didn't quite translate the existing IsAntiAliasing()/SetAntAliasing() logic correctly Fixes CppunitTest_sc_jumbosheets_test failure noted at https://gerrit.libreoffice.org/c/core/+/119481/5#message-747bde6ad4bdcf90d2ff51e8daa03cb0189e6355 Change-Id: I5408da2e46f1f68646a74bd674b164ccfafdeb71 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119495 Tested-by: Noel Grandin Reviewed-by: Noel Grandin --- svtools/source/config/optionsdrawinglayer.cxx | 41 +++++++++++++++++---------- 1 file changed, 26 insertions(+), 15 deletions(-) (limited to 'svtools') diff --git a/svtools/source/config/optionsdrawinglayer.cxx b/svtools/source/config/optionsdrawinglayer.cxx index c615a2f6b6a0..43a1d68544f5 100644 --- a/svtools/source/config/optionsdrawinglayer.cxx +++ b/svtools/source/config/optionsdrawinglayer.cxx @@ -32,12 +32,6 @@ namespace SvtOptionsDrawinglayer { -// helper -bool IsAAPossibleOnThisSystem() -{ - return !Application::GetDefaultDevice()->SupportsOperation( OutDevSupportType::TransparentRect ); -} - bool IsOverlayBuffer() { return officecfg::Office::Common::Drawinglayer::OverlayBuffer::get(); @@ -126,19 +120,36 @@ sal_uInt32 GetMaximumPaperBottomMargin() } static std::mutex gaAntiAliasMutex; -static bool bAntiAliasingInit = false; -static bool bAntiAliasing = false; +static bool gbAntiAliasingInit = false; +static bool gbAntiAliasing = false; +static bool gbAllowAAInit = false; +static bool gbAllowAA = false; -bool IsAntiAliasing() +bool IsAAPossibleOnThisSystem() { std::lock_guard aGuard(gaAntiAliasMutex); - if (!bAntiAliasingInit) + if (!gbAllowAAInit) + { + gbAllowAAInit = true; + gbAllowAA = Application::GetDefaultDevice()->SupportsOperation( OutDevSupportType::TransparentRect ); + } + return gbAllowAA; +} + + +bool IsAntiAliasing() +{ + bool bAntiAliasing; { - bAntiAliasingInit = true; - bAntiAliasing = officecfg::Office::Common::Drawinglayer::AntiAliasing::get() - && IsAAPossibleOnThisSystem(); + std::lock_guard aGuard(gaAntiAliasMutex); + if (!gbAntiAliasingInit) + { + gbAntiAliasingInit = true; + gbAntiAliasing = officecfg::Office::Common::Drawinglayer::AntiAliasing::get(); + } + bAntiAliasing = gbAntiAliasing; } - return bAntiAliasing; + return bAntiAliasing && IsAAPossibleOnThisSystem(); } /** @@ -156,7 +167,7 @@ void SetAntiAliasing( bool bOn, bool bTemporary ) officecfg::Office::Common::Drawinglayer::AntiAliasing::set(bOn, batch); batch->commit(); } - bAntiAliasing = bOn; + gbAntiAliasing = bOn; } -- cgit