Mercurial > audlegacy-plugins
comparison src/skins/ui_skinned_textbox.c @ 3036:b0f8da03187b
Fix multiple issues with vector fonts in the skinned interface.
author | John Lindgren <john.lindgren@tds.net> |
---|---|
date | Sat, 11 Apr 2009 08:26:51 -0400 |
parents | 6baa6eaf8290 |
children | 1ffcad5f406c |
comparison
equal
deleted
inserted
replaced
3035:13a0e4377c20 | 3036:b0f8da03187b |
---|---|
134 klass->clicked = NULL; | 134 klass->clicked = NULL; |
135 klass->double_clicked = NULL; | 135 klass->double_clicked = NULL; |
136 klass->right_clicked = NULL; | 136 klass->right_clicked = NULL; |
137 klass->scaled = ui_skinned_textbox_toggle_scaled; | 137 klass->scaled = ui_skinned_textbox_toggle_scaled; |
138 | 138 |
139 textbox_signals[CLICKED] = | 139 textbox_signals[CLICKED] = |
140 g_signal_new ("clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, | 140 g_signal_new ("clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, |
141 G_STRUCT_OFFSET (UiSkinnedTextboxClass, clicked), NULL, NULL, | 141 G_STRUCT_OFFSET (UiSkinnedTextboxClass, clicked), NULL, NULL, |
142 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); | 142 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); |
143 | 143 |
144 textbox_signals[DOUBLE_CLICKED] = | 144 textbox_signals[DOUBLE_CLICKED] = |
145 g_signal_new ("double-clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, | 145 g_signal_new ("double-clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, |
146 G_STRUCT_OFFSET (UiSkinnedTextboxClass, double_clicked), NULL, NULL, | 146 G_STRUCT_OFFSET (UiSkinnedTextboxClass, double_clicked), NULL, NULL, |
147 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); | 147 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); |
148 | 148 |
149 textbox_signals[RIGHT_CLICKED] = | 149 textbox_signals[RIGHT_CLICKED] = |
150 g_signal_new ("right-clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, | 150 g_signal_new ("right-clicked", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, |
151 G_STRUCT_OFFSET (UiSkinnedTextboxClass, right_clicked), NULL, NULL, | 151 G_STRUCT_OFFSET (UiSkinnedTextboxClass, right_clicked), NULL, NULL, |
152 g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); | 152 g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); |
153 | 153 |
154 textbox_signals[DOUBLED] = | 154 textbox_signals[DOUBLED] = |
155 g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, | 155 g_signal_new ("toggle-scaled", G_OBJECT_CLASS_TYPE (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, |
156 G_STRUCT_OFFSET (UiSkinnedTextboxClass, scaled), NULL, NULL, | 156 G_STRUCT_OFFSET (UiSkinnedTextboxClass, scaled), NULL, NULL, |
157 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); | 157 g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); |
158 | 158 |
159 g_type_class_add_private (gobject_class, sizeof (UiSkinnedTextboxPrivate)); | 159 g_type_class_add_private (gobject_class, sizeof (UiSkinnedTextboxPrivate)); |
451 GtkWidget *widget = GTK_WIDGET (textbox); | 451 GtkWidget *widget = GTK_WIDGET (textbox); |
452 UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox); | 452 UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox); |
453 | 453 |
454 priv->scaled = !priv->scaled; | 454 priv->scaled = !priv->scaled; |
455 | 455 |
456 gtk_widget_set_size_request(widget, textbox->width*(priv->scaled ? config.scale_factor : 1 ), | 456 gtk_widget_set_size_request(widget, textbox->width*(priv->scaled ? config.scale_factor : 1 ), |
457 textbox->height*(priv->scaled ? config.scale_factor : 1 )); | 457 textbox->height*(priv->scaled ? config.scale_factor : 1 )); |
458 | 458 |
459 gtk_widget_queue_draw(GTK_WIDGET(textbox)); | 459 gtk_widget_queue_draw(GTK_WIDGET(textbox)); |
460 } | 460 } |
461 | 461 |
486 UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox); | 486 UiSkinnedTextboxPrivate *priv = UI_SKINNED_TEXTBOX_GET_PRIVATE(textbox); |
487 | 487 |
488 gint ascent, descent; | 488 gint ascent, descent; |
489 | 489 |
490 g_return_if_fail(textbox != NULL); | 490 g_return_if_fail(textbox != NULL); |
491 gtk_widget_queue_resize (widget); | |
492 gtk_widget_queue_draw (widget); | |
491 | 493 |
492 if (priv->font) { | 494 if (priv->font) { |
493 pango_font_description_free(priv->font); | 495 pango_font_description_free(priv->font); |
494 priv->font = NULL; | 496 priv->font = NULL; |
495 } | 497 } |
517 | 519 |
518 | 520 |
519 if (priv->font == NULL) | 521 if (priv->font == NULL) |
520 return; | 522 return; |
521 | 523 |
522 textbox->height = priv->font_ascent; | 524 textbox->height = priv->font_ascent; /* The real height of the text is |
523 if (textbox->height > priv->nominal_height) | 525 ascent - descent (descent is negative), but we cut off descent pixels from |
524 textbox->y -= (textbox->height - priv->nominal_height) / 2; | 526 the top to make it fit better. See textbox_generate_xfont_pixmap. */ |
525 else | |
526 textbox->height = priv->nominal_height; | |
527 } | 527 } |
528 | 528 |
529 void ui_skinned_textbox_set_text(GtkWidget *widget, const gchar *text) { | 529 void ui_skinned_textbox_set_text(GtkWidget *widget, const gchar *text) { |
530 g_return_if_fail(text != NULL); | 530 g_return_if_fail(text != NULL); |
531 UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget); | 531 UiSkinnedTextbox *textbox = UI_SKINNED_TEXTBOX (widget); |
584 gdk_gc_set_foreground(gc, skin_get_color(aud_active_skin, SKIN_TEXTFG)); | 584 gdk_gc_set_foreground(gc, skin_get_color(aud_active_skin, SKIN_TEXTFG)); |
585 | 585 |
586 layout = gtk_widget_create_pango_layout(mainwin, pixmaptext); | 586 layout = gtk_widget_create_pango_layout(mainwin, pixmaptext); |
587 pango_layout_set_font_description(layout, priv->font); | 587 pango_layout_set_font_description(layout, priv->font); |
588 | 588 |
589 gdk_draw_layout(pixmap, gc, 0, (priv->font_descent / 2), layout); | 589 gdk_draw_layout (pixmap, gc, 0, priv->font_descent, layout); /* See |
590 explanation in ui_skinned_textbox_set_xfont. */ | |
590 g_object_unref(layout); | 591 g_object_unref(layout); |
591 | 592 |
592 g_object_unref(maskgc); | 593 g_object_unref(maskgc); |
593 | 594 |
594 gdk_gc_set_clip_mask(gc, mask); | 595 gdk_gc_set_clip_mask(gc, mask); |
734 textbox_handle_special_char(tmp, &x, &y); | 735 textbox_handle_special_char(tmp, &x, &y); |
735 | 736 |
736 skin_draw_pixbuf(GTK_WIDGET(textbox), aud_active_skin, | 737 skin_draw_pixbuf(GTK_WIDGET(textbox), aud_active_skin, |
737 priv->pixbuf, priv->skin_index, | 738 priv->pixbuf, priv->skin_index, |
738 x, y, i * aud_active_skin->properties.textbox_bitmap_font_width, 0, | 739 x, y, i * aud_active_skin->properties.textbox_bitmap_font_width, 0, |
739 aud_active_skin->properties.textbox_bitmap_font_width, | 740 aud_active_skin->properties.textbox_bitmap_font_width, |
740 aud_active_skin->properties.textbox_bitmap_font_height); | 741 aud_active_skin->properties.textbox_bitmap_font_height); |
741 } | 742 } |
742 g_free(stxt); | 743 g_free(stxt); |
743 g_free(pixmaptext); | 744 g_free(pixmaptext); |
744 } | 745 } |