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