27#include <klocalizedstring.h>
80 m_isOutlineEnabled(true),
81 m_isOutlineVisible(true),
83 m_colorSamplerHelper(dynamic_cast<
KisCanvas2*>(canvas)),
120 const QString formattedBrushName =
v.toString().replace(
"_",
" ");
185 disconnect(
action(
"increase_brush_size"), 0,
this, 0);
186 disconnect(
action(
"decrease_brush_size"), 0,
this, 0);
189 disconnect(
action(
"rotate_brush_tip_clockwise"), 0,
this, 0);
190 disconnect(
action(
"rotate_brush_tip_clockwise_precise"), 0,
this, 0);
191 disconnect(
action(
"rotate_brush_tip_counter_clockwise"), 0,
this, 0);
192 disconnect(
action(
"rotate_brush_tip_counter_clockwise_precise"), 0,
this, 0);
222 if (currentOutlineStyle ==
OUTLINE_NONE)
return originalOutline;
233 const int maxThresholdSum = widgetSize.width() + widgetSize.height();
237 const qreal sum = boundingRect.width() + boundingRect.height();
239 QPointF center = boundingRect.center();
241 if (sum > maxThresholdSum) {
242 const int hairOffset = 7;
244 QPainterPath crossIcon;
246 crossIcon.moveTo(center.x(), center.y() - hairOffset);
247 crossIcon.lineTo(center.x(), center.y() + hairOffset);
249 crossIcon.moveTo(center.x() - hairOffset, center.y());
250 crossIcon.lineTo(center.x() + hairOffset, center.y());
254 }
else if (sum < minThresholdSize && !outline.
isEmpty()) {
255 outline = QPainterPath();
256 outline.
addEllipse(center, 0.5 * minThresholdSize, 0.5 * minThresholdSize);
390 QVBoxLayout *verticalLayout =
new QVBoxLayout(
optionWidget);
391 verticalLayout->setObjectName(
"KisToolPaint::OptionWidget::VerticalLayout");
392 verticalLayout->setContentsMargins(0,0,0,0);
393 verticalLayout->setSpacing(5);
397 specialSpacer->setObjectName(
"SpecialSpacer");
398 specialSpacer->setFixedSize(0, 0);
399 verticalLayout->addWidget(specialSpacer);
400 verticalLayout->addWidget(specialSpacer);
411 QHBoxLayout *hLayout =
new QHBoxLayout();
412 hLayout->addWidget(push);
413 hLayout->addItem(
new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed));
414 verticalLayout->addLayout(hLayout);
424 int index = layout->indexOf(control);
426 int row, col, rowSpan, colSpan;
427 layout->getItemPosition(index, &row, &col, &rowSpan, &colSpan);
430 QLayoutItem *item = layout->itemAtPosition(row, col - 1);
433 result = item->widget();
436 QLayoutItem *item = layout->itemAtPosition(row, col + 1);
438 result = item->widget();
447 control->setVisible(
value);
450 label->setVisible(
value);
456 control->setEnabled(
value);
459 label->setEnabled(
value);
486 QWhatsThis::showText(QCursor::pos(),
quickHelp());
574 QRectF outlinePixelRect;
575 QRectF outlineDocRect;
577 QRectF colorPreviewDocUpdateRect;
579 QPointF outlineMoveVector;
588 const auto outlineStyleIsVisible = [&]() {
593 const auto shouldShowOutlineWhilePainting = [&]() {
598 (outlineStyleIsVisible() &&
633 qreal xoffset = 2.0/zoomX;
634 qreal yoffset = 2.0/zoomY;
636 if (!outlineDocRect.isEmpty()) {
637 outlineDocRect.adjust(-xoffset,-yoffset,xoffset,yoffset);
642 if (!colorPreviewDocUpdateRect.isEmpty()) {
643 colorPreviewDocUpdateRect = colorPreviewDocUpdateRect.adjusted(-xoffset,-yoffset,xoffset,yoffset);
667 if (!outlineDocRect.isEmpty()) {
691 const qreal maxUpdateAheadOutlinePortion = 0.5;
694 const qreal offsetFuzzyExtension = 0.1;
701 offsetRect = outlineDocRect.translated((1.0 + offsetFuzzyExtension) * outlineMoveVector);
707 if (!colorPreviewDocUpdateRect.isEmpty()) {
732 m_d->lastCursorPos.reset(pixelPos);
744 QPointF prevPoint =
m_d->lastCursorPos.pushThroughHistory(pixelPos, currentZoom);
float value(const T *src, size_t ch)
const QString COMPOSITE_ERASE
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
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()
QPointer< KoCanvasResourceProvider > resourceManager
bool isTouchEvent() const
QPointF point
The point in document coordinates.
virtual void zoom(qreal *zoomX, qreal *zoomY) const
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