1require "theme"
2
3local type = stead.type
4
5stead.font_load = instead_font_load
6stead.font_free = instead_font_free
7stead.font_scaled_size = instead_font_scaled_size
8stead.sprite_alpha = instead_sprite_alpha
9stead.sprite_dup = instead_sprite_dup
10stead.sprite_scale = instead_sprite_scale
11stead.sprite_rotate = instead_sprite_rotate
12stead.sprite_text = instead_sprite_text
13stead.sprite_text_size = instead_sprite_text_size
14stead.sprite_draw = instead_sprite_draw
15stead.sprite_copy = instead_sprite_copy
16stead.sprite_compose = instead_sprite_compose
17stead.sprite_fill = instead_sprite_fill
18stead.sprite_pixel = instead_sprite_pixel
19stead.sprite_load = instead_sprite_load
20stead.sprite_free = instead_sprite_free
21stead.sprite_size = instead_sprite_size
22stead.sprites_free = instead_sprites_free
23stead.sprite_colorkey = instead_sprite_colorkey
24stead.sprite_pixels = instead_sprite_pixels
25
26sprite = {
27	nam = 'sprites';
28	object_type = true;
29	system_type = true;
30
31	screen = function(s)
32		if theme.get 'scr.gfx.mode' ~= 'direct' then
33			return
34		end
35		return 'screen'
36	end;
37
38	font_scaled_size = function(size)
39		return stead.font_scaled_size(size);
40	end;
41	font = function(font, size, ...)
42		return stead.font_load(font, size, ...);
43	end;
44	free_font = function(font)
45		return stead.font_free(font);
46	end;
47	font_height = function(font)
48		local w,h = stead.sprite_text_size(font)
49		return h
50	end;
51	alpha = function(name, alpha, ...)
52		return stead.sprite_alpha(name, alpha, ...);
53	end;
54	colorkey = function(name, color, ...)
55		return stead.sprite_colorkey(name, color, ...);
56	end;
57	dup = function(name, ...)
58		return stead.sprite_dup(name, ...);
59	end;
60	scale = function(name, xs, ys, smooth, ...)
61		if smooth == nil then
62			smooth = true -- default is on
63		end
64		return stead.sprite_scale(name, xs, ys, smooth,...);
65	end;
66	rotate = function(name, angle, smooth, ...)
67		if smooth == nil then
68			smooth = true -- default is on
69		end
70		return stead.sprite_rotate(name, angle, smooth, ...);
71	end;
72	text = function(font, text, col, style, ...)
73		return stead.sprite_text(font, text, col, style, ...);
74	end;
75	size = function(spr)
76		return stead.sprite_size(spr);
77	end;
78	text_size = function(fnt, ...)
79		return stead.sprite_text_size(fnt, ...);
80	end;
81	draw = function(s, fx, fy, fw, fh, d, x, y, alpha)
82		if d == nil and x == nil and y == nil then
83			d, x, y, alpha = fx, fy, fw, fh
84			fx, fy, fw, fh = 0, 0, -1, -1
85		end
86		return stead.sprite_draw(s, fx, fy, fw, fh, d, x, y, alpha);
87	end;
88	copy = function(s, fx, fy, fw, fh, d, x, y, alpha)
89		if d == nil and x == nil and y == nil then
90			d, x, y, alpha = fx, fy, fw, fh
91			fx, fy, fw, fh = 0, 0, -1, -1
92		end
93		if alpha then
94			local ss = stead.sprite_alpha(s, alpha)
95			local r = stead.sprite_copy(ss, fx, fy, fw, fh, d, x, y, alpha);
96			stead.sprite_free(ss)
97			return r
98		end
99		return stead.sprite_copy(s, fx, fy, fw, fh, d, x, y, alpha);
100	end;
101	compose = function(s, fx, fy, fw, fh, d, x, y, alpha)
102		if d == nil and x == nil and y == nil then
103			d, x, y, alpha = fx, fy, fw, fh
104			fx, fy, fw, fh = 0, 0, -1, -1
105		end
106		if alpha then
107			local ss = stead.sprite_alpha(s, alpha)
108			local r = stead.sprite_compose(ss, fx, fy, fw, fh, d, x, y, alpha);
109			stead.sprite_free(ss)
110			return r
111		end
112		return stead.sprite_compose(s, fx, fy, fw, fh, d, x, y, alpha);
113	end;
114	fill = function(d, x, y, w, h, col)
115		if h == nil and col == nil then
116			return stead.sprite_fill(d, 0, 0, -1, -1, x);
117		end
118		return stead.sprite_fill(d, x, y, w, h, col);
119	end;
120	pixel = function(d, x, y, col, alpha)
121		return stead.sprite_pixel(d, x, y, col, alpha)
122	end;
123	load = function(fname, ...)
124		return stead.sprite_load(fname, ...);
125	end;
126	blank = function(w, h, ...)
127		local t = 'blank:'..stead.tostr(stead.math.floor(w))..'x'..stead.tostr(stead.math.floor(h))
128		return stead.sprite_load(t, ...)
129	end;
130	box = function(w, h, col, alpha, ...)
131		local t = 'box:'..stead.tostr(stead.math.floor(w))..'x'..stead.tostr(stead.math.floor(h))
132		if col then
133			t = t..','..stead.tostr(col)
134		end
135		if alpha then
136			t = t..','..stead.tostr(alpha)
137		end
138		return stead.sprite_load(t, ...)
139	end;
140	free = function(key)
141		return stead.sprite_free(key);
142	end;
143}
144
145stead.module_done(function()
146	stead.sprites_free();
147end)
148
149local function compat_api()
150	if not stead.api_atleast(1, 7, 1) then
151		font_load = instead_font_load
152		font_free = instead_font_free
153		font_scaled_size = instead_font_scaled_size
154
155		sprite_alpha = instead_sprite_alpha
156		sprite_dup = instead_sprite_dup
157		sprite_scale = instead_sprite_scale
158		sprite_rotate = instead_sprite_rotate
159		sprite_text = instead_sprite_text
160		sprite_text_size = instead_sprite_text_size
161		sprite_draw = instead_sprite_draw
162		sprite_copy = instead_sprite_copy
163		sprite_compose = instead_sprite_compose
164		sprite_fill = instead_sprite_fill
165		sprite_pixel = instead_sprite_pixel
166		sprite_load = instead_sprite_load
167		sprite_free = instead_sprite_free
168		sprite_size = instead_sprite_size
169		sprites_free = instead_sprites_free
170	end
171end
172
173stead.module_start(function(load)
174	if compat_api and not load then
175		compat_api()
176		compat_api = nil
177	end
178end)
179