[Libreoffice-commits] core.git: vcl/inc vcl/skia vcl/unx vcl/win

Luboš Luňák (via logerrit) logerrit at kemper.freedesktop.org
Wed Sep 30 14:47:55 UTC 2020


 vcl/inc/skia/win/gdiimpl.hxx        |    2 ++
 vcl/inc/skia/x11/gdiimpl.hxx        |    1 +
 vcl/inc/unx/salgdi.h                |    2 ++
 vcl/inc/unx/x11/x11gdiimpl.h        |    1 +
 vcl/inc/win/salgdi.h                |    1 +
 vcl/inc/win/wingdiimpl.hxx          |    2 ++
 vcl/skia/win/gdiimpl.cxx            |    2 ++
 vcl/skia/x11/gdiimpl.cxx            |    2 ++
 vcl/unx/generic/gdi/salgdi.cxx      |    6 ++++++
 vcl/unx/generic/window/salframe.cxx |    2 ++
 vcl/win/gdi/salgdi.cxx              |    6 ++++++
 vcl/win/window/salframe.cxx         |    4 ++++
 12 files changed, 31 insertions(+)

New commits:
commit 2217c3fa74fb3c910566ef1de1e05da5c5a120ff
Author:     Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Wed Sep 30 10:05:53 2020 +0200
Commit:     Luboš Luňák <l.lunak at collabora.com>
CommitDate: Wed Sep 30 16:47:14 2020 +0200

    make OutputDevice::Flush() also flush Skia
    
    Skia uses an idle timer to flush buffered Skia drawing. This has
    the problem that if there's a lot to do, the actual drawing to
    the screen may become starved and not update. Fortunately there's
    OutputDevice::Flush() that is called e.g. during Impress animations,
    so make that also work for Skia, which should make things
    somewhat smoother.
    
    Change-Id: Ia8629e63dc7d7a2d7200c033bc2dc2c51f6caf0b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103675
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>

diff --git a/vcl/inc/skia/win/gdiimpl.hxx b/vcl/inc/skia/win/gdiimpl.hxx
index 564fcd7e9614..bcdf6874f4d5 100644
--- a/vcl/inc/skia/win/gdiimpl.hxx
+++ b/vcl/inc/skia/win/gdiimpl.hxx
@@ -68,6 +68,8 @@ public:
     virtual bool DrawTextLayout(const GenericSalLayout& layout) override;
     virtual void ClearDevFontCache() override;
 
+    virtual void Flush() override;
+
     static void prepareSkia();
 
 protected:
diff --git a/vcl/inc/skia/x11/gdiimpl.hxx b/vcl/inc/skia/x11/gdiimpl.hxx
index d131d54bfe8e..10c6c5fcb972 100644
--- a/vcl/inc/skia/x11/gdiimpl.hxx
+++ b/vcl/inc/skia/x11/gdiimpl.hxx
@@ -30,6 +30,7 @@ public:
     virtual void Init() override;
     virtual void DeInit() override;
     virtual void freeResources() override;
+    virtual void Flush() override;
 
     static void prepareSkia();
 
diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h
index eac9dad95bb8..6e5e260f1185 100644
--- a/vcl/inc/unx/salgdi.h
+++ b/vcl/inc/unx/salgdi.h
@@ -98,6 +98,8 @@ public:
 
     const SalX11Screen&             GetScreenNumber() const { return m_nXScreen; }
 
+    void                            Flush();
+
     // override all pure virtual methods
     virtual void                    GetResolution( sal_Int32& rDPIX, sal_Int32& rDPIY ) override;
     virtual sal_uInt16              GetBitCount() const override;
diff --git a/vcl/inc/unx/x11/x11gdiimpl.h b/vcl/inc/unx/x11/x11gdiimpl.h
index 2e41e87c860d..342da0907517 100644
--- a/vcl/inc/unx/x11/x11gdiimpl.h
+++ b/vcl/inc/unx/x11/x11gdiimpl.h
@@ -18,6 +18,7 @@ class X11GraphicsImpl
 {
 public:
     virtual ~X11GraphicsImpl() {};
+    virtual void Flush() {};
 };
 
 #endif // INCLUDED_VCL_INC_UNX_X11_X11GDIIMPL_HXX
diff --git a/vcl/inc/win/salgdi.h b/vcl/inc/win/salgdi.h
index f2560f3ade59..a717286737c0 100644
--- a/vcl/inc/win/salgdi.h
+++ b/vcl/inc/win/salgdi.h
@@ -222,6 +222,7 @@ public:
     bool isScreen() const;
 
     void setHWND(HWND hWnd);
