From: Marcus Eggenberger Date: Fri, 25 Jul 2008 15:17:47 +0000 (+0200) Subject: styling the column handle for the chatview. it has now only shown on hover and a... X-Git-Tag: 0.3.0~157 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=9806418efa4c59dae71fd628ea9c57453ca81434 styling the column handle for the chatview. it has now only shown on hover and a smooth gradient --- diff --git a/src/qtui/CMakeLists.txt b/src/qtui/CMakeLists.txt index 81e7c27e..2951cf69 100644 --- a/src/qtui/CMakeLists.txt +++ b/src/qtui/CMakeLists.txt @@ -41,6 +41,7 @@ set(MOC_HDRS chatlinemodel.h chatscene.h chatview.h + columnhandleitem.h coreconfigwizard.h coreconnectdlg.h coreinfodlg.h @@ -61,7 +62,6 @@ set(HEADERS chatitem.h chatline.h chatlinemodelitem.h - columnhandleitem.h qtuisettings.h qtuistyle.h) diff --git a/src/qtui/columnhandleitem.cpp b/src/qtui/columnhandleitem.cpp index 3b84f578..8ab7331b 100644 --- a/src/qtui/columnhandleitem.cpp +++ b/src/qtui/columnhandleitem.cpp @@ -20,17 +20,25 @@ #include #include +#include #include #include #include "columnhandleitem.h" -ColumnHandleItem::ColumnHandleItem(qreal w, QGraphicsItem *parent) : QGraphicsItem(parent) { - _width = w; +ColumnHandleItem::ColumnHandleItem(qreal w, QGraphicsItem *parent) + : QGraphicsItem(parent), + _width(w), + _hover(0), + _timeLine(150) +{ + setAcceptsHoverEvents(true); setZValue(10); setCursor(QCursor(Qt::OpenHandCursor)); setFlag(ItemIsMovable); + + connect(&_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(hoverChanged(qreal))); } void ColumnHandleItem::setXPos(qreal xpos) { @@ -43,7 +51,6 @@ void ColumnHandleItem::sceneRectChanged(const QRectF &rect) { } void ColumnHandleItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - QGraphicsItem::mouseMoveEvent(event); } @@ -61,7 +68,31 @@ void ColumnHandleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * Q_UNUSED(option); Q_UNUSED(widget); - painter->drawRect(boundingRect()); + QLinearGradient gradient(0, 0, width(), 0); + gradient.setColorAt(0.25, Qt::transparent); + gradient.setColorAt(0.5, QColor(0, 0, 0, _hover * 200)); + gradient.setColorAt(0.75, Qt::transparent); + painter->fillRect(boundingRect(), gradient); +} +void ColumnHandleItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { + Q_UNUSED(event); + _timeLine.setDirection(QTimeLine::Forward); + if(_timeLine.state() != QTimeLine::Running) + _timeLine.start(); } + +void ColumnHandleItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { + Q_UNUSED(event); + + _timeLine.setDirection(QTimeLine::Backward); + if(_timeLine.state() != QTimeLine::Running) + _timeLine.start(); +} + +void ColumnHandleItem::hoverChanged(qreal value) { + _hover = value; + update(); +} + diff --git a/src/qtui/columnhandleitem.h b/src/qtui/columnhandleitem.h index 3bfe5bac..dc125120 100644 --- a/src/qtui/columnhandleitem.h +++ b/src/qtui/columnhandleitem.h @@ -21,34 +21,39 @@ #ifndef COLUMNHANDLEITEM_H_ #define COLUMNHANDLEITEM_H_ +#include #include - -class ColumnHandleItem : public QGraphicsItem { - - public: - ColumnHandleItem(qreal width, QGraphicsItem *parent = 0); - - inline qreal width() const; - inline QRectF boundingRect() const; - void setXPos(qreal xpos); - - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); - void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - void mousePressEvent(QGraphicsSceneMouseEvent *event); - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - - void sceneRectChanged(const QRectF &); - - private: - qreal _width; +#include +#include + +class ColumnHandleItem : public QObject, public QGraphicsItem { + Q_OBJECT + +public: + ColumnHandleItem(qreal width, QGraphicsItem *parent = 0); + + inline qreal width() const { return _width; } + inline QRectF boundingRect() const { return QRectF(0, 0, _width, scene()->height()); } + void setXPos(qreal xpos); + + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); + void mousePressEvent(QGraphicsSceneMouseEvent *event); + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); + + void sceneRectChanged(const QRectF &); + +protected: + void hoverEnterEvent(QGraphicsSceneHoverEvent *event); + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); + +private slots: + void hoverChanged(qreal value); + +private: + qreal _width; + qreal _hover; + QTimeLine _timeLine; }; -qreal ColumnHandleItem::width() const { - return _width; -} - -QRectF ColumnHandleItem::boundingRect() const { - return QRectF(0, 0, _width, scene()->height()); -} - #endif