diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-12 09:27:39 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-12 09:27:39 +0200 |
commit | 3749d61e1f7a59f5ec5067e560af1eb610c82015 (patch) | |
tree | 73dc228333948738bbe02976cacca8cd382bc978 /Source/WebCore/html/HTMLProgressElement.cpp | |
parent | b32b4dcd9a51ab8de6afc53d9e17f8707e1f7a5e (diff) | |
download | qtwebkit-3749d61e1f7a59f5ec5067e560af1eb610c82015.tar.gz |
Imported WebKit commit a77350243e054f3460d1137301d8b3faee3d2052 (http://svn.webkit.org/repository/webkit/trunk@125365)
New snapshot with build fixes for latest API changes in Qt and all WK1 Win MSVC fixes upstream
Diffstat (limited to 'Source/WebCore/html/HTMLProgressElement.cpp')
-rw-r--r-- | Source/WebCore/html/HTMLProgressElement.cpp | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/Source/WebCore/html/HTMLProgressElement.cpp b/Source/WebCore/html/HTMLProgressElement.cpp index 742b09ffa..48b5b886e 100644 --- a/Source/WebCore/html/HTMLProgressElement.cpp +++ b/Source/WebCore/html/HTMLProgressElement.cpp @@ -43,6 +43,7 @@ const double HTMLProgressElement::InvalidPosition = -2; HTMLProgressElement::HTMLProgressElement(const QualifiedName& tagName, Document* document) : LabelableElement(tagName, document) + , m_hasAuthorShadowRoot(false) { ASSERT(hasTagName(progressTag)); } @@ -58,8 +59,11 @@ PassRefPtr<HTMLProgressElement> HTMLProgressElement::create(const QualifiedName& return progress; } -RenderObject* HTMLProgressElement::createRenderer(RenderArena* arena, RenderStyle*) +RenderObject* HTMLProgressElement::createRenderer(RenderArena* arena, RenderStyle* style) { + if (!style->hasAppearance() || hasAuthorShadowRoot()) + return RenderObject::createObject(this, style); + return new (arena) RenderProgress(this); } @@ -68,6 +72,21 @@ bool HTMLProgressElement::childShouldCreateRenderer(const NodeRenderingContext& return childContext.isOnUpperEncapsulationBoundary() && HTMLElement::childShouldCreateRenderer(childContext); } +RenderProgress* HTMLProgressElement::renderProgress() const +{ + if (renderer() && renderer()->isProgress()) + return static_cast<RenderProgress*>(renderer()); + + RenderObject* renderObject = userAgentShadowRoot()->firstChild()->renderer(); + ASSERT(!renderObject || renderObject->isProgress()); + return static_cast<RenderProgress*>(renderObject); +} + +void HTMLProgressElement::willAddAuthorShadowRoot() +{ + m_hasAuthorShadowRoot = true; +} + bool HTMLProgressElement::supportsFocus() const { return Node::supportsFocus() && !disabled(); @@ -134,10 +153,9 @@ bool HTMLProgressElement::isDeterminate() const void HTMLProgressElement::didElementStateChange() { m_value->setWidthPercentage(position() * 100); - if (renderer() && renderer()->isProgress()) { - RenderProgress* render = toRenderProgress(renderer()); + if (RenderProgress* render = renderProgress()) { bool wasDeterminate = render->isDeterminate(); - renderer()->updateFromElement(); + render->updateFromElement(); if (wasDeterminate != isDeterminate()) setNeedsStyleRecalc(); } @@ -145,14 +163,18 @@ void HTMLProgressElement::didElementStateChange() void HTMLProgressElement::createShadowSubtree() { - ASSERT(!shadow()); + ASSERT(!userAgentShadowRoot()); + + RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION); + + RefPtr<ProgressInnerElement> inner = ProgressInnerElement::create(document()); + root->appendChild(inner); RefPtr<ProgressBarElement> bar = ProgressBarElement::create(document()); m_value = ProgressValueElement::create(document()); bar->appendChild(m_value, ASSERT_NO_EXCEPTION); - RefPtr<ShadowRoot> root = ShadowRoot::create(this, ShadowRoot::UserAgentShadowRoot, ASSERT_NO_EXCEPTION); - root->appendChild(bar, ASSERT_NO_EXCEPTION); + inner->appendChild(bar, ASSERT_NO_EXCEPTION); } } // namespace |