mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
style: Merge ImageLayer and Image.
ImageLayer is almost the only usage of Image, so keeping them in the same enum makes the resulting C++ struct smaller, and makes it map more cleanly to nsStyleImage. Differential Revision: https://phabricator.services.mozilla.com/D62161
This commit is contained in:
parent
c0d67f796c
commit
149cb5f5f1
12 changed files with 62 additions and 112 deletions
|
@ -23,6 +23,9 @@ impl nsStyleImage {
|
|||
/// Set a given Servo `Image` value into this `nsStyleImage`.
|
||||
pub fn set(&mut self, image: Image) {
|
||||
match image {
|
||||
GenericImage::None => unsafe {
|
||||
bindings::Gecko_SetNullImageValue(self);
|
||||
},
|
||||
GenericImage::Gradient(boxed_gradient) => self.set_gradient(boxed_gradient),
|
||||
GenericImage::Url(ref url) => unsafe {
|
||||
bindings::Gecko_SetLayerImageImageValue(self, url);
|
||||
|
@ -55,35 +58,35 @@ impl nsStyleImage {
|
|||
}
|
||||
|
||||
/// Converts into Image.
|
||||
pub unsafe fn into_image(self: &nsStyleImage) -> Option<Image> {
|
||||
pub unsafe fn to_image(&self) -> Image {
|
||||
use crate::gecko_bindings::structs::nsStyleImageType;
|
||||
use crate::values::computed::MozImageRect;
|
||||
|
||||
match self.mType {
|
||||
nsStyleImageType::eStyleImageType_Null => None,
|
||||
nsStyleImageType::eStyleImageType_Null => GenericImage::None,
|
||||
nsStyleImageType::eStyleImageType_Image => {
|
||||
let url = self.__bindgen_anon_1.mImage.as_ref().clone();
|
||||
if self.mCropRect.mPtr.is_null() {
|
||||
Some(GenericImage::Url(url))
|
||||
GenericImage::Url(url)
|
||||
} else {
|
||||
let rect = &*self.mCropRect.mPtr;
|
||||
Some(GenericImage::Rect(Box::new(MozImageRect {
|
||||
GenericImage::Rect(Box::new(MozImageRect {
|
||||
url,
|
||||
top: rect.0,
|
||||
right: rect.1,
|
||||
bottom: rect.2,
|
||||
left: rect.3,
|
||||
})))
|
||||
}))
|
||||
}
|
||||
},
|
||||
nsStyleImageType::eStyleImageType_Gradient => {
|
||||
let gradient: &Gradient = &**self.__bindgen_anon_1.mGradient.as_ref();
|
||||
Some(GenericImage::Gradient(Box::new(gradient.clone())))
|
||||
GenericImage::Gradient(Box::new(gradient.clone()))
|
||||
},
|
||||
nsStyleImageType::eStyleImageType_Element => {
|
||||
use crate::gecko_string_cache::Atom;
|
||||
let atom = bindings::Gecko_GetImageElement(self);
|
||||
Some(GenericImage::Element(Atom::from_raw(atom)))
|
||||
GenericImage::Element(Atom::from_raw(atom))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -102,7 +105,7 @@ pub mod basic_shape {
|
|||
impl StyleShapeSource {
|
||||
/// Convert StyleShapeSource to ShapeSource except URL and Image
|
||||
/// types.
|
||||
fn into_shape_source<ReferenceBox, ImageOrUrl>(
|
||||
fn to_shape_source<ReferenceBox, ImageOrUrl>(
|
||||
&self,
|
||||
) -> Option<ShapeSource<BasicShape, ReferenceBox, ImageOrUrl>>
|
||||
where
|
||||
|
@ -149,14 +152,14 @@ pub mod basic_shape {
|
|||
use crate::values::generics::image::Image as GenericImage;
|
||||
|
||||
let shape_image = &*other.__bindgen_anon_1.mShapeImage.as_ref().mPtr;
|
||||
let image = shape_image.into_image().expect("Cannot convert to Image");
|
||||
let image = shape_image.to_image();
|
||||
match image {
|
||||
GenericImage::Url(url) => ShapeSource::ImageOrUrl(url.0),
|
||||
_ => panic!("ClippingShape doesn't support non-url images"),
|
||||
}
|
||||
},
|
||||
_ => other
|
||||
.into_shape_source()
|
||||
.to_shape_source()
|
||||
.expect("Couldn't convert to StyleSource!"),
|
||||
}
|
||||
}
|
||||
|
@ -167,11 +170,11 @@ pub mod basic_shape {
|
|||
match other.mType {
|
||||
StyleShapeSourceType::Image => unsafe {
|
||||
let shape_image = &*other.__bindgen_anon_1.mShapeImage.as_ref().mPtr;
|
||||
let image = shape_image.into_image().expect("Cannot convert to Image");
|
||||
let image = shape_image.to_image();
|
||||
ShapeSource::ImageOrUrl(image)
|
||||
},
|
||||
_ => other
|
||||
.into_shape_source()
|
||||
.to_shape_source()
|
||||
.expect("Couldn't convert to StyleSource!"),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue