36
36
#include "cairoint.h"
37
37
#include "cairo-xlib.h"
38
#include "cairo-freelist-private.h"
40
typedef struct _cairo_xlib_display cairo_xlib_display_t;
39
41
typedef struct _cairo_xlib_hook cairo_xlib_hook_t;
42
typedef struct _cairo_xlib_job cairo_xlib_job_t;
43
typedef void (*cairo_xlib_notify_func) (Display *, void *);
44
typedef void (*cairo_xlib_notify_resource_func) (Display *, XID);
41
46
struct _cairo_xlib_hook {
42
47
cairo_xlib_hook_t *next;
43
48
void (*func) (Display *display, void *data);
53
struct _cairo_xlib_display {
54
cairo_xlib_display_t *next;
55
unsigned int ref_count;
59
cairo_xlib_screen_info_t *screens;
61
cairo_xlib_job_t *workqueue;
62
cairo_freelist_t wq_freelist;
64
cairo_freelist_t hook_freelist;
65
cairo_xlib_hook_t *close_display_hooks;
66
unsigned int closed :1;
48
69
struct _cairo_xlib_screen_info {
49
70
cairo_xlib_screen_info_t *next;
50
71
unsigned int ref_count;
73
cairo_xlib_display_t *display;
54
75
cairo_bool_t has_render;
56
77
cairo_font_options_t font_options;
58
cairo_xlib_hook_t *close_display_hooks;
80
unsigned int gc_needs_clip_reset;
83
cairo_private cairo_xlib_display_t *
84
_cairo_xlib_display_get (Display *display);
86
cairo_private cairo_xlib_display_t *
87
_cairo_xlib_display_reference (cairo_xlib_display_t *info);
89
_cairo_xlib_display_destroy (cairo_xlib_display_t *info);
91
cairo_private cairo_bool_t
92
_cairo_xlib_add_close_display_hook (Display *display, void (*func) (Display *, void *), void *data, const void *key);
94
_cairo_xlib_remove_close_display_hooks (Display *display, const void *key);
96
cairo_private cairo_status_t
97
_cairo_xlib_display_queue_work (cairo_xlib_display_t *display,
98
cairo_xlib_notify_func notify,
100
void (*destroy)(void *));
101
cairo_private cairo_status_t
102
_cairo_xlib_display_queue_resource (cairo_xlib_display_t *display,
103
cairo_xlib_notify_resource_func notify,
106
_cairo_xlib_display_notify (cairo_xlib_display_t *display);
61
108
cairo_private cairo_xlib_screen_info_t *
62
109
_cairo_xlib_screen_info_get (Display *display, Screen *screen);
66
113
cairo_private void
67
114
_cairo_xlib_screen_info_destroy (cairo_xlib_screen_info_t *info);
69
cairo_private cairo_bool_t
70
_cairo_xlib_add_close_display_hook (Display *display, void (*func) (Display *, void *), void *data, void *key);
71
116
cairo_private void
72
_cairo_xlib_remove_close_display_hook (Display *display, void *key);
117
_cairo_xlib_screen_info_close_display (cairo_xlib_screen_info_t *info);
120
_cairo_xlib_screen_get_gc (cairo_xlib_screen_info_t *info, int depth);
121
cairo_private cairo_status_t
122
_cairo_xlib_screen_put_gc (cairo_xlib_screen_info_t *info, int depth, GC gc, cairo_bool_t reset_clip);
74
124
#if CAIRO_HAS_XLIB_XRENDER_SURFACE