diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-08-19 15:16:32 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2016-08-24 10:37:18 +0000 |
commit | 8a4f42d88b32747e0c222b06638b8f2aef4d9701 (patch) | |
tree | 782957ffd4cdcab12cbcba0ca241bd7bd2d54569 /src/charts/glwidget_p.h | |
parent | d43d429ea710b1885719b131b2acac42cd955ccb (diff) |
Add mouse events support for OpenGL accelerated series
On QML side, the mouse events for accelerated series work
asynchronously, as the rendering is typically done in
a different thread.
Change-Id: I08c478768b40ed90b34b0904b7a3e74e315c3caa
Reviewed-by: Mika Salmela <mika.salmela@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/charts/glwidget_p.h')
-rw-r--r-- | src/charts/glwidget_p.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/charts/glwidget_p.h b/src/charts/glwidget_p.h index 1ec0fd3d..f80575bf 100644 --- a/src/charts/glwidget_p.h +++ b/src/charts/glwidget_p.h @@ -46,9 +46,11 @@ #include <QtGui/QOpenGLFunctions> #include <QtGui/QOpenGLVertexArrayObject> #include <QtGui/QOpenGLBuffer> +#include <QtGui/QOpenGLFramebufferObject> #include <QtCore/QHash> #include <QtCharts/QAbstractSeries> #include <QtCharts/QXYSeries> +#include <QtCharts/QChart> QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram) @@ -61,7 +63,7 @@ class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions Q_OBJECT public: - GLWidget(GLXYSeriesDataManager *xyDataManager, QGraphicsView *parent = 0); + GLWidget(GLXYSeriesDataManager *xyDataManager, QChart *chart, QGraphicsView *parent = 0); ~GLWidget(); bool needsReset() const; @@ -74,8 +76,17 @@ protected: void initializeGL() Q_DECL_OVERRIDE; void paintGL() Q_DECL_OVERRIDE; void resizeGL(int width, int height) Q_DECL_OVERRIDE; + void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE; + void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE; private: + QXYSeries *findSeriesAtEvent(QMouseEvent *event); + void render(bool selection); + void recreateSelectionFbo(); + QXYSeries *chartSeries(const QXYSeries *cSeries); + QOpenGLShaderProgram *m_program; int m_shaderAttribLoc; int m_colorUniformLoc; @@ -89,6 +100,16 @@ private: GLXYSeriesDataManager *m_xyDataManager; bool m_antiAlias; QGraphicsView *m_view; + QOpenGLFramebufferObject *m_selectionFbo; + QSize m_fboSize; + QVector<const QXYSeries *> m_selectionVector; + QChart *m_chart; + bool m_recreateSelectionFbo; + bool m_selectionRenderNeeded; + QPoint m_mousePressPos; + bool m_mousePressed; + QXYSeries *m_lastPressSeries; + QXYSeries *m_lastHoverSeries; }; QT_CHARTS_END_NAMESPACE |