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:
parent
311f58dea6
commit
ce765ec610
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user