-
Notifications
You must be signed in to change notification settings - Fork 0
/
WidgetPreview.cpp
128 lines (115 loc) · 2.6 KB
/
WidgetPreview.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "WidgetPreview.hpp"
// Qt
#include <QDebug>
// GL
#include <GL/glu.h>
WidgetPreview::WidgetPreview(QWidget* parent) : QOpenGLWidget(parent)
{
_g = NULL;
_for = QColor(192, 192, 192);
_back = QColor(0, 0, 0);
}
void WidgetPreview::ortho()
{
glDisable( GL_DEPTH_TEST );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, _w, _h, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void WidgetPreview::init(QVector<Glyph>* g)
{
_g = g;
}
void WidgetPreview::initializeGL()
{
_w = width();
_h = height();
}
void WidgetPreview::resizeGL(int w, int h)
{
_w = w;
_h = h;
}
void WidgetPreview::paintGL()
{
ortho();
int i, j, k, l, cx = 4, cy = 4, gw, gh;
uint32_t scan;
glClearColor(_back.redF(), _back.greenF(), _back.blueF(), 0);
glClear(GL_COLOR_BUFFER_BIT);
if(_g && !_g->empty())
{
gw = _g->at(0).width();
gh = _g->at(0).height();
glBegin(GL_POINTS);
glColor3f(_for.redF(), _for.greenF(), _for.blueF());
for(i = 0; i < _text.length(); ++i)
{
scan = _text[i].unicode();
if(scan == '\n')
{
cx = 4;
cy += gh;
}
else
{
for(j = 0; j < _g->size(); ++j)
{
if(_g->at(j).code() == scan)
{
cx += _g->at(j).offset;
if(cx < 0)
cx = 0;
for(k = 0; k < gh; ++k)
{
for(l = 0; l < gw; ++l)
{
if(_g->at(j).check(l, k))
{
glVertex2i(cx + l, cy + k);
}
}
}
cx += gw;
if(_w - gw - 8 < cx)
{
cx = 4;
cy += gh;
}
break;
}
}
}
}
glEnd();
}
}
void WidgetPreview::changeText(QString text)
{
_text = text;
update();
}
QColor WidgetPreview::getBackground()
{
return _back;
}
QColor WidgetPreview::getForeground()
{
return _for;
}
void WidgetPreview::setBackground(QColor n)
{
if(n.isValid())
{
_back = n;
}
}
void WidgetPreview::setForeground(QColor n)
{
if(n.isValid())
{
_for = n;
}
}