Krita Source Code Documentation
Loading...
Searching...
No Matches
KisToolFreehand Class Reference

#include <kis_tool_freehand.h>

+ Inheritance diagram for KisToolFreehand:

Public Slots

void activate (const QSet< KoShape * > &shapes) override
 
void deactivate () override
 
- Public Slots inherited from KisToolPaint
void activate (const QSet< KoShape * > &shapes) override
 
void deactivate () override
 
- Public Slots inherited from KisTool
void activate (const QSet< KoShape * > &shapes) override
 
void canvasResourceChanged (int key, const QVariant &res) override
 
void deactivate () override
 
virtual void updateSettingsViews ()
 
- Public Slots inherited from KoToolBase
virtual void activate (const QSet< KoShape * > &shapes)
 
virtual void deactivate ()
 
virtual void documentResourceChanged (int key, const QVariant &res)
 
virtual void repaintDecorations ()
 
virtual void requestRedoDuringStroke ()
 
virtual void requestStrokeCancellation ()
 
virtual void requestStrokeEnd ()
 
virtual void requestUndoDuringStroke ()
 
void setStatusText (const QString &statusText)
 
void updateOptionsWidgetIcons ()
 

Public Member Functions

int flags () const override
 
 KisToolFreehand (KoCanvasBase *canvas, const QCursor &cursor, const KUndo2MagicString &transactionText, bool useSavedSmoothing=true)
 
void mouseMoveEvent (KoPointerEvent *event) override
 
 ~KisToolFreehand () override
 
- Public Member Functions inherited from KisToolPaint
int flags () const override
 
 KisToolPaint (KoCanvasBase *canvas, const QCursor &cursor)
 
void mouseMoveEvent (KoPointerEvent *event) override
 
void mousePressEvent (KoPointerEvent *event) override
 
void mouseReleaseEvent (KoPointerEvent *event) override
 
KisPopupWidgetInterface * popupWidget () override
 
 ~KisToolPaint () override
 
- Public Member Functions inherited from KisTool
virtual bool alternateActionSupportsHiResEvents (AlternateAction action) const
 
virtual void beginAlternateDoubleClickAction (KoPointerEvent *event, AlternateAction action)
 
virtual void beginPrimaryDoubleClickAction (KoPointerEvent *event)
 
void deleteSelection () override
 
bool isActive () const
 
 KisTool (KoCanvasBase *canvas, const QCursor &cursor)
 
void mouseDoubleClickEvent (KoPointerEvent *event) override
 
void mouseTripleClickEvent (KoPointerEvent *event) override
 
virtual void newActivationWithExternalSource (KisPaintDeviceSP externalSource)
 newActivationWithExternalSource Makes sure that the tool is active and starts a new stroke, which will be able to access the pixels from the specified external source.
 
KisTool::NodePaintAbility nodePaintAbility ()
 
 ~KisTool () override
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 
- Public Member Functions inherited from KoToolBase
QAction * action (const QString &name) const
 
KoCanvasBase * canvas () const
 Returns the canvas the tool is working on.
 
virtual void copy () const
 
QCursor cursor () const
 return the last emitted cursor
 
virtual void customMoveEvent (KoPointerEvent *event)
 
virtual void customPressEvent (KoPointerEvent *event)
 
virtual void customReleaseEvent (KoPointerEvent *event)
 
virtual void cut ()
 
virtual QRectF decorationsRect () const
 
int decorationThickness () const
 decorationThickness The minimum thickness for tool decoration lines, this is derived from the screen magnification, thus the HiDPI settings. Note: to use this effectively, also set the pen to isCosmetic(true);
 
virtual void deselect ()
 deselect the tool should clear the selection if it has one.
 
virtual void dragLeaveEvent (QDragLeaveEvent *event)
 
virtual void dragMoveEvent (QDragMoveEvent *event, const QPointF &point)
 
virtual void dropEvent (QDropEvent *event, const QPointF &point)
 
virtual void explicitUserStrokeEndRequest ()
 explicitUserStrokeEndRequest is called by the input manager when the user presses Enter key or any equivalent. This callback comes before requestStrokeEnd(), which comes from a different source.
 
KoToolFactoryBase * factory () const
 
virtual void focusInEvent (QFocusEvent *event)
 
virtual void focusOutEvent (QFocusEvent *event)
 
virtual bool hasSelection ()
 
virtual void inputMethodEvent (QInputMethodEvent *event)
 
virtual QVariant inputMethodQuery (Qt::InputMethodQuery query) const
 
bool isInTextMode () const
 
bool isOpacityPresetMode () const
 
virtual void keyPressEvent (QKeyEvent *event)
 
virtual void keyReleaseEvent (QKeyEvent *event)
 
 KoToolBase (KoCanvasBase *canvas)
 
bool maskSyntheticEvents () const
 
QList< QPointer< QWidget > > optionWidgets ()
 
virtual bool paste ()
 
virtual QMenu * popupActionsMenu ()
 
virtual bool selectAll ()
 selectAll select all data the tool can select.
 
virtual KoToolSelection * selection ()
 
Q_INVOKABLE QString toolId () const
 
 ~KoToolBase () override
 

Protected Slots

void explicitUpdateOutline ()
 
void resetCursorStyle () override
 
void setAssistant (bool assistant)
 
void setOnlyOneAssistantSnap (bool assistant)
 
void setSnapEraser (bool assistant)
 
void slotDoResizeBrush (qreal newSize)
 
- Protected Slots inherited from KisTool
virtual void resetCursorStyle ()
 

Protected Member Functions

void activateAlternateAction (AlternateAction action) override
 
void beginAlternateAction (KoPointerEvent *event, AlternateAction action) override
 
void beginPrimaryAction (KoPointerEvent *event) override
 
void continueAlternateAction (KoPointerEvent *event, AlternateAction action) override
 
void continuePrimaryAction (KoPointerEvent *event) override
 
void deactivateAlternateAction (AlternateAction action) override
 
virtual void doStroke (KoPointerEvent *event)
 
void endAlternateAction (KoPointerEvent *event, AlternateAction action) override
 
void endPrimaryAction (KoPointerEvent *event) override
 
virtual void endStroke ()
 
KisOptimizedBrushOutline getOutlinePath (const QPointF &documentPos, const KoPointerEvent *event, KisPaintOpSettings::OutlineMode outlineMode) override
 
virtual void initStroke (KoPointerEvent *event)
 
KisPaintingInformationBuilder * paintingInformationBuilder () const
 
bool primaryActionSupportsHiResEvents () const override
 
void resetHelper (KisToolFreehandHelper *helper)
 
KisSmoothingOptionsSP smoothingOptions () const
 
bool supportsPaintingAssistants () const override
 
bool trySampleByPaintOp (KoPointerEvent *event, AlternateAction action)
 
bool wantsAutoScroll () const override
 
- Protected Member Functions inherited from KisToolPaint
void activateAlternateAction (AlternateAction action) override
 
void activatePrimaryAction () override
 
void addOptionWidgetLayout (QLayout *layout)
 Add the tool-specific layout to the default option widget layout.
 
virtual void addOptionWidgetOption (QWidget *control, QWidget *label=nullptr)
 Add a widget and a label to the current option widget layout.
 
void beginAlternateAction (KoPointerEvent *event, AlternateAction action) override
 
void canvasResourceChanged (int key, const QVariant &v) override
 
void continueAlternateAction (KoPointerEvent *event, AlternateAction action) override
 
QWidget * createOptionWidget () override
 
void deactivateAlternateAction (AlternateAction action) override
 
void deactivatePrimaryAction () override
 
void enableControl (QWidget *control, bool value)
 
void endAlternateAction (KoPointerEvent *event, AlternateAction action) override
 
bool isEraser () const
 
bool isOutlineEnabled () const
 
bool isOutlineVisible () const
 
void paint (QPainter &gc, const KoViewConverter &converter) override
 
virtual QString quickHelp () const
 
virtual void requestUpdateOutline (const QPointF &outlineDocPoint, const KoPointerEvent *event)
 
void setMode (ToolMode mode) override
 
void setOutlineEnabled (bool enabled)
 
void setOutlineVisible (bool visible)
 
void setSupportOutline (bool supportOutline)
 
void showControl (QWidget *control, bool value)
 
- Protected Member Functions inherited from KisTool
bool blockUntilOperationsFinished ()
 
void blockUntilOperationsFinishedForced ()
 
QPointF convertDocumentToWidget (const QPointF &pt)
 
QPoint convertToImagePixelCoordFloored (KoPointerEvent *e)
 
QPointF convertToPixelCoord (const QPointF &pt)
 
QPointF convertToPixelCoord (KoPointerEvent *e)
 
QPointF convertToPixelCoordAndAlignOnWidget (const QPointF &pt)
 
QPointF convertToPixelCoordAndSnap (const QPointF &pt, const QPointF &offset=QPointF())
 
QPointF convertToPixelCoordAndSnap (KoPointerEvent *e, const QPointF &offset=QPointF(), bool useModifiers=true)
 
QRectF convertToPt (const QRectF &rect)
 
qreal convertToPt (qreal value)
 
KoColor currentBgColor ()
 
KoColor currentFgColor ()
 
KisFilterConfigurationSP currentGenerator ()
 
KoAbstractGradientSP currentGradient ()
 
KisImageWSP currentImage ()
 
KisNodeSP currentNode () const
 
KisPaintOpPresetSP currentPaintOpPreset ()
 
KoPatternSP currentPattern ()
 
QCursor cursor () const
 
KisImageWSP image () const
 
virtual bool listeningToModifiers ()
 
virtual void listenToModifiers (bool listen)
 
virtual ToolMode mode () const
 
bool nodeEditable ()
 Checks checks if the current node is editable.
 
bool overrideCursorIfNotEditable ()
 Override the cursor appropriately if current node is not editable.
 
void paintToolOutline (QPainter *painter, const KisOptimizedBrushOutline &path)
 
KisOptimizedBrushOutline pixelToView (const KisOptimizedBrushOutline &path) const
 
QPainterPath pixelToView (const QPainterPath &pixelPath) const
 Convert a pixel path into a view path.
 
QPointF pixelToView (const QPoint &pixelCoord) const
 
QPointF pixelToView (const QPointF &pixelCoord) const
 Convert a floating point pixel coordinate into a view coordinate.
 
QPolygonF pixelToView (const QPolygonF &pixelPolygon) const
 Convert a pixel polygon into a view path.
 
QRectF pixelToView (const QRectF &pixelRect) const
 Convert a pixel rectangle into a view rectangle.
 
KisNodeList selectedNodes () const
 
bool selectionEditable ()
 Checks checks if the selection is editable, only applies to local selection as global selection is always editable.
 
void setCursor (const QCursor &cursor)
 
void updateCanvasPixelRect (const QRectF &pixelRect)
 Update the canvas for the given rectangle in image pixel coordinates.
 
void updateCanvasViewRect (const QRectF &viewRect)
 Update the canvas for the given rectangle in view coordinates.
 
QPointF viewToPixel (const QPointF &viewCoord) const
 
QPointF widgetCenterInWidgetPixels ()
 
- Protected Member Functions inherited from KoToolBase
virtual QList< QPointer< QWidget > > createOptionWidgets ()
 
int grabSensitivity () const
 Convenience function to get the current grab sensitivity.
 
qreal handleDocRadius () const
 
QRectF handleGrabRect (const QPointF &position) const
 
QRectF handlePaintRect (const QPointF &position) const
 
int handleRadius () const
 Convenience function to get the current handle radius.
 
bool isActivated () const
 
 KoToolBase (KoToolBasePrivate &dd)
 
KoPointerEvent * lastDeliveredPointerEvent () const
 
void setAbstractResource (KoAbstractCanvasResourceInterfaceSP abstractResource)
 
void setConverter (KoDerivedResourceConverterSP converter)
 
void setIsOpacityPresetMode (bool value)
 
void setMaskSyntheticEvents (bool value)
 
void setTextMode (bool value)
 
QHash< int, KoAbstractCanvasResourceInterfaceSP > toolAbstractResources ()
 
QHash< int, KoDerivedResourceConverterSP > toolConverters ()
 
void useCursor (const QCursor &cursor)
 

Protected Attributes

bool m_assistant {false}
 
bool m_eraser_snapping {false}
 
double m_magnetism {1.0}
 
bool m_only_one_assistant {true}
 
- Protected Attributes inherited from KisToolPaint
KisOptimizedBrushOutline m_currentOutline
 
QRectF m_oldColorPreviewUpdateRect
 
QRectF m_oldOutlineRect
 
QPointF m_outlineDocPoint
 
bool m_paintOutline {false}
 
- Protected Attributes inherited from KoToolBase
KoToolBasePrivate * d_ptr
 

Private Slots

void updateMaskSyntheticEventsFromTouch ()
 

Private Member Functions

QPointF adjustPosition (const QPointF &point, const QPointF &strokeBegin)
 
qreal calculatePerspective (const QPointF &documentPoint)
 
void lockTemporaryStraightRuler (const QPointF &documentPoint, Qt::KeyboardModifiers modifiers)
 
bool temporaryStraightRulerActive () const
 
QPointF temporaryStraightRulerOutlinePosition (const QPointF &documentPoint)
 
void updateTemporaryStraightRulerPreview (const QPointF &documentPoint, Qt::KeyboardModifiers modifiers)
 

Private Attributes

std::optional< KoPointerEventWrapper > m_beginAlternateActionEvent
 
KisSignalCompressorWithParam< qreal > m_brushResizeCompressor
 
KisToolFreehandHelper * m_helper {nullptr}
 
KisPaintingInformationBuilder * m_infoBuilder {nullptr}
 
QPointF m_initialGestureDocPoint
 
QPoint m_initialGestureGlobalPoint
 
QPointF m_lastDocumentPoint
 
qreal m_lastPaintOpSize {0.0}
 
bool m_paintopBasedSamplingInAction {false}
 

Friends

class KisToolFreehandPaintingInformationBuilder
 
class KisView
 
class KisViewManager
 

Additional Inherited Members

- Public Types inherited from KisTool
enum  { FLAG_USES_CUSTOM_PRESET =0x01 , FLAG_USES_CUSTOM_COMPOSITEOP =0x02 , FLAG_USES_CUSTOM_SIZE =0x04 }
 
enum  AlternateAction {
  ChangeSize = AlternateChangeSize , ChangeSizeSnap = AlternateChangeSizeSnap , SampleFgNode = AlternateSampleFgNode , SampleBgNode = AlternateSampleBgNode ,
  SampleFgImage = AlternateSampleFgImage , SampleBgImage = AlternateSampleBgImage , Secondary = AlternateSecondary , Third = AlternateThird ,
  Fourth = AlternateFourth , Fifth = AlternateFifth , NONE = 10000
}
 
enum  NodePaintAbility {
  VECTOR , CLONE , PAINT , UNPAINTABLE ,
  MYPAINTBRUSH_UNPAINTABLE
}
 
enum  ToolAction {
  Primary , AlternateChangeSize , AlternateChangeSizeSnap , AlternateSampleFgNode ,
  AlternateSampleBgNode , AlternateSampleFgImage , AlternateSampleBgImage , AlternateSecondary ,
  AlternateThird , AlternateFourth , AlternateFifth , Alternate_NONE = 10000
}
 
- Signals inherited from KisToolPaint
void sigPaintingFinished ()
 
- Signals inherited from KisTool
void isActiveChanged (bool isActivated)
 
- Signals inherited from KoToolBase
void activateTool (const QString &id)
 
void cursorChanged (const QCursor &cursor)
 
void selectionChanged (bool hasSelection)
 
void statusTextChanged (const QString &statusText)
 
void textModeChanged (bool inTextMode)
 
- Static Public Member Functions inherited from KisTool
static AlternateAction actionToAlternateAction (ToolAction action)
 
- Public Attributes inherited from KisTool
KoColor currentBgColor
 
float currentExposure {1.0}
 
KoColor currentFgColor
 
KisFilterConfigurationSP currentGenerator
 
KoAbstractGradientSP currentGradient
 
KoPatternSP currentPattern
 
QCursor cursor
 
bool m_isActive {false}
 
ToolMode m_mode {HOVER_MODE}
 
QWidget * optionWidget {0}
 
- Public Attributes inherited from Private
KisCanvas2 * canvas
 
int displayedFrame
 
int intendedFrame
 
- Protected Types inherited from KisTool
enum  ToolMode : int {
  HOVER_MODE , PAINT_MODE , SECONDARY_PAINT_MODE , MIRROR_AXIS_SETUP_MODE ,
  GESTURE_MODE , PAN_MODE , OTHER , OTHER_1
}
 
- Properties inherited from KisTool
bool isActive
 

Detailed Description

Definition at line 32 of file kis_tool_freehand.h.

Constructor & Destructor Documentation

◆ KisToolFreehand()

KisToolFreehand::KisToolFreehand ( KoCanvasBase * canvas,
const QCursor & cursor,
const KUndo2MagicString & transactionText,
bool useSavedSmoothing = true )

Definition at line 72 of file kis_tool_freehand.cc.

76{
77
80 connect(KisConfigNotifier::instance(), SIGNAL(touchPaintingChanged()),
82
85 new KisSmoothingOptions(useSavedSmoothing));
86
87 connect(m_helper, SIGNAL(requestExplicitUpdateOutline()), SLOT(explicitUpdateOutline()));
88
89 connect(qobject_cast<KisCanvas2*>(canvas)->viewManager(), SIGNAL(brushOutlineToggled()), SLOT(explicitUpdateOutline()));
90
91 KisCanvasResourceProvider *provider = qobject_cast<KisCanvas2*>(canvas)->viewManager()->canvasResourceProvider();
92
93 connect(provider, SIGNAL(sigEffectiveCompositeOpChanged()), SLOT(explicitUpdateOutline()));
94 connect(provider, SIGNAL(sigEffectiveCompositeOpChanged()), SLOT(resetCursorStyle()));
95 connect(provider, SIGNAL(sigPaintOpPresetChanged(KisPaintOpPresetSP)), SLOT(explicitUpdateOutline()));
96 connect(provider, SIGNAL(sigPaintOpPresetChanged(KisPaintOpPresetSP)), SLOT(resetCursorStyle()));
97
98 KisPaintingAssistantsDecorationSP decoration = qobject_cast<KisCanvas2*>(canvas)->paintingAssistantsDecoration();
99 connect(decoration.data(), SIGNAL(temporaryConstraintAvailabilityChanged()), SLOT(explicitUpdateOutline()));
100 connect(decoration.data(), SIGNAL(temporaryConstraintAvailabilityChanged()), SLOT(resetCursorStyle()));
101}
static KisConfigNotifier * instance()
KisPaintingInformationBuilder * m_infoBuilder
KisToolFreehandHelper * m_helper
friend class KisToolFreehandPaintingInformationBuilder
void slotDoResizeBrush(qreal newSize)
void updateMaskSyntheticEventsFromTouch()
void resetCursorStyle() override
KisSignalCompressorWithParam< qreal > m_brushResizeCompressor
void setSupportOutline(bool supportOutline)
KisToolPaint(KoCanvasBase *canvas, const QCursor &cursor)
QPointer< KoCanvasResourceProvider > resourceManager
QCursor cursor
Definition kis_tool.cc:64
KisCanvas2 * canvas

References Private::canvas, KisSharedPtr< T >::data(), explicitUpdateOutline(), KisConfigNotifier::instance(), KisToolFreehandPaintingInformationBuilder, m_helper, m_infoBuilder, resetCursorStyle(), KoCanvasBase::resourceManager, KisToolPaint::setSupportOutline(), and updateMaskSyntheticEventsFromTouch().

◆ ~KisToolFreehand()

KisToolFreehand::~KisToolFreehand ( )
override

Definition at line 103 of file kis_tool_freehand.cc.

104{
105 delete m_helper;
106 delete m_infoBuilder;
107}

References m_helper, and m_infoBuilder.

Member Function Documentation

◆ activate

void KisToolFreehand::activate ( const QSet< KoShape * > & shapes)
overrideslot

Definition at line 196 of file kis_tool_freehand.cc.

197{
199}
void activate(const QSet< KoShape * > &shapes) override

References KisToolPaint::activate().

◆ activateAlternateAction()

void KisToolFreehand::activateAlternateAction ( AlternateAction action)
overrideprotectedvirtual

Reimplemented from KisTool.

Reimplemented in KisToolLazyBrush.

Definition at line 418 of file kis_tool_freehand.cc.

419{
420 if (action != ChangeSize && action != ChangeSizeSnap) {
422 return;
423 }
424
426 setOutlineVisible(true);
427}
static QCursor blankCursor()
Definition kis_cursor.cc:89
void setOutlineVisible(bool visible)
void activateAlternateAction(AlternateAction action) override
void useCursor(const QCursor &cursor)
QAction * action(const QString &name) const
@ ChangeSizeSnap
Definition kis_tool.h:136
@ ChangeSize
Definition kis_tool.h:135

References KoToolBase::action(), KisToolPaint::activateAlternateAction(), KisCursor::blankCursor(), KisTool::ChangeSize, KisTool::ChangeSizeSnap, KisToolPaint::setOutlineVisible(), and KoToolBase::useCursor().

