Скоро будет возможность загрузки layout из xml (как в Android) или чего-то похожего на QML. Выбираю формат. (Issue #58 в трекере)
Планируется автоматическая привязка загруженных виджетов к полям класса при совпадении ID виджета и названия переменной (например, в ресурсе есть Button с id=«button1», а в классе — переменная Button _button1 — после загрузки ссылка на созданный виджет будет сохранена в эту переменную), а так же автоматическое назначение обработчиков сигналов — по id виджета и названию (например, если есть виджет с id=«button1» а в классе — метод bool onButton1Click(Widget src) — этот метод будет назначен на onClickListener загруженного виджета.
А если коротко, используется двухфазная модель measure / layout как в Android.
Перерисовка всегда идет полностью.
При включенном OpenGL все равно только полностью можно перерисовывать.
Есть разделение на основную часть и backend — код для поддержки конкретной платформы (создание окон, отрисовка bitmap или создание OpenGL контекста, трансляция событий мыши и клавиатуры, ...).
Графика может рисоваться в bitmap буфер c помощью software renderer, или в OpenGL контекст. Общий интерфейс прячет реализацию.
LDC я попробовал — он тормозной. Один файл компилирует столько же времени, сколько DMD — проект из сотни файлов.
Для разработки не очень подходит из-за тормознутости.
Скорее для финального билда.
Пока еще не догнал.
CTFE и метапрограммирование в D все еще на порядок лучше.
Чистый синтаксис.
Многое без garbage collector реализовать сложно или невозможно.
mixins — навряд ли когда-нибудь будут в C++.
Можно сделать темы под каждую систему похожие на нативные.
Еще проблемы — меню на маке и Unity. Должно быть в системном меню, вместо этого — в верхней части окна. Смотрится чужеродно.
Примера/туториала нет, но можно сделать.
Есть какой-нибудь DSFML проект, на котором можно поэкспериментировать?
Надо реализовать Platform и Window под DSFML.
Копируется указатель на первый элемент и количество элементов. Элементы массива не копируются.
Запишутся ли указатель с длиной сразу в rvalue или лишний раз скопируется — не уверен.
Оффтоп, но надеюсь, что кому-нибудь будет интересно.
Я разрабатываю GUI библиотеку на D — DlangUI
Кроссплатформенная, с поддержкой ускорения отрисовки с помощью OpenGL.
API напоминает Android UI.
Не враппер — написано на D, поэтому легко расширять, добавлять новые виджеты.
Внешний вид можно значительно изменять с помощью тем (похожи на темы Android).
Unicode и поддержка нескольких языков интерфейса.
Адаптация интерфейса под разные размеры и разрешения экрана.
Демо, нужны GIT, DUB и DMD:
# Скачать исходники с GitHub
git clone https://github.com/buggins/dlangui.git
cd dlangui
# example 1 - демо, в котором используется большинство виджетов
dub run dlangui:example1 --build=release
# tetris - демо, игра TETRIS
dub run dlangui:tetris --build=release
Планируется автоматическая привязка загруженных виджетов к полям класса при совпадении ID виджета и названия переменной (например, в ресурсе есть Button с id=«button1», а в классе — переменная Button _button1 — после загрузки ссылка на созданный виджет будет сохранена в эту переменную), а так же автоматическое назначение обработчиков сигналов — по id виджета и названию (например, если есть виджет с id=«button1» а в классе — метод bool onButton1Click(Widget src) — этот метод будет назначен на onClickListener загруженного виджета.
А если коротко, используется двухфазная модель measure / layout как в Android.
Перерисовка всегда идет полностью.
При включенном OpenGL все равно только полностью можно перерисовывать.
Есть разделение на основную часть и backend — код для поддержки конкретной платформы (создание окон, отрисовка bitmap или создание OpenGL контекста, трансляция событий мыши и клавиатуры, ...).
Графика может рисоваться в bitmap буфер c помощью software renderer, или в OpenGL контекст. Общий интерфейс прячет реализацию.
Для разработки не очень подходит из-за тормознутости.
Скорее для финального билда.
CTFE и метапрограммирование в D все еще на порядок лучше.
Чистый синтаксис.
Многое без garbage collector реализовать сложно или невозможно.
mixins — навряд ли когда-нибудь будут в C++.
Не знаю, насколько эти проекты живые.
Еще проблемы — меню на маке и Unity. Должно быть в системном меню, вместо этого — в верхней части окна. Смотрится чужеродно.
Почему под Linux больше — непонятно.
Есть какой-нибудь DSFML проект, на котором можно поэкспериментировать?
Надо реализовать Platform и Window под DSFML.
На Маке проверить не могу — нет его у меня.
Практически стандарт.
Запишутся ли указатель с длиной сразу в rvalue или лишний раз скопируется — не уверен.
Я разрабатываю GUI библиотеку на D — DlangUI
Демо, нужны GIT, DUB и DMD: