topical media & game development

talk show tell print

actionscript-book-FilterWorkbench-com-example-programmingas3-filterWorkbench-GradientGlowFactory.ax

actionscript-book-FilterWorkbench-com-example-programmingas3-filterWorkbench-GradientGlowFactory.ax [swf] flex


  package 
  {
          //import com.example.programmingas3.filterWorkbench.ColorStringFormatter;
          //import com.example.programmingas3.filterWorkbench.GradientColor;
          //import com.example.programmingas3.filterWorkbench.IFilterFactory;
          
          import flash.events.Event;
          import flash.events.EventDispatcher;
          import flash.filters.BitmapFilter;
          import flash.filters.GradientGlowFilter;
          
          // ------- Events -------
          [Event(name="change", type="flash.events.Event")]
          
          
          public class @ax-actionscript-book-FilterWorkbench-com-example-programmingas3-filterWorkbench-GradientGlowFactory extends EventDispatcher implements actionscript_book_FilterWorkbench_com_example_programmingas3_filterWorkbench_IFilterFactory
          {
                  // ------- Private vars -------
                  private var _filter:GradientGlowFilter;
                  private var _paramString:String;
                  private var _colorsString:String;
                  private var _alphasString:String;
                  private var _ratiosString:String;
                  
                  
                  // ------- Constructor -------
                  public function @ax-actionscript-book-FilterWorkbench-com-example-programmingas3-filterWorkbench-GradientGlowFactory(distance:Number = 4,
                                                                                             angle:Number = 45,
                                                                                             combinedColors:Array = null,
                                                                                             blurX:Number = 4,
                                                                                             blurY:Number = 4,
                                                                                             strength:Number = 1,
                                                                                             quality:int = 1,
                                                                                             type:String = "inner",
                                                                                             knockout:Boolean = false)
                  {
                          if (combinedColors == null)
                          {
                                  combinedColors = getDefaultColors();
                          }
                          var colors:Array = new Array(combinedColors.length);
                          var alphas:Array = new Array(combinedColors.length);
                          var ratios:Array = new Array(combinedColors.length);
                          
                          separateColorParts(combinedColors, colors, alphas, ratios);
                          
                          _filter = new GradientGlowFilter(distance, angle, colors, alphas, ratios, blurX, blurY, strength, quality, type, knockout);
                          _paramString = buildParamString(distance, angle, blurX, blurY, strength, quality, type, knockout);
                          _colorsString = buildArrayString(colors, true);
                          _alphasString = buildArrayString(alphas);
                          _ratiosString = buildArrayString(ratios);
                  }
                  
                  
                  // ------- IFilterFactory implementation -------
                  public function getFilter():BitmapFilter
                  {
                          return _filter;
                  }
                  
                  
                  public function getCode():String
                  {
                          var result:String = "";
                          result += "import flash.filters.BitmapFilterQuality;\n";
                          result += "import flash.filters.BitmapFilterType;\n";
                          result += "import flash.filters.GradientGlowFilter;\n";
                          result += "\n";
                          result += "var colors:Array = [" + _colorsString + "];\n";
                          result += "var alphas:Array = [" + _alphasString + "];\n";
                          result += "var ratios:Array = [" + _ratiosString + "];\n";
                          result += "\n";
                          result += "var gradientGlow:GradientGlowFilter;\n";
                          result += "gradientGlow = new GradientGlowFilter(" + _paramString + ");\n";
                          result += "\n";
                          result += "myDisplayObject.filters = [gradientGlow];";
                          return result;
                  }
                  
                  
                  // ------- Public methods -------
                  public function modifyFilter(distance:Number = 4,
                                                                             angle:Number = 45,
                                                                             combinedColors:Array = null,
                                                                             blurX:Number = 4,
                                                                             blurY:Number = 4,
                                                                             strength:Number = 1,
                                                                             quality:int = 1,
                                                                             type:String = "inner",
                                                                             knockout:Boolean = false):void
                  {
                          if (combinedColors == null)
                          {
                                  combinedColors = getDefaultColors();
                          }
                          var colors:Array = new Array(combinedColors.length);
                          var alphas:Array = new Array(combinedColors.length);
                          var ratios:Array = new Array(combinedColors.length);
                          
                          separateColorParts(combinedColors, colors, alphas, ratios);
                          
                          _filter = new GradientGlowFilter(distance, angle, colors, alphas, ratios, blurX, blurY, strength, quality, type, knockout);
                          _paramString = buildParamString(distance, angle, blurX, blurY, strength, quality, type, knockout);
                          _colorsString = buildArrayString(colors, true);
                          _alphasString = buildArrayString(alphas);
                          _ratiosString = buildArrayString(ratios);
                          
                          dispatchEvent(new Event(Event.CHANGE));
                  }
                  
                  
                  // ------- Private methods -------
                  private function getDefaultColors():Array
                  {
                          return [new actionscript_book_FilterWorkbench_com_example_programmingas3_filterWorkbench_GradientColor(0xFFFFFF, 1, 0),
                                           new actionscript_book_FilterWorkbench_com_example_programmingas3_filterWorkbench_GradientColor(0xFF0000, .25, 128),
                                           new actionscript_book_FilterWorkbench_com_example_programmingas3_filterWorkbench_GradientColor(0x000000, 1, 255)];
                  }
                  
                  
                  // takeas an array of GradientColor objects and splits it into three arrays of colors, alphas, and ratios
                  // the destination arrays must be instantiated and sized before calling this method.
                  private function separateColorParts(source:Array, colorsDest:Array, alphasDest:Array, ratiosDest:Array):void
                  {
                          var numColors:int = source.length;
                          
                          for (var i:int = 0; i < numColors; i++)
                          {
                                  var gradientColor:actionscript_book_FilterWorkbench_com_example_programmingas3_filterWorkbench_GradientColor = source[i];
                                  
                                  colorsDest[i] = gradientColor.color;
                                  alphasDest[i] = gradientColor.alpha;
                                  ratiosDest[i] = gradientColor.ratio;
                          }
                  }
                  
                  
                  private function buildParamString(distance:Number,
                                                                                          angle:Number,
                                                                                          blurX:Number,
                                                                                          blurY:Number,
                                                                                          strength:Number,
                                                                                          quality:int,
                                                                                          type:String,
                                                                                          knockout:Boolean):String
                  {
                          var result:String = "\n\t\t" + distance.toString() + ",\n\t\t" + angle.toString() + ",\n\t\t";
                          result += "colors, alphas, ratios,\n\t\t";
                          result += blurX.toString() + ",\n\t\t" + blurY.toString() + ",\n\t\t" + strength.toString() + ",\n\t\t";
                          
                          switch (quality)
                          {
                                  case 1:
                                          result += "BitmapFilterQuality.LOW";
                                          break;
                                  case 2:
                                          result += "BitmapFilterQuality.MEDIUM";
                                          break;
                                  case 3:
                                          result += "BitmapFilterQuality.HIGH";
                                          break;
                          }
                          
                          result += ",\n\t\t";
                          
                          switch (type)
                          {
                                  case "inner":
                                          result += "BitmapFilterType.INNER";
                                          break;
                                  case "outer":
                                          result += "BitmapFilterType.OUTER";
                                          break;
                                  case "full":
                                          result += "BitmapFilterType.FULL";
                                          break;
                          }
                          
                          result += ",\n\t\t" + knockout.toString();
                          
                          return result;
                  }
                  
                  
                  private function buildArrayString(arr:Array, formatColor:Boolean = false):String
                  {
                          var len:int = arr.length;
                          var result:String = "";
                          
                          for (var i:int = 0; i < len; i++)
                          {
                                  if (i != 0)
                                  {
                                          result += ", ";
                                  }
                                  if (formatColor)
                                  {
                                          result += actionscript_book_FilterWorkbench_com_example_programmingas3_filterWorkbench_ColorStringFormatter.formatColorHex24(arr[i]);
                                  }
                                  else
                                  {
                                          result += arr[i].toString();
                                  }
                          }
                          
                          return result;
                  }
          }
  }


(C) Æliens 27/08/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.