FlashImp Flash Implosion new generation

28Апр/101

UINativeWindow

package ru.kozlovskij.air
{
	import flash.display.DisplayObject;
	import flash.display.DisplayObjectContainer;
	import flash.display.NativeWindow;
	import flash.display.NativeWindowInitOptions;
	import flash.events.Event;
 
	import mx.core.IUIComponent;
	import mx.events.FlexEvent;
	import mx.managers.WindowedSystemManager;
 
	/**
	 * Composition of <code>NativeWindow</code> and <code>IUIComponent</code>.
	 * 
	 * @author Aleksandr.Kozlovskiy
	 */	
	public class UINativeWindow extends NativeWindow
	{
		protected var systemManager:WindowedSystemManager;
		protected var childDisplayObject:IUIComponent;
		protected var rootDisplayObject:IUIComponent;
 
		/**
		 * After initialization <code>childDisplayObject</code> added to <code>systemManager</code>'s displaylist.
		 * 
		 * 
		 * @param initOptions:NativeWindowInitOptions - Analogically NativeWindow initOptions.
		 * @param rootDisplayObject:IUIComponent - Root Application or other IUIComponent implementation. Mast extends DisplayObject.
		 * @param childDisplayObject:IUIComponent - Container. Child Application or other IUIComponent implementation. Mast extends DisplayObject.
		 * 
		 */		
		public function UINativeWindow(initOptions:NativeWindowInitOptions,
									   rootDisplayObject:IUIComponent,
									   childDisplayObject:IUIComponent)
		{
			super(initOptions);
			this.rootDisplayObject = rootDisplayObject;
			this.childDisplayObject = childDisplayObject;
 
			addChildren();
 
			stage.addEventListener(Event.RESIZE, stageResizeHandler);
		}
 
		protected function addChildren():void
		{
			childDisplayObject.addEventListener(FlexEvent.CREATION_COMPLETE, childCreationCompleteHandler, false, 0, true);
			(stage.addChild(systemManager = new WindowedSystemManager(rootDisplayObject)) as DisplayObjectContainer)
				.addChild(childDisplayObject as DisplayObject);
 
			stageResizeHandler();
		}
 
		protected function childCreationCompleteHandler(e:FlexEvent):void
		{
			childDisplayObject.removeEventListener(FlexEvent.CREATION_COMPLETE, childCreationCompleteHandler);
			stageResizeHandler();
		}
 
 
		// ------------------ resize ----------------------- //
 
		protected function stageResizeHandler(e:Event = null):void
		{
			childDisplayObject.width = stage.stageWidth;
			childDisplayObject.height = stage.stageHeight;
		}
	}
}
Метки записи: , , , 1 комментарий
23Ноя/090

Pixel Bender batch compiler runner

Написал VBS скриптец для пакетной компиляции .pbk файлов. Работает только под окнами.

Как работает: Принимает пачку входящих параметров - [fullUrlFile.pbk ...], выбрасывает все, что не .pbk, для каждого вызывает компилятор.

Принимает необязательные параметры:

  • -pb-C:\url\to\pbutil.exe
  • -bin-C:\url\to\

Написано кривовато, ибо в VBS я на момент написания абсолютно ничего не смыслел.
Применять эту штуку удобно в случае, если мы пишем и отлаживаем код в Pixel Bender Toolkit, а самих кернелов (.pbk) в проекте много. Приходится либо вызывать компиляцию для каждого обновленного ручками из Pixel Bender Toolkit-а, либо, если пользуемся плагином для Eclipse под названием PBDT, то сохранять каждый pbk, не, что тоже долго и неприятно.

Решение для Eclipse/FB: Просто подключаем этот vbs-скрипт как екстернал-компилятор и указываем в параметрах папку, куда следует складывать готовые .pbj. И все обновившиеся кернелы скомпилятся при следующем билде.

Конкретика:

  • Создаем в Project > Properties > Builders > .. новый билдер, называем его PBBCR;
  • Заменяем свой .externalToolBuilders\PBBCR.launch на аналог из скачанного архива;
  • Снова открываем Project > Properties > Builders > PBBCR > в поле Arguments первым параметром пишем/правим путь к PBBCR.vbs;
  • (опционально) Там же в поле Arguments пишем/правим путь к pbutil.exe (он есть в папке Pixel Bender-a начиная с 1.5.1 версии) и путь к папке, куда складывать бинарники .pbj.
  • Не забываем в списке билдеров Project > Properties > Builders > поставить наш PBBCR на самый верх, дабы он срабатывал первый.

Сам скрипт, пример .project, пример .launch в архиве.

Единственный нюанс: Если сами указываем output-папку и она реально не существует, ее необходимо создать самостоятельно - скрипт сам не умеет творить такие чудеса.