static VALUE rg_get_cursor_pos(VALUE self, VALUE index) { PangoRectangle strong_pos, weak_pos; pango_layout_get_cursor_pos(_SELF(self), NUM2INT(index), &strong_pos, &weak_pos); return rb_ary_new3(2, BOXED2RVAL(&strong_pos, PANGO_TYPE_RECTANGLE), BOXED2RVAL(&weak_pos, PANGO_TYPE_RECTANGLE)); }
static VALUE layout_iter_get_layout_extents(VALUE self) { PangoRectangle ink_rect, logical_rect; pango_layout_iter_get_layout_extents(_SELF(self), &ink_rect, &logical_rect); return rb_assoc_new(BOXED2RVAL(&ink_rect, PANGO_TYPE_RECTANGLE), BOXED2RVAL(&logical_rect, PANGO_TYPE_RECTANGLE)); }
static gint sort_func(GtkRecentInfo *a, GtkRecentInfo *b, gpointer func) { struct callback_arg arg; arg.callback = (VALUE)func; arg.a = BOXED2RVAL(a, GTK_TYPE_RECENT_INFO); arg.b = BOXED2RVAL(b, GTK_TYPE_RECENT_INFO); return NUM2INT(G_PROTECT_CALLBACK(invoke_callback, &arg)); }
static VALUE rg_pixel_extents(VALUE self) { PangoRectangle rink = {0, 0, 0, 0}; PangoRectangle rlog = {0, 0, 0, 0}; pango_layout_get_pixel_extents(_SELF(self), &rink, &rlog); return rb_assoc_new(BOXED2RVAL(&rink, PANGO_TYPE_RECTANGLE), BOXED2RVAL(&rlog, PANGO_TYPE_RECTANGLE)); }
static VALUE rg_regex(VALUE self) { GRegex *regex; regex = g_match_info_get_regex(_SELF(self)); return BOXED2RVAL(regex, G_TYPE_REGEX); }
static VALUE rg_wait_for_targets(VALUE self) { gint i; VALUE ary = Qnil; GdkAtom* targets; gint n_targets = 0; gboolean ret = gtk_clipboard_wait_for_targets(_SELF(self), &targets, &n_targets); if (ret){ ary = rb_ary_new(); for (i = 0; i < n_targets; i++){ if ((GdkAtom)targets == (GdkAtom)GDK_NONE){ rb_ary_push(ary, rb_eval_string("Gdk::Atom::NONE")); } else rb_ary_push(ary, BOXED2RVAL(targets, GDK_TYPE_ATOM)); targets++; } /* How can I this ? g_free(&o_targets); */ } return ary; }
static VALUE tvc_cell_get_size(VALUE self) { GdkRectangle cell_area; gint x_offset, y_offset, width, height; VALUE cell; /* Is this collect implement for cell_area ? */ cell_area.x = -1; cell_area.y = -1; cell_area.width = -1; cell_area.height = -1; gtk_tree_view_column_cell_get_size(_SELF(self), &cell_area, &x_offset, &y_offset, &width, &height); if (cell_area.x == -1 || cell_area.y == -1 || cell_area.width == -1 || cell_area.height == -1){ cell = Qnil; } else { cell = BOXED2RVAL(&cell_area, GDK_TYPE_RECTANGLE); } return rb_ary_new3(5, cell, x_offset ? INT2NUM(x_offset) : Qnil, y_offset ? INT2NUM(y_offset) : Qnil, width ? INT2NUM(width) : Qnil, height ? INT2NUM(height) : Qnil); }
static gboolean io_func(GIOChannel *source, GIOCondition condition, gpointer func) { return RVAL2CBOOL(rb_funcall((VALUE)func, id_call, 2, BOXED2RVAL(source, G_TYPE_IO_CHANNEL), INT2NUM(condition))); }
static VALUE rg_union(VALUE self, VALUE other) { GdkRectangle dest; gdk_rectangle_union(_SELF(self), _SELF(other), &dest); return BOXED2RVAL(&dest, GDK_TYPE_RECTANGLE); }
static VALUE rg_s_open(gint argc, VALUE *argv, G_GNUC_UNUSED VALUE self) { VALUE arg1, arg2; VALUE rio; GIOChannel* io = NULL; rb_scan_args(argc, argv, "11", &arg1, &arg2); if (TYPE(arg1) == T_FIXNUM){ #ifdef G_OS_UNIX io = g_io_channel_unix_new(NUM2INT(arg1)); #elif defined(G_OS_WIN32) io = g_io_channel_win32_new_fd(NUM2INT(arg1)); #else rb_raise(rb_eRuntimeError, "GLib::IOChannel.new(fd) is supported on " "UNIX and Windows environment only"); #endif } else { GError* err = NULL; io = g_io_channel_new_file(RVAL2CSTR(arg1), NIL_P(arg2) ? "r" : RVAL2CSTR(arg2), &err); if (err != NULL) RAISE_GERROR(err); } rio = BOXED2RVAL(io, G_TYPE_IO_CHANNEL); if (rb_block_given_p()) { return rb_ensure(rb_yield, rio, ioc_close, rio); } return rio; }
static VALUE rg_colors(VALUE self) { GdkColormap *cmap; GdkColor *colors; GdkVisual *visual; VALUE ary; int i; cmap = _SELF(self); colors = cmap->colors; visual = gdk_colormap_get_visual(cmap); if (visual->type == GDK_VISUAL_GRAYSCALE || visual->type == GDK_VISUAL_PSEUDO_COLOR) { ary = rb_ary_new2(cmap->size); for (i = 0; i < cmap->size; i++) { rb_ary_push(ary, BOXED2RVAL(colors, GDK_TYPE_COLOR)); colors++; } return ary; } else { return Qnil; } }
static VALUE rg_region_intersect(VALUE self, VALUE region) { return BOXED2RVAL(gtk_widget_region_intersect(_SELF(self), (GdkRegion*)RVAL2BOXED(region, GDK_TYPE_REGION)), GDK_TYPE_REGION); }
static VALUE textview_get_iter_location(VALUE self, VALUE iter) { GdkRectangle rect; gtk_text_view_get_iter_location(_SELF(self), RVAL2ITR(iter), &rect); return BOXED2RVAL(&rect, GDK_TYPE_RECTANGLE); }
static VALUE rg_clipbox(VALUE self) { GdkRectangle rect; gdk_region_get_clipbox(_SELF(self), &rect); return BOXED2RVAL(&rect, GDK_TYPE_RECTANGLE); }
static VALUE textview_get_visible_rect(VALUE self) { GdkRectangle rect; gtk_text_view_get_visible_rect(_SELF(self), &rect); return BOXED2RVAL(&rect, GDK_TYPE_RECTANGLE); }
static VALUE gdkwin_get_frame_extents(VALUE self) { GdkRectangle rect; gdk_window_get_frame_extents(_SELF(self), &rect); return BOXED2RVAL(&rect, GDK_TYPE_RECTANGLE); }
static VALUE rg_intersect(VALUE self, VALUE other) { GdkRectangle dest; gboolean ret = gdk_rectangle_intersect(_SELF(self), _SELF(other), &dest); return ret ? BOXED2RVAL(&dest, GDK_TYPE_RECTANGLE) : Qnil; }
static VALUE rg_index_to_pos(VALUE self, VALUE index) { PangoRectangle pos; pango_layout_index_to_pos(_SELF(self), NUM2INT(index), &pos); return BOXED2RVAL(&pos, PANGO_TYPE_RECTANGLE); }
static VALUE rpango_break(VALUE self, VALUE text, VALUE analysis) { gint i, len; glong attrs_len; PangoLogAttr *attrs; const gchar *gtext; VALUE ret; gtext = StringValuePtr(text); len = RSTRING_LEN(text); attrs_len = g_utf8_strlen(gtext, (gssize)len) + 1l; attrs = g_new0(PangoLogAttr, attrs_len); pango_break(gtext, len, NIL_P(analysis) ? NULL : RVAL2BOXED(analysis, PANGO_TYPE_ANALYSIS), attrs, attrs_len); ret = rb_ary_new(); for (i = 0; i < attrs_len; i++){ rb_ary_push(ret, BOXED2RVAL(&attrs[i], PANGO_TYPE_LOG_ATTR)); } g_free(attrs); return ret; }
static VALUE rpango_get_log_attrs(VALUE self, VALUE text, VALUE level, VALUE language) { gint i, len; glong attrs_len; PangoLogAttr *attrs; const gchar *gtext; VALUE ret; gtext = StringValuePtr(text); len = RSTRING_LEN(text); attrs_len = g_utf8_strlen(gtext, (gssize)len) + 1l; attrs = g_new0(PangoLogAttr, attrs_len); pango_get_log_attrs(gtext, len, NUM2INT(level), RVAL2BOXED(language, PANGO_TYPE_LANGUAGE), attrs, attrs_len); ret = rb_ary_new(); for (i = 0; i < attrs_len; i++){ rb_ary_push(ret, BOXED2RVAL(&attrs[i], PANGO_TYPE_LOG_ATTR)); } g_free(attrs); return ret; }
static VALUE item_split(VALUE self, VALUE split_index, VALUE split_offset) { return BOXED2RVAL(pango_item_split(_SELF(self), NUM2INT(split_index), NUM2INT(split_offset)), PANGO_TYPE_ITEM); }
static VALUE rg_s_lookup_default(G_GNUC_UNUSED VALUE self, VALUE id) { GtkIconSet *icon_set; icon_set = gtk_icon_factory_lookup_default(RVAL2CSTR(id)); return BOXED2RVAL(icon_set, GTK_TYPE_ICON_SET); }
static VALUE rg_background(VALUE self) { GdkGCValues val; gdk_gc_get_values(_SELF(self), &val); return BOXED2RVAL(&val.background, GDK_TYPE_COLOR); }
static VALUE layout_iter_get_char_extents(VALUE self) { PangoRectangle logical_rect; pango_layout_iter_get_char_extents(_SELF(self), &logical_rect); return BOXED2RVAL(&logical_rect, PANGO_TYPE_RECTANGLE); }
static VALUE coverage_s_from_bytes(VALUE self, VALUE bytes) { StringValue(bytes); return BOXED2RVAL(pango_coverage_from_bytes((guchar *)RSTRING_PTR(bytes), RSTRING_LEN(bytes)), PANGO_TYPE_COVERAGE); }
static VALUE rg_lookup(VALUE self, VALUE id) { GtkIconSet *icon_set; icon_set = gtk_icon_factory_lookup(_SELF(self), RVAL2CSTR(id)); return BOXED2RVAL(icon_set, GTK_TYPE_ICON_SET); }
VALUE make_gdkevent(GdkEvent *event) { if (!event) return Qnil; return BOXED2RVAL(event, rb_gdk_event_type_to_gtype(event->any.type)); }
static VALUE rg_wait_for_contents(VALUE self, VALUE target) { return BOXED2RVAL(gtk_clipboard_wait_for_contents( _SELF(self), RVAL2ATOM(target)), GTK_TYPE_SELECTION_DATA); }
static VALUE rg_wait_for_rich_text(VALUE self, VALUE buffer) { GdkAtom format; gsize length; guint8* data = gtk_clipboard_wait_for_rich_text(_SELF(self), GTK_TEXT_BUFFER(RVAL2GOBJ(buffer)), &format, &length); if (data){ VALUE str = rb_str_new((char*)data, length); g_free(data); return rb_assoc_new(str, BOXED2RVAL(format, GDK_TYPE_ATOM)); } else { return rb_assoc_new(Qnil, BOXED2RVAL(format, GDK_TYPE_ATOM)); } }
static VALUE rg_lookup_item(VALUE self, VALUE uri) { GError* error = NULL; GtkRecentInfo* info = gtk_recent_manager_lookup_item(_SELF(self), RVAL2CSTR(uri), &error); if (error) RAISE_GERROR(error); return BOXED2RVAL(info, GTK_TYPE_RECENT_INFO); }