[cairo] Cairo 1.14.2 problems with Solaris 10, libXrender
Andreas F. Borchert
andreas.borchert at uni-ulm.de
Wed Aug 5 13:23:03 PDT 2015
On Wed, Aug 05, 2015 at 12:07:52PM -0700, Bill Spitzak wrote:
> > #if !HAVE_XRENDERCREATESOLIDFILL
> > #define XRenderCreateSolidFill _int_consume
> > #endif
>
> Exactly what purpose does this serve?
It replaces XRenderCreateSolidFill by _int_consume (a no-op function)
to avoid references to a function that is supposedly not defined
in -lXrender.
> In cairo there is only one use of this symbol in cairo-xlib-source.c,
> perhaps the if statement can be put around that instead.
There is a whole bunch of macros of this kind in cairo-xlib-xrender-private.h:
#if !HAVE_XRENDERCREATESOLIDFILL
#define XRenderCreateSolidFill _int_consume
#endif
#if !HAVE_XRENDERCREATELINEARGRADIENT
#define XRenderCreateLinearGradient _int_consume
typedef struct _XLinearGradient {
XPointFixed p1;
XPointFixed p2;
} XLinearGradient;
#endif
#if !HAVE_XRENDERCREATERADIALGRADIENT
#define XRenderCreateRadialGradient _int_consume
typedef struct _XCircle {
XFixed x;
XFixed y;
XFixed radius;
} XCircle;
typedef struct _XRadialGradient {
XCircle inner;
XCircle outer;
} XRadialGradient;
#endif
#if !HAVE_XRENDERCREATECONICALGRADIENT
#define XRenderCreateConicalGradient _int_consume
typedef struct _XConicalGradient {
XPointFixed center;
XFixed angle; /* in degrees */
} XConicalGradient;
#endif
The obvious intention was to keep the code in cairo-xlib-source.c
tidy without myriads of #if directives. A better solution could
be the replacement of
#define CAIRO_RENDER_HAS_GRADIENTS(surface) \
CAIRO_RENDER_AT_LEAST((surface), 0, 10)
by
#define CAIRO_RENDER_HAS_GRADIENTS(surface) \
(HAVE_XRENDERCREATELINEARGRADIENT &&
CAIRO_RENDER_AT_LEAST((surface), 0, 10))
and likewise for all the other macros of this kind in cairo-xlib-private.h.
Regards, Andreas.
--
Dr. Andreas F. Borchert, Institut für Numerische Mathematik,
Universität Ulm, Helmholtzstraße 20, Zimmer 1.22, 89081 Ulm
More information about the cairo
mailing list