From e11bbf3c3ccd45c3c7adc75077c4f4cebf6892b2 Mon Sep 17 00:00:00 2001 From: Jan-Marek Glogowski Date: Thu, 19 Aug 2021 21:45:42 +0200 Subject: 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 (cherry picked from commit 9ca30cd1d04cf39411c3ede687805c28ebe2a980) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120775 Reviewed-by: Xisco Fauli --- compilerplugins/clang/singlevalfields.results | 3 -- compilerplugins/clang/unnecessaryoverride.cxx | 5 --- vcl/headless/svpinst.cxx | 51 +----------------------- vcl/inc/backend/BackendCapabilities.hxx | 28 ------------- vcl/inc/headless/svpinst.hxx | 4 -- vcl/inc/salinst.hxx | 16 ++++---- vcl/inc/unx/salinst.h | 2 - vcl/inc/win/salinst.h | 1 - vcl/qa/cppunit/BitmapExTest.cxx | 3 +- vcl/qa/cppunit/BitmapTest.cxx | 6 +-- vcl/qa/cppunit/bitmaprender/BitmapRenderTest.cxx | 3 +- vcl/source/app/salvtables.cxx | 6 +++ vcl/source/bitmap/BitmapReadAccess.cxx | 6 +-- vcl/source/filter/png/PngImageReader.cxx | 3 +- vcl/source/opengl/OpenGLHelper.cxx | 4 ++ vcl/unx/generic/app/salinst.cxx | 16 ++------ vcl/win/app/salinst.cxx | 16 ++------ 17 files changed, 34 insertions(+), 139 deletions(-) delete mode 100644 vcl/inc/backend/BackendCapabilities.hxx 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 10ab158b7d8d..cae1220b0e23 100644 --- a/compilerplugins/clang/unnecessaryoverride.cxx +++ b/compilerplugins/clang/unnecessaryoverride.cxx @@ -246,11 +246,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/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx index 700c6b87f645..71efed967af3 100644 --- a/vcl/headless/svpinst.cxx +++ b/vcl/headless/svpinst.cxx @@ -35,9 +35,6 @@ #include #include #include -#if HAVE_FEATURE_UI -# include -#endif #include #include @@ -89,6 +86,8 @@ SvpSalInstance::SvpSalInstance( std::unique_ptr pMutex ) #if !defined(ANDROID) && !defined(IOS) pthread_atfork(nullptr, nullptr, atfork_child); #endif + + m_bSupportsOpenGL = false; } SvpSalInstance::~SvpSalInstance() @@ -591,52 +590,6 @@ void SvpSalInstance::AddToRecentDocumentList(const OUString&, const OUString&, c { } -std::shared_ptr 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 89879ee492e1..000000000000 --- a/vcl/inc/backend/BackendCapabilities.hxx +++ /dev/null @@ -1,28 +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/. - * - */ - -#ifndef INCLUDED_VCL_INC_BACKENDCAPABILITIES_HXX -#define INCLUDED_VCL_INC_BACKENDCAPABILITIES_HXX - -namespace vcl -{ -struct BackendCapabilities -{ - bool mbSupportsBitmap32; - BackendCapabilities() - : mbSupportsBitmap32(false) - { - } -}; -} - -#endif // INCLUDED_VCL_INC_BACKENDCAPABILITIES_HXX - -/* 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 CreateSalBitmap() override; - std::shared_ptr 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 #include -#include "backend/BackendCapabilities.hxx" - #include "displayconnectiondispatch.hxx" #include @@ -80,10 +78,17 @@ private: const std::unique_ptr m_pYieldMutex; css::uno::Reference m_clipboard; +protected: + bool m_bSupportsBitmap32 = false; + bool m_bSupportsOpenGL = true; + public: SalInstance(std::unique_ptr 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 CreateSalBitmap() = 0; - // BackendCapabilities - virtual std::shared_ptr GetBackendCapabilities() - { - return std::make_shared(); - } // 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 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 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 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 9b4baab77446..a66e95158aa4 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 SalInstance::CreateSalSession() { return nullptr; } +OpenGLContext* SalInstance::CreateOpenGLContext() +{ + assert(!m_bSupportsOpenGL); + std::abort(); +} + std::unique_ptr 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 6631c238629e..56945e9d9c4b 100644 --- a/vcl/source/filter/png/PngImageReader.cxx +++ b/vcl/source/filter/png/PngImageReader.cxx @@ -97,8 +97,7 @@ bool reader(SvStream& rStream, BitmapEx& rBitmapEx, BitmapScopedWriteAccess pWriteAccessInstance; AlphaScopedWriteAccess pWriteAccessAlphaInstance; std::vector> aRows; - auto pBackendCapabilities = ImplGetSVData()->mpDefInst->GetBackendCapabilities(); - const bool bSupportsBitmap32 = pBackendCapabilities->mbSupportsBitmap32; + const bool bSupportsBitmap32 = ImplGetSVData()->mpDefInst->supportsBitmap32(); const bool bOnlyCreateBitmap = static_cast(nImportFlags & GraphicFilterImportFlags::OnlyCreateBitmap); const bool bUseExistingBitmap diff --git a/vcl/source/opengl/OpenGLHelper.cxx b/vcl/source/opengl/OpenGLHelper.cxx index b2f6e4a874e7..2c90bc808bb4 100644 --- a/vcl/source/opengl/OpenGLHelper.cxx +++ b/vcl/source/opengl/OpenGLHelper.cxx @@ -38,6 +38,8 @@ #include #include #include +#include +#include #if USING_X11 #include @@ -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 21d878cfa612..ad81916a5894 100644 --- a/vcl/unx/generic/app/salinst.cxx +++ b/vcl/unx/generic/app/salinst.cxx @@ -74,6 +74,10 @@ X11SalInstance::X11SalInstance(std::unique_ptr 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 X11SalInstance::CreatePrintGraphics() return std::make_unique(); } -std::shared_ptr 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 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(); -- cgit