[Libreoffice-commits] core.git: vcl/headless vcl/inc vcl/quartz vcl/source vcl/unx

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Fri Mar 8 08:47:53 UTC 2019


 vcl/headless/svpgdi.cxx              |   13 ++-----
 vcl/inc/salgdi.hxx                   |   22 ++++++++++--
 vcl/quartz/salgdi.cxx                |    4 ++
 vcl/source/gdi/salgdilayout.cxx      |   61 +++++++++++++++++++++++++++++------
 vcl/source/outdev/nativecontrols.cxx |    2 -
 vcl/unx/gtk/salnativewidgets-gtk.cxx |    2 +
 6 files changed, 83 insertions(+), 21 deletions(-)

New commits:
commit a2bf2ca1e3d398db0caa07fce4d135e6dc8b2f27
Author:     Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri Mar 8 08:49:10 2019 +0100
Commit:     Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Fri Mar 8 09:47:20 2019 +0100

    make it possible to use FileDefinitionWidgetDraw in more backends
    
    Change-Id: I8871eb49e11d8c72c469230967c3c979091a0f9b
    Reviewed-on: https://gerrit.libreoffice.org/68898
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>

diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index a2b7e7933c22..08cb2bfec940 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -27,8 +27,6 @@
 #include <headless/CustomWidgetDraw.hxx>
 #include <saldatabasic.hxx>
 
-#include <FileDefinitionWidgetDraw.hxx>
-
 #include <sal/log.hxx>
 #include <tools/helpers.hxx>
 #include <o3tl/safeint.hxx>
@@ -601,12 +599,11 @@ SvpSalGraphics::SvpSalGraphics()
     , m_ePaintMode(PaintMode::Over)
     , m_aTextRenderImpl(*this)
 {
-    bool bFileDefinitionsWidgetDraw = !!getenv("VCL_DRAW_WIDGETS_FROM_FILE");
-
-    if (bFileDefinitionsWidgetDraw)
-        m_pWidgetDraw.reset(new vcl::FileDefinitionWidgetDraw(*this));
-    else if (comphelper::LibreOfficeKit::isActive())
-        m_pWidgetDraw.reset(new vcl::CustomWidgetDraw(*this));
+    if (!initWidgetDrawBackends())
+    {
+        if (comphelper::LibreOfficeKit::isActive())
+            m_pWidgetDraw.reset(new vcl::CustomWidgetDraw(*this));
+    }
 }
 
 SvpSalGraphics::~SvpSalGraphics()
diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx
index fdd93ce00813..d7b45f5fcf97 100644
--- a/vcl/inc/salgdi.hxx
+++ b/vcl/inc/salgdi.hxx
@@ -348,8 +348,7 @@ public:
      * @param [in] ePart The part of the widget.
      * @return true if the platform supports native drawing of the widget type defined by part.
      */
-    virtual bool                IsNativeControlSupported(
-                                    ControlType eType, ControlPart ePart );
+    bool IsSupported(ControlType eType, ControlPart ePart);
 
 
     /**
@@ -443,6 +442,11 @@ public:
 
 #endif // ENABLE_CAIRO_CANVAS
 
+private:
+    bool callGetNativeControlRegion(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, tools::Rectangle &rNativeBoundingRegion, tools::Rectangle &rNativeContentRegion);
+    bool callDrawNativeControl(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, const OUString& rCaption);
+    bool callHitTestNativeControl(ControlType eType, ControlPart nPart, const tools::Rectangle& rControlRegion, const Point& aPos, bool& rIsInside);
+
 protected:
     virtual bool                setClipRegion( const vcl::Region& ) = 0;
 
@@ -537,6 +541,15 @@ protected:
                                     sal_uInt32 nSize ) = 0;
 
     /**
+     * Query the platform layer for native control support.
+     *
+     * @param [in] eType The widget type.
+     * @param [in] ePart The part of the widget.
+     * @return true if the platform supports native drawing of the widget type defined by part.
+     */
+    virtual bool IsNativeControlSupported(ControlType eType, ControlPart ePart);
+
+    /**
      * Query if a position is inside the native widget part.
      *
      * Mainly used for scrollbars.
@@ -601,6 +614,7 @@ protected:
                                     tools::Rectangle &rNativeBoundingRegion,
                                     tools::Rectangle &rNativeContentRegion );
 
+
     /** Blend the bitmap with the current buffer */
     virtual bool                blendBitmap(
                                     const SalTwoRect&,
@@ -666,11 +680,13 @@ protected:
 
     inline long GetDeviceWidth(const OutputDevice* pOutDev) const;
 
+    // native controls
+    bool initWidgetDrawBackends(bool bForce = false);
+
     bool hasWidgetDraw()
     {
         return bool(m_pWidgetDraw);
     }
-
     std::unique_ptr<vcl::WidgetDrawInterface> m_pWidgetDraw;
 };
 
diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx
index 379174690968..18eda87c2de7 100644
--- a/vcl/quartz/salgdi.cxx
+++ b/vcl/quartz/salgdi.cxx
@@ -30,6 +30,7 @@
 #include <osl/process.h>
 #include <rtl/bootstrap.h>
 #include <rtl/strbuf.hxx>
+#include <comphelper/lok.hxx>
 
 #include <vcl/metric.hxx>
 #include <vcl/fontcharmap.hxx>
@@ -212,6 +213,9 @@ AquaSalGraphics::AquaSalGraphics()
 
     for (int i = 0; i < MAX_FALLBACK; ++i)
         mpTextStyle[i] = nullptr;
+
+    if (comphelper::LibreOfficeKit::isActive())
+        initWidgetDrawBackends(true);
 }
 
 AquaSalGraphics::~AquaSalGraphics()
diff --git a/vcl/source/gdi/salgdilayout.cxx b/vcl/source/gdi/salgdilayout.cxx
index d410ce51772c..22199c52a712 100644
--- a/vcl/source/gdi/salgdilayout.cxx
+++ b/vcl/source/gdi/salgdilayout.cxx
@@ -33,6 +33,7 @@
 #include <basegfx/numeric/ftools.hxx> //for F_PI180
 #include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <FileDefinitionWidgetDraw.hxx>
 
 // The only common SalFrame method
 
@@ -62,6 +63,18 @@ SalGraphics::SalGraphics()
         m_nLayout = SalLayoutFlags::BiDiRtl;
 }
 
+bool SalGraphics::initWidgetDrawBackends(bool bForce)
+{
+    bool bFileDefinitionsWidgetDraw = !!getenv("VCL_DRAW_WIDGETS_FROM_FILE");
+
+    if (bFileDefinitionsWidgetDraw || bForce)
+    {
+        m_pWidgetDraw.reset(new vcl::FileDefinitionWidgetDraw(*this));
+        return true;
+    }
+    return false;
+}
+
 SalGraphics::~SalGraphics()
 {
 }
@@ -745,6 +758,22 @@ bool SalGraphics::DrawEPS( long nX, long nY, long nWidth, long nHeight, void* pP
     return drawEPS( nX, nY, nWidth, nHeight,  pPtr, nSize );
 }
 
+bool SalGraphics::IsSupported(ControlType eType, ControlPart ePart)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->isNativeControlSupported(eType, ePart);
+    else
+        return IsNativeControlSupported(eType, ePart);
+}
+
+bool SalGraphics::callHitTestNativeControl(ControlType eType, ControlPart nPart, const tools::Rectangle& rControlRegion, const Point& aPos, bool& rIsInside)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->hitTestNativeControl(eType, nPart, rControlRegion, aPos, rIsInside);
+    else
+        return hitTestNativeControl(eType, nPart, rControlRegion, aPos, rIsInside);
+}
+
 bool SalGraphics::HitTestNativeScrollbar( ControlPart nPart, const tools::Rectangle& rControlRegion,
                                                 const Point& aPos, bool& rIsInside, const OutputDevice *pOutDev )
 {
@@ -754,10 +783,10 @@ bool SalGraphics::HitTestNativeScrollbar( ControlPart nPart, const tools::Rectan
         tools::Rectangle rgn( rControlRegion );
         pt.setX( mirror2( pt.X(), pOutDev ) );
         mirror( rgn, pOutDev );
-        return hitTestNativeControl( ControlType::Scrollbar, nPart, rgn, pt, rIsInside );
+        return callHitTestNativeControl( ControlType::Scrollbar, nPart, rgn, pt, rIsInside );
     }
     else
-        return hitTestNativeControl( ControlType::Scrollbar, nPart, rControlRegion, aPos, rIsInside );
+        return callHitTestNativeControl( ControlType::Scrollbar, nPart, rControlRegion, aPos, rIsInside );
 }
 
 void SalGraphics::mirror( ImplControlValue& rVal, const OutputDevice* pOutDev ) const
@@ -796,9 +825,17 @@ void SalGraphics::mirror( ImplControlValue& rVal, const OutputDevice* pOutDev )
     }
 }
 
+bool SalGraphics::callDrawNativeControl(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, const OUString& rCaption)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->drawNativeControl(nType, nPart, rControlRegion, nState, aValue, rCaption);
+    else
+        return drawNativeControl(nType, nPart, rControlRegion, nState, aValue, rCaption);
+}
+
 bool SalGraphics::DrawNativeControl( ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion,
                                                 ControlState nState, const ImplControlValue& aValue,
-                                                const OUString& aCaption, const OutputDevice *pOutDev )
+                                                const OUString& aCaption, const OutputDevice *pOutDev)
 {
     if( (m_nLayout & SalLayoutFlags::BiDiRtl) || (pOutDev && pOutDev->IsRTLEnabled()) )
     {
@@ -807,11 +844,19 @@ bool SalGraphics::DrawNativeControl( ControlType nType, ControlPart nPart, const
             mirror(rgn, pOutDev);
         std::unique_ptr< ImplControlValue > mirrorValue( aValue.clone());
         mirror( *mirrorValue, pOutDev );
-        bool bRet = drawNativeControl( nType, nPart, rgn, nState, *mirrorValue, aCaption );
+        bool bRet = callDrawNativeControl(nType, nPart, rgn, nState, *mirrorValue, aCaption);
         return bRet;
     }
     else
-        return drawNativeControl( nType, nPart, rControlRegion, nState, aValue, aCaption );
+        return callDrawNativeControl(nType, nPart, rControlRegion, nState, aValue, aCaption);
+}
+
+bool SalGraphics::callGetNativeControlRegion(ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState, const ImplControlValue& aValue, tools::Rectangle &rNativeBoundingRegion, tools::Rectangle &rNativeContentRegion)
+{
+    if (m_pWidgetDraw)
+        return m_pWidgetDraw->getNativeControlRegion(nType, nPart, rControlRegion, nState, aValue, OUString(), rNativeBoundingRegion, rNativeContentRegion);
+    else
+        return getNativeControlRegion(nType, nPart, rControlRegion, nState, aValue, OUString(), rNativeBoundingRegion, rNativeContentRegion);
 }
 
 bool SalGraphics::GetNativeControlRegion( ControlType nType, ControlPart nPart, const tools::Rectangle& rControlRegion, ControlState nState,
@@ -824,8 +869,7 @@ bool SalGraphics::GetNativeControlRegion( ControlType nType, ControlPart nPart,
         mirror( rgn, pOutDev );
         std::unique_ptr< ImplControlValue > mirrorValue( aValue.clone());
         mirror( *mirrorValue, pOutDev );
-        if( getNativeControlRegion( nType, nPart, rgn, nState, *mirrorValue, OUString(),
-                                                rNativeBoundingRegion, rNativeContentRegion ) )
+        if (callGetNativeControlRegion(nType, nPart, rgn, nState, *mirrorValue, rNativeBoundingRegion, rNativeContentRegion))
         {
             mirror( rNativeBoundingRegion, pOutDev, true );
             mirror( rNativeContentRegion, pOutDev, true );
@@ -834,8 +878,7 @@ bool SalGraphics::GetNativeControlRegion( ControlType nType, ControlPart nPart,
         return false;
     }
     else
-        return getNativeControlRegion( nType, nPart, rControlRegion, nState, aValue, OUString(),
-                                                rNativeBoundingRegion, rNativeContentRegion );
+        return callGetNativeControlRegion(nType, nPart, rControlRegion, nState, aValue, rNativeBoundingRegion, rNativeContentRegion);
 }
 
 bool SalGraphics::BlendBitmap( const SalTwoRect& rPosAry,
diff --git a/vcl/source/outdev/nativecontrols.cxx b/vcl/source/outdev/nativecontrols.cxx
index ef2295808a6d..af51d2c279d9 100644
--- a/vcl/source/outdev/nativecontrols.cxx
+++ b/vcl/source/outdev/nativecontrols.cxx
@@ -166,7 +166,7 @@ bool OutputDevice::IsNativeControlSupported( ControlType nType, ControlPart nPar
     if ( !mpGraphics && !AcquireGraphics() )
         return false;
 
-    return mpGraphics->IsNativeControlSupported(nType, nPart);
+    return mpGraphics->IsSupported(nType, nPart);
 }
 
 bool OutputDevice::HitTestNativeScrollbar(
diff --git a/vcl/unx/gtk/salnativewidgets-gtk.cxx b/vcl/unx/gtk/salnativewidgets-gtk.cxx
index 1154e8923859..767a53410df9 100644
--- a/vcl/unx/gtk/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/salnativewidgets-gtk.cxx
@@ -70,6 +70,8 @@ GtkSalGraphics::GtkSalGraphics( GtkSalFrame *pFrame, GtkWidget *pWindow,
       m_aClipRegion(true)
 {
     Init( pFrame, GDK_WINDOW_XID( widget_get_window( pWindow ) ), nXScreen );
+
+    initWidgetDrawBackends();
 }
 
 GtkSalGraphics::~GtkSalGraphics()


More information about the Libreoffice-commits mailing list