+    void Flush();
 
 protected:
     virtual bool        setClipRegion( const vcl::Region& ) override;
diff --git a/vcl/inc/win/wingdiimpl.hxx b/vcl/inc/win/wingdiimpl.hxx
index 679be2c36588..2b1355cae9bf 100644
--- a/vcl/inc/win/wingdiimpl.hxx
+++ b/vcl/inc/win/wingdiimpl.hxx
@@ -37,6 +37,8 @@ public:
 
     virtual void ClearDevFontCache(){};
 
+    virtual void Flush(){};
+
     // Implementation for WinSalGraphics::DrawTextLayout().
     // Returns true if handled, if false, then WinSalGraphics will handle it itself.
     virtual bool DrawTextLayout(const GenericSalLayout&) { return false; }
diff --git a/vcl/skia/win/gdiimpl.cxx b/vcl/skia/win/gdiimpl.cxx
index ce67db42914b..819f024fa5cd 100644
--- a/vcl/skia/win/gdiimpl.cxx
+++ b/vcl/skia/win/gdiimpl.cxx
@@ -61,6 +61,8 @@ void WinSkiaSalGraphicsImpl::DeInit()
 
 void WinSkiaSalGraphicsImpl::freeResources() {}
 
+void WinSkiaSalGraphicsImpl::Flush() { performFlush(); }
+
 void WinSkiaSalGraphicsImpl::performFlush()
 {
     SkiaZone zone;
diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx
index 68571ccb73e7..635beb1edb09 100644
--- a/vcl/skia/x11/gdiimpl.cxx
+++ b/vcl/skia/x11/gdiimpl.cxx
@@ -129,6 +129,8 @@ void X11SkiaSalGraphicsImpl::DeInit()
 
 void X11SkiaSalGraphicsImpl::freeResources() {}
 
+void X11SkiaSalGraphicsImpl::Flush() { performFlush(); }
+
 void X11SkiaSalGraphicsImpl::performFlush()
 {
     SkiaZone zone;
diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx
index eeae83132781..6da291c91bea 100644
--- a/vcl/unx/generic/gdi/salgdi.cxx
+++ b/vcl/unx/generic/gdi/salgdi.cxx
@@ -500,6 +500,12 @@ SystemGraphicsData X11SalGraphics::GetGraphicsData() const
     return aRes;
 }
 
+void X11SalGraphics::Flush()
+{
+    if( X11GraphicsImpl* x11Impl = dynamic_cast< X11GraphicsImpl* >( mxImpl.get()))
+        x11Impl->Flush();
+}
+
 #if ENABLE_CAIRO_CANVAS
 
 bool X11SalGraphics::SupportsCairo() const
diff --git a/vcl/unx/generic/window/salframe.cxx b/vcl/unx/generic/window/salframe.cxx
index 3baf29335ef6..03dfe8b39640 100644
--- a/vcl/unx/generic/window/salframe.cxx
+++ b/vcl/unx/generic/window/salframe.cxx
@@ -2303,6 +2303,8 @@ void X11SalFrame::SetTitle( const OUString& rTitle )
 
 void X11SalFrame::Flush()
 {
+    if( pGraphics_ )
+        pGraphics_->Flush();
     XFlush( GetDisplay()->GetDisplay() );
 }
 
diff --git a/vcl/win/gdi/salgdi.cxx b/vcl/win/gdi/salgdi.cxx
index db4ea113b290..813ce8c4e9da 100644
--- a/vcl/win/gdi/salgdi.cxx
+++ b/vcl/win/gdi/salgdi.cxx
@@ -719,6 +719,12 @@ long WinSalGraphics::GetGraphicsWidth() const
     return mpImpl->GetGraphicsWidth();
 }
 
+void WinSalGraphics::Flush()
+{
+    if(WinSalGraphicsImplBase* impl = dynamic_cast<WinSalGraphicsImplBase*>(GetImpl()))
+        impl->Flush();
+}
+
 void WinSalGraphics::ResetClipRegion()
 {
     mpImpl->ResetClipRegion();
diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx
index 7ee4aa74d42b..13ae25af8225 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -2187,6 +2187,10 @@ void WinSalFrame::SetPointerPos( long nX, long nY )
 
 void WinSalFrame::Flush()
 {
+    if(mpLocalGraphics)
+        mpLocalGraphics->Flush();
+    if(mpThreadGraphics)
+        mpThreadGraphics->Flush();
     GdiFlush();
 }
 


More information about the Libreoffice-commits mailing list