From 41c56c26285307eb451819d49c47d7623c4555e2 Mon Sep 17 00:00:00 2001 From: Michael Meeks Date: Tue, 15 Sep 2015 23:42:52 +0100 Subject: tdf#94213 - calc re-size flicker turns out to be the status bar. Using vdev's associated with old contexts, is un-necessary and a recipe for context switching & hence flicker. Change-Id: I37ed967a7816e5ca0240908ab4793ce1e68570ee Reviewed-on: https://gerrit.libreoffice.org/18602 Tested-by: Jenkins Reviewed-by: Michael Meeks Reviewed-on: https://gerrit.libreoffice.org/18608 Reviewed-by: Tor Lillqvist Reviewed-on: https://gerrit.libreoffice.org/18627 Reviewed-by: Miklos Vajna Tested-by: Miklos Vajna Reviewed-by: Jan Holesovsky --- vcl/source/window/event.cxx | 10 +++++++++- vcl/source/window/status.cxx | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx index 852cc0c56938..35c3e385fbd3 100644 --- a/vcl/source/window/event.cxx +++ b/vcl/source/window/event.cxx @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -453,7 +454,14 @@ void Window::ImplCallResize() { mpWindowImpl->mbCallResize = false; - if( GetBackground().IsGradient() ) + // OpenGL has a charming feature of black clearing the whole window + // some legacy code eg. the app-menu has the beautiful feature of + // avoiding re-paints when width doesn't change => invalidate all. + if( OpenGLWrapper::isVCLOpenGLEnabled() ) + Invalidate(); + + // Normally we avoid blanking on re-size unless people might notice: + else if( GetBackground().IsGradient() ) Invalidate(); Resize(); diff --git a/vcl/source/window/status.cxx b/vcl/source/window/status.cxx index e8e2aaf3fa51..76c2de3bdf27 100644 --- a/vcl/source/window/status.cxx +++ b/vcl/source/window/status.cxx @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -731,6 +732,11 @@ void StatusBar::Paint(vcl::RenderContext& rRenderContext, const Rectangle&) // Do offscreen only when we are not recording layout.. bool bOffscreen = !rRenderContext.ImplIsRecordLayout(); + // tdf#94213 - un-necessary virtual-device in GL mode + // causes context switch & hence flicker during sizing. + if( OpenGLWrapper::isVCLOpenGLEnabled() ) + bOffscreen = false; + for (sal_uInt16 i = 0; i < nItemCount; i++) { ImplDrawItem(rRenderContext, bOffscreen, i, true, true); -- cgit v1.2.3