27#include <klocalizedstring.h>
80 m_isOutlineEnabled(true),
81 m_isOutlineVisible(true),
82 m_colorSamplerHelper(dynamic_cast<
KisCanvas2*>(canvas)),
92 int increment = qMax(1,
int(std::ceil(qreal(brushSize) / 15)));
93 brushSize += increment;
94 }
while (brushSize < maxSize);
133 const QString formattedBrushName =
v.toString().replace(
"_",
" ");
198 disconnect(
action(
"increase_brush_size"), 0,
this, 0);
199 disconnect(
action(
"decrease_brush_size"), 0,
this, 0);
202 disconnect(
action(
"rotate_brush_tip_clockwise"), 0,
this, 0);
203 disconnect(
action(
"rotate_brush_tip_clockwise_precise"), 0,
this, 0);
204 disconnect(
action(
"rotate_brush_tip_counter_clockwise"), 0,
this, 0);
205 disconnect(
action(
"rotate_brush_tip_counter_clockwise_precise"), 0,
this, 0);
235 if (currentOutlineStyle ==
OUTLINE_NONE)
return originalOutline;
246 const int maxThresholdSum = widgetSize.width() + widgetSize.height();
250 const qreal sum = boundingRect.width() + boundingRect.height();
252 QPointF center = boundingRect.center();
254 if (sum > maxThresholdSum) {
255 const int hairOffset = 7;
257 QPainterPath crossIcon;
259 crossIcon.moveTo(center.x(), center.y() - hairOffset);
260 crossIcon.lineTo(center.x(), center.y() + hairOffset);
262 crossIcon.moveTo(center.x() - hairOffset, center.y());
263 crossIcon.lineTo(center.x() + hairOffset, center.y());
267 }
else if (sum < minThresholdSize && !outline.
isEmpty()) {
268 outline = QPainterPath();
269 outline.
addEllipse(center, 0.5 * minThresholdSize, 0.5 * minThresholdSize);
403 QVBoxLayout *verticalLayout =
new QVBoxLayout(
optionWidget);
404 verticalLayout->setObjectName(
"KisToolPaint::OptionWidget::VerticalLayout");
405 verticalLayout->setContentsMargins(0,0,0,0);
406 verticalLayout->setSpacing(5);
410 specialSpacer->setObjectName(
"SpecialSpacer");
411 specialSpacer->setFixedSize(0, 0);
412 verticalLayout->addWidget(specialSpacer);
413 verticalLayout->addWidget(specialSpacer);
424 QHBoxLayout *hLayout =
new QHBoxLayout();
425 hLayout->addWidget(push);
426 hLayout->addItem(
new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed));
427 verticalLayout->addLayout(hLayout);
437 int index = layout->indexOf(control);
439 int row, col, rowSpan, colSpan;
440 layout->getItemPosition(index, &row, &col, &rowSpan, &colSpan);
443 QLayoutItem *item = layout->itemAtPosition(row, col - 1);
446 result = item->widget();
449 QLayoutItem *item = layout->itemAtPosition(row, col + 1);
451 result = item->widget();
460 control->setVisible(
value);
463 label->setVisible(
value);
469 control->setEnabled(
value);
472 label->setEnabled(
value);
499 QWhatsThis::showText(QCursor::pos(),
quickHelp());
540 std::vector<int>::iterator result =
543 qRound(paintopSize));
555 std::vector<int>::reverse_iterator result =
559 std::greater<int>());
605 QRectF outlinePixelRect;
606 QRectF outlineDocRect;
608 QRectF colorPreviewDocUpdateRect;
610 QPointF outlineMoveVector;
619 const auto outlineStyleIsVisible = [&]() {
624 const auto shouldShowOutlineWhilePainting = [&]() {
629 (outlineStyleIsVisible() &&
664 qreal xoffset = 2.0/zoomX;
665 qreal yoffset = 2.0/zoomY;
667 if (!outlineDocRect.isEmpty()) {
668 outlineDocRect.adjust(-xoffset,-yoffset,xoffset,yoffset);
673 if (!colorPreviewDocUpdateRect.isEmpty()) {
674 colorPreviewDocUpdateRect = colorPreviewDocUpdateRect.adjusted(-xoffset,-yoffset,xoffset,yoffset);
698 if (!outlineDocRect.isEmpty()) {
722 const qreal maxUpdateAheadOutlinePortion = 0.5;
725 const qreal offsetFuzzyExtension = 0.1;
732 offsetRect = outlineDocRect.translated((1.0 + offsetFuzzyExtension) * outlineMoveVector);
738 if (!colorPreviewDocUpdateRect.isEmpty()) {
763 m_d->lastCursorPos.reset(pixelPos);
775 QPointF prevPoint =
m_d->lastCursorPos.pushThroughHistory(pixelPos, currentZoom);
float value(const T *src, size_t ch)
const QString COMPOSITE_ERASE
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void activate(bool sampleCurrentLayer, bool pickFgColor)
void paint(QPainter &gc, const KoViewConverter &converter)
void continueAction(const QPointF &docPoint)
void startAction(const QPointF &docPoint, int radius, int blend)
QRectF colorPreviewDocRect(const QPointF &docPoint)
KisPopupPalette * popupPalette
void updateCanvasToolOutlineDoc(const QRectF &docRect)
KisCoordinatesConverter * coordinatesConverter
KisViewManager * viewManager() const
KisAbstractCanvasWidget * canvasWidget
KisPaintingAssistantsDecorationSP paintingAssistantsDecoration() const
void updateCanvasDecorations()
const KoViewConverter * viewConverter() const override
KisPaintOpPresetSP currentPreset() const
static KisConfigNotifier * instance()
qreal outlineSizeMinimum(bool defaultValue=false) const
OutlineStyle newOutlineStyle(bool defaultValue=false) const
bool forceAlwaysFullSizedOutline(bool defaultValue=false) const
OutlineStyle eraserOutlineStyle(bool defaultValue=false) const
bool forceAlwaysFullSizedEraserOutline(bool defaultValue=false) const
bool showOutlineWhilePainting(bool defaultValue=false) const
bool separateEraserCursor(bool defaultValue=false) const
bool showEraserOutlineWhilePainting(bool defaultValue=false) const
bool xAxisMirrored() const
bool yAxisMirrored() const
qreal effectivePhysicalZoom() const
qreal rotationAngle() const
int maxBrushSize(bool defaultValue=false) const
QPointF pixelToDocument(const QPointF &pixelCoord) const
void addPath(const QPainterPath &path)
QRectF boundingRect() const
void addEllipse(const QPointF ¢er, qreal rx, qreal ry)
bool hasPaintableAssistants() const
KisCanvasResourceProvider * canvasResourceProvider()
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
bool isTouchEvent() const
QPointF point
The point in document coordinates.
virtual void zoom(qreal *zoomX, qreal *zoomY) const
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
auto maxDimension(Size size) -> decltype(size.width())
qreal directionBetweenPoints(const QPointF &p1, const QPointF &p2, qreal defaultAngle)
QIcon loadIcon(const QString &name)
@ EffectiveZoom
-Used only by painting tools for non-displaying purposes
@ CurrentEffectiveCompositeOp
@ CurrentPaintOpPresetName