◆ adjustPosition()

QPointF KisToolFreehand::adjustPosition ( const QPointF & point,
const QPointF & strokeBegin )
private

Adjusts a coordinates according to a KisPaintingAssistant, if available.

Definition at line 564 of file kis_tool_freehand.cc.

565{
566 KisCanvas2* c = static_cast<KisCanvas2*>(canvas());
567 if (!c || !c->paintingAssistantsDecoration()) {
568 return point;
569 }
570
571 if (hasLockedValidTemporaryStraightRuler(c->paintingAssistantsDecoration()->temporaryConstraint())) {
573 QPointF ap = c->paintingAssistantsDecoration()->adjustPosition(point, strokeBegin);
575 return ap;
576 }
577
578 if (m_assistant) {
581 QPointF ap = c->paintingAssistantsDecoration()->adjustPosition(point, strokeBegin);
582 QPointF fp = (1.0 - m_magnetism) * point + m_magnetism * ap;
583 // Report the final position back to the assistant so the guides
584 // can follow the brush
586 return fp;
587 }
588 return point;
589}
KisPaintingAssistantsDecorationSP paintingAssistantsDecoration() const
std::optional< KisTemporaryPaintConstraint > temporaryConstraint() const
void setOnlyOneAssistantSnap(bool assistant)
sets whether we snap to only one assistant
void setEraserSnap(bool assistant)
sets whether eraser brushes snap
QPointF adjustPosition(const QPointF &point, const QPointF &strokeBegin)

References KisPaintingAssistantsDecoration::adjustPosition(), Private::canvas, m_assistant, m_eraser_snapping, m_magnetism, m_only_one_assistant, KisCanvas2::paintingAssistantsDecoration(), KisPaintingAssistantsDecoration::setAdjustedBrushPosition(), KisPaintingAssistantsDecoration::setEraserSnap(), KisPaintingAssistantsDecoration::setOnlyOneAssistantSnap(), and KisPaintingAssistantsDecoration::temporaryConstraint().

◆ beginAlternateAction()

void KisToolFreehand::beginAlternateAction ( KoPointerEvent * event,
AlternateAction action )
overrideprotectedvirtual

Reimplemented from KisTool.

Reimplemented in KisToolMultihand, and KisToolLazyBrush.

Definition at line 440 of file kis_tool_freehand.cc.

441{
442 if (trySampleByPaintOp(event, action)) {
444 return;
445 }
446
447 if (action != ChangeSize && action != ChangeSizeSnap) {
449 return;
450 }
451
453 m_initialGestureDocPoint = event->point;
454 m_initialGestureGlobalPoint = event->globalPos();
455
456 m_lastDocumentPoint = event->point;
457 m_lastPaintOpSize = currentPaintOpPreset()->settings()->paintOpSize();
458
459 m_beginAlternateActionEvent = event->deepCopyEvent();
461}
QPoint m_initialGestureGlobalPoint
QPointF m_initialGestureDocPoint
std::optional< KoPointerEventWrapper > m_beginAlternateActionEvent
bool trySampleByPaintOp(KoPointerEvent *event, AlternateAction action)
virtual void requestUpdateOutline(const QPointF &outlineDocPoint, const KoPointerEvent *event)
void setMode(ToolMode mode) override
void beginAlternateAction(KoPointerEvent *event, AlternateAction action) override
KisPaintOpPresetSP currentPaintOpPreset()
Definition kis_tool.cc:359
@ GESTURE_MODE
Definition kis_tool.h:303

References KoToolBase::action(), KisToolPaint::beginAlternateAction(), KisTool::ChangeSize, KisTool::ChangeSizeSnap, KisTool::currentPaintOpPreset(), KisTool::GESTURE_MODE, m_beginAlternateActionEvent, m_initialGestureDocPoint, m_initialGestureGlobalPoint, m_lastDocumentPoint, m_lastPaintOpSize, m_paintopBasedSamplingInAction, KisToolPaint::requestUpdateOutline(), KisToolPaint::setMode(), and trySampleByPaintOp().

◆ beginPrimaryAction()

void KisToolFreehand::beginPrimaryAction ( KoPointerEvent * event)
overrideprotectedvirtual

Called by KisToolProxy when a primary action for the tool is started. The event stores the original event that started the stroke. The event is accepted by default. If the tool decides to ignore this particular action (e.g. when the node is not editable), it should call event->ignore(). Then no further continuePrimaryAction() or endPrimaryAction() will be called until the next user action.

Reimplemented from KisTool.

Reimplemented in KisToolMultihand, and KisToolLazyBrush.

Definition at line 318 of file kis_tool_freehand.cc.

319{
320 // FIXME: workaround for the Duplicate Op
322
324
326
327 NodePaintAbility paintability = nodePaintAbility();
328 // XXX: move this to KisTool and make it work properly for clone layers: for clone layers, the shape paint tools don't work either
329 if (!nodeEditable() || paintability != PAINT) {
330 if (paintability == KisToolPaint::VECTOR || paintability == KisToolPaint::CLONE){
331 KisCanvas2 * kiscanvas = static_cast<KisCanvas2*>(canvas());
332 QString message = i18n("The brush tool cannot paint on this layer. Please select a paint layer or mask.");
333 kiscanvas->viewManager()->showFloatingMessage(message, koIcon("object-locked"));
334 }
335 else if (paintability == MYPAINTBRUSH_UNPAINTABLE) {
336 KisCanvas2 * kiscanvas = static_cast<KisCanvas2*>(canvas());
337 QString message = i18n("The MyPaint Brush Engine is not available for this colorspace");
338 kiscanvas->viewManager()->showFloatingMessage(message, koIcon("object-locked"));
339 }
340 event->ignore();
341
342 return;
343 }
344
346
348
349 KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2 *>(canvas());
350 if (canvas2) {
351 canvas2->viewManager()->disableControls();
352 }
353
354 initStroke(event);
355}
KisViewManager * viewManager() const
virtual void initStroke(KoPointerEvent *event)
QPointF temporaryStraightRulerOutlinePosition(const QPointF &documentPoint)
void lockTemporaryStraightRuler(const QPointF &documentPoint, Qt::KeyboardModifiers modifiers)
void showFloatingMessage(const QString &message, const QIcon &icon, int timeout=4500, KisFloatingMessage::Priority priority=KisFloatingMessage::Medium, int alignment=Qt::AlignCenter|Qt::TextWordWrap)
shows a floating message in the top right corner of the canvas
Qt::KeyboardModifiers modifiers() const
QPointF point
The point in document coordinates.
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
#define koIcon(name)
Use these macros for icons without any issues.
Definition kis_icon.h:25
KisTool::NodePaintAbility nodePaintAbility()
Definition kis_tool.cc:539
bool nodeEditable()
Checks checks if the current node is editable.
Definition kis_tool.cc:651
@ PAINT_MODE
Definition kis_tool.h:300
@ SampleFgImage
Definition kis_tool.h:139
NodePaintAbility
Definition kis_tool.h:148
@ MYPAINTBRUSH_UNPAINTABLE
Definition kis_tool.h:153

References Private::canvas, KisTool::CLONE, KisViewManager::disableControls(), initStroke(), KisToolFreehandHelper::isRunning(), KIS_SAFE_ASSERT_RECOVER_RETURN, koIcon, lockTemporaryStraightRuler(), m_helper, KoPointerEvent::modifiers(), KisTool::MYPAINTBRUSH_UNPAINTABLE, KisTool::nodeEditable(), KisTool::nodePaintAbility(), KisTool::PAINT, KisTool::PAINT_MODE, KoPointerEvent::point, KisToolPaint::requestUpdateOutline(), KisTool::SampleFgImage, KisToolPaint::setMode(), KisViewManager::showFloatingMessage(), temporaryStraightRulerOutlinePosition(), trySampleByPaintOp(), KisTool::VECTOR, and KisCanvas2::viewManager().

◆ calculatePerspective()

qreal KisToolFreehand::calculatePerspective ( const QPointF & documentPoint)
private

Calculates a coefficient for KisPaintInformation according to perspective grid values

Definition at line 591 of file kis_tool_freehand.cc.

592{
593 qreal perspective = 1.0;
594 Q_FOREACH (const KisPaintingAssistantSP assistant, static_cast<KisCanvas2*>(canvas())->paintingAssistantsDecoration()->assistants()) {
595 QPointer<KisAbstractPerspectiveGrid> grid = dynamic_cast<KisAbstractPerspectiveGrid*>(assistant.data());
596 if (grid && grid->isActive() && grid->contains(documentPoint)) {
597 perspective = grid->distance(documentPoint);
598 break;
599 }
600 }
601 return perspective;
602}

References Private::canvas.

◆ continueAlternateAction()

void KisToolFreehand::continueAlternateAction ( KoPointerEvent * event,
AlternateAction action )
overrideprotectedvirtual

Reimplemented from KisTool.

Reimplemented in KisToolMultihand, and KisToolLazyBrush.

Definition at line 463 of file kis_tool_freehand.cc.

464{
466
467 if (action != ChangeSize && action != ChangeSizeSnap) {
469 return;
470 }
471
472 QPointF lastWidgetPosition = convertDocumentToWidget(m_lastDocumentPoint);
473 QPointF actualWidgetPosition = convertDocumentToWidget(event->point);
474
475 QPointF offset = actualWidgetPosition - lastWidgetPosition;
476
477 KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2 *>(canvas());
479 QRect screenRect = QGuiApplication::primaryScreen()->availableVirtualGeometry();
480
481 qreal scaleX = 0;
482 qreal scaleY = 0;
483 canvas2->coordinatesConverter()->imageScale(&scaleX, &scaleY);
484
485 const qreal maxBrushSize = KisImageConfig(true).maxBrushSize();
486 const qreal effectiveMaxDragSize = 0.5 * screenRect.width();
487 const qreal effectiveMaxBrushSize = qMin(maxBrushSize, effectiveMaxDragSize / scaleX);
488
489 const qreal scaleCoeff = effectiveMaxBrushSize / effectiveMaxDragSize;
490 const qreal sizeDiff = scaleCoeff * offset.x() ;
491
492 if (qAbs(sizeDiff) > 0.01) {
493 KisPaintOpSettingsSP settings = currentPaintOpPreset()->settings();
494
495 qreal newSize = m_lastPaintOpSize + sizeDiff;
496
497 if (action == ChangeSizeSnap) {
498 newSize = qMax(qRound(newSize), 1);
499 }
500
501 newSize = qBound(0.01, newSize, maxBrushSize);
502
503 settings->setPaintOpSize(newSize);
504
507 m_beginAlternateActionEvent.has_value() ? &m_beginAlternateActionEvent->event : nullptr);
508 //m_brushResizeCompressor.start(newSize);
509
510 m_lastDocumentPoint = event->point;
511 m_lastPaintOpSize = newSize;
512 }
513}
KisCoordinatesConverter * coordinatesConverter
void imageScale(qreal *scaleX, qreal *scaleY) const
int maxBrushSize(bool defaultValue=false) const
void continueAlternateAction(KoPointerEvent *event, AlternateAction action) override
QPointF convertDocumentToWidget(const QPointF &pt)
Definition kis_tool.cc:181

