mirror of
https://github.com/servo/servo.git
synced 2025-07-25 16:20:36 +01:00
Auto merge of #13636 - Wafflespeanut:properties, r=Manishearth
Add 'image-rendering' support and some cleanup <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build-geckolib` does not report any errors - [x] `./mach test-tidy` does not report any errors <!-- Either: --> - [x] These changes have been tested manually  r? @Manishearth <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13636) <!-- Reviewable:end -->
This commit is contained in:
commit
a25e0670b3
5 changed files with 57 additions and 39 deletions
|
@ -222,8 +222,8 @@ impl<'a> PaintContext<'a> {
|
||||||
// conforming implementation of `crisp-edges`, but it is not the best we could do.
|
// conforming implementation of `crisp-edges`, but it is not the best we could do.
|
||||||
// Something like Scale2x would be ideal.
|
// Something like Scale2x would be ideal.
|
||||||
let draw_surface_filter = match image_rendering {
|
let draw_surface_filter = match image_rendering {
|
||||||
image_rendering::T::Auto => Filter::Linear,
|
image_rendering::T::auto => Filter::Linear,
|
||||||
image_rendering::T::CrispEdges | image_rendering::T::Pixelated => Filter::Point,
|
image_rendering::T::crispedges | image_rendering::T::pixelated => Filter::Point,
|
||||||
};
|
};
|
||||||
|
|
||||||
let draw_surface_options = DrawSurfaceOptions::new(draw_surface_filter, true);
|
let draw_surface_options = DrawSurfaceOptions::new(draw_surface_filter, true);
|
||||||
|
|
|
@ -1331,7 +1331,7 @@ impl FragmentDisplayListBuilding for Fragment {
|
||||||
},
|
},
|
||||||
stretch_size: stacking_relative_content_box.size,
|
stretch_size: stacking_relative_content_box.size,
|
||||||
tile_spacing: Size2D::zero(),
|
tile_spacing: Size2D::zero(),
|
||||||
image_rendering: image_rendering::T::Auto,
|
image_rendering: image_rendering::T::auto,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
CanvasData::WebGL(context_id) => {
|
CanvasData::WebGL(context_id) => {
|
||||||
|
|
|
@ -218,9 +218,9 @@ trait ToImageRendering {
|
||||||
impl ToImageRendering for image_rendering::T {
|
impl ToImageRendering for image_rendering::T {
|
||||||
fn to_image_rendering(&self) -> webrender_traits::ImageRendering {
|
fn to_image_rendering(&self) -> webrender_traits::ImageRendering {
|
||||||
match *self {
|
match *self {
|
||||||
image_rendering::T::CrispEdges => webrender_traits::ImageRendering::CrispEdges,
|
image_rendering::T::crispedges => webrender_traits::ImageRendering::CrispEdges,
|
||||||
image_rendering::T::Auto => webrender_traits::ImageRendering::Auto,
|
image_rendering::T::auto => webrender_traits::ImageRendering::Auto,
|
||||||
image_rendering::T::Pixelated => webrender_traits::ImageRendering::Pixelated,
|
image_rendering::T::pixelated => webrender_traits::ImageRendering::Pixelated,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,14 +213,15 @@ def set_gecko_property(ffi_name, expr):
|
||||||
return "self.gecko.%s = %s;" % (ffi_name, expr)
|
return "self.gecko.%s = %s;" % (ffi_name, expr)
|
||||||
%>
|
%>
|
||||||
|
|
||||||
<%def name="impl_keyword_setter(ident, gecko_ffi_name, keyword)">
|
<%def name="impl_keyword_setter(ident, gecko_ffi_name, keyword, cast_type='u8')">
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub fn set_${ident}(&mut self, v: longhands::${ident}::computed_value::T) {
|
pub fn set_${ident}(&mut self, v: longhands::${ident}::computed_value::T) {
|
||||||
use properties::longhands::${ident}::computed_value::T as Keyword;
|
use properties::longhands::${ident}::computed_value::T as Keyword;
|
||||||
// FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts
|
// FIXME(bholley): Align binary representations and ditch |match| for cast + static_asserts
|
||||||
let result = match v {
|
let result = match v {
|
||||||
% for value in keyword.values_for('gecko'):
|
% for value in keyword.values_for('gecko'):
|
||||||
Keyword::${to_rust_ident(value)} => structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast("u8")},
|
Keyword::${to_rust_ident(value)} =>
|
||||||
|
structs::${keyword.gecko_constant(value)} ${keyword.maybe_cast(cast_type)},
|
||||||
% endfor
|
% endfor
|
||||||
};
|
};
|
||||||
${set_gecko_property(gecko_ffi_name, "result")}
|
${set_gecko_property(gecko_ffi_name, "result")}
|
||||||
|
@ -279,8 +280,8 @@ def set_gecko_property(ffi_name, expr):
|
||||||
}
|
}
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="impl_keyword(ident, gecko_ffi_name, keyword, need_clone)">
|
<%def name="impl_keyword(ident, gecko_ffi_name, keyword, need_clone, **kwargs)">
|
||||||
<%call expr="impl_keyword_setter(ident, gecko_ffi_name, keyword)"></%call>
|
<%call expr="impl_keyword_setter(ident, gecko_ffi_name, keyword, **kwargs)"></%call>
|
||||||
<%call expr="impl_simple_copy(ident, gecko_ffi_name)"></%call>
|
<%call expr="impl_simple_copy(ident, gecko_ffi_name)"></%call>
|
||||||
%if need_clone:
|
%if need_clone:
|
||||||
<%call expr="impl_keyword_clone(ident, gecko_ffi_name, keyword)"></%call>
|
<%call expr="impl_keyword_clone(ident, gecko_ffi_name, keyword)"></%call>
|
||||||
|
@ -791,23 +792,13 @@ fn static_assert() {
|
||||||
Au(self.gecko.mSize)
|
Au(self.gecko.mSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_font_stretch(&mut self, v: longhands::font_stretch::computed_value::T) {
|
<% stretch_keyword = Keyword("font-stretch",
|
||||||
use computed_values::font_stretch::T;
|
"normal ultra-condensed extra-condensed condensed " +
|
||||||
|
"semi-condensed semi-expanded expanded " +
|
||||||
|
"extra-expanded ultra-expanded",
|
||||||
|
gecko_constant_prefix='NS_FONT_STRETCH') %>
|
||||||
|
|
||||||
self.gecko.mFont.stretch = match v {
|
${impl_keyword('font_stretch', 'mFont.stretch', stretch_keyword, need_clone=False, cast_type='i16')}
|
||||||
T::normal => structs::NS_FONT_STRETCH_NORMAL as i16,
|
|
||||||
T::ultra_condensed => structs::NS_FONT_STRETCH_ULTRA_CONDENSED as i16,
|
|
||||||
T::extra_condensed => structs::NS_FONT_STRETCH_EXTRA_CONDENSED as i16,
|
|
||||||
T::condensed => structs::NS_FONT_STRETCH_CONDENSED as i16,
|
|
||||||
T::semi_condensed => structs::NS_FONT_STRETCH_SEMI_CONDENSED as i16,
|
|
||||||
T::semi_expanded => structs::NS_FONT_STRETCH_SEMI_EXPANDED as i16,
|
|
||||||
T::expanded => structs::NS_FONT_STRETCH_EXPANDED as i16,
|
|
||||||
T::extra_expanded => structs::NS_FONT_STRETCH_EXTRA_EXPANDED as i16,
|
|
||||||
T::ultra_expanded => structs::NS_FONT_STRETCH_ULTRA_EXPANDED as i16,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
${impl_simple_copy('font_stretch', 'mFont.stretch')}
|
|
||||||
|
|
||||||
pub fn set_font_weight(&mut self, v: longhands::font_weight::computed_value::T) {
|
pub fn set_font_weight(&mut self, v: longhands::font_weight::computed_value::T) {
|
||||||
self.gecko.mFont.weight = v as u16;
|
self.gecko.mFont.weight = v as u16;
|
||||||
|
@ -1446,6 +1437,17 @@ fn static_assert() {
|
||||||
</%self:impl_trait>
|
</%self:impl_trait>
|
||||||
|
|
||||||
|
|
||||||
|
<%self:impl_trait style_struct_name="InheritedBox"
|
||||||
|
skip_longhands="image-rendering">
|
||||||
|
|
||||||
|
<% render_keyword = Keyword("image-rendering",
|
||||||
|
"auto optimizequality optimizespeed crispedges") %>
|
||||||
|
|
||||||
|
${impl_keyword('image_rendering', 'mImageRendering', render_keyword, need_clone=False)}
|
||||||
|
|
||||||
|
</%self:impl_trait>
|
||||||
|
|
||||||
|
|
||||||
<%self:impl_trait style_struct_name="InheritedText"
|
<%self:impl_trait style_struct_name="InheritedText"
|
||||||
skip_longhands="text-align text-shadow line-height letter-spacing word-spacing">
|
skip_longhands="text-align text-shadow line-height letter-spacing word-spacing">
|
||||||
|
|
||||||
|
|
|
@ -40,25 +40,36 @@ ${helpers.single_keyword("color-adjust",
|
||||||
"economy exact", products="gecko",
|
"economy exact", products="gecko",
|
||||||
animatable=False)}
|
animatable=False)}
|
||||||
|
|
||||||
<%helpers:longhand name="image-rendering" products="servo" animatable="False">
|
<%helpers:longhand name="image-rendering" animatable="False">
|
||||||
pub mod computed_value {
|
pub mod computed_value {
|
||||||
use cssparser::ToCss;
|
use cssparser::ToCss;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
|
#[allow(non_camel_case_types)]
|
||||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
|
#[cfg_attr(feature = "servo", derive(HeapSizeOf, Deserialize, Serialize))]
|
||||||
pub enum T {
|
pub enum T {
|
||||||
Auto,
|
auto,
|
||||||
CrispEdges,
|
crispedges,
|
||||||
Pixelated,
|
% if product == "gecko":
|
||||||
|
optimizequality,
|
||||||
|
optimizespeed,
|
||||||
|
% else:
|
||||||
|
pixelated, // firefox doesn't support it (https://bugzilla.mozilla.org/show_bug.cgi?id=856337)
|
||||||
|
% endif
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToCss for T {
|
impl ToCss for T {
|
||||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||||
match *self {
|
match *self {
|
||||||
T::Auto => dest.write_str("auto"),
|
T::auto => dest.write_str("auto"),
|
||||||
T::CrispEdges => dest.write_str("crisp-edges"),
|
T::crispedges => dest.write_str("crisp-edges"),
|
||||||
T::Pixelated => dest.write_str("pixelated"),
|
% if product == "gecko":
|
||||||
|
T::optimizequality => dest.write_str("optimizeQuality"),
|
||||||
|
T::optimizespeed => dest.write_str("optimizeSpeed"),
|
||||||
|
% else:
|
||||||
|
T::pixelated => dest.write_str("pixelated"),
|
||||||
|
% endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +82,7 @@ ${helpers.single_keyword("color-adjust",
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_initial_value() -> computed_value::T {
|
pub fn get_initial_value() -> computed_value::T {
|
||||||
computed_value::T::Auto
|
computed_value::T::auto
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> {
|
pub fn parse(_: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue,()> {
|
||||||
|
@ -79,11 +90,16 @@ ${helpers.single_keyword("color-adjust",
|
||||||
// `auto`.
|
// `auto`.
|
||||||
match_ignore_ascii_case! {
|
match_ignore_ascii_case! {
|
||||||
try!(input.expect_ident()),
|
try!(input.expect_ident()),
|
||||||
"auto" => Ok(computed_value::T::Auto),
|
"auto" => Ok(computed_value::T::auto),
|
||||||
"optimizespeed" => Ok(computed_value::T::Auto),
|
"crisp-edges" => Ok(computed_value::T::crispedges),
|
||||||
"optimizequality" => Ok(computed_value::T::Auto),
|
% if product == "gecko":
|
||||||
"crisp-edges" => Ok(computed_value::T::CrispEdges),
|
"optimizequality" => Ok(computed_value::T::optimizequality),
|
||||||
"pixelated" => Ok(computed_value::T::Pixelated),
|
"optimizespeed" => Ok(computed_value::T::optimizespeed),
|
||||||
|
% else:
|
||||||
|
"optimizequality" => Ok(computed_value::T::auto),
|
||||||
|
"optimizespeed" => Ok(computed_value::T::auto),
|
||||||
|
"pixelated" => Ok(computed_value::T::pixelated),
|
||||||
|
% endif
|
||||||
_ => Err(())
|
_ => Err(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue