ruffle/render/src/filters.rs

92 lines
2.7 KiB
Rust
Raw Normal View History

use crate::bitmap::BitmapHandle;
use swf::Color;
#[derive(Debug, Clone)]
pub enum Filter {
BevelFilter(swf::BevelFilter),
BlurFilter(swf::BlurFilter),
ColorMatrixFilter(swf::ColorMatrixFilter),
ConvolutionFilter(swf::ConvolutionFilter),
DisplacementMapFilter(DisplacementMapFilter),
DropShadowFilter(swf::DropShadowFilter),
GlowFilter(swf::GlowFilter),
2023-02-28 12:52:43 +00:00
GradientBevelFilter(swf::GradientFilter),
GradientGlowFilter(swf::GradientFilter),
}
impl From<&swf::Filter> for Filter {
fn from(value: &swf::Filter) -> Self {
match value {
swf::Filter::DropShadowFilter(filter) => {
Filter::DropShadowFilter(filter.as_ref().to_owned())
}
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()),
swf::Filter::GradientGlowFilter(filter) => {
Filter::GradientGlowFilter(filter.as_ref().to_owned())
}
swf::Filter::ConvolutionFilter(filter) => {
Filter::ConvolutionFilter(filter.as_ref().to_owned())
}
swf::Filter::ColorMatrixFilter(filter) => {
Filter::ColorMatrixFilter(filter.as_ref().to_owned())
}
swf::Filter::GradientBevelFilter(filter) => {
Filter::GradientBevelFilter(filter.as_ref().to_owned())
}
}
}
}
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
Filter::ColorMatrixFilter(swf::ColorMatrixFilter::default())
2023-02-23 01:05:59 +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>,
pub map_point: (i32, i32),
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,
}
}
}