Krita Source Code Documentation
Loading...
Searching...
No Matches
kcanvaspreview.cc
Go to the documentation of this file.
1/*
2 *
3 * SPDX-FileCopyrightText: 2009 Edward Apap <schumifer@hotmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#include "kcanvaspreview.h"
9
10#include <QMouseEvent>
11#include <QPainter>
12#include <QCursor>
13
14KCanvasPreview::KCanvasPreview(QWidget * parent) : QWidget(parent), m_dragging(false)
15{
16 setMouseTracking(true);
17}
18
22
23void KCanvasPreview::paintEvent(QPaintEvent *)
24{
25 QPainter p(this);
26
27 double scale = scalingFactor();
28
29 m_xCanvasOffset = (width() - scale * m_width) / 2.0;
30 m_yCanvasOffset = (height() - scale * m_height) / 2.0;
31
32 p.fillRect(m_xCanvasOffset, m_yCanvasOffset, m_width * scale, m_height * scale, QBrush(Qt::white));
33 p.setPen(QPen(Qt::red));
34 p.drawRect(m_xCanvasOffset + m_xOffset * scale, m_yCanvasOffset + m_yOffset * scale, m_imageWidth * scale, m_imageHeight * scale);
35}
36
37void KCanvasPreview::mousePressEvent(QMouseEvent *event)
38{
39 if (isInRegion(event->pos())) {
40 m_dragging = true;
41 m_prevDragPoint = event->pos();
42 }
43}
44
46{
47 m_dragging = false;
48}
49
50void KCanvasPreview::mouseMoveEvent(QMouseEvent *event)
51{
52 if (m_dragging) {
53 // calculate new image offset
54 double scale = scalingFactor();
55 int newXOffset , newYOffset;
56 if(!xOffsetLocked()) {
57 newXOffset = ((event->pos().x() - m_prevDragPoint.x()) / scale) + m_xOffset;
58 }
59 if(!yOffsetLocked()) {
60 newYOffset = ((event->pos().y() - m_prevDragPoint.y()) / scale) + m_yOffset;
61 }
62 m_prevDragPoint = event->pos();
63 if(!xOffsetLocked()) {
64 Q_EMIT sigModifiedXOffset(newXOffset);
65 }
66 if(!yOffsetLocked()) {
67 Q_EMIT sigModifiedYOffset(newYOffset);
68 }
69 } else {
70 QCursor cursor;
71
72 if (isInRegion(event->pos())) {
73 cursor.setShape(Qt::SizeAllCursor);
74 } else {
75 cursor.setShape(Qt::ArrowCursor);
76 }
77
78 setCursor(cursor);
79 }
80}
81
83{
84 double scale = scalingFactor();
85
86 if ((point.x() >= (m_xOffset * scale) + m_xCanvasOffset) && (point.x() < ((m_xOffset + m_imageWidth) * scale) + m_xCanvasOffset) &&
87 (point.y() >= (m_yOffset * scale) + m_yCanvasOffset) && (point.y() < ((m_yOffset + m_imageHeight) * scale) + m_yCanvasOffset)) {
88 return true;
89 }
90
91 return false;
92}
93
95{
96 // take into account offset frame size to show when the canvas has been shrunk
97 const int maxHeight = (m_height > m_imageHeight) ? m_height : m_imageHeight;
98 const int maxWidth = (m_width > m_imageWidth) ? m_width : m_imageWidth;
99
100 const double xScale = (double)(height() - 1) / maxHeight;
101 const double yScale = (double)(width() - 1) / maxWidth;
102
103 return (xScale < yScale) ? xScale : yScale;
104}
105
106void KCanvasPreview::setImageSize(qint32 w, qint32 h)
107{
108 m_imageWidth = w;
109 m_imageHeight = h;
110
111 update();
112}
113
114void KCanvasPreview::setCanvasSize(qint32 w, qint32 h)
115{
116 m_width = w;
117 m_height = h;
118
119 update();
120}
121
122void KCanvasPreview::setImageOffset(qint32 x, qint32 y)
123{
124 m_xOffset = x;
125 m_yOffset = y;
126
127 update();
128}
130{
131 return m_xOffsetLocked;
132}
138{
139 return m_yOffsetLocked;
140}
float value(const T *src, size_t ch)
const Params2D p
bool isInRegion(QPoint point)
bool xOffsetLocked() const
void setImageOffset(qint32 x, qint32 y)
void setCanvasSize(qint32 w, qint32 h)
void paintEvent(QPaintEvent *) override
bool yOffsetLocked() const
KCanvasPreview(QWidget *parent=0)
~KCanvasPreview() override
double scalingFactor()
void mouseMoveEvent(QMouseEvent *event) override
void mouseReleaseEvent(QMouseEvent *) override
void setImageSize(qint32 w, qint32 h)
void sigModifiedXOffset(int)
void sigModifiedYOffset(int)
void setxOffsetLock(bool)
void setyOffsetLock(bool)
void mousePressEvent(QMouseEvent *event) override