]> git.cworth.org Git - apitrace/blob - gui/graphwidget.h
266f6945a3ca6d3fb64e0bce1231abbb9fc79940
[apitrace] / gui / graphwidget.h
1 #ifndef GRAPHWIDGET_H
2 #define GRAPHWIDGET_H
3
4 #include <QPen>
5 #include <QWidget>
6 #include <QPainter>
7 #include <QLinearGradient>
8 #include "trace_profiler.hpp"
9
10 enum GraphType {
11     GraphGpu,
12     GraphCpu
13 };
14
15 class GraphWidget : public QWidget
16 {
17     Q_OBJECT
18
19 public:
20     GraphWidget(QWidget *parent = 0);
21
22     void setProfile(trace::Profile* profile, GraphType type);
23     const trace::Profile::Call* callAtPosition(const QPoint& pos);
24
25 protected:
26     virtual void mousePressEvent(QMouseEvent *e);
27     virtual void paintEvent(QPaintEvent *e);
28     virtual void mouseMoveEvent(QMouseEvent *e);
29     virtual void wheelEvent(QWheelEvent *e);
30     virtual void mouseDoubleClickEvent(QMouseEvent *e);
31     virtual void resizeEvent(QResizeEvent *e);
32
33 signals:
34     void jumpToCall(int no);
35     void viewChanged(int call, int width);
36
37 public slots:
38     void changeView(int call, int width);
39
40 private:
41     void update();
42
43     void paintVerticalAxis(QPainter& painter);
44     void paintHorizontalAxis(QPainter& painter);
45
46 private:
47     trace::Profile* m_profile;
48     GraphType m_type;
49
50     int64_t m_maxTime;
51
52     int m_minCall;
53     int m_maxCall;
54
55     int m_minCallWidth;
56     int m_maxCallWidth;
57
58     int m_call;
59     int m_callWidth;
60
61     QPoint m_mousePressPosition;
62     int m_mousePressCall;
63
64     int m_axisWidth;
65     int m_axisHeight;
66
67     int m_graphWidth;
68     int m_graphHeight;
69
70     QPen m_axisForeground;
71     QBrush m_axisBackground;
72
73     QLinearGradient m_graphGradientGpu;
74     QLinearGradient m_graphGradientCpu;
75 };
76
77 #endif // GRAPHWIDGET_H