304
283
return poppler_document_get_n_pages (PDF_DOCUMENT (document)->document);
308
pdf_document_get_page_size (EvDocument *document,
287
pdf_document_get_page (EvDocument *document,
313
290
PdfDocument *pdf_document = PDF_DOCUMENT (document);
314
291
PopplerPage *poppler_page;
316
poppler_page = poppler_document_get_page (pdf_document->document, page);
317
poppler_page_get_size (poppler_page, width, height);
294
poppler_page = poppler_document_get_page (pdf_document->document, index);
295
page = ev_page_new (index);
296
page->backend_page = (EvBackendPage)g_object_ref (poppler_page);
297
page->backend_destroy_func = (EvBackendPageDestroyFunc)g_object_unref;
318
298
g_object_unref (poppler_page);
304
pdf_document_get_page_size (EvDocument *document,
309
g_return_if_fail (POPPLER_IS_PAGE (page->backend_page));
311
poppler_page_get_size (POPPLER_PAGE (page->backend_page), width, height);
322
315
pdf_document_get_page_label (EvDocument *document,
325
PopplerPage *poppler_page;
326
318
char *label = NULL;
328
poppler_page = poppler_document_get_page (PDF_DOCUMENT (document)->document,
320
g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
331
g_object_get (G_OBJECT (poppler_page),
322
g_object_get (G_OBJECT (page->backend_page),
334
g_object_unref (poppler_page);
1389
pdf_document_search_idle_callback (void *data)
1391
PdfDocumentSearch *search = (PdfDocumentSearch*) data;
1392
PdfDocument *pdf_document = search->document;
1397
page = poppler_document_get_page (search->document->document,
1398
search->search_page);
1400
ev_document_doc_mutex_lock ();
1401
matches = poppler_page_find_text (page, search->text);
1402
ev_document_doc_mutex_unlock ();
1404
g_object_unref (page);
1406
search->pages[search->search_page] = matches;
1407
ev_document_find_changed (EV_DOCUMENT_FIND (pdf_document),
1408
search->search_page);
1410
n_pages = pdf_document_get_n_pages (EV_DOCUMENT (search->document));
1411
search->search_page += 1;
1412
if (search->search_page == n_pages) {
1414
search->search_page = 0;
1417
if (search->search_page != search->start_page) {
1422
search->idle = 0; /* will return FALSE to remove */
1427
static PdfDocumentSearch *
1428
pdf_document_search_new (PdfDocument *pdf_document,
1432
PdfDocumentSearch *search;
1436
n_pages = pdf_document_get_n_pages (EV_DOCUMENT (pdf_document));
1438
search = g_new0 (PdfDocumentSearch, 1);
1440
search->text = g_strdup (text);
1441
search->pages = g_new0 (GList *, n_pages);
1442
search->document = pdf_document;
1444
/* We add at low priority so the progress bar repaints */
1445
search->idle = g_idle_add_full (G_PRIORITY_LOW,
1446
pdf_document_search_idle_callback,
1450
search->start_page = start_page;
1451
search->search_page = start_page;
1457
pdf_document_find_begin (EvDocumentFind *document,
1459
const char *search_string,
1460
gboolean case_sensitive)
1462
PdfDocument *pdf_document = PDF_DOCUMENT (document);
1464
/* FIXME handle case_sensitive (right now XPDF
1465
* code is always case insensitive for ASCII
1466
* and case sensitive for all other languaages)
1469
if (pdf_document->search &&
1470
strcmp (search_string, pdf_document->search->text) == 0)
1473
if (pdf_document->search)
1474
pdf_document_search_free (pdf_document->search);
1476
pdf_document->search = pdf_document_search_new (pdf_document,
1482
pdf_document_find_get_n_results (EvDocumentFind *document_find, int page)
1484
PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search;
1487
return g_list_length (search->pages[page]);
1494
pdf_document_find_get_result (EvDocumentFind *document_find,
1497
EvRectangle *rectangle)
1499
PdfDocument *pdf_document = PDF_DOCUMENT (document_find);
1500
PdfDocumentSearch *search = pdf_document->search;
1364
pdf_document_find_find_text (EvDocumentFind *document_find,
1367
gboolean case_sensitive)
1501
1370
PopplerPage *poppler_page;
1502
PopplerRectangle *r;
1508
r = (PopplerRectangle *) g_list_nth_data (search->pages[page],
1513
poppler_page = poppler_document_get_page (pdf_document->document, page);
1373
g_return_val_if_fail (POPPLER_IS_PAGE (page->backend_page), NULL);
1374
g_return_val_if_fail (text != NULL, NULL);
1376
poppler_page = POPPLER_PAGE (page->backend_page);
1378
matches = poppler_page_find_text (poppler_page, text);
1514
1382
poppler_page_get_size (poppler_page, NULL, &height);
1515
rectangle->x1 = r->x1;
1516
rectangle->y1 = height - r->y2;
1517
rectangle->x2 = r->x2;
1518
rectangle->y2 = height - r->y1;
1519
g_object_unref (poppler_page);
1525
pdf_document_find_page_has_results (EvDocumentFind *document_find,
1528
PdfDocumentSearch *search = PDF_DOCUMENT (document_find)->search;
1530
return search && search->pages[page] != NULL;
1534
pdf_document_find_get_progress (EvDocumentFind *document_find)
1536
PdfDocumentSearch *search;
1537
int n_pages, pages_done;
1539
search = PDF_DOCUMENT (document_find)->search;
1541
if (search == NULL) {
1545
n_pages = pdf_document_get_n_pages (EV_DOCUMENT (document_find));
1546
if (search->search_page > search->start_page) {
1547
pages_done = search->search_page - search->start_page + 1;
1548
} else if (search->search_page == search->start_page) {
1549
pages_done = n_pages;
1551
pages_done = n_pages - search->start_page + search->search_page;
1554
return pages_done / (double) n_pages;
1558
pdf_document_find_cancel (EvDocumentFind *document)
1560
PdfDocument *pdf_document = PDF_DOCUMENT (document);
1562
if (pdf_document->search) {
1563
pdf_document_search_free (pdf_document->search);
1564
pdf_document->search = NULL;
1383
for (l = matches; l && l->data; l = g_list_next (l)) {
1384
PopplerRectangle *rect = (PopplerRectangle *)l->data;
1388
rect->y1 = height - rect->y2;
1389
rect->y2 = height - tmp;
1569
1396
pdf_document_find_iface_init (EvDocumentFindIface *iface)
1571
iface->begin = pdf_document_find_begin;
1572
iface->get_n_results = pdf_document_find_get_n_results;
1573
iface->get_result = pdf_document_find_get_result;
1574
iface->page_has_results = pdf_document_find_page_has_results;
1575
iface->get_progress = pdf_document_find_get_progress;
1576
iface->cancel = pdf_document_find_cancel;
1398
iface->find_text = pdf_document_find_find_text;
1885
1699
GdkColor *text,
1886
1700
GdkColor *base)
1888
PdfDocument *pdf_document;
1702
PopplerPage *poppler_page;
1889
1703
double width_points, height_points;
1890
1704
gint width, height;
1892
pdf_document = PDF_DOCUMENT (selection);
1893
set_rc_data (pdf_document, rc);
1706
poppler_page = POPPLER_PAGE (rc->page->backend_page);
1895
poppler_page_get_size (POPPLER_PAGE (rc->data),
1708
poppler_page_get_size (poppler_page,
1896
1709
&width_points, &height_points);
1897
1710
width = (int) ((width_points * rc->scale) + 0.5);
1898
1711
height = (int) ((height_points * rc->scale) + 0.5);
1900
1713
#ifdef HAVE_POPPLER_PAGE_RENDER
1903
#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
1904
GdkColor text_color, base_color;
1909
1715
PopplerColor text_color, base_color;
1911
1717
text_color.red = text->red;
2020
1821
EvSelectionStyle style,
2021
1822
EvRectangle *points)
2023
PdfDocument *pdf_document;
1824
PopplerPage *poppler_page;
2024
1825
GdkRegion *retval;
2026
pdf_document = PDF_DOCUMENT (selection);
2028
set_rc_data (pdf_document, rc);
2030
#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
2031
retval = poppler_page_get_selection_region (POPPLER_PAGE (rc->data),
2033
(PopplerSelectionStyle)style,
2034
(PopplerRectangle *) points);
2038
region = poppler_page_get_selection_region (POPPLER_PAGE (rc->data),
1828
poppler_page = POPPLER_PAGE (rc->page->backend_page);
1830
region = poppler_page_get_selection_region (poppler_page,
2040
1832
(PopplerSelectionStyle)style,
2041
1833
(PopplerRectangle *) points);
2042
1834
retval = create_gdk_region_from_poppler_region (region);
2043
1835
g_list_free (region);
2050
1841
pdf_selection_get_selection_map (EvSelection *selection,
2051
1842
EvRenderContext *rc)
2053
PdfDocument *pdf_document;
2054
1844
PopplerPage *poppler_page;
2055
1845
PopplerRectangle points;
2057
1847
GdkRegion *retval;
2059
pdf_document = PDF_DOCUMENT (selection);
2060
poppler_page = poppler_document_get_page (pdf_document->document,
1849
poppler_page = POPPLER_PAGE (rc->page->backend_page);
2063
1851
points.x1 = 0.0;
2064
1852
points.y1 = 0.0;
2065
1853
poppler_page_get_size (poppler_page, &(points.x2), &(points.y2));
2067
#if POPPLER_MAJOR_VERSION <= 6 || (POPPLER_MAJOR_VERSION == 7 && POPPLER_MINOR_VERSION < 2)
2068
retval = poppler_page_get_selection_region (poppler_page, 1.0,
2069
POPPLER_SELECTION_GLYPH,
2072
1855
region = poppler_page_get_selection_region (poppler_page, 1.0,
2073
1856
POPPLER_SELECTION_GLYPH,
2075
1858
retval = create_gdk_region_from_poppler_region (region);
2076
1859
g_list_free (region);
2078
g_object_unref (poppler_page);
2360
2141
EvFormField *field,
2361
2142
gboolean state)
2363
PdfDocument *pdf_document = PDF_DOCUMENT (document);
2364
2144
PopplerFormField *poppler_field;
2366
poppler_field = poppler_document_get_form_field (pdf_document->document, field->id);
2146
poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
2367
2147
if (!poppler_field)
2370
2150
poppler_form_field_button_set_state (poppler_field, state);
2371
g_object_unref (poppler_field);
2374
2153
static gboolean
2375
2154
pdf_document_forms_form_field_button_get_state (EvDocumentForms *document,
2376
2155
EvFormField *field)
2378
PdfDocument *pdf_document = PDF_DOCUMENT (document);
2379
2157
PopplerFormField *poppler_field;
2380
2158
gboolean state;
2382
poppler_field = poppler_document_get_form_field (pdf_document->document, field->id);
2160
poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
2383
2161
if (!poppler_field)
2386
2164
state = poppler_form_field_button_get_state (poppler_field);
2387
g_object_unref (poppler_field);
2466
2235
EvFormField *field,
2469
PdfDocument *pdf_document = PDF_DOCUMENT (document);
2470
2238
PopplerFormField *poppler_field;
2472
poppler_field = poppler_document_get_form_field (pdf_document->document, field->id);
2240
poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
2473
2241
if (!poppler_field)
2476
2244
poppler_form_field_choice_toggle_item (poppler_field, index);
2477
g_object_unref (poppler_field);
2481
2248
pdf_document_forms_form_field_choice_unselect_all (EvDocumentForms *document,
2482
2249
EvFormField *field)
2484
PdfDocument *pdf_document = PDF_DOCUMENT (document);
2485
2251
PopplerFormField *poppler_field;
2487
poppler_field = poppler_document_get_form_field (pdf_document->document, field->id);
2253
poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
2488
2254
if (!poppler_field)
2491
2257
poppler_form_field_choice_unselect_all (poppler_field);
2492
g_object_unref (poppler_field);
2497
2262
EvFormField *field,
2498
2263
const gchar *text)
2500
PdfDocument *pdf_document = PDF_DOCUMENT (document);
2501
2265
PopplerFormField *poppler_field;
2503
poppler_field = poppler_document_get_form_field (pdf_document->document, field->id);
2267
poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
2504
2268
if (!poppler_field)
2507
2271
poppler_form_field_choice_set_text (poppler_field, text);
2508
g_object_unref (poppler_field);
2512
2275
pdf_document_forms_form_field_choice_get_text (EvDocumentForms *document,
2513
2276
EvFormField *field)
2515
PdfDocument *pdf_document = PDF_DOCUMENT (document);
2516
2278
PopplerFormField *poppler_field;
2519
poppler_field = poppler_document_get_form_field (pdf_document->document, field->id);
2281
poppler_field = POPPLER_FORM_FIELD (g_object_get_data (G_OBJECT (field), "poppler-field"));
2520
2282
if (!poppler_field)
2523
2285
text = poppler_form_field_choice_get_text (poppler_field);
2524
g_object_unref (poppler_field);