poppler 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,291 @@
1
+ /* -*- c-file-style: "ruby" -*- */
2
+ /**********************************************************************
3
+
4
+ rbpoppler-form-field.c -
5
+
6
+ Copyright (C) 2008 Ruby-GNOME2 Project Team
7
+
8
+ **********************************************************************/
9
+
10
+ #include "rbpoppler-private.h"
11
+
12
+ #define RVAL2FF(obj) RVAL2POPPLER_FORM_FIELD(obj)
13
+ #define RVAL2TF(obj) RVAL2FF(obj)
14
+ #define RVAL2BF(obj) RVAL2FF(obj)
15
+ #define RVAL2CF(obj) RVAL2FF(obj)
16
+
17
+ #define FFT2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_FORM_FIELD_TYPE))
18
+ #define RVAL2FFT(obj) (RVAL2GENUM(obj, POPPLER_TYPE_FORM_FIELD_TYPE))
19
+ #define FBT2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_FORM_BUTTON_TYPE))
20
+ #define FTT2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_FORM_TEXT_TYPE))
21
+ #define FCT2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_FORM_CHOICE_TYPE))
22
+
23
+ static VALUE cUnknownField, cTextField, cButtonField;
24
+ static VALUE cChoiceField, cSignatureField;
25
+
26
+ VALUE
27
+ rb_poppler_ruby_object_from_form_field(PopplerFormField *field)
28
+ {
29
+ VALUE obj;
30
+
31
+ obj = rbgobj_ruby_object_from_instance2(field, FALSE);
32
+ if (NIL_P(obj)) {
33
+ switch (poppler_form_field_get_field_type(field)) {
34
+ case POPPLER_FORM_FIELD_UNKNOWN:
35
+ obj = rbgobj_create_object(cUnknownField);
36
+ break;
37
+ case POPPLER_FORM_FIELD_BUTTON:
38
+ obj = rbgobj_create_object(cButtonField);
39
+ break;
40
+ case POPPLER_FORM_FIELD_TEXT:
41
+ obj = rbgobj_create_object(cTextField);
42
+ break;
43
+ case POPPLER_FORM_FIELD_CHOICE:
44
+ obj = rbgobj_create_object(cChoiceField);
45
+ break;
46
+ case POPPLER_FORM_FIELD_SIGNATURE:
47
+ obj = rbgobj_create_object(cSignatureField);
48
+ break;
49
+ }
50
+ g_object_ref(field);
51
+ G_INITIALIZE(obj, (gpointer)field);
52
+ }
53
+
54
+ return obj;
55
+ }
56
+
57
+ /* FormField */
58
+ static VALUE
59
+ form_field_get_id(VALUE self)
60
+ {
61
+ return INT2NUM(poppler_form_field_get_id(RVAL2FF(self)));
62
+ }
63
+
64
+ static VALUE
65
+ form_field_get_font_size(VALUE self)
66
+ {
67
+ return rb_float_new(poppler_form_field_get_font_size(RVAL2FF(self)));
68
+ }
69
+
70
+ static VALUE
71
+ form_field_is_read_only(VALUE self)
72
+ {
73
+ return CBOOL2RVAL(poppler_form_field_is_read_only(RVAL2FF(self)));
74
+ }
75
+
76
+ /* Button Field */
77
+ static VALUE
78
+ button_field_get_button_type(VALUE self)
79
+ {
80
+ return FBT2RVAL(poppler_form_field_button_get_button_type(RVAL2FF(self)));
81
+ }
82
+
83
+ static VALUE
84
+ button_field_get_state(VALUE self)
85
+ {
86
+ return CBOOL2RVAL(poppler_form_field_button_get_state(RVAL2BF(self)));
87
+ }
88
+
89
+ static VALUE
90
+ button_field_set_state(VALUE self, VALUE state)
91
+ {
92
+ poppler_form_field_button_set_state(RVAL2BF(self), RVAL2CBOOL(state));
93
+ return Qnil;
94
+ }
95
+
96
+ /* Text Field */
97
+ static VALUE
98
+ text_field_get_text_type(VALUE self)
99
+ {
100
+ return FTT2RVAL(poppler_form_field_text_get_text_type(RVAL2TF(self)));
101
+ }
102
+
103
+ static VALUE
104
+ text_field_get_text(VALUE self)
105
+ {
106
+ return CSTR2RVAL(poppler_form_field_text_get_text(RVAL2TF(self)));
107
+ }
108
+
109
+ static VALUE
110
+ text_field_set_text(VALUE self, VALUE text)
111
+ {
112
+ poppler_form_field_text_set_text(RVAL2TF(self), RVAL2CSTR2(text));
113
+ return Qnil;
114
+ }
115
+
116
+ static VALUE
117
+ text_field_get_max_length(VALUE self)
118
+ {
119
+ return INT2NUM(poppler_form_field_text_get_max_len(RVAL2TF(self)));
120
+ }
121
+
122
+ static VALUE
123
+ text_field_do_spell_check(VALUE self)
124
+ {
125
+ return CBOOL2RVAL(poppler_form_field_text_do_spell_check(RVAL2TF(self)));
126
+ }
127
+
128
+ static VALUE
129
+ text_field_do_scroll(VALUE self)
130
+ {
131
+ return CBOOL2RVAL(poppler_form_field_text_do_scroll(RVAL2TF(self)));
132
+ }
133
+
134
+ static VALUE
135
+ text_field_is_rich_text(VALUE self)
136
+ {
137
+ return CBOOL2RVAL(poppler_form_field_text_is_rich_text(RVAL2TF(self)));
138
+ }
139
+
140
+ static VALUE
141
+ text_field_is_password(VALUE self)
142
+ {
143
+ return CBOOL2RVAL(poppler_form_field_text_is_password(RVAL2TF(self)));
144
+ }
145
+
146
+
147
+ /* Choice Field */
148
+ static VALUE
149
+ choice_field_get_choice_type(VALUE self)
150
+ {
151
+ return FCT2RVAL(poppler_form_field_choice_get_choice_type(RVAL2CF(self)));
152
+ }
153
+
154
+ static VALUE
155
+ choice_field_is_editable(VALUE self)
156
+ {
157
+ return CBOOL2RVAL(poppler_form_field_choice_is_editable(RVAL2CF(self)));
158
+ }
159
+
160
+ static VALUE
161
+ choice_field_can_select_multiple(VALUE self)
162
+ {
163
+ return CBOOL2RVAL(poppler_form_field_choice_can_select_multiple(RVAL2CF(self)));
164
+ }
165
+
166
+ static VALUE
167
+ choice_field_do_spell_check(VALUE self)
168
+ {
169
+ return CBOOL2RVAL(poppler_form_field_choice_do_spell_check(RVAL2CF(self)));
170
+ }
171
+
172
+ static VALUE
173
+ choice_field_commit_on_change(VALUE self)
174
+ {
175
+ return CBOOL2RVAL(poppler_form_field_choice_commit_on_change(RVAL2CF(self)));
176
+ }
177
+
178
+ static VALUE
179
+ choice_field_get_n_items(VALUE self)
180
+ {
181
+ return INT2NUM(poppler_form_field_choice_get_n_items(RVAL2CF(self)));
182
+ }
183
+
184
+ static VALUE
185
+ choice_field_get_item(VALUE self, VALUE index)
186
+ {
187
+ return CSTR2RVAL(poppler_form_field_choice_get_item(RVAL2CF(self),
188
+ NUM2INT(index)));
189
+ }
190
+
191
+ static VALUE
192
+ choice_field_is_item_selected(VALUE self, VALUE index)
193
+ {
194
+ return CBOOL2RVAL(poppler_form_field_choice_is_item_selected(RVAL2CF(self),
195
+ NUM2INT(index)));
196
+ }
197
+
198
+ static VALUE
199
+ choice_field_select_item(VALUE self, VALUE index)
200
+ {
201
+ poppler_form_field_choice_select_item(RVAL2CF(self), NUM2INT(index));
202
+ return Qnil;
203
+ }
204
+
205
+ static VALUE
206
+ choice_field_unselect_all(VALUE self)
207
+ {
208
+ poppler_form_field_choice_unselect_all(RVAL2CF(self));
209
+ return Qnil;
210
+ }
211
+
212
+ static VALUE
213
+ choice_field_toggle_item(VALUE self, VALUE index)
214
+ {
215
+ poppler_form_field_choice_toggle_item(RVAL2CF(self), NUM2INT(index));
216
+ return Qnil;
217
+ }
218
+
219
+ static VALUE
220
+ choice_field_set_text(VALUE self, VALUE text)
221
+ {
222
+ poppler_form_field_choice_set_text(RVAL2CF(self), RVAL2CSTR2(text));
223
+ return Qnil;
224
+ }
225
+
226
+ static VALUE
227
+ choice_field_get_text(VALUE self)
228
+ {
229
+ return CSTR2RVAL(poppler_form_field_choice_get_text(RVAL2CF(self)));
230
+ }
231
+
232
+ void
233
+ Init_poppler_form_field(VALUE mPoppler)
234
+ {
235
+ VALUE cFormField;
236
+
237
+ cFormField = G_DEF_CLASS(POPPLER_TYPE_FORM_FIELD, "FormField", mPoppler);
238
+ cUnknownField = rb_define_class_under(mPoppler, "UnknownField", cFormField);
239
+ cTextField = rb_define_class_under(mPoppler, "TextField", cFormField);
240
+ cButtonField = rb_define_class_under(mPoppler, "ButtonField", cFormField);
241
+ cChoiceField = rb_define_class_under(mPoppler, "ChoiceField", cFormField);
242
+ cSignatureField = rb_define_class_under(mPoppler, "SignatureField",
243
+ cFormField);
244
+
245
+ /* FormField */
246
+ rb_define_method(cFormField, "id", form_field_get_id, 0);
247
+ rb_define_method(cFormField, "font_size", form_field_get_font_size, 0);
248
+ rb_define_method(cFormField, "read_only?", form_field_is_read_only, 0);
249
+
250
+ G_DEF_SETTERS(cFormField);
251
+
252
+
253
+ rb_define_method(cButtonField, "type", button_field_get_button_type, 0);
254
+ rb_define_method(cButtonField, "active?", button_field_get_state, 0);
255
+ rb_define_method(cButtonField, "set_active", button_field_set_state, 1);
256
+
257
+ G_DEF_SETTERS(cButtonField);
258
+
259
+
260
+ rb_define_method(cTextField, "type", text_field_get_text_type, 0);
261
+ rb_define_method(cTextField, "text", text_field_get_text, 0);
262
+ rb_define_method(cTextField, "set_text", text_field_set_text, 1);
263
+ rb_define_method(cTextField, "max_length", text_field_get_max_length, 0);
264
+ rb_define_method(cTextField, "spell_check?", text_field_do_spell_check, 0);
265
+ rb_define_method(cTextField, "scroll?", text_field_do_scroll, 0);
266
+ rb_define_method(cTextField, "rich_text?", text_field_is_rich_text, 0);
267
+ rb_define_method(cTextField, "password?", text_field_is_password, 0);
268
+
269
+ G_DEF_SETTERS(cTextField);
270
+
271
+
272
+ rb_define_method(cChoiceField, "type", choice_field_get_choice_type, 0);
273
+ rb_define_method(cChoiceField, "editable?", choice_field_is_editable, 0);
274
+ rb_define_method(cChoiceField, "select_multiple?",
275
+ choice_field_can_select_multiple, 0);
276
+ rb_define_method(cChoiceField, "spell_check?",
277
+ choice_field_do_spell_check, 0);
278
+ rb_define_method(cChoiceField, "commit_on_change?",
279
+ choice_field_commit_on_change, 0);
280
+ rb_define_method(cChoiceField, "n_items", choice_field_get_n_items, 0);
281
+ rb_define_method(cChoiceField, "[]", choice_field_get_item, 1);
282
+ rb_define_method(cChoiceField, "selected?",
283
+ choice_field_is_item_selected, 1);
284
+ rb_define_method(cChoiceField, "select", choice_field_select_item, 1);
285
+ rb_define_method(cChoiceField, "unselect_all", choice_field_unselect_all, 0);
286
+ rb_define_method(cChoiceField, "toggle", choice_field_toggle_item, 1);
287
+ rb_define_method(cChoiceField, "text", choice_field_get_text, 0);
288
+ rb_define_method(cChoiceField, "set_text", choice_field_set_text, 1);
289
+
290
+ G_DEF_SETTERS(cChoiceField);
291
+ }
@@ -0,0 +1,773 @@
1
+ /* -*- c-file-style: "ruby" -*- */
2
+ /**********************************************************************
3
+
4
+ rbpoppler-page.c -
5
+
6
+ Copyright (C) 2006-2008 Ruby-GNOME2 Project Team
7
+
8
+ **********************************************************************/
9
+
10
+ #include "rbpoppler-private.h"
11
+
12
+ #define SELF(self) (POPPLER_PAGE(RVAL2GOBJ(self)))
13
+
14
+ #ifndef GDK_TYPE_REGION
15
+ extern GType gdk_region_get_type(void);
16
+ # define GDK_TYPE_REGION (gdk_region_get_type())
17
+ #endif
18
+
19
+ #define GDK_REGION2RVAL(obj) (BOXED2RVAL(obj, GDK_TYPE_REGION))
20
+ #define RVAL2GDK_PIXBUF(pixbuf) (GDK_PIXBUF(RVAL2GOBJ(pixbuf)))
21
+
22
+
23
+ #define SEL_STYLE2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_SELECTION_STYLE))
24
+ #define RVAL2SEL_STYLE(obj) (RVAL2GENUM(obj, POPPLER_TYPE_SELECTION_STYLE))
25
+
26
+ #define RVAL2TRANS(obj) ((PopplerPageTransition *)RVAL2BOXED(obj, POPPLER_TYPE_PAGE_TRANSITION))
27
+ #define TRANS2RVAL(obj) (BOXED2RVAL(obj, POPPLER_TYPE_PAGE_TRANSITION))
28
+ #define RVAL2LM(obj) ((PopplerLinkMapping *)RVAL2BOXED(obj, POPPLER_TYPE_LINK_MAPPING))
29
+ #define RVAL2IM(obj) ((PopplerImageMapping *)RVAL2BOXED(obj, POPPLER_TYPE_IMAGE_MAPPING))
30
+ #define RVAL2FFM(obj) ((PopplerFormFieldMapping *)RVAL2BOXED(obj, POPPLER_TYPE_FORM_FIELD_MAPPING))
31
+ #define RVAL2AM(obj) ((PopplerAnnotMapping *)RVAL2BOXED(obj, POPPLER_TYPE_ANNOT_MAPPING))
32
+
33
+ #define TT2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_PAGE_TRANSITION_TYPE))
34
+ #define RVAL2TT(obj) (RVAL2GENUM(obj, POPPLER_TYPE_PAGE_TRANSITION_TYPE))
35
+ #define TA2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_PAGE_TRANSITION_ALIGNMENT))
36
+ #define RVAL2TA(obj) (RVAL2GENUM(obj, POPPLER_TYPE_PAGE_TRANSITION_ALIGNMENT))
37
+ #define TD2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_PAGE_TRANSITION_DIRECTION))
38
+ #define RVAL2TD(obj) (RVAL2GENUM(obj, POPPLER_TYPE_PAGE_TRANSITION_DIRECTION))
39
+
40
+ static VALUE cPSFile, cRectangle;
41
+
42
+ #ifdef POPPLER_TYPE_COLOR
43
+ VALUE rb_cPopplerColor;
44
+
45
+ PopplerColor *
46
+ rb_poppler_ruby_object_to_color(VALUE color)
47
+ {
48
+ #ifdef POPPLER_WITH_GDK
49
+ if (RTEST(rb_obj_is_kind_of(color, rb_cGdkColor))) {
50
+ GdkColor *gdk_color;
51
+
52
+ gdk_color = RVAL2GDKCOLOR(color);
53
+ color = rb_funcall(rb_cPopplerColor, rb_intern("new"),
54
+ 3,
55
+ UINT2NUM(gdk_color->red),
56
+ UINT2NUM(gdk_color->green),
57
+ UINT2NUM(gdk_color->blue));
58
+ }
59
+ #endif
60
+
61
+ return RVAL2BOXED(color, POPPLER_TYPE_COLOR);
62
+ }
63
+
64
+ VALUE
65
+ rb_poppler_ruby_object_from_color_with_free(PopplerColor *color)
66
+ {
67
+ VALUE rb_color;
68
+
69
+ rb_color = POPPLER_COLOR2RVAL(color);
70
+ g_free(color);
71
+ return rb_color;
72
+ }
73
+ #endif
74
+
75
+ #ifdef POPPLER_WITH_GDK
76
+ static VALUE
77
+ page_render_to_pixbuf(VALUE self, VALUE src_x, VALUE src_y, VALUE src_width,
78
+ VALUE src_height, VALUE scale, VALUE rotation,
79
+ VALUE pixbuf)
80
+ {
81
+ poppler_page_render_to_pixbuf(SELF(self), NUM2INT(src_x),
82
+ NUM2INT(src_y), NUM2INT(src_width),
83
+ NUM2INT(src_height), NUM2DBL(scale),
84
+ NUM2INT(rotation), RVAL2GOBJ(pixbuf));
85
+ return Qnil;
86
+ }
87
+ #endif
88
+
89
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
90
+ static VALUE
91
+ page_render(VALUE self, VALUE cairo)
92
+ {
93
+ poppler_page_render(SELF(self), RVAL2CRCONTEXT(cairo));
94
+ return Qnil;
95
+ }
96
+ #endif
97
+
98
+ static VALUE
99
+ page_render_to_ps(VALUE self, VALUE ps_file)
100
+ {
101
+ poppler_page_render_to_ps(SELF(self), RVAL2GOBJ(ps_file));
102
+ return Qnil;
103
+ }
104
+
105
+ static VALUE
106
+ page_render_generic(int argc, VALUE *argv, VALUE self)
107
+ {
108
+ if (argc == 1) {
109
+ if (RVAL2CBOOL(rb_obj_is_kind_of(argv[0], cPSFile))) {
110
+ return page_render_to_ps(self, argv[0]);
111
+ } else {
112
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
113
+ return page_render(self, argv[0]);
114
+ #else
115
+ rb_raise(rb_eArgError, "cairo is not available");
116
+ #endif
117
+ }
118
+ } else if (argc == 7) {
119
+ #ifdef POPPLER_WITH_GDK
120
+ return page_render_to_pixbuf(self, argv[0], argv[1], argv[2], argv[3],
121
+ argv[4], argv[5], argv[6]);
122
+ #else
123
+ rb_raise(rb_eArgError, "GDK is not available");
124
+ #endif
125
+ } else {
126
+ rb_raise(rb_eArgError,
127
+ "wrong number of arguments (%d for 1 or 7)",
128
+ argc);
129
+ }
130
+ }
131
+
132
+ #ifdef POPPLER_WITH_GDK
133
+ static VALUE
134
+ page_render_to_pixbuf_for_printing(VALUE self, VALUE src_x, VALUE src_y,
135
+ VALUE src_width, VALUE src_height,
136
+ VALUE scale, VALUE rotation, VALUE pixbuf)
137
+ {
138
+ poppler_page_render_to_pixbuf_for_printing(SELF(self), NUM2INT(src_x),
139
+ NUM2INT(src_y),
140
+ NUM2INT(src_width),
141
+ NUM2INT(src_height),
142
+ NUM2DBL(scale),
143
+ NUM2INT(rotation),
144
+ RVAL2GOBJ(pixbuf));
145
+ return Qnil;
146
+ }
147
+ #endif
148
+
149
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
150
+ static VALUE
151
+ page_render_for_printing(VALUE self, VALUE cairo)
152
+ {
153
+ poppler_page_render_for_printing(SELF(self), RVAL2CRCONTEXT(cairo));
154
+ return Qnil;
155
+ }
156
+ #endif
157
+
158
+ static VALUE
159
+ page_render_for_printing_generic(int argc, VALUE *argv, VALUE self)
160
+ {
161
+ if (argc == 1) {
162
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
163
+ return page_render_for_printing(self, argv[0]);
164
+ #else
165
+ rb_raise(rb_eArgError, "cairo is not available");
166
+ #endif
167
+ } else if (argc == 7) {
168
+ #ifdef POPPLER_WITH_GDK
169
+ return page_render_to_pixbuf_for_printing(self, argv[0], argv[1],
170
+ argv[2], argv[3],
171
+ argv[4], argv[5], argv[6]);
172
+ #else
173
+ rb_raise(rb_eArgError, "GDK is not available");
174
+ #endif
175
+ } else {
176
+ rb_raise(rb_eArgError,
177
+ "wrong number of arguments (%d for 1 or 7)", argc);
178
+ }
179
+ }
180
+
181
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
182
+ static VALUE
183
+ page_render_selection(VALUE self, VALUE cairo,
184
+ VALUE selection, VALUE rb_old_selection,
185
+ VALUE style, VALUE glyph_color, VALUE background_color)
186
+ {
187
+ PopplerRectangle *old_selection = NULL;
188
+
189
+ if (!NIL_P(rb_old_selection))
190
+ old_selection = RVAL2POPPLER_RECT(rb_old_selection);
191
+ poppler_page_render_selection(SELF(self), RVAL2CRCONTEXT(cairo),
192
+ RVAL2POPPLER_RECT(selection),
193
+ old_selection,
194
+ RVAL2SEL_STYLE(style),
195
+ RVAL2POPPLER_COLOR(glyph_color),
196
+ RVAL2POPPLER_COLOR(background_color));
197
+ return Qnil;
198
+ }
199
+ #endif
200
+
201
+ #ifdef POPPLER_WITH_GDK
202
+ static VALUE
203
+ page_render_selection_to_pixbuf(VALUE self, VALUE scale, VALUE rotation,
204
+ VALUE pixbuf, VALUE selection,
205
+ VALUE rb_old_selection,
206
+ VALUE style,
207
+ VALUE glyph_color, VALUE background_color)
208
+ {
209
+ PopplerRectangle *old_selection = NULL;
210
+
211
+ if (!NIL_P(rb_old_selection))
212
+ old_selection = RVAL2POPPLER_RECT(rb_old_selection);
213
+ poppler_page_render_selection_to_pixbuf(SELF(self),
214
+ NUM2DBL(scale),
215
+ NUM2INT(rotation),
216
+ RVAL2GOBJ(pixbuf),
217
+ RVAL2POPPLER_RECT(selection),
218
+ old_selection,
219
+ RVAL2SEL_STYLE(style),
220
+ RVAL2GDKCOLOR(glyph_color),
221
+ RVAL2GDKCOLOR(background_color));
222
+ return Qnil;
223
+ }
224
+ #endif
225
+
226
+ static VALUE
227
+ page_render_selection_generic(int argc, VALUE *argv, VALUE self)
228
+ {
229
+ if (argc == 6) {
230
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
231
+ return page_render_selection(self, argv[0], argv[1], argv[2],
232
+ argv[3], argv[4], argv[5]);
233
+ #else
234
+ rb_raise(rb_eArgError, "cairo is not available");
235
+ #endif
236
+ } else if (argc == 8) {
237
+ #ifdef POPPLER_WITH_GDK
238
+ return page_render_selection_to_pixbuf(self, argv[0], argv[1],
239
+ argv[2], argv[3], argv[4],
240
+ argv[5], argv[6], argv[7]);
241
+ #else
242
+ rb_raise(rb_eArgError, "GDK is not available");
243
+ #endif
244
+ } else {
245
+ rb_raise(rb_eArgError,
246
+ "wrong number of arguments (%d for 5 or 8)", argc);
247
+ }
248
+ }
249
+
250
+ static VALUE
251
+ page_get_size(VALUE self)
252
+ {
253
+ double width, height;
254
+ poppler_page_get_size(SELF(self), &width, &height);
255
+ return rb_ary_new3(2, rb_float_new(width), rb_float_new(height));
256
+ }
257
+
258
+ static VALUE
259
+ page_get_index(VALUE self)
260
+ {
261
+ return INT2NUM(poppler_page_get_index(SELF(self)));
262
+ }
263
+
264
+ static VALUE
265
+ page_get_duration(VALUE self)
266
+ {
267
+ return rb_float_new(poppler_page_get_duration(SELF(self)));
268
+ }
269
+
270
+ static VALUE
271
+ page_get_transition(VALUE self)
272
+ {
273
+ return TRANS2RVAL(poppler_page_get_transition(SELF(self)));
274
+ }
275
+
276
+ #if RB_POPPLER_CAIRO_AVAILABLE
277
+ static VALUE
278
+ page_get_thumbnail(VALUE self)
279
+ {
280
+ return CRSURFACE2RVAL(poppler_page_get_thumbnail(SELF(self)));
281
+ }
282
+ #endif
283
+
284
+ #ifdef POPPLER_WITH_GDK
285
+ static VALUE
286
+ page_get_thumbnail_pixbuf(VALUE self)
287
+ {
288
+ return GOBJ2RVAL(poppler_page_get_thumbnail_pixbuf(SELF(self)));
289
+ }
290
+ #endif
291
+
292
+ static VALUE
293
+ page_get_thumbnail_size(VALUE self)
294
+ {
295
+ int width, height;
296
+
297
+ if (poppler_page_get_thumbnail_size(SELF(self), &width, &height))
298
+ return rb_ary_new3(2, INT2NUM(width), INT2NUM(height));
299
+ else
300
+ return Qnil;
301
+ }
302
+
303
+ static VALUE
304
+ page_find_text(VALUE self, VALUE text)
305
+ {
306
+ return GLIST2ARY2F(poppler_page_find_text(SELF(self), RVAL2CSTR(text)),
307
+ POPPLER_TYPE_RECTANGLE);
308
+ }
309
+
310
+ static VALUE
311
+ page_get_text(int argc, VALUE *argv, VALUE self)
312
+ {
313
+ gchar *text;
314
+ PopplerSelectionStyle style = POPPLER_SELECTION_GLYPH;
315
+ VALUE rb_text, arg1, arg2, rb_rect;
316
+ PopplerPage *page;
317
+
318
+ rb_scan_args(argc, argv, "02", &arg1, &arg2);
319
+
320
+ page = SELF(self);
321
+ if (NIL_P(arg1)) {
322
+ rb_rect = arg2;
323
+ } else {
324
+ if (RTEST(rb_obj_is_kind_of(arg2, cRectangle))) {
325
+ rb_rect = arg2;
326
+ } else {
327
+ rb_rect = Qnil;
328
+ if (!NIL_P(arg2)) {
329
+ style = RVAL2SEL_STYLE(arg2);
330
+ }
331
+ }
332
+ }
333
+
334
+ if (NIL_P(rb_rect)) {
335
+ PopplerRectangle rect;
336
+ double width, height;
337
+
338
+ rect.x1 = 0;
339
+ rect.y1 = 0;
340
+ poppler_page_get_size(page, &width, &height);
341
+ rect.x2 = width;
342
+ rect.y2 = height;
343
+ text = poppler_page_get_text(page,
344
+ style,
345
+ &rect);
346
+ } else {
347
+ text = poppler_page_get_text(page,
348
+ style,
349
+ RVAL2POPPLER_RECT(rb_rect));
350
+ }
351
+
352
+ rb_text = CSTR2RVAL(text);
353
+ g_free(text);
354
+ return rb_text;
355
+ }
356
+
357
+ static VALUE
358
+ page_get_selection_region(VALUE self, VALUE scale, VALUE style, VALUE selection)
359
+ {
360
+ return GLIST2ARY2F(poppler_page_get_selection_region(SELF(self),
361
+ NUM2DBL(scale),
362
+ RVAL2SEL_STYLE(style),
363
+ RVAL2POPPLER_RECT(selection)),
364
+ POPPLER_TYPE_RECTANGLE);
365
+ }
366
+
367
+ static VALUE
368
+ page_get_link_mapping(VALUE self)
369
+ {
370
+ return GLIST2ARY2F(poppler_page_get_link_mapping(SELF(self)),
371
+ POPPLER_TYPE_LINK_MAPPING);
372
+ }
373
+
374
+ static VALUE
375
+ page_get_image_mapping(VALUE self)
376
+ {
377
+ VALUE mappings;
378
+ GList *image_mapping, *node;
379
+
380
+ mappings = rb_ary_new();
381
+ image_mapping = poppler_page_get_image_mapping(SELF(self));
382
+ for (node = image_mapping; node; node = g_list_next(node)) {
383
+ PopplerImageMapping *image_mapping;
384
+ VALUE mapping;
385
+
386
+ image_mapping = node->data;
387
+ mapping = BOXED2RVAL(image_mapping, POPPLER_TYPE_IMAGE_MAPPING);
388
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
389
+ rb_iv_set(mapping, "@page", self);
390
+ #endif
391
+ rb_ary_push(mappings, mapping);
392
+ }
393
+ poppler_page_free_image_mapping(image_mapping);
394
+
395
+ return mappings;
396
+ }
397
+
398
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
399
+ static VALUE
400
+ _page_get_image(VALUE self, gint image_id)
401
+ {
402
+ return CRSURFACE2RVAL(poppler_page_get_image(SELF(self), image_id));
403
+ }
404
+
405
+ static VALUE
406
+ page_get_image(VALUE self, VALUE image_id)
407
+ {
408
+ return _page_get_image(self, NUM2INT(image_id));
409
+ }
410
+ #endif
411
+
412
+ static VALUE
413
+ page_get_form_field_mapping(VALUE self)
414
+ {
415
+ return GLIST2ARY2F(poppler_page_get_form_field_mapping(SELF(self)),
416
+ POPPLER_TYPE_FORM_FIELD_MAPPING);
417
+ }
418
+
419
+ static VALUE
420
+ page_get_annot_mapping(VALUE self)
421
+ {
422
+ return GLIST2ARY2F(poppler_page_get_annot_mapping(SELF(self)),
423
+ POPPLER_TYPE_ANNOT_MAPPING);
424
+ }
425
+
426
+ static VALUE
427
+ page_get_crop_box(VALUE self)
428
+ {
429
+ PopplerRectangle rect;
430
+
431
+ poppler_page_get_crop_box(SELF(self), &rect);
432
+ return POPPLER_RECT2RVAL(&rect);
433
+ }
434
+
435
+
436
+ /* A rectangle on a page, with coordinates in PDF points. */
437
+ static VALUE
438
+ rectangle_initialize(VALUE self, VALUE x1, VALUE y1, VALUE x2, VALUE y2)
439
+ {
440
+ PopplerRectangle rectangle;
441
+
442
+ rectangle.x1 = NUM2DBL(x1);
443
+ rectangle.y1 = NUM2DBL(y1);
444
+ rectangle.x2 = NUM2DBL(x2);
445
+ rectangle.y2 = NUM2DBL(y2);
446
+
447
+ G_INITIALIZE(self, &rectangle);
448
+ return Qnil;
449
+ }
450
+
451
+ DEF_ACCESSOR(rectangle, x1, RVAL2POPPLER_RECT, rb_float_new, NUM2DBL)
452
+ DEF_ACCESSOR(rectangle, y1, RVAL2POPPLER_RECT, rb_float_new, NUM2DBL)
453
+ DEF_ACCESSOR(rectangle, x2, RVAL2POPPLER_RECT, rb_float_new, NUM2DBL)
454
+ DEF_ACCESSOR(rectangle, y2, RVAL2POPPLER_RECT, rb_float_new, NUM2DBL)
455
+
456
+ static VALUE
457
+ rectangle_to_a(VALUE self)
458
+ {
459
+ PopplerRectangle *rectangle = RVAL2POPPLER_RECT(self);
460
+ return rb_ary_new3(4,
461
+ rb_float_new(rectangle->x1),
462
+ rb_float_new(rectangle->y1),
463
+ rb_float_new(rectangle->x2),
464
+ rb_float_new(rectangle->y2));
465
+ }
466
+
467
+ static VALUE
468
+ rectangle_inspect(VALUE self)
469
+ {
470
+ VALUE inspected;
471
+ gchar *points;
472
+ PopplerRectangle *rectangle;
473
+
474
+ rectangle = RVAL2POPPLER_RECT(self);
475
+ inspected = rb_call_super(0, NULL);
476
+ rb_str_resize(inspected, RSTRING_LEN(inspected) - 1);
477
+ points = g_strdup_printf(": [%g, %g, %g, %g]>",
478
+ rectangle->x1, rectangle->y1,
479
+ rectangle->x2, rectangle->y2);
480
+ rb_str_cat2(inspected, points);
481
+ g_free(points);
482
+ return inspected;
483
+ }
484
+
485
+
486
+ #ifdef POPPLER_TYPE_COLOR
487
+ /* A color in RGB */
488
+ static VALUE
489
+ color_initialize(VALUE self, VALUE red, VALUE green, VALUE blue)
490
+ {
491
+ PopplerColor color;
492
+
493
+ color.red = NUM2UINT(red);
494
+ color.green = NUM2UINT(green);
495
+ color.blue = NUM2UINT(blue);
496
+
497
+ G_INITIALIZE(self, &color);
498
+ return Qnil;
499
+ }
500
+
501
+ DEF_ACCESSOR(color, red, RVAL2POPPLER_COLOR, UINT2NUM, NUM2UINT)
502
+ DEF_ACCESSOR(color, green, RVAL2POPPLER_COLOR, UINT2NUM, NUM2UINT)
503
+ DEF_ACCESSOR(color, blue, RVAL2POPPLER_COLOR, UINT2NUM, NUM2UINT)
504
+
505
+ static VALUE
506
+ color_to_a(VALUE self)
507
+ {
508
+ PopplerColor *color;
509
+ color = RVAL2POPPLER_COLOR(self);
510
+ return rb_ary_new3(3,
511
+ UINT2NUM(color->red),
512
+ UINT2NUM(color->green),
513
+ UINT2NUM(color->blue));
514
+ }
515
+
516
+ static VALUE
517
+ color_inspect(VALUE self)
518
+ {
519
+ VALUE inspected;
520
+ gchar *rgb;
521
+ PopplerColor *color;
522
+
523
+ color = RVAL2POPPLER_COLOR(self);
524
+ inspected = rb_call_super(0, NULL);
525
+ rb_str_resize(inspected, RSTRING_LEN(inspected) - 1);
526
+ rgb = g_strdup_printf(": [%u, %u, %u]>",
527
+ color->red, color->green, color->blue);
528
+ rb_str_cat2(inspected, rgb);
529
+ g_free(rgb);
530
+ return inspected;
531
+ }
532
+ #endif
533
+
534
+
535
+ /* Mapping between areas on the current page and PopplerActions */
536
+ #define RECT_ENTITY2RVAL(rect) POPPLER_RECT2RVAL(&(rect))
537
+ #define RECT_ENTITY_SET(rect, rb_rect) rectangle_set(&(rect), rb_rect)
538
+ static void
539
+ rectangle_set(PopplerRectangle *rect, VALUE rb_rect)
540
+ {
541
+ *rect = *(RVAL2POPPLER_RECT(rb_rect));
542
+ }
543
+
544
+ DEF_ACCESSOR_WITH_SETTER(link_mapping, area,
545
+ RVAL2LM, RECT_ENTITY2RVAL, RECT_ENTITY_SET)
546
+ DEF_ACCESSOR(link_mapping, action, RVAL2LM,
547
+ POPPLER_ACTION2RVAL, RVAL2POPPLER_ACTION)
548
+
549
+
550
+ /* Page Transition */
551
+ DEF_ACCESSOR(page_trans, type, RVAL2TRANS, RVAL2TT, TT2RVAL)
552
+ DEF_ACCESSOR(page_trans, alignment, RVAL2TRANS, RVAL2TA, TA2RVAL)
553
+ DEF_ACCESSOR(page_trans, direction, RVAL2TRANS, RVAL2TD, TD2RVAL)
554
+ DEF_ACCESSOR(page_trans, duration, RVAL2TRANS, NUM2INT, INT2NUM)
555
+ DEF_ACCESSOR(page_trans, angle, RVAL2TRANS, NUM2INT, INT2NUM)
556
+ DEF_ACCESSOR(page_trans, scale, RVAL2TRANS, NUM2DBL, rb_float_new)
557
+ DEF_ACCESSOR(page_trans, rectangular, RVAL2TRANS, RVAL2CBOOL, CBOOL2RVAL)
558
+
559
+
560
+ /* Mapping between areas on the current page and images */
561
+ DEF_ACCESSOR_WITH_SETTER(image_mapping, area,
562
+ RVAL2IM, RECT_ENTITY2RVAL, RECT_ENTITY_SET)
563
+ DEF_ACCESSOR(image_mapping, image_id, RVAL2IM, INT2NUM, NUM2INT)
564
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
565
+ static VALUE
566
+ image_mapping_get_image(VALUE self)
567
+ {
568
+ return _page_get_image(rb_iv_get(self, "@page"), RVAL2IM(self)->image_id);
569
+ }
570
+ #endif
571
+
572
+
573
+ /* Mapping between areas on the current page and form fields */
574
+ DEF_ACCESSOR_WITH_SETTER(form_field_mapping, area,
575
+ RVAL2FFM, RECT_ENTITY2RVAL, RECT_ENTITY_SET)
576
+ DEF_ACCESSOR(form_field_mapping, field, RVAL2FFM,
577
+ POPPLER_FORM_FIELD2RVAL, RVAL2POPPLER_FORM_FIELD)
578
+
579
+ static VALUE
580
+ annot_mapping_initialize(int argc, VALUE *argv, VALUE self)
581
+ {
582
+ VALUE area, annotation;
583
+ PopplerAnnotMapping *mapping;
584
+
585
+ rb_scan_args(argc, argv, "02", &area, &annotation);
586
+
587
+ mapping = poppler_annot_mapping_new();
588
+ mapping->area = *RVAL2POPPLER_RECT(area);
589
+ mapping->annot = RVAL2POPPLER_ANNOT(annotation);
590
+ G_INITIALIZE(self, mapping);
591
+
592
+ return Qnil;
593
+ }
594
+
595
+ DEF_ACCESSOR_WITH_SETTER(annot_mapping, area,
596
+ RVAL2AM, RECT_ENTITY2RVAL, RECT_ENTITY_SET)
597
+ DEF_READER(annot_mapping, annotation, annot, RVAL2AM, POPPLER_ANNOT2RVAL)
598
+
599
+ static VALUE
600
+ annot_mapping_set_annotation(VALUE self, VALUE annotation)
601
+ {
602
+ PopplerAnnotMapping *mapping;
603
+
604
+ mapping = RVAL2AM(self);
605
+ if (mapping->annot)
606
+ g_object_unref(mapping->annot);
607
+
608
+ mapping->annot = RVAL2POPPLER_ANNOT(annotation);
609
+ return Qnil;
610
+ }
611
+
612
+ void
613
+ Init_poppler_page(VALUE mPoppler)
614
+ {
615
+ VALUE cPage, cLinkMapping;
616
+ VALUE cPageTransition, cImageMapping, cFormFieldMapping;
617
+ VALUE cAnnotationMapping;
618
+
619
+ cPage = G_DEF_CLASS(POPPLER_TYPE_PAGE, "Page", mPoppler);
620
+ cRectangle = G_DEF_CLASS(POPPLER_TYPE_RECTANGLE, "Rectangle", mPoppler);
621
+ #ifdef POPPLER_TYPE_COLOR
622
+ rb_cPopplerColor = G_DEF_CLASS(POPPLER_TYPE_COLOR, "Color", mPoppler);
623
+ #endif
624
+ cLinkMapping = G_DEF_CLASS(POPPLER_TYPE_LINK_MAPPING, "LinkMapping",
625
+ mPoppler);
626
+ cPageTransition = G_DEF_CLASS(POPPLER_TYPE_PAGE_TRANSITION,
627
+ "PageTransition", mPoppler);
628
+ cImageMapping = G_DEF_CLASS(POPPLER_TYPE_IMAGE_MAPPING,
629
+ "ImageMapping", mPoppler);
630
+ cFormFieldMapping = G_DEF_CLASS(POPPLER_TYPE_FORM_FIELD_MAPPING,
631
+ "FormFieldMapping", mPoppler);
632
+ cAnnotationMapping = G_DEF_CLASS(POPPLER_TYPE_ANNOT_MAPPING,
633
+ "AnnotationMapping", mPoppler);
634
+ cPSFile = rb_const_get(mPoppler, rb_intern("PSFile"));
635
+
636
+ rb_define_method(cPage, "render", page_render_generic, -1);
637
+ rb_define_method(cPage, "render_for_printing",
638
+ page_render_for_printing_generic, -1);
639
+ rb_define_method(cPage, "size", page_get_size, 0);
640
+ rb_define_method(cPage, "index", page_get_index, 0);
641
+ rb_define_method(cPage, "duration", page_get_duration, 0);
642
+ rb_define_method(cPage, "transition", page_get_transition, 0);
643
+
644
+ #if RB_POPPLER_CAIRO_AVAILABLE
645
+ rb_define_method(cPage, "thumbnail", page_get_thumbnail, 0);
646
+ #endif
647
+ #if POPPLER_WITH_GDK
648
+ rb_define_method(cPage, "thumbnail_pixbuf", page_get_thumbnail_pixbuf, 0);
649
+ #endif
650
+ rb_define_method(cPage, "thumbnail_size", page_get_thumbnail_size, 0);
651
+ rb_define_method(cPage, "find_text", page_find_text, 1);
652
+ rb_define_method(cPage, "get_text", page_get_text, -1);
653
+ rb_define_method(cPage, "get_selection_region",
654
+ page_get_selection_region, 3);
655
+ rb_define_method(cPage, "link_mapping", page_get_link_mapping, 0);
656
+ rb_define_method(cPage, "image_mapping", page_get_image_mapping, 0);
657
+ #if RB_POPPLER_CAIRO_AVAILABLE
658
+ rb_define_method(cPage, "get_image", page_get_image, 1);
659
+ #endif
660
+
661
+ rb_define_method(cPage, "form_field_mapping",
662
+ page_get_form_field_mapping, 0);
663
+ rb_define_method(cPage, "annotation_mapping",
664
+ page_get_annot_mapping, 0);
665
+ rb_define_method(cPage, "render_selection",
666
+ page_render_selection_generic, -1);
667
+ rb_define_method(cPage, "crop_box", page_get_crop_box, 0);
668
+
669
+ G_DEF_SETTERS(cPage);
670
+
671
+ /* A rectangle on a page, with coordinates in PDF points. */
672
+ rb_define_method(cRectangle, "initialize", rectangle_initialize, 4);
673
+ rb_define_method(cRectangle, "x1", rectangle_get_x1, 0);
674
+ rb_define_method(cRectangle, "y1", rectangle_get_y1, 0);
675
+ rb_define_method(cRectangle, "x2", rectangle_get_x2, 0);
676
+ rb_define_method(cRectangle, "y2", rectangle_get_y2, 0);
677
+ rb_define_method(cRectangle, "set_x1", rectangle_set_x1, 1);
678
+ rb_define_method(cRectangle, "set_y1", rectangle_set_y1, 1);
679
+ rb_define_method(cRectangle, "set_x2", rectangle_set_x2, 1);
680
+ rb_define_method(cRectangle, "set_y2", rectangle_set_y2, 1);
681
+ rb_define_method(cRectangle, "to_a", rectangle_to_a, 0);
682
+ rb_define_method(cRectangle, "inspect", rectangle_inspect, 0);
683
+
684
+ G_DEF_SETTERS(cRectangle);
685
+
686
+ #ifdef POPPLER_TYPE_COLOR
687
+ /* A color in RGB */
688
+ rb_define_method(rb_cPopplerColor, "initialize", color_initialize, 3);
689
+ rb_define_method(rb_cPopplerColor, "red", color_get_red, 0);
690
+ rb_define_method(rb_cPopplerColor, "green", color_get_green, 0);
691
+ rb_define_method(rb_cPopplerColor, "blue", color_get_blue, 0);
692
+ rb_define_method(rb_cPopplerColor, "set_red", color_set_red, 1);
693
+ rb_define_method(rb_cPopplerColor, "set_green", color_set_green, 1);
694
+ rb_define_method(rb_cPopplerColor, "set_blue", color_set_blue, 1);
695
+ rb_define_method(rb_cPopplerColor, "to_a", color_to_a, 0);
696
+ rb_define_method(rb_cPopplerColor, "inspect", color_inspect, 0);
697
+
698
+ G_DEF_SETTERS(rb_cPopplerColor);
699
+ #endif
700
+
701
+ /* Mapping between areas on the current page and PopplerActions */
702
+ rb_define_method(cLinkMapping, "area", link_mapping_get_area, 0);
703
+ rb_define_method(cLinkMapping, "action", link_mapping_get_action, 0);
704
+
705
+ rb_define_method(cLinkMapping, "set_area", link_mapping_set_area, 1);
706
+ rb_define_method(cLinkMapping, "set_action", link_mapping_set_action, 1);
707
+
708
+ G_DEF_SETTERS(cLinkMapping);
709
+
710
+ /* Page Transition */
711
+ rb_define_method(cPageTransition, "type", page_trans_get_type, 0);
712
+ rb_define_method(cPageTransition, "alignment", page_trans_get_alignment, 0);
713
+ rb_define_method(cPageTransition, "direction", page_trans_get_direction, 0);
714
+ rb_define_method(cPageTransition, "duration", page_trans_get_duration, 0);
715
+ rb_define_method(cPageTransition, "angle", page_trans_get_angle, 0);
716
+ rb_define_method(cPageTransition, "scale", page_trans_get_scale, 0);
717
+ rb_define_method(cPageTransition, "rectangular",
718
+ page_trans_get_rectangular, 0);
719
+
720
+ rb_define_method(cPageTransition, "set_type", page_trans_set_type, 1);
721
+ rb_define_method(cPageTransition, "set_alignment",
722
+ page_trans_set_alignment, 1);
723
+ rb_define_method(cPageTransition, "set_direction",
724
+ page_trans_set_direction, 1);
725
+ rb_define_method(cPageTransition, "set_duration",
726
+ page_trans_set_duration, 1);
727
+ rb_define_method(cPageTransition, "set_angle", page_trans_set_angle, 1);
728
+ rb_define_method(cPageTransition, "set_scale", page_trans_set_scale, 1);
729
+ rb_define_method(cPageTransition, "set_rectangular",
730
+ page_trans_set_rectangular, 1);
731
+
732
+ G_DEF_SETTERS(cPageTransition);
733
+
734
+
735
+ /* Mapping between areas on the current page and images */
736
+ rb_define_method(cImageMapping, "area", image_mapping_get_area, 0);
737
+ rb_define_method(cImageMapping, "image_id", image_mapping_get_image_id, 0);
738
+ #ifdef RB_POPPLER_CAIRO_AVAILABLE
739
+ rb_define_method(cImageMapping, "image", image_mapping_get_image, 0);
740
+ #endif
741
+
742
+ rb_define_method(cImageMapping, "set_area", image_mapping_set_area, 1);
743
+ rb_define_method(cImageMapping, "set_image_id",
744
+ image_mapping_set_image_id, 1);
745
+
746
+ G_DEF_SETTERS(cImageMapping);
747
+
748
+
749
+ /* Mapping between areas on the current page and form fields */
750
+ rb_define_method(cFormFieldMapping, "area", form_field_mapping_get_area, 0);
751
+ rb_define_method(cFormFieldMapping, "field", form_field_mapping_get_field,
752
+ 0);
753
+
754
+ rb_define_method(cFormFieldMapping, "set_area",
755
+ form_field_mapping_set_area, 1);
756
+ rb_define_method(cFormFieldMapping, "set_field",
757
+ form_field_mapping_set_field, 1);
758
+
759
+ G_DEF_SETTERS(cFormFieldMapping);
760
+
761
+ rb_define_method(cAnnotationMapping, "initialize",
762
+ annot_mapping_initialize, -1);
763
+
764
+ rb_define_method(cAnnotationMapping, "area", annot_mapping_get_area, 0);
765
+ rb_define_method(cAnnotationMapping, "annotation",
766
+ annot_mapping_get_annotation, 0);
767
+
768
+ rb_define_method(cAnnotationMapping, "set_area", annot_mapping_set_area, 1);
769
+ rb_define_method(cAnnotationMapping, "set_annotation",
770
+ annot_mapping_set_annotation, 1);
771
+
772
+ G_DEF_SETTERS(cAnnotationMapping);
773
+ }