X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/b7e3077a9d2b6006b9b8edb6b63c42bddb2bd2cc..d6488887ecf69d7f192b94de8dce34fae0b7eb76:/src/dolphincategorydrawer.cpp diff --git a/src/dolphincategorydrawer.cpp b/src/dolphincategorydrawer.cpp index 099167b61..bd88d5e5c 100644 --- a/src/dolphincategorydrawer.cpp +++ b/src/dolphincategorydrawer.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 @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include @@ -52,7 +52,7 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, { QRect starRect = option.rect; - int iconSize = KIconLoader::global()->currentSize(K3Icon::Small); + int iconSize = KIconLoader::global()->currentSize(KIconLoader::Small); QVariant categoryVariant = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryRole); if (!categoryVariant.isValid()) @@ -62,7 +62,16 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, const QString category = categoryVariant.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); @@ -74,7 +83,20 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, opt.direction = option.direction; opt.text = category; - if (option.state & QStyle::State_MouseOver) + 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) { QColor hover = option.palette.color(QPalette::Highlight).light(); hover.setAlpha(88); @@ -145,16 +167,21 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, break; case KDirModel::Owner: { - opt.rect.setTop(option.rect.top() + (iconSize / 4)); + opt.rect.setTop(option.rect.bottom() - (iconSize / 4)); KUser user(category); - if (QFile::exists(user.homeDir() + QDir::separator() + ".face.icon")) + QString faceIconPath = user.faceIconPath(); + + if (!faceIconPath.isEmpty()) { - icon = QPixmap::fromImage(QImage(user.homeDir() + QDir::separator() + ".face.icon")).scaled(iconSize, iconSize); + icon = QPixmap::fromImage(QImage(faceIconPath).scaledToHeight(option.fontMetrics.height(), Qt::SmoothTransformation)); } else { - icon = KIconLoader::global()->loadIcon("user", K3Icon::Small); + icon = KIconLoader::global()->loadIcon("user", KIconLoader::NoGroup, option.fontMetrics.height()); } + + opt.rect.setTop(opt.rect.top() - icon.height()); + break; } @@ -163,7 +190,7 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, break; case KDirModel::Type: { - opt.rect.setTop(option.rect.top() + (option.rect.height() / 2) - (iconSize / 2)); + opt.rect.setTop(option.rect.bottom() - (iconSize / 4)); const KCategorizedSortFilterProxyModel *proxyModel = static_cast(index.model()); const DolphinModel *model = static_cast(proxyModel->sourceModel()); KFileItem item = model->itemForIndex(proxyModel->mapToSource(index)); @@ -172,7 +199,10 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, // so the group icon drawn is that one particularly. This way assures the drawn // icon is the one of the mimetype of the group itself. (ereslibre) icon = KIconLoader::global()->loadMimeTypeIcon(item.mimeTypePtr()->iconName(), - K3Icon::Small); + KIconLoader::NoGroup, option.fontMetrics.height()); + + opt.rect.setTop(opt.rect.top() - icon.height()); + break; } @@ -184,11 +214,13 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, starRect.setTop(option.rect.top() + (option.rect.height() / 2) - (iconSize / 2)); starRect.setSize(QSize(iconSize, iconSize)); - QPixmap pixmap = KIconLoader::global()->loadIcon("rating", K3Icon::Small); - QPixmap smallPixmap = KIconLoader::global()->loadIcon("rating", K3Icon::NoGroup, iconSize / 2); - QPixmap disabledPixmap = KIconLoader::global()->loadIcon("rating", K3Icon::Small); + QPixmap pixmap = KIconLoader::global()->loadIcon("rating", KIconLoader::Small); + QPixmap smallPixmap = KIconLoader::global()->loadIcon("rating", KIconLoader::NoGroup, iconSize / 2); + QPixmap disabledPixmap = KIconLoader::global()->loadIcon("rating", KIconLoader::Small); - KPixmapEffect::toGray(disabledPixmap, false); + QImage img = disabledPixmap.toImage(); + Blitz::grayscale(img); + disabledPixmap = QPixmap::fromImage(img); int rating = category.toInt(); @@ -264,11 +296,15 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, if (paintIcon) { painter->drawPixmap(QRect(option.direction == Qt::LeftToRight ? opt.rect.left() - : opt.rect.right() - iconSize, opt.rect.top(), iconSize, iconSize), icon); + : opt.rect.right() - icon.width() + (iconSize / 4), opt.rect.top(), icon.width(), icon.height()), icon); if (option.direction == Qt::LeftToRight) { - opt.rect.setLeft(opt.rect.left() + iconSize + (iconSize / 4)); + opt.rect.setLeft(opt.rect.left() + icon.width() + (iconSize / 4)); + } + else + { + opt.rect.setRight(opt.rect.right() + (iconSize / 4)); } } @@ -281,8 +317,8 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, if (option.direction == Qt::RightToLeft) { - textRect.setWidth(textRect.width() - (paintIcon ? iconSize + (iconSize / 4) - : (iconSize / 4))); + textRect.setWidth(textRect.width() - (paintIcon ? icon.width() + (iconSize / 2) + : -(iconSize / 4))); } painter->drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, @@ -294,7 +330,7 @@ void DolphinCategoryDrawer::drawCategory(const QModelIndex &index, int sortRole, int DolphinCategoryDrawer::categoryHeight(const QStyleOption &option) const { - int iconSize = KIconLoader::global()->currentSize(K3Icon::Small); + int iconSize = KIconLoader::global()->currentSize(KIconLoader::Small); return qMax(option.fontMetrics.height() + (iconSize / 4) * 2 + 2, iconSize + (iconSize / 4) * 2 + 2) /* 2 gradient */; }