]> git.mar77i.info Git - bigintmandel/blob - mandellabel.cpp
make zoom_factor part of MandelSettings
[bigintmandel] / mandellabel.cpp
1
2 // mandellabel.cpp
3
4 #include <QPainter>
5
6 #include "mandellabel.h"
7 #include "menubar.h"
8 #include "qevent.h"
9
10 MandelLabel::MandelLabel(BigintMandelWidget *parent)
11 : QLabel(parent),
12 settings(parent->get_settings()),
13 menu_bar(parent->get_menu_bar()),
14 draw_progress(-1),
15 zoom_rect_center(-1, -1) {
16 setMouseTracking(true);
17 }
18
19 static inline QRect get_rect(QSize size, QPoint pos, int zoom_factor) {
20 QSize scaled_size(size.width() / zoom_factor, size.height() / zoom_factor);
21 return QRect(
22 QPoint(
23 pos.x() - scaled_size.width() / 2,
24 pos.y() - scaled_size.height() / 2
25 ),
26 scaled_size
27 );
28 }
29
30 void MandelLabel::paintEvent(QPaintEvent *event) {
31 QPixmap pixmap;
32 QPainter qp;
33 int zoom_factor = menu_bar->get_zoom_factor();
34 bool draw_zoom_rect = (
35 zoom_factor != -1
36 && zoom_rect_center.x() != -1
37 && zoom_rect_center.y() != -1
38 );
39 pixmap = settings->get_pixmap();
40 if (draw_progress != -1 || draw_zoom_rect)
41 qp.begin(&pixmap);
42 if (draw_progress != -1) {
43 qp.setPen(Qt::GlobalColor::gray);
44 qp.drawLine(0, draw_progress, pixmap.width() - 1, draw_progress);
45 }
46 if (draw_zoom_rect) {
47 qp.setPen(Qt::GlobalColor::gray);
48 qp.drawRect(
49 get_rect(
50 pixmap.size(),
51 zoom_rect_center,
52 zoom_factor
53 )
54 );
55 }
56 if (draw_progress != -1 || draw_zoom_rect)
57 qp.end();
58 resize(pixmap.size());
59 setPixmap(pixmap);
60 QLabel::paintEvent(event);
61 }
62
63 void MandelLabel::leaveEvent(QEvent *event) {
64 zoom_rect_center = QPoint(-1, -1);
65 }
66
67 void MandelLabel::mouseMoveEvent(QMouseEvent *event) {
68 zoom_rect_center = event->pos();
69 }