[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: 2008-10-28 9:25:57
Message-ID: 1225185957.602711.24074.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 876852 by aseigo:
something i've wanted for a bit: autohide on fade. perfect kind of "i don't have to \
think to add this" kind of feature to fill in my boredom during meetings full of \
powerpoint presentations ;)
M +45 -10 flash.cpp
M +4 -0 flash.h
--- trunk/KDE/kdebase/workspace/libs/plasma/widgets/flash.cpp #876851:876852
@@ -46,12 +46,14 @@
Invisible
};
- FlashPrivate()
- : defaultDuration(3000),
+ FlashPrivate(Flash *flash)
+ : q(flash),
+ defaultDuration(3000),
type(FlashPrivate::Text),
color(Qt::black),
animId(0),
- state(FlashPrivate::Invisible)
+ state(FlashPrivate::Invisible),
+ autohide(false)
{
//TODO: put this on a diet by using timerEvent instead?
fadeOutTimer.setInterval(defaultDuration);
@@ -59,11 +61,14 @@
fadeInTimer.setInterval(0);
fadeInTimer.setSingleShot(true);
}
+
~FlashPrivate() { }
void renderPixmap(const QSize &size);
- void setupFlash(Flash *flash, int duration);
+ void setupFlash(int duration);
+ void elementAnimationFinished(int);
+ Flash *q;
int defaultDuration;
FlashType type;
QTimer fadeInTimer;
@@ -80,11 +85,12 @@
Qt::Alignment alignment;
State state;
+ bool autohide;
};
Flash::Flash(QGraphicsItem *parent)
: QGraphicsWidget(parent),
- d(new FlashPrivate)
+ d(new FlashPrivate(this))
{
setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
setCacheMode(NoCache);
@@ -126,7 +132,7 @@
d->type = FlashPrivate::Text;
d->text = text;
d->textOption = option;
- d->setupFlash(this, duration);
+ d->setupFlash(duration);
}
void Flash::flash(const QPixmap &pixmap, int duration, Qt::Alignment align)
@@ -138,9 +144,27 @@
d->type = FlashPrivate::Pixmap;
d->pixmap = pixmap;
d->alignment = align;
- d->setupFlash(this, duration);
+ d->setupFlash(duration);
}
+void Flash::setAutohide(bool autohide)
+{
+ d->autohide = autohide;
+
+ if (autohide) {
+ connect(Plasma::Animator::self(), SIGNAL(elementAnimationFinished(int)),
+ this, SLOT(elementAnimationFinished(int)));
+ } else {
+ disconnect(Plasma::Animator::self(), SIGNAL(elementAnimationFinished(int)),
+ this, SLOT(elementAnimationFinished(int)));
+ }
+}
+
+bool Flash::autohide() const
+{
+ return d->autohide;
+}
+
void Flash::kill()
{
d->fadeInTimer.stop();
@@ -152,6 +176,10 @@
void Flash::fadeIn()
{
//kDebug();
+ if (d->autohide) {
+ show();
+ }
+
d->state = FlashPrivate::Visible;
d->animId = Plasma::Animator::self()->animateElement(this, \
Plasma::Animator::AppearAnimation);
Plasma::Animator::self()->setInitialPixmap(d->animId, d->renderedPixmap);
@@ -225,16 +253,16 @@
}
}
-void FlashPrivate::setupFlash(Flash *flash, int duration)
+void FlashPrivate::setupFlash(int duration)
{
fadeOutTimer.stop();
fadeOutTimer.setInterval(duration > 0 ? duration : defaultDuration);
- renderPixmap(flash->size().toSize());
+ renderPixmap(q->size().toSize());
if (state != FlashPrivate::Visible) {
fadeInTimer.start();
} else {
- flash->update();
+ q->update();
}
if (fadeOutTimer.interval() > 0) {
@@ -242,4 +270,11 @@
}
}
+void FlashPrivate::elementAnimationFinished(int id)
+{
+ if (autohide && state == FlashPrivate::Invisible && id == animId) {
+ q->hide();
+ }
+}
+
#include "flash.moc"
--- trunk/KDE/kdebase/workspace/libs/plasma/widgets/flash.h #876851:876852
@@ -54,6 +54,9 @@
void flash(const QPixmap &pixmap, int duration = 0,
Qt::Alignment align = Qt::AlignCenter);
+ void setAutohide(bool autohide);
+ bool autohide() const;
+
public Q_SLOTS:
void kill();
@@ -62,6 +65,7 @@
void fadeOut();
private:
+ Q_PRIVATE_SLOT(d, void elementAnimationFinished(int))
FlashPrivate *const d;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic