pango 3.1.1 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +27 -5
  3. data/ext/pango/depend +2 -2
  4. data/ext/pango/extconf.rb +32 -28
  5. data/ext/pango/pango.def +0 -16
  6. data/ext/pango/rb-pango-attr-list.c +64 -0
  7. data/ext/pango/rb-pango-attribute.c +147 -0
  8. data/ext/pango/rb-pango-context.c +79 -0
  9. data/ext/pango/{rbpangoconversions.h → rb-pango-conversions.h} +4 -6
  10. data/ext/pango/rb-pango-private.h +27 -0
  11. data/ext/pango/rb-pango.c +32 -0
  12. data/ext/pango/rb-pango.h +29 -0
  13. data/extconf.rb +25 -9
  14. data/lib/pango.rb +24 -68
  15. data/lib/pango/cairo-loader.rb +63 -0
  16. data/lib/pango/color.rb +31 -0
  17. data/lib/pango/deprecated.rb +37 -0
  18. data/lib/pango/font-description.rb +29 -0
  19. data/lib/pango/language.rb +29 -0
  20. data/lib/pango/layout.rb +41 -0
  21. data/lib/pango/loader.rb +87 -0
  22. data/lib/pango/markup.rb +31 -0
  23. data/lib/pango/matrix.rb +64 -0
  24. data/lib/pango/rectangle.rb +28 -0
  25. data/lib/pango/version.rb +30 -0
  26. data/test/pango-test-utils.rb +7 -7
  27. data/test/run-test.rb +34 -8
  28. data/test/test-attr-list.rb +28 -0
  29. data/test/test-color.rb +1 -3
  30. data/test/test-context.rb +4 -4
  31. data/test/test-enum.rb +37 -0
  32. data/test/test-font-description.rb +31 -0
  33. data/test/test-language.rb +2 -1
  34. data/test/test-layout.rb +12 -0
  35. data/test/test-markup.rb +30 -0
  36. data/test/test-matrix.rb +131 -5
  37. data/test/test-rectangle.rb +16 -3
  38. metadata +42 -56
  39. data/README +0 -32
  40. data/ext/pango/rbpango.c +0 -356
  41. data/ext/pango/rbpango.h +0 -95
  42. data/ext/pango/rbpangoanalysis.c +0 -218
  43. data/ext/pango/rbpangoattribute.c +0 -506
  44. data/ext/pango/rbpangoattriterator.c +0 -141
  45. data/ext/pango/rbpangoattrlist.c +0 -101
  46. data/ext/pango/rbpangocairo.c +0 -122
  47. data/ext/pango/rbpangocairocontext.c +0 -131
  48. data/ext/pango/rbpangocolor.c +0 -120
  49. data/ext/pango/rbpangocontext.c +0 -344
  50. data/ext/pango/rbpangocoverage.c +0 -106
  51. data/ext/pango/rbpangoengine.c +0 -73
  52. data/ext/pango/rbpangofont.c +0 -110
  53. data/ext/pango/rbpangofontdescription.c +0 -282
  54. data/ext/pango/rbpangofontface.c +0 -73
  55. data/ext/pango/rbpangofontfamily.c +0 -79
  56. data/ext/pango/rbpangofontmap.c +0 -102
  57. data/ext/pango/rbpangofontmetrics.c +0 -85
  58. data/ext/pango/rbpangofontset.c +0 -69
  59. data/ext/pango/rbpangofontsetsimple.c +0 -60
  60. data/ext/pango/rbpangoglyphinfo.c +0 -123
  61. data/ext/pango/rbpangoglyphitem.c +0 -125
  62. data/ext/pango/rbpangoglyphstring.c +0 -151
  63. data/ext/pango/rbpangogravity.c +0 -54
  64. data/ext/pango/rbpangoitem.c +0 -95
  65. data/ext/pango/rbpangolanguage.c +0 -94
  66. data/ext/pango/rbpangolayout.c +0 -583
  67. data/ext/pango/rbpangolayoutiter.c +0 -189
  68. data/ext/pango/rbpangolayoutline.c +0 -243
  69. data/ext/pango/rbpangologattr.c +0 -109
  70. data/ext/pango/rbpangomatrix.c +0 -143
  71. data/ext/pango/rbpangoprivate.h +0 -49
  72. data/ext/pango/rbpangorectangle.c +0 -170
  73. data/ext/pango/rbpangorenderer.c +0 -193
  74. data/ext/pango/rbpangoscript.c +0 -84
  75. data/ext/pango/rbpangoscriptiter.c +0 -92
  76. data/ext/pango/rbpangotabarray.c +0 -128
  77. data/sample/attribute.rb +0 -82
  78. data/sample/break.rb +0 -28
  79. data/sample/gdk_layout.rb +0 -27
  80. data/sample/glyphstring.rb +0 -61
  81. data/sample/item.rb +0 -37
  82. data/sample/label.rb +0 -23
  83. data/sample/layout.rb +0 -102
  84. data/sample/pango_cairo.rb +0 -66
  85. data/sample/parse.rb +0 -33
  86. data/sample/sample.txt +0 -10
  87. data/sample/script.rb +0 -23
