package com.exanimo.utils { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.PixelSnapping; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.utils.Dictionary; /** * * * * @langversion ActionScript 3 * @playerversion Flash 9.0.0 * * @author Matthew Tretter * @since 2008.10.31 * */ public class BitmapUtil { /** * * */ public function BitmapUtil() { throw new Error('BitmapUtil contains static utility methods and cannot be instantialized.'); } // // // Bmpify // // private static var _hiddenChildren:Dictionary = new Dictionary(true); private static var _isBmpified:Dictionary = new Dictionary(true); private static var _bmpifiedContent:Dictionary = new Dictionary(true); private static var _bmpifyIsUndoable:Dictionary = new Dictionary(true); /** * * * */ public static function flattenContents(sprite:DisplayObjectContainer, undoable:Boolean = false):void { if (BitmapUtil._isBmpified[sprite]) return; var bounds:Rectangle = sprite.getBounds(sprite); var bmpData:BitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00000000); bmpData.draw(sprite, new Matrix(1, 0, 0, 1, -bounds.x, -bounds.y)); var bmp:Bitmap = new Bitmap(bmpData, PixelSnapping.AUTO, true); var i:uint; var obj:DisplayObject; if (undoable) { BitmapUtil._hiddenChildren[sprite] = new Dictionary(true); for (i = 0; i < sprite.numChildren; i++) { obj = sprite.getChildAt(0); obj.visible = false; BitmapUtil._hiddenChildren[sprite][obj] = null; } } else { while (sprite.numChildren) { sprite.removeChildAt(0); } } bmp.x = bounds.x; bmp.y = bounds.y; sprite.addChild(bmp); BitmapUtil._bmpifiedContent[sprite] = bmp; BitmapUtil._bmpifyIsUndoable[sprite] = undoable; BitmapUtil._isBmpified[sprite] = true; } /** * * * */ public static function unflattenContents(sprite:DisplayObjectContainer):void { if (BitmapUtil._isBmpified[sprite]) { if (!BitmapUtil._bmpifyIsUndoable[sprite]) { throw new Error(sprite + ' cannot be unflattened.'); } sprite.removeChild(BitmapUtil._bmpifiedContent[sprite]); for (var obj:Object in BitmapUtil._hiddenChildren[sprite]) { obj.visible = true; delete BitmapUtil._hiddenChildren[sprite][obj]; } delete BitmapUtil._hiddenChildren[sprite]; delete BitmapUtil._isBmpified[sprite]; delete BitmapUtil._bmpifiedContent[sprite]; delete BitmapUtil._bmpifyIsUndoable[sprite]; } } } }