mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
style: Use cbindgen for counters.
Differential Revision: https://phabricator.services.mozilla.com/D44403
This commit is contained in:
parent
3fcd23dcdf
commit
987a1eeb62
3 changed files with 17 additions and 65 deletions
|
@ -2579,8 +2579,7 @@ clip-path
|
||||||
${impl_simple('column_rule_style', 'mColumnRuleStyle')}
|
${impl_simple('column_rule_style', 'mColumnRuleStyle')}
|
||||||
</%self:impl_trait>
|
</%self:impl_trait>
|
||||||
|
|
||||||
<%self:impl_trait style_struct_name="Counters"
|
<%self:impl_trait style_struct_name="Counters" skip_longhands="content">
|
||||||
skip_longhands="content counter-increment counter-reset counter-set">
|
|
||||||
pub fn ineffective_content_property(&self) -> bool {
|
pub fn ineffective_content_property(&self) -> bool {
|
||||||
self.gecko.mContents.is_empty()
|
self.gecko.mContents.is_empty()
|
||||||
}
|
}
|
||||||
|
@ -2811,51 +2810,6 @@ clip-path
|
||||||
}).collect::<Vec<_>>().into_boxed_slice()
|
}).collect::<Vec<_>>().into_boxed_slice()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
% for counter_property in ["Increment", "Reset", "Set"]:
|
|
||||||
pub fn set_counter_${counter_property.lower()}(
|
|
||||||
&mut self,
|
|
||||||
v: longhands::counter_${counter_property.lower()}::computed_value::T
|
|
||||||
) {
|
|
||||||
unsafe {
|
|
||||||
bindings::Gecko_ClearAndResizeCounter${counter_property}s(&mut *self.gecko, v.len() as u32);
|
|
||||||
for (i, pair) in v.0.into_vec().into_iter().enumerate() {
|
|
||||||
self.gecko.m${counter_property}s[i].mCounter.set_move(
|
|
||||||
RefPtr::from_addrefed(pair.name.0.into_addrefed())
|
|
||||||
);
|
|
||||||
self.gecko.m${counter_property}s[i].mValue = pair.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn copy_counter_${counter_property.lower()}_from(&mut self, other: &Self) {
|
|
||||||
unsafe {
|
|
||||||
bindings::Gecko_CopyCounter${counter_property}sFrom(&mut *self.gecko, &*other.gecko)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn reset_counter_${counter_property.lower()}(&mut self, other: &Self) {
|
|
||||||
self.copy_counter_${counter_property.lower()}_from(other)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn clone_counter_${counter_property.lower()}(
|
|
||||||
&self
|
|
||||||
) -> longhands::counter_${counter_property.lower()}::computed_value::T {
|
|
||||||
use crate::values::generics::counters::CounterPair;
|
|
||||||
use crate::values::CustomIdent;
|
|
||||||
|
|
||||||
longhands::counter_${counter_property.lower()}::computed_value::T::new(
|
|
||||||
self.gecko.m${counter_property}s.iter().map(|ref gecko_counter| {
|
|
||||||
CounterPair {
|
|
||||||
name: CustomIdent(unsafe {
|
|
||||||
Atom::from_raw(gecko_counter.mCounter.mRawPtr)
|
|
||||||
}),
|
|
||||||
value: gecko_counter.mValue,
|
|
||||||
}
|
|
||||||
}).collect()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
% endfor
|
|
||||||
</%self:impl_trait>
|
</%self:impl_trait>
|
||||||
|
|
||||||
<%self:impl_trait style_struct_name="UI" skip_longhands="-moz-force-broken-image-icon">
|
<%self:impl_trait style_struct_name="UI" skip_longhands="-moz-force-broken-image-icon">
|
||||||
|
|
|
@ -25,12 +25,14 @@ use std::ops::Deref;
|
||||||
ToResolvedValue,
|
ToResolvedValue,
|
||||||
ToShmem,
|
ToShmem,
|
||||||
)]
|
)]
|
||||||
pub struct CounterPair<Integer> {
|
#[repr(C)]
|
||||||
|
pub struct GenericCounterPair<Integer> {
|
||||||
/// The name of the counter.
|
/// The name of the counter.
|
||||||
pub name: CustomIdent,
|
pub name: CustomIdent,
|
||||||
/// The value of the counter / increment / etc.
|
/// The value of the counter / increment / etc.
|
||||||
pub value: Integer,
|
pub value: Integer,
|
||||||
}
|
}
|
||||||
|
pub use self::GenericCounterPair as CounterPair;
|
||||||
|
|
||||||
/// A generic value for the `counter-increment` property.
|
/// A generic value for the `counter-increment` property.
|
||||||
#[derive(
|
#[derive(
|
||||||
|
@ -45,13 +47,15 @@ pub struct CounterPair<Integer> {
|
||||||
ToResolvedValue,
|
ToResolvedValue,
|
||||||
ToShmem,
|
ToShmem,
|
||||||
)]
|
)]
|
||||||
pub struct CounterIncrement<I>(pub Counters<I>);
|
#[repr(transparent)]
|
||||||
|
pub struct GenericCounterIncrement<I>(pub GenericCounters<I>);
|
||||||
|
pub use self::GenericCounterIncrement as CounterIncrement;
|
||||||
|
|
||||||
impl<I> CounterIncrement<I> {
|
impl<I> CounterIncrement<I> {
|
||||||
/// Returns a new value for `counter-increment`.
|
/// Returns a new value for `counter-increment`.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn new(counters: Vec<CounterPair<I>>) -> Self {
|
pub fn new(counters: Vec<CounterPair<I>>) -> Self {
|
||||||
CounterIncrement(Counters(counters.into_boxed_slice()))
|
CounterIncrement(Counters(counters.into()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,13 +81,15 @@ impl<I> Deref for CounterIncrement<I> {
|
||||||
ToResolvedValue,
|
ToResolvedValue,
|
||||||
ToShmem,
|
ToShmem,
|
||||||
)]
|
)]
|
||||||
pub struct CounterSetOrReset<I>(pub Counters<I>);
|
#[repr(transparent)]
|
||||||
|
pub struct GenericCounterSetOrReset<I>(pub GenericCounters<I>);
|
||||||
|
pub use self::GenericCounterSetOrReset as CounterSetOrReset;
|
||||||
|
|
||||||
impl<I> CounterSetOrReset<I> {
|
impl<I> CounterSetOrReset<I> {
|
||||||
/// Returns a new value for `counter-set` / `counter-reset`.
|
/// Returns a new value for `counter-set` / `counter-reset`.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn new(counters: Vec<CounterPair<I>>) -> Self {
|
pub fn new(counters: Vec<CounterPair<I>>) -> Self {
|
||||||
CounterSetOrReset(Counters(counters.into_boxed_slice()))
|
CounterSetOrReset(Counters(counters.into()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,17 +117,9 @@ impl<I> Deref for CounterSetOrReset<I> {
|
||||||
ToResolvedValue,
|
ToResolvedValue,
|
||||||
ToShmem,
|
ToShmem,
|
||||||
)]
|
)]
|
||||||
pub struct Counters<I>(#[css(iterable, if_empty = "none")] Box<[CounterPair<I>]>);
|
#[repr(transparent)]
|
||||||
|
pub struct GenericCounters<I>(#[css(iterable, if_empty = "none")] crate::OwnedSlice<GenericCounterPair<I>>);
|
||||||
impl<I> Counters<I> {
|
pub use self::GenericCounters as Counters;
|
||||||
/// Move out the Box into a vector. This could just return the Box<>, but
|
|
||||||
/// Vec<> is a bit more convenient because Box<[T]> doesn't implement
|
|
||||||
/// IntoIter: https://github.com/rust-lang/rust/issues/59878
|
|
||||||
#[inline]
|
|
||||||
pub fn into_vec(self) -> Vec<CounterPair<I>> {
|
|
||||||
self.0.into_vec()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "servo")]
|
#[cfg(feature = "servo")]
|
||||||
type CounterStyleType = ListStyleType;
|
type CounterStyleType = ListStyleType;
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
use crate::computed_values::list_style_type::T as ListStyleType;
|
use crate::computed_values::list_style_type::T as ListStyleType;
|
||||||
use crate::parser::{Parse, ParserContext};
|
use crate::parser::{Parse, ParserContext};
|
||||||
use crate::values::generics::counters as generics;
|
use crate::values::generics::counters as generics;
|
||||||
use crate::values::generics::counters::CounterIncrement as GenericCounterIncrement;
|
use crate::values::generics::counters::GenericCounterIncrement;
|
||||||
use crate::values::generics::counters::CounterPair;
|
use crate::values::generics::counters::CounterPair;
|
||||||
use crate::values::generics::counters::CounterSetOrReset as GenericCounterSetOrReset;
|
use crate::values::generics::counters::GenericCounterSetOrReset;
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
use crate::values::generics::CounterStyle;
|
use crate::values::generics::CounterStyle;
|
||||||
use crate::values::specified::url::SpecifiedImageUrl;
|
use crate::values::specified::url::SpecifiedImageUrl;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue