зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1478330: Generate StyleDisplay using cbindgen. r=heycam
We use the same setup WR uses, which is checking-in the files. But I think it's much better than keeping the two things in sync manually :) When you add a new value, you need to add it to the rust source, then run the command, but since it doesn't need to build the style crate (it uses the Rust AST, doesn't build) there's no problem. Differential Revision: https://phabricator.services.mozilla.com/D2354 MozReview-Commit-ID: DnXkNAzP54H
This commit is contained in:
Родитель
f6e583f8fd
Коммит
42a2ddb5b9
|
@ -0,0 +1,74 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/* Generated with cbindgen:0.6.1 */
|
||||
|
||||
/* DO NOT MODIFY THIS MANUALLY! This file was generated using cbindgen.
|
||||
* To generate this file:
|
||||
* 1. Get the latest cbindgen using `cargo install --force cbindgen`
|
||||
* a. Alternatively, you can clone `https://github.com/eqrion/cbindgen` and use a tagged release
|
||||
* 2. Run `rustup run nightly cbindgen toolkit/library/rust/ --lockfile Cargo.lock --crate style -o layout/style/ServoStyleConsts.h`
|
||||
*/
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
// Defines an element’s display type, which consists of
|
||||
// the two basic qualities of how an element generates boxes
|
||||
// <https://drafts.csswg.org/css-display/#propdef-display>
|
||||
//
|
||||
//
|
||||
// NOTE(emilio): Order is important in Gecko!
|
||||
//
|
||||
// If you change it, make sure to take a look at the
|
||||
// FrameConstructionDataByDisplay stuff (both the XUL and non-XUL version), and
|
||||
// ensure it's still correct!
|
||||
//
|
||||
// Also, when you change this from Gecko you may need to regenerate the
|
||||
// C++-side bindings (see components/style/cbindgen.toml).
|
||||
enum class StyleDisplay : uint8_t {
|
||||
None = 0,
|
||||
Block,
|
||||
FlowRoot,
|
||||
Inline,
|
||||
InlineBlock,
|
||||
ListItem,
|
||||
Table,
|
||||
InlineTable,
|
||||
TableRowGroup,
|
||||
TableColumn,
|
||||
TableColumnGroup,
|
||||
TableHeaderGroup,
|
||||
TableFooterGroup,
|
||||
TableRow,
|
||||
TableCell,
|
||||
TableCaption,
|
||||
Flex,
|
||||
InlineFlex,
|
||||
Grid,
|
||||
InlineGrid,
|
||||
Ruby,
|
||||
RubyBase,
|
||||
RubyBaseContainer,
|
||||
RubyText,
|
||||
RubyTextContainer,
|
||||
Contents,
|
||||
WebkitBox,
|
||||
WebkitInlineBox,
|
||||
MozBox,
|
||||
MozInlineBox,
|
||||
MozGrid,
|
||||
MozInlineGrid,
|
||||
MozGridGroup,
|
||||
MozGridLine,
|
||||
MozStack,
|
||||
MozInlineStack,
|
||||
MozDeck,
|
||||
MozGroupbox,
|
||||
MozPopup,
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
|
@ -83,6 +83,7 @@ EXPORTS.mozilla += [
|
|||
'ServoCSSRuleList.h',
|
||||
'ServoElementSnapshot.h',
|
||||
'ServoElementSnapshotTable.h',
|
||||
'ServoStyleConsts.h',
|
||||
'ServoStyleSet.h',
|
||||
'ServoStyleSetInlines.h',
|
||||
'ServoTraversalStatistics.h',
|
||||
|
|
|
@ -11,9 +11,11 @@
|
|||
|
||||
#include <inttypes.h>
|
||||
|
||||
#include "gfxFontConstants.h"
|
||||
#include "X11UndefineNone.h"
|
||||
|
||||
#include "gfxFontConstants.h"
|
||||
#include "mozilla/ServoStyleConsts.h"
|
||||
|
||||
// XXX fold this into ComputedStyle and group by nsStyleXXX struct
|
||||
|
||||
namespace mozilla {
|
||||
|
@ -442,55 +444,6 @@ enum class StyleContent : uint8_t {
|
|||
(NS_STYLE_WRITING_MODE_VERTICAL_LR | \
|
||||
NS_STYLE_WRITING_MODE_SIDEWAYS_MASK)
|
||||
|
||||
// See nsStyleDisplay
|
||||
//
|
||||
// NOTE: Order is important! If you change it, make sure to take a look at
|
||||
// the FrameConstructionDataByDisplay stuff (both the XUL and non-XUL version),
|
||||
// and ensure it's still correct!
|
||||
enum class StyleDisplay : uint8_t {
|
||||
None = 0,
|
||||
Block,
|
||||
FlowRoot,
|
||||
Inline,
|
||||
InlineBlock,
|
||||
ListItem,
|
||||
Table,
|
||||
InlineTable,
|
||||
TableRowGroup,
|
||||
TableColumn,
|
||||
TableColumnGroup,
|
||||
TableHeaderGroup,
|
||||
TableFooterGroup,
|
||||
TableRow,
|
||||
TableCell,
|
||||
TableCaption,
|
||||
Flex,
|
||||
InlineFlex,
|
||||
Grid,
|
||||
InlineGrid,
|
||||
Ruby,
|
||||
RubyBase,
|
||||
RubyBaseContainer,
|
||||
RubyText,
|
||||
RubyTextContainer,
|
||||
Contents,
|
||||
WebkitBox,
|
||||
WebkitInlineBox,
|
||||
MozBox,
|
||||
MozInlineBox,
|
||||
#ifdef MOZ_XUL
|
||||
MozGrid,
|
||||
MozInlineGrid,
|
||||
MozGridGroup,
|
||||
MozGridLine,
|
||||
MozStack,
|
||||
MozInlineStack,
|
||||
MozDeck,
|
||||
MozGroupbox,
|
||||
MozPopup,
|
||||
#endif
|
||||
};
|
||||
|
||||
// See nsStyleDisplay
|
||||
// If these are re-ordered, nsComputedDOMStyle::DoGetContain() must be updated.
|
||||
#define NS_STYLE_CONTAIN_NONE 0
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
header = """/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */"""
|
||||
autogen_warning = """/* DO NOT MODIFY THIS MANUALLY! This file was generated using cbindgen.
|
||||
* To generate this file:
|
||||
* 1. Get the latest cbindgen using `cargo install --force cbindgen`
|
||||
* a. Alternatively, you can clone `https://github.com/eqrion/cbindgen` and use a tagged release
|
||||
* 2. Run `rustup run nightly cbindgen toolkit/library/rust/ --lockfile Cargo.lock --crate style -o layout/style/ServoStyleConsts.h`
|
||||
*/"""
|
||||
include_version = true
|
||||
braces = "SameLine"
|
||||
line_length = 80
|
||||
tab_width = 2
|
||||
language = "C++"
|
||||
namespaces = ["mozilla"]
|
||||
|
||||
[struct]
|
||||
derive_eq = true
|
||||
|
||||
[enum]
|
||||
derive_helper_methods = true
|
||||
|
||||
[export]
|
||||
prefix = "Style"
|
||||
include = ["StyleDisplay"]
|
||||
item_types = ["enums"]
|
|
@ -3031,57 +3031,39 @@ fn static_assert() {
|
|||
shape-outside contain touch-action translate
|
||||
scale""" %>
|
||||
<%self:impl_trait style_struct_name="Box" skip_longhands="${skip_box_longhands}">
|
||||
|
||||
// We manually-implement the |display| property until we get general
|
||||
// infrastructure for preffing certain values.
|
||||
<% display_keyword = Keyword("display", "inline block inline-block table inline-table table-row-group " +
|
||||
"table-header-group table-footer-group table-row table-column-group " +
|
||||
"table-column table-cell table-caption list-item flex none " +
|
||||
"inline-flex grid inline-grid ruby ruby-base ruby-base-container " +
|
||||
"ruby-text ruby-text-container contents flow-root -webkit-box " +
|
||||
"-webkit-inline-box -moz-box -moz-inline-box -moz-grid -moz-inline-grid " +
|
||||
"-moz-grid-group -moz-grid-line -moz-stack -moz-inline-stack -moz-deck " +
|
||||
"-moz-popup -moz-groupbox",
|
||||
gecko_enum_prefix="StyleDisplay",
|
||||
gecko_strip_moz_prefix=False) %>
|
||||
|
||||
fn match_display_keyword(
|
||||
v: longhands::display::computed_value::T
|
||||
) -> structs::root::mozilla::StyleDisplay {
|
||||
use properties::longhands::display::computed_value::T as Keyword;
|
||||
// FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts
|
||||
match v {
|
||||
% for value in display_keyword.values_for('gecko'):
|
||||
Keyword::${to_camel_case(value)} =>
|
||||
structs::${display_keyword.gecko_constant(value)},
|
||||
% endfor
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_display(&mut self, v: longhands::display::computed_value::T) {
|
||||
let result = Self::match_display_keyword(v);
|
||||
self.gecko.mDisplay = result;
|
||||
self.gecko.mOriginalDisplay = result;
|
||||
// unsafe: cbindgen ensures the representation is the same.
|
||||
self.gecko.mDisplay = unsafe { transmute(v) };
|
||||
self.gecko.mOriginalDisplay = unsafe { transmute(v) };
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn copy_display_from(&mut self, other: &Self) {
|
||||
self.gecko.mDisplay = other.gecko.mDisplay;
|
||||
self.gecko.mOriginalDisplay = other.gecko.mDisplay;
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn reset_display(&mut self, other: &Self) {
|
||||
self.copy_display_from(other)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn set_adjusted_display(
|
||||
&mut self,
|
||||
v: longhands::display::computed_value::T,
|
||||
_is_item_or_root: bool
|
||||
) {
|
||||
self.gecko.mDisplay = Self::match_display_keyword(v);
|
||||
// unsafe: cbindgen ensures the representation is the same.
|
||||
self.gecko.mDisplay = unsafe { transmute(v) };
|
||||
}
|
||||
|
||||
<%call expr="impl_keyword_clone('display', 'mDisplay', display_keyword)"></%call>
|
||||
#[inline]
|
||||
pub fn clone_display(&self) -> longhands::display::computed_value::T {
|
||||
// unsafe: cbindgen ensures the representation is the same.
|
||||
unsafe { transmute(self.gecko.mDisplay) }
|
||||
}
|
||||
|
||||
<% float_keyword = Keyword("float", "Left Right None", gecko_enum_prefix="StyleFloat") %>
|
||||
${impl_keyword('float', 'mFloat', float_keyword)}
|
||||
|
|
|
@ -41,29 +41,42 @@ fn moz_box_display_values_enabled(context: &ParserContext) -> bool {
|
|||
}
|
||||
}
|
||||
|
||||
/// Defines an element’s display type, which consists of
|
||||
/// the two basic qualities of how an element generates boxes
|
||||
/// <https://drafts.csswg.org/css-display/#propdef-display>
|
||||
///
|
||||
///
|
||||
/// NOTE(emilio): Order is important in Gecko!
|
||||
///
|
||||
/// If you change it, make sure to take a look at the
|
||||
/// FrameConstructionDataByDisplay stuff (both the XUL and non-XUL version), and
|
||||
/// ensure it's still correct!
|
||||
///
|
||||
/// Also, when you change this from Gecko you may need to regenerate the
|
||||
/// C++-side bindings (see components/style/cbindgen.toml).
|
||||
#[allow(missing_docs)]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, Parse, PartialEq,
|
||||
SpecifiedValueInfo, ToComputedValue, ToCss)]
|
||||
#[cfg_attr(feature = "servo", derive(Deserialize, Serialize))]
|
||||
/// Defines an element’s display type, which consists of
|
||||
/// the two basic qualities of how an element generates boxes
|
||||
/// <https://drafts.csswg.org/css-display/#propdef-display>
|
||||
#[repr(u8)]
|
||||
pub enum Display {
|
||||
Inline,
|
||||
None = 0,
|
||||
Block,
|
||||
#[cfg(feature = "gecko")]
|
||||
FlowRoot,
|
||||
Inline,
|
||||
InlineBlock,
|
||||
ListItem,
|
||||
Table,
|
||||
InlineTable,
|
||||
TableRowGroup,
|
||||
TableColumn,
|
||||
TableColumnGroup,
|
||||
TableHeaderGroup,
|
||||
TableFooterGroup,
|
||||
TableRow,
|
||||
TableColumnGroup,
|
||||
TableColumn,
|
||||
TableCell,
|
||||
TableCaption,
|
||||
ListItem,
|
||||
None,
|
||||
#[parse(aliases = "-webkit-flex")]
|
||||
Flex,
|
||||
#[parse(aliases = "-webkit-inline-flex")]
|
||||
|
@ -85,8 +98,6 @@ pub enum Display {
|
|||
#[cfg(feature = "gecko")]
|
||||
Contents,
|
||||
#[cfg(feature = "gecko")]
|
||||
FlowRoot,
|
||||
#[cfg(feature = "gecko")]
|
||||
WebkitBox,
|
||||
#[cfg(feature = "gecko")]
|
||||
WebkitInlineBox,
|
||||
|
@ -119,10 +130,10 @@ pub enum Display {
|
|||
MozDeck,
|
||||
#[cfg(feature = "gecko")]
|
||||
#[parse(condition = "moz_display_values_enabled")]
|
||||
MozPopup,
|
||||
MozGroupbox,
|
||||
#[cfg(feature = "gecko")]
|
||||
#[parse(condition = "moz_display_values_enabled")]
|
||||
MozGroupbox,
|
||||
MozPopup,
|
||||
}
|
||||
|
||||
impl Display {
|
||||
|
|
Загрузка…
Ссылка в новой задаче