18#include <QApplication>
55using namespace std::placeholders;
59 Qt::KeyboardModifiers modifiers)
62 modifiers.testFlag(Qt::ShiftModifier);
65bool hasLockedValidTemporaryStraightRuler(
const std::optional<KisTemporaryPaintConstraint> &constraint)
67 return constraint && constraint->isLocked() && constraint->hasValidLine();
94 connect(provider, SIGNAL(sigEffectiveCompositeOpChanged()), SLOT(
resetCursorStyle()));
100 connect(decoration.
data(), SIGNAL(temporaryConstraintAvailabilityChanged()), SLOT(
resetCursorStyle()));
208 if (canvas2->paintingAssistantsDecoration()) {
209 canvas2->paintingAssistantsDecoration()->setTemporaryConstraint(std::nullopt);
230 return documentPoint;
243 std::optional<KisTemporaryPaintConstraint> constraint =
246 if (!constraint || constraint->isLocked()) {
250 if (!constraint->hasLine()) {
251 constraint->beginLine(documentPoint);
253 constraint->updateLine(documentPoint, snapsTemporaryStraightRuler(*constraint, modifiers));
266 std::optional<KisTemporaryPaintConstraint> constraint =
273 if (!constraint->hasLine()) {
277 if (!constraint->isLocked()) {
278 constraint->updateLine(documentPoint, snapsTemporaryStraightRuler(*constraint, modifiers));
281 if (constraint->hasValidLine()) {
282 constraint->setLocked(
true);
286 constraint->setInteractionMode(interactionMode);
310 Q_UNUSED(paintOpIgnoredEvent);
332 QString message = i18n(
"The brush tool cannot paint on this layer. Please select a paint layer or mask.");
337 QString message = i18n(
"The MyPaint Brush Engine is not available for this colorspace");
377 static_cast<KisCanvas2*
>(
canvas())->paintingAssistantsDecoration()->endStroke();
415 return !paintOpIgnoredEvent;
475 QPointF offset = actualWidgetPosition - lastWidgetPosition;
479 QRect screenRect = QGuiApplication::primaryScreen()->availableVirtualGeometry();
486 const qreal effectiveMaxDragSize = 0.5 * screenRect.width();
487 const qreal effectiveMaxBrushSize = qMin(maxBrushSize, effectiveMaxDragSize / scaleX);
489 const qreal scaleCoeff = effectiveMaxBrushSize / effectiveMaxDragSize;
490 const qreal sizeDiff = scaleCoeff * offset.x() ;
492 if (qAbs(sizeDiff) > 0.01) {
498 newSize = qMax(qRound(newSize), 1);
501 newSize = qBound(0.01, newSize, maxBrushSize);
503 settings->setPaintOpSize(newSize);
559 settings->setPaintOpSize(newSize);
593 qreal perspective = 1.0;
596 if (grid && grid->isActive() && grid->contains(documentPoint)) {
597 perspective = grid->distance(documentPoint);
KisCoordinatesConverter * coordinatesConverter
KisViewManager * viewManager() const
KisPaintingAssistantsDecorationSP paintingAssistantsDecoration() const
static KisConfigNotifier * instance()
CursorStyle newCursorStyle(bool defaultValue=false) const
CursorStyle eraserCursorStyle(bool defaultValue=false) const
bool separateEraserCursor(bool defaultValue=false) const
void imageScale(qreal *scaleX, qreal *scaleY) const
static QCursor pixelBlackCursor()
static QCursor loadWithSize(const QString &cursorName, int width, int height, int hotspotX=-1, int hotspotY=-1)
static QCursor blankCursor()
static QCursor crossCursor()
static QCursor triangleRightHandedCursor()
static QCursor arrowCursor()
static QCursor triangleLeftHandedCursor()
static QCursor roundCursor()
static QCursor pixelWhiteCursor()
static QCursor eraserCursor()
int maxBrushSize(bool defaultValue=false) const
std::optional< KisTemporaryPaintConstraint > temporaryConstraint() const
void setOnlyOneAssistantSnap(bool assistant)
sets whether we snap to only one assistant
void setAdjustedBrushPosition(const QPointF position)
void setTemporaryConstraint(std::optional< KisTemporaryPaintConstraint > constraint)
void setEraserSnap(bool assistant)
sets whether eraser brushes snap
QPointF adjustPosition(const QPointF &point, const QPointF &strokeBegin)
InteractionMode interactionMode() const
void enableControls()
disable and enable toolbar controls. used for disabling them during painting.
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
QPointer< KoCanvasResourceProvider > resourceManager
qreal rotation() const
return the rotation (or a default value)
qreal tangentialPressure() const
Qt::KeyboardModifiers modifiers() const
QPointF point
The point in document coordinates.
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
@ CURSOR_STYLE_SMALL_ROUND
@ CURSOR_STYLE_TRIANGLE_RIGHTHANDED
@ CURSOR_STYLE_WHITE_PIXEL
@ CURSOR_STYLE_BLACK_PIXEL
@ CURSOR_STYLE_TRIANGLE_LEFTHANDED
#define koIcon(name)
Use these macros for icons without any issues.