mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 16:31:21 +00:00
Give feedback to user when clicking on a category and the user is not dragging from it. Beauty, come to me :)
CCMAIL: peter.penz@gmx.at svn path=/trunk/KDE/kdebase/apps/; revision=713337
This commit is contained in:
parent
3c77e0f720
commit
b3db0a708a
|
@ -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);
|
||||
|
|
|
@ -357,10 +357,23 @@ void KCategorizedView::Private::drawNewCategory(const QModelIndex &index,
|
|||
QStyleOption optionCopy = option;
|
||||
const QString category = proxyModel->data(index, KCategorizedSortFilterProxyModel::CategoryRole).toString();
|
||||
|
||||
optionCopy.state &= ~QStyle::State_Selected;
|
||||
|
||||
if ((category == hoveredCategory) && !mouseButtonPressed)
|
||||
{
|
||||
optionCopy.state |= QStyle::State_MouseOver;
|
||||
}
|
||||
else if ((category == hoveredCategory) && mouseButtonPressed)
|
||||
{
|
||||
QPoint initialPressPosition = listView->viewport()->mapFromGlobal(QCursor::pos());
|
||||
initialPressPosition.setY(initialPressPosition.y() + listView->verticalOffset());
|
||||
initialPressPosition.setX(initialPressPosition.x() + listView->horizontalOffset());
|
||||
|
||||
if (initialPressPosition == this->initialPressPosition)
|
||||
{
|
||||
optionCopy.state |= QStyle::State_Selected;
|
||||
}
|
||||
}
|
||||
|
||||
categoryDrawer->drawCategory(index,
|
||||
sortRole,
|
||||
|
@ -891,6 +904,8 @@ void KCategorizedView::mousePressEvent(QMouseEvent *event)
|
|||
}
|
||||
|
||||
QListView::mousePressEvent(event);
|
||||
|
||||
viewport()->update(d->categoryVisualRect(d->hoveredCategory));
|
||||
}
|
||||
|
||||
void KCategorizedView::mouseReleaseEvent(QMouseEvent *event)
|
||||
|
|
|
@ -40,7 +40,16 @@ void KCategoryDrawer::drawCategory(const QModelIndex &index,
|
|||
{
|
||||
const QString category = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryRole).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 +61,30 @@ void KCategoryDrawer::drawCategory(const QModelIndex &index,
|
|||
opt.direction = option.direction;
|
||||
opt.text = category;
|
||||
|
||||
if (option.state & QStyle::State_MouseOver)
|
||||
if (option.state & QStyle::State_Selected)
|
||||
{
|
||||
const QPalette::ColorGroup group =
|
||||
option.state & QStyle::State_Enabled ?
|
||||
QPalette::Normal : QPalette::Disabled;
|
||||
QColor selected = option.palette.color(QPalette::Highlight);
|
||||
|
||||
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, 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);
|
||||
|
||||
QLinearGradient gradient(option.rect.topLeft(),
|
||||
option.rect.bottomRight());
|
||||
gradient.setColorAt(option.direction == Qt::LeftToRight ? 0
|
||||
: 1, hover);
|
||||
gradient.setColorAt(option.direction == Qt::LeftToRight ? 1
|
||||
: 0, Qt::transparent);
|
||||
|
||||
painter->fillRect(option.rect, gradient);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue