use crate::core::{Color, Font, HorizontalAlignment, Point, Rect};
use crate::style::Gradient;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BlendMode {
Normal,
Multiply,
Screen,
Overlay,
Darken,
Lighten,
ColorDodge,
ColorBurn,
HardLight,
SoftLight,
Difference,
Exclusion,
Hue,
Saturation,
Color,
Luminosity,
}
#[derive(Debug, Clone)]
pub enum RenderCommand {
FillRect {
rect: Rect,
color: Color,
},
DrawRect {
rect: Rect,
color: Color,
},
DrawRectStroke {
rect: Rect,
color: Color,
width: u32,
},
FillRoundedRect {
rect: Rect,
radius: u32,
color: Color,
},
FillRoundedRectAA {
rect: Rect,
radius: u32,
color: Color,
},
DrawRoundedRectStroke {
rect: Rect,
radius: u32,
color: Color,
width: u32,
},
DrawRoundedRectStrokeAA {
rect: Rect,
radius: u32,
color: Color,
width: u32,
},
DrawLine {
from: Point,
to: Point,
color: Color,
},
DrawLineAA {
from: Point,
to: Point,
color: Color,
},
DrawLineStrokeAA {
from: Point,
to: Point,
color: Color,
width: u32,
},
DrawLineStroke {
from: Point,
to: Point,
color: Color,
width: u32,
},
FillCircle {
center: Point,
radius: u32,
color: Color,
},
FillCircleAA {
center: Point,
radius: u32,
color: Color,
},
DrawCircle {
center: Point,
radius: u32,
color: Color,
},
DrawCircleStroke {
center: Point,
radius: u32,
color: Color,
width: u32,
},
DrawText {
origin: Point,
text: String,
font: Font,
color: Color,
alignment: HorizontalAlignment,
},
DrawImage {
x: i32,
y: i32,
width: u32,
height: u32,
data: Vec<u8>,
},
PushClip {
x: i32,
y: i32,
width: u32,
height: u32,
},
PopClip,
DrawGradient {
rect: Rect,
gradient: Gradient,
},
DrawArc {
center: Point,
radius: u32,
start_angle: f32,
end_angle: f32,
color: Color,
filled: bool,
},
DrawPath {
points: Vec<Point>,
closed: bool,
color: Color,
filled: bool,
width: u32,
},
BoxShadow {
rect: Rect,
color: Color,
offset_x: i32,
offset_y: i32,
blur_radius: u32,
spread: i32,
},
Blur {
radius: u32,
},
ClipPath {
points: Vec<Point>,
},
SetBlendMode {
mode: BlendMode,
},
DrawConicGradient {
center: Point,
start_angle: f32,
stops: Vec<(f32, Color)>,
},
}