aboutsummaryrefslogtreecommitdiffstats
path: root/components/canvas/canvas_data.rs
diff options
context:
space:
mode:
authorEnnui Langeweile <85590273+EnnuiL@users.noreply.github.com>2023-10-27 20:06:43 -0300
committerGitHub <noreply@github.com>2023-10-27 23:06:43 +0000
commita6ceca6d9f7f4ce483d1fa7d76a96a921ddc0548 (patch)
tree753d0659a15d2432891a88cf553a4eb84611592a /components/canvas/canvas_data.rs
parentfaf928f3a86a704b213dc6bb821fcb2f3f352285 (diff)
downloadservo-a6ceca6d9f7f4ce483d1fa7d76a96a921ddc0548.tar.gz
servo-a6ceca6d9f7f4ce483d1fa7d76a96a921ddc0548.zip
Clean up a bit of the canvas backend abstractions (#30637)
* Clean up a bit of the canvas backend abstractions * Remove unused import Sneaky, sneaky little hecker
Diffstat (limited to 'components/canvas/canvas_data.rs')
-rw-r--r--components/canvas/canvas_data.rs69
1 files changed, 16 insertions, 53 deletions
diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs
index 38d84f2d00c..17c63767033 100644
--- a/components/canvas/canvas_data.rs
+++ b/components/canvas/canvas_data.rs
@@ -3,8 +3,6 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::cell::RefCell;
-#[allow(unused_imports)]
-use std::marker::PhantomData;
use std::mem;
use std::sync::{Arc, Mutex};
@@ -247,23 +245,10 @@ pub trait GenericDrawTarget {
source: Rect<i32>,
destination: Point2D<i32>,
);
- fn create_gradient_stops(
- &self,
- gradient_stops: Vec<GradientStop>,
- extend_mode: ExtendMode,
- ) -> GradientStops;
+ fn create_gradient_stops(&self, gradient_stops: Vec<GradientStop>) -> GradientStops;
fn create_path_builder(&self) -> Box<dyn GenericPathBuilder>;
- fn create_similar_draw_target(
- &self,
- size: &Size2D<i32>,
- format: SurfaceFormat,
- ) -> Box<dyn GenericDrawTarget>;
- fn create_source_surface_from_data(
- &self,
- data: &[u8],
- size: Size2D<i32>,
- stride: i32,
- ) -> Option<SourceSurface>;
+ fn create_similar_draw_target(&self, size: &Size2D<i32>) -> Box<dyn GenericDrawTarget>;
+ fn create_source_surface_from_data(&self, data: &[u8]) -> Option<SourceSurface>;
fn draw_surface(
&mut self,
surface: SourceSurface,
@@ -292,7 +277,6 @@ pub trait GenericDrawTarget {
draw_options: &DrawOptions,
);
fn fill_rect(&mut self, rect: &Rect<f32>, pattern: Pattern, draw_options: Option<&DrawOptions>);
- fn get_format(&self) -> SurfaceFormat;
fn get_size(&self) -> Size2D<i32>;
fn get_transform(&self) -> Transform2D<f32>;
fn pop_clip(&mut self);
@@ -325,11 +309,6 @@ pub trait GenericDrawTarget {
fn snapshot_data_owned(&self) -> Vec<u8>;
}
-#[derive(Clone)]
-pub enum ExtendMode {
- Raqote(()),
-}
-
pub enum GradientStop {
Raqote(raqote::GradientStop),
}
@@ -348,10 +327,6 @@ pub enum CompositionOp {
Raqote(raqote::BlendMode),
}
-pub enum SurfaceFormat {
- Raqote(()),
-}
-
#[derive(Clone)]
pub enum SourceSurface {
Raqote(Vec<u8>), // TODO: See if we can avoid the alloc (probably?)
@@ -367,24 +342,20 @@ pub enum Pattern<'a> {
Raqote(crate::raqote_backend::Pattern<'a>),
}
-pub enum DrawSurfaceOptions {
- Raqote(()),
-}
-
#[derive(Clone)]
pub enum DrawOptions {
Raqote(raqote::DrawOptions),
}
#[derive(Clone)]
-pub enum StrokeOptions<'a> {
- Raqote(raqote::StrokeStyle, PhantomData<&'a ()>),
+pub enum StrokeOptions {
+ Raqote(raqote::StrokeStyle),
}
#[derive(Clone, Copy)]
pub enum Filter {
- Linear,
- Point,
+ Bilinear,
+ Nearest,
}
pub(crate) type CanvasFontContext = FontContext<FontCacheThread>;
@@ -1162,11 +1133,7 @@ impl<'a> CanvasData<'a> {
pixels::rgba8_byte_swap_and_premultiply_inplace(&mut imagedata);
let source_surface = self
.drawtarget
- .create_source_surface_from_data(
- &imagedata,
- rect.size.to_i32(),
- rect.size.width as i32 * 4,
- )
+ .create_source_surface_from_data(&imagedata)
.unwrap();
self.drawtarget.copy_surface(
source_surface,
@@ -1212,13 +1179,10 @@ impl<'a> CanvasData<'a> {
}
fn create_draw_target_for_shadow(&self, source_rect: &Rect<f32>) -> Box<dyn GenericDrawTarget> {
- let mut draw_target = self.drawtarget.create_similar_draw_target(
- &Size2D::new(
- source_rect.size.width as i32,
- source_rect.size.height as i32,
- ),
- self.drawtarget.get_format(),
- );
+ let mut draw_target = self.drawtarget.create_similar_draw_target(&Size2D::new(
+ source_rect.size.width as i32,
+ source_rect.size.height as i32,
+ ));
let matrix = self.state.transform.then(
&Transform2D::identity().pre_translate(-source_rect.origin.to_vector().cast::<f32>()),
);
@@ -1290,7 +1254,7 @@ pub struct CanvasPaintState<'a> {
pub draw_options: DrawOptions,
pub fill_style: Pattern<'a>,
pub stroke_style: Pattern<'a>,
- pub stroke_opts: StrokeOptions<'a>,
+ pub stroke_opts: StrokeOptions,
/// The current 2D transform matrix.
pub transform: Transform2D<f32>,
pub shadow_offset_x: f64,
@@ -1333,14 +1297,13 @@ fn write_image(
// to apply a smoothing algorithm to the image data when it is scaled.
// Otherwise, the image must be rendered using nearest-neighbor interpolation.
let filter = if smoothing_enabled {
- Filter::Linear
+ Filter::Bilinear
} else {
- Filter::Point
+ Filter::Nearest
};
- let image_size = image_size.to_i32();
let source_surface = draw_target
- .create_source_surface_from_data(&image_data, image_size, image_size.width * 4)
+ .create_source_surface_from_data(&image_data)
.unwrap();
draw_target.draw_surface(source_surface, dest_rect, image_rect, filter, draw_options);