mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Canvas: added lineCap and lineJoin support.
This commit is contained in:
parent
43d476eb2b
commit
ccfff159e7
18 changed files with 109 additions and 67 deletions
|
@ -39,6 +39,8 @@ pub enum CanvasMsg {
|
|||
SetFillStyle(FillOrStrokeStyle),
|
||||
SetStrokeStyle(FillOrStrokeStyle),
|
||||
SetLineWidth(f32),
|
||||
SetLineCap(LineCapStyle),
|
||||
SetLineJoin(LineJoinStyle),
|
||||
SetMiterLimit(f32),
|
||||
SetTransform(Matrix2D<f32>),
|
||||
SetGlobalAlpha(f32),
|
||||
|
@ -246,6 +248,8 @@ impl<'a> CanvasPaintTask<'a> {
|
|||
CanvasMsg::SetFillStyle(style) => painter.set_fill_style(style),
|
||||
CanvasMsg::SetStrokeStyle(style) => painter.set_stroke_style(style),
|
||||
CanvasMsg::SetLineWidth(width) => painter.set_line_width(width),
|
||||
CanvasMsg::SetLineCap(cap) => painter.set_line_cap(cap),
|
||||
CanvasMsg::SetLineJoin(join) => painter.set_line_join(join),
|
||||
CanvasMsg::SetMiterLimit(limit) => painter.set_miter_limit(limit),
|
||||
CanvasMsg::SetTransform(ref matrix) => painter.set_transform(matrix),
|
||||
CanvasMsg::SetGlobalAlpha(alpha) => painter.set_global_alpha(alpha),
|
||||
|
@ -427,6 +431,14 @@ impl<'a> CanvasPaintTask<'a> {
|
|||
self.stroke_opts.line_width = width;
|
||||
}
|
||||
|
||||
fn set_line_cap(&mut self, cap: LineCapStyle) {
|
||||
self.stroke_opts.line_cap = cap.to_azure_style();
|
||||
}
|
||||
|
||||
fn set_line_join(&mut self, join: LineJoinStyle) {
|
||||
self.stroke_opts.line_join = join.to_azure_style();
|
||||
}
|
||||
|
||||
fn set_miter_limit(&mut self, limit: f32) {
|
||||
self.stroke_opts.miter_limit = limit;
|
||||
}
|
||||
|
@ -626,6 +638,58 @@ impl FillOrStrokeStyle {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq)]
|
||||
pub enum LineCapStyle {
|
||||
Butt = 0,
|
||||
Round = 1,
|
||||
Square = 2,
|
||||
}
|
||||
|
||||
impl LineCapStyle {
|
||||
fn to_azure_style(&self) -> CapStyle {
|
||||
match *self {
|
||||
LineCapStyle::Butt => CapStyle::Butt,
|
||||
LineCapStyle::Round => CapStyle::Round,
|
||||
LineCapStyle::Square => CapStyle::Square,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_str(string: &str) -> Option<LineCapStyle> {
|
||||
match string {
|
||||
"butt" => Some(LineCapStyle::Butt),
|
||||
"round" => Some(LineCapStyle::Round),
|
||||
"square" => Some(LineCapStyle::Square),
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq)]
|
||||
pub enum LineJoinStyle {
|
||||
Round = 0,
|
||||
Bevel = 1,
|
||||
Miter = 2,
|
||||
}
|
||||
|
||||
impl LineJoinStyle {
|
||||
fn to_azure_style(&self) -> JoinStyle {
|
||||
match *self {
|
||||
LineJoinStyle::Round => JoinStyle::Round,
|
||||
LineJoinStyle::Bevel => JoinStyle::Bevel,
|
||||
LineJoinStyle::Miter => JoinStyle::Miter,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_str(string: &str) -> Option<LineJoinStyle> {
|
||||
match string {
|
||||
"round" => Some(LineJoinStyle::Round),
|
||||
"bevel" => Some(LineJoinStyle::Bevel),
|
||||
"miter" => Some(LineJoinStyle::Miter),
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Used by drawImage to get rid of the extra pixels of the image data that
|
||||
/// won't be copied to the canvas
|
||||
/// image_data: Color pixel data of the image
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue