IUP — кроссплатформенная библиотека базовых элементов графического пользовательского интерфейса с использованием языков C и Lua. С её помощью можно создавать быстрые, не требующие компиляции графические приложения.

Поддерживаемые языки и платформы

В среде Linux и других Unix-подобных операционных систем работает посредством Gtk, Motif/Lesstif или непосредственно взаимодействуя с X-сервером. В Windows использует графические средства данной операционной системы. В 2017 году были представлены бэкэнды, позволяющие разрабатывать с помощью IUP нативные приложения для MacOS, iOS, Android, а также веб-приложения с использованием Emscripten.

Библиотека написана на C, её архитектура позволяет достаточно естественным образом использовать её из объектно-ориентированного кода на C++. Будучи, как и Lua, разработанной в Католическом университете Рио-де-ЖанейроЧасть разработчиков IUP являются также разработчиками Lua, она «из коробки» поддерживает интеграцию с этим скриптовым языком.

Доступны также библиотеки-обвязки для использования IUP во множестве языков, таких как RubyRuby-IUP (репозиторий исходного кода на github), Euphoria, FreeBasicPortable GUI toolkit (IUP) version 3.0 (RC2) на форуме FreeBasic, Perl, Scheme, Eiffeleiffel-iup — IUP toolkit library for GOBO Eiffel, NimIUP-wrapper является частью стандартной библиотеки Nim и других.

Особенности Для описания файлов ресурсов в IUP традиционно используется язык LED, который в современных версиях библиотеки считается устаревшим и заменяется языком Lua. Можно создавать IUP-приложения и без использования LED или Lua, пользуясь только C API.

В поставку библиотеки входит также разработанная в 1994 году IupVisualLED, простая RAD IDE, позволяющая редактировать GUI-диалоги в режиме, близком к WYSIWYG. IupVisualLED также позволяет экспорт полученного кода на LED, Lua или C. Для работы с Lua-скриптами в состав IUP входит IupLuaScripter — редактор Lua-кода с поддержкой отладки.

IUP имеет достаточно минималистичный API (около ста C-функций) и отличается от других аналогичных библиотек способом реализации 4 важных концепций:

Время создание управляющих элементов. При создании виджета не происходит его немедленного отображения в ОС. Оно выполняется при показе содержащего виджет диалога или путём ручного вызова функции IupMap для этого диалога. Система атрибутов. В IUP очень мало функций, поскольку основным способом работы с виджетами является доступ к их атрибутам (текстового типа) с помощью функций IupSetAttribute и IupGetAttribute. Абстрактное позиционирование макета. Виджеты в IUP никогда не позиционируются путём явного задания координат; их позиции рассчитываются динамически, в соответствии с абстрактной иерархией макета, задаваемой с помощью виджетов-контейнеров IupFill, IupHbox, IupVbox и т. д. (впрочем, явное позиционирование допускается внутри виджетов-контейнеров специального типа). Система обратных вызовов. Язык LED поддерживает косвенное задание связи виджетов с функциями обратного вызова. Для связывания Си-функции используется конструкция IupSetFunction имя с последующим связыванием атрибутов обратного вызова с использованием IupSetAttribute. Также можно осуществлять прямое связывание виджета с callback-функцией с помощью IupSetCallback.

При проектировании IUP удалены ограничения на класс/тип экземпляров объекта, но сохранена иерархия наследования в стиле Lua (см. прототипное программирование).

Начиная с версии 3.9, IUP поддерживает работу со строками в формате UTF-8.

Дополнительные функции Кроме функций создания виджетов, IUP предлагает ряд дополнительных возможностей: рисование; создание массивов и хеш-таблиц; работа со строками; получение информации о шрифтах; получение информации о системе.

Лицензия IUP доступно для скачивания, бесплатного использования, модификации, использования в коммерческих целях и распространения под лицензией MIT.

Примечания

Ссылки Проект IUP IUP-Users Scuri, A. «IUP - Portable User Interface». Software Developer's Journal. Dec/2005. iup_sdj2005.pdf

Категория:Кроссплатформенное программное обеспечение Категория:Свободные библиотеки программ Категория:Инструменты для разработки программного обеспечения