summaryrefslogtreecommitdiff
path: root/render.spec
blob: a11378a61c52045a495a9c5e1686da02750c786c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
uses core;

namespace render [extension "RENDER"] {
    
    /* errors */
    error pict_format;
    error picture;
    error pict_op;
    error glyph_set;
    error glyph;
    
    /* types */
    type picture = xid;
    
    type pict_type = enum {
	indexed,
	direct
    };
    
    type pict_op = enum {
	clear, src, dst, over, over_reverse, in,
	in_reverse, out, out_reverse, atop,
	atop_reverse, xor, add, saturate
    };
    
    type color = struct
    {
	card16	red;
	card16	green;
	card16	blue;
	card16	alpha;
    };
    
    type pict_depth = struct {
	card8		depth;
	list[pict_visual]   visuals;
    };
    
    type subwindow_mode = enum {
	clip_by_children,
	include_inferiors
    };
    
    type glyph_set = xid;
    
    type glyph = card32;
    
    type glyph_info = struct {
	card16	width;
	card16	height;
	int16	x;
	int16	y;
	int16	off_x;
	int16	off_y;
    };
    
    type pict_glyph = struct {
	glyph_info	info;
	int16	x, y;
    };
    
    type glyphable = union
    {
	glyphset	glyphset;
	fontable	fontable;
    };

    type glyph_elt8 = struct
    {
	int16	dx, dy;
	list[card8] glyphs;
    };
    
    type glyph_item8 = union
    {
	glyph_elt8	glyph_elt8;
	glyphable	glyphable;
    };
    
    type glyph_elt16 = struct
    {
	int16		dx, dy;
	list[card16]	glyphs;
    };
    
    type glyph_item16 = union
    {
	glyph_elt16	glyph_elt16;
	glyphable	glyphable;
    };
    
    type glyph_elt32 = struct
    {
	int16		dx, dy;
	list[card32]	glyphs;
    };
    
    type glyph_item32 = union {
	glyph_elt32	glyph_elt32;
	glyphable	glyphable;
    };
    
    type picture_attributes = masked_list {
	boolean		repeat;
	picture		alpha_map;
	int16		alpha_x_origin;
	int16		alpha_y_origin;
	int16		clip_x_origin;
	int16		clip_y_origin;
	picture		clip_mask;
	bool		graphics_exposures;
	subwindow_mode	subwindow_mode;  // ok, types != fields
	poly_edge		poly_edge;
	poly_mode		poly_mode;
	atom		dither; 
	boolean		component_alpha;
    };
    
    /* requests */
    request create_picture[1000] {
	picture		id *;
	drawable		drawable;
	pict_format		format;
	picture_attributes	attributes;
	
    errors:
	alloc, drawable, id_choice, match, picmap,
	    picture, pict_format, value
	    }
    
    request query_pict_formats[23] {
    reply:
	pict_format			fallback;
	list[pict_form_info]	formats;
	list[pict_screen]		screens;
    }
}
}