00001
00002
00003
00004
00005
00006
00007 #include "CursorFactory.h"
00008 #include "CursorSize.h"
00009 #include "DocumentModelDigitizeCurve.h"
00010 #include <QBitmap>
00011 #include <QPainter>
00012 #include <QPixmap>
00013
00014 CursorFactory::CursorFactory()
00015 {
00016 }
00017
00018 QCursor CursorFactory::generate (const DocumentModelDigitizeCurve &modelDigitizeCurve) const
00019 {
00020
00021
00022 int innerRadius = modelDigitizeCurve.cursorInnerRadius();
00023 int size = CursorSizeToPixels (modelDigitizeCurve.cursorSize());
00024 int halfSize = size / 2;
00025 int lineWidth = modelDigitizeCurve.cursorLineWidth();
00026 int halfLineWidth = lineWidth / 2;
00027
00028 if (modelDigitizeCurve.cursorStandardCross()) {
00029
00030
00031 return QCursor (Qt::CrossCursor);
00032
00033 } else {
00034
00035
00036 const int BACKGROUND_COLOR = Qt::white, FOREGROUND_COLOR = Qt::black;
00037
00038
00039
00040 QPixmap picMask (size,
00041 size);
00042 QPainter picMaskPaint (&picMask);
00043 picMask.fill (QColor (BACKGROUND_COLOR));
00044
00045 QPen pen (QBrush (FOREGROUND_COLOR),
00046 modelDigitizeCurve.cursorLineWidth());
00047 picMaskPaint.setPen (pen);
00048
00049 picMaskPaint.drawLine (QPointF (halfSize,
00050 halfSize - innerRadius - halfLineWidth),
00051 QPointF (halfSize,
00052 lineWidth));
00053 picMaskPaint.drawLine (QPointF (halfSize - innerRadius - halfLineWidth,
00054 halfSize),
00055 QPointF (lineWidth,
00056 halfSize));
00057 picMaskPaint.drawLine (QPointF (halfSize,
00058 halfSize + innerRadius + halfLineWidth),
00059 QPointF (halfSize,
00060 size - 1 - lineWidth));
00061 picMaskPaint.drawLine (QPointF (halfSize + innerRadius + halfLineWidth,
00062 halfSize),
00063 QPointF (size - 1 - lineWidth,
00064 halfSize));
00065
00066 QPixmap pic (size,
00067 size);
00068 pic.fill (QColor (FOREGROUND_COLOR));
00069
00070 return QCursor (pic.createMaskFromColor(QColor (BACKGROUND_COLOR)),
00071 picMask.createMaskFromColor(QColor (BACKGROUND_COLOR)));
00072 }
00073 }