frappe/env/lib/python3.12/site-packages/cairocffi/ffi_build.py

118 lines
4.1 KiB
Python

"""
cairocffi.ffi_build
~~~~~~~~~~~~~~~~~~~
Build the cffi bindings
:copyright: Copyright 2013-2019 by Simon Sapin
:license: BSD, see LICENSE for details.
"""
from importlib.util import module_from_spec, spec_from_file_location
from pathlib import Path
from cffi import FFI
# Path hack to import constants when this file is exec'd by setuptools
constants_spec = spec_from_file_location(
'constants', Path(__file__).parent.joinpath('constants.py')
)
constants = module_from_spec(constants_spec)
constants_spec.loader.exec_module(constants)
# Create an empty _generated folder if needed
generated = Path(__file__).parent / '_generated'
generated.mkdir(exist_ok=True)
# Primary cffi definitions
ffi = FFI()
ffi.set_source('cairocffi._generated.ffi', None)
ffi.cdef(constants._CAIRO_HEADERS)
# include xcffib cffi definitions for cairo xcb support
try:
from xcffib.ffi_build import ffi as xcb_ffi
except ImportError:
pass
else:
ffi.include(xcb_ffi)
ffi.cdef(constants._CAIRO_XCB_HEADERS)
# gdk pixbuf cffi definitions
ffi_pixbuf = FFI()
ffi_pixbuf.set_source('cairocffi._generated.ffi_pixbuf', None)
ffi_pixbuf.include(ffi)
ffi_pixbuf.cdef('''
typedef unsigned long gsize;
typedef unsigned int guint32;
typedef unsigned int guint;
typedef unsigned char guchar;
typedef char gchar;
typedef int gint;
typedef gint gboolean;
typedef guint32 GQuark;
typedef void* gpointer;
typedef ... GdkPixbufLoader;
typedef ... GdkPixbufFormat;
typedef ... GdkPixbuf;
typedef struct {
GQuark domain;
gint code;
gchar *message;
} GError;
typedef enum {
GDK_COLORSPACE_RGB
} GdkColorspace;
GdkPixbufLoader * gdk_pixbuf_loader_new (void);
GdkPixbufFormat * gdk_pixbuf_loader_get_format (GdkPixbufLoader *loader);
GdkPixbuf * gdk_pixbuf_loader_get_pixbuf (GdkPixbufLoader *loader);
gboolean gdk_pixbuf_loader_write (
GdkPixbufLoader *loader, const guchar *buf, gsize count,
GError **error);
void gdk_pixbuf_loader_set_size (
GdkPixbufLoader *loader, int width, int height);
gboolean gdk_pixbuf_loader_close (
GdkPixbufLoader *loader, GError **error);
gchar * gdk_pixbuf_format_get_name (GdkPixbufFormat *format);
GdkColorspace gdk_pixbuf_get_colorspace (const GdkPixbuf *pixbuf);
int gdk_pixbuf_get_n_channels (const GdkPixbuf *pixbuf);
gboolean gdk_pixbuf_get_has_alpha (const GdkPixbuf *pixbuf);
int gdk_pixbuf_get_bits_per_sample (const GdkPixbuf *pixbuf);
int gdk_pixbuf_get_width (const GdkPixbuf *pixbuf);
int gdk_pixbuf_get_height (const GdkPixbuf *pixbuf);
int gdk_pixbuf_get_rowstride (const GdkPixbuf *pixbuf);
guchar * gdk_pixbuf_get_pixels (const GdkPixbuf *pixbuf);
gsize gdk_pixbuf_get_byte_length (const GdkPixbuf *pixbuf);
gboolean gdk_pixbuf_save_to_buffer (
GdkPixbuf *pixbuf, gchar **buffer, gsize *buffer_size,
const char *type, GError **error, ...);
void gdk_cairo_set_source_pixbuf (
cairo_t *cr, const GdkPixbuf *pixbuf,
double pixbuf_x, double pixbuf_y);
void g_object_ref (gpointer object);
void g_object_unref (gpointer object);
void g_error_free (GError *error);
void g_type_init (void);
''')
def compile():
ffi.compile()
ffi_path = generated / 'ffi.py'
ffi_path.write_text('# flake8: noqa\n' + ffi_path.read_text())
ffi_pixbuf.compile()
ffi_pixbuf_path = generated / 'ffi_pixbuf.py'
ffi_pixbuf_path.write_text(
'# flake8: noqa\n' + ffi_pixbuf_path.read_text())
if __name__ == '__main__':
compile()