References KoToolBase::action(), Private::canvas, KisTool::ChangeSize, KisTool::ChangeSizeSnap, KisToolPaint::continueAlternateAction(), KisTool::convertDocumentToWidget(), KisCanvas2::coordinatesConverter, KisTool::currentPaintOpPreset(), KisCoordinatesConverter::imageScale(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_beginAlternateActionEvent, m_initialGestureDocPoint, m_lastDocumentPoint, m_lastPaintOpSize, m_paintopBasedSamplingInAction, KisImageConfig::maxBrushSize(), KoPointerEvent::point, KisToolPaint::requestUpdateOutline(), and trySampleByPaintOp().

◆ continuePrimaryAction()

void KisToolFreehand::continuePrimaryAction ( KoPointerEvent * event)
overrideprotectedvirtual

Called by KisToolProxy when the primary action is in progress of pointer movement. If the tool has ignored the event in beginPrimaryAction(), this method will not be called.

Actual painting

Reimplemented from KisTool.

Reimplemented in KisToolMultihand, and KisToolLazyBrush.

Definition at line 357 of file kis_tool_freehand.cc.

358{
360
362
366 doStroke(event);
367}
virtual void doStroke(KoPointerEvent *event)
#define CHECK_MODE_SANITY_OR_RETURN(_mode)
Definition kis_tool.h:27

References CHECK_MODE_SANITY_OR_RETURN, doStroke(), KisTool::PAINT_MODE, KoPointerEvent::point, KisToolPaint::requestUpdateOutline(), and temporaryStraightRulerOutlinePosition().

◆ deactivate

void KisToolFreehand::deactivate ( )
overrideslot

Definition at line 201 of file kis_tool_freehand.cc.

202{
203 if (mode() == PAINT_MODE) {
204 endStroke();
206 }
207 if (KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2*>(canvas())) {
208 if (canvas2->paintingAssistantsDecoration()) {
209 canvas2->paintingAssistantsDecoration()->setTemporaryConstraint(std::nullopt);
210 }
211 }
213}
virtual void endStroke()
void deactivate() override
virtual ToolMode mode() const
Definition kis_tool.cc:407
@ HOVER_MODE
Definition kis_tool.h:299

References Private::canvas, KisToolPaint::deactivate(), endStroke(), KisTool::HOVER_MODE, KisTool::mode(), KisTool::PAINT_MODE, and KisToolPaint::setMode().

◆ deactivateAlternateAction()

void KisToolFreehand::deactivateAlternateAction ( AlternateAction action)
overrideprotectedvirtual

Reimplemented from KisTool.

Reimplemented in KisToolLazyBrush.

Definition at line 429 of file kis_tool_freehand.cc.

430{
431 if (action != ChangeSize && action != ChangeSizeSnap) {
433 return;
434 }
435
437 setOutlineVisible(false);
438}
void deactivateAlternateAction(AlternateAction action) override

References KoToolBase::action(), KisTool::ChangeSize, KisTool::ChangeSizeSnap, KisToolPaint::deactivateAlternateAction(), resetCursorStyle(), and KisToolPaint::setOutlineVisible().

◆ doStroke()

void KisToolFreehand::doStroke ( KoPointerEvent * event)
protectedvirtual

Definition at line 301 of file kis_tool_freehand.cc.

302{
303 m_helper->paintEvent(event);
304}
void paintEvent(KoPointerEvent *event)

References m_helper, and KisToolFreehandHelper::paintEvent().

◆ endAlternateAction()

◆ endPrimaryAction()

void KisToolFreehand::endPrimaryAction ( KoPointerEvent * event)
overrideprotectedvirtual

Called by KisToolProxy when the primary action is being finished, that is while mouseRelease or tabletRelease event. If the tool has ignored the event in beginPrimaryAction(), this method will not be called.

Reimplemented from KisTool.

Reimplemented in KisToolMultihand, and KisToolLazyBrush.

Definition at line 369 of file kis_tool_freehand.cc.

370{
371 Q_UNUSED(event);
373
374 endStroke();
375
376 if (m_assistant && static_cast<KisCanvas2*>(canvas())->paintingAssistantsDecoration()) {
377 static_cast<KisCanvas2*>(canvas())->paintingAssistantsDecoration()->endStroke();
378 }
379
380 KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2 *>(canvas());
381 if (canvas2) {
382 canvas2->viewManager()->enableControls();
383 }
384
386}
void enableControls()
disable and enable toolbar controls. used for disabling them during painting.

References Private::canvas, CHECK_MODE_SANITY_OR_RETURN, KisViewManager::enableControls(), endStroke(), KisTool::HOVER_MODE, m_assistant, KisTool::PAINT_MODE, KisToolPaint::setMode(), and KisCanvas2::viewManager().

◆ endStroke()

void KisToolFreehand::endStroke ( )
protectedvirtual

Definition at line 306 of file kis_tool_freehand.cc.

307{
309 bool paintOpIgnoredEvent = currentPaintOpPreset()->settings()->mouseReleaseEvent();
310 Q_UNUSED(paintOpIgnoredEvent);
311}

References KisTool::currentPaintOpPreset(), KisToolFreehandHelper::endPaint(), and m_helper.

◆ explicitUpdateOutline

void KisToolFreehand::explicitUpdateOutline ( )
protectedslot

◆ flags()

int KisToolFreehand::flags ( ) const
overridevirtual

◆ getOutlinePath()

KisOptimizedBrushOutline KisToolFreehand::getOutlinePath ( const QPointF & documentPos,
const KoPointerEvent * event,
KisPaintOpSettings::OutlineMode outlineMode )
overrideprotectedvirtual

Reimplemented from KisToolPaint.

Definition at line 614 of file kis_tool_freehand.cc.

617{
620 }
621
623 return m_helper->paintOpOutline(convertToPixelCoord(documentPos),
624 event,
625 currentPaintOpPreset()->settings(),
626 outlineMode);
627 else
629}
KisOptimizedBrushOutline paintOpOutline(const QPointF &savedCursorPos, const KoPointerEvent *event, const KisPaintOpSettingsSP globalSettings, KisPaintOpSettings::OutlineMode mode) const
bool temporaryStraightRulerActive() const
QPointF convertToPixelCoord(KoPointerEvent *e)
Definition kis_tool.cc:189

References KisTool::convertToPixelCoord(), KisTool::currentPaintOpPreset(), m_helper, KisToolFreehandHelper::paintOpOutline(), and temporaryStraightRulerActive().

◆ initStroke()

void KisToolFreehand::initStroke ( KoPointerEvent * event)
protectedvirtual

Reimplemented in KisToolDyna.

Definition at line 292 of file kis_tool_freehand.cc.

293{
294 m_helper->initPaint(event,
295 convertToPixelCoord(event),
296 image(),
297 currentNode(),
298 image().data());
299}
void initPaint(KoPointerEvent *event, const QPointF &pixelCoords, KisImageWSP image, KisNodeSP currentNode, KisStrokesFacade *strokesFacade, KisNodeSP overrideNode=0, KisDefaultBoundsBaseSP bounds=0)
KisNodeSP currentNode() const
Definition kis_tool.cc:370
KisImageWSP image() const
Definition kis_tool.cc:332

References KisTool::convertToPixelCoord(), KisTool::currentNode(), KisTool::image(), KisToolFreehandHelper::initPaint(), and m_helper.

◆ lockTemporaryStraightRuler()

void KisToolFreehand::lockTemporaryStraightRuler ( const QPointF & documentPoint,
Qt::KeyboardModifiers modifiers )
private

Definition at line 259 of file kis_tool_freehand.cc.

260{
261 KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2*>(canvas());
262 if (!canvas2 || !canvas2->paintingAssistantsDecoration()) {
263 return;
264 }
265
266 std::optional<KisTemporaryPaintConstraint> constraint =
268
269 if (!constraint) {
270 return;
271 }
272
273 if (!constraint->hasLine()) {
274 return;
275 }
276
277 if (!constraint->isLocked()) {
278 constraint->updateLine(documentPoint, snapsTemporaryStraightRuler(*constraint, modifiers));
279 }
280
281 if (constraint->hasValidLine()) {
282 constraint->setLocked(true);
283 } else {
284 const KisTemporaryPaintConstraint::InteractionMode interactionMode = constraint->interactionMode();
285 constraint = KisTemporaryPaintConstraint();
286 constraint->setInteractionMode(interactionMode);
287 }
288
290}
void setTemporaryConstraint(std::optional< KisTemporaryPaintConstraint > constraint)

References Private::canvas, KisCanvas2::paintingAssistantsDecoration(), KisPaintingAssistantsDecoration::setTemporaryConstraint(), and KisPaintingAssistantsDecoration::temporaryConstraint().

◆ mouseMoveEvent()

void KisToolFreehand::mouseMoveEvent ( KoPointerEvent * event)
overridevirtual

Called when the mouse or stylus moved over the canvas. Implementors should call event->ignore() if they do not actually use the event.

Parameters
eventstate and reason of this mouse or stylus move

Reimplemented from KisTool.

Reimplemented in KisToolMultihand.

Definition at line 109 of file kis_tool_freehand.cc.

110{
112
114 if (mode() == HOVER_MODE) {
117 }
118 } else {
120 }
121}
void cursorMoved(const QPointF &cursorPos)
void updateTemporaryStraightRulerPreview(const QPointF &documentPoint, Qt::KeyboardModifiers modifiers)
void mouseMoveEvent(KoPointerEvent *event) override

References KisTool::convertToPixelCoord(), KisToolFreehandHelper::cursorMoved(), KisTool::HOVER_MODE, m_helper, KisTool::mode(), KoPointerEvent::modifiers(), KisToolPaint::mouseMoveEvent(), KoPointerEvent::point, KisToolPaint::requestUpdateOutline(), temporaryStraightRulerActive(), temporaryStraightRulerOutlinePosition(), and updateTemporaryStraightRulerPreview().

◆ paintingInformationBuilder()

KisPaintingInformationBuilder * KisToolFreehand::paintingInformationBuilder ( ) const
protected

Definition at line 174 of file kis_tool_freehand.cc.

175{
176 return m_infoBuilder;
177}

References m_infoBuilder.

◆ primaryActionSupportsHiResEvents()

bool KisToolFreehand::primaryActionSupportsHiResEvents ( ) const
overrideprotectedvirtual

Returns true if the tool can handle (and wants to handle) a very tight flow of input events from the tablet

Reimplemented from KisTool.

Definition at line 313 of file kis_tool_freehand.cc.

314{
315 return true;
316}

◆ resetCursorStyle

void KisToolFreehand::resetCursorStyle ( )
overrideprotectedslot

Definition at line 128 of file kis_tool_freehand.cc.

129{
131 useCursor(KisCursor::loadWithSize("cursor-cross-full.svg", 31, 31));
132 return;
133 }
134
135 KisConfig cfg(true);
136
137 bool useSeparateEraserCursor = cfg.separateEraserCursor() && isEraser();
138
139 switch (useSeparateEraserCursor ? cfg.eraserCursorStyle() : cfg.newCursorStyle()) {
142 break;
145 break;
148 break;
151 break;
154 break;
157 break;
160 break;
163 break;
166 break;
168 default:
170 break;
171 }
172}
static QCursor pixelBlackCursor()
Definition kis_cursor.cc:44
static QCursor loadWithSize(const QString &cursorName, int width, int height, int hotspotX=-1, int hotspotY=-1)
static QCursor crossCursor()
Definition kis_cursor.cc:34
static QCursor triangleRightHandedCursor()
static QCursor arrowCursor()
Definition kis_cursor.cc:24
static QCursor triangleLeftHandedCursor()
static QCursor roundCursor()
Definition kis_cursor.cc:39
static QCursor pixelWhiteCursor()
Definition kis_cursor.cc:49
static QCursor eraserCursor()
bool isEraser() const
@ CURSOR_STYLE_POINTER
Definition kis_global.h:65
@ CURSOR_STYLE_SMALL_ROUND
Definition kis_global.h:66
@ CURSOR_STYLE_CROSSHAIR
Definition kis_global.h:67
@ CURSOR_STYLE_TOOLICON
Definition kis_global.h:64
@ CURSOR_STYLE_TRIANGLE_RIGHTHANDED
Definition kis_global.h:68
@ CURSOR_STYLE_WHITE_PIXEL
Definition kis_global.h:71
@ CURSOR_STYLE_BLACK_PIXEL
Definition kis_global.h:70
@ CURSOR_STYLE_TRIANGLE_LEFTHANDED
Definition kis_global.h:69
@ CURSOR_STYLE_NO_CURSOR
Definition kis_global.h:63
@ CURSOR_STYLE_ERASER
Definition kis_global.h:72
virtual void resetCursorStyle()
Definition kis_tool.cc:613

References KisCursor::arrowCursor(), KisCursor::blankCursor(), KisCursor::crossCursor(), CURSOR_STYLE_BLACK_PIXEL, CURSOR_STYLE_CROSSHAIR, CURSOR_STYLE_ERASER, CURSOR_STYLE_NO_CURSOR, CURSOR_STYLE_POINTER, CURSOR_STYLE_SMALL_ROUND, CURSOR_STYLE_TOOLICON, CURSOR_STYLE_TRIANGLE_LEFTHANDED, CURSOR_STYLE_TRIANGLE_RIGHTHANDED, CURSOR_STYLE_WHITE_PIXEL, KisCursor::eraserCursor(), KisConfig::eraserCursorStyle(), KisToolPaint::isEraser(), KisCursor::loadWithSize(), KisConfig::newCursorStyle(), KisCursor::pixelBlackCursor(), KisCursor::pixelWhiteCursor(), KisTool::resetCursorStyle(), KisCursor::roundCursor(), KisConfig::separateEraserCursor(), temporaryStraightRulerActive(), KisCursor::triangleLeftHandedCursor(), KisCursor::triangleRightHandedCursor(), and KoToolBase::useCursor().

◆ resetHelper()

void KisToolFreehand::resetHelper ( KisToolFreehandHelper * helper)
protected

Definition at line 179 of file kis_tool_freehand.cc.

180{
181 delete m_helper;
182 m_helper = helper;
183}

References m_helper.

◆ setAssistant

void KisToolFreehand::setAssistant ( bool assistant)
protectedslot

Definition at line 540 of file kis_tool_freehand.cc.

541{
542 m_assistant = assistant;
543}

References m_assistant.

◆ setOnlyOneAssistantSnap

void KisToolFreehand::setOnlyOneAssistantSnap ( bool assistant)
protectedslot

Definition at line 545 of file kis_tool_freehand.cc.

546{
547 m_only_one_assistant = assistant;
548}

References m_only_one_assistant.

◆ setSnapEraser

void KisToolFreehand::setSnapEraser ( bool assistant)
protectedslot

Definition at line 550 of file kis_tool_freehand.cc.

551{
552 m_eraser_snapping = assistant;
553}

References m_eraser_snapping.

◆ slotDoResizeBrush

void KisToolFreehand::slotDoResizeBrush ( qreal newSize)
protectedslot

Definition at line 555 of file kis_tool_freehand.cc.

556{
557 KisPaintOpSettingsSP settings = currentPaintOpPreset()->settings();
558
559 settings->setPaintOpSize(newSize);
561
562}

References KisTool::currentPaintOpPreset(), m_initialGestureDocPoint, and KisToolPaint::requestUpdateOutline().

◆ smoothingOptions()

KisSmoothingOptionsSP KisToolFreehand::smoothingOptions ( ) const
protected

Definition at line 123 of file kis_tool_freehand.cc.

124{
125 return m_helper->smoothingOptions();
126}
KisSmoothingOptionsSP smoothingOptions() const

References m_helper, and KisToolFreehandHelper::smoothingOptions().

◆ supportsPaintingAssistants()

bool KisToolFreehand::supportsPaintingAssistants ( ) const
overrideprotectedvirtual

Reimplemented from KisTool.

Definition at line 185 of file kis_tool_freehand.cc.

186{
187 return true;
188}

◆ temporaryStraightRulerActive()

bool KisToolFreehand::temporaryStraightRulerActive ( ) const
private

Definition at line 215 of file kis_tool_freehand.cc.

216{
217 KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2*>(canvas());
218 return canvas2 &&
219 canvas2->paintingAssistantsDecoration() &&
220 canvas2->paintingAssistantsDecoration()->temporaryConstraint().has_value();
221}

References Private::canvas, KisCanvas2::paintingAssistantsDecoration(), and KisPaintingAssistantsDecoration::temporaryConstraint().

◆ temporaryStraightRulerOutlinePosition()

QPointF KisToolFreehand::temporaryStraightRulerOutlinePosition ( const QPointF & documentPoint)
private

Definition at line 223 of file kis_tool_freehand.cc.

224{
225 KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2*>(canvas());
226 if (!canvas2 ||
227 !canvas2->paintingAssistantsDecoration() ||
228 !hasLockedValidTemporaryStraightRuler(canvas2->paintingAssistantsDecoration()->temporaryConstraint())) {
229
230 return documentPoint;
231 }
232
233 return adjustPosition(documentPoint, documentPoint);
234}
QPointF adjustPosition(const QPointF &point, const QPointF &strokeBegin)

References adjustPosition(), Private::canvas, KisCanvas2::paintingAssistantsDecoration(), and KisPaintingAssistantsDecoration::temporaryConstraint().

◆ trySampleByPaintOp()

bool KisToolFreehand::trySampleByPaintOp ( KoPointerEvent * event,
AlternateAction action )
protected

FIXME: we need some better way to implement modifiers for a paintop level. This method is used in DuplicateOp only!

Definition at line 388 of file kis_tool_freehand.cc.

389{
390 if (action != SampleFgNode && action != SampleFgImage) return false;
391
396 QPointF pos = adjustPosition(event->point, event->point);
397 qreal perspective = calculatePerspective(pos);
398 if (!currentPaintOpPreset()) {
399 return false;
400 }
403 event->xTilt(), event->yTilt(),
404 event->rotation(),
405 event->tangentialPressure(),
406 perspective, 0, 0);
407 info.setRandomSource(new KisRandomSource());
408 info.setPerStrokeRandomSource(new KisPerStrokeRandomSource());
409
410 bool paintOpIgnoredEvent = currentPaintOpPreset()->settings()->mousePressEvent(info,
411 event->modifiers(),
412 currentNode());
413 // DuplicateOP during the sampling of new source point (origin)
414 // is the only paintop that returns "false" here
415 return !paintOpIgnoredEvent;
416}
qreal calculatePerspective(const QPointF &documentPoint)
qreal pressure() const
qreal rotation() const
return the rotation (or a default value)
qreal yTilt() const
qreal tangentialPressure() const
qreal xTilt() const
@ SampleFgNode
Definition kis_tool.h:137

References KoToolBase::action(), adjustPosition(), calculatePerspective(), KisTool::convertToPixelCoord(), KisTool::currentNode(), KisTool::currentPaintOpPreset(), m_infoBuilder, KoPointerEvent::modifiers(), KoPointerEvent::point, KoPointerEvent::pressure(), KisPaintingInformationBuilder::pressureToCurve(), KoPointerEvent::rotation(), KisTool::SampleFgImage, KisTool::SampleFgNode, KisPaintInformation::setPerStrokeRandomSource(), KisPaintInformation::setRandomSource(), KoPointerEvent::tangentialPressure(), KoPointerEvent::xTilt(), and KoPointerEvent::yTilt().

◆ updateMaskSyntheticEventsFromTouch

void KisToolFreehand::updateMaskSyntheticEventsFromTouch ( )
privateslot

Definition at line 604 of file kis_tool_freehand.cc.

605{
606 setMaskSyntheticEvents(KisConfig(true).disableTouchOnCanvas());
607}
void setMaskSyntheticEvents(bool value)

References KoToolBase::setMaskSyntheticEvents().

◆ updateTemporaryStraightRulerPreview()

void KisToolFreehand::updateTemporaryStraightRulerPreview ( const QPointF & documentPoint,
Qt::KeyboardModifiers modifiers )
private

Definition at line 236 of file kis_tool_freehand.cc.

237{
238 KisCanvas2 *canvas2 = dynamic_cast<KisCanvas2*>(canvas());
239 if (!canvas2 || !canvas2->paintingAssistantsDecoration()) {
240 return;
241 }
242
243 std::optional<KisTemporaryPaintConstraint> constraint =
245
246 if (!constraint || constraint->isLocked()) {
247 return;
248 }
249
250 if (!constraint->hasLine()) {
251 constraint->beginLine(documentPoint);
252 } else {
253 constraint->updateLine(documentPoint, snapsTemporaryStraightRuler(*constraint, modifiers));
254 }
255
257}

References Private::canvas, KisCanvas2::paintingAssistantsDecoration(), KisPaintingAssistantsDecoration::setTemporaryConstraint(), and KisPaintingAssistantsDecoration::temporaryConstraint().

◆ wantsAutoScroll()

bool KisToolFreehand::wantsAutoScroll ( ) const
overrideprotectedvirtual

Return if dragging (moving with the mouse down) to the edge of a canvas should scroll the canvas (default is true).

Returns
if this tool wants mouse events to cause scrolling of canvas.

Reimplemented from KoToolBase.

Definition at line 535 of file kis_tool_freehand.cc.

536{
537 return false;
538}

Friends And Related Symbol Documentation

◆ KisToolFreehandPaintingInformationBuilder

Definition at line 93 of file kis_tool_freehand.h.

◆ KisView

friend class KisView
friend

Definition at line 116 of file kis_tool_freehand.h.

◆ KisViewManager

friend class KisViewManager
friend

Definition at line 115 of file kis_tool_freehand.h.

Member Data Documentation

◆ m_assistant

bool KisToolFreehand::m_assistant {false}
protected

Definition at line 118 of file kis_tool_freehand.h.

118{false};

◆ m_beginAlternateActionEvent

std::optional<KoPointerEventWrapper> KisToolFreehand::m_beginAlternateActionEvent
private

Definition at line 135 of file kis_tool_freehand.h.

◆ m_brushResizeCompressor

KisSignalCompressorWithParam<qreal> KisToolFreehand::m_brushResizeCompressor
private

Definition at line 133 of file kis_tool_freehand.h.

◆ m_eraser_snapping

bool KisToolFreehand::m_eraser_snapping {false}
protected

Definition at line 121 of file kis_tool_freehand.h.

121{false};

◆ m_helper

KisToolFreehandHelper* KisToolFreehand::m_helper {nullptr}
private

Definition at line 125 of file kis_tool_freehand.h.

125{nullptr};

◆ m_infoBuilder

KisPaintingInformationBuilder* KisToolFreehand::m_infoBuilder {nullptr}
private

Definition at line 124 of file kis_tool_freehand.h.

124{nullptr};

◆ m_initialGestureDocPoint

QPointF KisToolFreehand::m_initialGestureDocPoint
private

Definition at line 127 of file kis_tool_freehand.h.

◆ m_initialGestureGlobalPoint

QPoint KisToolFreehand::m_initialGestureGlobalPoint
private

Definition at line 130 of file kis_tool_freehand.h.

◆ m_lastDocumentPoint

QPointF KisToolFreehand::m_lastDocumentPoint
private

Definition at line 128 of file kis_tool_freehand.h.

◆ m_lastPaintOpSize

qreal KisToolFreehand::m_lastPaintOpSize {0.0}
private

Definition at line 129 of file kis_tool_freehand.h.

129{0.0};

◆ m_magnetism

double KisToolFreehand::m_magnetism {1.0}
protected

Definition at line 119 of file kis_tool_freehand.h.

119{1.0};

◆ m_only_one_assistant

bool KisToolFreehand::m_only_one_assistant {true}
protected

Definition at line 120 of file kis_tool_freehand.h.

120{true};

◆ m_paintopBasedSamplingInAction

bool KisToolFreehand::m_paintopBasedSamplingInAction {false}
private

Definition at line 132 of file kis_tool_freehand.h.

132{false};

The documentation for this class was generated from the following files: