Added image support to allegro5 backend

This commit is contained in:
Andrew Kravchuk 2020-05-26 17:56:13 +03:00
parent 63f08aee28
commit 151916aee4
No known key found for this signature in database
GPG Key ID: B8A851BA50F6285F

View File

@ -27,6 +27,9 @@ NK_API void nk_allegro5_handle_event(ALLEGRO_EVENT *ev);
NK_API void nk_allegro5_shutdown(void);
NK_API void nk_allegro5_render(void);
NK_API struct nk_image* nk_allegro5_create_image(const char* file_name);
NK_API void nk_allegro5_del_image(struct nk_image* image);
/* Fonts. We wrap normal allegro fonts in some nuklear book keeping */
NK_API NkAllegro5Font* nk_allegro5_font_create_from_file(const char *file_name, int font_size, int flags);
NK_API void nk_allegro5_font_del(NkAllegro5Font *font);
@ -64,6 +67,33 @@ static struct nk_allegro5 {
} allegro5;
NK_API struct nk_image* nk_create_image(const char* file_name)
{
if (!al_init_image_addon()) {
fprintf(stdout, "Unable to initialize required allegro5 image addon\n");
exit(1);
}
ALLEGRO_BITMAP* bitmap = al_load_bitmap(file_name);
if (bitmap == NULL) {
fprintf(stdout, "Unable to load image file: %s\n", file_name);
return NULL;
}
struct nk_image *image = (struct nk_image*)calloc(1, sizeof(struct nk_image));
image->handle.ptr = bitmap;
image->w = al_get_bitmap_width(bitmap);
image->h = al_get_bitmap_height(bitmap);
return image;
}
NK_API void nk_allegro5_del_image(struct nk_image* image)
{
if(!image) return;
al_destroy_bitmap(image->handle.ptr);
free(image);
}
/* Flags are identical to al_load_font() flags argument */
NK_API NkAllegro5Font*
nk_allegro5_font_create_from_file(const char *file_name, int font_size, int flags)
@ -264,8 +294,11 @@ nk_allegro5_render()
al_draw_arc((float)a->cx, (float)a->cy, (float)a->r, a->a[0],
a->a[1], color, (float)a->line_thickness);
} break;
case NK_COMMAND_IMAGE: {
const struct nk_command_image *i = (const struct nk_command_image *)cmd;
al_draw_bitmap_region(i->img.handle.ptr, 0, 0, i->w, i->h, i->x, i->y, 0);
} break;
case NK_COMMAND_RECT_MULTI_COLOR:
case NK_COMMAND_IMAGE:
case NK_COMMAND_ARC_FILLED:
default: break;
}