#include <QPainter> #include <QPainterPath> #include <QMouseEvent> #include <math.h> #include "canvas.h" #include <iostream> Canvas::Canvas(QWidget *parent) : QFrame(parent) { setFrameStyle(QFrame::Box); setMouseTracking(true); type = NONE; dragging = false; s = new Scene(); } Canvas::~Canvas() { delete s; } QSize Canvas::minimumSizeHint() const { return QSize(200, 200); } QSize Canvas::sizeHint() const { return QSize(640, 480); } void Canvas::clearCanvas(void) { s->clearScene(); } void Canvas::setPrimitiveMode(int mode) { type = (PrimitiveMode) mode; } void Canvas::paintEvent(QPaintEvent *event) { QFrame::paintEvent(event); // parent class draws border QPainter painter(this); // white background (inside parent's border) painter.fillRect(QRect(1, 1, width() - 2, height() - 2), Qt::white); s->drawScene(&painter); } void Canvas::resizeEvent(QResizeEvent *event) { QFrame::resizeEvent(event); } void Canvas::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { dragging = true; QPoint currPos = event->pos(); s->handleMouseClickLeft(currPos.x(), currPos.y()); update(); } } void Canvas::mouseMoveEvent(QMouseEvent *event) { if ((event->buttons() & Qt::LeftButton) && dragging) { QPoint currPos = event->pos(); s->handleMouseHover(currPos.x(), currPos.y()); update(); } } void Canvas::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton && dragging) { dragging = false; QPoint currPos = event->pos(); s->handleMouseReleaseLeft();//currPos.x(), currPos.y()); update(); } }