sync code with last improvements from OpenBSD
This commit is contained in:
commit
88965415ff
26235 changed files with 29195616 additions and 0 deletions
255
lib/xcb-util-renderutil/renderutil/util.c
Normal file
255
lib/xcb-util-renderutil/renderutil/util.c
Normal file
|
@ -0,0 +1,255 @@
|
|||
/* Copyright © 2000 Keith Packard
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and its
|
||||
* documentation for any purpose is hereby granted without fee, provided that
|
||||
* the above copyright notice appear in all copies and that both that
|
||||
* copyright notice and this permission notice appear in supporting
|
||||
* documentation, and that the name of Keith Packard not be used in
|
||||
* advertising or publicity pertaining to distribution of the software without
|
||||
* specific, written prior permission. Keith Packard makes no
|
||||
* representations about the suitability of this software for any purpose. It
|
||||
* is provided "as is" without express or implied warranty.
|
||||
*
|
||||
* KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
|
||||
* EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
|
||||
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "xcb_renderutil.h"
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
xcb_render_pictforminfo_t *
|
||||
xcb_render_util_find_format (const xcb_render_query_pict_formats_reply_t *formats,
|
||||
unsigned long mask,
|
||||
const xcb_render_pictforminfo_t *ptemplate,
|
||||
int count)
|
||||
{
|
||||
xcb_render_pictforminfo_iterator_t i;
|
||||
if (!formats)
|
||||
return 0;
|
||||
for (i = xcb_render_query_pict_formats_formats_iterator(formats); i.rem; xcb_render_pictforminfo_next(&i))
|
||||
{
|
||||
if (mask & XCB_PICT_FORMAT_ID)
|
||||
if (ptemplate->id != i.data->id)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_TYPE)
|
||||
if (ptemplate->type != i.data->type)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_DEPTH)
|
||||
if (ptemplate->depth != i.data->depth)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_RED)
|
||||
if (ptemplate->direct.red_shift != i.data->direct.red_shift)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_RED_MASK)
|
||||
if (ptemplate->direct.red_mask != i.data->direct.red_mask)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_GREEN)
|
||||
if (ptemplate->direct.green_shift != i.data->direct.green_shift)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_GREEN_MASK)
|
||||
if (ptemplate->direct.green_mask != i.data->direct.green_mask)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_BLUE)
|
||||
if (ptemplate->direct.blue_shift != i.data->direct.blue_shift)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_BLUE_MASK)
|
||||
if (ptemplate->direct.blue_mask != i.data->direct.blue_mask)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_ALPHA)
|
||||
if (ptemplate->direct.alpha_shift != i.data->direct.alpha_shift)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_ALPHA_MASK)
|
||||
if (ptemplate->direct.alpha_mask != i.data->direct.alpha_mask)
|
||||
continue;
|
||||
if (mask & XCB_PICT_FORMAT_COLORMAP)
|
||||
if (ptemplate->colormap != i.data->colormap)
|
||||
continue;
|
||||
if (count-- == 0)
|
||||
return i.data;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
xcb_render_pictforminfo_t *
|
||||
xcb_render_util_find_standard_format (const xcb_render_query_pict_formats_reply_t *formats,
|
||||
xcb_pict_standard_t format)
|
||||
{
|
||||
static const struct {
|
||||
xcb_render_pictforminfo_t templ;
|
||||
unsigned long mask;
|
||||
} standardFormats[] = {
|
||||
/* XCB_PICT_STANDARD_ARGB_32 */
|
||||
{
|
||||
{
|
||||
0, /* id */
|
||||
XCB_RENDER_PICT_TYPE_DIRECT, /* type */
|
||||
32, /* depth */
|
||||
{ 0 }, /* pad */
|
||||
{ /* direct */
|
||||
16, /* direct.red */
|
||||
0xff, /* direct.red_mask */
|
||||
8, /* direct.green */
|
||||
0xff, /* direct.green_mask */
|
||||
0, /* direct.blue */
|
||||
0xff, /* direct.blue_mask */
|
||||
24, /* direct.alpha */
|
||||
0xff, /* direct.alpha_mask */
|
||||
},
|
||||
0, /* colormap */
|
||||
},
|
||||
XCB_PICT_FORMAT_TYPE |
|
||||
XCB_PICT_FORMAT_DEPTH |
|
||||
XCB_PICT_FORMAT_RED |
|
||||
XCB_PICT_FORMAT_RED_MASK |
|
||||
XCB_PICT_FORMAT_GREEN |
|
||||
XCB_PICT_FORMAT_GREEN_MASK |
|
||||
XCB_PICT_FORMAT_BLUE |
|
||||
XCB_PICT_FORMAT_BLUE_MASK |
|
||||
XCB_PICT_FORMAT_ALPHA |
|
||||
XCB_PICT_FORMAT_ALPHA_MASK,
|
||||
},
|
||||
/* XCB_PICT_STANDARD_RGB_24 */
|
||||
{
|
||||
{
|
||||
0, /* id */
|
||||
XCB_RENDER_PICT_TYPE_DIRECT, /* type */
|
||||
24, /* depth */
|
||||
{ 0 }, /* pad */
|
||||
{ /* direct */
|
||||
16, /* direct.red */
|
||||
0xff, /* direct.red_MASK */
|
||||
8, /* direct.green */
|
||||
0xff, /* direct.green_MASK */
|
||||
0, /* direct.blue */
|
||||
0xff, /* direct.blue_MASK */
|
||||
0, /* direct.alpha */
|
||||
0x00, /* direct.alpha_MASK */
|
||||
},
|
||||
0, /* colormap */
|
||||
},
|
||||
XCB_PICT_FORMAT_TYPE |
|
||||
XCB_PICT_FORMAT_DEPTH |
|
||||
XCB_PICT_FORMAT_RED |
|
||||
XCB_PICT_FORMAT_RED_MASK |
|
||||
XCB_PICT_FORMAT_GREEN |
|
||||
XCB_PICT_FORMAT_GREEN_MASK |
|
||||
XCB_PICT_FORMAT_BLUE |
|
||||
XCB_PICT_FORMAT_BLUE_MASK |
|
||||
XCB_PICT_FORMAT_ALPHA_MASK,
|
||||
},
|
||||
/* XCB_PICT_STANDARD_A_8 */
|
||||
{
|
||||
{
|
||||
0, /* id */
|
||||
XCB_RENDER_PICT_TYPE_DIRECT, /* type */
|
||||
8, /* depth */
|
||||
{ 0 }, /* pad */
|
||||
{ /* direct */
|
||||
0, /* direct.red */
|
||||
0x00, /* direct.red_MASK */
|
||||
0, /* direct.green */
|
||||
0x00, /* direct.green_MASK */
|
||||
0, /* direct.blue */
|
||||
0x00, /* direct.blue_MASK */
|
||||
0, /* direct.alpha */
|
||||
0xff, /* direct.alpha_MASK */
|
||||
},
|
||||
0, /* colormap */
|
||||
},
|
||||
XCB_PICT_FORMAT_TYPE |
|
||||
XCB_PICT_FORMAT_DEPTH |
|
||||
XCB_PICT_FORMAT_RED_MASK |
|
||||
XCB_PICT_FORMAT_GREEN_MASK |
|
||||
XCB_PICT_FORMAT_BLUE_MASK |
|
||||
XCB_PICT_FORMAT_ALPHA |
|
||||
XCB_PICT_FORMAT_ALPHA_MASK,
|
||||
},
|
||||
/* XCB_PICT_STANDARD_A_4 */
|
||||
{
|
||||
{
|
||||
0, /* id */
|
||||
XCB_RENDER_PICT_TYPE_DIRECT, /* type */
|
||||
4, /* depth */
|
||||
{ 0 }, /* pad */
|
||||
{ /* direct */
|
||||
0, /* direct.red */
|
||||
0x00, /* direct.red_MASK */
|
||||
0, /* direct.green */
|
||||
0x00, /* direct.green_MASK */
|
||||
0, /* direct.blue */
|
||||
0x00, /* direct.blue_MASK */
|
||||
0, /* direct.alpha */
|
||||
0x0f, /* direct.alpha_MASK */
|
||||
},
|
||||
0, /* colormap */
|
||||
},
|
||||
XCB_PICT_FORMAT_TYPE |
|
||||
XCB_PICT_FORMAT_DEPTH |
|
||||
XCB_PICT_FORMAT_RED_MASK |
|
||||
XCB_PICT_FORMAT_GREEN_MASK |
|
||||
XCB_PICT_FORMAT_BLUE_MASK |
|
||||
XCB_PICT_FORMAT_ALPHA |
|
||||
XCB_PICT_FORMAT_ALPHA_MASK,
|
||||
},
|
||||
/* XCB_PICT_STANDARD_A_1 */
|
||||
{
|
||||
{
|
||||
0, /* id */
|
||||
XCB_RENDER_PICT_TYPE_DIRECT, /* type */
|
||||
1, /* depth */
|
||||
{ 0 }, /* pad */
|
||||
{ /* direct */
|
||||
0, /* direct.red */
|
||||
0x00, /* direct.red_MASK */
|
||||
0, /* direct.green */
|
||||
0x00, /* direct.green_MASK */
|
||||
0, /* direct.blue */
|
||||
0x00, /* direct.blue_MASK */
|
||||
0, /* direct.alpha */
|
||||
0x01, /* direct.alpha_MASK */
|
||||
},
|
||||
0, /* colormap */
|
||||
},
|
||||
XCB_PICT_FORMAT_TYPE |
|
||||
XCB_PICT_FORMAT_DEPTH |
|
||||
XCB_PICT_FORMAT_RED_MASK |
|
||||
XCB_PICT_FORMAT_GREEN_MASK |
|
||||
XCB_PICT_FORMAT_BLUE_MASK |
|
||||
XCB_PICT_FORMAT_ALPHA |
|
||||
XCB_PICT_FORMAT_ALPHA_MASK,
|
||||
},
|
||||
};
|
||||
|
||||
if (format < 0 || format >= sizeof(standardFormats) / sizeof(*standardFormats))
|
||||
return 0;
|
||||
|
||||
return xcb_render_util_find_format (formats,
|
||||
standardFormats[format].mask,
|
||||
&standardFormats[format].templ,
|
||||
0);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue