Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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);

    }
}