void cb_goto_key_down(Ewl_Widget *w, void *ev, void *data) { Ewl_Widget *curwidget; char temp[50]; Ewl_Event_Key_Down *e; e = (Ewl_Event_Key_Down*)ev; int k = translate_key(e); int page,totalpages; switch(k) { case K_RETURN: ewl_widget_hide(menu); totalpages=epdf_document_page_count_get(ewl_pdf_pdf_document_get(EWL_PDF(pdfwidget))); page=(int)strtol(ewl_text_text_get(EWL_TEXT(goto_entry)),NULL,10); sprintf(temp,"menuitem1"); curwidget=ewl_widget_name_find(temp); ewl_menu_collapse(EWL_MENU(curwidget)); if(page>0&&page<=totalpages) ewl_pdf_page_set(EWL_PDF(pdfwidget),page-1); break; case K_ESCAPE: sprintf(temp,"menuitem1"); curwidget=ewl_widget_name_find(temp); ewl_menu_collapse(EWL_MENU(curwidget)); ewl_widget_focus_send(menu); break; default: return; } }
void update_statusbar() { static char statlabel1str[100]; sprintf(statlabel1str,"MadPDF (OK for Menu)"); ewl_label_text_set(EWL_LABEL(statlabel1),statlabel1str); int curpage,totalpage; curpage=ewl_pdf_page_get(EWL_PDF(pdfwidget))+1; totalpage=epdf_document_page_count_get(ewl_pdf_pdf_document_get(EWL_PDF(pdfwidget))); static char statlabel2str[100]; sprintf(statlabel2str,"pg: %d/%d zoom: %d%% ",curpage,totalpage,(int)round(curscale*100.0)); double hpos,vpos; int leftarr=0,rightarr=0,downarr=0,uparr=0; if(CURRENT_W(trimpane)>CURRENT_W(scrollpane)) { hpos=ewl_scrollpane_hscrollbar_value_get(EWL_SCROLLPANE(scrollpane)); if(hpos>0.0) { leftarr=1; } if(hpos<1.0) { rightarr=1; } } if(CURRENT_H(trimpane)>CURRENT_H(scrollpane)) { vpos=ewl_scrollpane_vscrollbar_value_get(EWL_SCROLLPANE(scrollpane)); if(vpos>0.0) { uparr=1; } if(vpos<1.0) { downarr=1; } } if(leftarr||rightarr||downarr||uparr) strcat(statlabel2str,"pan: "); else strcat(statlabel2str,"pan: none"); if(leftarr) strcat(statlabel2str,"←"); if(rightarr) strcat(statlabel2str,"→"); if(downarr) strcat(statlabel2str,"↓"); if(uparr) strcat(statlabel2str,"↑"); ewl_label_text_set(EWL_LABEL(statlabel2),statlabel2str); }
static void _generate_thumb(Ethumb *e) { Epdf_Document *document; Epdf_Page *page; Evas_Object *o; const char *src_path; int w, h, ww, hh; int fx, fy, fw, fh; unsigned int npages, pagenum; ethumb_file_get(e, &src_path, NULL); document = epdf_document_new(src_path); if (!document) { fprintf(stderr, "ERROR: could not read document: %s\n", src_path); ethumb_finished_callback_call(e, 0); return; } page = epdf_page_new(document); if (!page) { fprintf(stderr, "ERROR: could not read document: %s\n", src_path); epdf_document_delete(document); ethumb_finished_callback_call(e, 0); return; } npages = epdf_document_page_count_get(document); pagenum = ethumb_document_page_get(e); if (pagenum < npages) epdf_page_page_set(page, pagenum); epdf_page_size_get(page, &w, &h); ethumb_calculate_aspect(e, w, h, &ww, &hh); ethumb_plugin_image_resize(e, ww, hh); o = evas_object_image_add(ethumb_evas_get(e)); epdf_page_render(page, o); evas_object_resize(o, ww, hh); evas_object_move(o, 0, 0); ethumb_calculate_fill(e, w, h, &fx, &fy, &fw, &fh); evas_object_image_fill_set(o, fx, fy, fw, fh); evas_object_show(o); ethumb_image_save(e); evas_object_del(o); epdf_page_delete(page); epdf_document_delete(document); ethumb_finished_callback_call(e, 1); }
int epdf_index_item_page_get(const Epdf_Document *doc, const Epdf_Index_Item *item) { fz_obj *dest; int p; int n; int g; if (!item || !item->link) return -1; if (PDF_LGOTO != item->link->kind) return -1; dest = item->link->dest; p = 0; if (fz_isint(dest)) { p = fz_toint(dest); return p; } if (fz_isdict(dest)) { /* The destination is linked from a Go-To action's D array */ fz_obj *D; D = fz_dictgets(dest, "D"); if (D && fz_isarray(D)) dest = fz_arrayget(D, 0); } n = fz_tonum(dest); g = fz_togen(dest); for (p = 1; p <= epdf_document_page_count_get(doc); p++) { fz_obj *page; int np; int gp; page = pdf_getpageobject(doc->xref, p); if (!page) continue; np = fz_tonum(page); gp = fz_togen(page); if (n == np && g == gp) return p-1; } return 0; }
/** * @param pdf: the pdf widget * @return Returns no value. * @brief go to the next page and render it */ void ewl_pdf_page_next(Ewl_Pdf *pdf) { int page; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR(pdf); DCHECK_TYPE(pdf, EWL_PDF_TYPE); if (!pdf->pdf_page) DRETURN(DLEVEL_STABLE); page = epdf_page_page_get(pdf->pdf_page); if (page < (epdf_document_page_count_get(pdf->pdf_document) - 1)) page++; ewl_pdf_page_set(pdf, page); DLEAVE_FUNCTION(DLEVEL_STABLE); }
/** * @param pdf the pdf to set the page of * @param page: the page number * @return Returns no value. * @brief Set the page of the document * * Sets the page of the document @p pdf to @p page */ void ewl_pdf_page_set(Ewl_Pdf *pdf, int page) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR(pdf); DCHECK_TYPE(pdf, EWL_PDF_TYPE); if (!pdf->pdf_document || !pdf->pdf_page || (page < 0) || (page >= epdf_document_page_count_get(pdf->pdf_document)) || (page == epdf_page_page_get(pdf->pdf_page))) DRETURN(DLEVEL_STABLE); pdf->dirty = 1; epdf_page_page_set(pdf->pdf_page, page); ewl_widget_configure(EWL_WIDGET(pdf)); DLEAVE_FUNCTION(DLEVEL_STABLE); }
int main (int argc, char *argv[]) { Ecore_Evas *ee; Evas *evas; Evas_Object *o; Epdf_Document *document; Epdf_Page *page; int page_number; int width; int height; if (argc < 3) { printf ("\nUsage: %s filename page_number\n\n", argv[0]); return EXIT_FAILURE; } if (!epdf_init ()) { printf ("Epdf can't be initialized\n"); return EXIT_FAILURE; } document = epdf_document_new (argv[1]); if (!document) { printf ("Bad pdf file\n"); goto epdf_shutdown; } sscanf (argv[2], "%d", &page_number); if (page_number >= epdf_document_page_count_get (document)) { printf ("Page number exceeds the page count of the PDF document\n"); goto document_delete; } page = epdf_page_new (document); if (!page) { printf ("Bad page\n"); goto document_delete; } epdf_page_page_set (page, page_number); epdf_page_size_get (page, &width, &height); document_info_print (document, page); if (!ecore_evas_init()) goto page_delete; ee = ecore_evas_new ("software_x11", 0, 0, width, height, NULL); /* these tests can be improved... */ if (!ee) { printf ("Can not find Software X11 engine. Trying DirectDraw engine...\n"); ee = ecore_evas_software_ddraw_new (NULL, 0, 0, width, height); if (!ee) { printf ("Can not find DirectDraw engine...\n"); printf ("Exiting...\n"); goto ecore_evas_shutdown; } } ecore_event_handler_add (ECORE_EVENT_SIGNAL_EXIT, app_signal_exit, NULL); ecore_evas_callback_delete_request_set (ee, app_delete_request); ecore_evas_title_set (ee, "Evas Pdf Test"); ecore_evas_name_class_set (ee, "evas_pdf_test", "test_evas_pdf"); ecore_evas_callback_resize_set (ee, app_resize); ecore_evas_show (ee); evas = ecore_evas_get (ee); o = evas_object_image_add (evas); evas_object_move (o, 0, 0); epdf_page_render (page, o); evas_object_show (o); ecore_main_loop_begin (); epdf_page_delete (page); epdf_document_delete (document); ecore_evas_shutdown (); epdf_shutdown (); return EXIT_SUCCESS; ecore_evas_shutdown: ecore_evas_shutdown (); page_delete: epdf_page_delete (page); document_delete: epdf_document_delete (document); epdf_shutdown: epdf_shutdown (); return EXIT_FAILURE; }
int main (int argc, char *argv[]) { Etk_Widget *window; Etk_Widget *hpaned, *vpaned; Etk_Widget *tree; Etk_Widget *list; Etk_Widget *pdf; Etk_Tree_Col *col; Etk_Tree_Row *row; Ecore_List *index; Epdf_Document *document; int page_count; int i; if (argc == 1) { printf ("Usage: %s pdf_file\n", argv[0]); return -1; } etk_init (argc, argv); /* We open the pdf file */ pdf = etk_pdf_new (); etk_pdf_file_set (ETK_PDF (pdf), argv[1]); document = ETK_PDF (pdf)->pdf_document; if (!document) { printf ("The file %s can't be opened\n", argv[1]); etk_shutdown (); return -1; } window = etk_window_new (); etk_window_title_set (ETK_WINDOW (window), "Etk Pdf Test Application"); etk_signal_connect ("delete-event", ETK_OBJECT (window), ETK_CALLBACK(_quit_cb), NULL); hpaned = etk_hpaned_new(); etk_container_add (ETK_CONTAINER (window), hpaned); etk_widget_show (hpaned); vpaned = etk_vpaned_new(); etk_paned_child1_set (ETK_PANED (hpaned), vpaned, 0); etk_widget_show (vpaned); index = etk_pdf_pdf_index_get (ETK_PDF (pdf)); if (index) { Etk_Tree_Col *col; tree = etk_tree_new (); etk_tree_mode_set (ETK_TREE (tree), ETK_TREE_MODE_TREE); etk_tree_multiple_select_set (ETK_TREE (tree), ETK_FALSE); /* column */ col = etk_tree_col_new (ETK_TREE (tree), "Index", 130, 0.0); etk_tree_col_model_add (col, etk_tree_model_text_new()); etk_tree_build (ETK_TREE (tree)); /* rows */ _tree_fill (ETK_PDF (pdf), ETK_TREE (tree), col, NULL, index); epdf_index_delete (index); /* change page */ etk_signal_connect ("row-clicked", ETK_OBJECT (tree), ETK_CALLBACK(_change_page_cb), pdf); /* we attach and show */ etk_paned_child1_set (ETK_PANED (vpaned), tree, 0); etk_widget_show (tree); } list = etk_tree_new (); etk_tree_headers_visible_set (ETK_TREE (list), ETK_FALSE); etk_tree_mode_set (ETK_TREE (list), ETK_TREE_MODE_LIST); etk_tree_multiple_select_set (ETK_TREE (list), ETK_FALSE); /* column */ col = etk_tree_col_new (ETK_TREE (list), "", 60, 0.0); etk_tree_col_model_add (col, etk_tree_model_int_new()); etk_tree_build (ETK_TREE (list)); /* rows */ page_count = epdf_document_page_count_get (ETK_PDF (pdf)->pdf_document); for (i = 0; i < page_count; i++) { int *num; row = etk_tree_row_append (ETK_TREE (list), NULL, col, i + 1, NULL); num = (int *)malloc (sizeof (int)); *num = i; etk_tree_row_data_set_full (row, num, free); } /* change page */ etk_signal_connect ("row-clicked", ETK_OBJECT (list), ETK_CALLBACK(_change_page_cb), pdf); /* we attach and show */ etk_paned_child2_set (ETK_PANED (vpaned), list, 0); etk_widget_show (list); etk_pdf_scale_set (ETK_PDF (pdf), 0.5, 0.5); etk_paned_child2_set (ETK_PANED (hpaned), pdf, 1); etk_widget_show (pdf); etk_widget_show (window); etk_main (); etk_shutdown (); return 0; }
/** * @param pdf: the pdf to change the scale * @return 1 if the text is found, 0 otherwise. * @brief Set the case of the search * * Start the search of text in the @p pdf document. The * text to search should have been set by ewl_pdf_search_text_set(). * It is @c NULL by default. The first page from which the search * starts is set by ewl_pdf_search_first_page_set(). It is 0 by default. * The search can be case sensitive or not. It is set by * ewl_pdf_search_is_case_sensitive() and it is case insensitive by * default. * * Several call of that function can be done to search several occurences * of the text in the document. When a text is found, * epdf_page_page_set() is called. */ int ewl_pdf_search_next(Ewl_Pdf *pdf) { DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET(pdf, FALSE); DCHECK_TYPE_RET(pdf, EWL_PDF_TYPE, FALSE); if (!pdf->search.text) DRETURN_INT(FALSE, DLEVEL_STABLE); if (!pdf->search.o) { Ewl_Embed *emb; emb = ewl_embed_widget_find(EWL_WIDGET(pdf)); pdf->search.o = evas_object_rectangle_add(emb->canvas); if (!pdf->search.o) DRETURN_INT(FALSE, DLEVEL_STABLE); evas_object_color_set(pdf->search.o, 0, 128, 0, 128); evas_object_hide(pdf->search.o); } next_page: /* no list, we search one */ while (!pdf->search.list && pdf->search.page < epdf_document_page_count_get(pdf->pdf_document)) { Epdf_Page *page; pdf->search.page++; printf("page : %d\n", pdf->search.page); epdf_page_page_set(pdf->pdf_page, pdf->search.page); pdf->search.list = epdf_page_text_find(page, pdf->search.text, pdf->search.is_case_sensitive); if (pdf->search.list) ecore_list_first_goto(pdf->search.list); epdf_page_delete(page); } /* an already existing list or a newly one */ if (pdf->search.list) { Epdf_Rectangle *rect; if ((rect = (Epdf_Rectangle *)ecore_list_next(pdf->search.list))) { if (pdf->search.page != epdf_page_page_get(pdf->pdf_page)) { ewl_pdf_page_set(pdf, pdf->search.page); ewl_callback_call(EWL_WIDGET(pdf), EWL_CALLBACK_REVEAL); } evas_object_move(pdf->search.o, CURRENT_X(EWL_WIDGET(pdf)) + round(rect->x1 - 1), CURRENT_Y(EWL_WIDGET(pdf)) + round(rect->y1 - 1)); evas_object_resize(pdf->search.o, round(rect->x2 - rect->x1 + 1), round(rect->y2 - rect->y1)); if (!evas_object_visible_get(pdf->search.o)) evas_object_show(pdf->search.o); /* we leave... */ DRETURN_INT(TRUE, DLEVEL_STABLE); } else { /* no more word to find. We destroy the list */ ecore_list_destroy(pdf->search.list); pdf->search.list = NULL; /* we search a new one */ printf("page0 : %d\n", pdf->search.page); goto next_page; } } evas_object_hide(pdf->search.o); if (pdf->search.is_circular) { pdf->search.page = -1; DRETURN_INT(TRUE, DLEVEL_STABLE); } else DRETURN_INT(FALSE, DLEVEL_STABLE); }