Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDabCacheUtils.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#include "KisDabCacheUtils.h"
8
9#include "kis_brush.h"
10#include "kis_paint_device.h"
12#include "kis_color_source.h"
13
14#include <KisSharpnessOption.h>
15#include <kis_texture_option.h>
16
17#include <kundo2command.h>
18
20{
21
25
29
31{
32 brush->prepareForSeqNo(info, seqNo);
33}
34
35QRect correctDabRectWhenFetchedFromCache(const QRect &dabRect,
36 const QSize &realDabSize)
37{
38 int diffX = (realDabSize.width() - dabRect.width()) / 2;
39 int diffY = (realDabSize.height() - dabRect.height()) / 2;
40
41 return QRect(dabRect.x() - diffX, dabRect.y() - diffY,
42 realDabSize.width() , realDabSize.height());
43}
44
45void generateDab(const DabGenerationInfo &di, DabRenderingResources *resources, KisFixedPaintDeviceSP *dab, bool forceNormalizedRGBAImageStamp)
46{
48 const KoColorSpace *cs = (*dab)->colorSpace();
49
50
51 if (forceNormalizedRGBAImageStamp || resources->brush->brushApplication() == IMAGESTAMP) {
52 *dab = resources->brush->paintDevice(cs, di.shape, di.info,
53 di.subPixel.x(),
54 di.subPixel.y());
55
56 } else if (di.solidColorFill) {
57 resources->brush->mask(*dab,
58 di.paintColor,
59 di.shape,
60 di.info,
61 di.subPixel.x(), di.subPixel.y(),
64 }
65 else {
66 if (!resources->colorSourceDevice ||
67 *cs != *resources->colorSourceDevice->colorSpace()) {
68
69 resources->colorSourceDevice = new KisPaintDevice(cs);
70 }
71 else {
72 resources->colorSourceDevice->clear();
73 }
74
75 QRect maskRect(QPoint(), di.dstDabRect.size());
76 resources->colorSource->colorize(resources->colorSourceDevice, maskRect, di.info.pos().toPoint());
77 resources->colorSourceDevice->convertTo(cs);
78
79 resources->brush->mask(*dab, resources->colorSourceDevice,
80 di.shape,
81 di.info,
82 di.subPixel.x(), di.subPixel.y(),
85 }
86
87 if (!di.mirrorProperties.isEmpty()) {
88 (*dab)->mirror(di.mirrorProperties.horizontalMirror,
90 }
91}
92
94 const QPoint &dabTopLeft,
95 const KisPaintInformation& info,
96 DabRenderingResources *resources)
97{
98 if (resources->sharpnessOption) {
99 resources->sharpnessOption->applyThreshold(dab, info);
100 }
101
102 if (resources->textureOption) {
103 resources->textureOption->apply(dab, dabTopLeft, info);
104 }
105}
106
107}
108
virtual void clear()
const KoColorSpace * colorSpace() const
void convertTo(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags(), KUndo2Command *parentCommand=nullptr, KoUpdater *progressUpdater=nullptr)
const QPointF & pos() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
@ IMAGESTAMP
Definition kis_brush.h:40
void postProcessDab(KisFixedPaintDeviceSP dab, const QPoint &dabTopLeft, const KisPaintInformation &info, DabRenderingResources *resources)
void generateDab(const DabGenerationInfo &di, DabRenderingResources *resources, KisFixedPaintDeviceSP *dab, bool forceNormalizedRGBAImageStamp)
QRect correctDabRectWhenFetchedFromCache(const QRect &dabRect, const QSize &realDabSize)
QScopedPointer< KisColorSource > colorSource
QScopedPointer< KisSharpnessOption > sharpnessOption
virtual void syncResourcesToSeqNo(int seqNo, const KisPaintInformation &info)
QScopedPointer< KisTextureOption > textureOption