SWC 2 SWF
なんとなく
♥0 |
Line 186 |
Modified 2011-06-10 00:39:58 |
MIT License
archived:2017-03-20 17:10:45
ActionScript3 source code
/**
* Copyright zahir ( http://wonderfl.net/user/zahir )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3quH
*/
package {
import flash.net.FileReference;
import flash.events.MouseEvent;
import flash.utils.ByteArray;
import flash.text.TextField;
import flash.display.Sprite;
public class FlashTest extends Sprite {
private var load:SWFLoadButton;
private var save:ButtonBase;
private var saveFlag:Boolean = false;
private var t:TextField;
private var bytes:ByteArray;
private var fr:FileReference;
private var fileName:String;
public function FlashTest() {
// write as3 code here..
addChild( load = new SWFLoadButton() );
addChild( save = new ButtonBase( "save" ) );
load.x = load.y = save.y = 8;
save.x = load.x + load.width + 8;
addChild( t = new TextField() );
t.autoSize = "left";
t.x = 8;
t.y = load.y + load.height + 8;
bytes = new ByteArray();
load.addEventListener( SWFLoadEvent.COMPLETE, complete );
save.addEventListener( MouseEvent.CLICK, onSave );
}
private function complete( event:SWFLoadEvent ):void
{
fileName = event.name;
var ba:ByteArray = event.bytes;
var check:String = ba.readUTFBytes(1);
ba.position = 0;
if( check == "C" )
{
saveFlag = true;
t.appendText( "format " + ba.readUTFBytes(3) + "\n");
var ver:int = ba.readByte();
t.appendText( "ver." + ver + "\n");
var len:uint = ba.readUnsignedInt();
t.appendText( "length " + len + " byte\n" );
var zip:ByteArray = new ByteArray();
ba.readBytes( zip );
zip.uncompress();
zip.position = 0;
bytes.length = 0;
bytes.writeUTFBytes("FWS");
bytes.writeByte( ver );
bytes.writeUnsignedInt( len );
bytes.writeBytes( zip );
}else
{
saveFlag = false;
}
}
private function onSave( event:MouseEvent ):void
{
if( !saveFlag ) return;
fr = fr || new FileReference();
fr.save( bytes, fileName + "(unzip).swf" );
}
}
}
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.Graphics;
import flash.text.TextField;
import flash.display.Sprite;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.utils.IDataInput;
import flash.utils.ByteArray;
import flash.net.URLLoader;
class ButtonBase extends Sprite
{
private var t:TextField;
private var w:int;
private var h:int;
private var g:Graphics;
private var overFlg:Boolean = false;
public function ButtonBase( txt:String )
{
addChild( t = new TextField() );
t.autoSize = "left";
t.mouseEnabled = false;
buttonMode = true;
text = txt;
g = graphics;
draw( 0xFFFFFF, 0x666666 );
addEventListener( MouseEvent.MOUSE_OVER, onOver );
addEventListener( MouseEvent.MOUSE_DOWN, onDown );
}
private function onOver( mouseEvent:MouseEvent ):void
{
stage.addEventListener( MouseEvent.MOUSE_OUT, onOut );
overFlg = true;
draw( 0xCCCCCC, 0x666666 );
}
private function onOut( mouseEvent:MouseEvent ):void
{
stage.removeEventListener( MouseEvent.MOUSE_OUT, onOut );
overFlg = false;
draw( 0xFFFFFF, 0x666666 );
}
private function onDown( mouseEvent:MouseEvent ):void
{
stage.addEventListener( MouseEvent.MOUSE_UP, onUp );
draw( 0xFFFFFF, 0x0099FF );
}
private function onUp( mouseEvent:MouseEvent ):void
{
stage.removeEventListener( MouseEvent.MOUSE_UP, onUp );
if( overFlg )
{
draw( 0xCCCCCC, 0x666666 );
}else{
draw( 0xFFFFFF, 0x666666 );
}
}
public function get text():String
{
return t.text;
}
public function set text( txt:String ):void
{
t.text = txt;
w = t.width + 16;
h = t.height + 5;
t.x = 8;
t.y = 2.5;
}
public function draw( color:uint, stroke:uint):void
{
g.clear();
g.lineStyle( 1, stroke);
g.beginFill( color );
g.drawRect( 0,0, w,h );
g.endFill();
}
}
class SWFLoadButton extends ButtonBase
{
private const FILTER:Array = [ new FileFilter("load swf", "*.swf;*.swc") ];
private var fr:FileReference;
private var l:URLLoader;
public function SWFLoadButton()
{
super("load swf || swc");
fr = new FileReference();
l = new URLLoader();
addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick( event:MouseEvent ):void
{
fr.addEventListener(Event.SELECT, onSelect);
fr.browse( FILTER );
}
private function onSelect( event:Event ):void
{
fr.removeEventListener(Event.SELECT, onSelect);
fr.addEventListener(Event.COMPLETE, onLoaded );
fr.load();
}
private function onLoaded( event:Event ):void
{
fr.removeEventListener(Event.COMPLETE, onLoaded );
this.dispatchEvent( new SWFLoadEvent(SWFLoadEvent.COMPLETE, fr.data, fr.name) );
}
}
class SWFLoadEvent extends Event
{
public static const COMPLETE:String = "swf_load_complete";
protected var _bytes:ByteArray;
public function get bytes():ByteArray
{
return _bytes;
}
public var name:String = "";
public function SWFLoadEvent( type:String, inputData:IDataInput, name:String, bubbles:Boolean = false, cancelable:Boolean = false )
{
super( type, bubbles, cancelable );
_bytes = new ByteArray();
inputData.readBytes( _bytes );
this.name = name;
}
}