📄 colorshortcuts.as
字号:
package caurina.transitions.properties {
/**
* properties.ColorShortcuts
* List of default special color properties (normal and splitter properties) for the Tweener class
* The function names are strange/inverted because it makes for easier debugging (alphabetic order). They're only for internal use (on this class) anyways.
*
* @author Zeh Fernando, Nate Chatellier, Arthur Debert
* @version 1.0.0
*/
import flash.geom.ColorTransform;
import flash.filters.ColorMatrixFilter;
import caurina.transitions.Tweener;
import caurina.transitions.AuxFunctions;
public class ColorShortcuts {
// Sources:
// http://www.graficaobscura.com/matrix/index.html
// And mario Klingemann's ColorMatrix class as mentioned on the credits:
// http://www.quasimondo.com/archives/000565.php
// Defines luminance using sRGB luminance
private static var LUMINANCE_R:Number = 0.212671;
private static var LUMINANCE_G:Number = 0.715160;
private static var LUMINANCE_B:Number = 0.072169;
/**
* There's no constructor.
*/
public function ColorShortcuts () {
trace ("This is an static class and should not be instantiated.")
}
/**
* Registers all the special properties to the Tweener class, so the Tweener knows what to do with them.
*/
public static function init(): void {
// Normal properties
Tweener.registerSpecialProperty("_color_ra", _oldColor_property_get, _oldColor_property_set, ["redMultiplier"]);
Tweener.registerSpecialProperty("_color_rb", _color_property_get, _color_property_set, ["redOffset"]);
Tweener.registerSpecialProperty("_color_ga", _oldColor_property_get, _oldColor_property_set, ["greenMultiplier"]);
Tweener.registerSpecialProperty("_color_gb", _color_property_get, _color_property_set, ["greenOffset"]);
Tweener.registerSpecialProperty("_color_ba", _oldColor_property_get, _oldColor_property_set, ["blueMultiplier"]);
Tweener.registerSpecialProperty("_color_bb", _color_property_get, _color_property_set, ["blueOffset"]);
Tweener.registerSpecialProperty("_color_aa", _oldColor_property_get, _oldColor_property_set, ["alphaMultiplier"]);
Tweener.registerSpecialProperty("_color_ab", _color_property_get, _color_property_set, ["alphaOffset"]);
Tweener.registerSpecialProperty("_color_redMultiplier", _color_property_get, _color_property_set, ["redMultiplier"]);
Tweener.registerSpecialProperty("_color_redOffset", _color_property_get, _color_property_set, ["redOffset"]);
Tweener.registerSpecialProperty("_color_greenMultiplier", _color_property_get, _color_property_set, ["greenMultiplier"]);
Tweener.registerSpecialProperty("_color_greenOffset", _color_property_get, _color_property_set, ["greenOffset"]);
Tweener.registerSpecialProperty("_color_blueMultiplier", _color_property_get, _color_property_set, ["blueMultiplier"]);
Tweener.registerSpecialProperty("_color_blueOffset", _color_property_get, _color_property_set, ["blueOffset"]);
Tweener.registerSpecialProperty("_color_alphaMultiplier", _color_property_get, _color_property_set, ["alphaMultiplier"]);
Tweener.registerSpecialProperty("_color_alphaOffset", _color_property_get, _color_property_set, ["alphaOffset"]);
// Normal splitter properties
Tweener.registerSpecialPropertySplitter("_color", _color_splitter);
Tweener.registerSpecialPropertySplitter("_colorTransform", _colorTransform_splitter);
// Color changes that depend on the ColorMatrixFilter
Tweener.registerSpecialProperty("_brightness", _brightness_get, _brightness_set, [false]);
Tweener.registerSpecialProperty("_tintBrightness", _brightness_get, _brightness_set, [true]);
Tweener.registerSpecialProperty("_contrast", _contrast_get, _contrast_set);
Tweener.registerSpecialProperty("_hue", _hue_get, _hue_set);
Tweener.registerSpecialProperty("_saturation", _saturation_get, _saturation_set, [false]);
Tweener.registerSpecialProperty("_dumbSaturation", _saturation_get, _saturation_set, [true]);
}
// ==================================================================================================================================
// PROPERTY GROUPING/SPLITTING functions --------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------------
// _color
/**
* Splits the _color parameter into specific color variables
*
* @param p_value Number The original _color value
* @return Array An array containing the .name and .value of all new properties
*/
public static function _color_splitter (p_value:*, p_parameters:Array):Array {
var nArray:Array = new Array();
if (p_value == null) {
// No parameter passed, so just resets the color
nArray.push({name:"_color_redMultiplier", value:1});
nArray.push({name:"_color_redOffset", value:0});
nArray.push({name:"_color_greenMultiplier", value:1});
nArray.push({name:"_color_greenOffset", value:0});
nArray.push({name:"_color_blueMultiplier", value:1});
nArray.push({name:"_color_blueOffset", value:0});
} else {
// A color tinting is passed, so converts it to the object values
nArray.push({name:"_color_redMultiplier", value:0});
nArray.push({name:"_color_redOffset", value:AuxFunctions.numberToR(p_value)});
nArray.push({name:"_color_greenMultiplier", value:0});
nArray.push({name:"_color_greenOffset", value:AuxFunctions.numberToG(p_value)});
nArray.push({name:"_color_blueMultiplier", value:0});
nArray.push({name:"_color_blueOffset", value:AuxFunctions.numberToB(p_value)});
}
return nArray;
}
// ----------------------------------------------------------------------------------------------------------------------------------
// _colorTransform
/**
* Splits the _colorTransform parameter into specific color variables
*
* @param p_value Number The original _colorTransform value
* @return Array An array containing the .name and .value of all new properties
*/
public static function _colorTransform_splitter (p_value:Object, p_parameters:Array):Array {
var nArray:Array = new Array();
if (p_value == null) {
// No parameter passed, so just resets the color
nArray.push({name:"_color_redMultiplier", value:1});
nArray.push({name:"_color_redOffset", value:0});
nArray.push({name:"_color_greenMultiplier", value:1});
nArray.push({name:"_color_greenOffset", value:0});
nArray.push({name:"_color_blueMultiplier", value:1});
nArray.push({name:"_color_blueOffset", value:0});
} else {
// A color transformation object is passed, so converts it to the object values
nArray.push({name:"_color_redMultiplier", value:p_value.redMultiplier});
nArray.push({name:"_color_redOffset", value:p_value.redOffset});
nArray.push({name:"_color_blueMultiplier", value:p_value.blueMultiplier});
nArray.push({name:"_color_blueOffset", value:p_value.blueOffset});
nArray.push({name:"_color_greenMultiplier", value:p_value.greenMultiplier});
nArray.push({name:"_color_greenOffset", value:p_value.greenOffset});
nArray.push({name:"_color_alphaMultiplier", value:p_value.alphaMultiplier});
nArray.push({name:"_color_alphaOffset", value:p_value.alphaOffset});
}
return nArray;
}
// ==================================================================================================================================
// NORMAL SPECIAL PROPERTY functions ------------------------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------------------------------------------------------
// _color_*
/**
* _color_*
* Generic function for the ra/rb/etc components of the deprecated colorTransform object
*/
public static function _oldColor_property_get (p_obj:Object, p_parameters:Array, p_extra:Object = null):Number {
return p_obj.transform.colorTransform[p_parameters[0]] * 100;
}
public static function _oldColor_property_set (p_obj:Object, p_value:Number, p_parameters:Array, p_extra:Object = null): void {
var tf:ColorTransform = p_obj.transform.colorTransform;
tf[p_parameters[0]] = p_value / 100;
p_obj.transform.colorTransform = tf;
}
/**
* _color_*
* Generic function for the redMultiplier/redOffset/etc components of the new colorTransform
*/
public static function _color_property_get (p_obj:Object, p_parameters:Array, p_extra:Object = null):Number {
return p_obj.transform.colorTransform[p_parameters[0]];
}
public static function _color_property_set (p_obj:Object, p_value:Number, p_parameters:Array, p_extra:Object = null): void {
var cfm:ColorTransform = p_obj.transform.colorTransform;
cfm[p_parameters[0]] = p_value;
p_obj.transform.colorTransform = cfm;
}
// ----------------------------------------------------------------------------------------------------------------------------------
// Special coloring
/**
* _brightness
* Brightness of an object: -1 -> [0] -> +1
*/
public static function _brightness_get (p_obj:Object, p_parameters:Array, p_extra:Object = null):Number {
var isTint:Boolean = p_parameters[0];
/*
// Using ColorMatrix:
var mtx:Array = getObjectMatrix(p_obj);
var mc:Number = 1 - ((mtx[0] + mtx[6] + mtx[12]) / 3); // Brightness as determined by the main channels
var co:Number = (mtx[4] + mtx[9] + mtx[14]) / 3; // Brightness as determined by the offset channels
*/
var cfm:ColorTransform = p_obj.transform.colorTransform;
var mc:Number = 1 - ((cfm.redMultiplier + cfm.greenMultiplier + cfm.blueMultiplier) / 3); // Brightness as determined by the main channels
var co:Number = (cfm.redOffset + cfm.greenOffset + cfm.blueOffset) / 3;
if (isTint) {
// Tint style
//return (mc+(co/255))/2;
return co > 0 ? co / 255 : -mc;
} else {
// Native, Flash "Adjust Color" and Photoshop style
return co / 100;
}
}
public static function _brightness_set (p_obj:Object, p_value:Number, p_parameters:Array, p_extra:Object = null): void {
//var mtx:Array = getObjectMatrix(p_obj);
var isTint:Boolean = p_parameters[0];
var mc:Number; // Main channel
var co:Number; // Channel offset
if (isTint) {
// Tint style
mc = 1 - Math.abs(p_value);
co = p_value > 0 ? Math.round(p_value*255) : 0;
} else {
// Native, Flash "Adjust Color" and Photoshop style
mc = 1;
co = Math.round(p_value*100);
}
/*
// Using ColorMatrix:
var mtx:Array = [
mc, cc, cc, cc, co,
cc, mc, cc, cc, co,
cc, cc, mc, cc, co,
0, 0, 0, 1, 0
];
setObjectMatrix(p_obj, mtx);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -