RaidenVideoRipper
/
timelinesliderwidget.cpp
159 строк · 3.1 Кб
1#include "timelinesliderwidget.h"
2#include <QDebug>
3
4TimelineSliderWidget::TimelineSliderWidget(
5int value,
6int maximumValue,
7Alignment alignment,
8QImage image,
9bool isHidden
10)
11{
12this->isHidden = isHidden;
13this->value = value;
14this->maximumValue = maximumValue;
15this->alignment = alignment;
16this->image = image;
17}
18
19float TimelineSliderWidget::ratio() {
20auto ratio = float(value) / float(maximumValue);
21return ratio;
22}
23
24float TimelineSliderWidget::xToRatio(int x) {
25auto adaptedX = x;
26switch (alignment) {
27case TimelineSliderWidget::Left:
28adaptedX -= width / 2;
29break;
30
31case TimelineSliderWidget::Center:
32adaptedX -= width;
33break;
34
35case TimelineSliderWidget::Right:
36adaptedX -= width * 1.5;
37break;
38}
39auto ratio = float(adaptedX) / float(lineWidth());
40return ratio;
41}
42
43QImage TimelineSliderWidget::getImage()
44{
45return image;
46}
47
48int TimelineSliderWidget::getValue()
49{
50return value;
51}
52
53void TimelineSliderWidget::setValue(int value)
54{
55this->value = value;
56this->updateRenderRectangle();
57}
58
59void TimelineSliderWidget::setMaximumValue(int value)
60{
61this->maximumValue = value;
62this->updateRenderRectangle();
63}
64
65void TimelineSliderWidget::setParentSize(QSize parentSize)
66{
67this->parentSize = parentSize;
68this->updateRenderRectangle();
69}
70
71QRect TimelineSliderWidget::getRenderRectangle() {
72return renderRectangle;
73}
74
75bool TimelineSliderWidget::hitTest(int x, int y)
76{
77if (x < renderRectangle.x())
78{
79return false;
80}
81if (x > renderRectangle.x() + renderRectangle.width())
82{
83return false;
84}
85if (y < renderRectangle.y())
86{
87return false;
88}
89if (y > renderRectangle.y() + renderRectangle.height())
90{
91return false;
92}
93
94return true;
95}
96
97void TimelineSliderWidget::dragToX(int x){
98auto ratio = xToRatio(x);
99setValue(maximumValue * ratio);
100}
101
102void TimelineSliderWidget::setIsHidden(bool isHidden)
103{
104this->isHidden = isHidden;
105}
106
107int TimelineSliderWidget::getTargetX()
108{
109auto adaptedX = renderRectangle.x();
110switch (alignment) {
111case Left:
112return adaptedX + width;
113case Center:
114return adaptedX + width / 2;
115case Right:
116return adaptedX;
117}
118
119return adaptedX;
120}
121
122bool TimelineSliderWidget::getIsHidden()
123{
124return isHidden;
125}
126
127int TimelineSliderWidget::alignRenderX(int renderX)
128{
129switch (alignment) {
130case Left:
131return renderX;
132case Center:
133return renderX + width / 2;
134case Right:
135return renderX + width;
136}
137
138return renderX;
139}
140
141int TimelineSliderWidget::lineWidth()
142{
143auto lineWidth = parentSize.width() - width * 2;
144return lineWidth;
145}
146
147void TimelineSliderWidget::updateRenderRectangle()
148{
149auto ratio = float(value) / float(maximumValue);
150auto renderX = lineWidth() * ratio;
151renderX = alignRenderX(renderX);
152auto renderY = parentSize.height() / 2 - height / 2;
153renderRectangle = QRect(
154renderX,
155renderY,
156width,
157height
158);
159}
160