xcb иллюстрирует псевдопрозрачность (копию растрового изображения корневого окна на фон дочернего окна)

Я хочу проиллюстрировать псевдопрозрачность окон с помощью xcb (скопируйте часть растрового изображения корневого окна на фон окна)

Для этого я использую:

корневое растровое изображение устанавливается с помощью feh, затем я запускаю свою программу, которая выполняет (только часть кода):

-> инициализировать соединение:

xcb_connect()

-> создать окно:

xcb_create_window()
xcb_create_pixmap( connection,screen->root_depth, pixmap, screen->root, width, height)
xcb_create_gc( connection, graphic_context, pixmap, XCB_GC_FOREGROUND | XCB_GC_BACKGROUND, gc_values_mask)
xcb_map_window

-> захватить событие xcb:

xcb_wait_for_event

-> ответ на map_request_event (когда это запрос нашего окна) или property_notify (когда измененное свойство является корневым растровым изображением через feh):

получить корневую растровую карту:

xcb_get_property / xcb_get_property_reply / xcb_get_property_value     
==> this works

скопируйте часть корневого растрового изображения в растровое изображение окна:

xcb_copy_area_checked(backbone.connection,
              rootpix,
              pixmap,
              graphic_context,
              x, y,
              0, 0,
              width, height)

Я использую xcb_request_check, но, похоже, у меня нет ошибок с этим последним запросом.

Затем я рисую элементы в своем окне с помощью cairo.

Проблема в том, что я просто вижу белое окно с отрисовкой элемента cairo. Даже без элементов cairo я не могу отобразить скопированное растровое изображение моего окна.

У тебя есть идеи помочь мне? Спасибо


xcb
person cedlemo    schedule 06.04.2012    source источник


Ответы (1)


Поскольку мне никто не помогает, я нахожу решение в одиночку:

Мне просто нужно скопировать часть корневого растрового изображения в свое окно:

xcb_copy_area_checked(backbone.connection,
          rootpix,
          my_window,
          graphic_context,
          x, y,
          0, 0,
          width, height)

Это работает, даже если я не уверен, что это лучший способ сделать это.

person cedlemo    schedule 08.04.2012