core: Move `F64Extension` to `avm1`
Since it's only used there. Also rename the trait to `Clamp`.
This commit is contained in:
parent
fe23eb0553
commit
203788c1c8
|
@ -9,6 +9,7 @@ mod property_decl;
|
|||
|
||||
mod activation;
|
||||
mod callable_value;
|
||||
mod clamp;
|
||||
mod debug;
|
||||
mod error;
|
||||
mod fscommand;
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
pub trait Clamp {
|
||||
fn clamp_also_nan(self, min: Self, max: Self) -> Self;
|
||||
|
||||
fn clamp_to_i32(self) -> i32;
|
||||
}
|
||||
|
||||
// Extend the f64 type.
|
||||
impl Clamp for f64 {
|
||||
/// A value bounded by a minimum and a maximum.
|
||||
///
|
||||
/// `(f64::NAN).clamp(min, max)` causes the code to propagate NaN rather
|
||||
/// than returning either `max` or `min`. Instead this function returns
|
||||
/// the smallest value from the numbers provided.
|
||||
#[allow(clippy::manual_clamp)]
|
||||
fn clamp_also_nan(self, min: Self, max: Self) -> Self {
|
||||
self.max(min).min(max)
|
||||
}
|
||||
|
||||
fn clamp_to_i32(self) -> i32 {
|
||||
// Clamp NaN and out-of-range (including infinite) values to `i32::MIN`.
|
||||
if self >= i32::MIN.into() && self <= i32::MAX.into() {
|
||||
self as i32
|
||||
} else {
|
||||
i32::MIN
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,13 +1,13 @@
|
|||
//! Array class
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::function::{Executable, FunctionObject};
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{ArrayObject, Object, TObject, Value};
|
||||
use crate::ecma_conversions::f64_to_wrapping_i32;
|
||||
use crate::string::AvmString;
|
||||
use crate::types::F64Extension;
|
||||
use bitflags::bitflags;
|
||||
use gc_arena::MutationContext;
|
||||
use std::cmp::Ordering;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
//! flash.filters.ConvolutionFilter object
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::object::convolution_filter::ConvolutionFilterObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{ArrayObject, Object, TObject, Value};
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
const PROTO_DECLS: &[Declaration] = declare_properties! {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::function::{Executable, FunctionObject};
|
||||
use crate::avm1::object::NativeObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{Activation, Error, Object, ScriptObject, TObject, Value};
|
||||
use crate::locale::{get_current_date_time, get_timezone};
|
||||
use crate::string::AvmString;
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::{Collect, GcCell, MutationContext};
|
||||
use std::fmt;
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
//! flash.filters.DisplacementMapFilter object
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::object::displacement_map_filter::DisplacementMapFilterObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{Object, TObject, Value};
|
||||
use crate::string::{AvmString, WStr};
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
const PROTO_DECLS: &[Declaration] = declare_properties! {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
//! flash.filters.DropShadowFilter object
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::object::drop_shadow_filter::DropShadowFilterObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{Object, TObject, Value};
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
const PROTO_DECLS: &[Declaration] = declare_properties! {
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
//! flash.filters.GlowFilter object
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::object::glow_filter::GlowFilterObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{Object, TObject, Value};
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
const PROTO_DECLS: &[Declaration] = declare_properties! {
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
//! flash.filters.GradientBevelFilter object
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::globals::bevel_filter::BevelFilterType;
|
||||
use crate::avm1::object::gradient_bevel_filter::GradientBevelFilterObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{ArrayObject, Object, TObject, Value};
|
||||
use crate::string::{AvmString, WStr};
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
const PROTO_DECLS: &[Declaration] = declare_properties! {
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
//! flash.filters.GradientGlowFilter object
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::globals::bevel_filter::BevelFilterType;
|
||||
use crate::avm1::object::gradient_glow_filter::GradientGlowFilterObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{ArrayObject, Object, TObject, Value};
|
||||
use crate::string::{AvmString, WStr};
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
const PROTO_DECLS: &[Declaration] = declare_properties! {
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
//! `Number` class impl
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::function::{Executable, FunctionObject};
|
||||
use crate::avm1::object::value_object::ValueObject;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{Object, TObject, Value};
|
||||
use crate::string::AvmString;
|
||||
use crate::types::F64Extension;
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
const PROTO_DECLS: &[Declaration] = declare_properties! {
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
//! TODO: Sound position, transform, loadSound
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::property_decl::{define_properties_on, Declaration};
|
||||
use crate::avm1::{Object, ScriptObject, SoundObject, TObject, Value};
|
||||
use crate::backend::navigator::Request;
|
||||
use crate::character::Character;
|
||||
use crate::display_object::{SoundTransform, TDisplayObject};
|
||||
use crate::types::F64Extension;
|
||||
use crate::{avm1_stub, avm_warn};
|
||||
use gc_arena::MutationContext;
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
//! AVM1 object type to represent objects on the stage.
|
||||
|
||||
use crate::avm1::activation::Activation;
|
||||
use crate::avm1::clamp::Clamp;
|
||||
use crate::avm1::error::Error;
|
||||
use crate::avm1::property_map::PropertyMap;
|
||||
use crate::avm1::{Object, ObjectPtr, ScriptObject, TObject, Value};
|
||||
|
@ -10,7 +11,7 @@ use crate::display_object::{
|
|||
DisplayObject, EditText, MovieClip, TDisplayObject, TDisplayObjectContainer,
|
||||
};
|
||||
use crate::string::{AvmString, WStr};
|
||||
use crate::types::{F64Extension, Percent};
|
||||
use crate::types::Percent;
|
||||
use gc_arena::{Collect, GcCell, MutationContext};
|
||||
use std::fmt;
|
||||
|
||||
|
|
|
@ -60,31 +60,3 @@ impl From<Degrees> for f64 {
|
|||
degrees.0
|
||||
}
|
||||
}
|
||||
|
||||
/// Extends the f64 type.
|
||||
pub trait F64Extension {
|
||||
fn clamp_also_nan(self, min: f64, max: f64) -> f64;
|
||||
|
||||
fn clamp_to_i32(self) -> i32;
|
||||
}
|
||||
|
||||
impl F64Extension for f64 {
|
||||
/// A value bounded by a minimum and a maximum.
|
||||
///
|
||||
/// `(f64::NAN).clamp(min, max)` causes the code to propagate NaN rather
|
||||
/// than returning either `max` or `min`. Instead this function returns
|
||||
/// the smallest value from the numbers provided.
|
||||
#[allow(clippy::manual_clamp)]
|
||||
fn clamp_also_nan(self, min: f64, max: f64) -> f64 {
|
||||
self.max(min).min(max)
|
||||
}
|
||||
|
||||
fn clamp_to_i32(self) -> i32 {
|
||||
// Clamp NaN and out-of-range (including infinite) values to `i32::MIN`.
|
||||
if self >= i32::MIN.into() && self <= i32::MAX.into() {
|
||||
self as i32
|
||||
} else {
|
||||
i32::MIN
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue