diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/html/HTMLMeterElement.cpp | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2 |
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebCore/html/HTMLMeterElement.cpp')
-rw-r--r-- | Source/WebCore/html/HTMLMeterElement.cpp | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/Source/WebCore/html/HTMLMeterElement.cpp b/Source/WebCore/html/HTMLMeterElement.cpp index 2ebf57e..88b1622 100644 --- a/Source/WebCore/html/HTMLMeterElement.cpp +++ b/Source/WebCore/html/HTMLMeterElement.cpp @@ -29,7 +29,9 @@ #include "HTMLFormElement.h" #include "HTMLNames.h" #include "HTMLParserIdioms.h" +#include "MeterShadowElement.h" #include "RenderMeter.h" +#include "ShadowRoot.h" #include <wtf/StdLibExtras.h> namespace WebCore { @@ -42,9 +44,15 @@ HTMLMeterElement::HTMLMeterElement(const QualifiedName& tagName, Document* docum ASSERT(hasTagName(meterTag)); } +HTMLMeterElement::~HTMLMeterElement() +{ +} + PassRefPtr<HTMLMeterElement> HTMLMeterElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form) { - return adoptRef(new HTMLMeterElement(tagName, document, form)); + RefPtr<HTMLMeterElement> meter = adoptRef(new HTMLMeterElement(tagName, document, form)); + meter->createShadowSubtree(); + return meter; } RenderObject* HTMLMeterElement::createRenderer(RenderArena* arena, RenderStyle*) @@ -60,18 +68,16 @@ const AtomicString& HTMLMeterElement::formControlType() const void HTMLMeterElement::parseMappedAttribute(Attribute* attribute) { - if (attribute->name() == valueAttr || attribute->name() == minAttr || attribute->name() == maxAttr || attribute->name() == lowAttr || attribute->name() == highAttr || attribute->name() == optimumAttr) { - if (renderer()) - renderer()->updateFromElement(); - } else + if (attribute->name() == valueAttr || attribute->name() == minAttr || attribute->name() == maxAttr || attribute->name() == lowAttr || attribute->name() == highAttr || attribute->name() == optimumAttr) + didElementStateChange(); + else HTMLFormControlElement::parseMappedAttribute(attribute); } void HTMLMeterElement::attach() { HTMLFormControlElement::attach(); - if (renderer()) - renderer()->updateFromElement(); + didElementStateChange(); } double HTMLMeterElement::min() const @@ -203,5 +209,30 @@ HTMLMeterElement::GaugeRegion HTMLMeterElement::gaugeRegion() const return GaugeRegionSuboptimal; } +double HTMLMeterElement::valueRatio() const +{ + double min = this->min(); + double max = this->max(); + double value = this->value(); + + if (max <= min) + return 0; + return (value - min) / (max - min); +} + +void HTMLMeterElement::didElementStateChange() +{ + m_value->setWidthPercentage(valueRatio()*100); +} + +void HTMLMeterElement::createShadowSubtree() +{ + RefPtr<MeterBarElement> bar = MeterBarElement::create(document()); + m_value = MeterValueElement::create(document()); + ExceptionCode ec = 0; + bar->appendChild(m_value, ec); + ensureShadowRoot()->appendChild(bar, ec); +} + } // namespace #endif |