Ещё одна gui-либа

Долгое время пытался найти простую GUI-либу для haXe, но:

  • "многословность" aswing отпугивает
  • баганутость haXe-версии minimalcomps и невозможность скинования исключает эту либу из списка(UPDATE: с "баганутая" сильно преувеличил)
  • haxeGUI - это вообще кощунство - писать динамически типизированный интерфейс на языке, имеющем богатые средства статической проверки типов. Глючит даже в демках, а как использовать по-человечи (а не только рисовать кнопочки с окошками) - не понятно
  • fcomponents - проект не развивается уже давно, хотя вроде бы может частично заменить minimalcomps, но API не понравился, не помню почему
  • arctic - это что-то с чем-то. Авторы считали своим долгом нарушить принцип "открытия/закрытия" где можно и нельзя. В итоге абсолютно не расширяемая либа с отмороженным API (ну она, собственно так и называется - arctic)

Вывод: надо сделать менее отмороженную, умеренную либу, с блекджеком и барышнями, и назвать ее temperate :)

Достоинства:

  • Если не требуется особое скинование - сел и поехал (никаких инициализаций, как в AsWing)
  • Если скинование требуется (или еще какие настроки) - рисуй скины в фотошопе, пиши скины для окон - пожалуйста, никто тебя не ограничивает, настраивай компоненты изменением свойств или перегрузкой методов если совсем что-то специфическое нужно
  • Работа с компонентами не сильно отличается от работы с обычными Sprite'ами. Никто не заставляет помещать их в спец контейнеры, чтобы они правильно работали, так же никто не заставляет использовать наследников от CSprite, где можно использовать обычный DisplayObject в самой либе
  • Удобная работа с всплывающими подсказками (с возможностью настраивать задержки, писать свои отображения и свои анимации отображения/скрытия)
  • Подсказка не требует от элемента, над которым надо показать подсказку, никаких реализаций интерфейса - надо над Sprite показать - будет над спрайтом показываться, над TextField - будет над TextField
  • Менеджер курсоров на стеке с приоритетом - позволяет не думать о том, что делают с курсором другие классы, когда занимаешься установкой курсора в конкретной подсистеме приложения.
    В то же время если ты привык менять одно глобальное поле cursor - пожалуйста, никто не мешает - в менеджере оно есть
  • CHBox и СVBox с растягиванием детей по процентам, с отступами на заданный интервал, с выравниванием и т.п.
  • Бонусом идет полностью затипизированный CSignal и проверка типов листенеров нативного EventDispatcher'а через макросы в виде EventDispatcherUtil

Недостатки:

  • нет никаких компонентов для работы со визуальными списками (ComboBox, Menu, скроллирующиеся List-ты, TileBox'ы и т.д.)
    Времени не было, поэтому не реализовано
  • оконная система всё-таки получилась отмороженной, но тем не менее вполне юзабельной и вроде как расширяемой

Установка:
haxelib install temperate

Исходники:
https://github.com/cser/temperate

Простой пример использования:

package ;

import flash.Lib;
import flash.display.Sprite;
import flash.events.MouseEvent;
import temperate.minimal.MButton;
import temperate.minimal.MTooltipFactory;
import temperate.minimal.windows.MAlert;

class Main extends Sprite
{
        public static function main():Void
        {
                Lib.current.addChild(new Main());
        }
       
        public function new()
        {
                super();
               
                var button = new MButton().setText("Show alert");
                button.x = 10;
                button.y = 10;
                button.addEventListener(MouseEvent.CLICK, onShowAlertClick);
                addChild(button);
               
                // Назначаем всплывающую подсказку кнопке
                MTooltipFactory.newText(button, "If you press it, alert will be shown");
        }
       
        private function onShowAlertClick(event:MouseEvent):Void
        {
                MAlert.show(true, "Alert!");
        }
}

Другие, более детальные примеры можно посмотреть здесь:
https://github.com/cser/temperate/tree/develop/examples
И здесь:
https://github.com/cser/temperate/tree/develop/manual-tests-src
Если ни там, ни там ничего нет или непонятно - пример должен быть в виде теста здесь:
https://github.com/cser/temperate/tree/develop/test/src/

Недавно завершил забег по граблям "заставить работать либу на nme".
Заставить, таки, заставил, по-крайней мере под windows работает.
Но желание пользоваться nme отпало напрочь (очень, очень много в нём косяков, а если не в нём, то в hxcpp)
Интересно, хоть кто-нибудь из форумчан смог хоть один боевой проект на нём сделать(не либу)?

Вобщем, буду признателен, если кто-нибудь попробует сие поделие и напишет про ощущения :)

