XForms (Forms Library)

A Graphical User Interface Toolkit for X

В одном из выпусков было про кроссплатформенную минималистичную библиотеку FLTK рассказывалось, что она довольно популярна в обучении языку C++ у Столярова и Страуструпа: в ней реализован GUI.

Однако душа моя тянется в сторону классического Си, который , как ни странно продолжает своё развитие. Каких-то простых библиотек по рисованию GUI в Си я не нашёл. Можно заниматься X-Window подсистемой на Unix или Windows GDI API вызывать... Но всё это довольно сложно. Хотелось бы меньше держать в голове этих вызовов функций, чтобы рисовать окошки и виджеты (графические их элементы).

Изучая C++, читая сам современный документ про своей FLTK я нарывался на упоминание некой библиотеки XForms на страничке Forms Compatibility .

В дальнейшем у меня возникло удивление, что материал подаётся как миграция с устаревшей некоей библиотеки, которая должна, вроде как уйти в небытие. Но в моём дистрибутиве она оказалась. И даже несмотря на то, что уже как 8 лет код не переписывается судя по официальному документу на сайте проекта GNU библиотека собирается пакетами во все последние дистрибутивы основанные на Debian, там она называется libforms2. Изучение библиотеки имеет твёрдый смысл по крайней мере на ближайшую временную переспективу. Очень привлекло, что для примерно такого же рода GUI-приложений, что FLTK - используется тот самый классический Си! Ещё одним плюсом - интеграция с OpenGL библиотеки в пакете libformsgl2.

Имя библиотеки можно спутать с W3C и DotNet проектами. Поэтому прошу читателя не пренебрегать ссылками. Кстати, на официальном сайте проекта XForms Toolkit про это тоже сказано. Там же сказано, что библиотека должна работать не только на Unix , но и например Windows NT 4.0 ...

Такой древний MS Windows вряд ли у кого стоит... И загрузочных файлов для современной ОС от Microsoft тоже найти не удалось для XForms. Но вот в проекте Cygwin он вроде как есть. См. пакеты:

Но там указано, что эта библиотека работает для X-Window приложений. Т.е. придётся на Windows запускать X-сервер (например, известный XMing), а это уже "костыли"...

Хотя, может быть, найдутся люди, которые также как для FLTK сделают более нативную для Windows среды...

XForms в Ubuntu/Debian

Рекомендую с того, чтобы поставить пакет libforms-doc:

sudo apt install libforms-doc

Смотрим его состав:

dpkg -L libforms-doc

В файле /usr/share/doc-base/libforms-doc имеем описание по точка входа в чтение в документацию:

Лучше подряд читать PDF-файл неспешно. Там всё в подробностях и с примерами описано.

Далее ставим пакет libforms-dev

    sudo apt install libforms-dev

В нём лежит всё что нужно, чтобы в командной строке писать в текстовом редакторе программы на Си и собирать с библиотекой GUI-приложения.

Хотя есть ещё и пакеты с мастером форм и интеграцией OpenGL, но этим бы я рекомендовал заниматься позже.

На странице примеров можно скопипастить простейший код, чтобы сделать "пробу пера"...

Например такой:

#include <forms.h>

int main(int argc, char **argv)
{
    FL_FORM *form;

    fl_initialize(&argc, argv, 0, 0, 0);

    form = fl_bgn_form(FL_UP_BOX, 230, 100);
    fl_add_button(FL_NORMAL_BUTTON, 20, 20, 190, 60, "Hello world");
    fl_end_form();

    fl_show_form(form, FL_PLACE_MOUSE, FL_FULLBORDER, "Hello, world!");

    fl_do_forms();

    fl_hide_form(form);
    fl_finish();
    return 0;
}

Запишем его в файл button1.c. После это он собирается в одну команду:

$ LDLIBS=-lforms make button1
cc     button1.c  -lforms -o button1

Следует упомянуть, что у вас должен стоять метапакет build-essential который подтянет все сборочные базовые инструменты (компилятор Си, утилита make ...).

Запускаем приложение:

$ ./button1

Вот, что у меня получилось:

простейший пример XForms

простейший пример XForms

Ещё больше снимков с экрана на соотв. странице проекта .

Источники информации