Example #1
0
static VALUE
rg_runs(VALUE self)
{
    GSList* list = _SELF(self)->runs;
    VALUE ary = rb_ary_new();
    while (list) {
        PangoGlyphItem* old_item = (PangoGlyphItem*)list->data;
        PangoGlyphItem new_item;

        new_item.item = pango_item_copy(old_item->item);
        new_item.glyphs = pango_glyph_string_copy(old_item->glyphs);

        rb_ary_push(ary, PANGOGLYPHITEM2RVAL(&new_item));
        list = list->next;
    }
    return ary;
}
Example #2
0
/**
 * pango_item_split:
 * @orig: a #PangoItem
 * @split_index: byte index of position to split item, relative to the start of the item
 * @split_offset: number of chars between start of @orig and @split_index
 * 
 * Modifies @orig to cover only the text after @split_index, and
 * returns a new item that covers the text before @split_index that
 * used to be in @orig. You can think of @split_index as the length of
 * the returned item. @split_index may not be 0, and it may not be
 * greater than or equal to the length of @orig (that is, there must
 * be at least one byte assigned to each item, you can't create a
 * zero-length item). @split_offset is the length of the first item in
 * chars, and must be provided because the text used to generate the
 * item isn't available, so pango_item_split() can't count the char
 * length of the split items itself.
 * 
 * Return value: new item representing text before @split_index
 **/
PangoItem*
pango_item_split (PangoItem  *orig,
                  int         split_index,
                  int         split_offset)
{
  PangoItem *new_item = pango_item_copy (orig);

  g_return_val_if_fail (orig != NULL, NULL);
  g_return_val_if_fail (orig->length > 0, NULL);
  g_return_val_if_fail (split_index > 0, NULL);
  g_return_val_if_fail (split_index < orig->length, NULL);
  g_return_val_if_fail (split_offset > 0, NULL);
  g_return_val_if_fail (split_offset < orig->num_chars, NULL);
  
  new_item->length = split_index;
  new_item->num_chars = split_offset;
  
  orig->offset += split_index;
  orig->length -= split_index;
  orig->num_chars -= split_offset;
  
  return new_item;
}