#ifndef GFX_H
#define GFX_H

#include <stdbool.h>
#include <stdio.h>
#include <gfx/port.h>

#ifdef __cplusplus
extern "C"
{
#endif

int gfx_init(void);
int gfx_draw(void);
int gfx_toggle_fullscreen(void);
int gfx_set_fullscreen(short w, short h);
bool gfx_fullscreen_available(void);
bool gfx_fullscreen(void);
int gfx_display_size(short *w, short *h);
int sprite_sort(struct sprite *s);
int sprite_clone(const struct sprite *src, struct sprite *dst);
void rect_init(struct rect *r);
void semitrans_rect_init(struct rect *r);
void stp_4line_init(struct stp_4line *l);
int quad_sort(struct quad *q);
int rect_sort(struct rect *r);
int stp_4line_sort(struct stp_4line *l);
int sprite_from_fp(struct sprite *s, FILE *f);
int quad_from_sprite(const struct sprite *s, struct quad *q);
bool gfx_inside_drawenv(short x, short y, short w, short h);
void gfx_deinit(void);
void sprite_free(struct sprite *src);

#define sprite_get_or_ret(x, ret) common_get_or_ret(sprite, x, ret)
#define stp_4line_get_or_ret(x, ret) common_get_or_ret(stp_4line, x, ret)
#define rect_get_or_ret(x, ret) common_get_or_ret(rect, x, ret)
#define quad_get_or_ret(x, ret) common_get_or_ret(quad, x, ret)

extern int screen_w, screen_h;

#ifdef __cplusplus
}
#endif

#endif /* GFX_H */
