summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html/HTMLMeterElement.cpp
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-06-02 12:07:03 +0100
committerBen Murdoch <benm@google.com>2011-06-10 10:47:21 +0100
commit2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch)
treee4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebCore/html/HTMLMeterElement.cpp
parent87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff)
downloadexternal_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.cpp45
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