haXeAsWing

После почти трехлетнего перерыва вышла бета версия Aswing 2.0

Основные изменения:
- новый скин (LookAndFeel) по умолчанию
- добавлены компоненты JStepper, DateChooser
- добавлен WeightBoxLayout
- багфиксы и мелкие фичи

В библиотеку включен новый проект - порт для haXe под названием haXeAsWing.
Фактически, это ее точная (с минимальными отличиями) копия, и мы можем использовать любой из вариантов на выбор.

upd. paling добавил ссылку на демо компонентов, готовую swf можно посмотреть в папке bin

Что изменилось, и как этим пользоваться?

Вариант 1.
- чтобы начать использовать haXeAsWing, достаточно просто добавить в проект последнюю версию его исходников из svn

Вариант 2. Подключение родного AsWing 2
- чтобы использовать сам AsWing нужно скачать swc, распаковать ее zipом, подключить library.swf из нее с помощью -swf-lib
К сожалению, ошибка в -swf-lib все еще осталась (haxe некорректно преобразует enum), поэтому нам в исходниках понадобится /org/aswing/AsWingConstants.hx следующего содержания.

package org.aswing;

extern class AsWingConstants {         
        public static inline var NONE : Int = -1;
        public static inline var CENTER : Int  = 0;
        public static inline var TOP : Int     = 1;
        public static inline var LEFT : Int    = 2;
        public static inline var BOTTOM : Int  = 3;
        public static inline var RIGHT : Int   = 4;
        public static inline var NORTH : Int      = 1;
        public static inline var NORTH_EAST : Int = 2;
        public static inline var EAST : Int       = 3;
        public static inline var SOUTH_EAST : Int = 4;
        public static inline var SOUTH : Int      = 5;
        public static inline var SOUTH_WEST : Int = 6;
        public static inline var WEST : Int       = 7;
        public static inline var NORTH_WEST : Int = 8;
        public static inline var HORIZONTAL : Int = 0;
        public static inline var VERTICAL : Int   = 1;
}

Как видно, первый вариант выглядит проще, но пока у него есть несколько странностей и с flash-библиотекой легче перейти с 1.5 на 2.0
- перед инициализацией гуи обязателен вызов AsWingManager.initAsStandard(flash.Lib.current); (если передать в качестве параметра DisplayObject, gui создастся в нем. Upd. от 07.06.2011 - null передавать не рекомендуется, тк AsWingManager не сможет инициализироваться )
- порт может немного по-другому отрабатывать layout компонентов, у меня это вылечилось добавлением для компонентов setPreferredSize

Я не буду здесь описывать, как создать собственно интерфейс - с этим вполне справится туториал, попробую только объяснить отличия от 1.5

1. GuiBuilder еще не успел обновиться, и интерфейсы в нем созданные немного перекашивает, приходится работать руками.
2. По причине из п.1 я не стал пока трогать WeightBoxLayout
3. Datepicker и numeric stepper довольно милые. В новом скине красивые тени и объемный чекбокс.
4. Все старые скины (LookAndFeel) не работают, их надо переделывать
5. Единственный новый совместимый скин PalingLAF видимо пока работает только с flash-версией, по крайней мере мне его прикрутить не удалось.

Дело в том, что новый скин по умолчанию, теперь не использует растровую графику вообще. Вместо картинок, компоненты полностью рисуются вручную в коде.
Градиентные заливки в компонентах полностью настраиваются и содержат три цвета - foreground, mideground и background
В презентации AsWing 2.0 поведение можно потрогать руками.
У каждого компонента есть методы setForeground, setBackground и setMideground, задающие цвета текста и градиента, метод setFont, задающий шрифт, и метод setStyleTune, задающий параметры градиента, тени и скругления (реализованный немного странно).
Кроме того, у каждого компонента остались базовые настройки стиля из LAF, поэтому их можно легко переопределить, например так

class MyLAF extends BasicLookAndFeel
{
        override private function initSystemFontDefaults(table:UIDefaults):Void{
                var defaultSystemFonts:Array<Dynamic>= [
                        "systemFont", new ASFontUIResource("Tahoma", 11),
                        "menuFont", new ASFontUIResource("Tahoma", 11),
                        "controlFont", new ASFontUIResource("Tahoma", 11),
                        "windowFont", new ASFontUIResource("Tahoma", 11, true)
                ];
                table.putDefaults(defaultSystemFonts);
        }

        override private function initComponentDefaults(table:UIDefaults):Void{  
                super.initComponentDefaults(table);
                var comDefaults = [
                        "controlText", new ASColorUIResource(0x000000),
                        "controlMide", new ASColorUIResource(0x555555),
                ];
                table.putDefaults(comDefaults);
               
                comDefaults = [
                        "Label.foreground", table.get("controlText"),
                        "Button.foreground", table.get("controlText"),
                        "Button.textFilters", [],
                        "ToolBar.background", table.get("window"),
                        "Stepper.mideground", table.get("controlText"),
                        "CheckBox.mideground", new ASColorUIResource(0x555555),
                        "CheckBox.textFilters", [],
                        "Slider.background", new ASColorUIResource(0xe8e8e8, 0.83),
                        "Slider.foreground", table.get("controlText"),
                        "Slider.mideground", table.get("controlMide"),
                        "Slider.colorAdjust",
                                new UIStyleTune(0.18, 0.05, 0.20, 0.50, 3, new UIStyleTune(0.2, 0.00, 0.4, 0.00, 0)),
                        "ComboBox.background", new ASColorUIResource(0xffffff),
                        "ComboBox.mideground", new ASColorUIResource(0x000000),
                        "TabbedPane.contentMargin", new InsetsUIResource(1, 1, 1, 1),
                ];
                table.putDefaults(comDefaults);
    }
}

Полный список настроек можно найти в файле org/aswing/plaf/basic/BasicLookAndFeel.hx

Комментарии

LookAndFeel

спасибо за обзор, полезно. поиграл немного. новый LookAndFeel выглядит достаточно приятно.
за короткое время тестирования правда случался небольшой баг с отображением градиента тени у JFrame при ресайзе. Но после перекомпиляции повторить его не получилось.
После частого пользования Flex4 и кастомной UI-библиотеки для чистого AS3, пока непривычно и некоторые вещи кажутся запутанными и громоздкими, но конкретно для haXe это наверное сейчас самый приемлемый выбор GUI-фреймворка, так что не исключено, что еще вернусь к нему. Надеюсь что и GuiBuilder к тому времени допилят, т.к. лично меня именно его наличие для набрасывания быстрых UI в AsWing пока больше всего привлекает.)

И ещё вопрос - а в какого рода проектах вы используете (haXe)AsWing и какие его основные преимущества определяют выбор именно его?

зачем AsWing

GuiBuilder в принципе, работает, и внутренние компоненты генерирует нормально - у меня наблюдались проблемы только с контейнерами. Фреймворк и правда несколько запутан по сравнению с качеством своей документации, но изнутри довольно гибкий (по-своему, по-китайски).

Мое мнение, на AsWing можно быстро сделать более-менее нормальный интерфейс - ну, скажем, для игры-социалки как в примерах. Он отлично подойдет для проекта, в котором gui - не главное. Flex для этого имхо слишком наворочен, а haxegui требует слишком много движений напильником.

Я сейчас пишу нечто напоминающее аудиоредактор - панель инструментов, собственная область для редактирования (sprite), плюс в плане горка настроек и диалогов со свойствами объектов.
Плюсы AsWing'a для меня:

  • AsWing достаточно легкий. На самом деле, с новым LAF'ом (с растрами только на иконки кнопок) мое приложение весит 280КБ (с OrangeLAF было 600)
  • Aswing относительно мощный. У него есть стандартный набор компонентов, включая combobox'ы (привет arctic) деревья и гриды, серьезней в этом плане либо flex, либо haxegui. Остальные встреченные мной библиотеки компонентов разрозненны и не имеют хотя бы подтверждения работоспосбности в haxe
  • AsWing красивый. Нет, серьезно, сравните демку haxegui с демкой AsWinga. Я не понимаю, зачем делать страшные gui-библиотеки ^_^. Он легко настраивается и переопределяется (привет MinimalComps)
  • у AsWingа нет милого Flex'овского прогрессбара при загрузке приложения - он появляется моментально
  • AsWing позаимствовал layouts из Swing и в нем легко делать резиновый ui
  • в AsWing достаточно легко было разобраться и перенести полуготовый интефейс (спасибо guibuilder)

Минусы AsWing'a:

  • документация почти отсутствует, форум на китайском (я полчаса убил на то, чтобы понять почему код из гуибилдера, который создает окошко - не работает. оказалось нужно было обернуть в jframe)
  • есть мелкие странности с лейаутами, иногда возвращаются неправильные размеры компонентов (проблема посчитать место под свой), у кнопок к примеру иконку надо смещать на 2 пикселя вправо и 5 вниз, иначе она нарисуется в углу

спасибо!

спасибо за развернутый и информативный ответ!
думаю, что для UI приложений типа аудио-редакторов на flash это действительно самый правильный выбор.
утвердился в своем желании попробовать в будущем AsWing если не для проекта, то хотя бы для прототипа.

thx

thx paling (guess it was you)

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров)
b
S
k
j
A
G
Enter the code without spaces and pay attention to upper/lower case.