macOS
WUI использует AppKit для окон, событий и ввода, Core Graphics для буферов отрисовки
и ImageIO для изображений. X11, Cairo и сторонние GUI-фреймворки не нужны.
Общие контролы и передача rect по значению сохранены.
Сборка
Нужны Xcode Command Line Tools и CMake 3.16 или новее. Минимальная версия macOS, выставляемая сборкой, — 10.15. Проверка выполнения проводилась на Apple Silicon; для Intel можно собрать отдельную или универсальную библиотеку.
cmake -S . -B build-macos -DCMAKE_BUILD_TYPE=Release
cmake --build build-macos --parallel
open build-macos/examples/demo/demo.app
Также собираются examples/hello_world/hello_world.app и
examples/simple/simple.app. Ресурсы копируются в Contents/Resources/res.
Относительные пути ресурсов сначала ищутся в рабочем каталоге, затем в пакете
приложения. Текущий каталог процесса библиотека не меняет.
Для универсальной сборки:
cmake -S . -B build-macos-universal -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
-DWUI_BUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release
cmake --build build-macos-universal --parallel
Для подключения из другого CMake-проекта:
set(WUI_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(path/to/wui)
target_link_libraries(my_app PRIVATE wui)
C++-заголовки не требуют Objective-C++. Файлы .mm и фреймворки macOS подключаются
внутри цели wui.
Поведение
- Вызывайте
framework::init(),framework::run()и методы UI в главном потоке. Коллбэки контролов иwui::timerтакже выполняются в нём. Из рабочего потока можно вызватьwindow::emit_event(); сообщение будет доставлено асинхронно в главный поток. - Координаты задаются в логических точках. Буферы учитывают Retina-масштаб экрана;
при смене масштаба пересоздаются.
font::sizeсоответствует высоте строки WUI. - Поддерживаются UTF-8, ввод через
NSTextInputClient, композиция IME, Cmd+A/C/X/V, Tab/Shift+Tab, мышь и вертикальная прокрутка. - Поддерживаются встроенные окна, физические модальные окна, изменение размера, перемещение за заголовок, сворачивание и разворачивание. Декорации рисует WUI.
- Измерение текста не зависит от открытого окна. Можно рассчитать размеры диалога до его создания и после закрытия других окон.
- Цвета используют существующую POSIX-семантику WUI:
make_color(r,g,b)непрозрачен, четвёртый аргумент задаёт прозрачность (0— непрозрачно,255— прозрачно). tray_iconсоздаёт иконку в строке меню.show_message()показывает popover у иконки, а не уведомление Notification Center.- INI-конфигурация использует переданный путь. Для запуска через Finder задавайте абсолютный доступный для записи путь (например, внутри Application Support), а не рассчитывайте на рабочий каталог.
Проверка
cmake -S . -B build-macos -DWUI_BUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Debug
cmake --build build-macos --parallel
ctest --test-dir build-macos --output-on-failure
Тесты требуют активной графической сессии macOS. Они открывают временные окна,
проверяют события, UTF-8, буфер обмена, диалоги, таймеры, пиксели offscreen-буферов
и запускают все три примера. Снимки сохраняются в /tmp/wui-macos-*.png.
Ограничения
Уведомления о подключении устройств пока не реализованы:
enable_device_change_handling(true) сообщает об этом через window::get_error().
Dock — свойство приложения, поэтому hide_taskbar_icon()/show_taskbar_icon()
не меняют его для отдельного окна. Полноценный accessibility-интерфейс контролов
и горизонтальная прокрутка трекпадом пока не реализованы.