Это решение работает просто великолепно. Но не во всплывающем окне.
- у нас есть всплывающее окно, в котором рисуются различные анимированные диаграммы. Он является производным (частным) от Fl_Menu_Window.
- пользовательское рисование происходит в переопределенной функции draw(). Но там унаследованный window() возвращает nullptr.
- мы можем получить окно с помощью Fl_Window::current(), но тогда рисование работает только под Wayland, но не под X11
Сводка в коде:
Код: Выделить всё
class DynTooltip : private Fl_Menu_Window Код: Выделить всё
void DynTooltip::draw()
{
Fl_Window* top = top_window(); // just for debugging
Fl_Window* win = Fl_Window::current();
cairo_t *cr = Fl::cairo_make_current(win);
cairo_save(cr);
// drawing code...
cairo_restore(cr);
Fl::cairo_flush(cr);
- top_window() возвращает то же окно, что и Fl_Window::current().
- window() возвращает nullptr.
- окно win имеет странное смещение под X11. В Wayland он не имеет смещения
В X11 это возвращает некоторые большие значения, такие как x ≡ 1283 и y ≡ 504 — эти значения кажутся произвольными.
Это не помогает перевести рисунок Каира, ни с +x,+y или -x,-y.
Более того, матрица Cairo, которую мы можем получить с помощью cairo_get_matrix(), не показывает никаких странных значений. В Wayland в матрице Cairo смещение начала координат равно (.5, .5), а в X11 оно равно (0,0), масштаб в обоих случаях равен 1,0.
Кто-нибудь знает, что здесь происходит? Или есть идеи, как в таких случаях правильно получить поверхность Каира из FLTK или, может быть, сделать что-нибудь, чтобы рисунок отображался и находился в нужном месте в X11?
Примечание: с FLTK
Подробнее здесь: https://stackoverflow.com/questions/798 ... -up-window
Мобильная версия