Archive for the ‘AIR’ Category
 	  
						
				
				
				Friday, October 7th, 2011 
					
					
					Или я что-то пропустил или Adobe под шумок прекратил поддержку AIR под Linux.
Ubuntu, Fedora и остальные будут жить с AIR 2.6. Новых версий не будет.
Оригинал новости
и картинка 

Adobe AIR for Linux is no longer supported
 
Вот такие пирожки. Адоб как всегда в своем репертуаре :).
Бросайте линухи — все на винды с маками. 
					
				Posted in AIR |   5 Comments »
			 
				
				
				Tuesday, October 4th, 2011 
					
					
					Как сделать приложение с кастомным хромом можно найти за 5 минут.
Речь пойдет о том как к нему добавить тень.
Проблема: Добавить к аир приложению тень.
 
Read the rest of this entry »
					
				Posted in AIR, Flash Builder 4, Flex, quick tips |   Comments Off on AIR. Полезные советы. Custom chome, тень и html
			 
				
				
				Monday, October 3rd, 2011 
					
					
					Всем привет.
В ходе последнего проекта накопилось некоторое количество интересностей, проблем и их решений. Я постараюсь рассказать о них в цикле статей.
Проблема 1: Генерим html строку, устанавливаем ее как HTML.htmlText, не отображаются картинки и swf-файлы.
Решение: Нужно разрешить добавлять контент из html строки в “песочницу” приложения
HTML.htmlLoader.placeLoadStringContentInApplicationSandbox = true;  | 
HTML.htmlLoader.placeLoadStringContentInApplicationSandbox = true;
 
