Loading...
Searching...
No Matches
Timebar.hpp
1#pragma once
2#include <score/model/Skin.hpp>
3
4#include <ossia/detail/ssize.hpp>
5
6#include <QGraphicsItem>
7#include <QPainter>
8#include <QStyleOptionGraphicsItem>
9
10#include <array>
11
12namespace Scenario
13{
14class LightBars : public QGraphicsItem
15{
16public:
17 std::vector<QLineF> positions;
18 LightBars()
19 {
20 setFlag(ItemStacksBehindParent);
21 setFlag(ItemUsesExtendedStyleOption);
22 setZValue(-9);
23 positions.resize(1);
24 }
25
26 ~LightBars() { }
27
28 QRectF boundingRect() const override
29 {
30 if(positions.empty())
31 return {};
32 return {
33 positions.front().x1(), 0, positions.back().x1() - positions.front().x1(),
34 10000};
35 }
36
37 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
38 override
39 {
40 if(positions.empty())
41 return;
42
43 painter->setRenderHint(QPainter::Antialiasing, true);
44#if defined(SCORE_DEBUG_REDRAWS)
45 {
46 QColor c;
47 c.setRedF(0.5 * double(rand()) / RAND_MAX);
48 c.setGreenF(0.5 * double(rand()) / RAND_MAX);
49 c.setBlueF(0.5 * double(rand()) / RAND_MAX);
50 c.setAlphaF(1.);
51 painter->setPen(QPen(c, 2));
52 }
53#else
54 painter->setPen(score::Skin::instance().DarkGray.main.pen_cosmetic);
55#endif
56
57 int begin = 0;
58 int end = positions.size();
59 for(int i = 0; i < positions.size(); i++)
60 {
61 auto x = positions[i].x1();
62 if(x >= option->exposedRect.left())
63 {
64 begin = i;
65 break;
66 }
67 }
68 for(int i = begin; i < positions.size(); i++)
69 {
70 auto x = positions[i].x1();
71 if(x > option->exposedRect.right())
72 {
73 end = i;
74 break;
75 }
76 else
77 {
78 positions[i].setLine(
79 x, option->exposedRect.top(), x, option->exposedRect.bottom());
80 }
81 }
82
83 if(begin < positions.size() && end - begin > 0)
84 {
85 painter->drawLines(positions.data() + begin, end - begin);
86 }
87 }
88
89 QLineF& operator[](int i)
90 {
91 if(i >= std::ssize(positions))
92 {
93 positions.resize((i + 1) * 1.2);
94 }
95 return positions[i];
96 }
97
98 void updateShapes()
99 {
100 prepareGeometryChange();
101 update();
102 }
103 int type() const override { return 90077; }
104};
105
106class LighterBars : public QGraphicsItem
107{
108public:
109 std::vector<QLineF> positions;
111 {
112 setFlag(ItemStacksBehindParent);
113 setFlag(ItemUsesExtendedStyleOption);
114 setZValue(-10);
115 positions.resize(1);
116 }
117
118 ~LighterBars() { }
119
120 QRectF boundingRect() const override
121 {
122 if(positions.empty())
123 return {};
124 return {
125 positions.front().x1(), 0, positions.back().x1() - positions.front().x1(),
126 10000};
127 }
128
129 void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
130 override
131 {
132 painter->setRenderHint(QPainter::Antialiasing, true);
133
134#if defined(SCORE_DEBUG_REDRAWS)
135 {
136 QColor c;
137 c.setRedF(0.5 * double(rand()) / RAND_MAX);
138 c.setGreenF(0.5 * double(rand()) / RAND_MAX);
139 c.setBlueF(0.5 * double(rand()) / RAND_MAX);
140 c.setAlphaF(1.);
141 painter->setPen(QPen(c, 2));
142 }
143#else
144 painter->setPen(score::Skin::instance().DarkGray.darker300.pen_cosmetic);
145#endif
146
147 int begin = 0;
148 int end = positions.size();
149 for(int i = 0; i < positions.size(); i++)
150 {
151 auto x = positions[i].x1();
152 if(x >= option->exposedRect.left())
153 {
154 begin = i;
155 break;
156 }
157 }
158 for(int i = begin; i < positions.size(); i++)
159 {
160 auto x = positions[i].x1();
161 if(x > option->exposedRect.right())
162 {
163 end = i;
164 break;
165 }
166 else
167 {
168 positions[i].setLine(
169 x, option->exposedRect.top(), x, option->exposedRect.bottom());
170 }
171 }
172
173 if(begin < positions.size() && end - begin > 0)
174 painter->drawLines(positions.data() + begin, end - begin);
175 }
176
177 QLineF& operator[](int i)
178 {
179 if(i >= std::ssize(positions))
180 {
181 positions.resize((i + 1) * 1.2);
182 }
183 return positions[i];
184 }
185
186 void updateShapes()
187 {
188 prepareGeometryChange();
189 update();
190 }
191 int type() const override { return 90078; }
192};
193
194}
Definition Timebar.hpp:15
Definition Timebar.hpp:107
Main plug-in of score.
Definition score-plugin-dataflow/Dataflow/PortItem.hpp:13