summaryrefslogtreecommitdiffstats
path: root/src/charts/glwidget_p.h
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2016-08-19 15:16:32 +0300
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2016-08-24 10:37:18 +0000
commit8a4f42d88b32747e0c222b06638b8f2aef4d9701 (patch)
tree782957ffd4cdcab12cbcba0ca241bd7bd2d54569 /src/charts/glwidget_p.h
parentd43d429ea710b1885719b131b2acac42cd955ccb (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.h23
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