Krita Source Code Documentation
Loading...
Searching...
No Matches
KisQPainterCanvas Class Reference

#include <kis_qpainter_canvas.h>

+ Inheritance diagram for KisQPainterCanvas:

Classes

class  Private
 

Public Member Functions

void channelSelectionChanged (const QBitArray &channelFlags) override
 
void finishResizingImage (qint32 w, qint32 h) override
 
void focusInEvent (QFocusEvent *event) override
 
void focusOutEvent (QFocusEvent *event) override
 
void hideEvent (QHideEvent *event) override
 
void inputMethodEvent (QInputMethodEvent *event) override
 
QVariant inputMethodQuery (Qt::InputMethodQuery query) const override
 
bool isBusy () const override
 
 KisQPainterCanvas (KisCanvas2 *canvas, KisCoordinatesConverter *coordinatesConverter, QWidget *parent)
 
void notifyImageColorSpaceChanged (const KoColorSpace *cs) override
 set/update the color space of the attached image
 
void paintEvent (QPaintEvent *ev) override
 
void resizeEvent (QResizeEvent *e) override
 
void setDisplayConfig (const KisDisplayConfig &config) override
 
void setDisplayFilter (QSharedPointer< KisDisplayFilter > displayFilter) override
 set the specified display filter on the canvas
 
void setLodResetInProgress (bool value) override
 
void setPrescaledProjection (KisPrescaledProjectionSP prescaledProjection)
 
void setWrapAroundViewingMode (bool value) override
 
void setWrapAroundViewingModeAxis (WrapAroundAxis value) override
 
void showEvent (QShowEvent *event) override
 
KisUpdateInfoSP startUpdateCanvasProjection (const QRect &rc) override
 
void updateCanvasDecorations (const QRect &decoUpdateRect) override
 
void updateCanvasImage (const QRect &imageUpdateRect) override
 
QVector< QRect > updateCanvasProjection (const QVector< KisUpdateInfoSP > &infoObjects) override
 
virtual QVector< QRect > updateCanvasProjection (const QVector< KisUpdateInfoSP > &infoObjects)=0
 
QRect updateCanvasProjection (KisUpdateInfoSP info) override
 
virtual QRect updateCanvasProjection (KisUpdateInfoSP info)=0
 
QWidget * widget () override
 
bool wrapAroundViewingMode () const override
 
WrapAroundAxis wrapAroundViewingModeAxis () const override
 
 ~KisQPainterCanvas () override
 
- Public Member Functions inherited from KisCanvasWidgetBase
void addDecoration (KisCanvasDecorationSP deco) override
 
QColor borderColor () const
 
KisCoordinatesConverter * coordinatesConverter () const
 
BitDepthMode currentBitDepthMode () const override
 
QString currentBitDepthUserReport () const override
 
KisCanvasDecorationSP decoration (const QString &id) const override
 
QList< KisCanvasDecorationSP > decorations () const override
 
void drawDecorations (QPainter &gc, const QRect &updateWidgetRect) const override
 
 KisCanvasWidgetBase (KisCanvas2 *canvas, KisCoordinatesConverter *coordinatesConverter)
 
void notifyDecorationsWindowMinimized (bool minimized)
 
void removeDecoration (const QString &id) override
 
void setDecorations (const QList< KisCanvasDecorationSP > &) override
 
KoToolProxy * toolProxy () const override
 
 ~KisCanvasWidgetBase () override
 
- Public Member Functions inherited from KisAbstractCanvasWidget
 KisAbstractCanvasWidget ()
 
virtual ~KisAbstractCanvasWidget ()
 

Protected Member Functions

bool callFocusNextPrevChild (bool next) override
 To be implemented by the derived canvas.
 
virtual void drawImage (QPainter &gc, const QRect &updateWidgetRect) const
 
- Protected Member Functions inherited from KisCanvasWidgetBase
KisCanvas2 * canvas () const
 
void notifyConfigChanged ()
 
void processFocusInEvent (QFocusEvent *event)
 
void processFocusOutEvent (QFocusEvent *event)
 
void processInputMethodEvent (QInputMethodEvent *event)
 
QVariant processInputMethodQuery (Qt::InputMethodQuery query) const
 

Private Slots

void slotConfigChanged ()
 

Private Attributes

Private *const m_d
 

Additional Inherited Members

- Public Types inherited from KisAbstractCanvasWidget
enum class  BitDepthMode { Depth8Bit = 0 , Depth10Bit }
 
- Static Public Member Functions inherited from KisCanvasWidgetBase
static QImage createCheckersImage (qint32 checkSize=-1)
 

Detailed Description

KisQPainterCanvas is the widget that shows the actual image using arthur.

NOTE: if you change something in the event handling here, also change it in the opengl canvas.

Author
Boudewijn Rempt boud@.nosp@m.vald.nosp@m.yas.o.nosp@m.rg

Definition at line 27 of file kis_qpainter_canvas.h.

Constructor & Destructor Documentation

◆ KisQPainterCanvas()

KisQPainterCanvas::KisQPainterCanvas ( KisCanvas2 * canvas,
KisCoordinatesConverter * coordinatesConverter,
QWidget * parent )

Definition at line 58 of file kis_qpainter_canvas.cpp.

59 : QWidget(parent)
61 , m_d(new Private())
62{
64
65 setAutoFillBackground(true);
66 setAcceptDrops(true);
67 setFocusPolicy(Qt::StrongFocus);
68 setAttribute(Qt::WA_InputMethodEnabled, true);
69 setAttribute(Qt::WA_StaticContents);
70 setAttribute(Qt::WA_OpaquePaintEvent);
71#ifdef Q_OS_MACOS
72 setAttribute(Qt::WA_AcceptTouchEvents, false);
73#else
74 setAttribute(Qt::WA_AcceptTouchEvents, true);
75#endif
76 connect(KisConfigNotifier::instance(), SIGNAL(configChanged()), SLOT(slotConfigChanged()));
78}
KisCoordinatesConverter * coordinatesConverter() const
KisCanvasWidgetBase(KisCanvas2 *canvas, KisCoordinatesConverter *coordinatesConverter)
KisCanvas2 * canvas() const
static KisConfigNotifier * instance()
static constexpr char ENABLED_PROPERTY[]

References KisLongPressEventFilter::ENABLED_PROPERTY, KisConfigNotifier::instance(), and slotConfigChanged().

◆ ~KisQPainterCanvas()

KisQPainterCanvas::~KisQPainterCanvas ( )
override

Definition at line 80 of file kis_qpainter_canvas.cpp.

81{
82 delete m_d;
83}

References m_d.

Member Function Documentation

◆ callFocusNextPrevChild()

bool KisQPainterCanvas::callFocusNextPrevChild ( bool next)
overrideprotectedvirtual

To be implemented by the derived canvas.

Implements KisCanvasWidgetBase.

Definition at line 277 of file kis_qpainter_canvas.cpp.

278{
279 return focusNextPrevChild(next);
280}

◆ channelSelectionChanged()

void KisQPainterCanvas::channelSelectionChanged ( const QBitArray & channelFlags)
overridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 175 of file kis_qpainter_canvas.cpp.

176{
177 Q_ASSERT(m_d->prescaledProjection);
179}
void setChannelFlags(const QBitArray &channelFlags)
KisPrescaledProjectionSP prescaledProjection

References m_d, KisQPainterCanvas::Private::prescaledProjection, and KisPrescaledProjection::setChannelFlags().

◆ drawImage()

void KisQPainterCanvas::drawImage ( QPainter & gc,
const QRect & updateWidgetRect ) const
protectedvirtual

Definition at line 128 of file kis_qpainter_canvas.cpp.

129{
131
132 QTransform imageTransform = converter->viewportToWidgetTransform();
133 gc.setTransform(imageTransform);
134 gc.setRenderHint(QPainter::SmoothPixmapTransform, true);
135
136 QRectF viewportRect = converter->widgetToViewport(updateWidgetRect);
137
138 gc.setCompositionMode(QPainter::CompositionMode_SourceOver);
139 gc.drawImage(viewportRect, m_d->prescaledProjection->prescaledQImage(),
140 viewportRect);
141}
_Private::Traits< T >::Result widgetToViewport(const T &obj) const

References KisCanvasWidgetBase::coordinatesConverter(), m_d, KisQPainterCanvas::Private::prescaledProjection, KisPrescaledProjection::prescaledQImage(), KisCoordinatesConverter::viewportToWidgetTransform(), and KisCoordinatesConverter::widgetToViewport().

◆ finishResizingImage()

void KisQPainterCanvas::finishResizingImage ( qint32 w,
qint32 h )
overridevirtual

◆ focusInEvent()

void KisQPainterCanvas::focusInEvent ( QFocusEvent * event)
override

Definition at line 153 of file kis_qpainter_canvas.cpp.

154{
155 processFocusInEvent(event);
156}
void processFocusInEvent(QFocusEvent *event)

References KisCanvasWidgetBase::processFocusInEvent().

◆ focusOutEvent()

void KisQPainterCanvas::focusOutEvent ( QFocusEvent * event)
override

Definition at line 158 of file kis_qpainter_canvas.cpp.

159{
161}
void processFocusOutEvent(QFocusEvent *event)

References KisCanvasWidgetBase::processFocusOutEvent().

◆ hideEvent()

void KisQPainterCanvas::hideEvent ( QHideEvent * event)
override

Definition at line 163 of file kis_qpainter_canvas.cpp.

164{
165 QWidget::hideEvent(e);
167}
void notifyDecorationsWindowMinimized(bool minimized)

References KisCanvasWidgetBase::notifyDecorationsWindowMinimized().

◆ inputMethodEvent()

void KisQPainterCanvas::inputMethodEvent ( QInputMethodEvent * event)
override

Definition at line 148 of file kis_qpainter_canvas.cpp.

149{
151}
void processInputMethodEvent(QInputMethodEvent *event)

References KisCanvasWidgetBase::processInputMethodEvent().

◆ inputMethodQuery()

QVariant KisQPainterCanvas::inputMethodQuery ( Qt::InputMethodQuery query) const
override

Definition at line 143 of file kis_qpainter_canvas.cpp.

144{
145 return processInputMethodQuery(query);
146}
QVariant processInputMethodQuery(Qt::InputMethodQuery query) const

References KisCanvasWidgetBase::processInputMethodQuery().

◆ isBusy()

bool KisQPainterCanvas::isBusy ( ) const
inlineoverridevirtual

Returns true if the asynchronous engine of the canvas (e.g. openGL pipeline) is busy with processing of the previous update events. This will make KisCanvas2 to postpone and compress update events.

Implements KisAbstractCanvasWidget.

Definition at line 73 of file kis_qpainter_canvas.h.

73 {
74 return false;
75 }

◆ notifyImageColorSpaceChanged()

void KisQPainterCanvas::notifyImageColorSpaceChanged ( const KoColorSpace * cs)
overridevirtual

set/update the color space of the attached image

Implements KisAbstractCanvasWidget.

Definition at line 195 of file kis_qpainter_canvas.cpp.

196{
197 Q_UNUSED(cs);
198 // FIXME: on color space change the data is refetched multiple
199 // times by different actors!
200 canvas()->startUpdateInPatches(canvas()->image()->bounds());
201}
void startUpdateInPatches(const QRect &imageRect)
#define bounds(x, a, b)

References bounds, KisCanvasWidgetBase::canvas(), and KisCanvas2::startUpdateInPatches().

◆ paintEvent()

void KisQPainterCanvas::paintEvent ( QPaintEvent * ev)
override

Definition at line 90 of file kis_qpainter_canvas.cpp.

91{
92 KisImageWSP image = canvas()->image();
93 if (image == 0) return;
94
95 setAutoFillBackground(false);
96
97 QPainter gc(this);
98 gc.setClipRegion(ev->region());
99
101
102 gc.save();
103
104 gc.setCompositionMode(QPainter::CompositionMode_Source);
105 gc.fillRect(QRect(QPoint(0, 0), size()), borderColor());
106
107 QTransform checkersTransform;
108 QPointF brushOrigin;
109 QPolygonF polygon;
110
111 converter->getQPainterCheckersInfo(&checkersTransform, &brushOrigin, &polygon, m_d->scrollCheckers);
112 gc.setPen(Qt::NoPen);
113 gc.setBrush(m_d->checkBrush);
114 gc.setBrushOrigin(brushOrigin);
115 gc.setTransform(checkersTransform);
116 gc.drawPolygon(polygon);
117
118 drawImage(gc, ev->rect());
119
120 gc.restore();
121
122 drawDecorations(gc, ev->rect());
123
124 gc.end();
125 m_d->repaintDbg.paint(this, ev);
126}
KisImageWSP image() const
void drawDecorations(QPainter &gc, const QRect &updateWidgetRect) const override
void getQPainterCheckersInfo(QTransform *transform, QPointF *brushOrigin, QPolygonF *polygon, const bool scrollCheckers) const
virtual void drawImage(QPainter &gc, const QRect &updateWidgetRect) const
void paint(QPaintDevice *paintDevice, const QRect &widgetRect)
int size(const Forest< T > &forest)
Definition KisForest.h:1232

References KisCanvasWidgetBase::borderColor(), KisCanvasWidgetBase::canvas(), KisQPainterCanvas::Private::checkBrush, KisCanvasWidgetBase::coordinatesConverter(), KisCanvasWidgetBase::drawDecorations(), drawImage(), KisCoordinatesConverter::getQPainterCheckersInfo(), KisCanvas2::image(), m_d, KisRepaintDebugger::paint(), KisQPainterCanvas::Private::repaintDbg, and KisQPainterCanvas::Private::scrollCheckers.

◆ resizeEvent()

void KisQPainterCanvas::resizeEvent ( QResizeEvent * e)
override

Definition at line 255 of file kis_qpainter_canvas.cpp.

256{
257 QSize size(e->size());
258 if (size.width() <= 0) {
259 size.setWidth(1);
260 }
261 if (size.height() <= 0) {
262 size.setHeight(1);
263 }
264
266}
void notifyCanvasSizeChanged(const QSize &widgetSize)

References m_d, KisPrescaledProjection::notifyCanvasSizeChanged(), and KisQPainterCanvas::Private::prescaledProjection.

◆ setDisplayConfig()

void KisQPainterCanvas::setDisplayConfig ( const KisDisplayConfig & config)
overridevirtual

◆ setDisplayFilter()

void KisQPainterCanvas::setDisplayFilter ( QSharedPointer< KisDisplayFilter > displayFilter)
overridevirtual

set the specified display filter on the canvas

Implements KisAbstractCanvasWidget.

Definition at line 187 of file kis_qpainter_canvas.cpp.

188{
189 Q_ASSERT(m_d->prescaledProjection);
191
192 canvas()->startUpdateInPatches(canvas()->image()->bounds());
193}
void setDisplayFilter(QSharedPointer< KisDisplayFilter > displayFilter)

References bounds, KisCanvasWidgetBase::canvas(), m_d, KisQPainterCanvas::Private::prescaledProjection, KisPrescaledProjection::setDisplayFilter(), and KisCanvas2::startUpdateInPatches().

◆ setLodResetInProgress()

void KisQPainterCanvas::setLodResetInProgress ( bool value)
inlineoverridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 77 of file kis_qpainter_canvas.h.

77 {
78 Q_UNUSED(value);
79 }
float value(const T *src, size_t ch)

References value().

◆ setPrescaledProjection()

void KisQPainterCanvas::setPrescaledProjection ( KisPrescaledProjectionSP prescaledProjection)

Definition at line 85 of file kis_qpainter_canvas.cpp.

86{
87 m_d->prescaledProjection = prescaledProjection;
88}

References m_d, and KisQPainterCanvas::Private::prescaledProjection.

◆ setWrapAroundViewingMode()

void KisQPainterCanvas::setWrapAroundViewingMode ( bool value)
overridevirtual

Reimplemented from KisCanvasWidgetBase.

Definition at line 203 of file kis_qpainter_canvas.cpp.

204{
205 Q_UNUSED(value);
206 dbgKrita << "Wrap around viewing mode not implemented in QPainter Canvas.";
207 return;
208}
#define dbgKrita
Definition kis_debug.h:49

References dbgKrita, and value().

◆ setWrapAroundViewingModeAxis()

void KisQPainterCanvas::setWrapAroundViewingModeAxis ( WrapAroundAxis value)
overridevirtual

Reimplemented from KisCanvasWidgetBase.

Definition at line 215 of file kis_qpainter_canvas.cpp.

216{
217 Q_UNUSED(value);
218 dbgKrita << "Wrap around viewing mode not implemented in QPainter Canvas.";
219 return;
220}

References dbgKrita, and value().

◆ showEvent()

void KisQPainterCanvas::showEvent ( QShowEvent * event)
override

Definition at line 169 of file kis_qpainter_canvas.cpp.

170{
171 QWidget::showEvent(e);
173}

References KisCanvasWidgetBase::notifyDecorationsWindowMinimized().

◆ slotConfigChanged

void KisQPainterCanvas::slotConfigChanged ( )
privateslot

◆ startUpdateCanvasProjection()

KisUpdateInfoSP KisQPainterCanvas::startUpdateCanvasProjection ( const QRect & rc)
overridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 232 of file kis_qpainter_canvas.cpp.

233{
235}
KisUpdateInfoSP updateCache(const QRect &dirtyImageRect)

References m_d, KisQPainterCanvas::Private::prescaledProjection, and KisPrescaledProjection::updateCache().

◆ updateCanvasDecorations()

void KisQPainterCanvas::updateCanvasDecorations ( const QRect & decoUpdateRect)
inlineoverridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 85 of file kis_qpainter_canvas.h.

85 {
86 update(decoUpdateRect);
87 }
bool update(QSpinBox *spinBox)

◆ updateCanvasImage()

void KisQPainterCanvas::updateCanvasImage ( const QRect & imageUpdateRect)
inlineoverridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 81 of file kis_qpainter_canvas.h.

81 {
82 update(imageUpdateRect);
83 }

◆ updateCanvasProjection() [1/4]

QVector< QRect > KisCanvasWidgetBase::updateCanvasProjection ( const QVector< KisUpdateInfoSP > & infoObjects)
overridevirtual

Reimplemented from KisCanvasWidgetBase.

Definition at line 69 of file kis_canvas_widget_base.cpp.

221{
222 QVector<QRect> dirtyViewRects;
223
224 Q_FOREACH (KisUpdateInfoSP info, infoObjects) {
225 dirtyViewRects << this->updateCanvasProjection(info);
226 }
227
228 return dirtyViewRects;
229}
QRect updateCanvasProjection(KisUpdateInfoSP info) override

◆ updateCanvasProjection() [2/4]

virtual QVector< QRect > KisAbstractCanvasWidget::updateCanvasProjection ( const QVector< KisUpdateInfoSP > & infoObjects)
virtual

Reimplemented from KisCanvasWidgetBase.

◆ updateCanvasProjection() [3/4]

QRect KisQPainterCanvas::updateCanvasProjection ( KisUpdateInfoSP info)
overridevirtual

It might happen that the canvas type is switched while the update info is being stuck in the Qt's signals queue. Than a wrong type of the info may come. So just check it here.

Reimplemented from KisCanvasWidgetBase.

Definition at line 238 of file kis_qpainter_canvas.cpp.

239{
245 bool isPPUpdateInfo = dynamic_cast<KisPPUpdateInfo*>(info.data());
246 if (isPPUpdateInfo) {
248 return info->dirtyViewportRect();
249 } else {
250 return QRect();
251 }
252}
void recalculateCache(KisUpdateInfoSP info)

References KisSharedPtr< T >::data(), m_d, KisQPainterCanvas::Private::prescaledProjection, and KisPrescaledProjection::recalculateCache().

◆ updateCanvasProjection() [4/4]

virtual QRect KisAbstractCanvasWidget::updateCanvasProjection ( KisUpdateInfoSP info)
virtual

Reimplemented from KisCanvasWidgetBase.

◆ widget()

QWidget * KisQPainterCanvas::widget ( )
inlineoverridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 69 of file kis_qpainter_canvas.h.

69 {
70 return this;
71 }

◆ wrapAroundViewingMode()

bool KisQPainterCanvas::wrapAroundViewingMode ( ) const
overridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 210 of file kis_qpainter_canvas.cpp.

211{
212 return false;
213}

◆ wrapAroundViewingModeAxis()

WrapAroundAxis KisQPainterCanvas::wrapAroundViewingModeAxis ( ) const
overridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 222 of file kis_qpainter_canvas.cpp.

223{
224 return WRAPAROUND_BOTH;
225}
@ WRAPAROUND_BOTH

References WRAPAROUND_BOTH.

Member Data Documentation

◆ m_d

Private* const KisQPainterCanvas::m_d
private

Definition at line 101 of file kis_qpainter_canvas.h.


The documentation for this class was generated from the following files: