23 #include <QGridLayout>
25 #include <QDoubleValidator>
26 #include <QHBoxLayout>
32 setFixedSize(width, height + 30);
33 QVBoxLayout* vbox =
new QVBoxLayout;
36 vbox->addWidget(
view, 0, Qt::AlignLeft | Qt::AlignTop);
37 QHBoxLayout* hbox =
new QHBoxLayout;
38 vbox->addLayout(hbox);
41 float xmin, xmax, ymin, ymax,
z;
43 scale =
new QLineEdit();
44 QDoubleValidator* valValidator =
new QDoubleValidator(0.0, 10000000.0, 6,
scale);
45 scale->setValidator(valValidator);
46 scale->setValidator(valValidator);
53 hbox->addWidget(
new QLabel(
"Width"), 0);
54 hbox->addWidget(
scale, 0);
58 float xmin, xmax, ymin, ymax,
z;
60 float xdiff = xmax - xmin, ydiff = ymax - ymin;
61 float xcenter = .5 * (xmax + xmin), ycenter = .5 * (ymin + ymax);
62 float newScale = atof(
scale->text().toStdString().c_str());
64 float aspect = ydiff / xdiff;
66 xmin = xcenter - newScale;
67 xmax = xcenter + newScale;
68 ymin = ycenter - aspect * newScale;
69 ymax = ycenter + aspect * newScale;
74 float xmin, xmax, ymin, ymax,
z;
76 scale->setText(QString(
"%1").arg(.5 * (xmax - xmin)));
88 : QGLWidget(parent), widget(widget), _image(NULL), _width(width), _height(height), scaling(false),
90 this->setFixedSize(width, height);
96 setCursor(Qt::OpenHandCursor);
121 for (
int row = 0; row <
_height; ++row) {
122 for (
int col = 0; col <
_width; ++col) {
132 if (event->button() == Qt::MidButton) {
133 setCursor(Qt::ClosedHandCursor);
136 if (event->button() == Qt::RightButton) {
137 setCursor(Qt::SizeAllCursor);
144 if (event->button() == Qt::LeftButton) emit
clicked();
146 setCursor(Qt::OpenHandCursor);
149 int x =
event->x(),
y =
event->y();
161 float offset = (fabs(offsetx) > fabs(offsety)) ? offsetx : offsety;
166 float scale_factor =
pow(10.
f, -offset / (
xmax -
xmin));
167 width *= scale_factor;
168 height *= scale_factor;
169 setWindow(xcenter - width, xcenter + width, ycenter - height, ycenter + height,
z);
192 for (
int row = 0; row <
_height; row++,
y +=
dy, v += dv) {
196 for (
int col = 0; col <
_width; col++,
x +=
dy, u += du) {
211 glMatrixMode(GL_PROJECTION);
214 glMatrixMode(GL_MODELVIEW);
217 glDisable(GL_DEPTH_TEST);
219 glClearColor(1, 0, 0, 1);
220 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);