Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_layer_projection_plane.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include <QBitArray>
10#include <KoColorSpace.h>
11#include <KoChannelInfo.h>
13#include "kis_painter.h"
14#include "kis_projection_leaf.h"
17
18
24
25
27 : m_d(new Private)
28{
29 m_d->layer = layer;
30}
31
35
36QRect KisLayerProjectionPlane::recalculate(const QRect& rect, KisNodeSP filthyNode, KisRenderPassFlags flags)
37{
38 return m_d->layer->updateProjection(rect, filthyNode, flags);
39}
40
42{
43 KisPaintDeviceSP device = m_d->layer->projection();
44 if (!device) return;
45
46 QRect needRect = rect;
47
48 if (m_d->layer->compositeOpId() != COMPOSITE_COPY &&
49 m_d->layer->compositeOpId() != COMPOSITE_DESTINATION_IN &&
50 m_d->layer->compositeOpId() != COMPOSITE_DESTINATION_ATOP) {
51
52 needRect &= device->extent();
53 }
54
55 if(needRect.isEmpty()) return;
56
57 const QBitArray channelFlags = m_d->layer->projectionLeaf()->channelFlags();
58
59 QScopedPointer<KisCachedPaintDevice::Guard> d1;
60
61 if (thresholdMode != KritaUtils::ThresholdNone) {
62 d1.reset(new KisCachedPaintDevice::Guard(device, m_d->cachedDevice));
63 KisPaintDeviceSP tmp = d1->device();
64 tmp->makeCloneFromRough(device, needRect);
65
67
68 device = tmp;
69 }
70
71 painter->setChannelFlags(channelFlags);
72 painter->setCompositeOpId(m_d->layer->compositeOpId());
73 painter->setOpacityU8(m_d->layer->projectionLeaf()->opacity());
74 painter->bitBlt(needRect.topLeft(), device, needRect);
75}
76
78{
80}
81
83{
84 applyImpl(painter, rect, thresholdMode);
85}
86
91
93{
94 return m_d->layer->needRect(rect, pos);
95}
96
98{
99 return m_d->layer->changeRect(rect, pos);
100}
101
103{
104 return m_d->layer->accessRect(rect, pos);
105}
106
108{
109 return m_d->layer->needRectForOriginal(rect);
110}
111
113{
114 return m_d->layer->tightUserVisibleBounds();
115}
116
118{
119 return m_d->layer->looseUserVisibleBounds();
120}
121
const QString COMPOSITE_COPY
const QString COMPOSITE_DESTINATION_ATOP
const QString COMPOSITE_DESTINATION_IN
const QScopedPointer< Private > m_d
QRect accessRect(const QRect &rect, KisLayer::PositionToFilthy pos) const override
QRect needRectForOriginal(const QRect &rect) const override
QRect recalculate(const QRect &rect, KisNodeSP filthyNode, KisRenderPassFlags flags) override
void apply(KisPainter *painter, const QRect &rect) override
void applyImpl(KisPainter *painter, const QRect &rect, KritaUtils::ThresholdMode thresholdMode)
void applyMaxOutAlpha(KisPainter *painter, const QRect &rect, KritaUtils::ThresholdMode thresholdMode)
QRect tightUserVisibleBounds() const override
KisPaintDeviceList getLodCapableDevices() const override
QRect looseUserVisibleBounds() const override
QRect needRect(const QRect &rect, KisLayer::PositionToFilthy pos) const override
QRect changeRect(const QRect &rect, KisLayer::PositionToFilthy pos) const override
QRect extent() const
void bitBlt(qint32 dstX, qint32 dstY, const KisPaintDeviceSP srcDev, qint32 srcX, qint32 srcY, qint32 srcWidth, qint32 srcHeight)
void setOpacityU8(quint8 opacity)
Set the opacity which is used in painting (like filling polygons)
void setChannelFlags(QBitArray channelFlags)
void setCompositeOpId(const KoCompositeOp *op)
QList< KisPaintDeviceSP > KisPaintDeviceList
Definition kis_types.h:267
void thresholdOpacity(KisPaintDeviceSP device, const QRect &rect, ThresholdMode mode)
PositionToFilthy
Definition kis_node.h:58