Проблема 2: Есть HTML компонент. Нужно отделить контент, от скролла. Хочется чтобы скроллы были spark.
Решение:
HTML – это mx компонент. Гибкость работы со скроллами нам дают spark компоненты. Поэтому нужно преврать mx:HTML в компонент поддерживающий spark скроллы. Минимальным требованием является реализация spark.core.IViewport интерфейса. Приблизительный код компонента:
package com.the33cows.spark
{
	import flash.events.Event;
 
	import mx.controls.HTML;
 
	import spark.core.IViewport;
 
	public class SparkHTML extends HTML implements IViewport
	{
		public function SparkHTML()
		{
			super();
//прячем родные скроллы 
			verticalScrollPolicy = "off";
			horizontalScrollPolicy = "off";
			clipAndEnableScrolling = true;
		}
 
		private var _verticalScrollPosition:Number;
		private var _clipAndEnableScrolling:Boolean;
		private var _horizontalScrollPolicy:Number;
 
		[Bindable]
		public override function get contentHeight():Number
		{
			return super.contentHeight ;
		}
 
		[Bindable]
		public override function get contentWidth():Number
		{
			return super.contentWidth;
		}
 
		[Bindable]
		public override function get horizontalScrollPosition():Number
		{
			return super.horizontalScrollPosition;
		}
 
		public override function set horizontalScrollPosition(value:Number):void
		{
			_horizontalScrollPolicy = value;
 
			super.horizontalScrollPosition = value;
		}
 
		[Bindable]
		public override function get verticalScrollPosition():Number
		{
			return super.verticalScrollPosition;
		}
 
		public override function set verticalScrollPosition(value:Number):void
		{
			_verticalScrollPosition = value;
			super.verticalScrollPosition = value;
		}
 
 
		public function getHorizontalScrollPositionDelta(navigationUnit:uint):Number
		{
			return 0;
		}
 
		public function getVerticalScrollPositionDelta(navigationUnit:uint):Number
		{
			return 0;
		}
 
		[Bindable]
		public function get clipAndEnableScrolling():Boolean
		{
			return _clipAndEnableScrolling;
		}
 
		public function set clipAndEnableScrolling(value:Boolean):void
		{
			_clipAndEnableScrolling = value;
		}
 
		override protected function createChildren():void
		{
			super.createChildren();
			if (htmlLoader)
			{
//решаем проблему 1 на глобальном уровне. 
//Нужно быть внимательным если контент генерится "на стороне"
				htmlLoader.placeLoadStringContentInApplicationSandbox = true;
//слушаем изменение размеров внутренностей html
				htmlLoader.addEventListener(Event.HTML_BOUNDS_CHANGE, onHtmlBoundsChange, false, -100);
			}
		}
 
		private function onHtmlBoundsChange(event:Event):void
		{
			dispatchPropertyChangeEvent("contentHeight", contentHeight, contentHeight);
			dispatchPropertyChangeEvent("contentWidth", contentWidth, contentWidth);
		}
	}
} | 
package com.the33cows.spark
{
	import flash.events.Event;
	
	import mx.controls.HTML;
	
	import spark.core.IViewport;
	
	public class SparkHTML extends HTML implements IViewport
	{
		public function SparkHTML()
		{
			super();
//прячем родные скроллы 
			verticalScrollPolicy = "off";
			horizontalScrollPolicy = "off";
			clipAndEnableScrolling = true;
		}
		
		private var _verticalScrollPosition:Number;
		private var _clipAndEnableScrolling:Boolean;
		private var _horizontalScrollPolicy:Number;
		[Bindable]
		public override function get contentHeight():Number
		{
			return super.contentHeight ;
		}
		
		[Bindable]
		public override function get contentWidth():Number
		{
			return super.contentWidth;
		}
		
		[Bindable]
		public override function get horizontalScrollPosition():Number
		{
			return super.horizontalScrollPosition;
		}
		public override function set horizontalScrollPosition(value:Number):void
		{
			_horizontalScrollPolicy = value;
			
			super.horizontalScrollPosition = value;
		}
		
		[Bindable]
		public override function get verticalScrollPosition():Number
		{
			return super.verticalScrollPosition;
		}
		public override function set verticalScrollPosition(value:Number):void
		{
			_verticalScrollPosition = value;
			super.verticalScrollPosition = value;
		}
		public function getHorizontalScrollPositionDelta(navigationUnit:uint):Number
		{
			return 0;
		}
		public function getVerticalScrollPositionDelta(navigationUnit:uint):Number
		{
			return 0;
		}
		
		[Bindable]
		public function get clipAndEnableScrolling():Boolean
		{
			return _clipAndEnableScrolling;
		}
		public function set clipAndEnableScrolling(value:Boolean):void
		{
			_clipAndEnableScrolling = value;
		}
		
		override protected function createChildren():void
		{
			super.createChildren();
			if (htmlLoader)
			{
//решаем проблему 1 на глобальном уровне. 
//Нужно быть внимательным если контент генерится "на стороне"
				htmlLoader.placeLoadStringContentInApplicationSandbox = true;
//слушаем изменение размеров внутренностей html
				htmlLoader.addEventListener(Event.HTML_BOUNDS_CHANGE, onHtmlBoundsChange, false, -100);
			}
		}
		private function onHtmlBoundsChange(event:Event):void
		{
			dispatchPropertyChangeEvent("contentHeight", contentHeight, contentHeight);
			dispatchPropertyChangeEvent("contentWidth", contentWidth, contentWidth);
		}
	}
}
 
использование
<s:HGroup>
<sprak:SparkHTML id="contentHtml" width="650" height="100%" />
<!-- отделили скролл -->
<s:HGroup  height="100%" width="100" gap="0" horizontalAlign="right" paddingRight="1" />
<!-- указали наш компонент как вью порт -->
<s:VScrollBar id="scrollPage" height="100%" viewport="{contentHtml}"/>
</s:HGroup> | 
<s:HGroup>
<sprak:SparkHTML id="contentHtml" width="650" height="100%" />
<!-- отделили скролл -->
<s:HGroup  height="100%" width="100" gap="0" horizontalAlign="right" paddingRight="1" />
<!-- указали наш компонент как вью порт -->
<s:VScrollBar id="scrollPage" height="100%" viewport="{contentHtml}"/>
</s:HGroup>
 
Данный код на 100% решил мои задачи. Если нужно больше – дерзайте.
На сегодня пока все :). Ждите продолжения   
					
				Posted in AIR, Flash Builder 4, quick tips |   1 Comment »
			 
				
				
				Sunday, February 13th, 2011 
					
					
					Нижне я расскажу некоторые вещи которые неплохо знать, если вы решили попробовать разрабатывать Android приложения на flash. Я опишу с чем я столкнулся когда смотрел на возможности разработки.  
Read the rest of this entry »
					
				Posted in AIR, Android, Flash, Flash Player |   4 Comments »
			 
				
				
				Monday, February 23rd, 2009 
					
					
					Про апгрейченый скрипт запуска AIR дебагера:
 
/*
 * Menu: Kill adl an run debug
 * Key: M3+d
 * Kudos: Ilja Panin http://the33cows.com
 * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
 */
 
var workspace = Packages.org.eclipse.core.resources.ResourcesPlugin.getWorkspace(); 
var configToRunName = "[YOU_DEBUG_CONFIGURATION_NAME]";
 
function main() 
{
	Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");
 
	loadBundle("org.eclipse.debug.ui");
 
	var ProgressMonitorDialog = Packages.org.eclipse.jface.dialogs.ProgressMonitorDialog;
	var IRunnableWithProgress = Packages.org.eclipse.jface.operation.IRunnableWithProgress;
 
	var runnableWithProgress = new IRunnableWithProgress({run: runfun});
	var monitorDialog = new ProgressMonitorDialog(window.getShell()).run(true, true, runnableWithProgress);;
}
 
 
function runfun(monitorDialog)
{
	monitorDialog.beginTask("Run debbuger ...", 1);
	var plugin =  Packages.org.eclipse.debug.core.DebugPlugin;
	var launchManager = plugin.getDefault().getLaunchManager();
	configurations = launchManager.getLaunchConfigurations();
 
	var conf;
 
	for (var i in configurations)
	{
		if (configurations[i].getName() == configToRunName )
		{
			conf = configurations[i];
		}	
	}
 
	if (conf)
	{
		var launch = Packages.org.eclipse.debug.ui.DebugUITools.buildAndLaunch(conf, "debug", monitorDialog);
	}
	else
	{
		debug("project not found!");
	}
 
	monitorDialog.done()
}
 
function debug(s) 
{
  	out.println(s);
} | 
/*
 * Menu: Kill adl an run debug
 * Key: M3+d
 * Kudos: Ilja Panin http://the33cows.com
 * DOM: http://download.eclipse.org/technology/dash/update/org.eclipse.eclipsemonkey.lang.javascript
 */
 
var workspace = Packages.org.eclipse.core.resources.ResourcesPlugin.getWorkspace(); 
var configToRunName = "[YOU_DEBUG_CONFIGURATION_NAME]";
function main() 
{
	Packages.java.lang.Runtime.getRuntime().exec("tskill.exe adl");
	loadBundle("org.eclipse.debug.ui");
	
	var ProgressMonitorDialog = Packages.org.eclipse.jface.dialogs.ProgressMonitorDialog;
	var IRunnableWithProgress = Packages.org.eclipse.jface.operation.IRunnableWithProgress;
	
	var runnableWithProgress = new IRunnableWithProgress({run: runfun});
	var monitorDialog = new ProgressMonitorDialog(window.getShell()).run(true, true, runnableWithProgress);;
}
function runfun(monitorDialog)
{
	monitorDialog.beginTask("Run debbuger ...", 1);
	var plugin =  Packages.org.eclipse.debug.core.DebugPlugin;
	var launchManager = plugin.getDefault().getLaunchManager();
	configurations = launchManager.getLaunchConfigurations();
	var conf;
	
	for (var i in configurations)
	{
		if (configurations[i].getName() == configToRunName )
		{
			conf = configurations[i];
		}	
	}
	
	if (conf)
	{
		var launch = Packages.org.eclipse.debug.ui.DebugUITools.buildAndLaunch(conf, "debug", monitorDialog);
	}
	else
	{
		debug("project not found!");
	}
	
	monitorDialog.done()
}
function debug(s) 
{
  	out.println(s);
}
 
Правила применения:
1.заменяем строку [YOU_DEBUG_CONFIGURATION_NAME] на имя конфигурации запуска приложения. Это имя можно найти в меню “Run -> Open Debug Dialog…”
2. заменяем сочетание M3+d на свое (M3 это alt). Для меня alt+d ближе чем F11 🙂
При выполнении скрипт, убивается процесс AIR дебагера и запускает процесс сборки и новый дебагер.
					
				Posted in AIR, Eclipse, Effective work, Flex Builder 3, Monkey Script |   Comments Off on Закрываем И запускаем AIR-debugger с помощью Eclipse Monkey