equal
deleted
inserted
replaced
45 #include <QTimer> |
45 #include <QTimer> |
46 #include <QDateTime> |
46 #include <QDateTime> |
47 #include <QSlider> |
47 #include <QSlider> |
48 #include <QMouseEvent> |
48 #include <QMouseEvent> |
49 #include <qmath.h> |
49 #include <qmath.h> |
|
50 |
|
51 const int animationInterval = 15; // update every 16 ms = ~60FPS |
50 |
52 |
51 CompositionWidget::CompositionWidget(QWidget *parent) |
53 CompositionWidget::CompositionWidget(QWidget *parent) |
52 : QWidget(parent) |
54 : QWidget(parent) |
53 { |
55 { |
54 CompositionRenderer *view = new CompositionRenderer(this); |
56 CompositionRenderer *view = new CompositionRenderer(this); |
234 |
236 |
235 CompositionRenderer::CompositionRenderer(QWidget *parent) |
237 CompositionRenderer::CompositionRenderer(QWidget *parent) |
236 : ArthurFrame(parent) |
238 : ArthurFrame(parent) |
237 { |
239 { |
238 m_animation_enabled = true; |
240 m_animation_enabled = true; |
|
241 m_animationTimer = startTimer(animationInterval); |
239 #ifdef Q_WS_QWS |
242 #ifdef Q_WS_QWS |
240 m_image = QPixmap(":res/composition/flower.jpg"); |
243 m_image = QPixmap(":res/composition/flower.jpg"); |
241 m_image.setAlphaChannel(QPixmap(":res/composition/flower_alpha.jpg")); |
244 m_image.setAlphaChannel(QPixmap(":res/composition/flower_alpha.jpg")); |
242 #else |
245 #else |
243 m_image = QImage(":res/composition/flower.jpg"); |
246 m_image = QImage(":res/composition/flower.jpg"); |
260 QRectF rectangle_around(const QPointF &p, const QSizeF &size = QSize(250, 200)) |
263 QRectF rectangle_around(const QPointF &p, const QSizeF &size = QSize(250, 200)) |
261 { |
264 { |
262 QRectF rect(p, size); |
265 QRectF rect(p, size); |
263 rect.translate(-size.width()/2, -size.height()/2); |
266 rect.translate(-size.width()/2, -size.height()/2); |
264 return rect; |
267 return rect; |
|
268 } |
|
269 |
|
270 void CompositionRenderer::setAnimationEnabled(bool enabled) |
|
271 { |
|
272 if (m_animation_enabled == enabled) |
|
273 return; |
|
274 m_animation_enabled = enabled; |
|
275 if (enabled) { |
|
276 Q_ASSERT(!m_animationTimer); |
|
277 m_animationTimer = startTimer(animationInterval); |
|
278 } else { |
|
279 killTimer(m_animationTimer); |
|
280 m_animationTimer = 0; |
|
281 } |
265 } |
282 } |
266 |
283 |
267 void CompositionRenderer::updateCirclePos() |
284 void CompositionRenderer::updateCirclePos() |
268 { |
285 { |
269 if (m_current_object != NoObject) |
286 if (m_current_object != NoObject) |
469 painter->drawPixmap(0, 0, m_buffer); |
486 painter->drawPixmap(0, 0, m_buffer); |
470 #else |
487 #else |
471 painter->drawImage(0, 0, m_buffer); |
488 painter->drawImage(0, 0, m_buffer); |
472 #endif |
489 #endif |
473 } |
490 } |
474 |
|
475 if (m_animation_enabled && m_current_object == NoObject) { |
|
476 updateCirclePos(); |
|
477 } |
|
478 } |
491 } |
479 |
492 |
480 void CompositionRenderer::mousePressEvent(QMouseEvent *e) |
493 void CompositionRenderer::mousePressEvent(QMouseEvent *e) |
481 { |
494 { |
482 setDescriptionEnabled(false); |
495 setDescriptionEnabled(false); |
487 m_current_object = Circle; |
500 m_current_object = Circle; |
488 m_offset = circle.center() - e->pos(); |
501 m_offset = circle.center() - e->pos(); |
489 } else { |
502 } else { |
490 m_current_object = NoObject; |
503 m_current_object = NoObject; |
491 } |
504 } |
|
505 if (m_animation_enabled) { |
|
506 killTimer(m_animationTimer); |
|
507 m_animationTimer = 0; |
|
508 } |
492 } |
509 } |
493 |
510 |
494 void CompositionRenderer::mouseMoveEvent(QMouseEvent *e) |
511 void CompositionRenderer::mouseMoveEvent(QMouseEvent *e) |
495 { |
512 { |
496 if (m_current_object == Circle) setCirclePos(e->pos() + m_offset); |
513 if (m_current_object == Circle) setCirclePos(e->pos() + m_offset); |
498 |
515 |
499 void CompositionRenderer::mouseReleaseEvent(QMouseEvent *) |
516 void CompositionRenderer::mouseReleaseEvent(QMouseEvent *) |
500 { |
517 { |
501 m_current_object = NoObject; |
518 m_current_object = NoObject; |
502 |
519 |
503 if (m_animation_enabled) |
520 if (m_animation_enabled) { |
|
521 Q_ASSERT(!m_animationTimer); |
|
522 m_animationTimer = startTimer(animationInterval); |
|
523 } |
|
524 } |
|
525 |
|
526 void CompositionRenderer::timerEvent(QTimerEvent *event) |
|
527 { |
|
528 if (event->timerId() == m_animationTimer) |
504 updateCirclePos(); |
529 updateCirclePos(); |
505 } |
530 } |
506 |
531 |
507 void CompositionRenderer::setCirclePos(const QPointF &pos) |
532 void CompositionRenderer::setCirclePos(const QPointF &pos) |
508 { |
533 { |