/* * mandellabel.cpp * * This file is covered by the LICENSE file in the root of this project. */ #include #include "mandellabel.h" #include "qevent.h" MandelLabel::MandelLabel(BigintMandelWidget *parent) : QLabel(parent), settings(parent->get_settings()), draw_progress(-1), zoom_rect_center(-1, -1) { setMouseTracking(true); } static inline QRect get_rect(QSize size, QPoint pos, int zoom_factor) { QSize scaled_size(size.width() / zoom_factor, size.height() / zoom_factor); return QRect( QPoint( pos.x() - scaled_size.width() / 2, pos.y() - scaled_size.height() / 2 ), scaled_size ); } void MandelLabel::paintEvent(QPaintEvent *event) { QPixmap pixmap; QPainter qp; int zoom_factor = settings->get_zoom_factor(); bool draw_zoom_rect = ( zoom_factor != -1 && zoom_rect_center.x() != -1 && zoom_rect_center.y() != -1 ); pixmap = settings->get_pixmap(); if (draw_progress != -1 || draw_zoom_rect) { qp.begin(&pixmap); if (draw_progress != -1) { qp.setPen(Qt::GlobalColor::gray); qp.drawLine(0, draw_progress, pixmap.width() - 1, draw_progress); } if (draw_zoom_rect) { qp.setPen(Qt::GlobalColor::gray); qp.drawRect( get_rect( pixmap.size(), zoom_rect_center, zoom_factor ) ); } qp.end(); } resize(pixmap.size()); setPixmap(pixmap); QLabel::paintEvent(event); } void MandelLabel::leaveEvent(QEvent *event) { zoom_rect_center = QPoint(-1, -1); } void MandelLabel::mouseMoveEvent(QMouseEvent *event) { zoom_rect_center = event->pos(); }