Skip to content

Commit

Permalink
style: Add Gecko-only support for writing-mode:sideways-{lr,rl}.
Browse files Browse the repository at this point in the history
Fixes #15213.
  • Loading branch information
heycam committed Apr 17, 2017
1 parent 10f2d3c commit b73916a
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 10 deletions.
13 changes: 10 additions & 3 deletions components/style/logical_geometry.rs
Expand Up @@ -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,
}
);

Expand All @@ -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]
Expand Down Expand Up @@ -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"));
}
Expand Down
1 change: 1 addition & 0 deletions components/style/properties/longhand/inherited_box.mako.rs
Expand Up @@ -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",
Expand Down
31 changes: 24 additions & 7 deletions components/style/properties/properties.mako.rs
Expand Up @@ -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_LR);
},
}
% if product == "gecko":
match inheritedbox_style.clone_text_orientation() {
computed_values::text_orientation::T::mixed => {},
computed_values::text_orientation::T::upright => {
flags.insert(logical_geometry::FLAG_UPRIGHT);
% if product == "gecko":
computed_values::writing_mode::T::sideways_rl => {
flags.insert(logical_geometry::FLAG_VERTICAL);
flags.insert(logical_geometry::FLAG_SIDEWAYS);
},
computed_values::text_orientation::T::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
flags
Expand Down

0 comments on commit b73916a

Please sign in to comment.