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
 
KisCoordinatesConvertercoordinatesConverter () const
 
BitDepthMode currentBitDepthMode () const override
 
QString currentBitDepthUserReport () const override
 
KisCanvasDecorationSP decoration (const QString &id) const override
 
QList< KisCanvasDecorationSPdecorations () 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
 
KoToolProxytoolProxy () 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
KisCanvas2canvas () 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 57 of file kis_qpainter_canvas.cpp.

58 : QWidget(parent)
60 , m_d(new Private())
61{
62 setAutoFillBackground(true);
63 setAcceptDrops(true);
64 setFocusPolicy(Qt::StrongFocus);
65 setAttribute(Qt::WA_InputMethodEnabled, true);
66 setAttribute(Qt::WA_StaticContents);
67 setAttribute(Qt::WA_OpaquePaintEvent);
68#ifdef Q_OS_MACOS
69 setAttribute(Qt::WA_AcceptTouchEvents, false);
70#else
71 setAttribute(Qt::WA_AcceptTouchEvents, true);
72#endif
73 connect(KisConfigNotifier::instance(), SIGNAL(configChanged()), SLOT(slotConfigChanged()));
75}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisCoordinatesConverter * coordinatesConverter() const
KisCanvasWidgetBase(KisCanvas2 *canvas, KisCoordinatesConverter *coordinatesConverter)
KisCanvas2 * canvas() const
static KisConfigNotifier * instance()

References connect(), KisConfigNotifier::instance(), and slotConfigChanged().

◆ ~KisQPainterCanvas()

KisQPainterCanvas::~KisQPainterCanvas ( )
override

Definition at line 77 of file kis_qpainter_canvas.cpp.

78{
79 delete m_d;
80}

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 274 of file kis_qpainter_canvas.cpp.

275{
276 return focusNextPrevChild(next);
277}

◆ channelSelectionChanged()

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

Implements KisAbstractCanvasWidget.

Definition at line 172 of file kis_qpainter_canvas.cpp.

173{
174 Q_ASSERT(m_d->prescaledProjection);
176}
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 125 of file kis_qpainter_canvas.cpp.

126{
128
129 QTransform imageTransform = converter->viewportToWidgetTransform();
130 gc.setTransform(imageTransform);
131 gc.setRenderHint(QPainter::SmoothPixmapTransform, true);
132
133 QRectF viewportRect = converter->widgetToViewport(updateWidgetRect);
134
135 gc.setCompositionMode(QPainter::CompositionMode_SourceOver);
136 gc.drawImage(viewportRect, m_d->prescaledProjection->prescaledQImage(),
137 viewportRect);
138}
_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 150 of file kis_qpainter_canvas.cpp.

151{
152 processFocusInEvent(event);
153}
void processFocusInEvent(QFocusEvent *event)

References KisCanvasWidgetBase::processFocusInEvent().

◆ focusOutEvent()

void KisQPainterCanvas::focusOutEvent ( QFocusEvent * event)
override

Definition at line 155 of file kis_qpainter_canvas.cpp.

156{
158}
void processFocusOutEvent(QFocusEvent *event)

References KisCanvasWidgetBase::processFocusOutEvent().

◆ hideEvent()

void KisQPainterCanvas::hideEvent ( QHideEvent * event)
override

Definition at line 160 of file kis_qpainter_canvas.cpp.

161{
162 QWidget::hideEvent(e);
164}
void notifyDecorationsWindowMinimized(bool minimized)

References KisCanvasWidgetBase::notifyDecorationsWindowMinimized().

◆ inputMethodEvent()

void KisQPainterCanvas::inputMethodEvent ( QInputMethodEvent * event)
override

Definition at line 145 of file kis_qpainter_canvas.cpp.

146{
148}
void processInputMethodEvent(QInputMethodEvent *event)

References KisCanvasWidgetBase::processInputMethodEvent().

◆ inputMethodQuery()

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

Definition at line 140 of file kis_qpainter_canvas.cpp.

141{
142 return processInputMethodQuery(query);
143}
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 192 of file kis_qpainter_canvas.cpp.

193{
194 Q_UNUSED(cs);
195 // FIXME: on color space change the data is refetched multiple
196 // times by different actors!
197 canvas()->startUpdateInPatches(canvas()->image()->bounds());
198}
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 87 of file kis_qpainter_canvas.cpp.

88{
89 KisImageWSP image = canvas()->image();
90 if (image == 0) return;
91
92 setAutoFillBackground(false);
93
94 QPainter gc(this);
95 gc.setClipRegion(ev->region());
96
98
99 gc.save();
100
101 gc.setCompositionMode(QPainter::CompositionMode_Source);
102 gc.fillRect(QRect(QPoint(0, 0), size()), borderColor());
103
104 QTransform checkersTransform;
105 QPointF brushOrigin;
106 QPolygonF polygon;
107
108 converter->getQPainterCheckersInfo(&checkersTransform, &brushOrigin, &polygon, m_d->scrollCheckers);
109 gc.setPen(Qt::NoPen);
110 gc.setBrush(m_d->checkBrush);
111 gc.setBrushOrigin(brushOrigin);
112 gc.setTransform(checkersTransform);
113 gc.drawPolygon(polygon);
114
115 drawImage(gc, ev->rect());
116
117 gc.restore();
118
119 drawDecorations(gc, ev->rect());
120
121 gc.end();
122 m_d->repaintDbg.paint(this, ev);
123}
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 252 of file kis_qpainter_canvas.cpp.

253{
254 QSize size(e->size());
255 if (size.width() <= 0) {
256 size.setWidth(1);
257 }
258 if (size.height() <= 0) {
259 size.setHeight(1);
260 }
261
263}
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 184 of file kis_qpainter_canvas.cpp.

185{
186 Q_ASSERT(m_d->prescaledProjection);
188
189 canvas()->startUpdateInPatches(canvas()->image()->bounds());
190}
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 82 of file kis_qpainter_canvas.cpp.

83{
84 m_d->prescaledProjection = prescaledProjection;
85}

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

◆ setWrapAroundViewingMode()

void KisQPainterCanvas::setWrapAroundViewingMode ( bool value)
overridevirtual

Reimplemented from KisCanvasWidgetBase.

Definition at line 200 of file kis_qpainter_canvas.cpp.

201{
202 Q_UNUSED(value);
203 dbgKrita << "Wrap around viewing mode not implemented in QPainter Canvas.";
204 return;
205}
#define dbgKrita
Definition kis_debug.h:45

References dbgKrita, and value().

◆ setWrapAroundViewingModeAxis()

void KisQPainterCanvas::setWrapAroundViewingModeAxis ( WrapAroundAxis value)
overridevirtual

Reimplemented from KisCanvasWidgetBase.

Definition at line 212 of file kis_qpainter_canvas.cpp.

213{
214 Q_UNUSED(value);
215 dbgKrita << "Wrap around viewing mode not implemented in QPainter Canvas.";
216 return;
217}

References dbgKrita, and value().

◆ showEvent()

void KisQPainterCanvas::showEvent ( QShowEvent * event)
override

Definition at line 166 of file kis_qpainter_canvas.cpp.

167{
168 QWidget::showEvent(e);
170}

References KisCanvasWidgetBase::notifyDecorationsWindowMinimized().

◆ slotConfigChanged

void KisQPainterCanvas::slotConfigChanged ( )
privateslot

◆ startUpdateCanvasProjection()

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

Implements KisAbstractCanvasWidget.

Definition at line 229 of file kis_qpainter_canvas.cpp.

230{
232}
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.

216{
217 QVector<QRect> dirtyViewRects;
218
219 Q_FOREACH (KisUpdateInfoSP info, infoObjects) {
220 dirtyViewRects << this->updateCanvasProjection(info);
221 }
222
223 return dirtyViewRects;
224}
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 235 of file kis_qpainter_canvas.cpp.

236{
242 bool isPPUpdateInfo = dynamic_cast<KisPPUpdateInfo*>(info.data());
243 if (isPPUpdateInfo) {
245 return info->dirtyViewportRect();
246 } else {
247 return QRect();
248 }
249}
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 207 of file kis_qpainter_canvas.cpp.

208{
209 return false;
210}

◆ wrapAroundViewingModeAxis()

WrapAroundAxis KisQPainterCanvas::wrapAroundViewingModeAxis ( ) const
overridevirtual

Implements KisAbstractCanvasWidget.

Definition at line 219 of file kis_qpainter_canvas.cpp.

220{
221 return WRAPAROUND_BOTH;
222}
@ 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: