Bug 1333482 part 1 - [css-ui] Introduce the 'appearance: auto | none' property. r=dholbert

MozReview-Commit-ID: 3itCDTKuYQ9
This commit is contained in:
Mats Palmgren 2017-03-23 23:13:17 +01:00 committed by Bobby Holley
parent c70b558679
commit eeffa0c3eb
10 changed files with 64 additions and 10 deletions

View File

@ -14,6 +14,9 @@
// A checkbox element.
#define NS_THEME_CHECKBOX 3
// appearance:auto (only used in the style system, not in layout)
#define NS_THEME_AUTO 4
// A rectangular button that contains complex content
// like images (e.g. HTML <button> elements)
#define NS_THEME_BUTTON_BEVEL 7

View File

@ -463,7 +463,17 @@ CSS_PROP_DISPLAY(
CSS_PROP_DISPLAY(
-moz-appearance,
_moz_appearance,
CSS_PROP_DOMPROP_PREFIXED(Appearance),
MozAppearance,
CSS_PROPERTY_PARSE_VALUE,
"",
VARIANT_HK,
kMozAppearanceKTable,
CSS_PROP_NO_OFFSET,
eStyleAnimType_Discrete)
CSS_PROP_DISPLAY(
appearance,
appearance,
Appearance,
CSS_PROPERTY_PARSE_VALUE,
"",
VARIANT_HK,

View File

@ -744,6 +744,12 @@ const KTableEntry nsCSSProps::kAnimationPlayStateKTable[] = {
};
const KTableEntry nsCSSProps::kAppearanceKTable[] = {
{ eCSSKeyword_auto, NS_THEME_AUTO },
{ eCSSKeyword_none, NS_THEME_NONE },
{ eCSSKeyword_UNKNOWN, -1 }
};
const KTableEntry nsCSSProps::kMozAppearanceKTable[] = {
{ eCSSKeyword_none, NS_THEME_NONE },
{ eCSSKeyword_button, NS_THEME_BUTTON },
{ eCSSKeyword_radio, NS_THEME_RADIO },

View File

@ -696,6 +696,7 @@ public:
static const KTableEntry kAnimationPlayStateKTable[];
static const KTableEntry kAnimationTimingFunctionKTable[];
static const KTableEntry kAppearanceKTable[];
static const KTableEntry kMozAppearanceKTable[];
static const KTableEntry kAzimuthKTable[];
static const KTableEntry kBackfaceVisibilityKTable[];
static const KTableEntry kTransformStyleKTable[];

View File

@ -4361,6 +4361,14 @@ nsComputedDOMStyle::DoGetAppearance()
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetMozAppearance()
{
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
val->SetIdent(nsCSSProps::ValueToKeywordEnum(StyleDisplay()->mMozAppearance,
nsCSSProps::kMozAppearanceKTable));
return val.forget();
}
already_AddRefed<CSSValue>
nsComputedDOMStyle::DoGetBoxAlign()

View File

@ -237,6 +237,7 @@ private:
*/
already_AddRefed<CSSValue> DoGetAppearance();
already_AddRefed<CSSValue> DoGetMozAppearance();
/* Box properties */
already_AddRefed<CSSValue> DoGetBoxAlign();

View File

@ -39,7 +39,7 @@
* Implementations of CSS styles *
\* ***************************** */
COMPUTED_STYLE_PROP(align_content, AlignContent)
COMPUTED_STYLE_PROP(align_content, AlignContent)
COMPUTED_STYLE_PROP(align_items, AlignItems)
COMPUTED_STYLE_PROP(align_self, AlignSelf)
//// COMPUTED_STYLE_PROP(animation, Animation)
@ -51,6 +51,7 @@ COMPUTED_STYLE_PROP(animation_iteration_count, AnimationIterationCount)
COMPUTED_STYLE_PROP(animation_name, AnimationName)
COMPUTED_STYLE_PROP(animation_play_state, AnimationPlayState)
COMPUTED_STYLE_PROP(animation_timing_function, AnimationTimingFunction)
COMPUTED_STYLE_PROP(appearance, Appearance)
COMPUTED_STYLE_PROP(backface_visibility, BackfaceVisibility)
//// COMPUTED_STYLE_PROP(background, Background)
COMPUTED_STYLE_PROP(background_attachment, BackgroundAttachment)
@ -274,7 +275,7 @@ COMPUTED_STYLE_PROP(z_index, ZIndex)
* Implementations of -moz- styles *
\* ******************************* */
COMPUTED_STYLE_PROP(_moz_appearance, Appearance)
COMPUTED_STYLE_PROP(_moz_appearance, MozAppearance)
COMPUTED_STYLE_PROP(_moz_binding, Binding)
COMPUTED_STYLE_PROP(_moz_border_bottom_colors, BorderBottomColors)
COMPUTED_STYLE_PROP(_moz_border_left_colors, BorderLeftColors)

View File

@ -6171,12 +6171,19 @@ nsRuleNode::ComputeDisplayData(void* aStartStruct,
// See ReflowInput::CalculateHypotheticalBox
display->mOriginalDisplay = display->mDisplay;
// appearance: enum, inherit, initial
// -moz-appearance: enum, inherit, initial
SetValue(*aRuleData->ValueForMozAppearance(),
display->mMozAppearance, conditions,
SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
parentDisplay->mMozAppearance,
NS_THEME_NONE);
// appearance: auto | none
SetValue(*aRuleData->ValueForAppearance(),
display->mAppearance, conditions,
SETVAL_ENUMERATED | SETVAL_UNSET_INITIAL,
parentDisplay->mAppearance,
NS_THEME_NONE);
NS_THEME_AUTO);
// binding: url, none, inherit
const nsCSSValue* bindingValue = aRuleData->ValueForBinding();

View File

@ -3260,7 +3260,8 @@ nsStyleDisplay::nsStyleDisplay(const nsPresContext* aContext)
: mDisplay(StyleDisplay::Inline)
, mOriginalDisplay(StyleDisplay::Inline)
, mContain(NS_STYLE_CONTAIN_NONE)
, mAppearance(NS_THEME_NONE)
, mMozAppearance(NS_THEME_NONE)
, mAppearance(NS_THEME_AUTO)
, mPosition(NS_STYLE_POSITION_STATIC)
, mFloat(StyleFloat::None)
, mOriginalFloat(StyleFloat::None)
@ -3322,6 +3323,7 @@ nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
, mDisplay(aSource.mDisplay)
, mOriginalDisplay(aSource.mOriginalDisplay)
, mContain(aSource.mContain)
, mMozAppearance(aSource.mMozAppearance)
, mAppearance(aSource.mAppearance)
, mPosition(aSource.mPosition)
, mFloat(aSource.mFloat)
@ -3437,10 +3439,10 @@ nsStyleDisplay::CalcDifference(const nsStyleDisplay& aNewData) const
* if this does become common perhaps a faster-path might be worth while.
*/
if ((mAppearance == NS_THEME_TEXTFIELD &&
aNewData.mAppearance != NS_THEME_TEXTFIELD) ||
(mAppearance != NS_THEME_TEXTFIELD &&
aNewData.mAppearance == NS_THEME_TEXTFIELD)) {
if ((mMozAppearance == NS_THEME_TEXTFIELD &&
aNewData.mMozAppearance != NS_THEME_TEXTFIELD) ||
(mMozAppearance != NS_THEME_TEXTFIELD &&
aNewData.mMozAppearance == NS_THEME_TEXTFIELD)) {
// This is for <input type=number> where we allow authors to specify a
// |-moz-appearance:textfield| to get a control without a spinner. (The
// spinner is present for |-moz-appearance:number-input| but also other
@ -3469,6 +3471,7 @@ nsStyleDisplay::CalcDifference(const nsStyleDisplay& aNewData) const
|| mBreakInside != aNewData.mBreakInside
|| mBreakBefore != aNewData.mBreakBefore
|| mBreakAfter != aNewData.mBreakAfter
|| mMozAppearance != aNewData.mMozAppearance
|| mAppearance != aNewData.mAppearance
|| mOrient != aNewData.mOrient
|| mOverflowClipBox != aNewData.mOverflowClipBox) {

View File

@ -27,6 +27,7 @@
#include "nsStyleAutoArray.h"
#include "nsStyleCoord.h"
#include "nsStyleConsts.h"
#include "nsThemeConstants.h"
#include "nsChangeHint.h"
#include "nsPresContext.h"
#include "nsCOMPtr.h"
@ -2660,7 +2661,20 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleDisplay
// otherwise equal to
// mDisplay
uint8_t mContain; // [reset] see nsStyleConsts.h NS_STYLE_CONTAIN_*
//private: XXX not yet
friend class nsComputedDOMStyle;
friend class nsRuleNode;
uint8_t mMozAppearance; // [reset]
uint8_t mAppearance; // [reset]
public:
MOZ_MUST_USE uint8_t UsedAppearance() const {
if (mAppearance == NS_THEME_NONE) {
return NS_THEME_NONE;
}
MOZ_ASSERT(mAppearance == NS_THEME_AUTO);
return mMozAppearance; // use the -moz-appearance value
}
uint8_t mPosition; // [reset] see nsStyleConsts.h
// [reset] See StyleFloat in nsStyleConsts.h.