#![allow(clippy::too_many_arguments)]
use crate::{
prelude::TextAlign,
foundation::{colorspace::Color, BaseLine, FontStyle, FontWeight, Gradient}
};
#[derive(Copy, Clone, Debug)]
pub enum Direction {
Ltr,
Rtl,
Inherit,
}
#[derive(Copy, Clone, Debug)]
pub struct TextMetrics {
pub width: f64,
pub height: f64,
}
#[derive(Clone, Copy, Debug)]
pub enum LineCap {
Butt,
Round,
Square,
}
impl Default for LineCap {
fn default() -> Self {
LineCap::Butt
}
}
#[derive(Clone, Copy, Debug)]
pub enum LineJoin {
Miter,
Bevel,
Round,
}
impl Default for LineJoin {
fn default() -> Self {
LineJoin::Miter
}
}
#[allow(dead_code)]
#[derive(Clone, Copy, Debug)]
pub enum PatternExtend {
None,
Repeat,
Reflect,
Pad,
}
impl Default for PatternExtend {
fn default() -> Self {
PatternExtend::Repeat
}
}
pub trait CanvasContext {
type Pattern;
fn get_direction(&self) -> Direction;
fn set_direction(&self, value: Direction) -> String;
fn set_fill_color(&self, value: Color);
fn set_fill_gradient(&self, value: &Gradient);
fn set_fill_pattern(&self, value: &Self::Pattern);
fn get_filter(&self) -> String;
fn set_filter(&self, value: &str);
fn get_font(&self) -> String;
fn set_font(&self, family: &str, style: FontStyle, weight: FontWeight, size: f64);
fn get_global_alpha(&self) -> f64;
fn set_global_alpha(&self, value: f64);
fn get_global_composite_operation(&self) -> String;
fn set_global_composite_operation(&self, value: &str);
fn is_image_smoothing_enabled(&self) -> bool;
fn set_image_smoothing(&self, value: bool);
fn get_line_cap(&self) -> LineCap;
fn set_line_cap(&self, value: LineCap);
fn get_line_dash_offset(&self) -> f64;
fn set_line_dash_offset(&self, value: f64);
fn get_line_join(&self) -> LineJoin;
fn set_line_join(&self, value: LineJoin);
fn get_line_width(&self) -> f64;
fn set_line_width(&self, value: f64);
fn get_miter_limit(&self) -> f64;
fn set_miter_limit(&self, value: f64);
fn get_shadow_blur(&self) -> f64;
fn set_shadow_blur(&self, value: f64);
fn get_shadow_color(&self) -> Color;
fn set_shadow_color(&self, value: Color);
fn get_shadow_offset_x(&self) -> f64;
fn set_shadow_offset_x(&self, value: f64);
fn get_shadow_offset_y(&self) -> f64;
fn set_shadow_offset_y(&self, value: f64);
fn set_stroke_color(&self, value: Color);
fn set_stroke_gradient(&self, value: &Gradient);
fn set_stroke_pattern(&self, value: &Self::Pattern);
fn get_text_align(&self) -> TextAlign;
fn set_text_align(&self, value: TextAlign);
fn get_text_baseline(&self) -> BaseLine;
fn set_text_baseline(&self, value: BaseLine);
fn arc(
&self,
x: f64,
y: f64,
radius: f64,
start_angle: f64,
end_angle: f64,
anticlockwise: bool,
);
fn arc_to(&self, x1: f64, y1: f64, x2: f64, y2: f64, radius: f64);
fn begin_path(&self);
fn bezier_curve_to(&self, cp1x: f64, cp1y: f64, cp2x: f64, cp2y: f64, x: f64, y: f64);
fn clear_rect(&self, x: f64, y: f64, width: f64, height: f64);
fn close_path(&self);
fn ellipse(
&self,
x: f64,
y: f64,
radius_x: f64,
radius_y: f64,
rotation: f64,
start_angle: f64,
end_angle: f64,
anticlockwise: bool,
);
fn fill(&self);
fn fill_rect(&self, x: f64, y: f64, width: f64, height: f64);
fn fill_text(&self, text: &str, x: f64, y: f64);
fn get_line_dash(&self) -> Vec<f64>;
fn line_to(&self, x: f64, y: f64);
fn measure_text(&self, text: &str) -> TextMetrics;
fn move_to(&self, x: f64, y: f64);
fn quadratic_curve_to(&self, cpx: f64, cpy: f64, x: f64, y: f64);
fn rect(&self, x: f64, y: f64, width: f64, height: f64);
fn reset_transform(&self);
fn restore(&self);
fn rotate(&self, angle: f64);
fn save(&self);
fn scale(&self, x: f64, y: f64);
fn set_line_dash(&self, dash: &[f64]);
fn set_transform(&self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64);
fn stroke(&self);
fn stroke_rect(&self, x: f64, y: f64, width: f64, height: f64);
fn stroke_text(&self, text: &str, x: f64, y: f64);
fn transform(&self, a: f64, b: f64, c: f64, d: f64, e: f64, f: f64);
fn translate(&self, x: f64, y: f64);
}