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

#include <overviewwidget.h>

+ Inheritance diagram for OverviewWidget:

Public Slots

void slotThemeChanged ()
 
void startUpdateCanvasProjection ()
 
void updateThumbnail (QImage pixmap)
 

Signals

void signalDraggingFinished ()
 
void signalDraggingStarted ()
 

Public Member Functions

bool isDragging () const
 
 OverviewWidget (QWidget *parent=0)
 
void setCanvas (KisCanvas2 *canvas) override
 
 ~OverviewWidget () override
 
- Public Member Functions inherited from KisWidgetWithIdleTask< QWidget >
void hideEvent (QHideEvent *event) override
 
 KisWidgetWithIdleTask (QWidget *parent=0, Qt::WindowFlags flags=Qt::WindowFlags())
 
void showEvent (QShowEvent *event) override
 
void triggerCacheUpdate ()
 
 ~KisWidgetWithIdleTask () override=default
 

Protected Member Functions

void mouseMoveEvent (QMouseEvent *event) override
 
void mousePressEvent (QMouseEvent *event) override
 
void mouseReleaseEvent (QMouseEvent *event) override
 
void paintEvent (QPaintEvent *event) override
 
void resizeEvent (QResizeEvent *event) override
 
void wheelEvent (QWheelEvent *event) override
 

Private Member Functions

QPointF calculatePreviewOrigin (QSize previewSize)
 
QTransform canvasToPreviewTransform ()
 
void clearCachedState () override
 
bool isPixelArt ()
 isPixelArt checks if the preview is bigger than the image itself
 
QPolygonF previewPolygon ()
 
QTransform previewToCanvasTransform ()
 
void recalculatePreviewDimensions ()
 
KisIdleTasksManager::TaskGuard registerIdleTask (KisCanvas2 *canvas) override
 

Private Attributes

bool m_dragging {false}
 
QPointF m_lastPos {QPointF(0, 0)}
 
QPixmap m_oldPixmap
 
QColor m_outlineColor
 
QPixmap m_pixmap
 
QPointF m_previewOrigin
 
qreal m_previewScale {1.0}
 
QSize m_previewSize {QSize(100, 100)}
 

Additional Inherited Members

- Protected Attributes inherited from KisWidgetWithIdleTask< QWidget >
KisCanvas2m_canvas
 
KisIdleTasksManager::TaskGuard m_idleTaskGuard
 
bool m_isVisibleState
 

Detailed Description

Definition at line 22 of file overviewwidget.h.

Constructor & Destructor Documentation

◆ OverviewWidget()

OverviewWidget::OverviewWidget ( QWidget * parent = 0)

Definition at line 30 of file overviewwidget.cc.

32 , m_dragging(false)
33{
34 setMouseTracking(true);
35 KisConfig cfg(true);
38}
void recalculatePreviewDimensions()

References recalculatePreviewDimensions(), and slotThemeChanged().

◆ ~OverviewWidget()

OverviewWidget::~OverviewWidget ( )
override

Definition at line 40 of file overviewwidget.cc.

41{
42}

Member Function Documentation

◆ calculatePreviewOrigin()

QPointF OverviewWidget::calculatePreviewOrigin ( QSize previewSize)
private

Definition at line 112 of file overviewwidget.cc.

113{
114 return QPointF((width() - previewSize.width()) / 2.0f, (height() - previewSize.height()) / 2.0f);
115}

◆ canvasToPreviewTransform()

QTransform OverviewWidget::canvasToPreviewTransform ( )
private

Definition at line 136 of file overviewwidget.cc.

137{
138 return previewToCanvasTransform().inverted();
139}
QTransform previewToCanvasTransform()

References previewToCanvasTransform().

◆ clearCachedState()

void OverviewWidget::clearCachedState ( )
overrideprivatevirtual

Implements KisWidgetWithIdleTask< QWidget >.

Definition at line 101 of file overviewwidget.cc.

102{
103 m_pixmap = QPixmap();
104 m_oldPixmap = QPixmap();
105}

References m_oldPixmap, and m_pixmap.

◆ isDragging()

bool OverviewWidget::isDragging ( ) const
inline

Definition at line 33 of file overviewwidget.h.

34 {
35 return m_dragging;
36 }

References m_dragging.

◆ isPixelArt()

bool OverviewWidget::isPixelArt ( )
private

isPixelArt checks if the preview is bigger than the image itself

We assume that if the preview is bigger than the image itself, (1) the image is very small, (might not be true if the docker is huge and the user is on 4k display...) (2) the image is pixel art, so they would like to see pixels. In that case we'd like to use a different algorithm (Nearest Neighbour, called "Box") in the OverviewThumbnailStrokeStrategy.

Returns

