X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fcolumnhandleitem.cpp;h=6ae191e4860a27d45b822d35277300675a0bdb16;hp=7a93c4f6217560a48c75de67f7bebbdb17059866;hb=4ae8f86c1ce452582d6fe576956c7c1bc1460adf;hpb=17a68937d25404ddb804f443629313a7c873dbe1 diff --git a/src/qtui/columnhandleitem.cpp b/src/qtui/columnhandleitem.cpp index 7a93c4f6..6ae191e4 100644 --- a/src/qtui/columnhandleitem.cpp +++ b/src/qtui/columnhandleitem.cpp @@ -1,50 +1,62 @@ /*************************************************************************** -* Copyright (C) 2005-08 by the Quassel IRC Team * -* devel@quassel-irc.org * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) version 3. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ - + * Copyright (C) 2005-2012 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "chatview.h" #include "columnhandleitem.h" #include #include -#include #include #include #include ColumnHandleItem::ColumnHandleItem(qreal w, QGraphicsItem *parent) - : QGraphicsItem(parent), + : QGraphicsObject(parent), _width(w), - _hover(0), + _boundingRect(-_width/2, 0, _width, 0), _moving(false), + _offset(0), _minXPos(0), _maxXPos(0), - _timeLine(150) + _opacity(0), + _animation(new QPropertyAnimation(this, "opacity", this)) { + setAcceptsHoverEvents(true); setZValue(10); setCursor(QCursor(Qt::OpenHandCursor)); - connect(&_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(hoverChanged(qreal))); + _animation->setStartValue(0); + _animation->setEndValue(1); + _animation->setDirection(QPropertyAnimation::Forward); + _animation->setDuration(350); + _animation->setEasingCurve(QEasingCurve::InOutSine); + + //connect(&_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(hoverChanged(qreal))); } void ColumnHandleItem::setXPos(qreal xpos) { setPos(xpos, 0); + QRectF sceneBRect = _boundingRect.translated(x(), 0); + _sceneLeft = sceneBRect.left(); + _sceneRight = sceneBRect.right(); } void ColumnHandleItem::setXLimits(qreal min, qreal max) { @@ -55,18 +67,23 @@ void ColumnHandleItem::setXLimits(qreal min, qreal max) { } void ColumnHandleItem::sceneRectChanged(const QRectF &rect) { - if(rect.height() != boundingRect().height()) - prepareGeometryChange(); + prepareGeometryChange(); + _boundingRect = QRectF(-_width/2, rect.y(), _width, rect.height()); +} + +void ColumnHandleItem::setOpacity(qreal opacity) { + _opacity = opacity; + update(); } void ColumnHandleItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { if(event->buttons() & Qt::LeftButton && _moving) { - if(contains(event->lastPos())) { - qreal newx = x() + (event->scenePos() - event->lastScenePos()).x(); - if(newx < _minXPos) newx = _minXPos; - else if(newx + width() > _maxXPos) newx = _maxXPos - width(); - setPos(newx, 0); - } + qreal newx = event->scenePos().x() - _offset; + if(newx < _minXPos) + newx = _minXPos; + else if(newx + width() > _maxXPos) + newx = _maxXPos - width(); + setPos(newx, 0); event->accept(); } else { event->ignore(); @@ -75,8 +92,9 @@ void ColumnHandleItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { void ColumnHandleItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { if(event->buttons() & Qt::LeftButton) { - setCursor(QCursor(Qt::ClosedHandCursor)); + QApplication::setOverrideCursor(Qt::ClosedHandCursor); _moving = true; + _offset = event->pos().x(); event->accept(); } else { event->ignore(); @@ -86,8 +104,11 @@ void ColumnHandleItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { void ColumnHandleItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if(_moving) { _moving = false; - setCursor(QCursor(Qt::OpenHandCursor)); + QRectF sceneBRect = _boundingRect.translated(x(), 0); + _sceneLeft = sceneBRect.left(); + _sceneRight = sceneBRect.right(); emit positionChanged(x()); + QApplication::restoreOverrideCursor(); event->accept(); } else { event->ignore(); @@ -97,22 +118,15 @@ void ColumnHandleItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { void ColumnHandleItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); - _timeLine.setDirection(QTimeLine::Forward); - if(_timeLine.state() != QTimeLine::Running) - _timeLine.start(); + _animation->setDirection(QPropertyAnimation::Forward); + _animation->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(); + _animation->setDirection(QPropertyAnimation::Backward); + _animation->start(); } void ColumnHandleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { @@ -120,12 +134,11 @@ void ColumnHandleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * Q_UNUSED(widget); QLinearGradient gradient(boundingRect().topLeft(), boundingRect().topRight()); - QColor rulerColor = QApplication::palette().windowText().color(); - rulerColor.setAlphaF(_hover); + QColor color = QApplication::palette().windowText().color(); + color.setAlphaF(_opacity); gradient.setColorAt(0, Qt::transparent); - gradient.setColorAt(0.4, rulerColor); - gradient.setColorAt(0.6, rulerColor); + gradient.setColorAt(0.45, color); + gradient.setColorAt(0.55, color); gradient.setColorAt(1, Qt::transparent); painter->fillRect(boundingRect(), gradient); } -