RaidenVideoRipper

Форк
0
/
timelinesliderwidget.cpp 
159 строк · 3.1 Кб
1
#include "timelinesliderwidget.h"
2
#include <QDebug>
3

4
TimelineSliderWidget::TimelineSliderWidget(
5
    int value,
6
    int maximumValue,
7
    Alignment alignment,
8
    QImage image,
9
    bool isHidden
10
    )
11
{
12
    this->isHidden = isHidden;
13
    this->value = value;
14
    this->maximumValue = maximumValue;
15
    this->alignment = alignment;
16
    this->image = image;
17
}
18

19
float TimelineSliderWidget::ratio() {
20
    auto ratio = float(value) / float(maximumValue);
21
    return ratio;
22
}
23

24
float TimelineSliderWidget::xToRatio(int x) {
25
    auto adaptedX = x;
26
    switch (alignment) {
27
    case TimelineSliderWidget::Left:
28
        adaptedX -= width / 2;
29
        break;
30
        
31
    case TimelineSliderWidget::Center:
32
        adaptedX -= width;
33
        break;
34
        
35
    case TimelineSliderWidget::Right:
36
        adaptedX -= width * 1.5;
37
        break;
38
    }
39
    auto ratio = float(adaptedX) / float(lineWidth());
40
    return ratio;
41
}
42

43
QImage TimelineSliderWidget::getImage()
44
{
45
    return image;
46
}
47

48
int TimelineSliderWidget::getValue()
49
{
50
    return value;
51
}
52

53
void TimelineSliderWidget::setValue(int value)
54
{
55
    this->value = value;
56
    this->updateRenderRectangle();
57
}
58

59
void TimelineSliderWidget::setMaximumValue(int value)
60
{
61
    this->maximumValue = value;
62
    this->updateRenderRectangle();
63
}
64

65
void TimelineSliderWidget::setParentSize(QSize parentSize)
66
{
67
    this->parentSize = parentSize;
68
    this->updateRenderRectangle();
69
}
70

71
QRect TimelineSliderWidget::getRenderRectangle() {
72
    return renderRectangle;
73
}
74

75
bool TimelineSliderWidget::hitTest(int x, int y)
76
{
77
    if (x < renderRectangle.x())
78
    {
79
        return false;
80
    }
81
    if (x > renderRectangle.x() + renderRectangle.width())
82
    {
83
        return false;
84
    }
85
    if (y < renderRectangle.y())
86
    {
87
        return false;
88
    }
89
    if (y > renderRectangle.y() + renderRectangle.height())
90
    {
91
        return false;
92
    }
93

94
    return true;
95
}
96

97
void TimelineSliderWidget::dragToX(int x){
98
    auto ratio = xToRatio(x);
99
    setValue(maximumValue * ratio);
100
}
101

102
void TimelineSliderWidget::setIsHidden(bool isHidden)
103
{
104
    this->isHidden = isHidden;
105
}
106

107
int TimelineSliderWidget::getTargetX()
108
{
109
    auto adaptedX = renderRectangle.x();
110
    switch (alignment) {
111
    case Left:
112
        return adaptedX + width;
113
    case Center:
114
        return adaptedX + width / 2;
115
    case Right:
116
        return adaptedX;
117
    }
118

119
    return adaptedX;
120
}
121

122
bool TimelineSliderWidget::getIsHidden()
123
{
124
    return isHidden;
125
}
126

127
int TimelineSliderWidget::alignRenderX(int renderX)
128
{
129
    switch (alignment) {
130
    case Left:
131
        return renderX;
132
    case Center:
133
        return renderX + width / 2;
134
    case Right:
135
        return renderX + width;
136
    }
137

138
    return renderX;
139
}
140

141
int TimelineSliderWidget::lineWidth()
142
{
143
    auto lineWidth = parentSize.width() - width * 2;
144
    return lineWidth;
145
}
146

147
void TimelineSliderWidget::updateRenderRectangle()
148
{
149
    auto ratio = float(value) / float(maximumValue);
150
    auto renderX = lineWidth() * ratio;
151
    renderX = alignRenderX(renderX);
152
    auto renderY = parentSize.height() / 2 - height / 2;
153
    renderRectangle = QRect(
154
        renderX,
155
        renderY,
156
        width,
157
        height
158
    );
159
}
160

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.