Exemplo n.º 1
0
/* Find the RENDER screen for the X11 screen */
static const xcb_render_pictscreen_t *
FindPictScreen(const xcb_setup_t *setup, const xcb_screen_t *scr,
               const xcb_render_query_pict_formats_reply_t *r)
{
    xcb_screen_iterator_t si = xcb_setup_roots_iterator(setup);
    unsigned n = 0;

    while (si.data != scr) {
        assert(si.rem > 0);
        n++;
        xcb_screen_next(&si);
    }

    xcb_render_pictscreen_iterator_t rsi =
        xcb_render_query_pict_formats_screens_iterator(r);

    while (n > 0) {
        if (unlikely(rsi.rem == 0))
            return NULL; /* buggy server */

        n--;
        xcb_render_pictscreen_next(&rsi);
    }
    return rsi.data;
}
Exemplo n.º 2
0
uint32_t
_ecore_xcb_render_find_visual_id(int       type,
                                 Eina_Bool check_alpha)
{
#ifdef ECORE_XCB_RENDER
   const xcb_render_query_pict_formats_reply_t *reply;
   xcb_render_pictvisual_t *visual = NULL;
   xcb_render_pictscreen_iterator_t screens;
   xcb_render_pictdepth_iterator_t depths;
   xcb_render_pictvisual_iterator_t visuals;
#endif

   LOGFN(__FILE__, __LINE__, __FUNCTION__);
   CHECK_XCB_CONN;

   if (!_render_avail) return 0;

#ifdef ECORE_XCB_RENDER
   reply = xcb_render_util_query_formats(_ecore_xcb_conn);
   if (!reply) return 0;

   for (screens = xcb_render_query_pict_formats_screens_iterator(reply);
        screens.rem; xcb_render_pictscreen_next(&screens))
     {
        for (depths = xcb_render_pictscreen_depths_iterator(screens.data);
             depths.rem; xcb_render_pictdepth_next(&depths))
          {
             for (visuals = xcb_render_pictdepth_visuals_iterator(depths.data);
                  visuals.rem; xcb_render_pictvisual_next(&visuals))
               {
                  xcb_render_pictforminfo_t temp;
                  xcb_render_pictforminfo_t *format;

                  visual = visuals.data;
                  temp.id = visual->format;

                  format =
                    xcb_render_util_find_format(reply, XCB_PICT_FORMAT_ID,
                                                &temp, 0);
                  if (!format) continue;
                  if (format->type == type)
                    {
                       if (check_alpha)
                         {
                            if (format->direct.alpha_mask)
                              return visual->visual;
                         }
                       else
                         return visual->visual;
                    }
               }
          }
     }
#endif

   return 0;
}
Exemplo n.º 3
0
xcb_render_pictvisual_t *
xcb_render_util_find_visual_format (const xcb_render_query_pict_formats_reply_t *formats,
			       const xcb_visualid_t visual)
{
    xcb_render_pictscreen_iterator_t screens;
    xcb_render_pictdepth_iterator_t depths;
    xcb_render_pictvisual_iterator_t visuals;
    if (!formats)
	return 0;
    for (screens = xcb_render_query_pict_formats_screens_iterator(formats); screens.rem; xcb_render_pictscreen_next(&screens))
	for (depths = xcb_render_pictscreen_depths_iterator(screens.data); depths.rem; xcb_render_pictdepth_next(&depths))
	    for (visuals = xcb_render_pictdepth_visuals_iterator(depths.data); visuals.rem; xcb_render_pictvisual_next(&visuals))
		if (visuals.data->visual == visual)
		    return visuals.data;
    return 0;
}