[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/libs/plasma/widgets
From:       Aaron J. Seigo <aseigo () kde ! org>
Date:       2007-06-17 20:56:05
Message-ID: 1182113765.913467.13651.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 676842 by aseigo:

* make mini buttons "click" on mouse release like a proper button
* don't click when moving (either the icon or the mini buttons)
* only show the buttons on hovered states, allowing for proper button/hover/pressed painting
* try and avoid unecessary if/else's and other codedamage
* get rid of some dead code

now it's about ready to be phased =)



 M  +39 -29    icon.cpp  
 M  +3 -2      icon.h  


--- trunk/KDE/kdebase/workspace/libs/plasma/widgets/icon.cpp #676841:676842
@@ -238,27 +238,28 @@
     if (!element.isEmpty()) {
         //kDebug() << "painting " << element << endl;
         d->svg.paint(painter, 0, 0, element);
+        element.clear();
     }
 
     // Draw top-left button
-    QColor colorButton1;
-    if (d->button1Hovered) {
-        element = "button1-hover";
-    } else if (d->button1Pressed) {
-        element = "button1-pressed";
-    } else {
-        element = "button1";
+    if (d->state != Private::NoState) {
+        if (d->button1Pressed) {
+            element = "button1-hover";
+        } else if (d->button1Hovered) {
+            element = "button1-pressed";
+        } else {
+            element = "button1";
+        }
     }
 
     KIcon exec("exec");
     painter->setRenderHint(QPainter::Antialiasing);
     painter->setOpacity(d->stepMenu*0.2);
-//     painter->setBrush(colorButton1);
     painter->setPen(Qt::NoPen);
 
     if (!element.isEmpty()) {
-        //kDebug() << "painting " << element << endl;
         d->svg.paint(painter, QRect(6, 6, 32, 32), element);
+//        painter->drawPixmap(6, 6, Phase::self()->paintElement(d->button1Id, this));
     }
     painter->drawPixmap(11, 11, exec.pixmap(22,22));
 }
@@ -335,12 +336,8 @@
 void Icon::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
     QRectF button1(6, 6, 32, 32); // The top-left circle
-    if (button1.contains(event->pos())) {
-        if (d->url.isValid()) {
-            KRun::runUrl(d->url, KMimeType::findByUrl(d->url)->name(), 0);
-        }
-        d->button1Pressed = true;
-    } else {
+    d->button1Pressed = button1.contains(event->pos());
+    if (!d->button1Pressed) {
         d->state = Private::PressedState;
         QGraphicsItem::mousePressEvent(event);
         update();
@@ -355,6 +352,14 @@
 
     if (inside) {
         d->state = Private::HoverState;
+
+        QRectF button1(6, 6, 32, 32); // The top-left circle
+        d->button1Hovered = button1.contains(event->pos());
+        if (d->button1Hovered &&
+            d->button1Pressed && d->url.isValid()) {
+            KRun::runUrl(d->url, KMimeType::findByUrl(d->url)->name(), 0);
+            wasClicked == false;
+        }
     } else {
         d->state = Private::NoState;
     }
@@ -363,13 +368,8 @@
         emit pressed(false);
         emit clicked();
     }
+
     d->button1Pressed = false;
-    QRectF button1(6, 6, 32, 32); // The top-left circle
-    if (button1.contains(event->pos())) {
-       d->button1Hovered = true;
-    } else {
-       d->button1Hovered = false;
-    }
     QGraphicsItem::mouseReleaseEvent(event);
     update();
 }
@@ -378,12 +378,9 @@
 {
     d->button1Pressed = false;
     QRectF button1(6, 6, 32, 32); // The top-left circle
-    if (button1.contains(event->pos())) {
-        d->button1Hovered = true;
-    } else {
-        d->button1Hovered = false;
-    }
+    d->button1Hovered = button1.contains(event->pos());
 
+    //Phase::self()->elementAppears(this, button1);
     d->timeline.setDirection(QTimeLine::Forward);
     d->state = Private::HoverState;
     QGraphicsItem::hoverEnterEvent(event);
@@ -393,15 +390,28 @@
 void Icon::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
 {
     d->timeline.setDirection(QTimeLine::Backward);
+    //Phase::self()->elementDisappears(this, button1);
 
-    d->state = Private::HoverState;
-    QGraphicsItem::hoverEnterEvent(event);
-
     d->timeline.start();
     d->state = Private::NoState;
+    d->button1Pressed = false;
+    d->button1Hovered = false;
     QGraphicsItem::hoverLeaveEvent(event);
 }
 
+void Icon::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+{
+    if (d->button1Pressed) {
+        d->button1Pressed = false;
+    }
+
+    if (d->state == Private::PressedState) {
+        d->state == Private::HoverState;
+    }
+
+    QGraphicsItem::mouseMoveEvent(event);
+}
+
 QSizeF Icon::sizeHint() const
 {
     return d->size;
--- trunk/KDE/kdebase/workspace/libs/plasma/widgets/icon.h #676841:676842
@@ -90,8 +90,9 @@
         bool isDown();
         void mousePressEvent(QGraphicsSceneMouseEvent *event);
         void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-        void hoverEnterEvent (QGraphicsSceneHoverEvent * event);
-        void hoverLeaveEvent (QGraphicsSceneHoverEvent * event);
+        void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
+        void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+        void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
 
     private Q_SLOTS:
         void animateBubbles(int step);
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic