┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2010-09-22 19:12:09 +0000
committerPeter Penz <[email protected]>2010-09-22 19:12:09 +0000
commitabefc8663ac5c9dc15ad08408e224b3a3cef3b6f (patch)
tree92907c9753ab9ec2718e2eb78531a6c984ffb8cd /src
parent5517e4cf10c8aee590b404072aebaffb55bafec3 (diff)
Add a small invisible margin to the selection toggle in case the item-height is nearly equal to the toggle-height. This prevents an accidental execution of application in the details-view with the default icon-size.
BUG: 169494 FIXED-IN: 4.6.0 svn path=/trunk/KDE/kdebase/apps/; revision=1178332
Diffstat (limited to 'src')
-rw-r--r--src/views/selectionmanager.cpp34
-rw-r--r--src/views/selectiontoggle.cpp25
-rw-r--r--src/views/selectiontoggle.h8
3 files changed, 46 insertions, 21 deletions
diff --git a/src/views/selectionmanager.cpp b/src/views/selectionmanager.cpp
index ac5f1c939..7353e5a39 100644
--- a/src/views/selectionmanager.cpp
+++ b/src/views/selectionmanager.cpp
@@ -94,27 +94,27 @@ void SelectionManager::slotEntered(const QModelIndex& index)
m_connected = true;
}
- // increase the size of the toggle for large items
- const int height = m_view->iconSize().height();
- if (height >= KIconLoader::SizeEnormous) {
- m_toggle->resize(KIconLoader::SizeMedium, KIconLoader::SizeMedium);
- } else if (height >= KIconLoader::SizeLarge) {
- m_toggle->resize(KIconLoader::SizeSmallMedium, KIconLoader::SizeSmallMedium);
- } else {
- m_toggle->resize(KIconLoader::SizeSmall, KIconLoader::SizeSmall);
+ // Increase the size of the toggle for large items
+ const int iconHeight = m_view->iconSize().height();
+
+ int toggleSize = KIconLoader::SizeSmall;
+ if (iconHeight >= KIconLoader::SizeEnormous) {
+ toggleSize = KIconLoader::SizeMedium;
+ } else if (iconHeight >= KIconLoader::SizeLarge) {
+ toggleSize = KIconLoader::SizeSmallMedium;
}
+ // Add a small invisible margin, if the item-height is nearly
+ // equal to the toggleSize (#169494).
const QRect rect = m_view->visualRect(index);
- int x = rect.left();
- int y = rect.top();
- if (height < KIconLoader::SizeSmallMedium) {
- // The height is nearly equal to the smallest toggle height.
- // Assure that the toggle is vertically centered instead
- // of aligned on the top and gets more horizontal gap.
- x += 2;
- y += (rect.height() - m_toggle->height()) / 2;
+ int margin = (rect.height() - toggleSize) / 2;
+ if (margin > 4) {
+ margin = 0;
}
- m_toggle->move(QPoint(x, y));
+ toggleSize += 2 * margin;
+ m_toggle->setMargin(margin);
+ m_toggle->resize(toggleSize, toggleSize);
+ m_toggle->move(rect.topLeft());
QItemSelectionModel* selModel = m_view->selectionModel();
m_toggle->setChecked(selModel->isSelected(index));
diff --git a/src/views/selectiontoggle.cpp b/src/views/selectiontoggle.cpp
index d802e22e0..f5287a3dd 100644
--- a/src/views/selectiontoggle.cpp
+++ b/src/views/selectiontoggle.cpp
@@ -36,6 +36,7 @@ SelectionToggle::SelectionToggle(QWidget* parent) :
m_isHovered(false),
m_leftMouseButtonPressed(false),
m_fadingValue(0),
+ m_margin(0),
m_icon(),
m_fadingTimeLine(0)
{
@@ -72,6 +73,19 @@ void SelectionToggle::setUrl(const KUrl& url)
}
}
+void SelectionToggle::setMargin(int margin)
+{
+ if (margin != m_margin) {
+ m_margin = margin;
+ update();
+ }
+}
+
+int SelectionToggle::margin() const
+{
+ return m_margin;
+}
+
KUrl SelectionToggle::url() const
{
return m_url;
@@ -161,10 +175,11 @@ void SelectionToggle::paintEvent(QPaintEvent* event)
painter.setClipRect(event->rect());
// draw the icon overlay
+ const QPoint pos(m_margin, m_margin);
if (m_isHovered) {
KIconEffect *iconEffect = KIconLoader::global()->iconEffect();
QPixmap activeIcon = iconEffect->apply(m_icon, KIconLoader::Desktop, KIconLoader::ActiveState);
- painter.drawPixmap(0, 0, activeIcon);
+ painter.drawPixmap(pos, activeIcon);
} else {
if (m_fadingValue < 255) {
// apply an alpha mask respecting the fading value to the icon
@@ -173,12 +188,13 @@ void SelectionToggle::paintEvent(QPaintEvent* event)
const QColor color(m_fadingValue, m_fadingValue, m_fadingValue);
alphaMask.fill(color);
icon.setAlphaChannel(alphaMask);
- painter.drawPixmap(0, 0, icon);
+ painter.drawPixmap(pos, icon);
} else {
// no fading is required
- painter.drawPixmap(0, 0, m_icon);
+ painter.drawPixmap(pos, m_icon);
}
}
+
}
void SelectionToggle::setFadingValue(int value)
@@ -194,9 +210,10 @@ void SelectionToggle::setFadingValue(int value)
void SelectionToggle::setIconOverlay(bool checked)
{
const char* icon = checked ? "list-remove" : "list-add";
+ const int size = qMin(width() - 2 * m_margin, height() - 2 * m_margin);
m_icon = KIconLoader::global()->loadIcon(icon,
KIconLoader::NoGroup,
- qMin(width(), height()));
+ size);
update();
}
diff --git a/src/views/selectiontoggle.h b/src/views/selectiontoggle.h
index 5519272b3..210f1a3aa 100644
--- a/src/views/selectiontoggle.h
+++ b/src/views/selectiontoggle.h
@@ -53,6 +53,13 @@ public:
void setUrl(const KUrl& url);
KUrl url() const;
+ /**
+ * Sets the margin around the selection-icon in pixels. Per default
+ * the value is 0.
+ */
+ void setMargin(int margin);
+ int margin() const;
+
public slots:
virtual void setVisible(bool visible);
@@ -83,6 +90,7 @@ private:
bool m_isHovered;
bool m_leftMouseButtonPressed;
int m_fadingValue;
+ int m_margin;
QPixmap m_icon;
QTimeLine* m_fadingTimeLine;
KUrl m_url;