Skip to content
Snippets Groups Projects
canvas.cpp 1.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • Pelotrio's avatar
    Pelotrio committed
    #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();
        }
    }