mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
style: Add Gecko-only support for writing-mode:sideways-{lr,rl}.
Fixes #15213.
This commit is contained in:
parent
10f2d3c38e
commit
b73916a135
3 changed files with 36 additions and 11 deletions
|
@ -29,8 +29,12 @@ bitflags!(
|
||||||
const FLAG_RTL = 1 << 0,
|
const FLAG_RTL = 1 << 0,
|
||||||
const FLAG_VERTICAL = 1 << 1,
|
const FLAG_VERTICAL = 1 << 1,
|
||||||
const FLAG_VERTICAL_LR = 1 << 2,
|
const FLAG_VERTICAL_LR = 1 << 2,
|
||||||
const FLAG_SIDEWAYS = 1 << 3,
|
/// For vertical writing modes only. When set, line-over/line-under
|
||||||
const FLAG_UPRIGHT = 1 << 4,
|
/// sides are inverted from block-start/block-end. This flag is
|
||||||
|
/// set when sideways-lr is used.
|
||||||
|
const FLAG_LINE_INVERTED = 1 << 3,
|
||||||
|
const FLAG_SIDEWAYS = 1 << 4,
|
||||||
|
const FLAG_UPRIGHT = 1 << 5,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -50,7 +54,7 @@ impl WritingMode {
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn is_inline_tb(&self) -> bool {
|
pub fn is_inline_tb(&self) -> bool {
|
||||||
// https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical
|
// https://drafts.csswg.org/css-writing-modes-3/#logical-to-physical
|
||||||
!self.intersects(FLAG_RTL)
|
self.intersects(FLAG_RTL) == self.intersects(FLAG_LINE_INVERTED)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -145,6 +149,9 @@ impl fmt::Display for WritingMode {
|
||||||
if self.intersects(FLAG_SIDEWAYS) {
|
if self.intersects(FLAG_SIDEWAYS) {
|
||||||
try!(write!(formatter, " Sideways"));
|
try!(write!(formatter, " Sideways"));
|
||||||
}
|
}
|
||||||
|
if self.intersects(FLAG_LINE_INVERTED) {
|
||||||
|
try!(write!(formatter, " Inverted"));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
try!(write!(formatter, "H"));
|
try!(write!(formatter, "H"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ ${helpers.single_keyword("visibility",
|
||||||
// https://drafts.csswg.org/css-writing-modes-3
|
// https://drafts.csswg.org/css-writing-modes-3
|
||||||
${helpers.single_keyword("writing-mode",
|
${helpers.single_keyword("writing-mode",
|
||||||
"horizontal-tb vertical-rl vertical-lr",
|
"horizontal-tb vertical-rl vertical-lr",
|
||||||
|
extra_gecko_values="sideways-rl sideways-lr",
|
||||||
experimental=True,
|
experimental=True,
|
||||||
need_clone=True,
|
need_clone=True,
|
||||||
animation_type="none",
|
animation_type="none",
|
||||||
|
|
|
@ -1936,16 +1936,33 @@ pub fn get_writing_mode(inheritedbox_style: &style_structs::InheritedBox) -> Wri
|
||||||
flags.insert(logical_geometry::FLAG_VERTICAL);
|
flags.insert(logical_geometry::FLAG_VERTICAL);
|
||||||
flags.insert(logical_geometry::FLAG_VERTICAL_LR);
|
flags.insert(logical_geometry::FLAG_VERTICAL_LR);
|
||||||
},
|
},
|
||||||
}
|
% if product == "gecko":
|
||||||
% if product == "gecko":
|
computed_values::writing_mode::T::sideways_rl => {
|
||||||
match inheritedbox_style.clone_text_orientation() {
|
flags.insert(logical_geometry::FLAG_VERTICAL);
|
||||||
computed_values::text_orientation::T::mixed => {},
|
|
||||||
computed_values::text_orientation::T::upright => {
|
|
||||||
flags.insert(logical_geometry::FLAG_UPRIGHT);
|
|
||||||
},
|
|
||||||
computed_values::text_orientation::T::sideways => {
|
|
||||||
flags.insert(logical_geometry::FLAG_SIDEWAYS);
|
flags.insert(logical_geometry::FLAG_SIDEWAYS);
|
||||||
},
|
},
|
||||||
|
computed_values::writing_mode::T::sideways_lr => {
|
||||||
|
flags.insert(logical_geometry::FLAG_VERTICAL);
|
||||||
|
flags.insert(logical_geometry::FLAG_VERTICAL_LR);
|
||||||
|
flags.insert(logical_geometry::FLAG_LINE_INVERTED);
|
||||||
|
flags.insert(logical_geometry::FLAG_SIDEWAYS);
|
||||||
|
},
|
||||||
|
% endif
|
||||||
|
}
|
||||||
|
% if product == "gecko":
|
||||||
|
// If FLAG_SIDEWAYS is already set, this means writing-mode is either
|
||||||
|
// sideways-rl or sideways-lr, and for both of these values,
|
||||||
|
// text-orientation has no effect.
|
||||||
|
if !flags.intersects(logical_geometry::FLAG_SIDEWAYS) {
|
||||||
|
match inheritedbox_style.clone_text_orientation() {
|
||||||
|
computed_values::text_orientation::T::mixed => {},
|
||||||
|
computed_values::text_orientation::T::upright => {
|
||||||
|
flags.insert(logical_geometry::FLAG_UPRIGHT);
|
||||||
|
},
|
||||||
|
computed_values::text_orientation::T::sideways => {
|
||||||
|
flags.insert(logical_geometry::FLAG_SIDEWAYS);
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
% endif
|
% endif
|
||||||
flags
|
flags
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue