Filter Workbench アプリケーションには、フィルターを作成するために各パネルによって使用されるクラスのセットが、使用可能なフィルターごとに 1 つずつ含まれます。 フィルターを選択すると、そのフィルターパネルに関連付けられた ActionScript コードが、適切なフィルターファクトリクラスのインスタンスを作成します (これらのクラスは、その目的が他のオブジェクトのインスタンスを作成することであり、実際の工場が個別の製品を製造することと類似しているので、「ファクトリクラス」と呼ばれます)。
パネルのプロパティ値を変更すると、パネルのコードがファクトリクラスの適切なメソッドを呼び出します。各ファクトリクラスには、パネルが適切なフィルターインスタンスの作成に使用する固有のメソッドが含まれます。 例えば、ぼかしフィルターを選択すると BlurFactory インスタンスが作成されます。 BlurFactory クラスには、希望の BlurFilter インスタンスを作成するために合わせて使用される 3 つのパラメーター
blurX
、
blurY
、
quality
を受け入れる
modifyFilter()
メソッドが含まれます。
private var _filter:BlurFilter;
public function modifyFilter(blurX:Number = 4, blurY:Number = 4, quality:int = 1):void
{
_filter = new BlurFilter(blurX, blurY, quality);
dispatchEvent(new Event(Event.CHANGE));
}
これに対して、畳み込みフィルターを選択した場合は、そのフィルターによって柔軟性が大幅に向上し、その結果、制御するプロパティが増えます。 ConvolutionFactory クラスでは、フィルターパネルで別の値を選択すると、次のコードが呼び出されます。
private var _filter:ConvolutionFilter;
public function modifyFilter(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):void
{
_filter = new ConvolutionFilter(matrixX, matrixY, matrix, divisor, bias, preserveAlpha, clamp, color, alpha);
dispatchEvent(new Event(Event.CHANGE));
}
いずれの場合でも、フィルター値が変化すると、ファクトリオブジェクトが
Event.CHANGE
イベントを送出し、フィルターの値が変更されたことをリスナーに通知します。フィルターされたコンテンツに実際にフィルターを適用する FilterWorkbenchController クラスは、そのイベントを待機して、フィルターの新しいコピーを取得し、フィルターされたコンテンツにそのコピーを再度適用する必要がある時期を確認します。
FilterWorkbenchController クラスは、各フィルターファクトリクラスに固有の詳細情報を認識する必要はありません。フィルターが変更され、フィルターのコピーにアクセスできるようになったことだけを認識する必要があります。これをサポートするために、アプリケーションの FilterWorkbenchController インスタンスがそのジョブを実行できるように、フィルターファクトリクラスが提供する必要がある動作を定義するインターフェイス、IFilterFactory がアプリケーションに含まれます。IFilterFactory は、FilterWorkbenchController クラスで使用される
getFilter ()
メソッドを定義します。
function getFilter():BitmapFilter;
getFilter()
インターフェイスメソッドの定義では、特定の種類のフィルターではなく、BitmapFilter インスタンスを返すことを指定しています。BitmapFilter クラスは、特定の種類のフィルターを定義するものではなく、 すべてのフィルタークラスを構築する際の基礎となるクラスです。 各フィルターファクトリクラスは、
getFilter()
メソッドの特定の実装を定義し、このメソッドで、構築したフィルターオブジェクトへの参照を返します。例えば、ConvolutionFactory クラスの簡略化したソースコードを次に示します。
public class ConvolutionFactory extends EventDispatcher implements IFilterFactory
{
// ------- Private vars -------
private var _filter:ConvolutionFilter;
...
// ------- IFilterFactory implementation -------
public function getFilter():BitmapFilter
{
return _filter;
}
...
}
ConvolutionFactory クラスによる
getFilter()
メソッドの実装では ConvolutionFilter インスタンスが返されますが、
getFilter()
を呼び出すどのオブジェクトも、必ずしもそれを認識していません。ConvolutionFactory が従う
getFilter()
メソッドの定義に応じて、いずれかの ActionScript フィルタークラスのインスタンスである任意の BitmapFilter インスタンスを返す必要があります。