diff --git a/app/configdialog.cpp b/app/configdialog.cpp
--- a/app/configdialog.cpp
+++ b/app/configdialog.cpp
@@ -68,6 +68,7 @@
mAlphaBackgroundModeGroup = new InvisibleButtonGroup(widget);
mAlphaBackgroundModeGroup->setObjectName(QLatin1String("kcfg_AlphaBackgroundMode"));
+ mAlphaBackgroundModeGroup->addButton(mImageViewConfigPage.noBackgroundRadioButton, int(AbstractImageView::AlphaBackgroundNone));
mAlphaBackgroundModeGroup->addButton(mImageViewConfigPage.checkBoardRadioButton, int(AbstractImageView::AlphaBackgroundCheckBoard));
mAlphaBackgroundModeGroup->addButton(mImageViewConfigPage.solidColorRadioButton, int(AbstractImageView::AlphaBackgroundSolid));
diff --git a/app/imageviewconfigpage.ui b/app/imageviewconfigpage.ui
--- a/app/imageviewconfigpage.ui
+++ b/app/imageviewconfigpage.ui
@@ -7,7 +7,7 @@
0
0
500
- 600
+ 650
@@ -25,6 +25,39 @@
-
+
+
+ 6
+
+
+ 0
+
+
-
+
+
+ None
+
+
+ true
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
+
+ -
6
@@ -38,7 +71,7 @@
&Check board
- true
+ false
@@ -57,7 +90,7 @@
- -
+
-
6
@@ -97,7 +130,7 @@
- -
+
-
Qt::Vertical
@@ -113,7 +146,7 @@
- -
+
-
Mouse wheel behavior:
@@ -126,7 +159,7 @@
- -
+
-
-
@@ -153,7 +186,7 @@
- -
+
-
-
@@ -177,7 +210,7 @@
- -
+
-
Qt::Vertical
@@ -193,7 +226,7 @@
- -
+
-
Zoom mode:
@@ -206,7 +239,7 @@
- -
+
-
-
@@ -233,7 +266,7 @@
- -
+
-
-
@@ -257,7 +290,7 @@
- -
+
-
-
@@ -281,7 +314,7 @@
- -
+
-
Qt::Vertical
@@ -297,7 +330,7 @@
- -
+
-
-
@@ -321,7 +354,7 @@
- -
+
-
Qt::Vertical
@@ -337,7 +370,7 @@
- -
+
-
Animations:
@@ -350,7 +383,7 @@
- -
+
-
-
@@ -377,7 +410,7 @@
- -
+
-
-
@@ -401,7 +434,7 @@
- -
+
-
-
@@ -425,7 +458,7 @@
- -
+
-
Qt::Vertical
@@ -441,14 +474,14 @@
- -
+
-
<b>Thumbnail Bar</b>
- -
+
-
Qt::Vertical
@@ -464,7 +497,7 @@
- -
+
-
Orientation:
@@ -477,7 +510,7 @@
- -
+
-
-
@@ -501,7 +534,7 @@
- -
+
-
-
@@ -525,7 +558,7 @@
- -
+
-
Row count:
@@ -538,7 +571,7 @@
- -
+
-
-
@@ -565,7 +598,7 @@
- -
+
-
Qt::Vertical
diff --git a/lib/documentview/abstractimageview.h b/lib/documentview/abstractimageview.h
--- a/lib/documentview/abstractimageview.h
+++ b/lib/documentview/abstractimageview.h
@@ -45,6 +45,7 @@
ForceUpdate
};
enum AlphaBackgroundMode {
+ AlphaBackgroundNone,
AlphaBackgroundCheckBoard,
AlphaBackgroundSolid
};
diff --git a/lib/documentview/rasterimageview.cpp b/lib/documentview/rasterimageview.cpp
--- a/lib/documentview/rasterimageview.cpp
+++ b/lib/documentview/rasterimageview.cpp
@@ -164,17 +164,26 @@
void drawAlphaBackground(QPainter* painter, const QRect& viewportRect, const QPoint& zoomedImageTopLeft, QPixmap texture)
{
- if (mAlphaBackgroundMode == AbstractImageView::AlphaBackgroundCheckBoard) {
- QPoint textureOffset(
- zoomedImageTopLeft.x() % texture.width(),
- zoomedImageTopLeft.y() % texture.height()
- );
- painter->drawTiledPixmap(
- viewportRect,
- texture,
- textureOffset);
- } else {
- painter->fillRect(viewportRect, mAlphaBackgroundColor);
+ switch (mAlphaBackgroundMode) {
+ case AbstractImageView::AlphaBackgroundNone:
+ painter->fillRect(viewportRect, Qt::transparent);
+ break;
+ case AbstractImageView::AlphaBackgroundCheckBoard:
+ {
+ const QPoint textureOffset(
+ zoomedImageTopLeft.x() % texture.width(),
+ zoomedImageTopLeft.y() % texture.height());
+ painter->drawTiledPixmap(
+ viewportRect,
+ texture,
+ textureOffset);
+ break;
+ }
+ case AbstractImageView::AlphaBackgroundSolid:
+ painter->fillRect(viewportRect, mAlphaBackgroundColor);
+ break;
+ default:
+ Q_ASSERT(0);
}
}
};
@@ -188,7 +197,7 @@
d->mApplyDisplayTransform = true;
d->mDisplayTransform = 0;
- d->mAlphaBackgroundMode = AlphaBackgroundCheckBoard;
+ d->mAlphaBackgroundMode = AlphaBackgroundNone;
d->mAlphaBackgroundColor = Qt::black;
d->mRenderingIntent = INTENT_PERCEPTUAL;
d->mEnlargeSmallerImages = false;
@@ -332,14 +341,15 @@
d->mBufferIsEmpty = false;
{
QPainter painter(&d->mCurrentBuffer);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
if (document()->hasAlphaChannel()) {
d->drawAlphaBackground(
&painter, QRect(viewportLeft, viewportTop, image.width(), image.height()),
QPoint(zoomedImageLeft, zoomedImageTop),
alphaBackgroundTexture()
);
- } else {
- painter.setCompositionMode(QPainter::CompositionMode_Source);
+ // This is required so transparent pixels don't replace our background
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
}
painter.drawImage(viewportLeft, viewportTop, image);
}
@@ -379,6 +389,7 @@
if (d->mAlternateBuffer.size() != d->mCurrentBuffer.size()) {
d->mAlternateBuffer = QPixmap(d->mCurrentBuffer.size());
}
+ d->mAlternateBuffer.fill(Qt::transparent);
QPainter painter(&d->mAlternateBuffer);
painter.drawPixmap(-delta, d->mCurrentBuffer);
}
diff --git a/lib/documentview/svgviewadapter.cpp b/lib/documentview/svgviewadapter.cpp
--- a/lib/documentview/svgviewadapter.cpp
+++ b/lib/documentview/svgviewadapter.cpp
@@ -123,6 +123,10 @@
const QRectF imageRect = QRectF(imageOffset(), visibleImageSize());
switch (mAlphaBackgroundMode) {
+ case AbstractImageView::AlphaBackgroundNone:
+ // Unlike RasterImageView, SVGs are rendered directly on the image view,
+ // therefore we can simply not draw a background
+ break;
case AbstractImageView::AlphaBackgroundCheckBoard:
painter->drawTiledPixmap(imageRect, alphaBackgroundTexture(), scrollPos());
break;
diff --git a/lib/gwenviewconfig.kcfg b/lib/gwenviewconfig.kcfg
--- a/lib/gwenviewconfig.kcfg
+++ b/lib/gwenviewconfig.kcfg
@@ -119,10 +119,11 @@
+
- AbstractImageView::AlphaBackgroundCheckBoard
+ AbstractImageView::AlphaBackgroundNone
#ffffff