static void run_main_loop(void) { glViewport(0, 0, window_w, window_h); glClearColor(0.3f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, window_w, window_h, 0, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); ui_begin(); if (search_active) { float start_time = glfwGetTime(); if (ui.key == KEY_ESCAPE) search_active = 0; /* ignore events during search */ ui.key = ui.mod = 0; ui.down = ui.middle = ui.right = 0; while (glfwGetTime() < start_time + 0.2) { search_hit_count = fz_search_page_number(ctx, doc, search_page, search_needle, search_hit_bbox, nelem(search_hit_bbox)); if (search_hit_count) { search_active = 0; search_hit_page = search_page; jump_to_page(search_hit_page); break; } else { search_page += search_dir; if (search_page < 0 || search_page == fz_count_pages(ctx, doc)) { search_active = 0; break; } } } /* keep searching later */ if (search_active) ui_needs_update = 1; } do_app(); canvas_w = window_w - canvas_x; canvas_h = window_h - canvas_y; do_canvas(); if (showinfo) do_info(); if (showoutline) do_outline(outline, canvas_x); if (showsearch) { int state = ui_input(canvas_x, 0, canvas_x + canvas_w, ui.lineheight+4, &search_input); if (state == -1) { ui.focus = NULL; showsearch = 0; } else if (state == 1) { ui.focus = NULL; showsearch = 0; search_page = -1; if (search_needle) { fz_free(ctx, search_needle); search_needle = NULL; } if (search_input.end > search_input.text) { search_needle = fz_strdup(ctx, search_input.text); search_active = 1; search_page = currentpage; } } ui_needs_update = 1; } if (search_active) { char buf[256]; sprintf(buf, "Searching page %d of %d.", search_page + 1, fz_count_pages(ctx, doc)); ui_label_draw(canvas_x, 0, canvas_x + canvas_w, ui.lineheight+4, buf); } ui_end(); glfwSwapBuffers(window); ogl_assert(ctx, "swap buffers"); }
std::string outline() { std::vector<FT_Vector> pointsv(ftpoints,ftpoints+ftoutline.n_points); std::vector<char> tagsv(tags,tags+ftoutline.n_points); std::vector<short> contoursv(contours,contours+ftoutline.n_contours); return do_outline(pointsv, tagsv, contoursv); }