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_VERTICAL = 1 << 1,
|
||||
const FLAG_VERTICAL_LR = 1 << 2,
|
||||
const FLAG_SIDEWAYS = 1 << 3,
|
||||
const FLAG_UPRIGHT = 1 << 4,
|
||||
/// For vertical writing modes only. When set, line-over/line-under
|
||||
/// 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]
|
||||
pub fn is_inline_tb(&self) -> bool {
|
||||
// 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]
|
||||
|
@ -145,6 +149,9 @@ impl fmt::Display for WritingMode {
|
|||
if self.intersects(FLAG_SIDEWAYS) {
|
||||
try!(write!(formatter, " Sideways"));
|
||||
}
|
||||
if self.intersects(FLAG_LINE_INVERTED) {
|
||||
try!(write!(formatter, " Inverted"));
|
||||
}
|
||||
} else {
|
||||
try!(write!(formatter, "H"));
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ ${helpers.single_keyword("visibility",
|
|||
// https://drafts.csswg.org/css-writing-modes-3
|
||||
${helpers.single_keyword("writing-mode",
|
||||
"horizontal-tb vertical-rl vertical-lr",
|
||||
extra_gecko_values="sideways-rl sideways-lr",
|
||||
experimental=True,
|
||||
need_clone=True,
|
||||
animation_type="none",
|
||||
|
|
|
@ -1936,8 +1936,24 @@ pub fn get_writing_mode(inheritedbox_style: &style_structs::InheritedBox) -> Wri
|
|||
flags.insert(logical_geometry::FLAG_VERTICAL);
|
||||
flags.insert(logical_geometry::FLAG_VERTICAL_LR);
|
||||
},
|
||||
% if product == "gecko":
|
||||
computed_values::writing_mode::T::sideways_rl => {
|
||||
flags.insert(logical_geometry::FLAG_VERTICAL);
|
||||
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 => {
|
||||
|
@ -1947,6 +1963,7 @@ pub fn get_writing_mode(inheritedbox_style: &style_structs::InheritedBox) -> Wri
|
|||
flags.insert(logical_geometry::FLAG_SIDEWAYS);
|
||||
},
|
||||
}
|
||||
}
|
||||
% endif
|
||||
flags
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue