Example #1
0
Bool XRenderQueryExtension (Display *dpy, int *event_basep, int *error_basep)
{
    XRenderExtDisplayInfo *info = XRenderFindDisplay (dpy);

    if (RenderHasExtension(info)) {
	*event_basep = info->codes->first_event;
	*error_basep = info->codes->first_error;
	return True;
    } else {
	return False;
    }
}
Example #2
0
Status XRenderQueryVersion (Display *dpy,
			    int	    *major_versionp,
			    int	    *minor_versionp)
{
    XRenderExtDisplayInfo *info = XRenderFindDisplay (dpy);
    XRenderInfo	    *xri;

    if (!RenderHasExtension (info))
	return 0;

    if (!XRenderQueryFormats (dpy))
	return 0;
    
    xri = info->info; 
    *major_versionp = xri->major_version;
    *minor_versionp = xri->minor_version;
    return 1;
}
Example #3
0
XFilters *
XRenderQueryFilters (Display *dpy, Drawable drawable)
{
    XRenderExtDisplayInfo		*info = XRenderFindDisplay (dpy);
    XRenderInfo			*xri;
    xRenderQueryFiltersReq	*req;
    xRenderQueryFiltersReply	rep;
    XFilters			*filters;
    char			*name;
    char			len;
    int				i;
    long			nbytes, nbytesAlias, nbytesName;

    if (!RenderHasExtension (info))
	return NULL;

    if (!XRenderQueryFormats (dpy))
	return NULL;

    xri = info->info;
    if (xri->minor_version < 6)
	return NULL;

    LockDisplay (dpy);
    GetReq (RenderQueryFilters, req);
    req->reqType = info->codes->major_opcode;
    req->renderReqType = X_RenderQueryFilters;
    req->drawable = drawable;
    if (!_XReply (dpy, (xReply *) &rep, 0, xFalse))
    {
	UnlockDisplay (dpy);
	SyncHandle ();
	return NULL;
    }
    /*
     * Compute total number of bytes for filter names
     */
    nbytes = (long)rep.length << 2;
    nbytesAlias = rep.numAliases * 2;
    if (rep.numAliases & 1)
	nbytesAlias += 2;
    nbytesName = nbytes - nbytesAlias;

    /*
     * Allocate one giant block for the whole data structure
     */
    filters = Xmalloc (sizeof (XFilters) +
		       rep.numFilters * sizeof (char *) +
		       rep.numAliases * sizeof (short) +
		       nbytesName);

    if (!filters)
    {
	_XEatData (dpy, (unsigned long) rep.length << 2);
	UnlockDisplay (dpy);
	SyncHandle ();
	return NULL;
    }

    /*
     * Layout:
     *	XFilters
     *	numFilters  char * pointers to filter names
     *	numAliases  short alias values
     *	nbytesName  char strings
     */

    filters->nfilter = rep.numFilters;
    filters->nalias = rep.numAliases;
    filters->filter = (char **) (filters + 1);
    filters->alias = (short *) (filters->filter + rep.numFilters);
    name = (char *) (filters->alias + rep.numAliases);

    /*
     * Read the filter aliases
     */
    _XRead16Pad (dpy, filters->alias, 2 * rep.numAliases);

    /*
     * Read the filter names
     */
    for (i = 0; i < rep.numFilters; i++)
    {
	int	l;
	_XRead (dpy, &len, 1);
	l = len & 0xff;
	filters->filter[i] = name;
	_XRead (dpy, name, l);
	name[l] = '\0';
	name += l + 1;
    }
    i = name - (char *) (filters->alias + rep.numAliases);

    if (i & 3)
	_XEatData (dpy, 4 - (i & 3));

    UnlockDisplay (dpy);
    SyncHandle ();
    return filters;
}