summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/source/view/charttypes/GL3DBarChart.cxx14
-rw-r--r--chart2/source/view/inc/GL3DBarChart.hxx6
-rw-r--r--include/vcl/openglwin.hxx13
-rw-r--r--vcl/source/window/openglwin.cxx14
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: */