[Libreoffice-commits] core.git: Branch 'libreoffice-5-1' - chart2/source include/vcl vcl/source
Markus Mohrhard
markus.mohrhard at googlemail.com
Thu Jun 9 09:21:16 UTC 2016
chart2/source/controller/main/ChartWindow.cxx | 2 -
chart2/source/view/main/ChartView.cxx | 4 ++
include/vcl/openglwin.hxx | 6 ++-
vcl/source/window/openglwin.cxx | 46 ++++++++++++++++++++++----
4 files changed, 50 insertions(+), 8 deletions(-)
New commits:
commit 8a94e538c3306b2af1a76c724e4dcae0e3968164
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date: Tue Jun 7 16:11:02 2016 +0200
only init the OpenGL context if we need it
Change-Id: I8634589bc0c8ef317089eb08c07974ed81d98982
Reviewed-on: https://gerrit.libreoffice.org/26050
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
diff --git a/chart2/source/controller/main/ChartWindow.cxx b/chart2/source/controller/main/ChartWindow.cxx
index 80b0769..de815c1 100644
--- a/chart2/source/controller/main/ChartWindow.cxx
+++ b/chart2/source/controller/main/ChartWindow.cxx
@@ -49,7 +49,7 @@ ChartWindow::ChartWindow( ChartController* pController, vcl::Window* pParent, Wi
: Window(pParent, nStyle)
, m_pWindowController( pController )
, m_bInPaint(false)
- , m_pOpenGLWindow(VclPtr<OpenGLWindow>::Create(this))
+ , m_pOpenGLWindow(VclPtr<OpenGLWindow>::Create(this, false))
{
this->SetHelpId( HID_SCH_WIN_DOCUMENT );
this->SetMapMode( MapMode(MAP_100TH_MM) );
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 9814f3c..0c9a945 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2725,6 +2725,10 @@ void ChartView::impl_updateView( bool bCheckLockedCtrler )
//create chart view
{
+ OpenGLWindow* pWindow = mrChartModel.getOpenGLWindow();
+ if (pWindow && ChartHelper::isGL3DDiagram(mrChartModel.getFirstDiagram()))
+ pWindow->Initialize();
+
m_bViewDirty = false;
m_bViewUpdatePending = false;
createShapes();
diff --git a/include/vcl/openglwin.hxx b/include/vcl/openglwin.hxx
index 6b2e58d..cac81a6 100644
--- a/include/vcl/openglwin.hxx
+++ b/include/vcl/openglwin.hxx
@@ -33,7 +33,7 @@ public:
class VCL_DLLPUBLIC OpenGLWindow : public vcl::Window
{
public:
- OpenGLWindow(vcl::Window* pParent);
+ OpenGLWindow(vcl::Window* pParent, bool bInit = true);
virtual ~OpenGLWindow();
virtual void dispose() override;
@@ -48,6 +48,10 @@ public:
virtual void MouseMove( const MouseEvent& rMEvt ) override;
virtual void Command( const CommandEvent& rCEvt ) override;
+ bool IsInitialized() const;
+
+ void Initialize();
+
private:
std::unique_ptr<OpenGLWindowImpl> mxImpl;
IRenderer* mpRenderer;
diff --git a/vcl/source/window/openglwin.cxx b/vcl/source/window/openglwin.cxx
index 3f95894..c4a41e9 100644
--- a/vcl/source/window/openglwin.cxx
+++ b/vcl/source/window/openglwin.cxx
@@ -15,21 +15,33 @@
class OpenGLWindowImpl
{
public:
- explicit OpenGLWindowImpl(vcl::Window* pWindow);
+ explicit OpenGLWindowImpl(vcl::Window* pWindow, bool bInit);
~OpenGLWindowImpl();
OpenGLContext& getContext() { return *mxContext.get(); }
+
+ bool IsInitialized() const;
+
+ void Initialize();
+
private:
+
rtl::Reference<OpenGLContext> mxContext;
VclPtr<SystemChildWindow> mxChildWindow;
+
+ bool mbInitialized;
};
-OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow)
- : mxContext(OpenGLContext::Create())
+OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow, bool bInit)
+ : mxContext(OpenGLContext::Create()),
+ mbInitialized(bInit)
{
SystemWindowData aData = OpenGLContext::generateWinData(pWindow, false);
mxChildWindow.reset(VclPtr<SystemChildWindow>::Create(pWindow, 0, &aData));
mxChildWindow->Show();
- mxContext->init(mxChildWindow.get());
+
+ if (bInit)
+ mxContext->init(mxChildWindow.get());
+
pWindow->SetMouseTransparent(false);
}
@@ -39,9 +51,20 @@ OpenGLWindowImpl::~OpenGLWindowImpl()
mxChildWindow.disposeAndClear();
}
-OpenGLWindow::OpenGLWindow(vcl::Window* pParent):
+bool OpenGLWindowImpl::IsInitialized() const
+{
+ return mbInitialized;
+}
+
+void OpenGLWindowImpl::Initialize()
+{
+ mxContext->init(mxChildWindow.get());
+ mbInitialized = true;
+}
+
+OpenGLWindow::OpenGLWindow(vcl::Window* pParent, bool bInit):
Window(pParent, 0),
- mxImpl(new OpenGLWindowImpl(this)),
+ mxImpl(new OpenGLWindowImpl(this, bInit)),
mpRenderer(nullptr)
{
}
@@ -118,4 +141,15 @@ void OpenGLWindow::setRenderer(IRenderer* pRenderer)
mpRenderer = pRenderer;
}
+bool OpenGLWindow::IsInitialized() const
+{
+ return mxImpl->IsInitialized();
+}
+
+void OpenGLWindow::Initialize()
+{
+ if (!IsInitialized())
+ mxImpl->Initialize();
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list