Enlightenment CVS committal Author : doursse Project : e17 Module : proto
Dir : e17/proto/epdf/src/lib Modified Files: etk_pdf.h etk_pdf.c ewl_pdf.c Log Message: update to the new ewl api (ewl_pdf) and search stuff (ewl_pdf and etk_pdf) =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/epdf/src/lib/etk_pdf.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- etk_pdf.h 19 Feb 2006 13:29:17 -0000 1.2 +++ etk_pdf.h 15 Mar 2006 21:12:24 -0000 1.3 @@ -36,6 +36,15 @@ Evas_Poppler_Document *pdf_document; Evas_Poppler_Page *pdf_page; Ecore_List *pdf_index; + + struct { + Evas_Object *o; + char *text; + Ecore_List *list; + int page; + int is_case_sensitive; + int is_circular; + }search; }; Etk_Type *etk_pdf_type_get(); @@ -48,6 +57,9 @@ Evas_Poppler_Document *etk_pdf_pdf_document_get (Etk_Pdf *pdf); Evas_Poppler_Page *etk_pdf_pdf_page_get (Etk_Pdf *pdf); Ecore_List *etk_pdf_pdf_index_get (Etk_Pdf *pdf); +void etk_pdf_search_text_set (Etk_Pdf *pdf, const char *text); +void etk_pdf_search_is_case_sensitive (Etk_Pdf *pdf, int is_case_sensitive); +int etk_pdf_search_next (Etk_Pdf *pdf); /** @} */ =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/epdf/src/lib/etk_pdf.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- etk_pdf.c 15 Feb 2006 21:45:08 -0000 1.1 +++ etk_pdf.c 15 Mar 2006 21:12:24 -0000 1.2 @@ -3,11 +3,16 @@ #include <Edje.h> #include <stdlib.h> #include <string.h> +#include <math.h> #include "etk_signal.h" #include "etk_signal_callback.h" #include "etk_utils.h" #include "config.h" + +#define round(a) ( ((a)<0.0) ? (int)(floor((a) - 0.5)) : (int)(floor((a) + 0.5)) ) + + /** * @addtogroup Etk_Pdf * @{ @@ -88,6 +93,14 @@ pdf->pdf_document = evas_poppler_document_new (pdf->filename); pdf->pdf_index = evas_poppler_index_new (pdf->pdf_document); + pdf->page = 0; + + pdf->search.o = NULL; + pdf->search.text = NULL; + pdf->search.list = NULL; + pdf->search.page = -1; + pdf->search.is_case_sensitive = ETK_FALSE; + pdf->search.is_circular = ETK_FALSE; _etk_pdf_load(pdf); } @@ -196,6 +209,121 @@ evas_object_image_size_get(pdf->pdf_object, width, height); } +void +etk_pdf_search_text_set (Etk_Pdf *pdf, const char *text) +{ + if (!pdf) + return; + + if ((!text) || + (pdf->search.text && + strcmp (text, pdf->search.text) == 0)) + return; + + if (pdf->search.text) free (pdf->search.text); + pdf->search.text = strdup (text); + pdf->search.page = -1; +} + +void +etk_pdf_search_first_page_set (Etk_Pdf *pdf, int page) +{ + if (!pdf) + return; + + if (page != pdf->search.page) + pdf->search.page = page; +} + +void +etk_pdf_search_is_case_sensitive (Etk_Pdf *pdf, int is_case_sensitive) +{ + if (!pdf) + return; + + if (is_case_sensitive != pdf->search.is_case_sensitive) + pdf->search.is_case_sensitive = is_case_sensitive; +} + +int +etk_pdf_search_next (Etk_Pdf *pdf) +{ + if (!pdf) + return ETK_FALSE; + + if (!pdf->search.text) + return ETK_FALSE; + + if (!pdf->search.o) { + Evas *evas; + + evas = etk_widget_toplevel_evas_get(ETK_WIDGET(pdf)); + if (!evas) + return ETK_FALSE; + pdf->search.o = evas_object_rectangle_add (evas); + if (!pdf->search.o) + return ETK_FALSE; + 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 < evas_poppler_document_page_count_get (pdf->pdf_document)) { + Evas_Poppler_Page *page; + + pdf->search.page++; + printf ("page : %d\n", pdf->search.page); + page = evas_poppler_document_page_get (pdf->pdf_document, pdf->search.page); + pdf->search.list = evas_poppler_page_text_find (page, + pdf->search.text, + pdf->search.is_case_sensitive); + if (pdf->search.list) + ecore_list_goto_first (pdf->search.list); + evas_poppler_page_delete (page); + } + + /* an already existing list or a netky one */ + if (pdf->search.list) { + Rectangle *rect; + int x, y, w, h; + + if ((rect = (Rectangle *)ecore_list_next (pdf->search.list))) { + if (pdf->search.page != pdf->page) { + etk_pdf_page_set (pdf, pdf->search.page); + _etk_pdf_load (pdf); + } + etk_widget_geometry_get (ETK_WIDGET (pdf), &x, &y, &w, &h); + evas_object_move (pdf->search.o, + x + round (rect->x1 - 1), + y + 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... */ + return ETK_TRUE; + } + 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; + return ETK_TRUE; + } + else + return ETK_TRUE; +} + /************************** * * Etk specific functions @@ -218,6 +346,13 @@ pdf->pdf_page = NULL; pdf->pdf_index = NULL; + pdf->search.o = NULL; + pdf->search.text = NULL; + pdf->search.list = NULL; + pdf->search.page = -1; + pdf->search.is_case_sensitive = ETK_FALSE; + pdf->search.is_circular = ETK_FALSE; + widget->size_request = _etk_pdf_size_request; widget->size_allocate = _etk_pdf_size_allocate; =================================================================== RCS file: /cvsroot/enlightenment/e17/proto/epdf/src/lib/ewl_pdf.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ewl_pdf.c 8 Mar 2006 18:25:30 -0000 1.2 +++ ewl_pdf.c 15 Mar 2006 21:12:24 -0000 1.3 @@ -143,6 +143,13 @@ pdf->pdf_index = evas_poppler_index_new (pdf->pdf_document); pdf->page = 0; + pdf->search.o = NULL; + pdf->search.text = NULL; + pdf->search.list = NULL; + pdf->search.page = -1; + pdf->search.is_case_sensitive = FALSE; + pdf->search.is_circular = FALSE; + /* * Load the new pdf if widget has been realized */ @@ -388,12 +395,12 @@ i->oh = 1; if (i->aw || i->ah) { - ewl_image_scale_to(i, i->aw, i->ah); + ewl_image_size_set(i, i->aw, i->ah); } else { ewl_object_preferred_inner_w_set(EWL_OBJECT(i), i->ow); ewl_object_preferred_inner_h_set(EWL_OBJECT(i), i->oh); - ewl_image_scale(i, i->sw, i->sh); + ewl_image_scale_set(i, i->sw, i->sh); } /*Constrain settings*/ @@ -404,7 +411,7 @@ else cp = i->cs / (double)i->oh; - ewl_image_scale(i, cp, cp); + ewl_image_scale_set(i, cp, cp); ewl_image_tile_set(i, 0, 0, cp*i->ow, cp*i->oh); } ------------------------------------------------------- This SF.Net email is sponsored by xPML, a groundbreaking scripting language that extends applications into web and mobile media. Attend the live webcast and join the prime developer group breaking into this new coding territory! http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs