SlideShare une entreprise Scribd logo
1  sur  23
Архитектура минимальных UI компонент Виталий Хить (well)
Зачем это нужно? Виджеты Примеры кода Собственное обучение
Готовые компоненты Flex Flash Minimal Components (bit-101.com)
Flex
Flash
Minimal components
Minimal Components
Структура компонента Менеджер Менеджер
Менеджер клавиатуры
Менеджер отображения (СТИЛИ)
Структура Класса компонента
UIComponent extends Sprite / MovieClip
UIComponentсвойства Координаты Размеры Состояния Visible Enabled Мышка (up, over, down) Значения Стили Стили экземпляра компонента Глобальные стили (класс, глобальные)
Uicomponent cтруктура менеджера свойств
МЕНЕДЖЕР СВОЙСТВ static public const ISIZE :uint = 0x01; static public const ISTYLE :uint = 0x02; …….  protected varinvalidHash :uint; …….  public function invalidate(property: uint = InvalidationType.ALL, callLater :Boolean = true):void { invalidHash |= property;       if (!_inCallLater) { addEventListener(Event.ENTER_FRAME, callLaterDispatcher,false,0,true);                 _inCallLater = true; } }  protected function validate():void { invalidHash = 0;       _inCallLater = false; }  private function callLaterDispatcher(event:Event):void { removeEventListener(Event.ENTER_FRAME,callLaterDispatcher);       draw();      } protected function draw() :void {    if (isValid(ISTYLE | ISIZE)) { ... }    validate(); }
UICOMPONENT Ограничивающий прямоугольник x, y -> _x, _y, move() width, height -> _width, _height, setSize() scaleX, scaleY
UIComponentСтиликласса static private const defaultStyles:Object= {  color :0xffffff,  defaultLabel : “Label”,  disabledSkin : “Label_DisabledSkin” }; public static function getStyleDefinition():Object {       	return defaultStyles; }
UIComponentменеджер стилей protected varinstanceStyles:Object; protected function getStyleValue(name:String):Object {       return (instanceStyles[name] == null) ? StyleManager.getStyleValue(name, _classDef) : instanceStyles[name]; }  protected function getDisplayObjectInstance(skin:Object):DisplayObject { varclassDef:Object = null;       if (skin is Class) {          return (new skin()) as DisplayObject;        } else if (skin is DisplayObject) {         (skin as DisplayObject).x = 0;         (skin as DisplayObject).y = 0;         return skin as DisplayObject;       }       try { classDef = getDefinitionByName(skin.toString());       } catch(e:Error) {         try { classDef = loaderInfo.applicationDomain.getDefinition(skin.toString()) as Object;         } catch (e:Error) {           // Nothing         }       }       if (classDef == null) {         return null;       }       return (new classDef()) as DisplayObject; }
МЕНЕДЖЕР Стилей private static var _instances :Dictionary = new Dictionary(true); private static var _styles :Dictionary = new Dictionary(true); public static function getStyleValue(name :String, classDef :Class = null) :Object { var style :Object = _styles[classDef];       return (style && style[name]) ? style[name] : _styles[null][name];  } public static function setStyle(name :String, value :Object, classDef :Class = null) :void {       if (!_styles[classDef]) _styles[classDef] = {};       _styles[classDef][name] = value;       if (classDef) invalidateStyle(classDef);       else for (varobj :* in _instances) invalidateStyle(obj == 'null' ? null : obj);  }
МЕНЕДЖЕР Стилей public static function registerInstance(instance :UIComponent) :void  { varclassDef :Class = getClassDef(instance);        if (!classDef) return; if (!_instances[classDef]) _instances[classDef] = new Dictionary(true);       _instances[classDef][instance] = true; if (_styles[classDef]) return; var target :Class = classDef; vardefaultStyles :Object = null;       while (!defaultStyles) {         if (target["getStyleDefinition"]) { defaultStyles = target["getStyleDefinition"](); break; }         try { target = instance.loaderInfo.applicationDomain.getDefinition(getQualifiedSuperclassName(target)) as Class; }          catch(err :Error) {           try { target = getDefinitionByName(getQualifiedSuperclassName(target)) as Class; }            catch (e:Error) { defaultStyles = UIComponent.getStyleDefinition(); break; }         }       }       _styles[classDef] = defaultStyles; if (!_styles[null]) _styles[null] = UIComponent.getStyleDefinition(); }
СКИНЫ
[Embed… public class fl.controls.Button extends UIComponent { [Embed (source='../skin/skin.swf', symbol='Button_disabledSkin')] static private vardisabledSkin :Class; public class fl.controls.Button_disabledSkin extends SpriteAsset private static vardefaultStyles:Object = { disabledSkin:"fl.controls::Button_disabledSkin",
Чистка Flash компонентов Удалить acsessibilityсоставляющую Удалить FocusManagerи сопутствующие классы Упростить Style Manager Удалить из UIComponent Связь с фокус менеджером Связь со средой разработки Flash (?) Изменение scale составляющей Исправить ошибки в дочерних классах Изменить названия скинов (если используется flex)

Contenu connexe

En vedette

China.Data.Reports.Samples
China.Data.Reports.SamplesChina.Data.Reports.Samples
China.Data.Reports.Samples
guestde99d0
 
Spotlight On Brazil Multi Client Programme Dec07
Spotlight On Brazil Multi Client Programme Dec07Spotlight On Brazil Multi Client Programme Dec07
Spotlight On Brazil Multi Client Programme Dec07
guestde99d0
 

En vedette (8)

China.Data.Reports.Samples
China.Data.Reports.SamplesChina.Data.Reports.Samples
China.Data.Reports.Samples
 
Flash Site
Flash SiteFlash Site
Flash Site
 
Spotlight On Brazil Multi Client Programme Dec07
Spotlight On Brazil Multi Client Programme Dec07Spotlight On Brazil Multi Client Programme Dec07
Spotlight On Brazil Multi Client Programme Dec07
 
Решения проблемы поиска пути в играх.
Решения проблемы поиска пути в играх.Решения проблемы поиска пути в играх.
Решения проблемы поиска пути в играх.
 
Игры в социальных сетях
Игры в социальных сетяхИгры в социальных сетях
Игры в социальных сетях
 
Android 1.5 to 3.0: a compatibility journey
Android 1.5 to 3.0: a compatibility journeyAndroid 1.5 to 3.0: a compatibility journey
Android 1.5 to 3.0: a compatibility journey
 
Schultz 2010
Schultz 2010Schultz 2010
Schultz 2010
 
Whymca Dive into Android [ITA]
Whymca Dive into Android [ITA]Whymca Dive into Android [ITA]
Whymca Dive into Android [ITA]
 

Similaire à Архитектура минимальных Ui компонент

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
Krivoy Rog IT Community
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
etyumentcev
 

Similaire à Архитектура минимальных Ui компонент (20)

Odd
OddOdd
Odd
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Веселая ферма. Соседи.
Веселая ферма. Соседи.Веселая ферма. Соседи.
Веселая ферма. Соседи.
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
TК°Conf. 10 проблем автоматизации UI и их решение с помощью JDI. Роман Иовлев.
 
Экскурсия по Flutter SDK
Экскурсия по Flutter SDKЭкскурсия по Flutter SDK
Экскурсия по Flutter SDK
 
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
CodeFest 2012. Рычков Д. — Почему перед написанием кеша вам стоит поговорить ...
 
Yii2
Yii2Yii2
Yii2
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
automation is iOS development
automation is iOS developmentautomation is iOS development
automation is iOS development
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Drupal 7 deploy database updates
Drupal 7 deploy database updatesDrupal 7 deploy database updates
Drupal 7 deploy database updates
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
ук 03.001.02 2011
ук 03.001.02 2011ук 03.001.02 2011
ук 03.001.02 2011
 
Fun with core graphics
Fun with core graphicsFun with core graphics
Fun with core graphics
 

Архитектура минимальных Ui компонент

  • 1. Архитектура минимальных UI компонент Виталий Хить (well)
  • 2. Зачем это нужно? Виджеты Примеры кода Собственное обучение
  • 3. Готовые компоненты Flex Flash Minimal Components (bit-101.com)
  • 13. UIComponentсвойства Координаты Размеры Состояния Visible Enabled Мышка (up, over, down) Значения Стили Стили экземпляра компонента Глобальные стили (класс, глобальные)
  • 15. МЕНЕДЖЕР СВОЙСТВ static public const ISIZE :uint = 0x01; static public const ISTYLE :uint = 0x02; ……. protected varinvalidHash :uint; ……. public function invalidate(property: uint = InvalidationType.ALL, callLater :Boolean = true):void { invalidHash |= property; if (!_inCallLater) { addEventListener(Event.ENTER_FRAME, callLaterDispatcher,false,0,true); _inCallLater = true; } } protected function validate():void { invalidHash = 0; _inCallLater = false; } private function callLaterDispatcher(event:Event):void { removeEventListener(Event.ENTER_FRAME,callLaterDispatcher); draw(); } protected function draw() :void { if (isValid(ISTYLE | ISIZE)) { ... } validate(); }
  • 16. UICOMPONENT Ограничивающий прямоугольник x, y -> _x, _y, move() width, height -> _width, _height, setSize() scaleX, scaleY
  • 17. UIComponentСтиликласса static private const defaultStyles:Object= { color :0xffffff, defaultLabel : “Label”, disabledSkin : “Label_DisabledSkin” }; public static function getStyleDefinition():Object { return defaultStyles; }
  • 18. UIComponentменеджер стилей protected varinstanceStyles:Object; protected function getStyleValue(name:String):Object { return (instanceStyles[name] == null) ? StyleManager.getStyleValue(name, _classDef) : instanceStyles[name]; } protected function getDisplayObjectInstance(skin:Object):DisplayObject { varclassDef:Object = null; if (skin is Class) { return (new skin()) as DisplayObject; } else if (skin is DisplayObject) { (skin as DisplayObject).x = 0; (skin as DisplayObject).y = 0; return skin as DisplayObject; } try { classDef = getDefinitionByName(skin.toString()); } catch(e:Error) { try { classDef = loaderInfo.applicationDomain.getDefinition(skin.toString()) as Object; } catch (e:Error) { // Nothing } } if (classDef == null) { return null; } return (new classDef()) as DisplayObject; }
  • 19. МЕНЕДЖЕР Стилей private static var _instances :Dictionary = new Dictionary(true); private static var _styles :Dictionary = new Dictionary(true); public static function getStyleValue(name :String, classDef :Class = null) :Object { var style :Object = _styles[classDef]; return (style && style[name]) ? style[name] : _styles[null][name]; } public static function setStyle(name :String, value :Object, classDef :Class = null) :void { if (!_styles[classDef]) _styles[classDef] = {}; _styles[classDef][name] = value; if (classDef) invalidateStyle(classDef); else for (varobj :* in _instances) invalidateStyle(obj == 'null' ? null : obj); }
  • 20. МЕНЕДЖЕР Стилей public static function registerInstance(instance :UIComponent) :void { varclassDef :Class = getClassDef(instance); if (!classDef) return; if (!_instances[classDef]) _instances[classDef] = new Dictionary(true); _instances[classDef][instance] = true; if (_styles[classDef]) return; var target :Class = classDef; vardefaultStyles :Object = null; while (!defaultStyles) { if (target["getStyleDefinition"]) { defaultStyles = target["getStyleDefinition"](); break; } try { target = instance.loaderInfo.applicationDomain.getDefinition(getQualifiedSuperclassName(target)) as Class; } catch(err :Error) { try { target = getDefinitionByName(getQualifiedSuperclassName(target)) as Class; } catch (e:Error) { defaultStyles = UIComponent.getStyleDefinition(); break; } } } _styles[classDef] = defaultStyles; if (!_styles[null]) _styles[null] = UIComponent.getStyleDefinition(); }
  • 22. [Embed… public class fl.controls.Button extends UIComponent { [Embed (source='../skin/skin.swf', symbol='Button_disabledSkin')] static private vardisabledSkin :Class; public class fl.controls.Button_disabledSkin extends SpriteAsset private static vardefaultStyles:Object = { disabledSkin:"fl.controls::Button_disabledSkin",
  • 23. Чистка Flash компонентов Удалить acsessibilityсоставляющую Удалить FocusManagerи сопутствующие классы Упростить Style Manager Удалить из UIComponent Связь с фокус менеджером Связь со средой разработки Flash (?) Изменение scale составляющей Исправить ошибки в дочерних классах Изменить названия скинов (если используется flex)