UPDATE:
Картинки вставить не получается, поэтому скрины будут ссылками:
https://github.com/cser/temperate/blob/develop/examples/images/temperate...
https://github.com/cser/temperate/blob/develop/examples/images/temperate...
SWF примеры вперемешку с ручными тестами:
https://github.com/cser/temperate/tree/develop/examples/swf-examples

Вообще вся документация к проекту - это пара readme-файлов. Но любой класс из папки src (собственно либы) обязательно имеет если не ручной
(https://github.com/cser/temperate/tree/develop/manual-tests-src) то автоматический (https://github.com/cser/temperate/tree/develop/test/src/) тест, где можно посмотреть как оно должно работать.

Пару слов о скиновании

Маленький пример скинования кнопки лежит в https://github.com/cser/temperate/tree/develop/examples/button-skinning-...

А вообще - весь пакет temperate.minimal - это один большой пример по скинованию и настройке temperate
(только не надо как там - рисовать BitmapData-скины кодом - это сделано чисто чтобы пользователи никаких swf-ок в параметры компиляции не подписывали - подключил либу - начал работать)

Основные подходы к скинованию:

  • Если используется дефолтный temperate.minimal и не устраивают только цвета - обращаемся на старте приложения к классам в temperate.minimal.graphics и меняем их публичные статические поля, подбирая цвет.
    А в классу MFormatFactory обращаемся, чтобы поменять параметры шрифтов.
  • Если нужно большее, рисуем скины в растре

    Весь пакет temperate.minimal построен на скиновании компонентов растром.

    Классов скинов как таковых в фреймворке нет, за исключением окон - есть настройки компонентов и наследование (это сделано сознательно).

    Например, для кнопки можно настроить подложку в зависимости от состояния, подсветку, параметры шрифта, применение фильтров в зависимости от состояния и т.п.
    Можно настроить или написать свои правила для расположения текста и иконки.

    Чтобы не настраивать её каждый раз, делается статичная фабрика, выдающая уже настроенные компоненты. Или делается наследник, который сам себя настраивает. Например, MButton и MFlatButton наследуется от CButton и различаются только настройками своего предка. Вместо 2-х классов можно было бы просто создать статическую фабрику с 2-мя методами: createButton():CButton и createFlatButton():CButton.

  • Если нужно еще больше - берём напильник в руки и вперёд! - Наследуемся от абстрактного компонента, пишем на базе него свой, или вообще пишем с нуля.

Комментарии

Исправлено

Теперь на haXe 2.09 работает. На lib.haxe.org залито. Пришлось новый косячок nme затыкать.
Всё-таки зря на нее портанул - сил на вникание в "особенности" работы nme уходит много, а не для флеша кто этим пользоваться будет? (на android вообще собрать не смог ничего, даже без своей либы - так что не знаю работает или нет).
Но зато дань моде недокросплатформенности "либа работает на nme" отдана :/

Не, сама nme практическое применение на коммерческом проекте нашла - сборка и обработка графических ресурсов игры (на тот момент оказалась самым приемлемым вариантом). На neko - компилится быстро - своё дело делает. Но это небольшой код - косяки можно обойти и можно посчитать "особенностями" - на флеше все равно не требуется чтобы работало.

А сращивать nme и flash - это слишком большие затраты. Я даже не представляю как temperate заставить работать на neko(а не только на cpp), если там просто Bitmap с картинкой у меня не отображается (хотя битмапы как файлы обрабатываются вполне себе)

Не знаю. Либа

Не знаю.
Либа писалась с целью получить подконтрольную небольшую кодобазу для экспериментов на haXe и, может быть чего-то коммерческого.
Шансы, что загнётся 50/50.
Если найду время и способ пофрилансить на haXe - буду использовать и развивать.
Не найду - буду поддерживать в меру свободного времени.

Вот так.

Опаньки, только

Опаньки, только сейчас прочитал. Спасибо, как только - так сразу исправлю

Баги в MinimalComps

Прошу прощения, но какие ошибки Вы нашли в MinimalComps? Каким портом пользовались?

Я знаю как

Я знаю как минимум один баг, hbox и vbox по разному себя ведут при изменении размера детеныша. Баг старый и до не давних пор на гитхабе точно не было его правки. Еще есть недоработки, например у аккардиона может быть не меньше 2-х табов, что иногда не удобно и т.д.

Re: Баги в MinimalComps

Вот к этим присматривался
https://github.com/slaskis/minimalcomps
Присмотрелся ещё сейчас и понял, что зря на них "наехал". Там в примере только косяк с кольцом под кнопкой "Show MouseWheel" глаз режет.
Был не прав (хотя заявить что она стабильна и надежна тоже не рискну - надо тестить или использовать на боевом проекте).

Попробуйте и мой порт

Попробуйте и мой порт: https://github.com/Beeblerox/MinimalCompsHX
Он новее и охватывает больше компонентов, работает на flash и c++

"Забег по багам"

Вот вы нашли баги? А вы их запостили хотябы сюда http://code.google.com/p/nekonme/issues/list ?
В вашем случае это было бы невероятно удобно, т.к. кроме бага можно было кинуть ссылку на пример кода прямо из гитхаба.
Вы используете молодой опен сурс проект и вместо того, чтобы помочь ему или не использовать его совсем, вы умудрились обхаить его.

По либе. Я леньтяй и было бы круто выложить тут хоть флешку или хотябы скрины работы либы. Иначе вообще не понятно о чем тут идет речь и стоит ли вообще это качать.

Сейчас

Сейчас посмотрел список коммитов haxenme - не меньше 3-х позавчера запосченных багов нашёл в коммитах. Действительно чинят :)

Выложил SWF

Перекомпилил всё, что представляет интерес в swf и собрал в одной папке, про скины немного написал (кое-какой пример есть в репозитории). В топике после "UPDATE" дописано всё.

отличный апдейт!

спасибо большое, теперь очень наглядно! сам до этого успел найти/посмотреть только два примера из examples с калькулятором и скинованными кнопками и с ними немного поиграл. теперь же заинтересовался еще больше.
Благодаря таким проектам лично у меня появляется больше идей и желания развивать этот сайт, чтобы дать дополнительные возможности по их представлению и обсуждению. так что спасиб и за это тоже.) через пару недель у меня похоже образуется больше свободного времени, так что постепенно начну возвращаться к haXe вообще и к haxe.ru в частности.

сплетня

Haxe 2.09 выйдет на wwx конференции ( http://code.google.com/p/haxe/issues/detail?id=651#c5 ) Но это могла быть и шутка. Это я в тему развития haxe.ru

)

интересно. вроде Николя уже не собирался выпускать новые релизы во второй ветке, но для конференции видимо решил поменять планы. ну или судя по контексту он просто хочет дать Хью и другим дополнительный мотив пофиксить самые критичные висящие баги. в любом случае это хорошо для всех.

Ага, сюда

Ага, сюда сейчас и буду постить по-порядку. А то баги, что на их форуме постят по-ходу мало кто читает.

Вы считаете что я обхаил nme, а я считаю что покритиковал, чтобы коллеги не надеялись просто и гладко сделать проект кроссплатформенным.
Просто раздражает когда в блогах пишут какая классная технология X, а сами на ней только "Hello World" сделали
(это далеко не только nme касается).

Флешки или скрины постараюсь выложить поскорее

И вообще я бы

И вообще я бы сказал, что nme далеко не серебреная пуля haxe. Я уже давно поглядываю в сторону Coctail либы и она мне все больше нравится, особенно с появлением PhoneGap в их жизни http://haxe.org/com/libs/cocktail/supported_platforms . Согласитесь смотрится весьма и весьма, особенно с учетом того, что бэкэнд независивый и в любой момент можно адаптировать под все что угодно, хоть под nme допилить. Конечно такая абстракция дается массой ограничений со стороны платформ, но ведь это все решаемо и легче узкие места написать отдельно, чем все приложение.

Тоже самое с гуи, я разделяю идею Coctail, разделить рендер от верхнего слоя, что позволит использовать любой необходимый бэкенд. Взять например любые контролы, что были написаны для флеша, они все завязаны на displayObject и теперь и почти невозможно адаптировать под stage3d. В общем есть о чем поразмыслить.

Разработчики

Разработчики под мобилки, которых знаю cocos2d используют для кроссплатформенности. Да, C++ - это не actionScript и даже не Java и ни о какой компиляции во флеш не идёт речи. Но возможности железа используются полноценно. И главное работает (не без багов, конечно) и фреймворк обкатан не на одном 10ке проектов.

А nme - вроде и должно быть быстро разрабатывать простые игры, но цепочка haXe->nme->hxcpp со своим сборщиком мусора->C++->(компилятор/SDK) просто не даёт развернутся. В любом звене возможен косяк. А разрабатывать что-то на haXe только под мобилки (без флеша) вообще выглядит странно, ибо функционал обрезается а багов не уменьшается.

Ну вот и я о том

Ну вот и я о том же. NME далек от совершенства и ближайшие пару лет врят ли станет, с текущей скоростью развития, а скорость эта довольно не плохая. Поэтому я смотрю в сторону более зрелых проектов, например phonegap. NME интересен именно самим фактом его существования. Это подтверждает вообще состоятельность haXe как идеи кроссплатформенной разработки. Jeash тоже из той оперы, они просто оправдывают саму идею haXe. Хотя jeash, какой бы он корявый не был, но он покрывает бОльшую часть АПИ, чем тот же jangaroo (для меня это показатель)

И кстати я не согласен, насчет высказывания про "разработку под мобилки без флеша", мне трудно с ходу вспомнить haxe либу которая умеет компилить под столько платформ и не затрагивая флеш. Даже меня nme интересует больше именно как быстрый старт для мобильных платформ, а не как флеш заменитель. Для флеша есть обычный haxe и nme тут совсем не нужен, nme именно для разработки под девайсы и десктопы, иначе в нем нет надобности. Так что тут либо писать под флеш и компилить в nme, либо писать флешки и собирать adobe air приложения, других вариантов я пока не знаю (вру, знаю, phonegap но там вообще функционал обрезан)

а кто говорил

А никто не говорил что на nme надо разрабатывать под flash. Этож бессмысленно (всмысле что с ним - что без него - результат одинаковый)
Речь была о том, что если разрабатываешь на cocos2d и захочешь вдруг портировать на flash - придется писать заново.
Но суть понятна.

Да, согласен, и

Да, согласен, и то что вы не обхаили и то что сам nme далеко не лишен багов. Как мне кажется вина тому то, что большинство на нем тупо игры делает и дальше не идет. Я вот попытался five3d прикрутить и сразу баги полезли. Тоже самое в вашем случае с гуи.

Просьба все таже, скрины, примеры скинирования и т.д. За проектом вашим поглядывал и раньше и возможно не придется свой "велосипед" писать, а смогу использовать вашу либу.

Кстати как вы смотрите на то, что разработать простенький sdl для постоения гуи (аля flex), готов помочь с написанием макросов для подобного дела, тем более что некий опыт написания макросов уже есть.

Про sdl: не

Про sdl: не уверен что оно нужно. Во флекс оно выполняет функции:
- более компактный код
- доп обертка над as-кодом, чтобы лишние методы глаза не мозолили и чтобы автокомплит подетальнее был
- обеспечение работы редактора UI (там даже состояния интерфейса мышкой можно набросать)
А для temperate зачем dsl?
- код станет компактнее немного;
- дебажить станет сложнее раз в 5;
- пользователю придется разобраться как работает этот dsl;
- автокомплит работать не будет;

Или я чего-то не понимаю. Приведите пример кода на dsl для temperate или другого UI-поделия, строчек 5, чтобы хоть как-то понять что он даёт.

Не уверен, что

Не уверен, что так с ходу придумаю решение. Посмотрите что умеет вытворять плагин Flash UI Designer в IDEA (подсказка, он даже mininmalcomps рисует). По моему это неплохой вариант, и пусть у вас даже автокомплита не будет, но с ui designer-ом это будет нечто. Потом я не говорил о чистом sdl, можно выкрутиться как в hxsl например, пишем на haXe, но упращенном. Вот отличный пример таких сокращалок http://code.google.com/p/hxpattern/
Без уи дизайнера и/или без реального профита от упрощения чтения/записи понятное дело толку мало.

Не, не готов я

Не, не готов я тратить время на исследование этого вопроса в то время как в либе отсутствуют действительно нужные компоненты-визуальные списки.

Но, конечно, если кто напишет - тот молодец и флаг тому в руки :)

Опенсурс

И да, не забываем, что проект опенсурс и живет лишь за счет сообщества. Это как редмандами от которых не хочется зависить, но тут зависишь от сообщества и чем больше ты в него вкладываешь, тем больше шансов, что проект продолжит жить и развиваться. Например пару багов, которые я нашел, я кроме того что запостил в трекеры, так я еще потратил один выходной и написал патчи и тесты, чтобы получить 100% совпадение с flash вариантом (лечил Matrix3D).

А патчи вы им в

А патчи вы им в виде отдельных текстовых файлов с дифами присылали?

нет. в моем

нет. в моем случае я просто перепостил нужные методы (каюсь поленился сделать дифф), а тесты в виде gist https://gist.github.com/1871413
Будь они на гитхабе, проканал бы пуллреквест, а в случае jeash я даже не знаю как там у них устроено, по идее пулреквесты тоже должны работать, автор на отрез отказался от гитхаба, назвав его "фейсбуком для программистов" :) . С nme вообще все просто, там файлы к таскам прикреплять или опять таки gist завести или pastebin любой.

Понятно "автор

Понятно
"автор на отрез отказался от гитхаба, назвав его "фейсбуком для программистов" :)"
Не один он его так называет, непонятно что в этом плохого.

И очень зря

Нигде не видел возможности так просто и быстро сделать форк, поправить важные для тебя моменты и отправить автору багрепорт с пуллом изменений.

Попробовал,

Попробовал, работает. Это приятно.
Собранная демка (рисовалка) под андроид работает (он сильно ближе к cpp таргету чем к флеш), не отображает надписи, крашится при нажатии на кнопку new
Быстро собранная своя демка (простейший слайдер) не отображает надписи, работает нормально. Возможность масштабировать компоненты радует (сделать слайдер под палец). Кроссплатформенность - это очень хорошо, то чего мне сильно не хватает сейчас в AsWing. Отсутствие комбобоксов и проблема с шрифтами - это грустно, мешает сразу попробовать перевести на temperate свой проект.
Резюмируя - на первый взгляд мне нравится, еще посмотрю.

>> хоть один боевой проект на нём сделать
я пробовал писать мини-игрушку, особых проблем не возникло, работа с битмапами вполне нормальная, вот с апи для рисования и текстом все похуже

"Отсутствие

"Отсутствие комбобоксов и проблема с шрифтами - это грустно, мешает сразу попробовать перевести на temperate свой проект."
Кстати, если Вы используете AsWing, но хотите более продвинутой работы с курсорами и всплывающими подсказками - то ничего не мешает использовать эти системы из temperate применительно к AsWing. Одна из сильных сторон temperate - это безразличность этих систем к DisplayObject-ам, к которым они применяются (просто на всякий случай)

Спасибо, что

Спасибо, что под андроидом попробовали! (у меня как-то руки не доходят).
Про комбобокс - да, согласен нужен
Про падение - руки дойдут - соберу посмотрю
А с текстом можно поподробнее, там вообще, без фреймворка, простые TextField'ы со шрифтом "Tahoma" и параметром autoSize = TextFieldAutoSize.LEFT отображаются?

завтра днем

завтра днем посмотрю в чем дело, у меня отображались текстбоксы мб тупо шрифта нет

проверил,

проверил, действительно тахомой (без файлов шрифта в ассетах) там и не пахнет ^_^
есть подозрение, что шрифты выбираются в nme/{version}/project/common/freetype.cpp функцией GetFontFile
реально работают и отображаются на устройстве только "arial" и "times", а вот "courier" не рисуется

Надо же. Но это

Надо же. Но это хорошо - значит есть надежда починить просто установкой другого шрифта по дефолту (или с ассетами что-то сделать)

вообще,

вообще, поведение nme в данном случае мне кажется не вполне корректным, потому как родной плеер, если не нашел шрифт подставляет доступный. но что уж есть

попробовал

я попробовал и мне понравилось. есть желание в будущем, как минимум попробовать temperate вместо minimalcomps, которые обычно применяю в тестах или в прототипах проекта.
за "забег по граблям" вообще отдельное спасибо, насчет nme - действительно так много там косяков, что бесполезно даже в баг-репорты им писать? Граник вроде довольно оперативно реагирует обычно, может поправят и желание появится снова? так-то направление перспективное.

re: попробовал

Это радует, что понравилось.
А по поводу багрепортов - запостил на форум 3 из дюжины, которую не поленился записать
(там просто часть обойти кое-ка можно, часть сложно пофиксить - чтобы внимание на первых порах не распылять) - пока не реагирует никто.

Там больше всего доставил баг с событием MOUSE_WHEEL - они умудрились знак delta перепутать :)

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

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

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

Содержание этого поля является приватным и не предназначено к показу.
  • 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
Для отсева спамеров)
h
t
n
P
x
P
Enter the code without spaces and pay attention to upper/lower case.