• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

mcallegari / qlcplus / 14201252843

01 Apr 2025 04:43PM UTC coverage: 31.884% (-0.003%) from 31.887%
14201252843

push

github

web-flow
Merge pull request #1700 from 8-Lambda-8/efx_preview

EFX preview improvements

5 of 21 new or added lines in 3 files covered. (23.81%)

6 existing lines in 3 files now uncovered.

14705 of 46121 relevant lines covered (31.88%)

26423.33 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

61.05
/ui/src/efxpreviewarea.cpp
1
/*
2
  Q Light Controller
3
  efxpreviewarea.cpp
4

5
  Copyright (c) Heikki Junnila
6

7
  Licensed under the Apache License, Version 2.0 (the "License");
8
  you may not use this file except in compliance with the License.
9
  You may obtain a copy of the License at
10

11
      http://www.apache.org/licenses/LICENSE-2.0.txt
12

13
  Unless required by applicable law or agreed to in writing, software
14
  distributed under the License is distributed on an "AS IS" BASIS,
15
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
  See the License for the specific language governing permissions and
17
  limitations under the License.
18
*/
19

20
#include <QPaintEvent>
21
#include <QPainter>
22
#include <QDebug>
23
#include <QPen>
24

25
#include "efxpreviewarea.h"
26
#include "qlcmacros.h"
27
#include "gradient.h"
28

29
EFXPreviewArea::EFXPreviewArea(QWidget* parent)
3✔
30
    : QWidget(parent)
31
    , m_timer(this)
3✔
32
    , m_iter(0)
3✔
33
    , m_gradientBg(false)
3✔
34
    , m_bgAlpha(255)
