Changeset View
Changeset View
Standalone View
Standalone View
lib/documentview/rasterimageview.cpp
Show All 38 Lines | |||||
39 | 39 | | |||
40 | namespace Gwenview | 40 | namespace Gwenview | ||
41 | { | 41 | { | ||
42 | 42 | | |||
43 | struct RasterImageViewPrivate | 43 | struct RasterImageViewPrivate | ||
44 | { | 44 | { | ||
45 | RasterImageView* q; | 45 | RasterImageView* q; | ||
46 | ImageScaler* mScaler; | 46 | ImageScaler* mScaler; | ||
47 | QPixmap mBackgroundTexture; | | |||
48 | bool mEmittedCompleted; | 47 | bool mEmittedCompleted; | ||
49 | 48 | | |||
50 | // Config | 49 | // Config | ||
51 | RasterImageView::AlphaBackgroundMode mAlphaBackgroundMode; | 50 | AbstractImageView::AlphaBackgroundMode mAlphaBackgroundMode; | ||
52 | QColor mAlphaBackgroundColor; | 51 | QColor mAlphaBackgroundColor; | ||
53 | cmsUInt32Number mRenderingIntent; | 52 | cmsUInt32Number mRenderingIntent; | ||
54 | bool mEnlargeSmallerImages; | 53 | bool mEnlargeSmallerImages; | ||
55 | // /Config | 54 | // /Config | ||
56 | 55 | | |||
57 | bool mBufferIsEmpty; | 56 | bool mBufferIsEmpty; | ||
58 | QPixmap mCurrentBuffer; | 57 | QPixmap mCurrentBuffer; | ||
59 | // The alternate buffer is useful when scrolling: existing content is copied | 58 | // The alternate buffer is useful when scrolling: existing content is copied | ||
▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Line(s) | 101 | #endif | |||
106 | } | 105 | } | ||
107 | 106 | | |||
108 | mDisplayTransform = cmsCreateTransform(profile->handle(), cmsFormat, | 107 | mDisplayTransform = cmsCreateTransform(profile->handle(), cmsFormat, | ||
109 | monitorProfile->handle(), cmsFormat, | 108 | monitorProfile->handle(), cmsFormat, | ||
110 | mRenderingIntent, cmsFLAGS_BLACKPOINTCOMPENSATION); | 109 | mRenderingIntent, cmsFLAGS_BLACKPOINTCOMPENSATION); | ||
111 | mApplyDisplayTransform = true; | 110 | mApplyDisplayTransform = true; | ||
112 | } | 111 | } | ||
113 | 112 | | |||
114 | void createBackgroundTexture() | | |||
115 | { | | |||
116 | mBackgroundTexture = QPixmap(32, 32); | | |||
117 | QPainter painter(&mBackgroundTexture); | | |||
118 | painter.fillRect(mBackgroundTexture.rect(), QColor(128, 128, 128)); | | |||
119 | QColor light = QColor(192, 192, 192); | | |||
120 | painter.fillRect(0, 0, 16, 16, light); | | |||
121 | painter.fillRect(16, 16, 16, 16, light); | | |||
122 | } | | |||
123 | | ||||
124 | void setupUpdateTimer() | 113 | void setupUpdateTimer() | ||
125 | { | 114 | { | ||
126 | mUpdateTimer = new QTimer(q); | 115 | mUpdateTimer = new QTimer(q); | ||
127 | mUpdateTimer->setInterval(500); | 116 | mUpdateTimer->setInterval(500); | ||
128 | mUpdateTimer->setSingleShot(true); | 117 | mUpdateTimer->setSingleShot(true); | ||
129 | QObject::connect(mUpdateTimer, SIGNAL(timeout()), q, SLOT(updateBuffer())); | 118 | QObject::connect(mUpdateTimer, SIGNAL(timeout()), q, SLOT(updateBuffer())); | ||
130 | } | 119 | } | ||
131 | 120 | | |||
Show All 36 Lines | 156 | { | |||
168 | QPainter painter(&mAlternateBuffer); | 157 | QPainter painter(&mAlternateBuffer); | ||
169 | painter.drawPixmap(0, 0, mCurrentBuffer); | 158 | painter.drawPixmap(0, 0, mCurrentBuffer); | ||
170 | } | 159 | } | ||
171 | qSwap(mAlternateBuffer, mCurrentBuffer); | 160 | qSwap(mAlternateBuffer, mCurrentBuffer); | ||
172 | 161 | | |||
173 | mAlternateBuffer = QPixmap(); | 162 | mAlternateBuffer = QPixmap(); | ||
174 | } | 163 | } | ||
175 | 164 | | |||
176 | void drawAlphaBackground(QPainter* painter, const QRect& viewportRect, const QPoint& zoomedImageTopLeft) | 165 | void drawAlphaBackground(QPainter* painter, const QRect& viewportRect, const QPoint& zoomedImageTopLeft, QPixmap texture) | ||
177 | { | 166 | { | ||
178 | if (mAlphaBackgroundMode == RasterImageView::AlphaBackgroundCheckBoard) { | 167 | if (mAlphaBackgroundMode == AbstractImageView::AlphaBackgroundCheckBoard) { | ||
179 | QPoint textureOffset( | 168 | QPoint textureOffset( | ||
180 | zoomedImageTopLeft.x() % mBackgroundTexture.width(), | 169 | zoomedImageTopLeft.x() % texture.width(), | ||
181 | zoomedImageTopLeft.y() % mBackgroundTexture.height() | 170 | zoomedImageTopLeft.y() % texture.height() | ||
182 | ); | 171 | ); | ||
183 | painter->drawTiledPixmap( | 172 | painter->drawTiledPixmap( | ||
184 | viewportRect, | 173 | viewportRect, | ||
185 | mBackgroundTexture, | 174 | texture, | ||
186 | textureOffset); | 175 | textureOffset); | ||
187 | } else { | 176 | } else { | ||
188 | painter->fillRect(viewportRect, mAlphaBackgroundColor); | 177 | painter->fillRect(viewportRect, mAlphaBackgroundColor); | ||
189 | } | 178 | } | ||
190 | } | 179 | } | ||
191 | }; | 180 | }; | ||
192 | 181 | | |||
193 | RasterImageView::RasterImageView(QGraphicsItem* parent) | 182 | RasterImageView::RasterImageView(QGraphicsItem* parent) | ||
Show All 9 Lines | 185 | { | |||
203 | d->mAlphaBackgroundColor = Qt::black; | 192 | d->mAlphaBackgroundColor = Qt::black; | ||
204 | d->mRenderingIntent = INTENT_PERCEPTUAL; | 193 | d->mRenderingIntent = INTENT_PERCEPTUAL; | ||
205 | d->mEnlargeSmallerImages = false; | 194 | d->mEnlargeSmallerImages = false; | ||
206 | 195 | | |||
207 | d->mBufferIsEmpty = true; | 196 | d->mBufferIsEmpty = true; | ||
208 | d->mScaler = new ImageScaler(this); | 197 | d->mScaler = new ImageScaler(this); | ||
209 | connect(d->mScaler, &ImageScaler::scaledRect, this, &RasterImageView::updateFromScaler); | 198 | connect(d->mScaler, &ImageScaler::scaledRect, this, &RasterImageView::updateFromScaler); | ||
210 | 199 | | |||
211 | d->createBackgroundTexture(); | | |||
212 | d->setupUpdateTimer(); | 200 | d->setupUpdateTimer(); | ||
213 | } | 201 | } | ||
214 | 202 | | |||
215 | RasterImageView::~RasterImageView() | 203 | RasterImageView::~RasterImageView() | ||
216 | { | 204 | { | ||
217 | if (d->mTool) { | 205 | if (d->mTool) { | ||
218 | d->mTool.data()->toolDeactivated(); | 206 | d->mTool.data()->toolDeactivated(); | ||
219 | } | 207 | } | ||
▲ Show 20 Lines • Show All 122 Lines • ▼ Show 20 Line(s) | 320 | { | |||
342 | int viewportLeft = zoomedImageLeft - scrollPos().x(); | 330 | int viewportLeft = zoomedImageLeft - scrollPos().x(); | ||
343 | int viewportTop = zoomedImageTop - scrollPos().y(); | 331 | int viewportTop = zoomedImageTop - scrollPos().y(); | ||
344 | d->mBufferIsEmpty = false; | 332 | d->mBufferIsEmpty = false; | ||
345 | { | 333 | { | ||
346 | QPainter painter(&d->mCurrentBuffer); | 334 | QPainter painter(&d->mCurrentBuffer); | ||
347 | if (document()->hasAlphaChannel()) { | 335 | if (document()->hasAlphaChannel()) { | ||
348 | d->drawAlphaBackground( | 336 | d->drawAlphaBackground( | ||
349 | &painter, QRect(viewportLeft, viewportTop, image.width(), image.height()), | 337 | &painter, QRect(viewportLeft, viewportTop, image.width(), image.height()), | ||
350 | QPoint(zoomedImageLeft, zoomedImageTop) | 338 | QPoint(zoomedImageLeft, zoomedImageTop), | ||
339 | alphaBackgroundTexture() | ||||
351 | ); | 340 | ); | ||
352 | } else { | 341 | } else { | ||
353 | painter.setCompositionMode(QPainter::CompositionMode_Source); | 342 | painter.setCompositionMode(QPainter::CompositionMode_Source); | ||
354 | } | 343 | } | ||
355 | painter.drawImage(viewportLeft, viewportTop, image); | 344 | painter.drawImage(viewportLeft, viewportTop, image); | ||
356 | } | 345 | } | ||
357 | update(); | 346 | update(); | ||
358 | 347 | | |||
▲ Show 20 Lines • Show All 207 Lines • Show Last 20 Lines |