From: Peter Penz Date: Wed, 22 Sep 2010 19:12:09 +0000 (+0000) Subject: Add a small invisible margin to the selection toggle in case the item-height is nearl... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/abefc8663ac5c9dc15ad08408e224b3a3cef3b6f 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 --- 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;