Pencil2D Animation
Download Community News Docs Contribute
  • Overview
  • Articles
  • Code
  •  
  • Class List
  • Class Index
  • Class Hierarchy
  • Class Members
  • File List
Loading...
Searching...
No Matches
  • core_lib
  • src
canvascursorpainter.cpp
1/*
2
3Pencil2D - Traditional Animation Software
4Copyright (C) 2005-2007 Patrick Corrieri & Pascal Naidon
5Copyright (C) 2012-2020 Matthew Chiawen Chang
6
7This program is free software; you can redistribute it and/or
8modify it under the terms of the GNU General Public License
9as published by the Free Software Foundation; version 2 of the License.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16*/
17#include "canvascursorpainter.h"
18
19#include <QPainter>
20#include <QtMath>
21
22CanvasCursorPainter::CanvasCursorPainter()
23{
24 setupPen();
25}
26
27void CanvasCursorPainter::setupPen()
28{
29 mCursorPen = QPen(Qt::gray);
30 mCursorPen.setWidthF(1);
31 mCursorPen.setCosmetic(true);
32}
33
34void CanvasCursorPainter::paint(QPainter& painter, const QRect& blitRect)
35{
36 if (mOptions.showCursor) {
37 paintWidthCursor(painter, blitRect, mOptions.circleRect);
38 mIsDirty = true;
39 }
40}
41
42void CanvasCursorPainter::preparePainter(const CanvasCursorPainterOptions& painterOptions)
43{
44 mOptions = painterOptions;
45}
46
47void CanvasCursorPainter::paintWidthCursor(QPainter& painter, const QRect& blitRect, const QRectF& widthCircleBounds)
48{
49 painter.save();
50
51 painter.setClipRect(painter.transform().inverted().mapRect(blitRect));
52 painter.setPen(mCursorPen);
53
54 painter.setCompositionMode(QPainter::RasterOp_SourceXorDestination);
55
56 // Only draw the cross when the width is bigger than the cross itself
57 if (widthCircleBounds.width() > 8 && mOptions.showCross) {
58 painter.save();
59
60 const QPointF& pos = painter.transform().mapRect(widthCircleBounds).center();
61 painter.resetTransform();
62 painter.drawLine(QPointF(pos.x() - 2, pos.y()), QPointF(pos.x() + 2, pos.y()));
63 painter.drawLine(QPointF(pos.x(), pos.y() - 2), QPointF(pos.x(), pos.y() + 2));
64 painter.restore();
65 }
66
67 painter.drawEllipse(widthCircleBounds);
68 painter.restore();
69
70 mDirtyRect = widthCircleBounds.toAlignedRect();
71}
72
73
74void CanvasCursorPainter::clearDirty()
75{
76 mDirtyRect = QRect();
77 mIsDirty = false;
78}
CanvasCursorPainter::paintWidthCursor
void paintWidthCursor(QPainter &painter, const QRect &blitRect, const QRectF &widthCircleBounds)
precision circular cursor: used for drawing a cursor on the canvas.
Definition: canvascursorpainter.cpp:47
QPainter
QPainter::RasterOp_SourceXorDestination
RasterOp_SourceXorDestination
QPainter::drawEllipse
void drawEllipse(const QRectF &rectangle)
QPainter::drawLine
void drawLine(const QLineF &line)
QPainter::resetTransform
void resetTransform()
QPainter::restore
void restore()
QPainter::save
void save()
QPainter::setClipRect
void setClipRect(const QRectF &rectangle, Qt::ClipOperation operation)
QPainter::setCompositionMode
void setCompositionMode(QPainter::CompositionMode mode)
QPainter::setPen
void setPen(const QColor &color)
QPainter::transform
const QTransform & transform() const const
QPen
QPen::setCosmetic
void setCosmetic(bool cosmetic)
QPen::setWidthF
void setWidthF(qreal width)
QPointF
QPointF::x
qreal x() const const
QPointF::y
qreal y() const const
QRect
QRect::center
QPoint center() const const
QRectF
QRectF::toAlignedRect
QRect toAlignedRect() const const
QRectF::width
qreal width() const const
Qt::gray
gray
QTransform::inverted
QTransform inverted(bool *invertible) const const
QTransform::mapRect
QRect mapRect(const QRect &rectangle) const const
CanvasCursorPainterOptions
Definition: canvascursorpainter.h:25
Generated on Fri Dec 19 2025 07:54:21 for Pencil2D by doxygen 1.9.6 based on revision 7fd8cd9e03f2d31750e199ecec202e5c0f30e532