Bug 660238 (2/3) - Add pseudo-class to access optimal, sub-optimal and sub-sub-optimal meter elements. f=mounir r=smaug

This commit is contained in:
Laurent Dulary 2012-05-16 13:23:31 +02:00
Родитель fabf8faf61
Коммит 4f4090f3e7
3 изменённых файлов: 77 добавлений и 0 удалений

Просмотреть файл

@ -236,6 +236,12 @@ private:
#define NS_EVENT_STATE_FULL_SCREEN_ANCESTOR NS_DEFINE_EVENT_STATE_MACRO(35)
// Handler for click to play plugin
#define NS_EVENT_STATE_TYPE_CLICK_TO_PLAY NS_DEFINE_EVENT_STATE_MACRO(36)
// Content is in the optimum region.
#define NS_EVENT_STATE_OPTIMUM NS_DEFINE_EVENT_STATE_MACRO(37)
// Content is in the suboptimal region.
#define NS_EVENT_STATE_SUB_OPTIMUM NS_DEFINE_EVENT_STATE_MACRO(38)
// Content is in the sub-suboptimal region.
#define NS_EVENT_STATE_SUB_SUB_OPTIMUM NS_DEFINE_EVENT_STATE_MACRO(39)
/**
* NOTE: do not go over 63 without updating nsEventStates::InternalType!

Просмотреть файл

@ -72,6 +72,8 @@ public:
NS_IMETHOD Reset();
NS_IMETHOD SubmitNamesValues(nsFormSubmission* aFormSubmission);
virtual nsEventStates IntrinsicState() const;
nsresult Clone(nsINodeInfo* aNodeInfo, nsINode** aResult) const;
bool ParseAttribute(PRInt32 aNamespaceID, nsIAtom* aAttribute,
@ -87,6 +89,16 @@ private:
static const double kDefaultMin;
static const double kDefaultMax;
/**
* Returns the optimum state of the element.
* NS_EVENT_STATE_OPTIMUM if the actual value is in the optimum region.
* NS_EVENT_STATE_SUB_OPTIMUM if the actual value is in the sub-optimal region.
* NS_EVENT_STATE_SUB_SUB_OPTIMUM if the actual value is in the sub-sub-optimal region.
*
* @return the optimum state of the element.
*/
nsEventStates GetOptimumState() const;
/* @return the minimum value */
double GetMin() const;
@ -151,6 +163,16 @@ nsHTMLMeterElement::SubmitNamesValues(nsFormSubmission* aFormSubmission)
return NS_OK;
}
nsEventStates
nsHTMLMeterElement::IntrinsicState() const
{
nsEventStates state = nsGenericHTMLFormElement::IntrinsicState();
state |= GetOptimumState();
return state;
}
bool
nsHTMLMeterElement::ParseAttribute(PRInt32 aNamespaceID, nsIAtom* aAttribute,
const nsAString& aValue, nsAttrValue& aResult)
@ -413,3 +435,46 @@ nsHTMLMeterElement::SetOptimum(double aValue)
return SetDoubleAttr(nsGkAtoms::optimum, aValue);
}
nsEventStates
nsHTMLMeterElement::GetOptimumState() const
{
/*
* If the optimum value is in [minimum, low[,
* return if the value is in optimal, suboptimal or sub-suboptimal region
*
* If the optimum value is in [low, high],
* return if the value is in optimal or suboptimal region
*
* If the optimum value is in ]high, maximum],
* return if the value is in optimal, suboptimal or sub-suboptimal region
*/
double value = GetValue();
double low = GetLow();
double high = GetHigh();
double optimum = GetOptimum();
if (optimum < low) {
if (value < low) {
return NS_EVENT_STATE_OPTIMUM;
}
if (value <= high) {
return NS_EVENT_STATE_SUB_OPTIMUM;
}
return NS_EVENT_STATE_SUB_SUB_OPTIMUM;
}
if (optimum > high) {
if (value > high) {
return NS_EVENT_STATE_OPTIMUM;
}
if (value >= low) {
return NS_EVENT_STATE_SUB_OPTIMUM;
}
return NS_EVENT_STATE_SUB_SUB_OPTIMUM;
}
// optimum in [low, high]
if (value >= low && value <= high) {
return NS_EVENT_STATE_OPTIMUM;
}
return NS_EVENT_STATE_SUB_OPTIMUM;
}

Просмотреть файл

@ -161,6 +161,12 @@ CSS_STATE_PSEUDO_CLASS(mozUIInvalid, ":-moz-ui-invalid",
NS_EVENT_STATE_MOZ_UI_INVALID)
CSS_STATE_PSEUDO_CLASS(mozUIValid, ":-moz-ui-valid",
NS_EVENT_STATE_MOZ_UI_VALID)
CSS_STATE_PSEUDO_CLASS(mozMeterOptimum, ":-moz-meter-optimum",
NS_EVENT_STATE_OPTIMUM)
CSS_STATE_PSEUDO_CLASS(mozMeterSubOptimum, ":-moz-meter-sub-optimum",
NS_EVENT_STATE_SUB_OPTIMUM)
CSS_STATE_PSEUDO_CLASS(mozMeterSubSubOptimum, ":-moz-meter-sub-sub-optimum",
NS_EVENT_STATE_SUB_SUB_OPTIMUM)
#ifdef DEFINED_CSS_STATE_PSEUDO_CLASS
#undef DEFINED_CSS_STATE_PSEUDO_CLASS