┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/kitemviews/kfileitemlistview.cpp16
-rw-r--r--src/kitemviews/kfileitemlistview.h8
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp76
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.h23
-rw-r--r--src/kitemviews/kpixmapmodifier.cpp6
-rw-r--r--src/kitemviews/kpixmapmodifier_p.h1
-rw-r--r--src/settings/dolphin_generalsettings.kcfg4
-rw-r--r--src/views/dolphinitemlistcontainer.cpp4
8 files changed, 115 insertions, 23 deletions
diff --git a/src/kitemviews/kfileitemlistview.cpp b/src/kitemviews/kfileitemlistview.cpp
index 8f7c9c899..11760fed1 100644
--- a/src/kitemviews/kfileitemlistview.cpp
+++ b/src/kitemviews/kfileitemlistview.cpp
@@ -82,13 +82,25 @@ KFileItemListView::~KFileItemListView()
void KFileItemListView::setPreviewsShown(bool show)
{
if (m_modelRolesUpdater) {
- m_modelRolesUpdater->setPreviewShown(show);
+ m_modelRolesUpdater->setPreviewsShown(show);
}
}
bool KFileItemListView::previewsShown() const
{
- return m_modelRolesUpdater->isPreviewShown();
+ return m_modelRolesUpdater ? m_modelRolesUpdater->previewsShown() : false;
+}
+
+void KFileItemListView::setEnlargeSmallPreviews(bool enlarge)
+{
+ if (m_modelRolesUpdater) {
+ m_modelRolesUpdater->setEnlargeSmallPreviews(enlarge);
+ }
+}
+
+bool KFileItemListView::enlargeSmallPreviews() const
+{
+ return m_modelRolesUpdater ? m_modelRolesUpdater->enlargeSmallPreviews() : false;
}
void KFileItemListView::setItemLayout(Layout layout)
diff --git a/src/kitemviews/kfileitemlistview.h b/src/kitemviews/kfileitemlistview.h
index 40808c4de..8f7ca9063 100644
--- a/src/kitemviews/kfileitemlistview.h
+++ b/src/kitemviews/kfileitemlistview.h
@@ -54,6 +54,14 @@ public:
void setPreviewsShown(bool show);
bool previewsShown() const;
+ /**
+ * If enabled a small preview gets upscaled to the icon size in case where
+ * the icon size is larger than the preview. Per default enlarging is
+ * enabled.
+ */
+ void setEnlargeSmallPreviews(bool enlarge);
+ bool enlargeSmallPreviews() const;
+
void setItemLayout(Layout layout);
Layout itemLayout() const;
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index b81a4a1a3..2907a126d 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -67,6 +67,7 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO
m_iconSizeChangedDuringPausing(false),
m_rolesChangedDuringPausing(false),
m_previewShown(false),
+ m_enlargeSmallPreviews(true),
m_clearPreviews(false),
m_model(model),
m_iconSize(),
@@ -155,7 +156,7 @@ void KFileItemModelRolesUpdater::setVisibleIndexRange(int index, int count)
}
}
-void KFileItemModelRolesUpdater::setPreviewShown(bool show)
+void KFileItemModelRolesUpdater::setPreviewsShown(bool show)
{
if (show == m_previewShown) {
return;
@@ -166,30 +167,35 @@ void KFileItemModelRolesUpdater::setPreviewShown(bool show)
m_clearPreviews = true;
}
- if (m_paused) {
- m_previewChangedDuringPausing = true;
- } else {
- sortAndResolveAllRoles();
- }
+ updateAllPreviews();
}
-bool KFileItemModelRolesUpdater::isPreviewShown() const
+bool KFileItemModelRolesUpdater::previewsShown() const
{
return m_previewShown;
}
-void KFileItemModelRolesUpdater::setEnabledPlugins(const QStringList& list)
+void KFileItemModelRolesUpdater::setEnlargeSmallPreviews(bool enlarge)
{
- if (m_enabledPlugins == list) {
- return;
+ if (enlarge != m_enlargeSmallPreviews) {
+ m_enlargeSmallPreviews = enlarge;
+ if (m_previewShown) {
+ updateAllPreviews();
+ }
}
+}
- m_enabledPlugins = list;
- if (m_previewShown) {
- if (m_paused) {
- m_previewChangedDuringPausing = true;
- } else {
- sortAndResolveAllRoles();
+bool KFileItemModelRolesUpdater::enlargeSmallPreviews() const
+{
+ return m_enlargeSmallPreviews;
+}
+
+void KFileItemModelRolesUpdater::setEnabledPlugins(const QStringList& list)
+{
+ if (m_enabledPlugins == list) {
+ m_enabledPlugins = list;
+ if (m_previewShown) {
+ updateAllPreviews();
}
}
}
@@ -390,7 +396,34 @@ void KFileItemModelRolesUpdater::slotGotPreview(const KFileItem& item, const QPi
const int slashIndex = mimeType.indexOf(QLatin1Char('/'));
const QString mimeTypeGroup = mimeType.left(slashIndex);
if (mimeTypeGroup == QLatin1String("image")) {
- KPixmapModifier::applyFrame(scaledPixmap, m_iconSize);
+ if (m_enlargeSmallPreviews) {
+ KPixmapModifier::applyFrame(scaledPixmap, m_iconSize);
+ } else {
+ // Assure that small previews don't get enlarged. Instead they
+ // should be shown centered within the frame.
+ const QSize contentSize = KPixmapModifier::sizeInsideFrame(m_iconSize);
+ const bool enlargingRequired = scaledPixmap.width() < contentSize.width() &&
+ scaledPixmap.height() < contentSize.height();
+ if (enlargingRequired) {
+ QSize frameSize = scaledPixmap.size();
+ frameSize.scale(m_iconSize, Qt::KeepAspectRatio);
+
+ QPixmap largeFrame(frameSize);
+ largeFrame.fill(Qt::transparent);
+
+ KPixmapModifier::applyFrame(largeFrame, frameSize);
+
+ QPainter painter(&largeFrame);
+ painter.drawPixmap((largeFrame.width() - scaledPixmap.width()) / 2,
+ (largeFrame.height() - scaledPixmap.height()) / 2,
+ scaledPixmap);
+ scaledPixmap = largeFrame;
+ } else {
+ // The image must be shrinked as it is too large to fit into
+ // the available icon size
+ KPixmapModifier::applyFrame(scaledPixmap, m_iconSize);
+ }
+ }
} else {
KPixmapModifier::scale(scaledPixmap, m_iconSize);
}
@@ -968,4 +1001,13 @@ int KFileItemModelRolesUpdater::subItemsCount(const QString& path) const
#endif
}
+void KFileItemModelRolesUpdater::updateAllPreviews()
+{
+ if (m_paused) {
+ m_previewChangedDuringPausing = true;
+ } else {
+ sortAndResolveAllRoles();
+ }
+}
+
#include "kfileitemmodelrolesupdater.moc"
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.h b/src/kitemviews/kfileitemmodelrolesupdater.h
index d22867511..e5e105e04 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.h
+++ b/src/kitemviews/kfileitemmodelrolesupdater.h
@@ -81,8 +81,16 @@ public:
* of the file. If \a show is false the MIME type icon will be used for the "iconPixmap"
* role.
*/
- void setPreviewShown(bool show);
- bool isPreviewShown() const;
+ void setPreviewsShown(bool show);
+ bool previewsShown() const;
+
+ /**
+ * If enabled a small preview gets upscaled to the icon size in case where
+ * the icon size is larger than the preview. Per default enlarging is
+ * enabled.
+ */
+ void setEnlargeSmallPreviews(bool enlarge);
+ bool enlargeSmallPreviews() const;
/**
* If \a paused is set to true the asynchronous resolving of roles will be paused.
@@ -187,6 +195,12 @@ private:
*/
int subItemsCount(const QString& path) const;
+ /**
+ * Must be invoked if a property has been changed that affects
+ * the look of the preview. Takes care to update all previews.
+ */
+ void updateAllPreviews();
+
private:
// Property for setPaused()/isPaused().
bool m_paused;
@@ -197,9 +211,12 @@ private:
bool m_iconSizeChangedDuringPausing;
bool m_rolesChangedDuringPausing;
- // Property for setPreviewShown()/previewShown().
+ // Property for setPreviewsShown()/previewsShown().
bool m_previewShown;
+ // Property for setEnlargeSmallPreviews()/enlargeSmallPreviews()
+ bool m_enlargeSmallPreviews;
+
// True if the role "iconPixmap" should be cleared when resolving the next
// role with resolveRole(). Is necessary if the preview gets disabled
// during the roles-updater has been paused by setPaused().
diff --git a/src/kitemviews/kpixmapmodifier.cpp b/src/kitemviews/kpixmapmodifier.cpp
index 91f22da3c..475f36a64 100644
--- a/src/kitemviews/kpixmapmodifier.cpp
+++ b/src/kitemviews/kpixmapmodifier.cpp
@@ -392,3 +392,9 @@ void KPixmapModifier::applyFrame(QPixmap& icon, const QSize& scaledSize)
icon = framedIcon;
}
+QSize KPixmapModifier::sizeInsideFrame(const QSize& frameSize)
+{
+ return QSize(frameSize.width() - TileSet::LeftMargin - TileSet::RightMargin,
+ frameSize.height() - TileSet::TopMargin - TileSet::BottomMargin);
+}
+
diff --git a/src/kitemviews/kpixmapmodifier_p.h b/src/kitemviews/kpixmapmodifier_p.h
index bca5e442a..4f863c349 100644
--- a/src/kitemviews/kpixmapmodifier_p.h
+++ b/src/kitemviews/kpixmapmodifier_p.h
@@ -30,6 +30,7 @@ class LIBDOLPHINPRIVATE_EXPORT KPixmapModifier
public:
static void scale(QPixmap& pixmap, const QSize& scaledSize);
static void applyFrame(QPixmap& icon, const QSize& scaledSize);
+ static QSize sizeInsideFrame(const QSize& frameSize);
};
#endif
diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg
index 3e1d47415..9f261dc5f 100644
--- a/src/settings/dolphin_generalsettings.kcfg
+++ b/src/settings/dolphin_generalsettings.kcfg
@@ -83,5 +83,9 @@
<label>Lock the layout of the panels</label>
<default>true</default>
</entry>
+ <entry name="EnlargeSmallPreviews" type="Bool">
+ <label>Enlarge Small Previews</label>
+ <default>true</default>
+ </entry>
</group>
</kcfg>
diff --git a/src/views/dolphinitemlistcontainer.cpp b/src/views/dolphinitemlistcontainer.cpp
index 391dc648f..5b7522f00 100644
--- a/src/views/dolphinitemlistcontainer.cpp
+++ b/src/views/dolphinitemlistcontainer.cpp
@@ -48,9 +48,11 @@ DolphinItemListContainer::DolphinItemListContainer(KDirLister* dirLister,
controller()->setModel(new KFileItemModel(dirLister, this));
m_fileItemListView = new KFileItemListView();
+ controller()->setView(m_fileItemListView);
+
m_fileItemListView->setWidgetCreator(new KItemListWidgetCreator<DolphinFileItemListWidget>());
m_fileItemListView->setEnabledSelectionToggles(GeneralSettings::showSelectionToggle());
- controller()->setView(m_fileItemListView);
+ m_fileItemListView->setEnlargeSmallPreviews(GeneralSettings::enlargeSmallPreviews());
updateAutoActivationDelay();
updateFont();