mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 772321 - Implement CSS parsing of writing-mode r=dbaron
This commit is contained in:
parent
25c63a5905
commit
76072f4667
@ -364,6 +364,11 @@ static inline mozilla::css::Side operator++(mozilla::css::Side& side, int) {
|
||||
#define NS_STYLE_DIRECTION_RTL 1
|
||||
#define NS_STYLE_DIRECTION_INHERIT 2
|
||||
|
||||
// See nsStyleVisibility
|
||||
#define NS_STYLE_WRITING_MODE_HORIZONTAL_TB 0
|
||||
#define NS_STYLE_WRITING_MODE_VERTICAL_LR 1
|
||||
#define NS_STYLE_WRITING_MODE_VERTICAL_RL 2
|
||||
|
||||
// See nsStyleDisplay
|
||||
#define NS_STYLE_DISPLAY_NONE 0
|
||||
#define NS_STYLE_DISPLAY_BLOCK 1
|
||||
|
@ -284,6 +284,7 @@ CSS_KEY(hiragana-iroha, hiragana_iroha)
|
||||
CSS_KEY(historical-forms, historical_forms)
|
||||
CSS_KEY(historical-ligatures, historical_ligatures)
|
||||
CSS_KEY(horizontal, horizontal)
|
||||
CSS_KEY(horizontal-tb, horizontal_tb)
|
||||
CSS_KEY(hz, hz)
|
||||
CSS_KEY(icon, icon)
|
||||
CSS_KEY(ignore, ignore)
|
||||
@ -506,6 +507,8 @@ CSS_KEY(upper-latin, upper_latin)
|
||||
CSS_KEY(upper-roman, upper_roman)
|
||||
CSS_KEY(uppercase, uppercase)
|
||||
CSS_KEY(vertical, vertical)
|
||||
CSS_KEY(vertical-lr, vertical_lr)
|
||||
CSS_KEY(vertical-rl, vertical_rl)
|
||||
CSS_KEY(vertical-text, vertical_text)
|
||||
CSS_KEY(visible, visible)
|
||||
CSS_KEY(visiblefill, visiblefill)
|
||||
|
@ -2621,6 +2621,16 @@ CSS_PROP_VISIBILITY(
|
||||
kPointerEventsKTable,
|
||||
offsetof(nsStyleVisibility, mPointerEvents),
|
||||
eStyleAnimType_EnumU8)
|
||||
CSS_PROP_VISIBILITY(
|
||||
writing-mode,
|
||||
writing_mode,
|
||||
WritingMode,
|
||||
CSS_PROPERTY_PARSE_VALUE,
|
||||
"layout.css.vertical-text.enabled",
|
||||
VARIANT_HK,
|
||||
kWritingModeKTable,
|
||||
offsetof(nsStyleVisibility, mWritingMode),
|
||||
eStyleAnimType_EnumU8)
|
||||
CSS_PROP_DISPLAY(
|
||||
position,
|
||||
position,
|
||||
|
@ -1570,6 +1570,13 @@ const int32_t nsCSSProps::kWordWrapKTable[] = {
|
||||
eCSSKeyword_UNKNOWN,-1
|
||||
};
|
||||
|
||||
const int32_t nsCSSProps::kWritingModeKTable[] = {
|
||||
eCSSKeyword_horizontal_tb, NS_STYLE_WRITING_MODE_HORIZONTAL_TB,
|
||||
eCSSKeyword_vertical_lr, NS_STYLE_WRITING_MODE_VERTICAL_LR,
|
||||
eCSSKeyword_vertical_rl, NS_STYLE_WRITING_MODE_VERTICAL_RL,
|
||||
eCSSKeyword_UNKNOWN, -1
|
||||
};
|
||||
|
||||
const int32_t nsCSSProps::kHyphensKTable[] = {
|
||||
eCSSKeyword_none, NS_STYLE_HYPHENS_NONE,
|
||||
eCSSKeyword_manual, NS_STYLE_HYPHENS_MANUAL,
|
||||
|
@ -465,6 +465,7 @@ public:
|
||||
static const int32_t kWindowShadowKTable[];
|
||||
static const int32_t kWordBreakKTable[];
|
||||
static const int32_t kWordWrapKTable[];
|
||||
static const int32_t kWritingModeKTable[];
|
||||
static const int32_t kHyphensKTable[];
|
||||
};
|
||||
|
||||
|
@ -2938,6 +2938,16 @@ nsComputedDOMStyle::DoGetVisibility()
|
||||
return val;
|
||||
}
|
||||
|
||||
CSSValue*
|
||||
nsComputedDOMStyle::DoGetWritingMode()
|
||||
{
|
||||
nsROCSSPrimitiveValue* val = new nsROCSSPrimitiveValue;
|
||||
val->SetIdent(
|
||||
nsCSSProps::ValueToKeywordEnum(StyleVisibility()->mWritingMode,
|
||||
nsCSSProps::kWritingModeKTable));
|
||||
return val;
|
||||
}
|
||||
|
||||
CSSValue*
|
||||
nsComputedDOMStyle::DoGetDirection()
|
||||
{
|
||||
@ -5000,6 +5010,7 @@ nsComputedDOMStyle::GetQueryablePropertyMap(uint32_t* aLength)
|
||||
COMPUTED_STYLE_MAP_ENTRY(word_break, WordBreak),
|
||||
COMPUTED_STYLE_MAP_ENTRY(word_spacing, WordSpacing),
|
||||
COMPUTED_STYLE_MAP_ENTRY(word_wrap, WordWrap),
|
||||
COMPUTED_STYLE_MAP_ENTRY(writing_mode, WritingMode),
|
||||
COMPUTED_STYLE_MAP_ENTRY(z_index, ZIndex),
|
||||
|
||||
/* ******************************* *\
|
||||
|
@ -327,6 +327,7 @@ private:
|
||||
mozilla::dom::CSSValue* DoGetOpacity();
|
||||
mozilla::dom::CSSValue* DoGetPointerEvents();
|
||||
mozilla::dom::CSSValue* DoGetVisibility();
|
||||
mozilla::dom::CSSValue* DoGetWritingMode();
|
||||
|
||||
/* Direction properties */
|
||||
mozilla::dom::CSSValue* DoGetDirection();
|
||||
|
@ -5243,6 +5243,12 @@ nsRuleNode::ComputeVisibilityData(void* aStartStruct,
|
||||
SETDSC_ENUMERATED, parentVisibility->mPointerEvents,
|
||||
NS_STYLE_POINTER_EVENTS_AUTO, 0, 0, 0, 0);
|
||||
|
||||
// writing-mode: enum, inherit, initial
|
||||
SetDiscrete(*aRuleData->ValueForWritingMode(), visibility->mWritingMode,
|
||||
canStoreInRuleTree, SETDSC_ENUMERATED,
|
||||
parentVisibility->mWritingMode,
|
||||
NS_STYLE_WRITING_MODE_HORIZONTAL_TB, 0, 0, 0, 0);
|
||||
|
||||
COMPUTE_END_INHERITED(Visibility, visibility)
|
||||
}
|
||||
|
||||
|
@ -2305,6 +2305,7 @@ nsStyleVisibility::nsStyleVisibility(nsPresContext* aPresContext)
|
||||
|
||||
mVisible = NS_STYLE_VISIBILITY_VISIBLE;
|
||||
mPointerEvents = NS_STYLE_POINTER_EVENTS_AUTO;
|
||||
mWritingMode = NS_STYLE_WRITING_MODE_HORIZONTAL_TB;
|
||||
}
|
||||
|
||||
nsStyleVisibility::nsStyleVisibility(const nsStyleVisibility& aSource)
|
||||
@ -2313,13 +2314,14 @@ nsStyleVisibility::nsStyleVisibility(const nsStyleVisibility& aSource)
|
||||
mDirection = aSource.mDirection;
|
||||
mVisible = aSource.mVisible;
|
||||
mPointerEvents = aSource.mPointerEvents;
|
||||
mWritingMode = aSource.mWritingMode;
|
||||
}
|
||||
|
||||
nsChangeHint nsStyleVisibility::CalcDifference(const nsStyleVisibility& aOther) const
|
||||
{
|
||||
nsChangeHint hint = nsChangeHint(0);
|
||||
|
||||
if (mDirection != aOther.mDirection) {
|
||||
if (mDirection != aOther.mDirection || mWritingMode != aOther.mWritingMode) {
|
||||
NS_UpdateHint(hint, nsChangeHint_ReconstructFrame);
|
||||
} else {
|
||||
if (mVisible != aOther.mVisible) {
|
||||
|
@ -1370,6 +1370,7 @@ struct nsStyleVisibility {
|
||||
uint8_t mDirection; // [inherited] see nsStyleConsts.h NS_STYLE_DIRECTION_*
|
||||
uint8_t mVisible; // [inherited]
|
||||
uint8_t mPointerEvents; // [inherited] see nsStyleConsts.h
|
||||
uint8_t mWritingMode; // [inherited] see nsStyleConsts.h
|
||||
|
||||
bool IsVisible() const {
|
||||
return (mVisible == NS_STYLE_VISIBILITY_VISIBLE);
|
||||
|
@ -4257,6 +4257,22 @@ if (SpecialPowers.getBoolPref("layout.css.flexbox.enabled")) {
|
||||
gCSSProperties["display"].other_values.push("inline-flex");
|
||||
}
|
||||
|
||||
if (SpecialPowers.getBoolPref("layout.css.vertical-text.enabled")) {
|
||||
var verticalTextProperties = {
|
||||
"writing-mode": {
|
||||
domProp: "writingMode",
|
||||
inherited: true,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "horizontal-tb" ],
|
||||
other_values: [ "vertical-lr", "vertical-rl" ],
|
||||
invalid_values: [ "10px", "30%", "justify", "auto", "1em" ]
|
||||
}
|
||||
};
|
||||
for (var prop in verticalTextProperties) {
|
||||
gCSSProperties[prop] = verticalTextProperties[prop];
|
||||
}
|
||||
}
|
||||
|
||||
if (SpecialPowers.getBoolPref("layout.css.font-features.enabled")) {
|
||||
var fontFeatureProperties = {
|
||||
"font-kerning": {
|
||||
|
@ -1772,6 +1772,9 @@ pref("layout.css.scope-pseudo.enabled", false);
|
||||
pref("layout.css.scope-pseudo.enabled", true);
|
||||
#endif
|
||||
|
||||
// Is support for CSS vertical text enabled?
|
||||
pref("layout.css.vertical-text.enabled", false);
|
||||
|
||||
// pref for which side vertical scrollbars should be on
|
||||
// 0 = end-side in UI direction
|
||||
// 1 = end-side in document/content direction
|
||||
|
Loading…
Reference in New Issue
Block a user