diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2021-08-19 21:45:42 +0200 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2021-08-20 09:55:38 +0200 |
commit | 9ca30cd1d04cf39411c3ede687805c28ebe2a980 (patch) | |
tree | 909b3571e62663024f842fa9d9eb237ced9e4e21 | |
parent | 3ad6d41c1c88b0549c9be0f41e02d83a582fcdfd (diff) |
VCL allow plugins to declare OpenGL support
... and get rid of the whole GetBackendCapabilities, which was
just overkill. Maybe this should even be some bitmap + enum
+ set/get function, but I'm too lazy...
In the end add a bool for the OpenGL support of the VCL plugin
(or maybe sticking it into ImplSVData, which is already some
catchall for common VCL data).
Change-Id: I9f0ececac482d8e2a94ef6024628e9631b49e773
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120760
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
-rw-r--r-- | compilerplugins/clang/singlevalfields.results | 3 | ||||
-rw-r--r-- | compilerplugins/clang/unnecessaryoverride.cxx | 5 | ||||
-rw-r--r-- | compilerplugins/clang/unusedfields.readonly.results | 2 | ||||
-rw-r--r-- | vcl/headless/svpinst.cxx | 51 | ||||
-rw-r--r-- | vcl/inc/backend/BackendCapabilities.hxx | 21 | ||||
-rw-r--r-- | vcl/inc/headless/svpinst.hxx | 4 | ||||
-rw-r--r-- | vcl/inc/salinst.hxx | 16 | ||||
-rw-r--r-- | vcl/inc/unx/salinst.h | 2 | ||||
-rw-r--r-- | vcl/inc/win/salinst.h | 1 | ||||
-rw-r--r-- | vcl/qa/cppunit/BitmapExTest.cxx | 3 | ||||
-rw-r--r-- | vcl/qa/cppunit/BitmapTest.cxx | 6 | ||||
-rw-r--r-- | vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx | 3 | ||||
-rw-r--r-- | vcl/source/app/salvtables.cxx | 6 | ||||
-rw-r--r-- | vcl/source/bitmap/BitmapReadAccess.cxx | 6 | ||||
-rw-r--r-- | vcl/source/filter/png/PngImageReader.cxx | 3 | ||||
-rw-r--r-- | vcl/source/opengl/OpenGLHelper.cxx | 4 | ||||
-rw-r--r-- | vcl/unx/generic/app/salinst.cxx | 16 | ||||
-rw-r--r-- | vcl/win/app/salinst.cxx | 16 |
18 files changed, 34 insertions, 134 deletions
diff --git a/compilerplugins/clang/singlevalfields.results b/compilerplugins/clang/singlevalfields.results index b2f91d4d97a1..c426b4a42580 100644 --- a/compilerplugins/clang/singlevalfields.results +++ b/compilerplugins/clang/singlevalfields.results @@ -976,9 +976,6 @@ vcl/headless/svpgdi.cxx:598 vcl/headless/svpgdi.cxx:1641 SvpSalGraphics::drawPolyLine bDoDirectCairoStroke 1 -vcl/inc/backend/BackendCapabilities.hxx:18 - vcl::BackendCapabilities mbSupportsBitmap32 - 0 vcl/inc/canvasbitmap.hxx:53 vcl::unotools::VclCanvasBitmap m_nEndianness 0 diff --git a/compilerplugins/clang/unnecessaryoverride.cxx b/compilerplugins/clang/unnecessaryoverride.cxx index 5013894aa398..7ce2627cc8fb 100644 --- a/compilerplugins/clang/unnecessaryoverride.cxx +++ b/compilerplugins/clang/unnecessaryoverride.cxx @@ -248,11 +248,6 @@ bool UnnecessaryOverride::VisitCXXMethodDecl(const CXXMethodDecl* methodDecl) return true; } - auto fdc = loplugin::DeclCheck(methodDecl); - // Has code only in #ifdef. - if (fdc.Function("GetBackendCapabilities").Class("X11SalInstance").GlobalNamespace()) - return true; - // If overriding more than one base member function, or one base member // function that is available in multiple (non-virtual) base class // instances, then this is a disambiguating override: diff --git a/compilerplugins/clang/unusedfields.readonly.results b/compilerplugins/clang/unusedfields.readonly.results index c04bf4eeaca0..c0234103d79d 100644 --- a/compilerplugins/clang/unusedfields.readonly.results +++ b/compilerplugins/clang/unusedfields.readonly.results @@ -686,8 +686,6 @@ unotools/source/config/pathoptions.cxx:85 SvtPathOptions_Impl m_aEmptyString class rtl::OUString unotools/source/config/saveopt.cxx:83 (anonymous namespace)::SvtSaveOptions_Impl bROUserAutoSave _Bool -vcl/inc/backend/BackendCapabilities.hxx:17 - vcl::BackendCapabilities mbSupportsBitmap32 _Bool vcl/inc/bitmap/BitmapFastScaleFilter.hxx:31 BitmapFastScaleFilter maSize class Size vcl/inc/ppdparser.hxx:131 diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx index b488d54d7527..55bc15325fda 100644 --- a/vcl/headless/svpinst.cxx +++ b/vcl/headless/svpinst.cxx @@ -35,9 +35,6 @@ #include <vcl/virdev.hxx> #include <vcl/inputtypes.hxx> #include <vcl/lok.hxx> -#if HAVE_FEATURE_UI -# include <vcl/opengl/OpenGLContext.hxx> -#endif #include <headless/svpinst.hxx> #include <headless/svpframe.hxx> @@ -106,6 +103,8 @@ SvpSalInstance::SvpSalInstance( std::unique_ptr<SalYieldMutex> pMutex ) #if !defined(ANDROID) && !defined(IOS) pthread_atfork(nullptr, nullptr, atfork_child); #endif + + m_bSupportsOpenGL = false; } SvpSalInstance::~SvpSalInstance() @@ -583,52 +582,6 @@ void SvpSalInstance::AddToRecentDocumentList(const OUString&, const OUString&, c { } -std::shared_ptr<vcl::BackendCapabilities> SvpSalInstance::GetBackendCapabilities() -{ - auto pBackendCapabilities = SalInstance::GetBackendCapabilities(); -#if 0 // LO code is not yet bitmap32-ready. -#ifndef IOS - // Note: This code is used for iOS, too. Let's not use 32-bit bitmaps with included alpha on iOS for now. - pBackendCapabilities->mbSupportsBitmap32 = true; -#endif -#endif - return pBackendCapabilities; -} - -//obviously doesn't actually do anything, it's just a nonfunctional stub - -#if HAVE_FEATURE_UI - -namespace { - -class SvpOpenGLContext : public OpenGLContext -{ - GLWindow m_aGLWin; -private: - virtual const GLWindow& getOpenGLWindow() const override { return m_aGLWin; } - virtual GLWindow& getModifiableOpenGLWindow() override { return m_aGLWin; } -}; - -} - -OpenGLContext* SvpSalInstance::CreateOpenGLContext() -{ - return new SvpOpenGLContext; -} - -#else - -class SvpOpenGLContext -{ -}; - -OpenGLContext* SvpSalInstance::CreateOpenGLContext() -{ - return nullptr; -} - -#endif - SvpSalTimer::~SvpSalTimer() { } diff --git a/vcl/inc/backend/BackendCapabilities.hxx b/vcl/inc/backend/BackendCapabilities.hxx deleted file mode 100644 index 2fd49ff47fe5..000000000000 --- a/vcl/inc/backend/BackendCapabilities.hxx +++ /dev/null @@ -1,21 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - */ - -#pragma once - -namespace vcl -{ -struct BackendCapabilities -{ - bool mbSupportsBitmap32 = false; -}; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/headless/svpinst.hxx b/vcl/inc/headless/svpinst.hxx index 2f48049b4839..51de503c3b24 100644 --- a/vcl/inc/headless/svpinst.hxx +++ b/vcl/inc/headless/svpinst.hxx @@ -159,8 +159,6 @@ public: // SalBitmap virtual std::shared_ptr<SalBitmap> CreateSalBitmap() override; - std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities() override; - // wait next event and dispatch // must returned by UserEvent (SalFrame::PostEvent) // and timer @@ -169,8 +167,6 @@ public: virtual bool IsMainThread() const override; virtual void updateMainThread() override; - virtual OpenGLContext* CreateOpenGLContext() override; - virtual OUString GetConnectionIdentifier() override; virtual void AddToRecentDocumentList(const OUString& rFileUrl, const OUString& rMimeType, const OUString& rDocumentService) override; diff --git a/vcl/inc/salinst.hxx b/vcl/inc/salinst.hxx index f38d6f45e44c..1c61dc029cc6 100644 --- a/vcl/inc/salinst.hxx +++ b/vcl/inc/salinst.hxx @@ -26,8 +26,6 @@ #include <vcl/salgtype.hxx> #include <vcl/vclenum.hxx> -#include "backend/BackendCapabilities.hxx" - #include "displayconnectiondispatch.hxx" #include <com/sun/star/uno/XComponentContext.hpp> @@ -80,10 +78,17 @@ private: const std::unique_ptr<comphelper::SolarMutex> m_pYieldMutex; css::uno::Reference<css::uno::XInterface> m_clipboard; +protected: + bool m_bSupportsBitmap32 = false; + bool m_bSupportsOpenGL = true; + public: SalInstance(std::unique_ptr<comphelper::SolarMutex> pMutex); virtual ~SalInstance(); + bool supportsBitmap32() const { return m_bSupportsBitmap32; } + bool supportsOpenGL() const { return m_bSupportsOpenGL; } + //called directly after Application::Init virtual void AfterAppInit() {} virtual bool SVMainHook(int*) { return false; } @@ -128,11 +133,6 @@ public: virtual SalSystem* CreateSalSystem() = 0; // SalBitmap virtual std::shared_ptr<SalBitmap> CreateSalBitmap() = 0; - // BackendCapabilities - virtual std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities() - { - return std::make_shared<vcl::BackendCapabilities>(); - } // YieldMutex comphelper::SolarMutex* GetYieldMutex(); @@ -158,7 +158,7 @@ public: // may return NULL to disable session management, only used by X11 backend virtual std::unique_ptr<SalSession> CreateSalSession(); - virtual OpenGLContext* CreateOpenGLContext() = 0; + virtual OpenGLContext* CreateOpenGLContext(); virtual weld::Builder* CreateBuilder(weld::Widget* pParent, const OUString& rUIRoot, const OUString& rUIFile); virtual weld::Builder* CreateInterimBuilder(vcl::Window* pParent, const OUString& rUIRoot, const OUString& rUIFile, diff --git a/vcl/inc/unx/salinst.h b/vcl/inc/unx/salinst.h index 9378b243a58e..75a5cd6ae5ab 100644 --- a/vcl/inc/unx/salinst.h +++ b/vcl/inc/unx/salinst.h @@ -77,8 +77,6 @@ public: virtual void AfterAppInit() override; - std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities() override; - // dtrans implementation virtual css::uno::Reference< css::uno::XInterface > CreateClipboard( const css::uno::Sequence< css::uno::Any >& i_rArguments ) override; diff --git a/vcl/inc/win/salinst.h b/vcl/inc/win/salinst.h index cd98a0231288..bde64dd1bb8d 100644 --- a/vcl/inc/win/salinst.h +++ b/vcl/inc/win/salinst.h @@ -73,7 +73,6 @@ public: virtual void AddToRecentDocumentList(const OUString& rFileUrl, const OUString& rMimeType, const OUString& rDocumentService) override; virtual OUString getOSVersion() override; - virtual std::shared_ptr<vcl::BackendCapabilities> GetBackendCapabilities() override; virtual void BeforeAbort(const OUString&, bool) override; static int WorkaroundExceptionHandlingInUSER32Lib(int nExcept, LPEXCEPTION_POINTERS pExceptionInfo); diff --git a/vcl/qa/cppunit/BitmapExTest.cxx b/vcl/qa/cppunit/BitmapExTest.cxx index 6f235237c2f3..a0a6b3096f53 100644 --- a/vcl/qa/cppunit/BitmapExTest.cxx +++ b/vcl/qa/cppunit/BitmapExTest.cxx @@ -55,8 +55,7 @@ void BitmapExTest::testGetPixelColor32() { // Check backend capabilities and return from the test successfully // if the backend doesn't support 32-bit bitmap - auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities(); - if (!pBackendCapabilities->mbSupportsBitmap32) + if (!ImplGetSVData()->mpDefInst->supportsBitmap32()) return; Bitmap aBitmap(Size(3, 3), vcl::PixelFormat::N32_BPP); diff --git a/vcl/qa/cppunit/BitmapTest.cxx b/vcl/qa/cppunit/BitmapTest.cxx index 4d033c9e37a3..edb9fe386de6 100644 --- a/vcl/qa/cppunit/BitmapTest.cxx +++ b/vcl/qa/cppunit/BitmapTest.cxx @@ -136,8 +136,7 @@ void BitmapTest::testCreation() // Check backend capabilities and return from the test successfully // if the backend doesn't support 32-bit bitmap - auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities(); - if (pBackendCapabilities->mbSupportsBitmap32) + if (ImplGetSVData()->mpDefInst->supportsBitmap32()) { Bitmap aBmp(Size(10, 10), vcl::PixelFormat::N32_BPP); Size aSize = aBmp.GetSizePixel(); @@ -507,8 +506,7 @@ void BitmapTest::testBitmap32() { // Check backend capabilities and return from the test successfully // if the backend doesn't support 32-bit bitmap - auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities(); - if (!pBackendCapabilities->mbSupportsBitmap32) + if (!ImplGetSVData()->mpDefInst->supportsBitmap32()) return; Bitmap aBitmap(Size(3, 3), vcl::PixelFormat::N32_BPP); diff --git a/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx b/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx index d4cb8ed1532b..26c1136cbe4d 100644 --- a/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx +++ b/vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx @@ -144,8 +144,7 @@ void BitmapRenderTest::testDrawAlphaBitmapEx() aPngReader.read(aBitmapEx); // Check backend capabilities, if the backend support 32-bit bitmap - auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities(); - if (pBackendCapabilities->mbSupportsBitmap32) + if (ImplGetSVData()->mpDefInst->supportsBitmap32()) { CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, aBitmapEx.GetBitmap().getPixelFormat()); } diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 3abcd7ad5ecb..da17b8facb40 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -123,6 +123,12 @@ void SalInstance::AcquireYieldMutex(sal_uInt32 nCount) { m_pYieldMutex->acquire( std::unique_ptr<SalSession> SalInstance::CreateSalSession() { return nullptr; } +OpenGLContext* SalInstance::CreateOpenGLContext() +{ + assert(!m_bSupportsOpenGL); + std::abort(); +} + std::unique_ptr<SalMenu> SalInstance::CreateMenu(bool, Menu*) { // default: no native menus diff --git a/vcl/source/bitmap/BitmapReadAccess.cxx b/vcl/source/bitmap/BitmapReadAccess.cxx index cf531189913c..6e87debd1ec1 100644 --- a/vcl/source/bitmap/BitmapReadAccess.cxx +++ b/vcl/source/bitmap/BitmapReadAccess.cxx @@ -50,11 +50,7 @@ BitmapReadAccess::BitmapReadAccess(Bitmap& rBitmap, BitmapAccessMode nMode) BitmapReadAccess::~BitmapReadAccess() {} -bool Bitmap32IsPreMultipled() -{ - auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities(); - return pBackendCapabilities->mbSupportsBitmap32; -} +bool Bitmap32IsPreMultipled() { return ImplGetSVData()->mpDefInst->supportsBitmap32(); } FncGetPixel BitmapReadAccess::GetPixelFunction(ScanlineFormat nFormat) { diff --git a/vcl/source/filter/png/PngImageReader.cxx b/vcl/source/filter/png/PngImageReader.cxx index 013254192d3d..6fc182cc24b3 100644 --- a/vcl/source/filter/png/PngImageReader.cxx +++ b/vcl/source/filter/png/PngImageReader.cxx @@ -97,9 +97,8 @@ bool reader(SvStream& rStream, BitmapEx& rBitmapEx, BitmapScopedWriteAccess pWriteAccessInstance; AlphaScopedWriteAccess pWriteAccessAlphaInstance; std::vector<std::vector<png_byte>> aRows; - auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities(); const bool bFuzzing = utl::ConfigManager::IsFuzzing(); - const bool bSupportsBitmap32 = pBackendCapabilities->mbSupportsBitmap32 || bFuzzing; + const bool bSupportsBitmap32 = bFuzzing || ImplGetSVData()->mpDefInst->supportsBitmap32(); const bool bOnlyCreateBitmap = static_cast<bool>(nImportFlags & GraphicFilterImportFlags::OnlyCreateBitmap); const bool bUseExistingBitmap diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx index 724c692c8925..bf37940511ff 100644 --- a/vcl/source/opengl/OpenGLHelper.cxx +++ b/vcl/source/opengl/OpenGLHelper.cxx @@ -38,6 +38,8 @@ #include <watchdog.hxx> #include <vcl/skia/SkiaHelper.hxx> #include <vcl/glxtestprocess.hxx> +#include <salinst.hxx> +#include <svdata.hxx> #if USING_X11 #include <opengl/x11/X11DeviceInfo.hxx> @@ -790,6 +792,8 @@ bool OpenGLHelper::supportsOpenGL() { if( getenv("SAL_DISABLEGL") != nullptr ) return false; + if (!ImplGetSVData()->mpDefInst->supportsOpenGL()) + return false; if( isDeviceDenylisted()) return false; if( officecfg::Office::Common::VCL::DisableOpenGL::get()) diff --git a/vcl/unx/generic/app/salinst.cxx b/vcl/unx/generic/app/salinst.cxx index dc53368e3e6e..7a8b761dbb30 100644 --- a/vcl/unx/generic/app/salinst.cxx +++ b/vcl/unx/generic/app/salinst.cxx @@ -74,6 +74,10 @@ X11SalInstance::X11SalInstance(std::unique_ptr<SalYieldMutex> pMutex) pSVData->maAppData.mxToolkitName = OUString("x11"); #if HAVE_FEATURE_SKIA X11SkiaSalGraphicsImpl::prepareSkia(); +#if SKIA_USE_BITMAP32 + if (SkiaHelper::isVCLSkiaEnabled()) + m_bSupportsBitmap32 = true; +#endif #endif } @@ -234,16 +238,4 @@ std::unique_ptr<GenPspGraphics> X11SalInstance::CreatePrintGraphics() return std::make_unique<GenPspGraphics>(); } -std::shared_ptr<vcl::BackendCapabilities> X11SalInstance::GetBackendCapabilities() -{ - auto pBackendCapabilities = SalInstance::GetBackendCapabilities(); -#if HAVE_FEATURE_SKIA -#if SKIA_USE_BITMAP32 - if( SkiaHelper::isVCLSkiaEnabled()) - pBackendCapabilities->mbSupportsBitmap32 = true; -#endif -#endif - return pBackendCapabilities; -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx index 50f48b076679..f2981bbd9d1c 100644 --- a/vcl/win/app/salinst.cxx +++ b/vcl/win/app/salinst.cxx @@ -386,6 +386,10 @@ WinSalInstance::WinSalInstance() pSVData->maAppData.mxToolkitName = OUString("win"); #if HAVE_FEATURE_SKIA WinSkiaSalGraphicsImpl::prepareSkia(); +#if SKIA_USE_BITMAP32 + if (SkiaHelper::isVCLSkiaEnabled()) + m_bSupportsBitmap32 = true; +#endif #endif } @@ -919,18 +923,6 @@ OUString WinSalInstance::getOSVersion() return aVer.makeStringAndClear(); } -std::shared_ptr<vcl::BackendCapabilities> WinSalInstance::GetBackendCapabilities() -{ - auto pBackendCapabilities = SalInstance::GetBackendCapabilities(); -#if HAVE_FEATURE_SKIA -#if SKIA_USE_BITMAP32 - if( SkiaHelper::isVCLSkiaEnabled()) - pBackendCapabilities->mbSupportsBitmap32 = true; -#endif -#endif - return pBackendCapabilities; -} - void WinSalInstance::BeforeAbort(const OUString&, bool) { ImplFreeSalGDI(); |