Engauge Digitizer
2
Toggle main menu visibility
Loading...
Searching...
No Matches
Cursor
CursorFactory.cpp
Go to the documentation of this file.
1
/******************************************************************************************************
2
* (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3
* under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4
* LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5
******************************************************************************************************/
6
7
#include "
CursorFactory.h
"
8
#include "
CursorSize.h
"
9
#include "
DocumentModelDigitizeCurve.h
"
10
#include <QBitmap>
11
#include <QPainter>
12
#include <QPixmap>
13
14
CursorFactory::CursorFactory
()
15
{
16
}
17
18
QCursor
CursorFactory::generate
(
const
DocumentModelDigitizeCurve
&modelDigitizeCurve)
const
19
{
20
// To prevent hideous drawing errors when the line is thicker, we
21
// leave a padding region around the outside equal in size to the line width
22
int
innerRadius = modelDigitizeCurve.
cursorInnerRadius
();
23
int
size =
CursorSizeToPixels
(modelDigitizeCurve.
cursorSize
());
24
int
halfSize = size / 2;
25
int
lineWidth = modelDigitizeCurve.
cursorLineWidth
();
26
int
halfLineWidth = lineWidth / 2;
27
28
if
(modelDigitizeCurve.
cursorStandardCross
()) {
29
30
// Standard cursor
31
return
QCursor (Qt::CrossCursor);
32
33
}
else
{
34
35
// Custom cursor
36
const
int
BACKGROUND_COLOR = Qt::white, FOREGROUND_COLOR = Qt::black;
37
38
// Cursor is created with pic image (which has nontrivial pen) masked by picMask image
39
// (which has single color pen)
40
QPixmap picMask (size,
41
size);
42
QPainter picMaskPaint (&picMask);
43
picMask.fill (QColor (BACKGROUND_COLOR));
44
45
QPen pen (QBrush (FOREGROUND_COLOR),
46
modelDigitizeCurve.
cursorLineWidth
());
47
picMaskPaint.setPen (pen);
48
49
picMaskPaint.drawLine (QPointF (halfSize,
50
halfSize - innerRadius - halfLineWidth),
51
QPointF (halfSize,
52
lineWidth));
// Up
53
picMaskPaint.drawLine (QPointF (halfSize - innerRadius - halfLineWidth,
54
halfSize),
55
QPointF (lineWidth,
56
halfSize));
// Left
57
picMaskPaint.drawLine (QPointF (halfSize,
58
halfSize + innerRadius + halfLineWidth),
59
QPointF (halfSize,
60
size - 1 - lineWidth));
// Down
61
picMaskPaint.drawLine (QPointF (halfSize + innerRadius + halfLineWidth,
62
halfSize),
63
QPointF (size - 1 - lineWidth,
64
halfSize));
// Right
65
66
QPixmap pic (size,
67
size);
68
pic.fill (QColor (FOREGROUND_COLOR));
69
70
return
QCursor (pic.createMaskFromColor(QColor (BACKGROUND_COLOR)),
71
picMask.createMaskFromColor(QColor (BACKGROUND_COLOR)));
72
}
73
}
CursorFactory.h
CursorSizeToPixels
int CursorSizeToPixels(CursorSize cursorSize)
Definition
CursorSize.cpp:11
CursorSize.h
DocumentModelDigitizeCurve.h
CursorFactory::CursorFactory
CursorFactory()
Single constructor.
Definition
CursorFactory.cpp:14
CursorFactory::generate
QCursor generate(const DocumentModelDigitizeCurve &modelDigitizeCurve) const
Factory method to generate standard or custom cursor.
Definition
CursorFactory.cpp:18
DocumentModelDigitizeCurve
Model for DlgSettingsDigitizeCurve and CmdSettingsDigitizeCurve.
Definition
DocumentModelDigitizeCurve.h:19
DocumentModelDigitizeCurve::cursorSize
CursorSize cursorSize() const
Get method for cursor size.
Definition
DocumentModelDigitizeCurve.cpp:65
DocumentModelDigitizeCurve::cursorInnerRadius
int cursorInnerRadius() const
Get method for cursor inner radius.
Definition
DocumentModelDigitizeCurve.cpp:55
DocumentModelDigitizeCurve::cursorStandardCross
bool cursorStandardCross() const
Get method for cursor type.
Definition
DocumentModelDigitizeCurve.cpp:70
DocumentModelDigitizeCurve::cursorLineWidth
int cursorLineWidth() const
Get method for cursor line width.
Definition
DocumentModelDigitizeCurve.cpp:60
Generated on
for Engauge Digitizer by
1.17.0