2023-02-23 01:54:03 +00:00
|
|
|
use crate::bitmap::BitmapHandle;
|
2023-02-28 12:06:34 +00:00
|
|
|
use swf::Color;
|
2023-01-29 23:44:56 +00:00
|
|
|
|
2023-02-22 22:22:12 +00:00
|
|
|
#[derive(Debug, Clone)]
|
2023-01-29 23:44:56 +00:00
|
|
|
pub enum Filter {
|
2023-02-28 12:06:34 +00:00
|
|
|
BevelFilter(swf::BevelFilter),
|
|
|
|
BlurFilter(swf::BlurFilter),
|
|
|
|
ColorMatrixFilter(swf::ColorMatrixFilter),
|
|
|
|
ConvolutionFilter(swf::ConvolutionFilter),
|
2023-02-23 01:54:03 +00:00
|
|
|
DisplacementMapFilter(DisplacementMapFilter),
|
2023-02-28 12:06:34 +00:00
|
|
|
DropShadowFilter(swf::DropShadowFilter),
|
|
|
|
GlowFilter(swf::GlowFilter),
|
2023-02-28 12:52:43 +00:00
|
|
|
GradientBevelFilter(swf::GradientFilter),
|
|
|
|
GradientGlowFilter(swf::GradientFilter),
|
2023-01-29 23:44:56 +00:00
|
|
|
}
|
|
|
|
|
2023-02-23 03:23:45 +00:00
|
|
|
impl From<&swf::Filter> for Filter {
|
|
|
|
fn from(value: &swf::Filter) -> Self {
|
|
|
|
match value {
|
|
|
|
swf::Filter::DropShadowFilter(filter) => {
|
2023-02-28 12:06:34 +00:00
|
|
|
Filter::DropShadowFilter(filter.as_ref().to_owned())
|
2023-02-23 03:23:45 +00:00
|
|
|
}
|
2023-02-28 12:06:34 +00:00
|
|
|
swf::Filter::BlurFilter(filter) => Filter::BlurFilter(filter.as_ref().to_owned()),
|
|
|
|
swf::Filter::GlowFilter(filter) => Filter::GlowFilter(filter.as_ref().to_owned()),
|
|
|
|
swf::Filter::BevelFilter(filter) => Filter::BevelFilter(filter.as_ref().to_owned()),
|
2023-02-23 03:23:45 +00:00
|
|
|
swf::Filter::GradientGlowFilter(filter) => {
|
2023-02-28 12:06:34 +00:00
|
|
|
Filter::GradientGlowFilter(filter.as_ref().to_owned())
|
2023-02-23 03:23:45 +00:00
|
|
|
}
|
|
|
|
swf::Filter::ConvolutionFilter(filter) => {
|
2023-02-28 12:06:34 +00:00
|
|
|
Filter::ConvolutionFilter(filter.as_ref().to_owned())
|
2023-02-23 03:23:45 +00:00
|
|
|
}
|
|
|
|
swf::Filter::ColorMatrixFilter(filter) => {
|
2023-02-28 12:06:34 +00:00
|
|
|
Filter::ColorMatrixFilter(filter.as_ref().to_owned())
|
2023-02-23 03:23:45 +00:00
|
|
|
}
|
|
|
|
swf::Filter::GradientBevelFilter(filter) => {
|
2023-02-28 12:06:34 +00:00
|
|
|
Filter::GradientBevelFilter(filter.as_ref().to_owned())
|
2023-02-23 03:23:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-29 23:44:56 +00:00
|
|
|
impl Default for Filter {
|
|
|
|
fn default() -> Self {
|
|
|
|
// A default colormatrix is a filter that essentially does nothing,
|
|
|
|
// making it a useful default in situations that we need a dummy filter
|
2023-02-28 12:06:34 +00:00
|
|
|
Filter::ColorMatrixFilter(swf::ColorMatrixFilter::default())
|
2023-02-23 01:05:59 +00:00
|
|
|
}
|
|
|
|
}
|
2023-02-23 01:54:03 +00:00
|
|
|
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
|
|
pub enum DisplacementMapFilterComponent {
|
|
|
|
Alpha,
|
|
|
|
Blue,
|
|
|
|
Green,
|
|
|
|
Red,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
|
|
pub enum DisplacementMapFilterMode {
|
|
|
|
Clamp,
|
|
|
|
Color,
|
|
|
|
Ignore,
|
|
|
|
Wrap,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
pub struct DisplacementMapFilter {
|
|
|
|
pub color: Color,
|
|
|
|
pub component_x: u8,
|
|
|
|
pub component_y: u8,
|
|
|
|
pub map_bitmap: Option<BitmapHandle>,
|
2023-02-23 04:45:54 +00:00
|
|
|
pub map_point: (i32, i32),
|
2023-02-23 01:54:03 +00:00
|
|
|
pub mode: DisplacementMapFilterMode,
|
|
|
|
pub scale_x: f32,
|
|
|
|
pub scale_y: f32,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Default for DisplacementMapFilter {
|
|
|
|
fn default() -> Self {
|
|
|
|
Self {
|
|
|
|
color: Color::from_rgba(0),
|
|
|
|
component_x: 0,
|
|
|
|
component_y: 0,
|
|
|
|
map_bitmap: None,
|
|
|
|
map_point: (0, 0),
|
|
|
|
mode: DisplacementMapFilterMode::Wrap,
|
|
|
|
scale_x: 0.0,
|
|
|
|
scale_y: 0.0,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|