[Libreoffice-commits] core.git: include/vcl vcl/source

Chris Sherlock (via logerrit) logerrit at kemper.freedesktop.org
Sat Jan 2 07:48:47 UTC 2021


 include/vcl/outdev.hxx               |    4 +++
 include/vcl/virdev.hxx               |    2 +
 include/vcl/window.hxx               |    2 +
 vcl/source/gdi/virdev.cxx            |   20 ++++++++++++----
 vcl/source/outdev/nativecontrols.cxx |   43 +++--------------------------------
 5 files changed, 27 insertions(+), 44 deletions(-)

New commits:
commit 159d9c30c474c6525643d832a38e640cd442ac7c
Author:     Chris Sherlock <chris.sherlock79 at gmail.com>
AuthorDate: Tue Dec 22 09:54:25 2020 +1100
Commit:     Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Sat Jan 2 08:48:13 2021 +0100

    tdf#74702 - vcl: introduce OutputDevice::CanEnableNativeWidget()
    
    Change-Id: Idb43f57078702f64e9a80a2100b12fa0e6c3e155
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108130
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>

diff --git a/include/vcl/outdev.hxx b/include/vcl/outdev.hxx
index 052b0afb3086..c0e0c8ec12f8 100644
--- a/include/vcl/outdev.hxx
+++ b/include/vcl/outdev.hxx
@@ -1963,6 +1963,10 @@ public:
 
 public:
 
+    /** Determine if native widgets can be enabled
+     */
+    virtual bool                CanEnableNativeWidget() const { return false; }
+
     /** Query the platform layer for control support
      */
     bool                        IsNativeControlSupported( ControlType nType, ControlPart nPart ) const;
diff --git a/include/vcl/virdev.hxx b/include/vcl/virdev.hxx
index b13a2a0d9ef8..55a4a7f5ddcb 100644
--- a/include/vcl/virdev.hxx
+++ b/include/vcl/virdev.hxx
@@ -156,6 +156,8 @@ public:
     virtual             ~VirtualDevice() override;
     virtual void        dispose() override;
 
+    bool                CanEnableNativeWidget() const override;
+
     virtual void        EnableRTL( bool bEnable = true ) override;
 
     bool                SetOutputSizePixel( const Size& rNewSize, bool bErase = true );
diff --git a/include/vcl/window.hxx b/include/vcl/window.hxx
index 99a1043bb3d3..650503484bc9 100644
--- a/include/vcl/window.hxx
+++ b/include/vcl/window.hxx
@@ -779,6 +779,8 @@ public:
     ::OutputDevice const*               GetOutDev() const;
     ::OutputDevice*                     GetOutDev();
 
+    bool                                CanEnableNativeWidget() const override { return IsNativeWidgetEnabled(); }
+
     Color                               GetBackgroundColor() const override;
 
     size_t                              GetSyncCount() const override { return 0x000000ff; }
diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx
index 3d63cf90cd41..7a2102b0ad0c 100644
--- a/vcl/source/gdi/virdev.cxx
+++ b/vcl/source/gdi/virdev.cxx
@@ -17,18 +17,28 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/log.hxx>
+#include <tools/debug.hxx>
+
+#include <vcl/pdfextoutdevdata.hxx>
+#include <vcl/virdev.hxx>
+
+#include <outdev.h>
+#include <PhysicalFontCollection.hxx>
 #include <salinst.hxx>
 #include <salgdi.hxx>
 #include <salvd.hxx>
-#include <outdev.h>
-#include <PhysicalFontCollection.hxx>
 #include <svdata.hxx>
-#include <vcl/virdev.hxx>
-#include <sal/log.hxx>
-#include <tools/debug.hxx>
 
 using namespace ::com::sun::star::uno;
 
+bool VirtualDevice::CanEnableNativeWidget() const
+{
+    const vcl::ExtOutDevData* pOutDevData(GetExtOutDevData());
+    const vcl::PDFExtOutDevData* pPDFData(dynamic_cast<const vcl::PDFExtOutDevData*>(pOutDevData));
+    return pPDFData == nullptr;
+}
+
 bool VirtualDevice::AcquireGraphics() const
 {
     DBG_TESTSOLARMUTEX();
diff --git a/vcl/source/outdev/nativecontrols.cxx b/vcl/source/outdev/nativecontrols.cxx
index 85b0b58c45d1..4df8328dc921 100644
--- a/vcl/source/outdev/nativecontrols.cxx
+++ b/vcl/source/outdev/nativecontrols.cxx
@@ -29,41 +29,6 @@
 
 #include <salgdi.hxx>
 
-static bool EnableNativeWidget( const OutputDevice& i_rDevice )
-{
-    const OutDevType eType( i_rDevice.GetOutDevType() );
-    switch ( eType )
-    {
-
-    case OUTDEV_WINDOW:
-        {
-            const vcl::Window* pWindow = dynamic_cast< const vcl::Window* >( &i_rDevice );
-            if (pWindow)
-            {
-                return pWindow->IsNativeWidgetEnabled();
-            }
-            else
-            {
-                SAL_WARN ("vcl.gdi", "Could not cast i_rDevice to Window");
-                assert (pWindow);
-                return false;
-            }
-        }
-
-    case OUTDEV_PDF:
-        [[fallthrough]];
-    case OUTDEV_VIRDEV:
-    {
-        const vcl::ExtOutDevData* pOutDevData( i_rDevice.GetExtOutDevData() );
-        const vcl::PDFExtOutDevData* pPDFData( dynamic_cast< const vcl::PDFExtOutDevData* >( pOutDevData ) );
-        return pPDFData == nullptr;
-    }
-
-    default:
-        return false;
-    }
-}
-
 ImplControlValue::~ImplControlValue()
 {
 }
@@ -167,7 +132,7 @@ PushButtonValue* PushButtonValue::clone() const
 
 bool OutputDevice::IsNativeControlSupported( ControlType nType, ControlPart nPart ) const
 {
-    if( !EnableNativeWidget( *this ) )
+    if( !CanEnableNativeWidget() )
         return false;
 
     if ( !mpGraphics && !AcquireGraphics() )
@@ -182,7 +147,7 @@ bool OutputDevice::HitTestNativeScrollbar(
                               const Point& aPos,
                               bool& rIsInside ) const
 {
-    if( !EnableNativeWidget( *this ) )
+    if( !CanEnableNativeWidget() )
         return false;
 
     if ( !mpGraphics && !AcquireGraphics() )
@@ -294,7 +259,7 @@ bool OutputDevice::DrawNativeControl( ControlType nType,
 {
     assert(!is_double_buffered_window());
 
-    if( !EnableNativeWidget( *this ) )
+    if( !CanEnableNativeWidget() )
         return false;
 
     // make sure the current clip region is initialized correctly
@@ -329,7 +294,7 @@ bool OutputDevice::GetNativeControlRegion(  ControlType nType,
                                 tools::Rectangle &rNativeBoundingRegion,
                                 tools::Rectangle &rNativeContentRegion ) const
 {
-    if( !EnableNativeWidget( *this ) )
+    if( !CanEnableNativeWidget() )
         return false;
 
     if ( !mpGraphics && !AcquireGraphics() )


More information about the Libreoffice-commits mailing list