pango 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.
- data/ChangeLog +662 -0
- data/README +33 -0
- data/Rakefile +86 -0
- data/extconf.rb +68 -0
- data/sample/attribute.rb +82 -0
- data/sample/break.rb +26 -0
- data/sample/gdk_layout.rb +27 -0
- data/sample/glyphstring.rb +61 -0
- data/sample/item.rb +35 -0
- data/sample/label.rb +23 -0
- data/sample/layout.rb +102 -0
- data/sample/pango_cairo.rb +66 -0
- data/sample/parse.rb +33 -0
- data/sample/sample.txt +10 -0
- data/sample/script.rb +21 -0
- data/src/lib/pango.rb +60 -0
- data/src/makeinits.rb +48 -0
- data/src/rbpango.c +27 -0
- data/src/rbpango.h +97 -0
- data/src/rbpangoanalysis.c +197 -0
- data/src/rbpangoattribute.c +557 -0
- data/src/rbpangoattriterator.c +137 -0
- data/src/rbpangoattrlist.c +104 -0
- data/src/rbpangocairo.c +229 -0
- data/src/rbpangocolor.c +121 -0
- data/src/rbpangocontext.c +341 -0
- data/src/rbpangocoverage.c +104 -0
- data/src/rbpangoengine.c +65 -0
- data/src/rbpangofont.c +123 -0
- data/src/rbpangofontdescription.c +300 -0
- data/src/rbpangofontface.c +71 -0
- data/src/rbpangofontfamily.c +74 -0
- data/src/rbpangofontmap.c +104 -0
- data/src/rbpangofontmetrics.c +85 -0
- data/src/rbpangofontset.c +68 -0
- data/src/rbpangofontsetsimple.c +53 -0
- data/src/rbpangoglyphinfo.c +119 -0
- data/src/rbpangoglyphitem.c +129 -0
- data/src/rbpangoglyphstring.c +162 -0
- data/src/rbpangogravity.c +43 -0
- data/src/rbpangoinits.c +71 -0
- data/src/rbpangoitem.c +110 -0
- data/src/rbpangolanguage.c +88 -0
- data/src/rbpangolayout.c +593 -0
- data/src/rbpangolayoutiter.c +202 -0
- data/src/rbpangolayoutline.c +256 -0
- data/src/rbpangologattr.c +107 -0
- data/src/rbpangomain.c +213 -0
- data/src/rbpangomatrix.c +155 -0
- data/src/rbpangorectangle.c +178 -0
- data/src/rbpangorenderer.c +204 -0
- data/src/rbpangoscript.c +80 -0
- data/src/rbpangoscriptiter.c +91 -0
- data/src/rbpangotabarray.c +128 -0
- data/src/rbpangoversion.h +24 -0
- data/test/pango-test-utils.rb +9 -0
- data/test/run-test.rb +27 -0
- data/test/test-attribute.rb +19 -0
- data/test/test-language.rb +7 -0
- data/test/test_layout.rb +20 -0
- metadata +158 -0
data/src/rbpangoinits.c
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
extern void Init_pango_analysis();
|
2
|
+
extern void Init_pango_attribute();
|
3
|
+
extern void Init_pango_attriterator();
|
4
|
+
extern void Init_pango_attrlist();
|
5
|
+
extern void Init_pango_cairo();
|
6
|
+
extern void Init_pango_color();
|
7
|
+
extern void Init_pango_context();
|
8
|
+
extern void Init_pango_coverage();
|
9
|
+
extern void Init_pango_engine();
|
10
|
+
extern void Init_pango_font();
|
11
|
+
extern void Init_pango_font_description();
|
12
|
+
extern void Init_pango_font_face();
|
13
|
+
extern void Init_pango_font_family();
|
14
|
+
extern void Init_pango_font_map();
|
15
|
+
extern void Init_pango_font_metrics();
|
16
|
+
extern void Init_pango_fontset();
|
17
|
+
extern void Init_pango_fontset_simple();
|
18
|
+
extern void Init_pango_glyph_info();
|
19
|
+
extern void Init_pango_glyph_item();
|
20
|
+
extern void Init_pango_glyph_string();
|
21
|
+
extern void Init_pango_gravity();
|
22
|
+
extern void Init_pango_item();
|
23
|
+
extern void Init_pango_language();
|
24
|
+
extern void Init_pango_layout();
|
25
|
+
extern void Init_pango_layout_iter();
|
26
|
+
extern void Init_pango_layout_line();
|
27
|
+
extern void Init_pango_logattr();
|
28
|
+
extern void Init_pango_main();
|
29
|
+
extern void Init_pango_matrix();
|
30
|
+
extern void Init_pango_rectangle();
|
31
|
+
extern void Init_pangorenderer();
|
32
|
+
extern void Init_pango_script();
|
33
|
+
extern void Init_pango_script_iter();
|
34
|
+
extern void Init_pango_array();
|
35
|
+
void Init_pango_inits()
|
36
|
+
{
|
37
|
+
Init_pango_analysis();
|
38
|
+
Init_pango_attribute();
|
39
|
+
Init_pango_attriterator();
|
40
|
+
Init_pango_attrlist();
|
41
|
+
Init_pango_cairo();
|
42
|
+
Init_pango_color();
|
43
|
+
Init_pango_context();
|
44
|
+
Init_pango_coverage();
|
45
|
+
Init_pango_engine();
|
46
|
+
Init_pango_font();
|
47
|
+
Init_pango_font_description();
|
48
|
+
Init_pango_font_face();
|
49
|
+
Init_pango_font_family();
|
50
|
+
Init_pango_font_map();
|
51
|
+
Init_pango_font_metrics();
|
52
|
+
Init_pango_fontset();
|
53
|
+
Init_pango_fontset_simple();
|
54
|
+
Init_pango_glyph_info();
|
55
|
+
Init_pango_glyph_item();
|
56
|
+
Init_pango_glyph_string();
|
57
|
+
Init_pango_gravity();
|
58
|
+
Init_pango_item();
|
59
|
+
Init_pango_language();
|
60
|
+
Init_pango_layout();
|
61
|
+
Init_pango_layout_iter();
|
62
|
+
Init_pango_layout_line();
|
63
|
+
Init_pango_logattr();
|
64
|
+
Init_pango_main();
|
65
|
+
Init_pango_matrix();
|
66
|
+
Init_pango_rectangle();
|
67
|
+
Init_pangorenderer();
|
68
|
+
Init_pango_script();
|
69
|
+
Init_pango_script_iter();
|
70
|
+
Init_pango_array();
|
71
|
+
}
|
data/src/rbpangoitem.c
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/************************************************
|
3
|
+
|
4
|
+
rbpangoitem.c -
|
5
|
+
|
6
|
+
$Author: mutoh $
|
7
|
+
$Date: 2005/09/17 18:30:05 $
|
8
|
+
|
9
|
+
Copyright (C) 2002-2005 Masao Mutoh
|
10
|
+
************************************************/
|
11
|
+
|
12
|
+
#include "rbpango.h"
|
13
|
+
|
14
|
+
#define _SELF(self) ((PangoItem*)RVAL2BOXED(self, PANGO_TYPE_ITEM))
|
15
|
+
|
16
|
+
#define ATTR_INT(name)\
|
17
|
+
static VALUE \
|
18
|
+
item_int_ ## name (self)\
|
19
|
+
VALUE self;\
|
20
|
+
{\
|
21
|
+
return INT2NUM(_SELF(self)->name);\
|
22
|
+
}\
|
23
|
+
static VALUE \
|
24
|
+
item_int_set_ ## name (self, val)\
|
25
|
+
VALUE self, val;\
|
26
|
+
{\
|
27
|
+
_SELF(self)->name = NUM2INT(val); \
|
28
|
+
return self;\
|
29
|
+
}
|
30
|
+
|
31
|
+
#define DEF_INT_ACCESSOR(name) \
|
32
|
+
rb_define_method(pItem, G_STRINGIFY(name), item_int_ ## name, 0);\
|
33
|
+
rb_define_method(pItem, G_STRINGIFY(set_ ## name), item_int_set_ ## name, 1);
|
34
|
+
|
35
|
+
/**********************************/
|
36
|
+
#if ! PANGO_CHECK_VERSION(1,9,0)
|
37
|
+
GType
|
38
|
+
pango_item_get_type(void)
|
39
|
+
{
|
40
|
+
static GType our_type = 0;
|
41
|
+
|
42
|
+
if (our_type == 0)
|
43
|
+
our_type = g_boxed_type_register_static ("PangoItem",
|
44
|
+
(GBoxedCopyFunc)pango_item_copy,
|
45
|
+
(GBoxedFreeFunc)pango_item_free);
|
46
|
+
return our_type;
|
47
|
+
}
|
48
|
+
#endif
|
49
|
+
/**********************************/
|
50
|
+
|
51
|
+
static VALUE
|
52
|
+
item_initialize(self)
|
53
|
+
VALUE self;
|
54
|
+
{
|
55
|
+
G_INITIALIZE(self, pango_item_new());
|
56
|
+
return Qnil;
|
57
|
+
}
|
58
|
+
|
59
|
+
static VALUE
|
60
|
+
item_split(self, split_index, split_offset)
|
61
|
+
VALUE self, split_index, split_offset;
|
62
|
+
{
|
63
|
+
return BOXED2RVAL(pango_item_split(_SELF(self),
|
64
|
+
NUM2INT(split_index),
|
65
|
+
NUM2INT(split_offset)),
|
66
|
+
PANGO_TYPE_ITEM);
|
67
|
+
}
|
68
|
+
/* Move to Pango module (rbpangomain.c)
|
69
|
+
GList* pango_reorder_items (GList *logical_items);
|
70
|
+
*/
|
71
|
+
|
72
|
+
ATTR_INT(offset);
|
73
|
+
ATTR_INT(length);
|
74
|
+
ATTR_INT(num_chars);
|
75
|
+
|
76
|
+
|
77
|
+
static VALUE
|
78
|
+
item_get_analysis(self)
|
79
|
+
VALUE self;
|
80
|
+
{
|
81
|
+
PangoAnalysis ana = _SELF(self)->analysis;
|
82
|
+
return BOXED2RVAL(&ana, PANGO_TYPE_ANALYSIS);
|
83
|
+
}
|
84
|
+
|
85
|
+
static VALUE
|
86
|
+
item_set_analysis(self, val)
|
87
|
+
VALUE self, val;
|
88
|
+
{
|
89
|
+
PangoAnalysis* ana = (PangoAnalysis*)RVAL2BOXED(val, PANGO_TYPE_ANALYSIS);
|
90
|
+
_SELF(self)->analysis = *ana;
|
91
|
+
return self;
|
92
|
+
}
|
93
|
+
|
94
|
+
void
|
95
|
+
Init_pango_item()
|
96
|
+
{
|
97
|
+
VALUE pItem = G_DEF_CLASS(PANGO_TYPE_ITEM, "Item", mPango);
|
98
|
+
|
99
|
+
rb_define_method(pItem, "initialize", item_initialize, 0);
|
100
|
+
rb_define_method(pItem, "split", item_split, 2);
|
101
|
+
|
102
|
+
DEF_INT_ACCESSOR(offset);
|
103
|
+
DEF_INT_ACCESSOR(length);
|
104
|
+
DEF_INT_ACCESSOR(num_chars);
|
105
|
+
|
106
|
+
rb_define_method(pItem, "analysis", item_get_analysis, 0);
|
107
|
+
rb_define_method(pItem, "set_analysis", item_set_analysis, 1);
|
108
|
+
|
109
|
+
G_DEF_SETTERS(pItem);
|
110
|
+
}
|
@@ -0,0 +1,88 @@
|
|
1
|
+
/* -*- c-file-style: "ruby" -*- */
|
2
|
+
/************************************************
|
3
|
+
|
4
|
+
rbpangolanguage.c -
|
5
|
+
|
6
|
+
$Author: mutoh $
|
7
|
+
$Date: 2005/09/17 17:09:13 $
|
8
|
+
|
9
|
+
Copyright (C) 2009 Ruby-GNOME2 Project Team
|
10
|
+
Copyright (C) 2002,2003 Masao Mutoh <mutoh@highway.ne.jp>
|
11
|
+
************************************************/
|
12
|
+
|
13
|
+
#include "rbpango.h"
|
14
|
+
|
15
|
+
#define _SELF(self) ((PangoLanguage*)RVAL2BOXED(self, PANGO_TYPE_LANGUAGE))
|
16
|
+
#define LANG2RVAL(lang) (BOXED2RVAL(lang, PANGO_TYPE_LANGUAGE))
|
17
|
+
|
18
|
+
static VALUE
|
19
|
+
language_s_default(VALUE self)
|
20
|
+
{
|
21
|
+
return LANG2RVAL(pango_language_get_default());
|
22
|
+
}
|
23
|
+
|
24
|
+
static VALUE
|
25
|
+
language_initialize(self, language)
|
26
|
+
VALUE self, language;
|
27
|
+
{
|
28
|
+
G_INITIALIZE(self, pango_language_from_string(RVAL2CSTR(language)));
|
29
|
+
return Qnil;
|
30
|
+
}
|
31
|
+
|
32
|
+
static VALUE
|
33
|
+
language_s_to_string(self, language)
|
34
|
+
VALUE self, language;
|
35
|
+
{
|
36
|
+
return CSTR2RVAL(pango_language_to_string(RVAL2CSTR(language)));
|
37
|
+
}
|
38
|
+
|
39
|
+
static VALUE
|
40
|
+
language_matches(argc, argv, self)
|
41
|
+
int argc;
|
42
|
+
VALUE *argv;
|
43
|
+
VALUE self;
|
44
|
+
{
|
45
|
+
VALUE range_list;
|
46
|
+
|
47
|
+
rb_scan_args(argc, argv, "01", &range_list);
|
48
|
+
|
49
|
+
return CBOOL2RVAL(pango_language_matches(_SELF(self),
|
50
|
+
NIL_P(range_list) ? NULL : RVAL2CSTR(range_list)));
|
51
|
+
}
|
52
|
+
|
53
|
+
static VALUE
|
54
|
+
language_to_str(self)
|
55
|
+
VALUE self;
|
56
|
+
{
|
57
|
+
return CSTR2RVAL(pango_language_to_string(_SELF(self)));
|
58
|
+
}
|
59
|
+
|
60
|
+
#if PANGO_CHECK_VERSION(1,4,0)
|
61
|
+
/* Moved from Pango::Script */
|
62
|
+
static VALUE
|
63
|
+
language_includes_script(self, script)
|
64
|
+
VALUE self, script;
|
65
|
+
{
|
66
|
+
return CBOOL2RVAL(pango_language_includes_script(_SELF(self),
|
67
|
+
RVAL2GENUM(script, PANGO_TYPE_SCRIPT)));
|
68
|
+
}
|
69
|
+
#endif
|
70
|
+
|
71
|
+
void
|
72
|
+
Init_pango_language()
|
73
|
+
{
|
74
|
+
VALUE pLanguage = G_DEF_CLASS(PANGO_TYPE_LANGUAGE, "Language", mPango);
|
75
|
+
|
76
|
+
rb_define_singleton_method(pLanguage, "default", language_s_default, 0);
|
77
|
+
|
78
|
+
rb_define_method(pLanguage, "initialize", language_initialize, 1);
|
79
|
+
rb_define_singleton_method(pLanguage, "to_string", language_s_to_string, 1);
|
80
|
+
rb_define_method(pLanguage, "matches", language_matches, -1);
|
81
|
+
rb_define_method(pLanguage, "to_str", language_to_str, 0);
|
82
|
+
rb_define_alias(pLanguage, "to_s", "to_str");
|
83
|
+
|
84
|
+
#if PANGO_CHECK_VERSION(1,4,0)
|
85
|
+
rb_define_method(pLanguage, "includes_script", language_includes_script, 1);
|
86
|
+
#endif
|
87
|
+
|
88
|
+
}
|
data/src/rbpangolayout.c
ADDED
@@ -0,0 +1,593 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/************************************************
|
3
|
+
|
4
|
+
rbpangolayout.c -
|
5
|
+
|
6
|
+
$Author: ggc $
|
7
|
+
$Date: 2007/07/13 16:07:33 $
|
8
|
+
|
9
|
+
Copyright (C) 2002-2005 Masao Mutoh
|
10
|
+
************************************************/
|
11
|
+
|
12
|
+
#include "rbpango.h"
|
13
|
+
|
14
|
+
#define _SELF(self) (PANGO_LAYOUT(RVAL2GOBJ(self)))
|
15
|
+
#define RVAL2CONTEXT(v) (PANGO_CONTEXT(RVAL2GOBJ(v)))
|
16
|
+
|
17
|
+
static VALUE
|
18
|
+
layout_initialize(self, context)
|
19
|
+
VALUE self, context;
|
20
|
+
{
|
21
|
+
G_INITIALIZE(self, pango_layout_new(RVAL2CONTEXT(context)));
|
22
|
+
return Qnil;
|
23
|
+
}
|
24
|
+
|
25
|
+
static VALUE
|
26
|
+
layout_copy(VALUE self)
|
27
|
+
{
|
28
|
+
return GOBJ2RVAL_UNREF(pango_layout_copy(_SELF(self)));
|
29
|
+
}
|
30
|
+
|
31
|
+
static VALUE
|
32
|
+
layout_get_context(self)
|
33
|
+
VALUE self;
|
34
|
+
{
|
35
|
+
return GOBJ2RVAL(pango_layout_get_context(_SELF(self)));
|
36
|
+
}
|
37
|
+
|
38
|
+
static VALUE
|
39
|
+
layout_context_changed(self)
|
40
|
+
VALUE self;
|
41
|
+
{
|
42
|
+
pango_layout_context_changed(_SELF(self));
|
43
|
+
return Qnil;
|
44
|
+
}
|
45
|
+
|
46
|
+
static VALUE
|
47
|
+
layout_set_text(self, text)
|
48
|
+
VALUE self, text;
|
49
|
+
{
|
50
|
+
pango_layout_set_text(_SELF(self), RVAL2CSTR(text), RSTRING_LEN(text));
|
51
|
+
return self;
|
52
|
+
}
|
53
|
+
|
54
|
+
static VALUE
|
55
|
+
layout_get_text(self)
|
56
|
+
VALUE self;
|
57
|
+
{
|
58
|
+
return CSTR2RVAL(pango_layout_get_text(_SELF(self)));
|
59
|
+
}
|
60
|
+
|
61
|
+
static VALUE
|
62
|
+
layout_set_markup(argc, argv, self)
|
63
|
+
int argc;
|
64
|
+
VALUE *argv;
|
65
|
+
VALUE self;
|
66
|
+
{
|
67
|
+
VALUE markup, accel_marker;
|
68
|
+
gunichar accel_char = 0;
|
69
|
+
|
70
|
+
rb_scan_args(argc, argv, "11", &markup, &accel_marker);
|
71
|
+
|
72
|
+
if (NIL_P(accel_marker)){
|
73
|
+
pango_layout_set_markup(_SELF(self),
|
74
|
+
RVAL2CSTR(markup),
|
75
|
+
RSTRING_LEN(markup));
|
76
|
+
} else {
|
77
|
+
pango_layout_set_markup_with_accel(_SELF(self),
|
78
|
+
RVAL2CSTR(markup),
|
79
|
+
RSTRING_LEN(markup),
|
80
|
+
NUM2CHR(accel_marker), &accel_char);
|
81
|
+
}
|
82
|
+
return CHR2FIX(accel_char);
|
83
|
+
}
|
84
|
+
|
85
|
+
static VALUE
|
86
|
+
layout_set_markup_eq(self, markup)
|
87
|
+
VALUE self, markup;
|
88
|
+
{
|
89
|
+
pango_layout_set_markup(_SELF(self), RVAL2CSTR(markup), RSTRING_LEN(markup));
|
90
|
+
return markup;
|
91
|
+
}
|
92
|
+
|
93
|
+
static VALUE
|
94
|
+
layout_set_attributes(self, attrs)
|
95
|
+
VALUE self, attrs;
|
96
|
+
{
|
97
|
+
pango_layout_set_attributes(_SELF(self),
|
98
|
+
(PangoAttrList*)(RVAL2BOXED(attrs, PANGO_TYPE_ATTR_LIST)));
|
99
|
+
return self;
|
100
|
+
}
|
101
|
+
|
102
|
+
static VALUE
|
103
|
+
layout_get_attributes(self)
|
104
|
+
VALUE self;
|
105
|
+
{
|
106
|
+
return BOXED2RVAL(pango_layout_get_attributes(_SELF(self)), PANGO_TYPE_ATTR_LIST);
|
107
|
+
}
|
108
|
+
|
109
|
+
static VALUE
|
110
|
+
layout_set_font_description(VALUE self, VALUE rb_desc)
|
111
|
+
{
|
112
|
+
PangoFontDescription *desc;
|
113
|
+
gboolean desc_created = FALSE;
|
114
|
+
|
115
|
+
if (RVAL2CBOOL(rb_obj_is_kind_of(rb_desc, rb_cString))) {
|
116
|
+
desc = pango_font_description_from_string(RVAL2CSTR(rb_desc));
|
117
|
+
desc_created = TRUE;
|
118
|
+
} else {
|
119
|
+
desc = RVAL2BOXED(rb_desc, PANGO_TYPE_FONT_DESCRIPTION);
|
120
|
+
}
|
121
|
+
|
122
|
+
pango_layout_set_font_description(_SELF(self), desc);
|
123
|
+
|
124
|
+
if (desc_created)
|
125
|
+
pango_font_description_free(desc);
|
126
|
+
|
127
|
+
return self;
|
128
|
+
}
|
129
|
+
|
130
|
+
#ifdef HAVE_PANGO_LAYOUT_GET_FONT_DESCRIPTION
|
131
|
+
static VALUE
|
132
|
+
layout_get_font_description(self)
|
133
|
+
VALUE self;
|
134
|
+
{
|
135
|
+
const PangoFontDescription* desc = pango_layout_get_font_description(_SELF(self));
|
136
|
+
return BOXED2RVAL((gpointer)desc, PANGO_TYPE_FONT_DESCRIPTION);
|
137
|
+
}
|
138
|
+
#endif
|
139
|
+
|
140
|
+
static VALUE
|
141
|
+
layout_set_width(self, width)
|
142
|
+
VALUE self, width;
|
143
|
+
{
|
144
|
+
pango_layout_set_width(_SELF(self), NUM2INT(width));
|
145
|
+
return self;
|
146
|
+
}
|
147
|
+
|
148
|
+
static VALUE
|
149
|
+
layout_get_width(self)
|
150
|
+
VALUE self;
|
151
|
+
{
|
152
|
+
return INT2NUM(pango_layout_get_width(_SELF(self)));
|
153
|
+
}
|
154
|
+
|
155
|
+
static VALUE
|
156
|
+
layout_set_wrap(self, wrap)
|
157
|
+
VALUE self, wrap;
|
158
|
+
{
|
159
|
+
pango_layout_set_wrap(_SELF(self), RVAL2GENUM(wrap, PANGO_TYPE_WRAP_MODE));
|
160
|
+
return self;
|
161
|
+
}
|
162
|
+
|
163
|
+
static VALUE
|
164
|
+
layout_get_wrap(self)
|
165
|
+
VALUE self;
|
166
|
+
{
|
167
|
+
return GENUM2RVAL(pango_layout_get_wrap(_SELF(self)), PANGO_TYPE_WRAP_MODE);
|
168
|
+
}
|
169
|
+
|
170
|
+
#ifdef HAVE_PANGO_LAYOUT_SET_ELLIPSIZE
|
171
|
+
static VALUE
|
172
|
+
layout_set_ellipsize(self, ellipsize)
|
173
|
+
VALUE self, ellipsize;
|
174
|
+
{
|
175
|
+
pango_layout_set_ellipsize(_SELF(self), RVAL2GENUM(ellipsize,
|
176
|
+
PANGO_TYPE_ELLIPSIZE_MODE));
|
177
|
+
return self;
|
178
|
+
}
|
179
|
+
static VALUE
|
180
|
+
layout_get_ellipsize(self)
|
181
|
+
VALUE self;
|
182
|
+
{
|
183
|
+
return GENUM2RVAL(pango_layout_get_ellipsize(_SELF(self)), PANGO_TYPE_ELLIPSIZE_MODE);
|
184
|
+
}
|
185
|
+
#endif
|
186
|
+
|
187
|
+
static VALUE
|
188
|
+
layout_set_indent(self, indent)
|
189
|
+
VALUE self, indent;
|
190
|
+
{
|
191
|
+
pango_layout_set_indent(_SELF(self), NUM2INT(indent));
|
192
|
+
return self;
|
193
|
+
}
|
194
|
+
|
195
|
+
static VALUE
|
196
|
+
layout_get_indent(self)
|
197
|
+
VALUE self;
|
198
|
+
{
|
199
|
+
return INT2NUM(pango_layout_get_indent(_SELF(self)));
|
200
|
+
}
|
201
|
+
|
202
|
+
static VALUE
|
203
|
+
layout_get_spacing(self)
|
204
|
+
VALUE self;
|
205
|
+
{
|
206
|
+
return INT2NUM(pango_layout_get_spacing(_SELF(self)));
|
207
|
+
}
|
208
|
+
|
209
|
+
static VALUE
|
210
|
+
layout_set_spacing(self, spacing)
|
211
|
+
VALUE self, spacing;
|
212
|
+
{
|
213
|
+
pango_layout_set_spacing(_SELF(self), NUM2INT(spacing));
|
214
|
+
return self;
|
215
|
+
}
|
216
|
+
|
217
|
+
static VALUE
|
218
|
+
layout_set_justify(self, justify)
|
219
|
+
VALUE self, justify;
|
220
|
+
{
|
221
|
+
pango_layout_set_justify(_SELF(self), RVAL2CBOOL(justify));
|
222
|
+
return self;
|
223
|
+
}
|
224
|
+
static VALUE
|
225
|
+
layout_get_justify(self)
|
226
|
+
VALUE self;
|
227
|
+
{
|
228
|
+
return CBOOL2RVAL(pango_layout_get_justify(_SELF(self)));
|
229
|
+
}
|
230
|
+
|
231
|
+
#if PANGO_CHECK_VERSION(1,4,0)
|
232
|
+
static VALUE
|
233
|
+
layout_set_auto_dir(self, auto_dir)
|
234
|
+
VALUE self, auto_dir;
|
235
|
+
{
|
236
|
+
pango_layout_set_auto_dir(_SELF(self), RVAL2CBOOL(auto_dir));
|
237
|
+
return self;
|
238
|
+
}
|
239
|
+
static VALUE
|
240
|
+
layout_get_auto_dir(self)
|
241
|
+
VALUE self;
|
242
|
+
{
|
243
|
+
return CBOOL2RVAL(pango_layout_get_auto_dir(_SELF(self)));
|
244
|
+
}
|
245
|
+
#endif
|
246
|
+
|
247
|
+
static VALUE
|
248
|
+
layout_set_alignment(self, align)
|
249
|
+
VALUE self, align;
|
250
|
+
{
|
251
|
+
pango_layout_set_alignment(_SELF(self), RVAL2GENUM(align, PANGO_TYPE_ALIGNMENT));
|
252
|
+
return self;
|
253
|
+
}
|
254
|
+
|
255
|
+
static VALUE
|
256
|
+
layout_get_alignment(self)
|
257
|
+
VALUE self;
|
258
|
+
{
|
259
|
+
return GENUM2RVAL(pango_layout_get_alignment(_SELF(self)), PANGO_TYPE_ALIGNMENT);
|
260
|
+
}
|
261
|
+
|
262
|
+
static VALUE
|
263
|
+
layout_set_tabs(self, tabs)
|
264
|
+
VALUE self,tabs;
|
265
|
+
{
|
266
|
+
pango_layout_set_tabs(_SELF(self),
|
267
|
+
(PangoTabArray*)RVAL2BOXED(self, PANGO_TYPE_TAB_ARRAY));
|
268
|
+
return self;
|
269
|
+
}
|
270
|
+
|
271
|
+
static VALUE
|
272
|
+
layout_get_tabs(self)
|
273
|
+
VALUE self;
|
274
|
+
{
|
275
|
+
VALUE ret = Qnil;
|
276
|
+
PangoTabArray* tabs = pango_layout_get_tabs(_SELF(self));
|
277
|
+
|
278
|
+
if (tabs) {
|
279
|
+
ret = BOXED2RVAL(tabs, PANGO_TYPE_TAB_ARRAY);
|
280
|
+
pango_tab_array_free(tabs);
|
281
|
+
}
|
282
|
+
return ret;
|
283
|
+
}
|
284
|
+
|
285
|
+
static VALUE
|
286
|
+
layout_set_single_paragraph_mode(self, setting)
|
287
|
+
VALUE self, setting;
|
288
|
+
{
|
289
|
+
pango_layout_set_single_paragraph_mode(_SELF(self), RVAL2CBOOL(setting));
|
290
|
+
return self;
|
291
|
+
}
|
292
|
+
|
293
|
+
static VALUE
|
294
|
+
layout_get_single_paragraph_mode(self)
|
295
|
+
VALUE self;
|
296
|
+
{
|
297
|
+
return CBOOL2RVAL(pango_layout_get_single_paragraph_mode(_SELF(self)));
|
298
|
+
}
|
299
|
+
|
300
|
+
static VALUE
|
301
|
+
layout_get_log_attrs(self)
|
302
|
+
VALUE self;
|
303
|
+
{
|
304
|
+
PangoLogAttr* attrs;
|
305
|
+
gint i, n_attrs;
|
306
|
+
VALUE ary;
|
307
|
+
|
308
|
+
pango_layout_get_log_attrs(_SELF(self), &attrs, &n_attrs);
|
309
|
+
|
310
|
+
ary = rb_ary_new();
|
311
|
+
|
312
|
+
for (i = 0; i < n_attrs; i++) {
|
313
|
+
rb_ary_assoc(ary, BOXED2RVAL(&attrs[i], PANGO_TYPE_LOG_ATTR));
|
314
|
+
}
|
315
|
+
g_free(attrs);
|
316
|
+
|
317
|
+
return ary;
|
318
|
+
}
|
319
|
+
|
320
|
+
static VALUE
|
321
|
+
layout_xy_to_index(self, x, y)
|
322
|
+
VALUE self, x, y;
|
323
|
+
{
|
324
|
+
int index, trailing;
|
325
|
+
gboolean ret = pango_layout_xy_to_index(_SELF(self),
|
326
|
+
NUM2INT(x), NUM2INT(y),
|
327
|
+
&index, &trailing);
|
328
|
+
|
329
|
+
return rb_ary_new3(3, CBOOL2RVAL(ret), INT2NUM(index), INT2NUM(trailing));
|
330
|
+
}
|
331
|
+
|
332
|
+
static VALUE
|
333
|
+
layout_index_to_pos(self, index)
|
334
|
+
VALUE self, index;
|
335
|
+
{
|
336
|
+
PangoRectangle pos;
|
337
|
+
pango_layout_index_to_pos(_SELF(self), NUM2INT(index), &pos);
|
338
|
+
return BOXED2RVAL(&pos, PANGO_TYPE_RECTANGLE);
|
339
|
+
}
|
340
|
+
|
341
|
+
static VALUE
|
342
|
+
layout_get_cursor_pos(self, index)
|
343
|
+
VALUE self, index;
|
344
|
+
{
|
345
|
+
PangoRectangle strong_pos, weak_pos;
|
346
|
+
pango_layout_get_cursor_pos(_SELF(self), NUM2INT(index), &strong_pos, &weak_pos);
|
347
|
+
return rb_ary_new3(2, BOXED2RVAL(&strong_pos, PANGO_TYPE_RECTANGLE),
|
348
|
+
BOXED2RVAL(&weak_pos, PANGO_TYPE_RECTANGLE));
|
349
|
+
}
|
350
|
+
|
351
|
+
static VALUE
|
352
|
+
layout_move_cursor_visually(self, strong, old_index, old_trailing, direction)
|
353
|
+
VALUE self, strong, old_index, old_trailing, direction;
|
354
|
+
{
|
355
|
+
int new_index, new_trailing;
|
356
|
+
pango_layout_move_cursor_visually(_SELF(self), RVAL2CBOOL(strong),
|
357
|
+
NUM2INT(old_index), NUM2INT(old_trailing),
|
358
|
+
NUM2INT(direction),
|
359
|
+
&new_index, &new_trailing);
|
360
|
+
return rb_ary_new3(2, INT2NUM(new_index), INT2NUM(new_trailing));
|
361
|
+
}
|
362
|
+
|
363
|
+
static VALUE
|
364
|
+
layout_get_extents(argc, argv, self)
|
365
|
+
int argc;
|
366
|
+
VALUE* argv;
|
367
|
+
VALUE self;
|
368
|
+
{
|
369
|
+
VALUE ink_rect, logical_rect;
|
370
|
+
PangoRectangle rink, rlog;
|
371
|
+
|
372
|
+
rb_scan_args(argc, argv, "02", &ink_rect, &logical_rect);
|
373
|
+
|
374
|
+
if (NIL_P(ink_rect)){
|
375
|
+
rink.x = 0;
|
376
|
+
rink.y = 0;
|
377
|
+
rink.width = 0;
|
378
|
+
rink.height = 0;
|
379
|
+
} else {
|
380
|
+
PangoRectangle* rect = (PangoRectangle*)RVAL2BOXED(ink_rect, PANGO_TYPE_RECTANGLE);
|
381
|
+
rink.x = rect->x;
|
382
|
+
rink.y = rect->y;
|
383
|
+
rink.width = rect->width;
|
384
|
+
rink.height = rect->height;
|
385
|
+
}
|
386
|
+
if (NIL_P(logical_rect)){
|
387
|
+
rlog.x = 0;
|
388
|
+
rlog.y = 0;
|
389
|
+
rlog.width = 0;
|
390
|
+
rlog.height = 0;
|
391
|
+
} else {
|
392
|
+
PangoRectangle* rect = (PangoRectangle*)RVAL2BOXED(logical_rect, PANGO_TYPE_RECTANGLE);
|
393
|
+
rlog.x = rect->x;
|
394
|
+
rlog.y = rect->y;
|
395
|
+
rlog.width = rect->width;
|
396
|
+
rlog.height = rect->height;
|
397
|
+
}
|
398
|
+
|
399
|
+
pango_layout_get_extents(_SELF(self), &rink, &rlog);
|
400
|
+
|
401
|
+
return rb_assoc_new(BOXED2RVAL(&rink, PANGO_TYPE_RECTANGLE),
|
402
|
+
BOXED2RVAL(&rlog, PANGO_TYPE_RECTANGLE));
|
403
|
+
}
|
404
|
+
|
405
|
+
static VALUE
|
406
|
+
layout_extents(self)
|
407
|
+
VALUE self;
|
408
|
+
{
|
409
|
+
PangoRectangle rink = {0, 0, 0, 0};
|
410
|
+
PangoRectangle rlog = {0, 0, 0, 0};
|
411
|
+
|
412
|
+
pango_layout_get_extents(_SELF(self), &rink, &rlog);
|
413
|
+
return rb_assoc_new(BOXED2RVAL(&rink, PANGO_TYPE_RECTANGLE),
|
414
|
+
BOXED2RVAL(&rlog, PANGO_TYPE_RECTANGLE));
|
415
|
+
}
|
416
|
+
|
417
|
+
static VALUE
|
418
|
+
layout_get_pixel_extents(argc, argv, self)
|
419
|
+
int argc;
|
420
|
+
VALUE* argv;
|
421
|
+
VALUE self;
|
422
|
+
{
|
423
|
+
VALUE ink_rect, logical_rect;
|
424
|
+
PangoRectangle rink, rlog;
|
425
|
+
|
426
|
+
rb_scan_args(argc, argv, "02", &ink_rect, &logical_rect);
|
427
|
+
|
428
|
+
if (NIL_P(ink_rect)){
|
429
|
+
rink.x = 0;
|
430
|
+
rink.y = 0;
|
431
|
+
rink.width = 0;
|
432
|
+
rink.height = 0;
|
433
|
+
} else {
|
434
|
+
PangoRectangle* rect = (PangoRectangle*)RVAL2BOXED(ink_rect, PANGO_TYPE_RECTANGLE);
|
435
|
+
rink.x = rect->x;
|
436
|
+
rink.y = rect->y;
|
437
|
+
rink.width = rect->width;
|
438
|
+
rink.height = rect->height;
|
439
|
+
}
|
440
|
+
if (NIL_P(logical_rect)){
|
441
|
+
rlog.x = 0;
|
442
|
+
rlog.y = 0;
|
443
|
+
rlog.width = 0;
|
444
|
+
rlog.height = 0;
|
445
|
+
} else {
|
446
|
+
PangoRectangle* rect = (PangoRectangle*)RVAL2BOXED(logical_rect, PANGO_TYPE_RECTANGLE);
|
447
|
+
rlog.x = rect->x;
|
448
|
+
rlog.y = rect->y;
|
449
|
+
rlog.width = rect->width;
|
450
|
+
rlog.height = rect->height;
|
451
|
+
}
|
452
|
+
|
453
|
+
pango_layout_get_pixel_extents(_SELF(self), &rink, &rlog);
|
454
|
+
|
455
|
+
return rb_assoc_new(BOXED2RVAL(&rink, PANGO_TYPE_RECTANGLE),
|
456
|
+
BOXED2RVAL(&rlog, PANGO_TYPE_RECTANGLE));
|
457
|
+
}
|
458
|
+
|
459
|
+
static VALUE
|
460
|
+
layout_pixel_extents(self)
|
461
|
+
VALUE self;
|
462
|
+
{
|
463
|
+
PangoRectangle rink = {0, 0, 0, 0};
|
464
|
+
PangoRectangle rlog = {0, 0, 0, 0};
|
465
|
+
|
466
|
+
pango_layout_get_pixel_extents(_SELF(self), &rink, &rlog);
|
467
|
+
return rb_assoc_new(BOXED2RVAL(&rink, PANGO_TYPE_RECTANGLE),
|
468
|
+
BOXED2RVAL(&rlog, PANGO_TYPE_RECTANGLE));
|
469
|
+
}
|
470
|
+
|
471
|
+
static VALUE
|
472
|
+
layout_get_size(self)
|
473
|
+
VALUE self;
|
474
|
+
{
|
475
|
+
int width, height;
|
476
|
+
pango_layout_get_size(_SELF(self), &width, &height);
|
477
|
+
return rb_ary_new3(2, INT2NUM(width), INT2NUM(height));
|
478
|
+
}
|
479
|
+
|
480
|
+
static VALUE
|
481
|
+
layout_get_pixel_size(self)
|
482
|
+
VALUE self;
|
483
|
+
{
|
484
|
+
int width, height;
|
485
|
+
pango_layout_get_pixel_size(_SELF(self), &width, &height);
|
486
|
+
return rb_ary_new3(2, INT2NUM(width), INT2NUM(height));
|
487
|
+
}
|
488
|
+
|
489
|
+
static VALUE
|
490
|
+
layout_get_line_count(self)
|
491
|
+
VALUE self;
|
492
|
+
{
|
493
|
+
return INT2NUM(pango_layout_get_line_count(_SELF(self)));
|
494
|
+
}
|
495
|
+
|
496
|
+
static VALUE
|
497
|
+
layout_get_line(self, line)
|
498
|
+
VALUE self, line;
|
499
|
+
{
|
500
|
+
return BOXED2RVAL(pango_layout_get_line(_SELF(self), NUM2INT(line)), PANGO_TYPE_LAYOUT_LINE);
|
501
|
+
}
|
502
|
+
|
503
|
+
static VALUE
|
504
|
+
layout_get_lines(self)
|
505
|
+
VALUE self;
|
506
|
+
{
|
507
|
+
return GSLIST2ARY2(pango_layout_get_lines(_SELF(self)), PANGO_TYPE_LAYOUT_LINE);
|
508
|
+
}
|
509
|
+
|
510
|
+
|
511
|
+
static VALUE
|
512
|
+
layout_get_iter(self)
|
513
|
+
VALUE self;
|
514
|
+
{
|
515
|
+
return BOXED2RVAL(pango_layout_get_iter(_SELF(self)),
|
516
|
+
PANGO_TYPE_LAYOUT_ITER);
|
517
|
+
}
|
518
|
+
|
519
|
+
void
|
520
|
+
Init_pango_layout()
|
521
|
+
{
|
522
|
+
VALUE pLayout = G_DEF_CLASS(PANGO_TYPE_LAYOUT, "Layout", mPango);
|
523
|
+
|
524
|
+
rb_define_method(pLayout, "initialize", layout_initialize, 1);
|
525
|
+
rb_define_method(pLayout, "copy", layout_copy, 0);
|
526
|
+
rb_define_method(pLayout, "context", layout_get_context, 0);
|
527
|
+
rb_define_method(pLayout, "context_changed", layout_context_changed, 0);
|
528
|
+
rb_define_method(pLayout, "set_text", layout_set_text, 1);
|
529
|
+
rb_define_method(pLayout, "text", layout_get_text, 0);
|
530
|
+
rb_define_method(pLayout, "set_markup", layout_set_markup, -1);
|
531
|
+
rb_define_method(pLayout, "markup=", layout_set_markup_eq, 1);
|
532
|
+
rb_define_method(pLayout, "set_attributes", layout_set_attributes, 1);
|
533
|
+
rb_define_method(pLayout, "attributes", layout_get_attributes, 0);
|
534
|
+
rb_define_method(pLayout, "set_font_description", layout_set_font_description, 1);
|
535
|
+
#ifdef HAVE_PANGO_LAYOUT_GET_FONT_DESCRIPTION
|
536
|
+
rb_define_method(pLayout, "font_description", layout_get_font_description, 0);
|
537
|
+
#endif
|
538
|
+
rb_define_method(pLayout, "set_width", layout_set_width, 1);
|
539
|
+
rb_define_method(pLayout, "width", layout_get_width, 0);
|
540
|
+
rb_define_method(pLayout, "set_wrap", layout_set_wrap, 1);
|
541
|
+
rb_define_method(pLayout, "wrap", layout_get_wrap, 0);
|
542
|
+
#ifdef HAVE_PANGO_LAYOUT_SET_ELLIPSIZE
|
543
|
+
rb_define_method(pLayout, "set_ellipsize", layout_set_ellipsize, 1);
|
544
|
+
rb_define_method(pLayout, "ellipsize", layout_get_ellipsize, 0);
|
545
|
+
#endif
|
546
|
+
rb_define_method(pLayout, "set_indent", layout_set_indent, 1);
|
547
|
+
rb_define_method(pLayout, "indent", layout_get_indent, 0);
|
548
|
+
rb_define_method(pLayout, "spacing", layout_get_spacing, 0);
|
549
|
+
rb_define_method(pLayout, "set_spacing", layout_set_spacing, 1);
|
550
|
+
rb_define_method(pLayout, "set_justify", layout_set_justify, 1);
|
551
|
+
rb_define_method(pLayout, "justify?", layout_get_justify, 0);
|
552
|
+
#if PANGO_CHECK_VERSION(1,4,0)
|
553
|
+
rb_define_method(pLayout, "set_auto_dir", layout_set_auto_dir, 1);
|
554
|
+
rb_define_method(pLayout, "auto_dir?", layout_get_auto_dir, 0);
|
555
|
+
#endif
|
556
|
+
rb_define_method(pLayout, "set_alignment", layout_set_alignment, 1);
|
557
|
+
rb_define_method(pLayout, "alignment", layout_get_alignment, 0);
|
558
|
+
rb_define_method(pLayout, "set_tabs", layout_set_tabs, 1);
|
559
|
+
rb_define_method(pLayout, "tabs", layout_get_tabs, 0);
|
560
|
+
rb_define_method(pLayout, "set_single_paragraph_mode", layout_set_single_paragraph_mode, 1);
|
561
|
+
rb_define_method(pLayout, "single_paragraph_mode?", layout_get_single_paragraph_mode, 0);
|
562
|
+
rb_define_method(pLayout, "log_attrs", layout_get_log_attrs, 0);
|
563
|
+
rb_define_method(pLayout, "xy_to_index", layout_xy_to_index, 2);
|
564
|
+
rb_define_method(pLayout, "index_to_pos", layout_index_to_pos, 1);
|
565
|
+
rb_define_method(pLayout, "get_cursor_pos", layout_get_cursor_pos, 1);
|
566
|
+
rb_define_method(pLayout, "move_cursor_visually", layout_move_cursor_visually, 4);
|
567
|
+
rb_define_method(pLayout, "get_extents", layout_get_extents, -1);
|
568
|
+
rb_define_method(pLayout, "extents", layout_extents, 0);
|
569
|
+
rb_define_method(pLayout, "get_pixel_extents", layout_get_pixel_extents, -1);
|
570
|
+
rb_define_method(pLayout, "pixel_extents", layout_pixel_extents, 0);
|
571
|
+
rb_define_method(pLayout, "size", layout_get_size, 0);
|
572
|
+
rb_define_method(pLayout, "pixel_size", layout_get_pixel_size, 0);
|
573
|
+
rb_define_method(pLayout, "line_count", layout_get_line_count, 0);
|
574
|
+
rb_define_method(pLayout, "get_line", layout_get_line, 1);
|
575
|
+
rb_define_method(pLayout, "lines", layout_get_lines, 0);
|
576
|
+
rb_define_method(pLayout, "iter", layout_get_iter, 0);
|
577
|
+
|
578
|
+
G_DEF_SETTERS(pLayout);
|
579
|
+
|
580
|
+
/* PangoWrapMode */
|
581
|
+
G_DEF_CLASS(PANGO_TYPE_WRAP_MODE, "WrapMode", pLayout);
|
582
|
+
G_DEF_CONSTANTS(pLayout, PANGO_TYPE_WRAP_MODE, "PANGO_");
|
583
|
+
|
584
|
+
/* PangoAlignment */
|
585
|
+
G_DEF_CLASS(PANGO_TYPE_ALIGNMENT, "Alignment", pLayout);
|
586
|
+
G_DEF_CONSTANTS(pLayout, PANGO_TYPE_ALIGNMENT, "PANGO_");
|
587
|
+
|
588
|
+
#ifdef HAVE_PANGO_LAYOUT_SET_ELLIPSIZE
|
589
|
+
/* PangoEllipsizeMode */
|
590
|
+
G_DEF_CLASS(PANGO_TYPE_ELLIPSIZE_MODE, "EllipsizeMode", pLayout);
|
591
|
+
G_DEF_CONSTANTS(pLayout, PANGO_TYPE_ELLIPSIZE_MODE, "PANGO_");
|
592
|
+
#endif
|
593
|
+
}
|