Definition at line 107 of file overviewwidget.cc.

108{
109 return m_previewScale > 1;
110}

References m_previewScale.

◆ mouseMoveEvent()

void OverviewWidget::mouseMoveEvent ( QMouseEvent * event)
overrideprotected

Definition at line 177 of file overviewwidget.cc.

178{
179 if (m_dragging) {
180 QPointF previewPos = event->pos();
181 const QPointF lastCanvasPos = previewToCanvasTransform().map(m_lastPos);
182 const QPointF newCanvasPos = previewToCanvasTransform().map(event->pos());
183
184 QPointF diff = newCanvasPos - lastCanvasPos;
185 m_canvas->canvasController()->pan(diff.toPoint());
186 m_lastPos = previewPos;
187 }
188 event->accept();
189}
KoCanvasController * canvasController() const
virtual void pan(const QPoint &distance)=0

References KoCanvasBase::canvasController(), KisWidgetWithIdleTask< QWidget >::m_canvas, m_dragging, m_lastPos, KoCanvasController::pan(), and previewToCanvasTransform().

◆ mousePressEvent()

void OverviewWidget::mousePressEvent ( QMouseEvent * event)
overrideprotected

Definition at line 158 of file overviewwidget.cc.

159{
160 if (m_canvas) {
161 QPointF previewPos = event->pos();
162
163 if (!previewPolygon().containsPoint(previewPos, Qt::WindingFill)) {
164 const QRect& canvasRect = m_canvas->canvasWidget()->rect();
165 const QPointF newCanvasPos = previewToCanvasTransform().map(previewPos) -
166 QPointF(canvasRect.width() / 2.0f, canvasRect.height() / 2.0f);
167 m_canvas->canvasController()->pan(newCanvasPos.toPoint());
168 }
169 m_lastPos = previewPos;
170 m_dragging = true;
171 Q_EMIT signalDraggingStarted();
172 }
173 event->accept();
174 update();
175}
KisAbstractCanvasWidget * canvasWidget
QPolygonF previewPolygon()
void signalDraggingStarted()
bool update(QSpinBox *spinBox)

References KoCanvasBase::canvasController(), KisCanvas2::canvasWidget, KisWidgetWithIdleTask< QWidget >::m_canvas, m_dragging, m_lastPos, KoCanvasController::pan(), previewPolygon(), previewToCanvasTransform(), and signalDraggingStarted().

◆ mouseReleaseEvent()

void OverviewWidget::mouseReleaseEvent ( QMouseEvent * event)
overrideprotected

Definition at line 191 of file overviewwidget.cc.

192{
193 if (m_dragging) {
194 m_dragging = false;
195 Q_EMIT signalDraggingFinished();
196 }
197 event->accept();
198 update();
199}
void signalDraggingFinished()

References m_dragging, and signalDraggingFinished().

◆ paintEvent()

void OverviewWidget::paintEvent ( QPaintEvent * event)
overrideprotected

Definition at line 225 of file overviewwidget.cc.

226{
227 QWidget::paintEvent(event);
228
229 if (m_canvas) {
231 QPainter p(this);
232
233 const QRectF previewRect = QRectF(m_previewOrigin, m_previewSize);
234 p.drawPixmap(previewRect.toRect(), m_pixmap);
235
236 QRect r = rect();
237 QPolygonF outline;
238 outline << r.topLeft() << r.topRight() << r.bottomRight() << r.bottomLeft();
239
240 QPen pen;
241 pen.setColor(m_outlineColor);
242 pen.setStyle(Qt::DashLine);
243
244 p.setPen(pen);
245 p.drawPolygon(outline.intersected(previewPolygon()));
246
247 pen.setStyle(Qt::SolidLine);
248 p.setPen(pen);
249 p.drawPolygon(previewPolygon());
250
251 }
252}
const Params2D p
QPointF m_previewOrigin

References KisWidgetWithIdleTask< QWidget >::m_canvas, m_outlineColor, m_pixmap, m_previewOrigin, m_previewSize, p, previewPolygon(), and recalculatePreviewDimensions().

◆ previewPolygon()

QPolygonF OverviewWidget::previewPolygon ( )
private

Definition at line 117 of file overviewwidget.cc.

118{
119 if (m_canvas) {
120 const QRectF &canvasRect = QRectF(m_canvas->canvasWidget()->rect());
121 return canvasToPreviewTransform().map(canvasRect);
122 }
123 return QPolygonF();
124}
QTransform canvasToPreviewTransform()

References canvasToPreviewTransform(), KisCanvas2::canvasWidget, and KisWidgetWithIdleTask< QWidget >::m_canvas.

◆ previewToCanvasTransform()

QTransform OverviewWidget::previewToCanvasTransform ( )
private

Definition at line 126 of file overviewwidget.cc.

127{
128 QTransform previewToImage =
129 QTransform::fromTranslate(-this->width() / 2.0, -this->height() / 2.0) *
130 QTransform::fromScale(1.0 / m_previewScale, 1.0 / m_previewScale) *
131 QTransform::fromTranslate(m_canvas->image()->width() / 2.0, m_canvas->image()->height() / 2.0);
132
133 return previewToImage * m_canvas->coordinatesConverter()->imageToWidgetTransform();
134}
KisCoordinatesConverter * coordinatesConverter
KisImageWSP image() const
qint32 width() const
qint32 height() const

References KisCanvas2::coordinatesConverter, KisImage::height(), KisCanvas2::image(), KisCoordinatesConverter::imageToWidgetTransform(), KisWidgetWithIdleTask< QWidget >::m_canvas, m_previewScale, and KisImage::width().

◆ recalculatePreviewDimensions()

void OverviewWidget::recalculatePreviewDimensions ( )
private

Definition at line 60 of file overviewwidget.cc.

61{
62 if (!m_canvas || !m_canvas->image()) {
63 return;
64 }
65
66 QSize imageSize(m_canvas->image()->bounds().size());
67
68 const qreal hScale = 1.0 * this->width() / imageSize.width();
69 const qreal vScale = 1.0 * this->height() / imageSize.height();
70
71 m_previewScale = qMin(hScale, vScale);
72 m_previewSize = imageSize * m_previewScale;
74
75}
QRect bounds() const override
QPointF calculatePreviewOrigin(QSize previewSize)

References KisImage::bounds(), calculatePreviewOrigin(), KisCanvas2::image(), KisWidgetWithIdleTask< QWidget >::m_canvas, m_previewOrigin, m_previewScale, and m_previewSize.

◆ registerIdleTask()

KisIdleTasksManager::TaskGuard OverviewWidget::registerIdleTask ( KisCanvas2 * canvas)
overrideprivatevirtual

Implements KisWidgetWithIdleTask< QWidget >.

Definition at line 77 of file overviewwidget.cc.

78{
79 return
80 canvas->viewManager()->idleTasksManager()->
81 addIdleTaskWithGuard([this](KisImageSP image) {
82 const KisDisplayConfig config = m_canvas->displayColorConverter()->displayConfig();
83
84 // If the widget is presented on a device with a pixel ratio > 1.0, we must compensate for it
85 // by increasing the thumbnail's resolution. Otherwise it will appear blurry.
86 QSize thumbnailSize = m_previewSize * devicePixelRatioF();
87
88 if ((thumbnailSize.width() > image->width()) || (thumbnailSize.height() > image->height())) {
89 thumbnailSize.scale(image->size(), Qt::KeepAspectRatio);
90 }
91
93 new KisImageThumbnailStrokeStrategy(image->projection(), image->bounds(), thumbnailSize, isPixelArt(), config.profile, config.intent, config.conversionFlags);
94
95 connect(strategy, SIGNAL(thumbnailUpdated(QImage)), this, SLOT(updateThumbnail(QImage)));
96
97 return strategy;
98 });
99}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisDisplayColorConverter displayColorConverter
KisViewManager * viewManager() const
KisDisplayConfig This class keeps track of the color management configuration for image to display....
KoColorConversionTransformation::ConversionFlags conversionFlags
const KoColorProfile * profile
KoColorConversionTransformation::Intent intent
KisPaintDeviceSP projection() const
QSize size() const
Definition kis_image.h:547
KisIdleTasksManager * idleTasksManager()
void updateThumbnail(QImage pixmap)
bool isPixelArt()
isPixelArt checks if the preview is bigger than the image itself

References KisImage::bounds(), connect(), KisDisplayConfig::conversionFlags, KisCanvas2::displayColorConverter, KisImage::height(), KisViewManager::idleTasksManager(), KisDisplayConfig::intent, isPixelArt(), KisWidgetWithIdleTask< QWidget >::m_canvas, m_previewSize, KisDisplayConfig::profile, KisImage::projection(), KisImage::size(), updateThumbnail(), KisCanvas2::viewManager(), and KisImage::width().

◆ resizeEvent()

void OverviewWidget::resizeEvent ( QResizeEvent * event)
overrideprotected

Definition at line 146 of file overviewwidget.cc.

147{
148 Q_UNUSED(event);
149 if (m_canvas) {
150 if (!m_oldPixmap.isNull()) {
152 m_pixmap = m_oldPixmap.scaled(m_previewSize, Qt::KeepAspectRatio, Qt::FastTransformation);
153 }
155 }
156}

