avm2: Added a bunch of missing filter classes

This commit is contained in:
Nathan Adams 2023-02-04 03:20:03 +01:00
parent 42f3ee923f
commit 7476b3b0e0
6 changed files with 219 additions and 12 deletions

View File

@ -957,10 +957,10 @@ pub fn apply_filter<'gc>(
Namespace::package("flash.filters"),
"GradientGlowFilter",
))?;
let shader_filter = activation.resolve_class(&Multiname::new(
Namespace::package("flash.filters"),
"ShaderFilter",
))?;
// let shader_filter = activation.resolve_class(&Multiname::new(
// Namespace::package("flash.filters"),
// "ShaderFilter",
// ))?;
let filter = if filter.is_of_type(color_matrix_filter, activation) {
let mut matrix = [0.0; 20];
if let Some(object) = filter
@ -1073,14 +1073,14 @@ pub fn apply_filter<'gc>(
"with gradient glow filter"
);
Filter::default()
} else if filter.is_of_type(shader_filter, activation) {
avm2_stub_method!(
activation,
"flash.display.BitmapData",
"applyFilter",
"with shader filter"
);
Filter::default()
// } else if filter.is_of_type(shader_filter, activation) {
// avm2_stub_method!(
// activation,
// "flash.display.BitmapData",
// "applyFilter",
// "with shader filter"
// );
// Filter::default()
} else {
tracing::error!("BitmapData.applyFilter received unknown filter");
Filter::default()

View File

@ -0,0 +1,61 @@
package flash.filters {
public final class BevelFilter extends BitmapFilter {
public var angle : Number;
public var blurX : Number;
public var blurY : Number;
public var distance : Number;
public var highlightAlpha : Number;
public var highlightColor : uint;
public var knockout : Boolean;
public var quality : int;
public var shadowAlpha : Number;
public var shadowColor : uint;
public var strength : Number;
public var type : String;
public function BevelFilter(
distance:Number = 4.0,
angle:Number = 45,
highlightColor:uint = 0xFFFFFF,
highlightAlpha:Number = 1.0,
shadowColor:uint = 0x000000,
shadowAlpha:Number = 1.0,
blurX:Number = 4.0,
blurY:Number = 4.0,
strength:Number = 1,
quality:int = 1,
type:String = "inner",
knockout:Boolean = false
) {
this.angle = angle;
this.blurX = blurX;
this.blurY = blurY;
this.distance = distance;
this.highlightAlpha = highlightAlpha;
this.highlightColor = highlightColor;
this.knockout = knockout;
this.quality = quality;
this.shadowAlpha = shadowAlpha;
this.shadowColor = shadowColor;
this.strength = strength;
this.type = type;
}
override public function clone(): BitmapFilter {
return new BevelFilter(
this.distance,
this.angle,
this.highlightColor,
this.highlightAlpha,
this.shadowColor,
this.shadowAlpha,
this.blurX,
this.blurY,
this.strength,
this.quality,
this.type,
this.knockout
);
}
}
}

View File

@ -0,0 +1,39 @@
package flash.filters {
public final class ConvolutionFilter extends BitmapFilter {
public var alpha : Number;
public var bias : Number;
public var clamp : Boolean;
public var color : uint;
public var divisor : Number;
public var matrix : Array;
public var matrixX : Number;
public var matrixY : Number;
public var preserveAlpha : Boolean;
public function ConvolutionFilter(
matrixX:Number = 0,
matrixY:Number = 0,
matrix:Array = null,
divisor:Number = 1.0,
bias:Number = 0.0,
preserveAlpha:Boolean = true,
clamp:Boolean = true,
color:uint = 0,
alpha:Number = 0.0
) {
this.alpha = alpha;
this.bias = bias;
this.clamp = clamp;
this.color = color;
this.divisor = divisor;
this.matrix = matrix;
this.matrixX = matrixX;
this.matrixY = matrixY;
this.preserveAlpha = preserveAlpha;
}
override public function clone(): BitmapFilter {
return new ConvolutionFilter(this.matrixX, this.matrixY, this.matrixull, this.divisor, this.bias, this.preserveAlpharue, this.clamprue, this.color, this.alpha);
}
}
}

View File

@ -0,0 +1,57 @@
package flash.filters {
public final class GradientBevelFilter extends BitmapFilter {
public var alphas : Array;
public var angle : Number;
public var blurX : Number;
public var blurY : Number;
public var colors : Array;
public var distance : Number;
public var knockout : Boolean;
public var quality : int;
public var ratios : Array;
public var strength : Number;
public var type : String;
public function GradientBevelFilter(
distance:Number = 4.0,
angle:Number = 45,
colors:Array = null,
alphas:Array = null,
ratios:Array = null,
blurX:Number = 4.0,
blurY:Number = 4.0,
strength:Number = 1,
quality:int = 1,
type:String = "inner",
knockout:Boolean = false
) {
this.distance = distance;
this.angle = angle;
this.colors = colors;
this.alphas = alphas;
this.ratios = ratios;
this.blurX = blurX;
this.blurY = blurY;
this.strength = strength;
this.quality = quality;
this.type = type;
this.knockout = knockout;
}
override public function clone(): BitmapFilter {
return new GradientBevelFilter(
this.distance,
this.angle,
this.colors,
this.alphas,
this.ratios,
this.blurX,
this.blurY,
this.strength,
this.quality,
this.type,
this.knockout
);
}
}
}

View File

@ -0,0 +1,46 @@
package flash.filters {
public final class GradientGlowFilter extends BitmapFilter {
public var alphas : Array;
public var angle : Number;
public var blurX : Number;
public var blurY : Number;
public var colors : Array;
public var distance : Number;
public var knockout : Boolean;
public var quality : int;
public var ratios : Array;
public var strength : Number;
public var type : String;
public function GradientGlowFilter(
distance:Number = 4.0,
angle:Number = 45,
colors:Array = null,
alphas:Array = null,
ratios:Array = null,
blurX:Number = 4.0,
blurY:Number = 4.0,
strength:Number = 1,
quality:int = 1,
type:String = "inner",
knockout:Boolean = false
)
{
this.distance = distance;
this.angle = angle;
this.colors = colors;
this.alphas = alphas;
this.ratios = ratios;
this.blurX = blurX;
this.blurY = blurY;
this.strength = strength;
this.quality = quality;
this.type = type;
this.knockout = knockout;
}
override public function clone(): BitmapFilter {
return new GradientGlowFilter(this.distance, this.angle, this.colors, this.alphas, this.ratios, this.blurX, this.blurY, this.strength, this.quality, this.type, this.knockout);
}
}
}

View File

@ -133,12 +133,16 @@ include "flash/errors/StackOverflowError.as"
include "flash/filters/BitmapFilter.as"
include "flash/filters/BitmapFilterQuality.as"
include "flash/filters/BitmapFilterType.as"
include "flash/filters/BevelFilter.as"
include "flash/filters/ConvolutionFilter.as"
include "flash/filters/GradientBevelFilter.as"
include "flash/filters/BlurFilter.as"
include "flash/filters/ColorMatrixFilter.as"
include "flash/filters/DisplacementMapFilter.as"
include "flash/filters/DisplacementMapFilterMode.as"
include "flash/filters/DropShadowFilter.as"
include "flash/filters/GlowFilter.as"
include "flash/filters/GradientGlowFilter.as"
include "flash/geom/ColorTransform.as"
include "flash/geom/Matrix.as"