コード例 #1
0
ファイル: render.c プロジェクト: mstorsjo/vlc
/* Find an X11 visual for a RENDER picture format */
static xcb_visualid_t
FindVisual(const xcb_setup_t *setup, const xcb_screen_t *scr, 
           const xcb_render_query_pict_formats_reply_t *r,
           xcb_render_pictformat_t fmt_id)
{
    const xcb_render_pictscreen_t *rs = FindPictScreen(setup, scr, r);
    if (rs == NULL)
        return 0;

    xcb_render_pictdepth_iterator_t rdi =
        xcb_render_pictscreen_depths_iterator(rs);

    while (rdi.rem > 0) {
        const xcb_render_pictdepth_t *rd = rdi.data;
        xcb_render_pictvisual_iterator_t rvi =
            xcb_render_pictdepth_visuals_iterator(rd);

        while (rvi.rem > 0) {
            const xcb_render_pictvisual_t *pv = rvi.data;

            if (pv->format == fmt_id)
                return pv->visual;

            xcb_render_pictvisual_next(&rvi);
        }
        xcb_render_pictdepth_next(&rdi);
    }
    return 0;
}
コード例 #2
0
ファイル: ecore_xcb_render.c プロジェクト: Limsik/e17
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;
}
コード例 #3
0
ファイル: util.c プロジェクト: 3163504123/phantomjs
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;
}