int s_image_get_buf (s_surface_t *surface, s_image_t *img) { s_surface_t *s; if (img->buf != NULL) { s_image_free_buf(img); } img->buf = (char *) s_malloc(img->w * img->h * surface->bytesperpixel + 1); s_surface_create_from_data(&s, img->w, img->h, surface->bitsperpixel, img->buf, 0); s_putboxrgb(s, 0, 0, img->w, img->h, img->rgba); s_surface_destroy(s); return 0; }
void w_frame_draw_image (w_object_t *object, w_frame_image_t *fimg) { int i; int j; switch (fimg->names->nb_elt) { case 1: { char *name; s_image_t *img; name = (char *) s_list_get(fimg->names, 0); #if defined(WIDGET_OPTIMIZE_MEMORY) && WIDGET_OPTIMIZE_MEMORY >= 1 s_image_init(&img); s_image_img(name, img); #else img = w_window_image_get(object->window, name); #endif s_image_get_mat(img); if (fimg->rotation == FRAME_IMAGE_SOLID) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, 0, img->w, img->h, img->w, img->h, img->mat, 0, 0); s_putboxrgb(object->surface, 0, 0, img->w, img->h, img->rgba); } else if (fimg->rotation == FRAME_IMAGE_VERTICAL) { for (i = 0; i < object->surface->height; i++) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, i, img->w, img->h, img->w, img->h, img->mat, 0, 0); s_putboxrgb(object->surface, 0, i, img->w, img->h, img->rgba); } } s_image_free_mat(img); #if defined(WIDGET_OPTIMIZE_MEMORY) && WIDGET_OPTIMIZE_MEMORY >= 1 s_image_uninit(img); #endif break; } case 9: { char *name[9]; s_image_t *imgs[9]; name[0] = (char *) s_list_get(fimg->names, 0); name[1] = (char *) s_list_get(fimg->names, 1); name[2] = (char *) s_list_get(fimg->names, 2); name[3] = (char *) s_list_get(fimg->names, 3); name[4] = (char *) s_list_get(fimg->names, 4); name[5] = (char *) s_list_get(fimg->names, 5); name[6] = (char *) s_list_get(fimg->names, 6); name[7] = (char *) s_list_get(fimg->names, 7); name[8] = (char *) s_list_get(fimg->names, 8); #if defined(WIDGET_OPTIMIZE_MEMORY) && WIDGET_OPTIMIZE_MEMORY >= 1 s_image_init(&imgs[0]); s_image_img(name[0], imgs[0]); s_image_init(&imgs[1]); s_image_img(name[1], imgs[1]); s_image_init(&imgs[2]); s_image_img(name[2], imgs[2]); s_image_init(&imgs[3]); s_image_img(name[3], imgs[3]); s_image_init(&imgs[4]); s_image_img(name[4], imgs[4]); s_image_init(&imgs[5]); s_image_img(name[5], imgs[5]); s_image_init(&imgs[6]); s_image_img(name[6], imgs[6]); s_image_init(&imgs[7]); s_image_img(name[7], imgs[7]); s_image_init(&imgs[8]); s_image_img(name[8], imgs[8]); #else imgs[0] = w_window_image_get(object->window, name[0]); imgs[1] = w_window_image_get(object->window, name[1]); imgs[2] = w_window_image_get(object->window, name[2]); imgs[3] = w_window_image_get(object->window, name[3]); imgs[4] = w_window_image_get(object->window, name[4]); imgs[5] = w_window_image_get(object->window, name[5]); imgs[6] = w_window_image_get(object->window, name[6]); imgs[7] = w_window_image_get(object->window, name[7]); imgs[8] = w_window_image_get(object->window, name[8]); #endif s_image_get_mat(imgs[0]); s_image_get_mat(imgs[1]); s_image_get_mat(imgs[2]); s_image_get_mat(imgs[3]); s_image_get_mat(imgs[4]); s_image_get_mat(imgs[5]); s_image_get_mat(imgs[6]); s_image_get_mat(imgs[7]); s_image_get_mat(imgs[8]); /* 0 1 2 * 3 4 5 * 6 7 8 */ for (j = 0; j < object->surface->height; j+= imgs[4]->h) { for (i = 0; i < object->surface->width; i+= imgs[4]->w) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, i, j, imgs[4]->w, imgs[4]->h, imgs[4]->w, imgs[4]->h, imgs[4]->mat, 0, 0); s_putboxrgb(object->surface, i, j, imgs[4]->w, imgs[4]->h, imgs[4]->rgba); } } for (i = 0; i < object->surface->width; i += imgs[1]->w) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, i, 0, imgs[1]->w, imgs[1]->h, imgs[1]->w, imgs[1]->h, imgs[1]->mat, 0, 0); s_putboxrgb(object->surface, i, 0, imgs[1]->w, imgs[1]->h, imgs[1]->rgba); } for (i = 0; i < object->surface->width; i += imgs[7]->w) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, i, object->surface->height - imgs[7]->h, imgs[7]->w, imgs[7]->h, imgs[7]->w, imgs[7]->h, imgs[7]->mat, 0, 0); s_putboxrgb(object->surface, i, object->surface->height - imgs[7]->h, imgs[7]->w, imgs[7]->h, imgs[7]->rgba); } for (i = 0; i < object->surface->height; i += imgs[3]->h) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, i, imgs[3]->w, imgs[3]->h, imgs[3]->w, imgs[3]->h, imgs[3]->mat, 0, 0); s_putboxrgb(object->surface, 0, i, imgs[3]->w, imgs[3]->h, imgs[3]->rgba); } for (i = 0; i < object->surface->height; i += imgs[5]->h) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, object->surface->width - imgs[5]->w, i, imgs[5]->w, imgs[5]->h, imgs[5]->w, imgs[5]->h, imgs[5]->mat, 0, 0); s_putboxrgb(object->surface, object->surface->width - imgs[5]->w, i, imgs[5]->w, imgs[5]->h, imgs[5]->rgba); } s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, 0, imgs[0]->w, imgs[0]->h, imgs[0]->w, imgs[0]->h, imgs[0]->mat, 0, 0); s_putboxrgb(object->surface, 0, 0, imgs[0]->w, imgs[0]->h, imgs[0]->rgba); s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, object->surface->width - imgs[2]->w, 0, imgs[2]->w, imgs[2]->h, imgs[2]->w, imgs[2]->h, imgs[2]->mat, 0, 0); s_putboxrgb(object->surface, object->surface->width - imgs[2]->w, 0, imgs[2]->w, imgs[2]->h, imgs[2]->rgba); s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, object->surface->height - imgs[6]->h, imgs[6]->w, imgs[6]->h, imgs[6]->w, imgs[6]->h, imgs[6]->mat, 0, 0); s_putboxrgb(object->surface, 0, object->surface->height - imgs[6]->h, imgs[6]->w, imgs[6]->h, imgs[6]->rgba); s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, object->surface->width - imgs[8]->w, object->surface->height - imgs[8]->h, imgs[8]->w, imgs[8]->h, imgs[8]->w, imgs[8]->h, imgs[8]->mat, 0, 0); s_putboxrgb(object->surface, object->surface->width - imgs[8]->w, object->surface->height - imgs[8]->h, imgs[8]->w, imgs[8]->h, imgs[8]->rgba); s_image_free_mat(imgs[0]); s_image_free_mat(imgs[1]); s_image_free_mat(imgs[2]); s_image_free_mat(imgs[3]); s_image_free_mat(imgs[4]); s_image_free_mat(imgs[5]); s_image_free_mat(imgs[6]); s_image_free_mat(imgs[7]); s_image_free_mat(imgs[8]); #if defined(WIDGET_OPTIMIZE_MEMORY) && WIDGET_OPTIMIZE_MEMORY >= 1 s_image_uninit(imgs[0]); s_image_uninit(imgs[1]); s_image_uninit(imgs[2]); s_image_uninit(imgs[3]); s_image_uninit(imgs[4]); s_image_uninit(imgs[5]); s_image_uninit(imgs[6]); s_image_uninit(imgs[7]); s_image_uninit(imgs[8]); #endif break; } case 3: { char *name[3]; s_image_t *imgs[3]; name[0] = (char *) s_list_get(fimg->names, 0); name[1] = (char *) s_list_get(fimg->names, 1); name[2] = (char *) s_list_get(fimg->names, 2); #if defined(WIDGET_OPTIMIZE_MEMORY) && WIDGET_OPTIMIZE_MEMORY >= 1 s_image_init(&imgs[0]); s_image_img(name[0], imgs[0]); s_image_init(&imgs[1]); s_image_img(name[1], imgs[1]); s_image_init(&imgs[2]); s_image_img(name[2], imgs[2]); #else imgs[0] = w_window_image_get(object->window, name[0]); imgs[1] = w_window_image_get(object->window, name[1]); imgs[2] = w_window_image_get(object->window, name[2]); #endif s_image_get_mat(imgs[0]); s_image_get_mat(imgs[1]); s_image_get_mat(imgs[2]); if (fimg->rotation == FRAME_IMAGE_VERTICAL) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, 0, imgs[0]->w, imgs[0]->h, imgs[0]->w, imgs[0]->h, imgs[0]->mat, 0, 0); s_putboxrgb(object->surface, 0, 0, imgs[0]->w, imgs[0]->h, imgs[0]->rgba); for (i = imgs[0]->h; i < object->surface->height - imgs[2]->h; i++) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, i, imgs[1]->w, imgs[1]->h, imgs[1]->w, imgs[1]->h, imgs[1]->mat, 0, 0); s_putboxrgb(object->surface, 0, i, imgs[1]->w, imgs[1]->h, imgs[1]->rgba); } s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, object->surface->height - imgs[2]->h, imgs[2]->w, imgs[2]->h, imgs[2]->w, imgs[2]->h, imgs[2]->mat, 0, 0); s_putboxrgb(object->surface, 0, object->surface->height - imgs[2]->h, imgs[2]->w, imgs[2]->h, imgs[2]->rgba); } else if (fimg->rotation == FRAME_IMAGE_HORIZONTAL) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, 0, 0, imgs[0]->w, imgs[0]->h, imgs[0]->w, imgs[0]->h, imgs[0]->mat, 0, 0); s_putboxrgb(object->surface, 0, 0, imgs[0]->w, imgs[0]->h, imgs[0]->rgba); for (i = imgs[0]->w; i < object->surface->width - imgs[2]->w; i++) { s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, i, 0, imgs[1]->w, imgs[1]->h, imgs[1]->w, imgs[1]->h, imgs[1]->mat, 0, 0); s_putboxrgb(object->surface, i, 0, imgs[1]->w, imgs[1]->h, imgs[1]->rgba); } s_putmaskpart(object->surface->matrix, object->surface->width, object->surface->height, object->surface->width - imgs[2]->w, 0, imgs[2]->w, imgs[2]->h, imgs[2]->w, imgs[2]->h, imgs[2]->mat, 0, 0); s_putboxrgb(object->surface, object->surface->width - imgs[2]->w, 0, imgs[2]->w, imgs[2]->h, imgs[2]->rgba); } s_image_free_mat(imgs[0]); s_image_free_mat(imgs[1]); s_image_free_mat(imgs[2]); #if defined(WIDGET_OPTIMIZE_MEMORY) && WIDGET_OPTIMIZE_MEMORY >= 1 s_image_uninit(imgs[0]); s_image_uninit(imgs[1]); s_image_uninit(imgs[2]); #endif break; } } }