diff options
author | Ariya Hidayat <ariya.hidayat@nokia.com> | 2009-09-22 15:39:47 +0200 |
---|---|---|
committer | Ariya Hidayat <ariya.hidayat@nokia.com> | 2009-09-22 15:39:47 +0200 |
commit | 80fd32a99dc0dfd94611852b0fc6d1523a6e6885 (patch) | |
tree | 95de4395fd9f8028d2558b55fd985a5c0a0769ab /digiflip | |
parent | c8fce20166e3c987d9740a87554b5d9f0656b8f6 (diff) |
various devdays tweak
Diffstat (limited to 'digiflip')
-rw-r--r-- | digiflip/digiflip.cpp | 100 |
1 files changed, 88 insertions, 12 deletions
diff --git a/digiflip/digiflip.cpp b/digiflip/digiflip.cpp index 7a4b362..2d9375d 100644 --- a/digiflip/digiflip.cpp +++ b/digiflip/digiflip.cpp @@ -30,6 +30,8 @@ class Digits: public QWidget public: + int m_number; + enum { Slide, Flip, @@ -39,13 +41,13 @@ public: Digits(QWidget *parent) : QWidget(parent) , m_number(0) - , m_transition(Slide) + , m_transition(Flip) { setAttribute(Qt::WA_OpaquePaintEvent, true); setAttribute(Qt::WA_NoSystemBackground, true); connect(&m_animator, SIGNAL(frameChanged(int)), SLOT(update())); m_animator.setFrameRange(0, 100); - m_animator.setDuration(600); + m_animator.setDuration(6000); m_animator.setCurveShape(QTimeLine::EaseInOutCurve); } @@ -142,6 +144,8 @@ protected: p.begin(&m_pixmap); p.drawPixmap(0, 0, drawDigits(m_number, rect())); p.end(); + m_pixmap.save("pixmap.png"); + } void resizeEvent(QResizeEvent*) { @@ -156,6 +160,15 @@ protected: int pad = width() / 10; drawFrame(&p, rect().adjusted(pad, pad, -pad, -pad)); p.drawPixmap(0, 0, m_pixmap); + p.end(); + + QPixmap bla(rect().size()); + bla.fill(Qt::transparent); + p.begin(&bla); + drawFrame(&p, rect().adjusted(pad, pad, -pad, -pad)); + p.drawPixmap(0, 0, m_pixmap); + p.end(); + bla.save("frame.png"); } void paintSlide() { @@ -170,15 +183,45 @@ protected: int y = height() * m_animator.currentFrame() / 100; p.drawPixmap(0, y, m_lastPixmap); p.drawPixmap(0, y - height(), m_pixmap); + p.end(); + + QPixmap bla(rect().size()); + bla.fill(Qt::transparent); + p.begin(&bla); + drawFrame(&p, fr); + p.setClipRect(fr); + p.drawPixmap(0, y, m_lastPixmap); + p.drawPixmap(0, y - height(), m_pixmap); + p.end(); + qDebug() << m_animator.currentFrame(); + if (y < 85) { + bla.save("digiflip_slide1.png"); + } + if (y < 25) { + bla.save("digiflip_slide2.png"); + } } + void paintFlip() { QPainter p(this); -#if !defined(Q_OS_SYMBIAN) - p.setRenderHint(QPainter::SmoothPixmapTransform, true); - p.setRenderHint(QPainter::Antialiasing, true); -#endif - p.fillRect(rect(), Qt::black); + paintFlip(p); + p.end(); + QPixmap pixmap(size()); + pixmap.fill(Qt::transparent); + p.begin(&pixmap); + paintFlip(p); + p.end(); + if (m_animator.currentFrame() < 30) + pixmap.save("digiflip_flip1.png"); + if (m_animator.currentFrame() < 70) + pixmap.save("digiflip_flip2.png"); + } + + void paintFlip(QPainter &p) { + p.setRenderHint(QPainter::SmoothPixmapTransform, false); + p.setRenderHint(QPainter::Antialiasing, false); + //p.fillRect(rect(), Qt::black); int hw = width() / 2; int hh = height() / 2; @@ -225,7 +268,6 @@ protected: p.drawPixmap(-hw, -hh, m_pixmap); } - } void paintRotate() { @@ -248,6 +290,39 @@ protected: p.setTransform(transform); p.setRenderHint(QPainter::SmoothPixmapTransform, true); p.drawPixmap(-width() / 2, -height() / 2, pix); + p.end(); + + + QPixmap bla(rect().size()); + bla.fill(Qt::transparent); + p.begin(&bla); + { + int pad = width() / 10; + QRect fr = rect().adjusted(pad, pad, -pad, -pad); + drawFrame(&p, fr); + p.setClipRect(fr); + + int angle1 = -180 * m_animator.currentFrame() / 100; + int angle2 = 180 - 180 * m_animator.currentFrame() / 100; + int angle = (m_animator.currentFrame() <= 50) ? angle1 : angle2; + QPixmap pix = (m_animator.currentFrame() <= 50) ? m_lastPixmap : m_pixmap; + + QTransform transform; + transform.translate(width() / 2, height() / 2); + transform.rotate(angle, Qt::XAxis); + + p.setTransform(transform); + p.setRenderHint(QPainter::SmoothPixmapTransform, true); + p.drawPixmap(-width() / 2, -height() / 2, pix); + p.end(); + + if (m_animator.currentFrame() < 1) { + bla.save("digiflip_rotate1.png"); + } + if (m_animator.currentFrame() < 40) { + bla.save("digiflip_rotate2.png"); + } + } } void paintEvent(QPaintEvent *event) { @@ -265,7 +340,6 @@ protected: } private: - int m_number; int m_transition; QPixmap m_pixmap; QPixmap m_lastPixmap; @@ -289,10 +363,12 @@ public: pal.setColor(QPalette::Window, Qt::black); setPalette(pal); - m_ticker.start(1000, this); + m_ticker.start(13000, this); QTime t = QTime::currentTime(); m_hour->setNumber(t.hour()); m_minute->setNumber(t.minute()); + m_hour->setNumber(13); + m_minute->setNumber(36-1); updateTime(); QAction *slideAction = new QAction("&Slide", this); @@ -315,8 +391,8 @@ public: void updateTime() { QTime t = QTime::currentTime(); - m_hour->flipTo(t.hour()); - m_minute->flipTo(t.minute()); + m_hour->flipTo(13); + m_minute->flipTo(m_minute->m_number + 1); QString str = t.toString("hh:mm:ss"); str.prepend(": "); if (m_hour->transition() == Digits::Slide) |