better button mouse interaction; patch by Jason Stubbs

CCMAIL:jasonstubbs@gmail.com

svn path=/trunk/KDE/kdebase/workspace/libs/plasma/; revision=736872
This commit is contained in:
Aaron J. Seigo 2007-11-15 03:35:12 +00:00
parent 311f58dea6
commit ce765ec610
2 changed files with 23 additions and 8 deletions

View File

@ -26,6 +26,7 @@
#include <QStyle>
#include <QWidget>
#include <QPainter>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QFontMetricsF>
#include <QApplication>
@ -250,22 +251,35 @@ void PushButton::mousePressEvent(QGraphicsSceneMouseEvent *event)
update();
}
void PushButton::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
event->accept();
if (sceneBoundingRect().contains(event->scenePos())) {
if (d->state == Private::Released && scene()->mouseGrabberItem() == this) {
d->state = Private::Pressed;
update();
}
} else {
if (d->state == Private::Pressed) {
d->state = Private::Released;
update();
}
}
}
void PushButton::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
event->accept();
if (d->state == Private::Pressed) {
d->state = Private::Released;
emit clicked();
if (sceneBoundingRect().contains(event->scenePos())) {
emit clicked();
if (d->checkable) {
d->checked = ! d->checked;
emit toggled(d->checked);
}
if (d->checkable) {
d->checked = ! d->checked;
emit toggled(d->checked);
}
update();
}
update();
}
QSizeF PushButton::minimumSize() const

View File

@ -178,6 +178,7 @@ Q_SIGNALS:
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void paintWidget(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);