diff options
Diffstat (limited to 'src/declarative/fx')
-rw-r--r-- | src/declarative/fx/qfxlayouts.cpp | 34 | ||||
-rw-r--r-- | src/declarative/fx/qfxlayouts_p.h | 7 | ||||
-rw-r--r-- | src/declarative/fx/qfxtext.cpp | 25 | ||||
-rw-r--r-- | src/declarative/fx/qfxtext.h | 4 | ||||
-rw-r--r-- | src/declarative/fx/qfxtext_p.h | 3 |
5 files changed, 49 insertions, 24 deletions
diff --git a/src/declarative/fx/qfxlayouts.cpp b/src/declarative/fx/qfxlayouts.cpp index 4ca3353..20e7c7c 100644 --- a/src/declarative/fx/qfxlayouts.cpp +++ b/src/declarative/fx/qfxlayouts.cpp @@ -310,9 +310,6 @@ void QFxBaseLayout::preLayout() d->_ep = true; QCoreApplication::postEvent(this, new QEvent(QEvent::User)); } - if (d->stateGroup) { - delete d->stateGroup; d->stateGroup = 0; - } QSet<QFxItem *> allItems; for (int ii = 0; ii < this->QSimpleCanvasItem::children().count(); ++ii) { QFxItem *child = qobject_cast<QFxItem *>(this->QSimpleCanvasItem::children().at(ii)); @@ -388,32 +385,29 @@ void QFxBaseLayout::preLayout() } //###This should be considered to move more centrally, as it seems useful -void QFxBaseLayout::applyTransition(const QList<QPair<QString, QVariant> >& changes, - QFxItem* target, QmlTransition* trans) +void QFxBaseLayout::applyTransition(const QList<QPair<QString, QVariant> >& changes, QFxItem* target, QmlTransition* trans) { Q_D(QFxBaseLayout); if (!trans||!target)//TODO: if !trans, just apply changes return; setLayoutItem(target); - if (d->stateGroup) - delete d->stateGroup; - d->stateGroup = new QmlStateGroup(this); - QmlState *state = new QmlState; - *(d->stateGroup->statesProperty()) << state; + QmlStateOperation::ActionList actions; + for (int ii=0; ii<changes.size(); ++ii){ - QmlSetProperty *sp = new QmlSetProperty(state); - sp->setObject(target); - QVariant val = changes[ii].second; - if (d->_margin && - (changes[ii].first == QLatin1String("x") || changes[ii].first == QLatin1String("y"))){ + + QVariant val = changes[ii].second; + if (d->_margin && + (changes[ii].first == QLatin1String("x") || + changes[ii].first == QLatin1String("y"))) { val = QVariant(val.toInt() + d->_margin); - } - sp->setValue(val); - sp->setProperty(changes[ii].first); - *state << sp; + } + + actions << Action(target, changes[ii].first, val); + } - state->apply(d->stateGroup, trans, 0); + + d->transitionManager.transition(actions, trans); d->_animated << target; } diff --git a/src/declarative/fx/qfxlayouts_p.h b/src/declarative/fx/qfxlayouts_p.h index 77b0ea1..5ffe70e 100644 --- a/src/declarative/fx/qfxlayouts_p.h +++ b/src/declarative/fx/qfxlayouts_p.h @@ -58,7 +58,7 @@ #include <QtCore/QString> #include <QtDeclarative/qfxlayouts.h> #include <QtDeclarative/qmlstate.h> - +#include <private/qmltransitionmanager_p.h> QT_BEGIN_NAMESPACE class QFxBaseLayoutPrivate : public QFxItemPrivate @@ -69,7 +69,7 @@ public: QFxBaseLayoutPrivate() : _ep(false), _componentComplete(false), _spacing(0), _margin(0), aut(QFxBaseLayout::None), moveTransition(0), addTransition(0), - removeTransition(0), _layoutItem(0), stateGroup(0), _movingItem(0) + removeTransition(0), _layoutItem(0), _movingItem(0) { } @@ -92,7 +92,8 @@ public: QSet<QFxItem *> _newItems; QSet<QFxItem *> _animated; QFxItem *_layoutItem; - QmlStateGroup *stateGroup; + QmlTransitionManager transitionManager; +// QmlStateGroup *stateGroup; QFxItem *_movingItem; }; diff --git a/src/declarative/fx/qfxtext.cpp b/src/declarative/fx/qfxtext.cpp index c9875d9..f2519dc 100644 --- a/src/declarative/fx/qfxtext.cpp +++ b/src/declarative/fx/qfxtext.cpp @@ -701,6 +701,21 @@ void QFxTextPrivate::checkImgCache() imgDirty = false; } +bool QFxText::smoothTransform() const +{ + Q_D(const QFxText); + return d->smooth; +} + +void QFxText::setSmoothTransform(bool s) +{ + Q_D(QFxText); + if (d->smooth == s) + return; + d->smooth = s; + update(); +} + #if defined(QFX_RENDER_QPAINTER) void QFxText::paintContents(QPainter &p) { @@ -709,6 +724,11 @@ void QFxText::paintContents(QPainter &p) if (d->imgCache.isNull()) return; + bool oldAA = p.testRenderHint(QPainter::Antialiasing); + bool oldSmooth = p.testRenderHint(QPainter::SmoothPixmapTransform); + if (d->smooth) + p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth); + int w = width(); int h = height(); @@ -749,6 +769,11 @@ void QFxText::paintContents(QPainter &p) p.drawPixmap(x, y, d->imgCache); if (needClip) p.restore(); + + if (d->smooth) { + p.setRenderHint(QPainter::Antialiasing, oldAA); + p.setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth); + } } #elif defined(QFX_RENDER_OPENGL2) diff --git a/src/declarative/fx/qfxtext.h b/src/declarative/fx/qfxtext.h index 1f5a7b8..104d18c 100644 --- a/src/declarative/fx/qfxtext.h +++ b/src/declarative/fx/qfxtext.h @@ -69,6 +69,7 @@ class Q_DECLARATIVE_EXPORT QFxText : public QFxItem Q_PROPERTY(bool wrap READ wrap WRITE setWrap) Q_PROPERTY(Qt::TextElideMode elide READ elideMode WRITE setElideMode) Q_PROPERTY(QString activeLink READ activeLink) + Q_PROPERTY(bool smooth READ smoothTransform WRITE setSmoothTransform) public: QFxText(QFxItem *parent=0); @@ -113,6 +114,9 @@ public: QString activeLink() const; + bool smoothTransform() const; + void setSmoothTransform(bool); + virtual void dump(int depth); virtual QString propertyInfo() const; diff --git a/src/declarative/fx/qfxtext_p.h b/src/declarative/fx/qfxtext_p.h index dfaef63..c58705c 100644 --- a/src/declarative/fx/qfxtext_p.h +++ b/src/declarative/fx/qfxtext_p.h @@ -75,7 +75,7 @@ public: QFxTextPrivate() : _font(0), color((QRgb)0), style(QFxText::Normal), imgDirty(true), hAlign(QFxText::AlignLeft), vAlign(QFxText::AlignTop), elideMode(Qt::ElideNone), - dirty(false), wrap(false), richText(false), singleline(false), control(0), doc(0) + dirty(false), wrap(false), smooth(false), richText(false), singleline(false), control(0), doc(0) { } @@ -125,6 +125,7 @@ public: Qt::TextElideMode elideMode; bool dirty; bool wrap; + bool smooth; bool richText; bool singleline; QTextControl *control; |