diff options
-rw-r--r-- | chart2/source/view/charttypes/GL3DBarChart.cxx | 14 | ||||
-rw-r--r-- | chart2/source/view/inc/GL3DBarChart.hxx | 6 | ||||
-rw-r--r-- | include/vcl/openglwin.hxx | 13 | ||||
-rw-r--r-- | vcl/source/window/openglwin.cxx | 14 |
4 files changed, 43 insertions, 4 deletions
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index a5d4a36bcee5..c164bd27ee24 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -33,10 +33,13 @@ GL3DBarChart::GL3DBarChart( mrWindow(rWindow), mrCatProvider(rCatProvider) { + mrWindow.setRenderer(this); + mpRenderer->init(); } GL3DBarChart::~GL3DBarChart() { + mrWindow.setRenderer(NULL); } void GL3DBarChart::create3DShapes() @@ -166,7 +169,6 @@ void GL3DBarChart::render() { mrWindow.getContext()->makeCurrent(); Size aSize = mrWindow.GetSizePixel(); - mpRenderer->init(); mpRenderer->SetSize(aSize); mrWindow.getContext()->setWinSize(aSize); for(boost::ptr_vector<opengl3D::Renderable3DObject>::iterator itr = maShapes.begin(), @@ -178,6 +180,16 @@ void GL3DBarChart::render() mrWindow.getContext()->swapBuffers(); } +void GL3DBarChart::update() +{ + render(); +} + +void GL3DBarChart::clickedAt(const Point& ) +{ + +} + } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 7a1733e1eae3..7c1fc511ef2d 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -29,7 +29,7 @@ class OpenGL3DRenderer; } -class GL3DBarChart : public GL3DPlotterBase +class GL3DBarChart : public GL3DPlotterBase, public IRenderer { public: GL3DBarChart( @@ -43,6 +43,10 @@ public: virtual void render() SAL_OVERRIDE; + virtual void update() SAL_OVERRIDE; + + virtual void clickedAt(const Point& rPos) SAL_OVERRIDE; + private: css::uno::Reference<css::chart2::XChartType> mxChartType; const boost::ptr_vector<VDataSeries>& maDataSeries; diff --git a/include/vcl/openglwin.hxx b/include/vcl/openglwin.hxx index b766f05a0fc5..e9b823e6a15a 100644 --- a/include/vcl/openglwin.hxx +++ b/include/vcl/openglwin.hxx @@ -18,6 +18,14 @@ class OpenGLContext; class OpenGLWindowImpl; +class VCLOPENGL_DLLPUBLIC IRenderer +{ +public: + virtual ~IRenderer() {} + virtual void update() = 0; + virtual void clickedAt(const Point& rPos) = 0; +}; + // pImpl Pattern to avoid linking against OpenGL libs when using the class without the context class VCLOPENGL_DLLPUBLIC OpenGLWindow : public SystemChildWindow { @@ -26,11 +34,14 @@ public: virtual ~OpenGLWindow(); OpenGLContext* getContext(); - virtual void Paint(const Rectangle&) SAL_OVERRIDE {} + void setRenderer(IRenderer* pRenderer); + + virtual void Paint(const Rectangle&) SAL_OVERRIDE; virtual void MouseButtonDown( const MouseEvent& rMEvt ) SAL_OVERRIDE; private: boost::scoped_ptr<OpenGLWindowImpl> mpImpl; + IRenderer* mpRenderer; }; #endif diff --git a/vcl/source/window/openglwin.cxx b/vcl/source/window/openglwin.cxx index 77ab2d9ea82d..c1716b723af6 100644 --- a/vcl/source/window/openglwin.cxx +++ b/vcl/source/window/openglwin.cxx @@ -32,7 +32,8 @@ OpenGLContext* OpenGLWindowImpl::getContext() OpenGLWindow::OpenGLWindow(Window* pParent): SystemChildWindow(pParent, 0), - mpImpl(new OpenGLWindowImpl(this)) + mpImpl(new OpenGLWindowImpl(this)), + mpRenderer(NULL) { } @@ -45,6 +46,12 @@ OpenGLContext* OpenGLWindow::getContext() return mpImpl->getContext(); } +void OpenGLWindow::Paint(const Rectangle&) +{ + if(mpRenderer) + mpRenderer->update(); +} + void OpenGLWindow::MouseButtonDown( const MouseEvent& rMEvt ) { Point aPoint = rMEvt.GetPosPixel(); @@ -53,4 +60,9 @@ void OpenGLWindow::MouseButtonDown( const MouseEvent& rMEvt ) SAL_WARN("vcl.opengl", aColor.GetColor()); } +void OpenGLWindow::setRenderer(IRenderer* pRenderer) +{ + mpRenderer = pRenderer; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |