aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-02-07 17:52:52 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-07 11:53:54 +0100
commit978550b6c75b204fad433437d153794ae98eea9f (patch)
treee5ead42f67eacea929a8f2bfa3340a183c1f1015 /src
parenta6eb09137247a880c58995464a35c1ad5c3f0c20 (diff)
Resolve StyledText img tags relative to baseUrl.
Change-Id: I954195d52330c65e851b7c0fcdb6c8dabf29335d Reviewed-by: Yann Bodson <yann.bodson@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/quick/items/qquicktext.cpp10
-rw-r--r--src/quick/util/qdeclarativestyledtext.cpp18
-rw-r--r--src/quick/util/qdeclarativestyledtext_p.h2
3 files changed, 22 insertions, 8 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index acf2d17061..14016777c1 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -298,7 +298,7 @@ void QQuickTextPrivate::updateLayout()
if (!richText) {
if (textHasChanged) {
if (styledText && !text.isEmpty()) {
- QDeclarativeStyledText::parse(text, layout, imgTags, qmlContext(q), !maximumLineCountValid);
+ QDeclarativeStyledText::parse(text, layout, imgTags, q->baseUrl(), qmlContext(q), !maximumLineCountValid);
} else {
layout.clearAdditionalFormats();
QString tmp = text;
@@ -893,7 +893,7 @@ void QQuickTextPrivate::setLineGeometry(QTextLine &line, qreal lineWidth, qreal
image->position < line.textStart() + line.textLength()) {
if (!image->pix) {
- QUrl url = qmlContext(q)->resolvedUrl(image->url);
+ QUrl url = q->baseUrl().resolved(image->url);
image->pix = new QDeclarativePixmap(qmlEngine(q), url, image->size);
if (image->pix->isLoading()) {
image->pix->connectFinished(q, SLOT(imageDownloadFinished()));
@@ -1752,6 +1752,12 @@ void QQuickText::setBaseUrl(const QUrl &url)
if (d->doc)
d->doc->setBaseUrl(url);
+ if (d->styledText) {
+ d->textHasChanged = true;
+ qDeleteAll(d->imgTags);
+ d->imgTags.clear();
+ d->updateLayout();
+ }
emit baseUrlChanged();
}
}
diff --git a/src/quick/util/qdeclarativestyledtext.cpp b/src/quick/util/qdeclarativestyledtext.cpp
index 39ea6b1a22..3023fc53dc 100644
--- a/src/quick/util/qdeclarativestyledtext.cpp
+++ b/src/quick/util/qdeclarativestyledtext.cpp
@@ -83,9 +83,10 @@ public:
QDeclarativeStyledTextPrivate(const QString &t, QTextLayout &l,
QList<QDeclarativeStyledTextImgTag*> &imgTags,
+ const QUrl &baseUrl,
QDeclarativeContext *context,
bool preloadImages)
- : text(t), layout(l), imgTags(&imgTags), baseFont(layout.font()), hasNewLine(false), nbImages(0), updateImagePositions(false)
+ : text(t), layout(l), imgTags(&imgTags), baseFont(layout.font()), baseUrl(baseUrl), hasNewLine(false), nbImages(0), updateImagePositions(false)
, preFormat(false), prependSpace(false), hasSpace(true), preloadImages(preloadImages), context(context)
{
}
@@ -117,6 +118,7 @@ public:
QList<QDeclarativeStyledTextImgTag*> *imgTags;
QFont baseFont;
QStack<List> listStack;
+ QUrl baseUrl;
bool hasNewLine;
int nbImages;
bool updateImagePositions;
@@ -155,9 +157,11 @@ const QChar QDeclarativeStyledTextPrivate::lineFeed(QLatin1Char('\n'));
const QChar QDeclarativeStyledTextPrivate::space(QLatin1Char(' '));
QDeclarativeStyledText::QDeclarativeStyledText(const QString &string, QTextLayout &layout,
- QList<QDeclarativeStyledTextImgTag*> &imgTags, QDeclarativeContext *context,
+ QList<QDeclarativeStyledTextImgTag*> &imgTags,
+ const QUrl &baseUrl,
+ QDeclarativeContext *context,
bool preloadImages)
- : d(new QDeclarativeStyledTextPrivate(string, layout, imgTags, context, preloadImages))
+ : d(new QDeclarativeStyledTextPrivate(string, layout, imgTags, baseUrl, context, preloadImages))
{
}
@@ -167,12 +171,14 @@ QDeclarativeStyledText::~QDeclarativeStyledText()
}
void QDeclarativeStyledText::parse(const QString &string, QTextLayout &layout,
- QList<QDeclarativeStyledTextImgTag*> &imgTags, QDeclarativeContext *context,
+ QList<QDeclarativeStyledTextImgTag*> &imgTags,
+ const QUrl &baseUrl,
+ QDeclarativeContext *context,
bool preloadImages)
{
if (string.isEmpty())
return;
- QDeclarativeStyledText styledText(string, layout, imgTags, context, preloadImages);
+ QDeclarativeStyledText styledText(string, layout, imgTags, baseUrl, context, preloadImages);
styledText.d->parse();
}
@@ -657,7 +663,7 @@ void QDeclarativeStyledTextPrivate::parseImageAttributes(const QChar *&ch, const
// if we don't know its size but the image is a local image,
// we load it in the pixmap cache and save its implicit size
// to avoid a relayout later on.
- QUrl url = context->resolvedUrl(image->url);
+ QUrl url = baseUrl.resolved(image->url);
if (url.isLocalFile()) {
QDeclarativePixmap *pix = new QDeclarativePixmap(context->engine(), url, image->size);
if (pix && pix->isReady()) {
diff --git a/src/quick/util/qdeclarativestyledtext_p.h b/src/quick/util/qdeclarativestyledtext_p.h
index 1c9086e7d1..aa6ae3f869 100644
--- a/src/quick/util/qdeclarativestyledtext_p.h
+++ b/src/quick/util/qdeclarativestyledtext_p.h
@@ -83,12 +83,14 @@ class Q_AUTOTEST_EXPORT QDeclarativeStyledText
public:
static void parse(const QString &string, QTextLayout &layout,
QList<QDeclarativeStyledTextImgTag*> &imgTags,
+ const QUrl &baseUrl,
QDeclarativeContext *context,
bool preloadImages);
private:
QDeclarativeStyledText(const QString &string, QTextLayout &layout,
QList<QDeclarativeStyledTextImgTag*> &imgTags,
+ const QUrl &baseUrl,
QDeclarativeContext *context,
bool preloadImages);
~QDeclarativeStyledText();