References KisWidgetWithIdleTask< QWidget >::m_canvas, m_oldPixmap, m_pixmap, m_previewSize, recalculatePreviewDimensions(), and KisWidgetWithIdleTask< QWidget >::triggerCacheUpdate().

◆ setCanvas()

void OverviewWidget::setCanvas ( KisCanvas2 * canvas)
overridevirtual

Reimplemented from KisWidgetWithIdleTask< QWidget >.

Definition at line 44 of file overviewwidget.cc.

45{
46 if (m_canvas) {
47 m_canvas->image()->disconnect(this);
48 m_canvas->displayColorConverter()->disconnect(this);
49 }
50
52
53 if (m_canvas) {
54 connect(m_canvas->displayColorConverter(), SIGNAL(displayConfigurationChanged()), SLOT(startUpdateCanvasProjection()));
55 connect(m_canvas->canvasController()->proxyObject, SIGNAL(canvasStateChanged()), this, SLOT(update()), Qt::UniqueConnection);
56 connect(m_canvas->viewManager()->mainWindow(), SIGNAL(themeChanged()), this, SLOT(slotThemeChanged()), Qt::UniqueConnection);
57 }
58}
KisMainWindow * mainWindow() const
virtual void setCanvas(KisCanvas2 *canvas)
QPointer< KoCanvasControllerProxyObject > proxyObject
void startUpdateCanvasProjection()

References KoCanvasBase::canvasController(), connect(), KisCanvas2::displayColorConverter, KisCanvas2::image(), KisWidgetWithIdleTask< QWidget >::m_canvas, KisViewManager::mainWindow(), KoCanvasController::proxyObject, KisWidgetWithIdleTask< BaseWidget >::setCanvas(), slotThemeChanged(), startUpdateCanvasProjection(), and KisCanvas2::viewManager().

◆ signalDraggingFinished

void OverviewWidget::signalDraggingFinished ( )
signal

◆ signalDraggingStarted

void OverviewWidget::signalDraggingStarted ( )
signal

◆ slotThemeChanged

void OverviewWidget::slotThemeChanged ( )
slot

Definition at line 219 of file overviewwidget.cc.

220{
221 m_outlineColor = qApp->palette().color(QPalette::Highlight);
222}

References m_outlineColor.

◆ startUpdateCanvasProjection

void OverviewWidget::startUpdateCanvasProjection ( )
slot

Definition at line 141 of file overviewwidget.cc.

142{
144}

References KisWidgetWithIdleTask< QWidget >::triggerCacheUpdate().

◆ updateThumbnail

void OverviewWidget::updateThumbnail ( QImage pixmap)
slot

Definition at line 212 of file overviewwidget.cc.

213{
214 m_pixmap = QPixmap::fromImage(pixmap);
215 m_oldPixmap = m_pixmap.copy();
216 update();
217}

References m_oldPixmap, and m_pixmap.

◆ wheelEvent()

void OverviewWidget::wheelEvent ( QWheelEvent * event)
overrideprotected

Definition at line 201 of file overviewwidget.cc.

202{
203 if (m_canvas) {
204 if (event->angleDelta().y() > 0) {
206 } else {
208 }
209 }
210}
virtual void zoomIn(const KoViewTransformStillPoint &stillPoint)=0
zooms in keeping stillPoint not moved.
virtual void zoomOut(const KoViewTransformStillPoint &stillPoint)=0
zooms out keeping stillPoint not moved.

References KoCanvasBase::canvasController(), KisWidgetWithIdleTask< QWidget >::m_canvas, KoCanvasController::zoomIn(), and KoCanvasController::zoomOut().

Member Data Documentation

◆ m_dragging

bool OverviewWidget::m_dragging {false}
private

Definition at line 85 of file overviewwidget.h.

85{false};

◆ m_lastPos

QPointF OverviewWidget::m_lastPos {QPointF(0, 0)}
private

Definition at line 86 of file overviewwidget.h.

86{QPointF(0, 0)};

◆ m_oldPixmap

QPixmap OverviewWidget::m_oldPixmap
private

Definition at line 79 of file overviewwidget.h.

◆ m_outlineColor

QColor OverviewWidget::m_outlineColor
private

Definition at line 88 of file overviewwidget.h.

◆ m_pixmap

QPixmap OverviewWidget::m_pixmap
private

Definition at line 80 of file overviewwidget.h.

◆ m_previewOrigin

QPointF OverviewWidget::m_previewOrigin
private

Definition at line 82 of file overviewwidget.h.

◆ m_previewScale

qreal OverviewWidget::m_previewScale {1.0}
private

Definition at line 78 of file overviewwidget.h.

78{1.0};

◆ m_previewSize

QSize OverviewWidget::m_previewSize {QSize(100, 100)}
private

Definition at line 83 of file overviewwidget.h.

83{QSize(100, 100)};

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