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 | 
            +
            }
         |