Blame view

app/gui/oven_control/canvas.cpp 2.02 KB
e567eba26   김태훈   터치 테스트 윈도우 구현
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
  #include "canvas.h"
  
  #include <QMouseEvent>
  #include <QPainter>
  
  Canvas::Canvas(QWidget *parent) : QWidget(parent)
  {
      setAttribute(Qt::WA_StaticContents);
      scribbling = false;
      myPenWidth = 1;
      myPenColor = Qt::blue;
  }
  
  void Canvas::clearImage()
  {
      image.fill(qRgb(255, 255, 255));
      update();
  }
  
  void Canvas::mousePressEvent(QMouseEvent *event)
  {
      if (event->button() == Qt::LeftButton) {
          lastPoint = event->pos();
          scribbling = true;
      }
  }
  
  void Canvas::mouseMoveEvent(QMouseEvent *event)
  {
      if ((event->buttons() & Qt::LeftButton) && scribbling)
          drawLineTo(event->pos());
  }
  
  void Canvas::mouseReleaseEvent(QMouseEvent *event)
  {
      if (event->button() == Qt::LeftButton && scribbling) {
          drawLineTo(event->pos());
          scribbling = false;
      }
  }
  
  void Canvas::paintEvent(QPaintEvent *event)
  {
      QPainter painter(this);
      QRect dirtyRect = event->rect();
      painter.drawImage(dirtyRect, image, dirtyRect);
  }
  
  void Canvas::resizeEvent(QResizeEvent *event)
  {
      if (width() > image.width() || height() > image.height()) {
          int newWidth = qMax(width() + 128, image.width());
          int newHeight = qMax(height() + 128, image.height());
          resizeImage(&image, QSize(newWidth, newHeight));
          update();
      }
      QWidget::resizeEvent(event);
  }
  
  void Canvas::drawLineTo(const QPoint &endPoint)
  {
      QPainter painter(&image);
      painter.setPen(QPen(myPenColor, myPenWidth, Qt::SolidLine, Qt::RoundCap,
                          Qt::RoundJoin));
      painter.drawLine(lastPoint, endPoint);
  
      int rad = (myPenWidth / 2) + 2;
      update(QRect(lastPoint, endPoint).normalized()
                                       .adjusted(-rad, -rad, +rad, +rad));
      lastPoint = endPoint;
  }
  
  void Canvas::resizeImage(QImage *image, const QSize &newSize)
  {
      if (image->size() == newSize)
          return;
  
      QImage newImage(newSize, QImage::Format_RGB32);
      newImage.fill(qRgb(255, 255, 255));
      QPainter painter(&newImage);
      painter.drawImage(QPoint(0, 0), *image);
      *image = newImage;
  }