Krita Source Code Documentation
Loading...
Searching...
No Matches
ShapeGradientEditStrategy.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <KoToolBase.h>
10#include <KoCanvasBase.h>
12#include <KoShapeManager.h>
13#include <KoShape.h>
14#include "kis_assert.h"
15#include "SelectionDecorator.h"
16#include <kundo2command.h>
17#include <kis_command_utils.h>
18#include <KoSnapGuide.h>
20
21#include "kis_debug.h"
22
23
40
41
43 KoFlake::FillVariant fillVariant,
44 KoShape *shape,
46 const QPointF &clicked)
48 , m_d(new Private(clicked, shape, fillVariant))
49{
51
52 m_d->handleType = startHandleType;
53
54 KoShapeGradientHandles::Handle handle = m_d->gradientHandles.getHandle(m_d->handleType);
55 m_d->initialOffset = handle.pos - clicked;
56
58 Q_FOREACH (const KoShapeGradientHandles::Handle &h, m_d->gradientHandles.handles()) {
59 strategy->addPoint(h.pos);
60 }
62}
63
67
68void ShapeGradientEditStrategy::handleMouseMove(const QPointF &mouseLocation, Qt::KeyboardModifiers modifiers)
69{
70 const QPointF snappedPosition = tool()->canvas()->snapGuide()->snap(mouseLocation, m_d->initialOffset, modifiers);
71 const QPointF diff = snappedPosition - m_d->previous;
72 m_d->previous = snappedPosition;
73
75 m_d->gradientHandles.moveGradientHandle(m_d->handleType, diff),
76 m_d->intermediateCommand);
77}
78
80{
81 return m_d->intermediateCommand ?
82 new KisCommandUtils::SkipFirstRedoWrapper(m_d->intermediateCommand.take()) :
83 nullptr;
84}
85
86void ShapeGradientEditStrategy::finishInteraction(Qt::KeyboardModifiers modifiers)
87{
88 Q_UNUSED(modifiers);
89 tool()->canvas()->snapGuide()->reset();
90}
91
92void ShapeGradientEditStrategy::paint(QPainter &painter, const KoViewConverter &converter)
93{
94 Q_UNUSED(painter);
95 Q_UNUSED(converter);
96}
97
void addPoint(const QPointF &pt)
KoSnapGuide * snapGuide
bool addCustomSnapStrategy(KoSnapStrategy *customStrategy)
void reset()
Resets the snap guide.
QPointF snap(const QPointF &mousePosition, Qt::KeyboardModifiers modifiers)
snaps the mouse position, returns if mouse was snapped
KoCanvasBase * canvas() const
Returns the canvas the tool is working on.
KUndo2Command * createCommand() override
void paint(QPainter &painter, const KoViewConverter &converter) override
void finishInteraction(Qt::KeyboardModifiers modifiers) override
QScopedPointer< Private > m_d
void handleMouseMove(const QPointF &mouseLocation, Qt::KeyboardModifiers modifiers) override
ShapeGradientEditStrategy(KoToolBase *tool, KoFlake::FillVariant fillVariant, KoShape *shape, KoShapeGradientHandles::Handle::Type startHandleType, const QPointF &clicked)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
void redoAndMergeIntoAccumulatingCommand(KUndo2Command *cmd, QScopedPointer< KUndo2Command > &accumulatingCommand)
FillVariant
Definition KoFlake.h:28
KoShapeGradientHandles::Handle::Type handleType
QScopedPointer< KUndo2Command > intermediateCommand
Private(const QPointF &_start, KoShape *shape, KoFlake::FillVariant fillVariant)