@@ -1,218 +0,0 @@
1
- /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
- /*
3
- * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
- * Copyright (C) 2003-2005 Masao Mutoh
5
- *
6
- * This library is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU Lesser General Public
8
- * License as published by the Free Software Foundation; either
9
- * version 2.1 of the License, or (at your option) any later version.
10
- *
11
- * This library is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- * Lesser General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU Lesser General Public
17
- * License along with this library; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
- * MA 02110-1301 USA
20
- */
21
-
22
- #include "rbpangoprivate.h"
23
-
24
- #define RG_TARGET_NAMESPACE cAnalysis
25
- #define _SELF(s) (RVAL2PANGOANALYSIS(s))
26
-
27
- /**********************************/
28
- static PangoAnalysis*
29
- ana_copy(const PangoAnalysis* val)
30
- {
31
- PangoAnalysis* new_val;
32
- g_return_val_if_fail (val != NULL, NULL);
33
- new_val = g_new(PangoAnalysis, 1);
34
- *new_val = *val;
35
- return new_val;
36
- }
37
-
38
- GType
39
- pango_analysis_get_type(void)
40
- {
41
- static GType our_type = 0;
42
-
43
- if (our_type == 0)
44
- our_type = g_boxed_type_register_static ("PangoAnalysis",
45
- (GBoxedCopyFunc)ana_copy,
46
- (GBoxedFreeFunc)g_free);
47
- return our_type;
48
- }
49
- /**********************************/
50
-
51
- static VALUE
52
- rg_initialize(VALUE self)
53
- {
54
- PangoAnalysis analysis = { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL };
55
- G_INITIALIZE(self, g_boxed_copy(PANGO_TYPE_ANALYSIS, &analysis));
56
- return Qnil;
57
- }
58
-
59
- static VALUE
60
- rg_set_shape_engine(VALUE self, VALUE engine)
61
- {
62
- _SELF(self)->shape_engine = RVAL2PANGOENGINESHAPE(engine);
63
- return self;
64
- }
65
- static VALUE
66
- rg_shape_engine(VALUE self)
67
- {
68
- VALUE ret;
69
- if (_SELF(self)->shape_engine){
70
- const gchar* gname = G_OBJECT_TYPE_NAME(_SELF(self)->shape_engine);
71
- gchar* name = g_strdup(gname);
72
- name[0] = g_ascii_toupper(name[0]);
73
- G_DEF_CLASS3(gname, name, mPango);
74
- ret = GOBJ2RVAL(_SELF(self)->shape_engine);
75
- } else {
76
- ret = Qnil;
77
- }
78
- return ret;
79
- }
80
-
81
- static VALUE
82
- rg_set_lang_engine(VALUE self, VALUE engine)
83
- {
84
- _SELF(self)->lang_engine = RVAL2PANGOENGINELANG(engine);
85
- return self;
86
- }
87
- static VALUE
88
- rg_lang_engine(VALUE self)
89
- {
90
- VALUE ret;
91
- if (_SELF(self)->lang_engine){
92
- const gchar* gname = G_OBJECT_TYPE_NAME(_SELF(self)->lang_engine);
93
- gchar* name = g_strdup(gname);
94
- name[0] = g_ascii_toupper(name[0]);
95
- G_DEF_CLASS3(name, name, mPango);
96
- ret = GOBJ2RVAL(_SELF(self)->lang_engine);
97
- } else {
98
- ret = Qnil;
99
- }
100
- return ret;
101
- }
102
-
103
- static VALUE
104
- rg_set_font(VALUE self, VALUE font)
105
- {
106
- _SELF(self)->font = RVAL2PANGOFONT(font);
107
- return self;
108
- }
109
-
110
- static VALUE
111
- rg_font(VALUE self)
112
- {
113
- return GOBJ2RVAL(_SELF(self)->font);
114
- }
115
-
116
- static VALUE
117
- rg_set_level(VALUE self, VALUE level)
118
- {
119
- _SELF(self)->level = NUM2UINT(level);
120
- return self;
121
- }
122
-
123
- static VALUE
124
- rg_level(VALUE self)
125
- {
126
- return UINT2NUM(_SELF(self)->level);
127
- }
128
-
129
- static VALUE
130
- rg_set_language(VALUE self, VALUE lang)
131
- {
132
- _SELF(self)->language = RVAL2PANGOLANGUAGE(lang);
133
- return self;
134
- }
135
-
136
- static VALUE
137
- rg_language(VALUE self)
138
- {
139
- return PANGOLANGUAGE2RVAL(_SELF(self)->language);
140
- }
141
-
142
- struct ana_set_extra_attrs_args {
143
- PangoAnalysis *analysis;
144
- VALUE ary;
145
- long n;
146
- GSList *result;
147
- };
148
-
149
- static VALUE
150
- ana_set_extra_attrs_body(VALUE value)
151
- {
152
- struct ana_set_extra_attrs_args *args = (struct ana_set_extra_attrs_args *)value;
153
- long i;
154
-
155
- for (i = 0; i < args->n; i++)
156
- args->result = g_slist_append(args->result, RVAL2ATTR(RARRAY_PTR(args->ary)[i]));
157
-
158
- args->analysis->extra_attrs = args->result;
159
-
160
- return Qnil;
161
- }
162
-
163
- static G_GNUC_NORETURN VALUE
164
- ana_set_extra_attrs_rescue(VALUE value)
165
- {
166
- g_slist_free(((struct ana_set_extra_attrs_args *)value)->result);
167
-
168
- rb_exc_raise(rb_errinfo());
169
- }
170
-
171
- static VALUE
172
- rg_set_extra_attrs(VALUE self, VALUE attrs)
173
- {
174
- struct ana_set_extra_attrs_args args;
175
- args.analysis = _SELF(self);
176
- args.ary = rb_ary_to_ary(attrs);
177
- args.n = RARRAY_LEN(args.ary);
178
- args.result = NULL;
179
-
180
- rb_rescue(ana_set_extra_attrs_body, (VALUE)&args,
181
- ana_set_extra_attrs_rescue, (VALUE)&args);
182
-
183
- return self;
184
- }
185
-
186
- static VALUE
187
- rg_extra_attrs(VALUE self)
188
- {
189
- VALUE ary = rb_ary_new();
190
- GSList* list = _SELF(self)->extra_attrs;
191
-
192
- while (list) {
193
- rb_ary_push(ary, ATTR2RVAL(list->data));
194
- list = list->next;
195
- }
196
- return ary;
197
- }
198
-
199
- void
200
- Init_pango_analysis(VALUE mPango)
201
- {
202
- VALUE RG_TARGET_NAMESPACE = G_DEF_CLASS(PANGO_TYPE_ANALYSIS, "Analysis", mPango);
203
-
204
- RG_DEF_METHOD(initialize, 0);
205
- RG_DEF_METHOD(set_shape_engine, 1);
206
- RG_DEF_METHOD(shape_engine, 0);
207
- RG_DEF_METHOD(set_lang_engine, 1);
208
- RG_DEF_METHOD(lang_engine, 0);
209
- RG_DEF_METHOD(set_font, 1);
210
- RG_DEF_METHOD(font, 0);
211
- RG_DEF_METHOD(set_level, 1);
212
- RG_DEF_METHOD(level, 0);
213
- RG_DEF_METHOD(set_language, 1);
214
- RG_DEF_METHOD(language, 0);
215
-
216
- RG_DEF_METHOD(set_extra_attrs, 1);
217
- RG_DEF_METHOD(extra_attrs, 0);
218
- }
@@ -1,506 +0,0 @@
1
- /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
- /*
3
- * Copyright (C) 2011 Ruby-GNOME2 Project Team
4
- * Copyright (C) 2002-2005 Masao Mutoh
5
- *
6
- * This library is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU Lesser General Public
8
- * License as published by the Free Software Foundation; either
9
- * version 2.1 of the License, or (at your option) any later version.
10
- *
11
- * This library is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
- * Lesser General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU Lesser General Public
17
- * License along with this library; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
- * MA 02110-1301 USA
20
- */
21
-
22
- #include "rbpangoprivate.h"
23
-
24
- #define RG_TARGET_NAMESPACE pattr
25
-
26
- VALUE RG_TARGET_NAMESPACE, attrstring, pattrint, pattrfloat, pattrcolor, pattrbool;
27
- static VALUE type_to_klass;
28
-
29
- /***********************************************/
30
- void
31
- pango_add_attribute(int attr_type, VALUE klass)
32
- {
33
- rb_hash_aset(type_to_klass, INT2FIX(attr_type), klass);
34
- }
35
-
36
- /* This is for Attributes which has PangoAttrType. */
37
- VALUE
38
- pango_get_attribute_klass(VALUE attr_type)
39
- {
40
- VALUE type = Qnil;
41
- if (TYPE(attr_type) == T_STRING){
42
- const char *strtype = RVAL2CSTR(attr_type);
43
- if (strcmp(strtype, "Attribute") == 0){
44
- type = RG_TARGET_NAMESPACE;
45
- } else if (strcmp(strtype, "AttrString") == 0){
46
- type = attrstring;
47
- } else if (strcmp(strtype, "AttrInt") == 0){
48
- type = pattrint;
49
- } else if (strcmp(strtype, "AttrFloat") == 0){
50
- type = pattrfloat;
51
- } else if (strcmp(strtype, "AttrColor") == 0){
52
- type = pattrcolor;
53
- } else if (strcmp(strtype, "AttrBool") == 0){
54
- type = pattrbool;
55
- }
56
- } else {
57
- type = rb_hash_aref(type_to_klass, INT2FIX(attr_type));
58
- }
59
- return type;
60
- }
61
-
62
- VALUE
63
- pango_make_attribute(PangoAttribute *attr)
64
- {
65
- if (attr == NULL) return Qnil;
66
- return Data_Wrap_Struct(rb_hash_aref(type_to_klass, INT2FIX(attr->klass->type)), 0,
67
- pango_attribute_destroy,
68
- pango_attribute_copy(attr));
69
- }
70
-
71
- PangoAttribute*
72
- pango_get_attribute(VALUE attr)
73
- {
74
- PangoAttribute *gattr;
75
-
76
- if (NIL_P(attr)) return NULL;
77
-
78
- if (!rb_obj_is_kind_of(attr, RG_TARGET_NAMESPACE)) {
79
- rb_raise(rb_eTypeError, "not a Pango::Attribute...");
80
- }
81
- Data_Get_Struct(attr, PangoAttribute, gattr);
82
- return gattr;
83
- }
84
-
85
- /***********************************************/
86
- static VALUE
87
- rg_s_allocate(VALUE klass)
88
- {
89
- /* Don't define destroy method here.
90
- return Data_Wrap_Struct(klass, 0, pango_attribute_destroy, 0);
91
- */
92
- return Data_Wrap_Struct(klass, NULL, NULL, 0);
93
- }
94
-
95
- #ifdef HAVE_OBJECT_ALLOCATE
96
- #define attr_s_new rb_class_new_instance
97
- #else
98
- static VALUE
99
- rg_s_new(int argc, VALUE *argv, VALUE klass)
100
- {
101
- VALUE obj = rg_s_allocate(klass);
102
- rb_obj_call_init(obj, argc, argv);
103
- return obj;
104
- }
105
- #endif
106
-
107
- /***********************************************/
108
-
109
- /* This method implemented at rbpangomain.c
110
- gboolean pango_parse_markup (const char *markup_text,
111
- int length,
112
- gunichar accel_marker,
113
- PangoAttrList **attr_list,
114
- char **text,
115
- gunichar *accel_char,
116
- GError **error);
117
- */
118
-
119
- static VALUE
120
- rg_s_type_register(G_GNUC_UNUSED VALUE self, VALUE name)
121
- {
122
- return INT2NUM(pango_attr_type_register(RVAL2CSTR(name)));
123
- }
124
-
125
- static VALUE
126
- rg_operator_attr_equal(VALUE self, VALUE other)
127
- {
128
- return CBOOL2RVAL(pango_attribute_equal(RVAL2ATTR(self), RVAL2ATTR(other)));
129
- }
130
-
131
- /*
132
- * Structure accessors
133
- */
134
- /* PangoAttribute */
135
- static VALUE
136
- rg_start_index(VALUE self)
137
- {
138
- return UINT2NUM(RVAL2ATTR(self)->start_index);
139
- }
140
-
141
- static VALUE
142
- rg_set_start_index(VALUE self, VALUE value)
143
- {
144
- RVAL2ATTR(self)->start_index = NUM2UINT(value);
145
- return Qnil;
146
- }
147
-
148
- static VALUE
149
- rg_end_index(VALUE self)
150
- {
151
- return UINT2NUM(RVAL2ATTR(self)->end_index);
152
- }
153
-
154
- static VALUE
155
- rg_set_end_index(VALUE self, VALUE value)
156
- {
157
- RVAL2ATTR(self)->end_index = NUM2UINT(value);
158
- return Qnil;
159
- }
160
-
161
- /* PangoAttrString */
162
- static VALUE
163
- attr_string_value(VALUE self)
164
- {
165
- return CSTR2RVAL(((PangoAttrString*)RVAL2ATTR(self))->value);
166
- }
167
-
168
- /* PangoAttrLanguage */
169
- static VALUE
170
- attr_language_value(VALUE self)
171
- {
172
- return PANGOLANGUAGE2RVAL(((PangoAttrLanguage*)RVAL2ATTR(self))->value);
173
- }
174
-
175
- /* PangoAttrColor */
176
- static VALUE
177
- attr_color_value(VALUE self)
178
- {
179
- PangoColor color = ((PangoAttrColor*)RVAL2ATTR(self))->color;
180
- return PANGOCOLOR2RVAL(&color);
181
- }
182
-
183
- /* PangoAttrInt */
184
- static VALUE
185
- attr_int_value(VALUE self)
186
- {
187
- return INT2NUM(((PangoAttrInt*)RVAL2ATTR(self))->value);
188
- }
189
-
190
- /* PangoAttrFloat */
191
- static VALUE
192
- attr_float_value(VALUE self)
193
- {
194
- return rb_float_new(((PangoAttrFloat*)RVAL2ATTR(self))->value);
195
- }
196
-
197
- /* PangoAttrBool(This is Ruby/Pango's original class) */
198
- static VALUE
199
- attr_bool_value(VALUE self)
200
- {
201
- return CBOOL2RVAL(((PangoAttrInt*)RVAL2ATTR(self))->value);
202
- }
203
-
204
- /* PangoAttrFontDesc */
205
- static VALUE
206
- attr_fontdesc_value(VALUE self)
207
- {
208
- return PANGOFONTDESCRIPTION2RVAL(((PangoAttrFontDesc*)RVAL2ATTR(self))->desc);
209
- }
210
-
211
- /* PangoAttrShape */
212
- static VALUE
213
- attr_shape_ink_rect(VALUE self)
214
- {
215
- PangoRectangle rect = ((PangoAttrShape*)RVAL2ATTR(self))->ink_rect;
216
- return PANGORECTANGLE2RVAL(&rect);
217
- }
218
-
219
- static VALUE
220
- attr_shape_logical_rect(VALUE self)
221
- {
222
- PangoRectangle rect = ((PangoAttrShape*)RVAL2ATTR(self))->logical_rect;
223
- return PANGORECTANGLE2RVAL(&rect);
224
- }
225
-
226
- static VALUE
227
- attr_shape_value(VALUE self)
228
- {
229
- return rb_ary_new3(2, attr_shape_ink_rect(self), attr_shape_logical_rect(self));
230
- }
231
-
232
- static VALUE
233
- attr_shape_data(VALUE self)
234
- {
235
- return (VALUE)(((PangoAttrShape *)RVAL2ATTR(self))->data);
236
- }
237
-
238
- /*
239
- * Initialize methods
240
- */
241
- #define MAKE_ATTRINT_INIT(klassname, funcname)\
242
- static VALUE \
243
- attr_ ## klassname ## _initialize(VALUE self, VALUE val)\
244
- {\
245
- DATA_PTR(self) = pango_attr_ ## funcname ## _new(NUM2INT(val));\
246
- return Qnil;\
247
- }
248
-
249
- #define MAKE_ATTRENUM_INIT(klassname, funcname, type)\
250
- static VALUE \
251
- attr_ ## klassname ## _initialize(VALUE self, VALUE val)\
252
- {\
253
- DATA_PTR(self) = pango_attr_ ## funcname ## _new(RVAL2GENUM(val, type));\
254
- return Qnil;\
255
- }
256
-
257
- static VALUE
258
- attr_AttrLanguage_initialize(VALUE self, VALUE lang)
259
- {
260
- DATA_PTR(self) = pango_attr_language_new(
261
- RVAL2PANGOLANGUAGE(lang));
262
- return Qnil;
263
- }
264
-
265
- static VALUE
266
- attr_AttrFamily_initialize(VALUE self, VALUE family)
267
- {
268
- DATA_PTR(self) = pango_attr_family_new(RVAL2CSTR(family));
269
- return Qnil;
270
- }
271
-
272
- MAKE_ATTRENUM_INIT(AttrStyle, style, PANGO_TYPE_STYLE);
273
- MAKE_ATTRENUM_INIT(AttrVariant, variant, PANGO_TYPE_VARIANT);
274
- MAKE_ATTRENUM_INIT(AttrStretch, stretch, PANGO_TYPE_STRETCH);
275
- MAKE_ATTRENUM_INIT(AttrWeight, weight, PANGO_TYPE_WEIGHT);
276
-
277
- static VALUE
278
- attr_AttrSize_initialize(VALUE self, VALUE size)
279
- {
280
- DATA_PTR(self) = pango_attr_size_new(NUM2INT(size));
281
- return Qnil;
282
- }
283
-
284
- static VALUE
285
- attr_AttrAbsoluteSize_initialize(VALUE self, VALUE size)
286
- {
287
- DATA_PTR(self) = pango_attr_size_new_absolute(NUM2INT(size));
288
- return Qnil;
289
- }
290
-
291
- #if PANGO_VERSION_CHECK(1,16,0)
292
- static VALUE
293
- attr_AttrGravity_initialize(VALUE self, VALUE gravity)
294
- {
295
- DATA_PTR(self) = pango_attr_gravity_new(RVAL2PANGOGRAVITY(gravity));
296
- return Qnil;
297
- }
298
-
299
- static VALUE
300
- attr_AttrGravityHint_initialize(VALUE self, VALUE gravity_hint)
301
- {
302
- DATA_PTR(self) = pango_attr_gravity_hint_new(RVAL2PANGOGRAVITYHINT(gravity_hint));
303
- return Qnil;
304
- }
305
- #endif
306
-
307
- static VALUE
308
- attr_AttrFontDescription_initialize(VALUE self, VALUE fontdescription)
309
- {
310
- DATA_PTR(self) = pango_attr_font_desc_new(RVAL2PANGOFONTDESCRIPTION(fontdescription));
311
- return Qnil;
312
- }
313
-
314
- static VALUE
315
- attr_AttrForeground_initialize(VALUE self, VALUE r, VALUE g, VALUE b)
316
- {
317
- DATA_PTR(self) = pango_attr_foreground_new(FIX2UINT(r), FIX2UINT(g), FIX2UINT(b));
318
- return Qnil;
319
- }
320
-
321
- static VALUE
322
- attr_AttrBackground_initialize(VALUE self, VALUE r, VALUE g, VALUE b)
323
- {
324
- DATA_PTR(self) = pango_attr_background_new(FIX2UINT(r), FIX2UINT(g), FIX2UINT(b));
325
- return Qnil;
326
- }
327
-
328
- static VALUE
329
- attr_AttrStrikethrough_initialize(VALUE self, VALUE strikethrough)
330
- {
331
- DATA_PTR(self) = pango_attr_strikethrough_new(RVAL2CBOOL(strikethrough));
332
- return Qnil;
333
- }
334
- #ifdef HAVE_PANGO_ATTR_STRIKETHROUGH_COLOR_NEW
335
- static VALUE
336
- attr_AttrStrikethroughColor_initialize(VALUE self, VALUE r, VALUE g, VALUE b)
337
- {
338
- DATA_PTR(self) = pango_attr_strikethrough_color_new(FIX2UINT(r), FIX2UINT(g), FIX2UINT(b));
339
- return Qnil;
340
- }
341
- #endif
342
-
343
- MAKE_ATTRENUM_INIT(AttrUnderline, underline, PANGO_TYPE_UNDERLINE);
344
- #ifdef HAVE_PANGO_ATTR_UNDERLINE_COLOR_NEW
345
- static VALUE
346
- attr_AttrUnderlineColor_initialize(VALUE self, VALUE r, VALUE g, VALUE b)
347
- {
348
- DATA_PTR(self) = pango_attr_underline_color_new(FIX2UINT(r), FIX2UINT(g), FIX2UINT(b));
349
- return Qnil;
350
- }
351
- #endif
352
-
353
- static VALUE
354
- attr_AttrShape_initialize(int argc, VALUE *argv, VALUE self)
355
- {
356
- VALUE ink_rect, logical_rect, data;
357
-
358
- rb_scan_args(argc, argv, "21", &ink_rect, &logical_rect, &data);
359
-
360
- if (NIL_P(data)){
361
- DATA_PTR(self) = pango_attr_shape_new(
362
- RVAL2PANGORECTANGLE(ink_rect),
363
- RVAL2PANGORECTANGLE(logical_rect));
364
- } else {
365
- G_RELATIVE(self, data);
366
- DATA_PTR(self) = pango_attr_shape_new_with_data(
367
- RVAL2PANGORECTANGLE(ink_rect),
368
- RVAL2PANGORECTANGLE(logical_rect),
369
- (gpointer)data, NULL, NULL);
370
- }
371
-
372
- return Qnil;
373
- }
374
-
375
- static VALUE
376
- attr_AttrScale_initialize(VALUE self, VALUE scale)
377
- {
378
- DATA_PTR(self) = pango_attr_scale_new(NUM2DBL(scale));
379
- return Qnil;
380
- }
381
-
382
- static VALUE
383
- attr_AttrFallback_initialize(VALUE self, VALUE enable_fallback)
384
- {
385
- DATA_PTR(self) = pango_attr_fallback_new(RVAL2CBOOL(enable_fallback));
386
- return Qnil;
387
- }
388
-
389
- MAKE_ATTRINT_INIT(AttrRise, rise);
390
- MAKE_ATTRINT_INIT(AttrLetterSpacing, letter_spacing);
391
-
392
- #define MAKE_ATTR(gtype, name, parent, num)\
393
- tmpklass = rb_define_class_under(mPango, #name, parent);\
394
- rb_hash_aset(type_to_klass, INT2FIX(gtype), tmpklass);\
395
- rbg_define_method(tmpklass, "initialize", attr_## name ## _initialize , num);
396
-
397
- void
398
- Init_pango_attribute(VALUE mPango)
399
- {
400
- VALUE tmpklass;
401
- RG_TARGET_NAMESPACE = rb_define_class_under(mPango, "Attribute", rb_cData);
402
-
403
- RG_DEF_SMETHOD(type_register, 1);
404
- RG_DEF_METHOD_OPERATOR("==", attr_equal, 1);
405
- RG_DEF_METHOD(start_index, 0);
406
- RG_DEF_METHOD(set_start_index, 1);
407
- RG_DEF_METHOD(end_index, 0);
408
- RG_DEF_METHOD(set_end_index, 1);
409
-
410
- #ifndef HAVE_RB_DEFINE_ALLOC_FUNC
411
- RG_DEF_SMETHOD(allocate, 0);
412
- #else
413
- rb_define_alloc_func(RG_TARGET_NAMESPACE, (VALUE(*)_((VALUE)))rg_s_allocate);
414
- #endif
415
- #ifndef HAVE_OBJECT_ALLOCATE
416
- RG_DEF_SMETHOD(new, -1);
417
- #endif
418
-
419
- attrstring = rb_define_class_under(mPango, "AttrString", RG_TARGET_NAMESPACE);
420
- rbg_define_method(attrstring, "value", attr_string_value, 0);
421
-
422
- pattrint = rb_define_class_under(mPango, "AttrInt", RG_TARGET_NAMESPACE);
423
- rbg_define_method(pattrint, "value", attr_int_value, 0);
424
-
425
- pattrfloat = rb_define_class_under(mPango, "AttrFloat", RG_TARGET_NAMESPACE);
426
- rbg_define_method(pattrfloat, "value", attr_float_value, 0);
427
-
428
- pattrcolor = rb_define_class_under(mPango, "AttrColor", RG_TARGET_NAMESPACE);
429
- rbg_define_method(pattrcolor, "value", attr_color_value, 0);
430
-
431
- pattrbool = rb_define_class_under(mPango, "AttrBool", RG_TARGET_NAMESPACE);
432
- rbg_define_method(pattrbool, "value", attr_bool_value, 0);
433
-
434
- rb_global_variable(&type_to_klass);
435
- type_to_klass = rb_hash_new();
436
-
437
- MAKE_ATTR(PANGO_ATTR_LANGUAGE, AttrLanguage, RG_TARGET_NAMESPACE, 1);
438
- rbg_define_method(tmpklass, "value", attr_language_value, 0);
439
-
440
- MAKE_ATTR(PANGO_ATTR_FAMILY, AttrFamily, attrstring, 1);
441
- MAKE_ATTR(PANGO_ATTR_STYLE, AttrStyle, pattrint, 1);
442
- MAKE_ATTR(PANGO_ATTR_WEIGHT, AttrWeight, pattrint, 1);
443
- MAKE_ATTR(PANGO_ATTR_VARIANT, AttrVariant, pattrint, 1);
444
- MAKE_ATTR(PANGO_ATTR_STRETCH, AttrStretch, pattrint, 1);
445
- MAKE_ATTR(PANGO_ATTR_SIZE, AttrSize, pattrint, 1);
446
- MAKE_ATTR(PANGO_ATTR_ABSOLUTE_SIZE, AttrAbsoluteSize, pattrint, 1);
447
- #if PANGO_VERSION_CHECK(1,16,0)
448
- MAKE_ATTR(PANGO_ATTR_GRAVITY, AttrGravity, pattrint, 1);
449
- MAKE_ATTR(PANGO_ATTR_GRAVITY_HINT, AttrGravityHint, pattrint, 1);
450
- #endif
451
- MAKE_ATTR(PANGO_ATTR_FONT_DESC, AttrFontDescription, RG_TARGET_NAMESPACE, 1);
452
- rbg_define_method(tmpklass, "value", attr_fontdesc_value, 0);
453
- MAKE_ATTR(PANGO_ATTR_FOREGROUND, AttrForeground, pattrcolor, 3);
454
- MAKE_ATTR(PANGO_ATTR_BACKGROUND, AttrBackground, pattrcolor, 3);
455
- MAKE_ATTR(PANGO_ATTR_UNDERLINE, AttrUnderline, pattrint, 1);
456
- /* PangoUnderline */
457
- G_DEF_CLASS(PANGO_TYPE_UNDERLINE, "Underline", tmpklass);
458
- G_DEF_CONSTANTS(tmpklass, PANGO_TYPE_UNDERLINE, "PANGO_UNDERLINE_");
459
- #ifdef HAVE_PANGO_ATTR_UNDERLINE_COLOR_NEW
460
- MAKE_ATTR(PANGO_ATTR_UNDERLINE_COLOR, AttrUnderlineColor, pattrcolor, 3);
461
- #endif
462
-
463
- MAKE_ATTR(PANGO_ATTR_STRIKETHROUGH, AttrStrikethrough, pattrbool, 1);
464
- #ifdef HAVE_PANGO_ATTR_STRIKETHROUGH_COLOR_NEW
465
- MAKE_ATTR(PANGO_ATTR_STRIKETHROUGH_COLOR, AttrStrikethroughColor, pattrcolor, 3);
466
- #endif
467
- MAKE_ATTR(PANGO_ATTR_RISE, AttrRise, pattrint, 1);
468
- MAKE_ATTR(PANGO_ATTR_LETTER_SPACING, AttrLetterSpacing, pattrint, 1);
469
- MAKE_ATTR(PANGO_ATTR_SHAPE, AttrShape, RG_TARGET_NAMESPACE, -1);
470
- rbg_define_method(tmpklass, "ink_rect", attr_shape_ink_rect, 0);
471
- rbg_define_method(tmpklass, "logical_rect", attr_shape_logical_rect, 0);
472
- rbg_define_method(tmpklass, "value", attr_shape_value, 0);
473
- rbg_define_method(tmpklass, "data", attr_shape_data, 0);
474
- MAKE_ATTR(PANGO_ATTR_SCALE, AttrScale, pattrfloat, 1);
475
- /* PangoScale */
476
- rb_define_const(tmpklass, "XX_SMALL", rb_float_new(PANGO_SCALE_XX_SMALL));
477
- rb_define_const(tmpklass, "X_SMALL", rb_float_new(PANGO_SCALE_X_SMALL));
478
- rb_define_const(tmpklass, "SMALL", rb_float_new(PANGO_SCALE_SMALL));
479
- rb_define_const(tmpklass, "MEDIUM", rb_float_new(PANGO_SCALE_MEDIUM));
480
- rb_define_const(tmpklass, "LARGE", rb_float_new(PANGO_SCALE_LARGE));
481
- rb_define_const(tmpklass, "X_LARGE", rb_float_new(PANGO_SCALE_X_LARGE));
482
- rb_define_const(tmpklass, "XX_LARGE", rb_float_new(PANGO_SCALE_XX_LARGE));
483
- MAKE_ATTR(PANGO_ATTR_FALLBACK, AttrFallback, pattrbool, 1);
484
- /* PangoAttrType */
485
- G_DEF_CLASS(PANGO_TYPE_ATTR_TYPE, "Type", RG_TARGET_NAMESPACE);
486
- #define INT2ATTRTYPE(x) rbgobj_make_enum((x), PANGO_TYPE_ATTR_TYPE)
487
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_INVALID", INT2ATTRTYPE(PANGO_ATTR_INVALID));
488
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_LANGUAGE", INT2ATTRTYPE(PANGO_ATTR_LANGUAGE));
489
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_FAMILY", INT2ATTRTYPE(PANGO_ATTR_FAMILY));
490
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_STYLE", INT2ATTRTYPE(PANGO_ATTR_STYLE));
491
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_WEIGHT", INT2ATTRTYPE(PANGO_ATTR_WEIGHT));
492
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_VARIANT", INT2ATTRTYPE(PANGO_ATTR_VARIANT));
493
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_STRETCH", INT2ATTRTYPE(PANGO_ATTR_STRETCH));
494
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_SIZE", INT2ATTRTYPE(PANGO_ATTR_SIZE));
495
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_FONT_DESC", INT2ATTRTYPE(PANGO_ATTR_FONT_DESC));
496
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_FOREGROUND", INT2ATTRTYPE(PANGO_ATTR_FOREGROUND));
497
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_BACKGROUND", INT2ATTRTYPE(PANGO_ATTR_BACKGROUND));
498
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_UNDERLINE", INT2ATTRTYPE(PANGO_ATTR_UNDERLINE));
499
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_STRIKETHROUGH", INT2ATTRTYPE(PANGO_ATTR_STRIKETHROUGH));
500
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_STRIKETHROUGH_COLOR", INT2ATTRTYPE(PANGO_ATTR_STRIKETHROUGH_COLOR));
501
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_RISE", INT2ATTRTYPE(PANGO_ATTR_RISE));
502
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_SHAPE", INT2ATTRTYPE(PANGO_ATTR_SHAPE));
503
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_SCALE", INT2ATTRTYPE(PANGO_ATTR_SCALE));
504
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_FALLBACK", INT2ATTRTYPE(PANGO_ATTR_FALLBACK));
505
- rb_define_const(RG_TARGET_NAMESPACE, "TYPE_LETTER_SPACING", INT2ATTRTYPE(PANGO_ATTR_LETTER_SPACING));
506
- }