ruffle/src/types.rs

293 lines
5.4 KiB
Rust
Raw Normal View History

2016-08-29 07:51:32 +00:00
#[derive(Debug,PartialEq)]
pub struct Swf {
pub version: u8,
pub compression: Compression,
pub stage_size: Rectangle,
pub frame_rate: f32,
pub num_frames: u16,
pub tags: Vec<Tag>,
}
/// Defines the compression type used in an SWF.
#[derive(Debug,PartialEq,Eq)]
pub enum Compression {
None,
Zlib,
Lzma,
}
#[derive(Debug,PartialEq,Clone)]
pub struct Rectangle {
pub x_min: f32,
pub x_max: f32,
pub y_min: f32,
pub y_max: f32,
}
#[derive(Debug,PartialEq)]
pub struct Color {
pub r: u8,
pub g: u8,
pub b: u8,
pub a: u8,
}
#[derive(Debug,PartialEq)]
pub struct ColorTransform {
2016-09-08 02:59:59 +00:00
pub r_multiply: f32,
pub g_multiply: f32,
pub b_multiply: f32,
pub a_multiply: f32,
2016-08-29 07:51:32 +00:00
pub r_add: i16,
pub g_add: i16,
pub b_add: i16,
pub a_add: i16,
}
#[derive(Debug,PartialEq)]
pub struct Matrix {
pub translate_x: f32,
pub translate_y: f32,
pub scale_x: f32,
pub scale_y: f32,
pub rotate_skew_0: f32,
pub rotate_skew_1: f32,
}
impl Matrix {
pub fn new() -> Matrix {
2016-08-29 20:32:56 +00:00
Matrix {
translate_x: 0f32,
translate_y: 0f32,
scale_x: 1f32,
scale_y: 1f32,
2016-08-30 00:00:43 +00:00
rotate_skew_0: 0f32,
rotate_skew_1: 0f32,
2016-08-29 20:32:56 +00:00
}
2016-08-29 07:51:32 +00:00
}
}
#[derive(Debug,PartialEq)]
pub struct FileAttributes {
pub use_direct_blit: bool,
pub use_gpu: bool,
pub has_metadata: bool,
pub is_action_script_3: bool,
pub use_network_sandbox: bool,
}
#[derive(Debug,PartialEq)]
pub struct FrameLabel {
pub frame_num: u32,
pub label: String,
}
pub type Depth = i16;
pub type CharacterId = u16;
pub type Twips = i32;
#[derive(Debug,PartialEq)]
pub struct PlaceObject {
2016-09-06 18:50:36 +00:00
pub version: u8,
pub action: PlaceObjectAction,
2016-08-29 07:51:32 +00:00
pub depth: Depth,
pub matrix: Option<Matrix>,
2016-09-08 02:59:59 +00:00
pub color_transform: Option<ColorTransform>,
2016-09-06 18:50:36 +00:00
pub ratio: Option<u16>,
2016-08-29 07:51:32 +00:00
pub name: Option<String>,
2016-09-06 18:50:36 +00:00
pub clip_depth: Option<Depth>,
2016-09-08 02:59:59 +00:00
pub class_name: Option<String>,
2016-09-06 18:50:36 +00:00
pub filters: Vec<Filter>,
2016-09-08 02:59:59 +00:00
pub background_color: Option<Color>,
pub blend_mode: BlendMode,
pub clip_actions: Vec<ClipAction>,
2016-09-06 18:50:36 +00:00
pub is_bitmap_cached: bool,
pub is_visible: bool,
}
#[derive(Debug,PartialEq,Clone,Copy)]
pub enum PlaceObjectAction {
2016-09-08 02:59:59 +00:00
Place(CharacterId),
2016-09-06 18:50:36 +00:00
Modify,
Replace(CharacterId),
}
#[derive(Debug,PartialEq,Clone)]
pub enum Filter {
DropShadowFilter,
BlurFilter,
GlowFilter,
BevelFilter,
GradientGlowFilter,
ConvolutionFilter,
ColorMatrixFilter,
GradientBevelFilter,
}
#[derive(Debug,PartialEq,Eq,Clone,Copy)]
pub enum BlendMode {
Normal,
Layer,
Multiply,
Screen,
Lighten,
Darken,
Difference,
Add,
Subtract,
Invert,
Alpha,
Erase,
Overlay,
HardLight,
}
#[derive(Debug,PartialEq,Eq,Clone)]
pub struct ClipAction {
pub events: Vec<ClipEvent>,
pub key_code: Option<u8>,
}
#[derive(Debug,PartialEq,Eq,Clone,Copy)]
pub enum ClipEvent {
KeyUp,
KeyDown,
MouseUp,
MouseDown,
MouseMove,
Unload,
EnterFrame,
Load,
DragOver,
RollOut,
RollOver,
ReleaseOutside,
Release,
Press,
Initialize,
Construct,
2016-08-29 07:51:32 +00:00
}
#[derive(Debug,PartialEq)]
pub enum Tag {
ShowFrame,
DefineShape(Shape),
SetBackgroundColor(Color),
2016-09-08 02:59:59 +00:00
PlaceObject(Box<PlaceObject>),
2016-08-29 07:51:32 +00:00
FileAttributes(FileAttributes),
2016-08-29 20:32:56 +00:00
DefineSceneAndFrameLabelData {
scenes: Vec<FrameLabel>,
frame_labels: Vec<FrameLabel>,
},
2016-08-29 07:51:32 +00:00
Unknown { tag_code: u16, data: Vec<u8> },
}
#[derive(Debug,PartialEq)]
pub struct Shape {
pub version: u8,
pub id: CharacterId,
pub shape_bounds: Rectangle,
pub edge_bounds: Rectangle,
pub styles: ShapeStyles,
pub shape: Vec<ShapeRecord>,
}
#[derive(Debug,PartialEq)]
pub struct ShapeStyles {
pub fill_styles: Vec<FillStyle>,
pub line_styles: Vec<LineStyle>,
}
#[derive(Debug,PartialEq)]
pub enum ShapeRecord {
// TODO: Twips
StyleChange(StyleChangeData),
StraightEdge { delta_x: f32, delta_y: f32 },
2016-08-29 20:32:56 +00:00
CurvedEdge {
control_delta_x: f32,
control_delta_y: f32,
anchor_delta_x: f32,
anchor_delta_y: f32,
},
2016-08-29 07:51:32 +00:00
}
#[derive(Debug,PartialEq)]
pub struct StyleChangeData {
pub move_delta_x: f32,
pub move_delta_y: f32,
pub fill_style_0: Option<u32>,
pub fill_style_1: Option<u32>,
pub line_style: Option<u32>,
pub new_styles: Option<ShapeStyles>,
}
#[derive(Debug,PartialEq)]
pub enum FillStyle {
Color(Color),
LinearGradient(Gradient),
RadialGradient(Gradient),
2016-08-29 20:32:56 +00:00
FocalGradient {
gradient: Gradient,
focal_point: f32,
},
Bitmap {
id: CharacterId,
matrix: Matrix,
is_smoothed: bool,
is_repeating: bool,
},
2016-08-29 07:51:32 +00:00
}
#[derive(Debug,PartialEq)]
pub struct Gradient {
pub spread: GradientSpread,
pub interpolation: GradientInterpolation,
pub records: Vec<GradientRecord>,
}
#[derive(Debug,PartialEq)]
pub enum GradientSpread {
Pad,
Reflect,
Repeat,
}
#[derive(Debug,PartialEq)]
pub enum GradientInterpolation {
RGB,
LinearRGB,
}
#[derive(Debug,PartialEq)]
pub struct GradientRecord {
pub ratio: u8,
pub color: Color,
}
#[derive(Debug,PartialEq)]
pub struct LineStyle {
pub width: u16, // Twips
pub color: Color,
}
// TODO: LineStyle2.
#[derive(Debug,PartialEq)]
pub enum LineCapStyle {
Round,
None,
Square,
}
#[derive(Debug,PartialEq)]
pub enum LineJoinStyle {
Round,
Bevel,
Miter(f32),
2016-08-29 21:00:51 +00:00
}