DeprecatedSlider.cpp [plain text]
#include "config.h"
#include "DeprecatedSlider.h"
#include "EventNames.h"
#include "HTMLNames.h"
#include "HTMLInputElement.h"
#include "Slider.h"
using std::min;
namespace WebCore {
using namespace EventNames;
using namespace HTMLNames;
DeprecatedSlider::DeprecatedSlider(HTMLInputElement* element)
: RenderFormElement(element)
{
setWidget(new Slider);
}
void DeprecatedSlider::calcMinMaxWidth()
{
ASSERT(!minMaxKnown());
IntSize s(widget()->sizeHint());
bool widthSet = !style()->width().isAuto();
bool heightSet = !style()->height().isAuto();
if (heightSet && !widthSet) {
int barLength = s.width();
s = IntSize(s.height(), barLength);
}
setIntrinsicWidth(s.width());
setIntrinsicHeight(s.height());
RenderFormElement::calcMinMaxWidth();
}
void DeprecatedSlider::updateFromElement()
{
String value = static_cast<HTMLInputElement*>(node())->value();
const AtomicString& minStr = static_cast<HTMLInputElement*>(node())->getAttribute(minAttr);
const AtomicString& maxStr = static_cast<HTMLInputElement*>(node())->getAttribute(maxAttr);
const AtomicString& precision = static_cast<HTMLInputElement*>(node())->getAttribute(precisionAttr);
double minVal = minStr.isNull() ? 0.0 : minStr.deprecatedString().toDouble();
double maxVal = maxStr.isNull() ? 100.0 : maxStr.deprecatedString().toDouble();
minVal = min(minVal, maxVal);
double val = value.isNull() ? (maxVal + minVal)/2.0 : value.deprecatedString().toDouble();
val = max(minVal, min(val, maxVal));
if (!equalIgnoringCase(precision, "float"))
val = (int)(val + 0.5);
static_cast<HTMLInputElement*>(node())->setValue(String::number(val));
Slider* slider = static_cast<Slider*>(widget());
slider->setMinValue(minVal);
slider->setMaxValue(maxVal);
slider->setValue(val);
RenderFormElement::updateFromElement();
}
void DeprecatedSlider::valueChanged(Widget*)
{
Slider* slider = static_cast<Slider*>(widget());
double val = slider->value();
const AtomicString& precision = static_cast<HTMLInputElement*>(node())->getAttribute(precisionAttr);
if (!equalIgnoringCase(precision, "float"))
val = (int)(val + 0.5);
static_cast<HTMLInputElement*>(node())->setValue(String::number(val));
static_cast<HTMLInputElement*>(node())->dispatchHTMLEvent(inputEvent, true, false);
}
}