1 #include "PopplerGlibPage.h"
2
3
PopplerGlibPage(PopplerPage * page)4 PopplerGlibPage::PopplerGlibPage(PopplerPage* page): page(page) {
5 if (page != nullptr) {
6 g_object_ref(page);
7 }
8 }
9
PopplerGlibPage(const PopplerGlibPage & other)10 PopplerGlibPage::PopplerGlibPage(const PopplerGlibPage& other): page(other.page) {
11 if (page != nullptr) {
12 g_object_ref(page);
13 }
14 }
15
~PopplerGlibPage()16 PopplerGlibPage::~PopplerGlibPage() {
17 if (page) {
18 g_object_unref(page);
19 page = nullptr;
20 }
21 }
22
operator =(const PopplerGlibPage & other)23 PopplerGlibPage& PopplerGlibPage::operator=(const PopplerGlibPage& other) {
24 if (&other == this) {
25 return *this;
26 }
27 if (page) {
28 g_object_unref(page);
29 page = nullptr;
30 }
31
32 page = other.page;
33 if (page != nullptr) {
34 g_object_ref(page);
35 }
36 return *this;
37 }
38
getWidth()39 auto PopplerGlibPage::getWidth() -> double {
40 double width = 0;
41 poppler_page_get_size(page, &width, nullptr);
42
43 return width;
44 }
45
getHeight()46 auto PopplerGlibPage::getHeight() -> double {
47 double height = 0;
48 poppler_page_get_size(page, nullptr, &height);
49
50 return height;
51 }
52
render(cairo_t * cr,bool forPrinting)53 void PopplerGlibPage::render(cairo_t* cr, bool forPrinting) // NOLINT(google-default-arguments)
54 {
55 if (forPrinting) {
56 poppler_page_render_for_printing(page, cr);
57 } else {
58 poppler_page_render(page, cr);
59 }
60 }
61
getPageId()62 auto PopplerGlibPage::getPageId() -> int { return poppler_page_get_index(page); }
63
findText(string & text)64 auto PopplerGlibPage::findText(string& text) -> vector<XojPdfRectangle> {
65 vector<XojPdfRectangle> findings;
66
67 double height = getHeight();
68 GList* matches = poppler_page_find_text(page, text.c_str());
69
70 for (GList* l = matches; l && l->data; l = g_list_next(l)) {
71 auto* rect = static_cast<PopplerRectangle*>(l->data);
72
73 findings.emplace_back(rect->x1, height - rect->y1, rect->x2, height - rect->y2);
74
75 poppler_rectangle_free(rect);
76 }
77 g_list_free(matches);
78
79 return findings;
80 }
81