bool say_window_set_icon(say_window *win, say_image *icon) { if (say_image_get_width(icon) == 0 || say_image_get_height(icon) == 0) { say_error_set("can't create icon from empty string"); return false; } return say_imp_window_set_icon(win->win, icon); }
static say_rect say_page_find_rect(say_font_page *page, size_t width, size_t height) { say_font_row *found_row = NULL; float best_ratio = 0; for (say_font_row *row = say_array_get(page->rows, 0); row; say_array_next(page->rows, (void**)&row)) { float ratio = height / (float)row->height; if (ratio < 0.7 || ratio > 1.0 || ratio < best_ratio) continue; if (width > say_image_get_width(page->image) - row->current_width) continue; found_row = row; best_ratio = ratio; } if (!found_row) { int row_height = height + height / 10; if (page->current_height + row_height >= say_image_get_height(page->image)) { say_vector2 size = say_image_get_size(page->image); say_image_resize(page->image, size.x * 2, size.y * 2); } say_font_row row; row.current_width = 0; row.y = page->current_height; row.height = row_height; say_array_push(page->rows, &row); found_row = say_array_get(page->rows, say_array_get_size(page->rows) - 1); page->current_height += row_height; } say_rect rect = say_make_rect(found_row->current_width, found_row->y, width, height); found_row->current_width += width; return rect; }
void say_image_target_set_image(say_image_target *target, say_image *image) { say_context_ensure(); target->img = image; if (target->img) { say_target_set_custom_data(target->target, target); //say_target_need_own_contxt(target->target, 0); say_target_set_context_proc(target->target, say_image_target_make_context); say_target_set_bind_hook(target->target, (say_bind_hook)say_image_target_bind); say_vector2 size = say_image_get_size(image); say_target_set_size(target->target, size); say_view_set_size(target->target->view, size); say_view_set_center(target->target->view, say_make_vector2(size.x / 2.0, size.y / 2.0)); say_view_flip_y(target->target->view, 0); say_fbo_make_current(target->fbo); say_image_bind(image); glGenerateMipmapEXT(GL_TEXTURE_2D); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, image->texture, 0); say_rbo_make_current(target->rbo); glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, say_image_get_width(image), say_image_get_height(image)); glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, target->rbo); } }