import { ASObject, Errors, checkNullParameter } from '@awayfl/avm2'; import { Matrix } from './Matrix'; import { ColorTransform } from './ColorTransform'; import { Rectangle } from './Rectangle'; import { Matrix3D } from './Matrix3D'; import { release, notImplemented } from '@awayfl/swf-loader'; import { PerspectiveProjection } from './PerspectiveProjection'; import { DisplayObject } from '../display/DisplayObject'; import { Transform as AwayTransform } from '@awayjs/core'; import { SecurityDomain } from '../SecurityDomain'; /** * Copyright 2014 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Class: Transform export class Transform extends ASObject { private _adaptee: AwayTransform; static classInitializer: any = null; public get adaptee(): AwayTransform { return this._adaptee; } constructor (displayObjectAdaptee: DisplayObject | AwayTransform) { super(); if (!displayObjectAdaptee) this.sec.throwError('ArgumentError', Errors.NullPointerError, 'displayObject'); this._adaptee = (displayObjectAdaptee instanceof AwayTransform) ? displayObjectAdaptee : new AwayTransform(); } public get matrix(): Matrix { return new ( this.sec).flash.geom.Matrix(this._adaptee.matrix); } public set matrix(value: Matrix) { this._adaptee.matrix = value.adaptee; } public get colorTransform(): ColorTransform { return new ( this.sec).flash.geom.ColorTransform(this._adaptee.colorTransform); } public set colorTransform(value: ColorTransform) { this._adaptee.colorTransform = value.adaptee; } public get concatenatedMatrix(): Matrix { return new ( this.sec).flash.geom.Matrix(this._adaptee.matrix); } public get concatenatedColorTransform(): ColorTransform { release || notImplemented('public flash.geom.Transform::get concatenatedColorTransform'); return new ( this.sec).flash.geom.ColorTransform(this._adaptee.colorTransform); } public get pixelBounds(): Rectangle { // Only somewhat implemented because this is largely untested. release || notImplemented('public flash.geom.Transform::get pixelBounds'); return new ( this.sec).flash.geom.Rectangle(this._adaptee.pixelBounds); } public get matrix3D(): Matrix3D { return new ( this.sec).flash.geom.Matrix3D(this._adaptee.matrix3D); } public set matrix3D(m: Matrix3D) { release || notImplemented('public flash.geom.Transform::set matrix3D'); } public getRelativeMatrix3D(relativeTo: DisplayObject): Matrix3D { checkNullParameter(relativeTo, 'relativeTo', this.sec); release || notImplemented('public flash.geom.Transform::getRelativeMatrix3D'); // TODO: actually calculate the relative matrix. return new ( this.sec).flash.geom.Matrix3D(this._adaptee.matrix3D); } public get perspectiveProjection(): PerspectiveProjection { release || notImplemented('public flash.geom.Transform::get perspectiveProjection'); return new PerspectiveProjection(); } public set perspectiveProjection(projection: PerspectiveProjection) { release || notImplemented('public flash.geom.Transform::set perspectiveProjection'); } }