3✔
35
{
36
    QPalette p = palette();
3✔
37
    p.setColor(QPalette::Window, p.color(QPalette::Base));
38
    setPalette(p);
3✔
39

40
    connect(&m_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
3✔
41
}
3✔
42

43
EFXPreviewArea::~EFXPreviewArea()
3✔
44
{
45
}
6✔
46

47
void EFXPreviewArea::setPolygon(const QPolygonF& polygon)
2✔
48
{
49
    m_original = polygon;
50
    m_scaled = scale(m_original, size());
2✔
51
}
2✔
52

53
int EFXPreviewArea::polygonsCount() const
×
54
{
55
    return m_original.size();
×
56
}
57

58
void EFXPreviewArea::setFixturePolygons(const QVector<QPolygonF> &fixturePoints)
×
59
{
60
    m_originalFixturePoints.resize(fixturePoints.size());
×
61
    m_fixturePoints.resize(fixturePoints.size());
×
62

63
    for (int i = 0; i < m_fixturePoints.size(); ++i)
×
64
    {
65
        m_originalFixturePoints[i] = QPolygonF(fixturePoints[i]);
×
66
        m_fixturePoints[i] = scale(m_originalFixturePoints[i], size());
×
67
    }
68
}
×
69

70
void EFXPreviewArea::draw(int timerInterval)
1✔
71
{
72
    m_timer.stop();
1✔
73

74
    m_iter = 0;
1✔
75
    m_timer.start(timerInterval);
1✔
76
}
1✔
77

78
void EFXPreviewArea::slotTimeout()
×
79
{
80
    if (m_iter < m_scaled.size())
×
81
        m_iter++;
×
82

83
    repaint();
×
84
}
×
85

86
QPolygonF EFXPreviewArea::scale(const QPolygonF& poly, const QSize& target)
5✔
87
{
88
    QPolygonF scaled;
89
    for (int i = 0; i < poly.size(); i++)
20✔
90
    {
91
        QPointF pt = poly.at(i);
15✔
92
        pt.setX((int) SCALE(qreal(pt.x()), qreal(0), qreal(255), qreal(0), qreal(target.width())));
15✔
93
        pt.setY((int) SCALE(qreal(pt.y()), qreal(0), qreal(255), qreal(0), qreal(target.height())));
15✔
94
        scaled << pt;
15✔
95
    }
96

97
    return scaled;
5✔
98
}
99

100
void EFXPreviewArea::resizeEvent(QResizeEvent* e)
3✔
101
{
102
    m_scaled = scale(m_original, e->size());
3✔
103

104
    for (int i = 0; i < m_fixturePoints.size(); ++i)
3✔
105
        m_fixturePoints[i] = scale(m_originalFixturePoints[i], e->size());
×
106

107
    QWidget::resizeEvent(e);
3✔
108
}
3✔
109

110
void EFXPreviewArea::paintEvent(QPaintEvent* e)
2✔
111
{
112
    QWidget::paintEvent(e);
2✔
113

114
    QPainter painter(this);
2✔
115
    QPen pen;
2✔
116
    QPointF point;
2✔
117
    QColor color = palette().color(QPalette::Base);
2✔
118
    if (m_gradientBg)
2✔
119
        painter.drawImage(painter.window(), Gradient::getRGBGradient(256, 256));
×
120
    else
121
    {
122
        color.setAlpha(m_bgAlpha);
2✔
123
        painter.fillRect(rect(), color);
2✔
124
    }
125

126
    /* Crosshairs */
127
    color = palette().color(QPalette::Mid);
4✔
128
    painter.setPen(color);
2✔
129
    // Do division by two instead with a bitshift to prevent rounding
130
    painter.drawLine(width() >> 1, 0, width() >> 1, height());
2✔
131
    painter.drawLine(0, height() >> 1, width(), height() >> 1);
2✔
132

133
    painter.setRenderHint(QPainter::Antialiasing);
2✔
134
    painter.setRenderHint(QPainter::TextAntialiasing);
2✔
135

136
    /* Plain points with text color */
137
    color = palette().color(QPalette::Text);
4✔
138
    if (m_gradientBg)
2✔
NEW
139
        pen.setColor(Qt::black);
×
140
    else
141
        pen.setColor(color);
2✔
142
    pen.setWidth(2);
2✔
143
    painter.setPen(pen);
2✔
144
    painter.drawPolygon(m_scaled);
2✔
145

146
    // Draw the points from the point array
147
    if (m_iter < m_scaled.size() && m_iter >= 0)
2✔
148
    {
149
        painter.setBrush(Qt::white);
×
150
        pen.setColor(Qt::black);
×
NEW
151
        painter.setPen(pen);
×
152

153
        // drawing fixture positions from the end,
154
        // so that lower numbers are on top
155
        double textSize = 16;
NEW
156
        QFont font = painter.font();
×
NEW
157
        font.setPixelSize(textSize);
×
NEW
158
        font.setWeight(QFont::Bold);
×
NEW
159
        painter.setFont(font);
×
UNCOV
160
        for (int i = m_fixturePoints.size() - 1; i >= 0; --i)
×
161
        {
162
            point = m_fixturePoints.at(i).at(m_iter);
×
NEW
163
            painter.drawEllipse(point, 10, 10);
×
NEW
164
            painter.drawText(QRectF(point.x() - textSize / 2, point.y() - textSize / 2,
×
165
                                    textSize, textSize),
NEW
166
                             Qt::AlignCenter, QString::number(i + 1));
×
167
        }
UNCOV
168
    }
×
169
    else
170
    {
171
        //Change old behaviour from stop to restart
172
        restart();
2✔
173
    }
174
}
2✔
175

176
void EFXPreviewArea::restart()
2✔
177
{
178
    m_iter = 0;
2✔
179
}
2✔
180

181
void EFXPreviewArea::showGradientBackground(bool enable)
×
182
{
183
    m_gradientBg = enable;
×
184
    repaint();
×
185
}
×
186

187
void EFXPreviewArea::setBackgroundAlpha(int alpha)
×
188
{
189
    m_bgAlpha = alpha;
×
190
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc