Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_color_sampler_stroke_strategy.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include "kis_tool_utils.h"
10#include "kis_paint_device.h"
11
13{
14 Private() : shouldSkipWork(false) {}
15
17 int radius = 1;
18 int blend = 100;
19
20 boost::optional<KoColor> lastSelectedColor;
21};
22
24 : KisSimpleStrokeStrategy(QLatin1String("KisColorSamplerStrokeStrategy")),
25 m_d(new Private)
26{
30
31 m_d->radius = qMax(1, qRound(radius * KisLodTransform::lodToScale(lod)));
32 m_d->blend = blend;
33}
34
38
40{
41 if (m_d->shouldSkipWork) return;
42
43 Data *d = dynamic_cast<Data*>(data);
44 FinalizeData *finalize = dynamic_cast<FinalizeData*>(data);
45
46 if (d) {
47 KoColor color;
48 KoColor previous = d->currentColor;
49 if (KisToolUtils::sampleColor(color, d->dev, d->pt, &previous, m_d->radius, m_d->blend)) {
50 m_d->lastSelectedColor = color;
51 Q_EMIT sigColorUpdated(color);
52 }
53 } else if (finalize) {
54 if (m_d->lastSelectedColor) {
55 Q_EMIT sigFinalColorSelected(*m_d->lastSelectedColor);
56 }
57 }
58}
59
61{
62 m_d->shouldSkipWork = true;
63
64 KisColorSamplerStrokeStrategy *lodStrategy = new KisColorSamplerStrokeStrategy(m_d->radius, m_d->blend, levelOfDetail);
67 Qt::DirectConnection);
68 return lodStrategy;
69}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void doStrokeCallback(KisStrokeJobData *data) override
KisStrokeStrategy * createLodClone(int levelOfDetail) override
KisColorSamplerStrokeStrategy(int radius, int blend, int lod=0)
void sigFinalColorSelected(const KoColor &color)
void sigColorUpdated(const KoColor &color)
static qreal lodToScale(int levelOfDetail)
void enableJob(JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
void setClearsRedoOnStart(bool value)
void setSupportsWrapAroundMode(bool value)
bool sampleColor(KoColor &out_color, KisPaintDeviceSP dev, const QPoint &pos, KoColor const *const blendColor, int radius, int blend, bool pure)