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 // No context menu here. Setting this avoids long-presses from delaying
36 // inputs or dismissing the palette, see KisLongPressEventFilter.cpp.
37 setContextMenuPolicy(Qt::PreventContextMenu);
38 KisConfig cfg(true);
41}
void recalculatePreviewDimensions()

References recalculatePreviewDimensions(), and slotThemeChanged().

◆ ~OverviewWidget()

OverviewWidget::~OverviewWidget ( )
override

Definition at line 43 of file overviewwidget.cc.

44{
45}

Member Function Documentation

◆ calculatePreviewOrigin()

QPointF OverviewWidget::calculatePreviewOrigin ( QSize previewSize)
private

Definition at line 115 of file overviewwidget.cc.

116{
117 return QPointF((width() - previewSize.width()) / 2.0f, (height() - previewSize.height()) / 2.0f);
118}

◆ canvasToPreviewTransform()

QTransform OverviewWidget::canvasToPreviewTransform ( )
private

Definition at line 139 of file overviewwidget.cc.

140{
141 return previewToCanvasTransform().inverted();
142}
QTransform previewToCanvasTransform()

References previewToCanvasTransform().

◆ clearCachedState()

void OverviewWidget::clearCachedState ( )
overrideprivatevirtual

Implements KisWidgetWithIdleTask< QWidget >.

Definition at line 104 of file overviewwidget.cc.

105{
106 m_pixmap = QPixmap();
107 m_oldPixmap = QPixmap();
108}

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 110 of file overviewwidget.cc.

111{
112 return m_previewScale > 1;
113}

References m_previewScale.

◆ mouseMoveEvent()

void OverviewWidget::mouseMoveEvent ( QMouseEvent * event)
overrideprotected

Definition at line 180 of file overviewwidget.cc.

181{
182 if (m_dragging) {
183 QPointF previewPos = event->pos();
184 const QPointF lastCanvasPos = previewToCanvasTransform().map(m_lastPos);
185 const QPointF newCanvasPos = previewToCanvasTransform().map(event->pos());
186
187 QPointF diff = newCanvasPos - lastCanvasPos;
188 m_canvas->canvasController()->pan(diff.toPoint());
189 m_lastPos = previewPos;
190 }
191 event->accept();
192}
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 161 of file overviewwidget.cc.

162{
163 if (m_canvas) {
164 QPointF previewPos = event->pos();
165
166 if (!previewPolygon().containsPoint(previewPos, Qt::WindingFill)) {
167 const QRect& canvasRect = m_canvas->canvasWidget()->rect();
168 const QPointF newCanvasPos = previewToCanvasTransform().map(previewPos) -
169 QPointF(canvasRect.width() / 2.0f, canvasRect.height() / 2.0f);
170 m_canvas->canvasController()->pan(newCanvasPos.toPoint());
171 }
172 m_lastPos = previewPos;
173 m_dragging = true;
174 Q_EMIT signalDraggingStarted();
175 }
176 event->accept();
177 update();
178}
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 194 of file overviewwidget.cc.

195{
196 if (m_dragging) {
197 m_dragging = false;
198 Q_EMIT signalDraggingFinished();
199 }
200 event->accept();
201 update();
202}
void signalDraggingFinished()

References m_dragging, and signalDraggingFinished().

◆ paintEvent()

void OverviewWidget::paintEvent ( QPaintEvent * event)
overrideprotected

Definition at line 228 of file overviewwidget.cc.

229{
230 QWidget::paintEvent(event);
231
232 if (m_canvas) {
234 QPainter p(this);
235
236 const QRectF previewRect = QRectF(m_previewOrigin, m_previewSize);
237 p.drawPixmap(previewRect.toRect(), m_pixmap);
238
239 QRect r = rect();
240 QPolygonF outline;
241 outline << r.topLeft() << r.topRight() << r.bottomRight() << r.bottomLeft();
242
243 QPen pen;
244 pen.setColor(m_outlineColor);
245 pen.setStyle(Qt::DashLine);
246
247 p.setPen(pen);
248 p.drawPolygon(outline.intersected(previewPolygon()));
249
250 pen.setStyle(Qt::SolidLine);
251 p.setPen(pen);
252 p.drawPolygon(previewPolygon());
253
254 }
255}
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 120 of file overviewwidget.cc.

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

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

◆ previewToCanvasTransform()

QTransform OverviewWidget::previewToCanvasTransform ( )
private

Definition at line 129 of file overviewwidget.cc.

130{
131 QTransform previewToImage =
132 QTransform::fromTranslate(-this->width() / 2.0, -this->height() / 2.0) *
133 QTransform::fromScale(1.0 / m_previewScale, 1.0 / m_previewScale) *
134 QTransform::fromTranslate(m_canvas->image()->width() / 2.0, m_canvas->image()->height() / 2.0);
135
136 return previewToImage * m_canvas->coordinatesConverter()->imageToWidgetTransform();
137}
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 63 of file overviewwidget.cc.

64{
65 if (!m_canvas || !m_canvas->image()) {
66 return;
67 }
68
69 QSize imageSize(m_canvas->image()->bounds().size());
70
71 const qreal hScale = 1.0 * this->width() / imageSize.width();
72 const qreal vScale = 1.0 * this->height() / imageSize.height();
73
74 m_previewScale = qMin(hScale, vScale);
75 m_previewSize = imageSize * m_previewScale;
77
78}
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 80 of file overviewwidget.cc.

81{
82 return
83 canvas->viewManager()->idleTasksManager()->
84 addIdleTaskWithGuard([this](KisImageSP image) {
85 const KisDisplayConfig config = m_canvas->displayColorConverter()->displayConfig();
86
87 // If the widget is presented on a device with a pixel ratio > 1.0, we must compensate for it
88 // by increasing the thumbnail's resolution. Otherwise it will appear blurry.
89 QSize thumbnailSize = m_previewSize * devicePixelRatioF();
90
91 if ((thumbnailSize.width() > image->width()) || (thumbnailSize.height() > image->height())) {
92 thumbnailSize.scale(image->size(), Qt::KeepAspectRatio);
93 }
94
96 new KisImageThumbnailStrokeStrategy(image->projection(), image->bounds(), thumbnailSize, isPixelArt(), config.profile, config.intent, config.conversionFlags);
97
98 connect(strategy, SIGNAL(thumbnailUpdated(QImage)), this, SLOT(updateThumbnail(QImage)));
99
100 return strategy;
101 });
102}
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(), 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 149 of file overviewwidget.cc.

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

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 47 of file overviewwidget.cc.

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

References KoCanvasBase::canvasController(), 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 222 of file overviewwidget.cc.

223{
224 m_outlineColor = qApp->palette().color(QPalette::Highlight);
225}

References m_outlineColor.

◆ startUpdateCanvasProjection

void OverviewWidget::startUpdateCanvasProjection ( )
slot

Definition at line 144 of file overviewwidget.cc.

145{
147}

References KisWidgetWithIdleTask< QWidget >::triggerCacheUpdate().

◆ updateThumbnail

void OverviewWidget::updateThumbnail ( QImage pixmap)
slot

Definition at line 215 of file overviewwidget.cc.

216{
217 m_pixmap = QPixmap::fromImage(pixmap);
218 m_oldPixmap = m_pixmap.copy();
219 update();
220}

References m_oldPixmap, and m_pixmap.

◆ wheelEvent()

void OverviewWidget::wheelEvent ( QWheelEvent * event)
overrideprotected

Definition at line 204 of file overviewwidget.cc.

205{
206 if (m_canvas) {
207 if (event->angleDelta().y() > 0) {
209 } else {
211 }
212 }
213}
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: