Changeset View
Standalone View
lib/documentview/rasterimageview.cpp
Show First 20 Lines • Show All 158 Lines • ▼ Show 20 Line(s) | 143 | { | |||
---|---|---|---|---|---|
159 | } | 159 | } | ||
160 | qSwap(mAlternateBuffer, mCurrentBuffer); | 160 | qSwap(mAlternateBuffer, mCurrentBuffer); | ||
161 | 161 | | |||
162 | mAlternateBuffer = QPixmap(); | 162 | mAlternateBuffer = QPixmap(); | ||
163 | } | 163 | } | ||
164 | 164 | | |||
165 | void drawAlphaBackground(QPainter* painter, const QRect& viewportRect, const QPoint& zoomedImageTopLeft, QPixmap texture) | 165 | void drawAlphaBackground(QPainter* painter, const QRect& viewportRect, const QPoint& zoomedImageTopLeft, QPixmap texture) | ||
166 | { | 166 | { | ||
167 | if (mAlphaBackgroundMode == AbstractImageView::AlphaBackgroundCheckBoard) { | 167 | switch (mAlphaBackgroundMode) { | ||
168 | QPoint textureOffset( | 168 | case AbstractImageView::AlphaBackgroundNone: | ||
ngraham: Style: In general, case/switch statements in KDE code don't use braces. | |||||
textureOffset is defined in the first case. To take away the braces, I'd need to move the definition to before the switch, even though it's only used in the first case. Would that still be preferable? huoni: `textureOffset` is defined in the first case. To take away the braces, I'd need to move the… | |||||
textureOffset is used only once so there is no need to declare a variable. Also, cases don't need parentheses. zzag: textureOffset is used only once so there is no need to declare a variable.
Also, `case`s don't… | |||||
I removed the blocks apart from the first one, but changed the opening brace to be on its own line. huoni: I removed the blocks apart from the first one, but changed the opening brace to be on its own… | |||||
rkflx: Good call, makes sense. | |||||
169 | painter->fillRect(viewportRect, Qt::transparent); | ||||
170 | break; | ||||
171 | case AbstractImageView::AlphaBackgroundCheckBoard: | ||||
172 | { | ||||
173 | const QPoint textureOffset( | ||||
169 | zoomedImageTopLeft.x() % texture.width(), | 174 | zoomedImageTopLeft.x() % texture.width(), | ||
170 | zoomedImageTopLeft.y() % texture.height() | 175 | zoomedImageTopLeft.y() % texture.height()); | ||
171 | ); | | |||
172 | painter->drawTiledPixmap( | 176 | painter->drawTiledPixmap( | ||
173 | viewportRect, | 177 | viewportRect, | ||
174 | texture, | 178 | texture, | ||
175 | textureOffset); | 179 | textureOffset); | ||
176 | } else { | 180 | break; | ||
181 | } | ||||
182 | case AbstractImageView::AlphaBackgroundSolid: | ||||
177 | painter->fillRect(viewportRect, mAlphaBackgroundColor); | 183 | painter->fillRect(viewportRect, mAlphaBackgroundColor); | ||
184 | break; | ||||
I'd put this as the first case in the switch, to mirror the enum as well as the UI. rkflx: I'd put this as the first `case` in the `switch`, to mirror the `enum` as well as the UI. | |||||
185 | default: | ||||
186 | Q_ASSERT(0); | ||||
178 | } | 187 | } | ||
179 | } | 188 | } | ||
180 | }; | 189 | }; | ||
181 | 190 | | |||
182 | RasterImageView::RasterImageView(QGraphicsItem* parent) | 191 | RasterImageView::RasterImageView(QGraphicsItem* parent) | ||
183 | : AbstractImageView(parent) | 192 | : AbstractImageView(parent) | ||
184 | , d(new RasterImageViewPrivate) | 193 | , d(new RasterImageViewPrivate) | ||
185 | { | 194 | { | ||
186 | d->q = this; | 195 | d->q = this; | ||
187 | d->mEmittedCompleted = false; | 196 | d->mEmittedCompleted = false; | ||
188 | d->mApplyDisplayTransform = true; | 197 | d->mApplyDisplayTransform = true; | ||
189 | d->mDisplayTransform = 0; | 198 | d->mDisplayTransform = 0; | ||
190 | 199 | | |||
191 | d->mAlphaBackgroundMode = AlphaBackgroundCheckBoard; | 200 | d->mAlphaBackgroundMode = AlphaBackgroundNone; | ||
192 | d->mAlphaBackgroundColor = Qt::black; | 201 | d->mAlphaBackgroundColor = Qt::black; | ||
193 | d->mRenderingIntent = INTENT_PERCEPTUAL; | 202 | d->mRenderingIntent = INTENT_PERCEPTUAL; | ||
194 | d->mEnlargeSmallerImages = false; | 203 | d->mEnlargeSmallerImages = false; | ||
195 | 204 | | |||
196 | d->mBufferIsEmpty = true; | 205 | d->mBufferIsEmpty = true; | ||
197 | d->mScaler = new ImageScaler(this); | 206 | d->mScaler = new ImageScaler(this); | ||
198 | connect(d->mScaler, &ImageScaler::scaledRect, this, &RasterImageView::updateFromScaler); | 207 | connect(d->mScaler, &ImageScaler::scaledRect, this, &RasterImageView::updateFromScaler); | ||
199 | 208 | | |||
▲ Show 20 Lines • Show All 127 Lines • ▼ Show 20 Line(s) | 329 | { | |||
327 | } | 336 | } | ||
328 | 337 | | |||
329 | d->resizeBuffer(); | 338 | d->resizeBuffer(); | ||
330 | int viewportLeft = zoomedImageLeft - scrollPos().x(); | 339 | int viewportLeft = zoomedImageLeft - scrollPos().x(); | ||
331 | int viewportTop = zoomedImageTop - scrollPos().y(); | 340 | int viewportTop = zoomedImageTop - scrollPos().y(); | ||
332 | d->mBufferIsEmpty = false; | 341 | d->mBufferIsEmpty = false; | ||
333 | { | 342 | { | ||
334 | QPainter painter(&d->mCurrentBuffer); | 343 | QPainter painter(&d->mCurrentBuffer); | ||
344 | painter.setCompositionMode(QPainter::CompositionMode_Source); | ||||
335 | if (document()->hasAlphaChannel()) { | 345 | if (document()->hasAlphaChannel()) { | ||
336 | d->drawAlphaBackground( | 346 | d->drawAlphaBackground( | ||
337 | &painter, QRect(viewportLeft, viewportTop, image.width(), image.height()), | 347 | &painter, QRect(viewportLeft, viewportTop, image.width(), image.height()), | ||
338 | QPoint(zoomedImageLeft, zoomedImageTop), | 348 | QPoint(zoomedImageLeft, zoomedImageTop), | ||
339 | alphaBackgroundTexture() | 349 | alphaBackgroundTexture() | ||
340 | ); | 350 | ); | ||
341 | } else { | 351 | // This is required so transparent pixels don't replace our background | ||
342 | painter.setCompositionMode(QPainter::CompositionMode_Source); | 352 | painter.setCompositionMode(QPainter::CompositionMode_SourceOver); | ||
343 | } | 353 | } | ||
344 | painter.drawImage(viewportLeft, viewportTop, image); | 354 | painter.drawImage(viewportLeft, viewportTop, image); | ||
345 | } | 355 | } | ||
346 | update(); | 356 | update(); | ||
347 | 357 | | |||
348 | if (!d->mEmittedCompleted) { | 358 | if (!d->mEmittedCompleted) { | ||
349 | d->mEmittedCompleted = true; | 359 | d->mEmittedCompleted = true; | ||
350 | completed(); | 360 | completed(); | ||
Show All 23 Lines | |||||
374 | { | 384 | { | ||
375 | QPointF delta = scrollPos() - oldPos; | 385 | QPointF delta = scrollPos() - oldPos; | ||
376 | 386 | | |||
377 | // Scroll existing | 387 | // Scroll existing | ||
378 | { | 388 | { | ||
379 | if (d->mAlternateBuffer.size() != d->mCurrentBuffer.size()) { | 389 | if (d->mAlternateBuffer.size() != d->mCurrentBuffer.size()) { | ||
380 | d->mAlternateBuffer = QPixmap(d->mCurrentBuffer.size()); | 390 | d->mAlternateBuffer = QPixmap(d->mCurrentBuffer.size()); | ||
381 | } | 391 | } | ||
392 | d->mAlternateBuffer.fill(Qt::transparent); | ||||
382 | QPainter painter(&d->mAlternateBuffer); | 393 | QPainter painter(&d->mAlternateBuffer); | ||
383 | painter.drawPixmap(-delta, d->mCurrentBuffer); | 394 | painter.drawPixmap(-delta, d->mCurrentBuffer); | ||
384 | } | 395 | } | ||
385 | qSwap(d->mCurrentBuffer, d->mAlternateBuffer); | 396 | qSwap(d->mCurrentBuffer, d->mAlternateBuffer); | ||
386 | 397 | | |||
rkflx: Accidental whitespace removal. | |||||
387 | // Scale missing parts | 398 | // Scale missing parts | ||
388 | QRegion bufferRegion = QRegion(d->mCurrentBuffer.rect().translated(scrollPos().toPoint())); | 399 | QRegion bufferRegion = QRegion(d->mCurrentBuffer.rect().translated(scrollPos().toPoint())); | ||
389 | QRegion updateRegion = bufferRegion - bufferRegion.translated(-delta.toPoint()); | 400 | QRegion updateRegion = bufferRegion - bufferRegion.translated(-delta.toPoint()); | ||
390 | updateBuffer(updateRegion); | 401 | updateBuffer(updateRegion); | ||
391 | update(); | 402 | update(); | ||
392 | } | 403 | } | ||
393 | 404 | | |||
394 | void RasterImageView::paint(QPainter* painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/) | 405 | void RasterImageView::paint(QPainter* painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/) | ||
▲ Show 20 Lines • Show All 160 Lines • Show Last 20 Lines |
Style: In general, case/switch statements in KDE code don't use braces.