static VALUE rg_draw_layout(VALUE self, VALUE layout, VALUE x, VALUE y) { pango_renderer_draw_layout(_SELF(self), PANGO_LAYOUT(RVAL2GOBJ(layout)), NUM2INT(x), NUM2INT(y)); return self; }
static VALUE style_paint_layout(VALUE self, VALUE gdkwindow, VALUE state_type, VALUE use_text, VALUE area, VALUE widget, VALUE detail, VALUE x, VALUE y, VALUE layout) { gtk_paint_layout(_SELF(self), GDK_WINDOW(RVAL2GOBJ(gdkwindow)), RVAL2STATE(state_type), RVAL2CBOOL(use_text), RVAL2REC(area), GTK_WIDGET(RVAL2GOBJ(widget)), NIL_P(detail) ? NULL : RVAL2CSTR(detail), NUM2INT(x), NUM2INT(y), PANGO_LAYOUT(RVAL2GOBJ(layout))); return self; }
static VALUE rg_draw_layout(int argc, VALUE *argv, VALUE self) { VALUE gc, x, y, layout, fg, bg; rb_scan_args(argc, argv, "42", &gc, &x, &y, &layout, &fg, &bg); gdk_draw_layout_with_colors(_SELF(self), GDK_GC(RVAL2GOBJ(gc)), NUM2INT(x), NUM2INT(y), PANGO_LAYOUT(RVAL2GOBJ(layout)), RVAL2GDKCOLOR(fg), RVAL2GDKCOLOR(bg)); return self; }
static VALUE gdkpango_layout_get_clip_region(VALUE self, VALUE rbx_origin, VALUE rby_origin, VALUE rbindex_ranges) { PangoLayout *layout = PANGO_LAYOUT(RVAL2GOBJ(self)); gint x_origin = NUM2INT(rbx_origin); gint y_origin = NUM2INT(rby_origin); long n; gint *index_ranges = RVAL2GINTS(rbindex_ranges, &n); GdkRegion *result; if (n % 2 != 0) { g_free(index_ranges); rb_raise(rb_eArgError, "an even number of byte indexes must be given"); } result = gdk_pango_layout_get_clip_region(layout, x_origin, y_origin, index_ranges, n / 2); g_free(index_ranges); return BOXED2RVAL(result, GDK_TYPE_REGION); }
gboolean update_track_info(track_t *t) { gchar dummy[10], *markup = NULL, *markupProps = NULL; gint i = 0; GdkPixbuf *starPix = NULL; PangoLayout *layout = NULL; get_track_info(&t->track); if (!validate_track_info(&t->track)) { g_print("Malformed track data\n"); gtk_main_quit(); } if (t->track.changed) { gtk_image_set_from_file(GTK_IMAGE(t->trackw.image), t->track.artworkId); markupProps = g_strdup("<span font='Sans 11' font_weight='bold' color='#FFFFFF'>%s</span>"); t->track.x.name = 0; t->track.x.name2 = 0; markup = g_markup_printf_escaped(markupProps, t->track.name); gtk_label_set_markup(GTK_LABEL(t->trackw.label.name), markup); layout = gtk_label_get_layout(GTK_LABEL(t->trackw.label.name)); pango_layout_get_pixel_size(PANGO_LAYOUT(layout), &t->track.nameLen, NULL); if (t->track.nameLen > SCROLL_SIZE_W) { if (t->track.nameScroll) g_source_remove(t->track.nameTag); t->track.nameScroll = TRUE; t->track.nameTag = g_timeout_add(SCROLL_SPEED, (GSourceFunc) scroll_label_name, t); } else if (t->track.nameScroll) { /* if the previous label was scrolled and this one doesn't need do * it stops the scrolling and puts the label at it's origin. Failure to do * so causes the new label to be displayed at the last position the previous * label was scrolled. */ g_source_remove(t->track.nameTag); gtk_layout_move(GTK_LAYOUT(t->trackw.layout.name), t->trackw.label.name, 0, 0); t->track.nameScroll = FALSE; } g_free(markup); t->track.x.artist = 0; t->track.x.artist2 = 0; markup = g_markup_printf_escaped(markupProps, t->track.artist); gtk_label_set_markup(GTK_LABEL(t->trackw.label.artist), markup); layout = gtk_label_get_layout(GTK_LABEL(t->trackw.label.artist)); pango_layout_get_pixel_size(PANGO_LAYOUT(layout), &t->track.artistLen, NULL); if (t->track.artistLen > SCROLL_SIZE_W-23) { if (t->track.artistScroll) g_source_remove(t->track.artistTag); t->track.artistScroll = TRUE; t->track.artistTag = g_timeout_add(SCROLL_SPEED, (GSourceFunc) scroll_label_artist, t); } else if (t->track.artistScroll) { g_source_remove(t->track.artistTag); gtk_layout_move(GTK_LAYOUT(t->trackw.layout.artist), t->trackw.label.artist, 0, 0); t->track.artistScroll = FALSE; } g_free(markup); t->track.x.album = 0; t->track.x.album2 = 0; markup = g_markup_printf_escaped(markupProps, t->track.album); gtk_label_set_markup(GTK_LABEL(t->trackw.label.album), markup); layout = gtk_label_get_layout(GTK_LABEL(t->trackw.label.album)); pango_layout_get_pixel_size(PANGO_LAYOUT(layout), &t->track.albumLen, NULL); if (t->track.albumLen > SCROLL_SIZE_W-40) { if (t->track.albumScroll) g_source_remove(t->track.albumTag); t->track.albumScroll = TRUE; t->track.albumTag = g_timeout_add(SCROLL_SPEED, (GSourceFunc) scroll_label_album, t); } else if (t->track.albumScroll) { g_source_remove(t->track.albumTag); gtk_layout_move(GTK_LAYOUT(t->trackw.layout.album), t->trackw.label.album, 0, 0); t->track.albumScroll = FALSE; } g_free(markup); g_free(markupProps); markupProps = g_strdup("<span font='Sans 11' color='#FFFFFF'>%s</span>"); markup = g_markup_printf_escaped(markupProps, t->track.genre); gtk_label_set_markup(GTK_LABEL(t->trackw.genre), markup); g_free(markup); g_sprintf(dummy, "%d", t->track.year); markup = g_markup_printf_escaped(markupProps, dummy); gtk_label_set_markup(GTK_LABEL(t->trackw.year), markup); g_free(markup); dummy[0] = '\0'; format_time(dummy, t->track.length); markup = g_markup_printf_escaped(markupProps, dummy); gtk_label_set_markup(GTK_LABEL(t->trackw.length), markup); g_free(markup); g_free(markupProps); dummy[0] = '\0'; gtk_range_set_range(GTK_RANGE(t->trackw.slider), 0, t->track.length); /* set the rating */ starPix = gdk_pixbuf_new_from_xpm_data(starFull_xpm); for (i = 1; i <= t->track.rating; i++) gtk_image_set_from_pixbuf(GTK_IMAGE(t->trackw.stars[i-1]), GDK_PIXBUF(starPix)); g_object_unref(starPix); starPix = gdk_pixbuf_new_from_xpm_data(starHollow_xpm); while (i <= 5) { gtk_image_set_from_pixbuf(GTK_IMAGE(t->trackw.stars[i-1]), GDK_PIXBUF(starPix)); i++; } g_object_unref(starPix); } markupProps = g_strdup("<span font='Sans 11' color='#FFFFFF'>%s</span>"); g_sprintf(dummy, "%d", t->track.playcount); markup = g_markup_printf_escaped(markupProps, dummy); gtk_label_set_markup(GTK_LABEL(t->trackw.playcount), markup); g_free(markup); dummy[0] = '\0'; format_time(dummy, t->track.position); markup = g_markup_printf_escaped(markupProps, dummy); gtk_label_set_markup(GTK_LABEL(t->trackw.position), markup); g_free(markup); g_free(markupProps); dummy[0] = '\0'; gtk_range_set_fill_level(GTK_RANGE(t->trackw.slider), t->track.position); gtk_range_set_value(GTK_RANGE(t->trackw.slider), t->track.position); /* NOTE: reuses the starPix pixbuf */ if (t->playerInfo.counter == 4) { /* 2 seconds on currently UPDATE_SPEED */ if (!get_player_info(&t->playerInfo)) return FALSE; else { if (t->playerInfo.status) { starPix = gdk_pixbuf_new_from_xpm_data(pause_xpm); gtk_image_set_from_pixbuf(GTK_IMAGE(t->playerControls.playPause), starPix); g_object_unref(starPix); } else { starPix = gdk_pixbuf_new_from_xpm_data(play_xpm); gtk_image_set_from_pixbuf(GTK_IMAGE(t->playerControls.playPause), starPix); g_object_unref(starPix); } if (t->playerInfo.repeat == 0) { starPix = gdk_pixbuf_new_from_xpm_data(repeatOff_xpm); gtk_image_set_from_pixbuf(GTK_IMAGE(t->playerControls.repeat), starPix); g_object_unref(starPix); } else if (t->playerInfo.repeat == 1) { starPix = gdk_pixbuf_new_from_xpm_data(repeatAll_xpm); gtk_image_set_from_pixbuf(GTK_IMAGE(t->playerControls.repeat), starPix); g_object_unref(starPix); } else { starPix = gdk_pixbuf_new_from_xpm_data(repeatSingle_xpm); gtk_image_set_from_pixbuf(GTK_IMAGE(t->playerControls.repeat), starPix); g_object_unref(starPix); } if (t->playerInfo.shuffle) { starPix = gdk_pixbuf_new_from_xpm_data(shuffleOn_xpm); gtk_image_set_from_pixbuf(GTK_IMAGE(t->playerControls.shuffle), starPix); g_object_unref(starPix); } else { starPix = gdk_pixbuf_new_from_xpm_data(shuffleOff_xpm); gtk_image_set_from_pixbuf(GTK_IMAGE(t->playerControls.shuffle), starPix); g_object_unref(starPix); } } t->playerInfo.counter = 0; } free_track_info(&t->track); t->playerInfo.counter++; return TRUE; }
/** * gail_text_util_get_text: * @textutil: A #GailTextUtil * @layout: A gpointer which is a PangoLayout, a GtkTreeView of NULL * @function: An enumeration specifying whether to return the text before, at, or * after the offset. * @boundary_type: The boundary type. * @offset: The offset of the text in the GailTextUtil * @start_offset: Address of location in which the start offset is returned * @end_offset: Address of location in which the end offset is returned * * This function gets the requested substring from the text in the GtkTextUtil. * The layout is used only for getting the text on a line. The value is NULL * for a GtkTextView which is not wrapped, is a GtkTextView for a GtkTextView * which is wrapped and is a PangoLayout otherwise. * * Returns: the substring requested **/ gchar* gail_text_util_get_text (GailTextUtil *textutil, gpointer layout, GailOffsetType function, AtkTextBoundary boundary_type, gint offset, gint *start_offset, gint *end_offset) { GtkTextIter start, end; gint line_number; GtkTextBuffer *buffer; g_return_val_if_fail (GAIL_IS_TEXT_UTIL (textutil), NULL); buffer = textutil->buffer; if (buffer == NULL) { *start_offset = 0; *end_offset = 0; return NULL; } if (!gtk_text_buffer_get_char_count (buffer)) { *start_offset = 0; *end_offset = 0; return g_strdup (""); } gtk_text_buffer_get_iter_at_offset (buffer, &start, offset); end = start; switch (function) { case GAIL_BEFORE_OFFSET: switch (boundary_type) { case ATK_TEXT_BOUNDARY_CHAR: gtk_text_iter_backward_char(&start); break; case ATK_TEXT_BOUNDARY_WORD_START: if (!gtk_text_iter_starts_word (&start)) gtk_text_iter_backward_word_start (&start); end = start; gtk_text_iter_backward_word_start(&start); break; case ATK_TEXT_BOUNDARY_WORD_END: if (gtk_text_iter_inside_word (&start) && !gtk_text_iter_starts_word (&start)) gtk_text_iter_backward_word_start (&start); while (!gtk_text_iter_ends_word (&start)) { if (!gtk_text_iter_backward_char (&start)) break; } end = start; gtk_text_iter_backward_word_start(&start); while (!gtk_text_iter_ends_word (&start)) { if (!gtk_text_iter_backward_char (&start)) break; } break; case ATK_TEXT_BOUNDARY_SENTENCE_START: if (!gtk_text_iter_starts_sentence (&start)) gtk_text_iter_backward_sentence_start (&start); end = start; gtk_text_iter_backward_sentence_start (&start); break; case ATK_TEXT_BOUNDARY_SENTENCE_END: if (gtk_text_iter_inside_sentence (&start) && !gtk_text_iter_starts_sentence (&start)) gtk_text_iter_backward_sentence_start (&start); while (!gtk_text_iter_ends_sentence (&start)) { if (!gtk_text_iter_backward_char (&start)) break; } end = start; gtk_text_iter_backward_sentence_start (&start); while (!gtk_text_iter_ends_sentence (&start)) { if (!gtk_text_iter_backward_char (&start)) break; } break; case ATK_TEXT_BOUNDARY_LINE_START: if (layout == NULL) { line_number = gtk_text_iter_get_line (&start); if (line_number == 0) { gtk_text_buffer_get_iter_at_offset (buffer, &start, 0); } else { gtk_text_iter_backward_line (&start); gtk_text_iter_forward_line (&start); } end = start; gtk_text_iter_backward_line (&start); } else if GTK_IS_TEXT_VIEW (layout) { GtkTextView *view = GTK_TEXT_VIEW (layout); gtk_text_view_backward_display_line_start (view, &start); end = start; gtk_text_view_backward_display_line (view, &start); } else if (PANGO_IS_LAYOUT (layout)) get_pango_text_offsets (PANGO_LAYOUT (layout), buffer, function, boundary_type, offset, start_offset, end_offset, &start, &end); break; case ATK_TEXT_BOUNDARY_LINE_END: if (layout == NULL) { line_number = gtk_text_iter_get_line (&start); if (line_number == 0) { gtk_text_buffer_get_iter_at_offset (buffer, &start, 0); end = start; } else { gtk_text_iter_backward_line (&start); end = start; while (!gtk_text_iter_ends_line (&start)) { if (!gtk_text_iter_backward_char (&start)) break; } gtk_text_iter_forward_to_line_end (&end); } } else if GTK_IS_TEXT_VIEW (layout) { GtkTextView *view = GTK_TEXT_VIEW (layout); gtk_text_view_backward_display_line_start (view, &start); if (!gtk_text_iter_is_start (&start)) { gtk_text_view_backward_display_line (view, &start); end = start; if (!gtk_text_iter_is_start (&start)) { gtk_text_view_backward_display_line (view, &start); gtk_text_view_forward_display_line_end (view, &start); } gtk_text_view_forward_display_line_end (view, &end); } else { end = start; } } else if (PANGO_IS_LAYOUT (layout)) get_pango_text_offsets (PANGO_LAYOUT (layout), buffer, function, boundary_type, offset, start_offset, end_offset, &start, &end); break; }