Пользовательский виджет FLTK с Cairo под WaylandC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Пользовательский виджет FLTK с Cairo под Wayland

Сообщение Anonymous »

Мы поддерживаем базу исходного кода с открытым исходным кодом для настольного приложения для Linux (и BSD). Графический интерфейс этого приложения построен на FLTK (и довольно сложен).
В этом графическом интерфейсе есть специальный виджет, на самом деле вращающаяся ручка, которая рисует с помощью Cairo.

Класс является производным от Fl_Dial и переопределяет функцию draw().
В рамках этой пользовательской функции рисования в существующем (старом) коде контекст Cairo извлекается из XLib

Код: Выделить всё

    cairo_surface_t* Xsurface =
cairo_xlib_surface_create(fl_display, fl_window,
fl_visual->visual,
Fl_Window::current()->w() * scale,
Fl_Window::current()->h() * scale);
cairo_t *cr = cairo_create (Xsurface);
Очевидно, что это не может работать при работе под Wayland, что сейчас иногда происходит с FLTK-1.4 — и поэтому в этом случае мы просто получаем SEGFAULT.
Теперь вопрос: как лучше всего подойти к задаче по портированию нашего пользовательского кода рисования, чтобы он работал как под X11, так и под Wayland? Я знаю, что Каир может работать под Вейландом, и, похоже, сам FLTK зависит от Каира. Но я пока не мог найти хорошей отправной точки; Я предполагаю, что каким-то образом будет задействован EGL или что где-то в FLTK уже есть функция для получения поверхности рисования Cairo для данного виджета (обратите внимание, что в нашем случае это виджет, а не окно).
Конечно, одним из возможных решений было бы рисовать с помощью Cairo «оффлайн», а затем получить растровое изображение и передать его FLTK. Но это похоже на обходной путь.
Кто-нибудь уже делал что-то подобное? Может быть, какая-то отправная точка в документации? Или подсказка, где поближе посмотреть исходники ФЛТК? В целом мы знакомы с основными концепциями, и я видел аналогичные решения для GTK, но в нашем случае это не помогает, а общий поиск в Интернете не дал никакого действительно полезного контента, кроме того, что мы уже знаем....

Подробнее здесь: https://stackoverflow.com/questions/798 ... er-wayland
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»