X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/c8072005fada01d772595ec64adca449134f421e..e4170c1910ad91fd31bc64edfab17ddc814411d5:/src/kcategorydrawer.cpp diff --git a/src/kcategorydrawer.cpp b/src/kcategorydrawer.cpp index ebe77f4de..53cf059f1 100644 --- a/src/kcategorydrawer.cpp +++ b/src/kcategorydrawer.cpp @@ -1,6 +1,6 @@ /** * This file is part of the KDE project - * Copyright (C) 2007 Rafael Fernández López + * Copyright (C) 2007 Rafael Fernández López * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -23,6 +23,7 @@ #include #include +#include #include KCategoryDrawer::KCategoryDrawer() @@ -38,9 +39,18 @@ void KCategoryDrawer::drawCategory(const QModelIndex &index, const QStyleOption &option, QPainter *painter) const { - const QString category = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryRole).toString(); + const QString category = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString(); - QColor color = option.palette.color(QPalette::Text); + QColor color; + + if (option.state & QStyle::State_Selected) + { + color = option.palette.color(QPalette::HighlightedText); + } + else + { + color = option.palette.color(QPalette::Text); + } painter->save(); painter->setRenderHint(QPainter::Antialiasing); @@ -52,18 +62,41 @@ void KCategoryDrawer::drawCategory(const QModelIndex &index, opt.direction = option.direction; opt.text = category; - if (option.state & QStyle::State_MouseOver) + int iconSize = KIconLoader::global()->currentSize(KIconLoader::Small); + + if (option.direction == Qt::LeftToRight) + { + opt.rect.setLeft(opt.rect.left() + (iconSize / 4)); + } + else + { + opt.rect.setRight(opt.rect.width() - (iconSize / 4)); + } + + if (option.state & QStyle::State_Selected) + { + QColor selected = option.palette.color(QPalette::Highlight); + + QLinearGradient gradient(option.rect.topLeft(), + option.rect.bottomRight()); + gradient.setColorAt(option.direction == Qt::LeftToRight ? 0 + : 1, selected); + gradient.setColorAt(option.direction == Qt::LeftToRight ? 1 + : 0, Qt::transparent); + + painter->fillRect(option.rect, gradient); + } + else if (option.state & QStyle::State_MouseOver) { - const QPalette::ColorGroup group = - option.state & QStyle::State_Enabled ? - QPalette::Normal : QPalette::Disabled; + QColor hover = option.palette.color(QPalette::Highlight).light(); + hover.setAlpha(88); QLinearGradient gradient(option.rect.topLeft(), option.rect.bottomRight()); - gradient.setColorAt(0, - option.palette.color(group, - QPalette::Highlight).light()); - gradient.setColorAt(1, Qt::transparent); + gradient.setColorAt(option.direction == Qt::LeftToRight ? 0 + : 1, hover); + gradient.setColorAt(option.direction == Qt::LeftToRight ? 1 + : 0, Qt::transparent); painter->fillRect(option.rect, gradient); } @@ -82,15 +115,17 @@ void KCategoryDrawer::drawCategory(const QModelIndex &index, QLinearGradient gradient(option.rect.topLeft(), option.rect.bottomRight()); - gradient.setColorAt(0, color); - gradient.setColorAt(1, Qt::transparent); + gradient.setColorAt(option.direction == Qt::LeftToRight ? 0 + : 1, color); + gradient.setColorAt(option.direction == Qt::LeftToRight ? 1 + : 0, Qt::transparent); painter->setBrush(gradient); painter->fillPath(path, gradient); painter->setPen(color); - painter->drawText(option.rect, Qt::AlignVCenter | Qt::AlignLeft, + painter->drawText(opt.rect, Qt::AlignVCenter | Qt::AlignLeft, metrics.elidedText(category, Qt::ElideRight, option.rect.width())); painter->restore();