diff --git a/src/dolphincontroller.cpp b/src/dolphincontroller.cpp index 378c1b4ba8..1831c15c33 100644 --- a/src/dolphincontroller.cpp +++ b/src/dolphincontroller.cpp @@ -19,6 +19,8 @@ #include "dolphincontroller.h" +#include + DolphinController::DolphinController(QObject* parent) : QObject(parent), m_showPreview(false), @@ -87,6 +89,33 @@ void DolphinController::triggerZoomOut() emit zoomOut(); } +void DolphinController::drawHoverIndication(QWidget* widget, + const QRect& bounds, + const QBrush& brush) +{ + QPainter painter(widget); + painter.save(); + QBrush blendedBrush(brush); + QColor color = blendedBrush.color(); + color.setAlpha(64); + blendedBrush.setColor(color); + + const int radius = 10; + QPainterPath path(QPointF(bounds.left(), bounds.top() + radius)); + path.quadTo(bounds.left(), bounds.top(), bounds.left() + radius, bounds.top()); + path.lineTo(bounds.right() - radius, bounds.top()); + path.quadTo(bounds.right(), bounds.top(), bounds.right(), bounds.top() + radius); + path.lineTo(bounds.right(), bounds.bottom() - radius); + path.quadTo(bounds.right(), bounds.bottom(), bounds.right() - radius, bounds.bottom()); + path.lineTo(bounds.left() + radius, bounds.bottom()); + path.quadTo(bounds.left(), bounds.bottom(), bounds.left(), bounds.bottom() - radius); + path.closeSubpath(); + + painter.setRenderHint(QPainter::Antialiasing); + painter.fillPath(path, blendedBrush); + painter.restore(); +} + void DolphinController::triggerItem(const QModelIndex& index) { emit itemTriggered(index); diff --git a/src/dolphincontroller.h b/src/dolphincontroller.h index ccf4e48795..aa0eab22fa 100644 --- a/src/dolphincontroller.h +++ b/src/dolphincontroller.h @@ -26,8 +26,11 @@ #include class KUrl; +class QBrush; class QModelIndex; class QPoint; +class QRect; +class QWidget; /** * @brief Allows to control Dolphin views and to react on state changes. @@ -83,6 +86,11 @@ public: inline void setZoomOutPossible(bool possible); inline bool isZoomOutPossible() const; + // TODO: remove this method when the issue #160611 is solved in Qt 4.4 + static void drawHoverIndication(QWidget* widget, + const QRect& bounds, + const QBrush& brush); + public slots: /** * Emits the signal itemTriggered(). The method should be invoked by the diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 6a3f4bf187..ba82fc901a 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -265,16 +265,10 @@ void DolphinDetailsView::paintEvent(QPaintEvent* event) painter.restore(); } + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 if (m_dragging) { - // TODO: remove this code when the issue #160611 is solved in Qt 4.4 - QPainter painter(viewport()); - painter.save(); - QBrush brush(m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight)); - QColor color = brush.color(); - color.setAlpha(64); - brush.setColor(color); - painter.fillRect(m_dropRect, brush); - painter.restore(); + const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight); + DolphinController::drawHoverIndication(viewport(), m_dropRect, brush); } } diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index d21ffba327..50d7f311e9 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -162,16 +162,10 @@ void DolphinIconsView::paintEvent(QPaintEvent* event) { KListView::paintEvent(event); + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 if (m_dragging) { - // TODO: remove this code when the issue #160611 is solved in Qt 4.4 - QPainter painter(viewport()); - painter.save(); - QBrush brush(m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight)); - QColor color = brush.color(); - color.setAlpha(64); - brush.setColor(color); - painter.fillRect(m_dropRect, brush); - painter.restore(); + const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight); + DolphinController::drawHoverIndication(viewport(), m_dropRect, brush); } } diff --git a/src/sidebartreeview.cpp b/src/sidebartreeview.cpp index f82bff37aa..6e79171de1 100644 --- a/src/sidebartreeview.cpp +++ b/src/sidebartreeview.cpp @@ -19,9 +19,10 @@ #include "sidebartreeview.h" +#include "dolphincontroller.h" + #include #include - #include #include #include @@ -114,16 +115,10 @@ void SidebarTreeView::paintEvent(QPaintEvent* event) { QTreeView::paintEvent(event); + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 if (m_dragging) { - // TODO: remove this code when the issue #160611 is solved in Qt 4.4 - QPainter painter(viewport()); - painter.save(); - QBrush brush(palette().brush(QPalette::Normal, QPalette::Highlight)); - QColor color = brush.color(); - color.setAlpha(64); - brush.setColor(color); - painter.fillRect(m_dropRect, brush); - painter.restore(); + const QBrush& brush = palette().brush(QPalette::Normal, QPalette::Highlight); + DolphinController::drawHoverIndication(viewport(), m_dropRect, brush); } }