summaryrefslogtreecommitdiffstats
path: root/src/declarative/fx
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/fx')
-rw-r--r--src/declarative/fx/qfxlayouts.cpp34
-rw-r--r--src/declarative/fx/qfxlayouts_p.h7
-rw-r--r--src/declarative/fx/qfxtext.cpp25
-rw-r--r--src/declarative/fx/qfxtext.h4
-rw-r--r--src/declarative/fx/qfxtext_p.h3
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;