diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/.cvsignore | 5 | ||||
-rw-r--r-- | test/Makefile.am | 22 | ||||
-rw-r--r-- | test/test-nautilus-font-picker.c | 55 | ||||
-rw-r--r-- | test/test-nautilus-font.c | 77 | ||||
-rw-r--r-- | test/test-nautilus-image.c | 766 | ||||
-rw-r--r-- | test/test-nautilus-label.c | 677 |
6 files changed, 1366 insertions, 236 deletions
diff --git a/test/.cvsignore b/test/.cvsignore index d0e86c6d2..d3cfac69f 100644 --- a/test/.cvsignore +++ b/test/.cvsignore @@ -4,10 +4,13 @@ *.lo Makefile Makefile.in +test-nautilus-font +test-nautilus-font-picker test-nautilus-image -test-nautilus-graphic +test-nautilus-label test-nautilus-mime-actions test-nautilus-mime-actions-set test-nautilus-password-dialog test-nautilus-preferences test-nautilus-widgets +font_test.png diff --git a/test/Makefile.am b/test/Makefile.am index a7700ad61..9ae10a6f0 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -12,6 +12,7 @@ INCLUDES =\ $(XML_CFLAGS) \ -DVERSION="\"$(VERSION)\"" \ -DGNOMELOCALEDIR=\""$(datadir)/locale"\" \ + -DNAUTILUS_DATADIR=\""$(datadir)/nautilus"\" \ $(NULL) LDADD =\ @@ -26,7 +27,10 @@ LDADD =\ $(NULL) noinst_PROGRAMS =\ + test-nautilus-font \ + test-nautilus-font-picker \ test-nautilus-image \ + test-nautilus-label \ test-nautilus-mime-actions \ test-nautilus-mime-actions-set \ test-nautilus-password-dialog \ @@ -34,18 +38,12 @@ noinst_PROGRAMS =\ test-nautilus-widgets \ $(NULL) +test_nautilus_font_SOURCES = test-nautilus-font.c +test_nautilus_font_picker_SOURCES = test-nautilus-font-picker.c +test_nautilus_image_SOURCES = test-nautilus-image.c +test_nautilus_label_SOURCES = test-nautilus-label.c test_nautilus_mime_actions_SOURCES = test-nautilus-mime-actions.c - test_nautilus_mime_actions_set_SOURCES = test-nautilus-mime-actions-set.c - -test_nautilus_widgets_SOURCES = test-nautilus-widgets.c - -test_nautilus_preferences_SOURCES = test-nautilus-preferences.c - -test_nautilus_image_SOURCES = test-nautilus-image.c - test_nautilus_password_dialog_SOURCES = test-nautilus-password-dialog.c - -EXTRA_DIST = \ - test-nautilus-mime-actions.c \ - $(NULL) +test_nautilus_preferences_SOURCES = test-nautilus-preferences.c +test_nautilus_widgets_SOURCES = test-nautilus-widgets.c diff --git a/test/test-nautilus-font-picker.c b/test/test-nautilus-font-picker.c new file mode 100644 index 000000000..cd1331912 --- /dev/null +++ b/test/test-nautilus-font-picker.c @@ -0,0 +1,55 @@ + +#include <config.h> + +#include <libnautilus-extensions/nautilus-font-picker.h> + +#include <gtk/gtk.h> + +static void +font_picker_changed_callback (GtkWidget *font_picker, gpointer user_data) +{ + char *family; + char *weight; + char *slant; + char *set_width; + + g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker)); + + family = nautilus_font_picker_get_selected_family (NAUTILUS_FONT_PICKER (font_picker)); + weight = nautilus_font_picker_get_selected_weight (NAUTILUS_FONT_PICKER (font_picker)); + slant = nautilus_font_picker_get_selected_slant (NAUTILUS_FONT_PICKER (font_picker)); + set_width = nautilus_font_picker_get_selected_set_width (NAUTILUS_FONT_PICKER (font_picker)); + + g_print ("%s (%s,%s,%s,%s)\n", __FUNCTION__, family, weight, slant, set_width); + + g_free (family); + g_free (weight); + g_free (slant); + g_free (set_width); +} + +int +main (int argc, char * argv[]) +{ + GtkWidget *window; + GtkWidget *font_picker; + + gnome_init ("foo", "bar", argc, argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + font_picker = nautilus_font_picker_new (); + + gtk_container_add (GTK_CONTAINER (window), font_picker); + + gtk_signal_connect (GTK_OBJECT (font_picker), + "selected_font_changed", + GTK_SIGNAL_FUNC (font_picker_changed_callback), + (gpointer) NULL); + + gtk_widget_show (font_picker); + gtk_widget_show (window); + gtk_main (); + + return 0; +} diff --git a/test/test-nautilus-font.c b/test/test-nautilus-font.c new file mode 100644 index 000000000..5a212b084 --- /dev/null +++ b/test/test-nautilus-font.c @@ -0,0 +1,77 @@ + +#include <config.h> + +#include <gtk/gtk.h> +#include <libnautilus-extensions/nautilus-background.h> +#include <libnautilus-extensions/nautilus-file-utilities.h> +#include <libnautilus-extensions/nautilus-font-factory.h> +#include <libnautilus-extensions/nautilus-glib-extensions.h> +#include <libnautilus-extensions/nautilus-gdk-extensions.h> +#include <libnautilus-extensions/nautilus-gtk-extensions.h> +#include <libnautilus-extensions/nautilus-gdk-pixbuf-extensions.h> +#include <libnautilus-extensions/nautilus-icon-factory.h> +#include <libnautilus-extensions/nautilus-string-list.h> +#include <libnautilus-extensions/nautilus-string-picker.h> +#include <libnautilus-extensions/nautilus-font-picker.h> +#include <libnautilus-extensions/nautilus-text-caption.h> + +#include <libnautilus-extensions/nautilus-scalable-font.h> +#include <libnautilus-extensions/nautilus-label.h> +#include <libnautilus-extensions/nautilus-image.h> + +int +main (int argc, char* argv[]) +{ + GdkPixbuf *pixbuf; + guint text_width; + guint text_height; + ArtIRect area; + NautilusScalableFont *font; + + const char *text = "Something"; + const guint font_width = 64; + const guint font_height = 64; + + gtk_init (&argc, &argv); + gdk_rgb_init (); + + font = NAUTILUS_SCALABLE_FONT (nautilus_scalable_font_new ("Nimbus Sans L", NULL, NULL, NULL)); + g_assert (font != NULL); + + nautilus_scalable_font_measure_text (font, + font_width, + font_height, + text, + &text_width, + &text_height); + + g_print ("size of '%s' = (%d,%d)\n", text, text_width, text_height); + + pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 512, 256); + g_assert (pixbuf != NULL); + + area.x0 = 0; + area.y0 = 0; + + area.x1 = 512; + area.y1 = 256; + + nautilus_scalable_font_draw_text (font, + pixbuf, + &area, + font_width, + font_height, + text, + NAUTILUS_RGB_COLOR_RED, + 255); + + g_assert (pixbuf != NULL); + + nautilus_gdk_pixbuf_save_to_file (pixbuf, "font_test.png"); + + g_print ("saving test png file to font_test.png\n"); + + gdk_pixbuf_unref (pixbuf); + + return 0; +} diff --git a/test/test-nautilus-image.c b/test/test-nautilus-image.c index 9773dec90..b45cb7510 100644 --- a/test/test-nautilus-image.c +++ b/test/test-nautilus-image.c @@ -2,356 +2,676 @@ #include <config.h> #include <gtk/gtk.h> -#include <libnautilus-extensions/nautilus-image.h> -#include <libnautilus-extensions/nautilus-icon-factory.h> +#include <libnautilus-extensions/nautilus-background.h> #include <libnautilus-extensions/nautilus-file-utilities.h> #include <libnautilus-extensions/nautilus-font-factory.h> +#include <libnautilus-extensions/nautilus-glib-extensions.h> +#include <libnautilus-extensions/nautilus-gdk-extensions.h> +#include <libnautilus-extensions/nautilus-gtk-extensions.h> +#include <libnautilus-extensions/nautilus-icon-factory.h> +#include <libnautilus-extensions/nautilus-string-list.h> +#include <libnautilus-extensions/nautilus-string-picker.h> +#include <libnautilus-extensions/nautilus-font-picker.h> +#include <libnautilus-extensions/nautilus-text-caption.h> +#include <libnautilus-extensions/nautilus-string.h> +#include <libgnomevfs/gnome-vfs-init.h> + +#include <libnautilus-extensions/nautilus-scalable-font.h> +#include <libnautilus-extensions/nautilus-label.h> +#include <libnautilus-extensions/nautilus-image.h> -static GdkPixbuf* -create_background (void) +static void +red_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) { - GdkPixbuf *background; - - background = gdk_pixbuf_new_from_file ("/gnome/share/nautilus/backgrounds/pale_coins.png"); + NautilusLabel *label; + guint32 color; - g_assert (background != NULL); + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - return background; + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); + + color = NAUTILUS_RGBA_COLOR_PACK ((guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_G (color), + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); } -static GdkPixbuf* -create_pixbuf (const char *name) +static void +green_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) { - char *icon_path; - GdkPixbuf *pixbuf = NULL; + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - g_assert (name != NULL); + label = NAUTILUS_LABEL (client_data); - icon_path = nautilus_pixmap_file (name); - g_assert (icon_path != NULL); + color = nautilus_label_get_text_color (label); - pixbuf = gdk_pixbuf_new_from_file (icon_path); + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} - g_assert (pixbuf != NULL); +static void +blue_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - g_free (icon_path); + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); - return pixbuf; + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + NAUTILUS_RGBA_COLOR_GET_G (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); } -static GtkWidget* -create_image (const char *name, GdkPixbuf *background) +static void +alpha_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) { - GtkWidget *image; - GdkPixbuf *pixbuf; + NautilusLabel *label; - g_assert (background != NULL); - - image = nautilus_image_new (); - g_assert (image != NULL); - - nautilus_image_set_background_type (NAUTILUS_IMAGE (image), NAUTILUS_IMAGE_BACKGROUND_PIXBUF); - nautilus_image_set_background_pixbuf (NAUTILUS_IMAGE (image), background); + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - if (name != NULL) - { - pixbuf = create_pixbuf (name); - g_assert (pixbuf != NULL); - - nautilus_image_set_pixbuf (NAUTILUS_IMAGE (image), pixbuf); - - gdk_pixbuf_unref (pixbuf); - } + label = NAUTILUS_LABEL (client_data); - return image; + nautilus_label_set_text_alpha (NAUTILUS_LABEL (label), (guchar) adjustment->value); } static void -alpha_scale_value_changed (GtkAdjustment *adjustment, gpointer client_data) +red_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) { - GList *image_list; + NautilusLabel *label; + guint32 color; g_return_if_fail (adjustment != NULL); g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - image_list = (GList *) client_data; - - while (image_list) - { - g_assert (image_list->data != NULL); - g_assert (NAUTILUS_IS_IMAGE (image_list->data)); - - nautilus_image_set_overall_alpha (NAUTILUS_IMAGE (image_list->data), (guchar) adjustment->value); + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); - image_list = image_list->next; - } + color = NAUTILUS_RGBA_COLOR_PACK ((guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_G (color), + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); } static void -red_color_value_changed (GtkAdjustment *adjustment, gpointer client_data) +green_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) { - GList *image_list; + NautilusLabel *label; + guint32 color; g_return_if_fail (adjustment != NULL); g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - image_list = (GList *) client_data; - - while (image_list) - { - NautilusImage *image; - guint32 color; + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); - g_assert (image_list->data != NULL); - g_assert (NAUTILUS_IS_IMAGE (image_list->data)); + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} - image = NAUTILUS_IMAGE (image_list->data); +static void +blue_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; - color = nautilus_image_get_background_color (image); + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - color = NAUTILUS_RGBA_COLOR_PACK ((guchar) adjustment->value, - NAUTILUS_RGBA_COLOR_GET_G (color), - NAUTILUS_RGBA_COLOR_GET_B (color), - NAUTILUS_RGBA_COLOR_GET_A (color)); - - nautilus_image_set_background_color (image, color); + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); - image_list = image_list->next; - } + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + NAUTILUS_RGBA_COLOR_GET_G (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); } static void -green_color_value_changed (GtkAdjustment *adjustment, gpointer client_data) +alpha_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) { - GList *image_list; + NautilusLabel *label; g_return_if_fail (adjustment != NULL); g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - image_list = (GList *) client_data; - - while (image_list) - { - NautilusImage *image; - guint32 color; + label = NAUTILUS_LABEL (client_data); - g_assert (image_list->data != NULL); - g_assert (NAUTILUS_IS_IMAGE (image_list->data)); + nautilus_label_set_text_alpha (NAUTILUS_LABEL (label), (guchar) adjustment->value); +} - image = NAUTILUS_IMAGE (image_list->data); +static void +font_size_changed_callback (NautilusStringPicker *string_picker, gpointer client_data) +{ + char *string; + int size; - color = nautilus_image_get_background_color (image); + g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), - (guchar) adjustment->value, - NAUTILUS_RGBA_COLOR_GET_B (color), - NAUTILUS_RGBA_COLOR_GET_A (color)); - - nautilus_image_set_background_color (image, color); + string = nautilus_string_picker_get_selected_string (string_picker); - image_list = image_list->next; + if (nautilus_eat_str_to_int (string, &size)) { + nautilus_label_set_font_size (NAUTILUS_LABEL (client_data), (guint) size); } + + g_free (string); } static void -blue_color_value_changed (GtkAdjustment *adjustment, gpointer client_data) +font_changed_callback (NautilusFontPicker *font_picker, gpointer client_data) { - GList *image_list; - - g_return_if_fail (adjustment != NULL); - g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); - g_return_if_fail (client_data != NULL); + NautilusScalableFont *font; + char *family; + char *weight; + char *slant; + char *set_width; - image_list = (GList *) client_data; + g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - while (image_list) - { - NautilusImage *image; - guint32 color; + family = nautilus_font_picker_get_selected_family (NAUTILUS_FONT_PICKER (font_picker)); + weight = nautilus_font_picker_get_selected_weight (NAUTILUS_FONT_PICKER (font_picker)); + slant = nautilus_font_picker_get_selected_slant (NAUTILUS_FONT_PICKER (font_picker)); + set_width = nautilus_font_picker_get_selected_set_width (NAUTILUS_FONT_PICKER (font_picker)); - g_assert (image_list->data != NULL); - g_assert (NAUTILUS_IS_IMAGE (image_list->data)); + g_print ("%s (%s,%s,%s,%s)\n", __FUNCTION__, family, weight, slant, set_width); - image = NAUTILUS_IMAGE (image_list->data); + font = NAUTILUS_SCALABLE_FONT (nautilus_scalable_font_new (family, weight, slant, set_width)); + g_assert (font != NULL); - color = nautilus_image_get_background_color (image); + nautilus_label_set_font (NAUTILUS_LABEL (client_data), font); - color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), - NAUTILUS_RGBA_COLOR_GET_G (color), - (guchar) adjustment->value, - NAUTILUS_RGBA_COLOR_GET_A (color)); - - nautilus_image_set_background_color (image, color); + g_free (family); + g_free (weight); + g_free (slant); + g_free (set_width); - image_list = image_list->next; - } + gtk_object_unref (GTK_OBJECT (font)); } static void -toggle_background_type_callback (GtkWidget *widget, gpointer client_data) +text_caption_changed_callback (NautilusTextCaption *text_caption, gpointer client_data) { - NautilusImage *image; + NautilusLabel *label; + char *text; - g_return_if_fail (widget != NULL); - g_return_if_fail (GTK_IS_BUTTON (widget)); - g_return_if_fail (client_data != NULL); - g_return_if_fail (NAUTILUS_IS_IMAGE (client_data)); + g_return_if_fail (NAUTILUS_IS_TEXT_CAPTION (text_caption)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - image = NAUTILUS_IMAGE (client_data); + text = nautilus_text_caption_get_text (text_caption); - if (nautilus_image_get_background_type (image) == NAUTILUS_IMAGE_BACKGROUND_PIXBUF) - { - nautilus_image_set_background_type (image, NAUTILUS_IMAGE_BACKGROUND_SOLID); - } - else - { - nautilus_image_set_background_type (image, NAUTILUS_IMAGE_BACKGROUND_PIXBUF); - } + label = NAUTILUS_LABEL (client_data); + + nautilus_label_set_text (NAUTILUS_LABEL (label), text); + + g_free (text); } static GtkWidget* -create_color_scale (guint num_colors, GtkSignalFunc callback, gpointer callback_data) +create_value_scale (guint min, + guint max, + guint value, + const char *color_spec, + GtkSignalFunc callback, + gpointer callback_data) { GtkAdjustment *adjustment; GtkWidget *scale; - g_assert (num_colors > 0); + g_assert (max > min); g_assert (callback > 0); - - adjustment = (GtkAdjustment *) gtk_adjustment_new (num_colors, - 0, - num_colors, + + adjustment = (GtkAdjustment *) gtk_adjustment_new (value, + min, + max, 1, - num_colors / 10, + (max - min) / 10, 0); scale = gtk_hscale_new (adjustment); - gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", callback, callback_data); + if (color_spec != NULL) { + nautilus_gtk_widget_set_background_color (scale, color_spec); + } - gtk_widget_set_usize (scale, 150, 0); + gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE); + gtk_widget_set_usize (scale, 150, 0); + + gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", callback, callback_data); + return scale; } -int -main (int argc, char* argv[]) +static GtkWidget* +create_value_scale_caption (const gchar *title, + guint min, + guint max, + guint value, + const char *color_spec, + GtkSignalFunc callback, + gpointer callback_data) { - GtkWidget *window; - GtkWidget *main_box; - GtkWidget *image_box; - GtkWidget *tool_box; - GtkWidget *toggle_background_type; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *scale; - GtkWidget *alpha_scale; + scale = create_value_scale (min, max, value, color_spec, callback, callback_data); + hbox = gtk_hbox_new (FALSE, 0); + label = gtk_label_new (title); + + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 4); + gtk_box_pack_end (GTK_BOX (hbox), scale, FALSE, FALSE, 4); - GtkWidget *red_scale; - GtkWidget *green_scale; - GtkWidget *blue_scale; + gtk_widget_show (label); + gtk_widget_show (scale); - GdkPixbuf *background; + return hbox; +} - GtkWidget *image1; - GtkWidget *image2; - GtkWidget *image3; +static GtkWidget* +create_color_picker_frame (const char *title, + GtkSignalFunc red_callback, + GtkSignalFunc green_callback, + GtkSignalFunc blue_callback, + GtkSignalFunc alpha_callback, + gpointer callback_data, + guint32 current_color) +{ + GtkWidget *red_scale; + GtkWidget *green_scale; + GtkWidget *blue_scale; + GtkWidget *alpha_scale; + GtkWidget *frame; + GtkWidget *vbox; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (red_callback != NULL, NULL); + g_return_val_if_fail (green_callback != NULL, NULL); + g_return_val_if_fail (blue_callback != NULL, NULL); + g_return_val_if_fail (alpha_callback != NULL, NULL); + + frame = gtk_frame_new (title); + + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); + + red_scale = create_value_scale_caption ("Red", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + "red", + red_callback, + callback_data); + + green_scale = create_value_scale_caption ("Green", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + "green", + green_callback, + callback_data); + + blue_scale = create_value_scale_caption ("Blue", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + "blue", + blue_callback, + callback_data); + + alpha_scale = create_value_scale_caption ("Alpha", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + NULL, + alpha_callback, + callback_data); - GtkWidget *background_image; + gtk_container_add (GTK_CONTAINER (frame), vbox); - GList *image_list = NULL; + gtk_box_pack_start (GTK_BOX (vbox), red_scale, TRUE, TRUE, 2); + gtk_box_pack_start (GTK_BOX (vbox), green_scale, TRUE, TRUE, 1); + gtk_box_pack_start (GTK_BOX (vbox), blue_scale, TRUE, TRUE, 1); + gtk_box_pack_end (GTK_BOX (vbox), alpha_scale, TRUE, TRUE, 2); - const char *file_name1 = "eazel-services-logo.png"; - const char *file_name2 = "eazel-services-logo-tile.png"; - const char *file_name3 = "eazel-services-logo-tile.png"; + gtk_widget_show_all (vbox); - gtk_init (&argc, &argv); - gdk_rgb_init (); + return frame; +} - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title (GTK_WINDOW (window), "Image Test"); - gtk_container_set_border_width (GTK_CONTAINER (window), 10); +static GtkWidget* +create_font_picker_frame (const char *title, + GtkSignalFunc changed_callback, + GtkSignalFunc size_changed_callback, + gpointer callback_data) +{ + GtkWidget *frame; + GtkWidget *hbox; + GtkWidget *font_picker; + GtkWidget *font_size_picker; + NautilusStringList *font_size_list; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (changed_callback != NULL, NULL); + g_return_val_if_fail (size_changed_callback != NULL, NULL); + + frame = gtk_frame_new (title); - main_box = gtk_vbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (window), main_box); + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); + + gtk_container_add (GTK_CONTAINER (frame), hbox); + + font_size_picker = nautilus_string_picker_new (); + nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_size_picker), FALSE); + nautilus_caption_set_title_label (NAUTILUS_CAPTION (font_size_picker), _("Size")); + + gtk_signal_connect (GTK_OBJECT (font_size_picker), "changed", size_changed_callback, callback_data); + + font_size_list = nautilus_string_list_new_from_tokens ("5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20," + "30,40,50,60,70,80,90,100,110,120,130,140," + "200,400,800", ","); + + nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (font_size_picker), font_size_list); + nautilus_string_list_free (font_size_list); + + font_picker = nautilus_font_picker_new (); + gtk_signal_connect (GTK_OBJECT (font_picker), "selected_font_changed", changed_callback, callback_data); + + gtk_box_pack_start (GTK_BOX (hbox), font_picker, TRUE, TRUE, 0); + gtk_box_pack_end (GTK_BOX (hbox), font_size_picker, FALSE, FALSE, 5); + + gtk_widget_show_all (hbox); + + return frame; +} + +static GtkWidget* +create_text_caption_frame (const char *title, + GtkSignalFunc changed_callback, + gpointer callback_data) +{ + GtkWidget *frame; + GtkWidget *text_caption; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (changed_callback != NULL, NULL); + + frame = gtk_frame_new (title); + + text_caption = nautilus_text_caption_new (); + gtk_container_set_border_width (GTK_CONTAINER (text_caption), 6); + + nautilus_caption_set_show_title (NAUTILUS_CAPTION (text_caption), FALSE); + nautilus_caption_set_title_label (NAUTILUS_CAPTION (text_caption), title); + + gtk_signal_connect (GTK_OBJECT (text_caption), "changed", changed_callback, callback_data); + + gtk_container_add (GTK_CONTAINER (frame), text_caption); + + gtk_widget_show (text_caption); + + return frame; +} + +static void +widget_set_background_image (GtkWidget *widget, const char *image_name) +{ + NautilusBackground *background; + char *background_uri; + + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (image_name != NULL); + + background = nautilus_get_widget_background (widget); + + background_uri = g_strdup_printf ("file://%s/backgrounds/%s", NAUTILUS_DATADIR, image_name); + + nautilus_background_reset (background); + nautilus_background_set_image_uri (background, background_uri); + + g_free (background_uri); +} + +static void +widget_set_background_color (GtkWidget *widget, const char *color) +{ + NautilusBackground *background; - background = create_background (); + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (color != NULL); - image1 = create_image (file_name1, background); - image2 = create_image (file_name2, background); - image3 = create_image (file_name3, background); - background_image = create_image (NULL, background); + background = nautilus_get_widget_background (widget); + + nautilus_background_reset (background); + nautilus_background_set_color (background, color); +} - image_list = g_list_append (image_list, image1); - image_list = g_list_append (image_list, image2); - image_list = g_list_append (image_list, image3); - image_list = g_list_append (image_list, background_image); +static void +widget_set_background_reset (GtkWidget *widget) +{ + NautilusBackground *background; - nautilus_image_set_placement_type (NAUTILUS_IMAGE (image2), NAUTILUS_IMAGE_PLACEMENT_TILE); - nautilus_image_set_placement_type (NAUTILUS_IMAGE (image3), NAUTILUS_IMAGE_PLACEMENT_TILE); + g_return_if_fail (GTK_IS_WIDGET (widget)); - { - GdkFont *font; + background = nautilus_get_widget_background (widget); - font = nautilus_font_factory_get_font_by_family ("helvetica", 20); + nautilus_background_reset (background); +} - nautilus_image_set_label_text (NAUTILUS_IMAGE (image3), "Welcome Back, Arlo!"); - nautilus_image_set_label_font (NAUTILUS_IMAGE (image3), font); +static void +background_changed_callback (NautilusStringPicker *string_picker, gpointer client_data) +{ + char *string; + + g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); - gdk_font_unref (font); + string = nautilus_string_picker_get_selected_string (string_picker); - nautilus_image_set_extra_width (NAUTILUS_IMAGE (image3), 8); - nautilus_image_set_right_offset (NAUTILUS_IMAGE (image3), 8); - nautilus_image_set_top_offset (NAUTILUS_IMAGE (image3), 3); + if (nautilus_str_has_prefix (string, "Image - ")) { + widget_set_background_image (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data)), + string + strlen ("Image - ")); + } + else if (nautilus_str_has_prefix (string, "Gradient - ")) { + widget_set_background_color (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data)), + string + strlen ("Gradient - ")); + } + else if (nautilus_str_has_prefix (string, "Solid - ")) { + widget_set_background_color (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data)), + string + strlen ("Solid - ")); + } + else if (nautilus_str_has_prefix (string, "Reset")) { + widget_set_background_reset (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data))); } + + g_free (string); +} + +static GtkWidget* +create_background_frame (const char *title, + GtkSignalFunc background_changed_callback, + gpointer callback_data) +{ + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *background_picker; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (background_changed_callback != NULL, NULL); - image_box = gtk_hbox_new (FALSE, 0); - tool_box = gtk_hbox_new (FALSE, 0); + vbox = gtk_vbox_new (FALSE, 0); + frame = gtk_frame_new (title); - gtk_box_pack_start (GTK_BOX (main_box), image_box, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (main_box), background_image, TRUE, TRUE, 0); - gtk_box_pack_end (GTK_BOX (main_box), tool_box, FALSE, FALSE, 10); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); + gtk_container_add (GTK_CONTAINER (frame), vbox); - gtk_box_pack_start (GTK_BOX (image_box), image1, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (image_box), image2, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (image_box), image3, FALSE, FALSE, 0); + background_picker = nautilus_string_picker_new (); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - pale_coins.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - bubbles.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - irish_spring.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - white_ribs.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "-----------------------"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Gradient - rgb:bbbb/bbbb/eeee-rgb:ffff/ffff/ffff:h"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Gradient - rgb:bbbb/bbbb/eeee-rgb:ffff/ffff/ffff"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "-----------------------"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Solid - rgb:bbbb/bbbb/eeee"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "-----------------------"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Reset"); - alpha_scale = create_color_scale (255, alpha_scale_value_changed, image_list); + nautilus_caption_set_show_title (NAUTILUS_CAPTION (background_picker), FALSE); + + gtk_signal_connect (GTK_OBJECT (background_picker), "changed", background_changed_callback, callback_data); + + gtk_box_pack_start (GTK_BOX (vbox), background_picker, FALSE, FALSE, 0); + + gtk_widget_show_all (vbox); + + return frame; +} - toggle_background_type = gtk_button_new_with_label ("Toggle Background Type"); - red_scale = create_color_scale (255, red_color_value_changed, image_list); - green_scale = create_color_scale (255, green_color_value_changed, image_list); - blue_scale = create_color_scale (255, blue_color_value_changed, image_list); +int +main (int argc, char* argv[]) +{ + GtkWidget *window; + GtkWidget *main_box; + GtkWidget *bottom_box; + GtkWidget *tool_box1; + GtkWidget *tool_box2; + GtkWidget *tool_box3; + GtkWidget *color_tool_box; + GtkWidget *label; + GtkWidget *label_color_picker_frame; + GtkWidget *background_color_picker_frame; + GtkWidget *font_picker_frame; + GtkWidget *text_caption_frame; + GtkWidget *background_frame; + + gtk_init (&argc, &argv); + gdk_rgb_init (); + gnome_vfs_init (); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Label Test"); + gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE); + gtk_container_set_border_width (GTK_CONTAINER (window), 10); + + main_box = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (window), main_box); + + label = nautilus_label_new (); + + bottom_box = gtk_vbox_new (FALSE, 4); + + tool_box1 = gtk_hbox_new (FALSE, 0); + tool_box2 = gtk_hbox_new (FALSE, 0); + tool_box3 = gtk_hbox_new (FALSE, 0); + + color_tool_box = gtk_hbox_new (FALSE, 0); + + gtk_box_pack_start (GTK_BOX (bottom_box), tool_box1, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (bottom_box), tool_box2, TRUE, TRUE, 0); + gtk_box_pack_end (GTK_BOX (bottom_box), tool_box3, TRUE, TRUE, 10); + + nautilus_label_set_text (NAUTILUS_LABEL (label), "Label that doesn't suck\nFoo\nBar"); + + gtk_box_pack_start (GTK_BOX (main_box), label, TRUE, TRUE, 10); + gtk_box_pack_end (GTK_BOX (main_box), bottom_box, TRUE, TRUE, 10); + + widget_set_background_image (nautilus_gtk_widget_find_windowed_ancestor (label), "pale_coins.png"); - gtk_box_pack_start (GTK_BOX (tool_box), alpha_scale, FALSE, FALSE, 5); - gtk_box_pack_start (GTK_BOX (tool_box), toggle_background_type, FALSE, FALSE, 5); - gtk_box_pack_start (GTK_BOX (tool_box), red_scale, FALSE, FALSE, 5); - gtk_box_pack_start (GTK_BOX (tool_box), green_scale, FALSE, FALSE, 5); - gtk_box_pack_start (GTK_BOX (tool_box), blue_scale, FALSE, FALSE, 5); - - gtk_signal_connect (GTK_OBJECT (toggle_background_type), - "clicked", - GTK_SIGNAL_FUNC (toggle_background_type_callback), - (gpointer) image1); - - gtk_signal_connect (GTK_OBJECT (toggle_background_type), - "clicked", - GTK_SIGNAL_FUNC (toggle_background_type_callback), - (gpointer) image2); - gtk_signal_connect (GTK_OBJECT (toggle_background_type), - "clicked", - GTK_SIGNAL_FUNC (toggle_background_type_callback), - (gpointer) image3); - - gtk_signal_connect (GTK_OBJECT (toggle_background_type), - "clicked", - GTK_SIGNAL_FUNC (toggle_background_type_callback), - (gpointer) background_image); + label_color_picker_frame = create_color_picker_frame ("Label Color", + red_label_color_value_changed_callback, + green_label_color_value_changed_callback, + blue_label_color_value_changed_callback, + alpha_label_color_value_changed_callback, + label, + nautilus_label_get_text_color (NAUTILUS_LABEL (label))); + + background_color_picker_frame = create_color_picker_frame ("Background Color", + red_background_color_value_changed_callback, + green_background_color_value_changed_callback, + blue_background_color_value_changed_callback, + alpha_background_color_value_changed_callback, + label, + nautilus_label_get_text_color (NAUTILUS_LABEL (label))); + + font_picker_frame = create_font_picker_frame ("Font", + font_changed_callback, + font_size_changed_callback, + label); + + text_caption_frame = create_text_caption_frame ("Text", + text_caption_changed_callback, + label); + + background_frame = create_background_frame ("Background", + background_changed_callback, + label); + + gtk_box_pack_start (GTK_BOX (color_tool_box), label_color_picker_frame, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (color_tool_box), background_frame, FALSE, FALSE, 0); + gtk_box_pack_end (GTK_BOX (color_tool_box), background_color_picker_frame, FALSE, FALSE, 0); + + gtk_box_pack_start (GTK_BOX (tool_box1), color_tool_box, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (tool_box2), font_picker_frame, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (tool_box3), text_caption_frame, TRUE, TRUE, 0); gtk_widget_show_all (window); gtk_main (); + + gnome_vfs_shutdown (); return 0; } diff --git a/test/test-nautilus-label.c b/test/test-nautilus-label.c new file mode 100644 index 000000000..b45cb7510 --- /dev/null +++ b/test/test-nautilus-label.c @@ -0,0 +1,677 @@ + +#include <config.h> + +#include <gtk/gtk.h> +#include <libnautilus-extensions/nautilus-background.h> +#include <libnautilus-extensions/nautilus-file-utilities.h> +#include <libnautilus-extensions/nautilus-font-factory.h> +#include <libnautilus-extensions/nautilus-glib-extensions.h> +#include <libnautilus-extensions/nautilus-gdk-extensions.h> +#include <libnautilus-extensions/nautilus-gtk-extensions.h> +#include <libnautilus-extensions/nautilus-icon-factory.h> +#include <libnautilus-extensions/nautilus-string-list.h> +#include <libnautilus-extensions/nautilus-string-picker.h> +#include <libnautilus-extensions/nautilus-font-picker.h> +#include <libnautilus-extensions/nautilus-text-caption.h> +#include <libnautilus-extensions/nautilus-string.h> +#include <libgnomevfs/gnome-vfs-init.h> + +#include <libnautilus-extensions/nautilus-scalable-font.h> +#include <libnautilus-extensions/nautilus-label.h> +#include <libnautilus-extensions/nautilus-image.h> + +static void +red_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); + + color = NAUTILUS_RGBA_COLOR_PACK ((guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_G (color), + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} + +static void +green_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); + + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} + +static void +blue_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); + + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + NAUTILUS_RGBA_COLOR_GET_G (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} + +static void +alpha_label_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + nautilus_label_set_text_alpha (NAUTILUS_LABEL (label), (guchar) adjustment->value); +} + +static void +red_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); + + color = NAUTILUS_RGBA_COLOR_PACK ((guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_G (color), + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} + +static void +green_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); + + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_B (color), + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} + +static void +blue_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + guint32 color; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + color = nautilus_label_get_text_color (label); + + color = NAUTILUS_RGBA_COLOR_PACK (NAUTILUS_RGBA_COLOR_GET_R (color), + NAUTILUS_RGBA_COLOR_GET_G (color), + (guchar) adjustment->value, + NAUTILUS_RGBA_COLOR_GET_A (color)); + + nautilus_label_set_text_color (label, color); +} + +static void +alpha_background_color_value_changed_callback (GtkAdjustment *adjustment, gpointer client_data) +{ + NautilusLabel *label; + + g_return_if_fail (adjustment != NULL); + g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); + g_return_if_fail (client_data != NULL); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + label = NAUTILUS_LABEL (client_data); + + nautilus_label_set_text_alpha (NAUTILUS_LABEL (label), (guchar) adjustment->value); +} + +static void +font_size_changed_callback (NautilusStringPicker *string_picker, gpointer client_data) +{ + char *string; + int size; + + g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + string = nautilus_string_picker_get_selected_string (string_picker); + + if (nautilus_eat_str_to_int (string, &size)) { + nautilus_label_set_font_size (NAUTILUS_LABEL (client_data), (guint) size); + } + + g_free (string); +} + +static void +font_changed_callback (NautilusFontPicker *font_picker, gpointer client_data) +{ + NautilusScalableFont *font; + char *family; + char *weight; + char *slant; + char *set_width; + + g_return_if_fail (NAUTILUS_IS_FONT_PICKER (font_picker)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + family = nautilus_font_picker_get_selected_family (NAUTILUS_FONT_PICKER (font_picker)); + weight = nautilus_font_picker_get_selected_weight (NAUTILUS_FONT_PICKER (font_picker)); + slant = nautilus_font_picker_get_selected_slant (NAUTILUS_FONT_PICKER (font_picker)); + set_width = nautilus_font_picker_get_selected_set_width (NAUTILUS_FONT_PICKER (font_picker)); + + g_print ("%s (%s,%s,%s,%s)\n", __FUNCTION__, family, weight, slant, set_width); + + font = NAUTILUS_SCALABLE_FONT (nautilus_scalable_font_new (family, weight, slant, set_width)); + g_assert (font != NULL); + + nautilus_label_set_font (NAUTILUS_LABEL (client_data), font); + + g_free (family); + g_free (weight); + g_free (slant); + g_free (set_width); + + gtk_object_unref (GTK_OBJECT (font)); +} + +static void +text_caption_changed_callback (NautilusTextCaption *text_caption, gpointer client_data) +{ + NautilusLabel *label; + char *text; + + g_return_if_fail (NAUTILUS_IS_TEXT_CAPTION (text_caption)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + text = nautilus_text_caption_get_text (text_caption); + + label = NAUTILUS_LABEL (client_data); + + nautilus_label_set_text (NAUTILUS_LABEL (label), text); + + g_free (text); +} + +static GtkWidget* +create_value_scale (guint min, + guint max, + guint value, + const char *color_spec, + GtkSignalFunc callback, + gpointer callback_data) +{ + GtkAdjustment *adjustment; + GtkWidget *scale; + + g_assert (max > min); + g_assert (callback > 0); + + adjustment = (GtkAdjustment *) gtk_adjustment_new (value, + min, + max, + 1, + (max - min) / 10, + 0); + + scale = gtk_hscale_new (adjustment); + + if (color_spec != NULL) { + nautilus_gtk_widget_set_background_color (scale, color_spec); + } + + gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE); + + gtk_widget_set_usize (scale, 150, 0); + + gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed", callback, callback_data); + + return scale; +} + +static GtkWidget* +create_value_scale_caption (const gchar *title, + guint min, + guint max, + guint value, + const char *color_spec, + GtkSignalFunc callback, + gpointer callback_data) +{ + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *scale; + + scale = create_value_scale (min, max, value, color_spec, callback, callback_data); + hbox = gtk_hbox_new (FALSE, 0); + label = gtk_label_new (title); + + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 4); + gtk_box_pack_end (GTK_BOX (hbox), scale, FALSE, FALSE, 4); + + gtk_widget_show (label); + gtk_widget_show (scale); + + return hbox; +} + +static GtkWidget* +create_color_picker_frame (const char *title, + GtkSignalFunc red_callback, + GtkSignalFunc green_callback, + GtkSignalFunc blue_callback, + GtkSignalFunc alpha_callback, + gpointer callback_data, + guint32 current_color) +{ + GtkWidget *red_scale; + GtkWidget *green_scale; + GtkWidget *blue_scale; + GtkWidget *alpha_scale; + GtkWidget *frame; + GtkWidget *vbox; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (red_callback != NULL, NULL); + g_return_val_if_fail (green_callback != NULL, NULL); + g_return_val_if_fail (blue_callback != NULL, NULL); + g_return_val_if_fail (alpha_callback != NULL, NULL); + + frame = gtk_frame_new (title); + + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); + + red_scale = create_value_scale_caption ("Red", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + "red", + red_callback, + callback_data); + + green_scale = create_value_scale_caption ("Green", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + "green", + green_callback, + callback_data); + + blue_scale = create_value_scale_caption ("Blue", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + "blue", + blue_callback, + callback_data); + + alpha_scale = create_value_scale_caption ("Alpha", + 0, + 255, + NAUTILUS_RGBA_COLOR_GET_R (current_color), + NULL, + alpha_callback, + callback_data); + + gtk_container_add (GTK_CONTAINER (frame), vbox); + + gtk_box_pack_start (GTK_BOX (vbox), red_scale, TRUE, TRUE, 2); + gtk_box_pack_start (GTK_BOX (vbox), green_scale, TRUE, TRUE, 1); + gtk_box_pack_start (GTK_BOX (vbox), blue_scale, TRUE, TRUE, 1); + gtk_box_pack_end (GTK_BOX (vbox), alpha_scale, TRUE, TRUE, 2); + + gtk_widget_show_all (vbox); + + return frame; +} + +static GtkWidget* +create_font_picker_frame (const char *title, + GtkSignalFunc changed_callback, + GtkSignalFunc size_changed_callback, + gpointer callback_data) +{ + GtkWidget *frame; + GtkWidget *hbox; + GtkWidget *font_picker; + GtkWidget *font_size_picker; + NautilusStringList *font_size_list; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (changed_callback != NULL, NULL); + g_return_val_if_fail (size_changed_callback != NULL, NULL); + + frame = gtk_frame_new (title); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 6); + + gtk_container_add (GTK_CONTAINER (frame), hbox); + + font_size_picker = nautilus_string_picker_new (); + nautilus_caption_set_show_title (NAUTILUS_CAPTION (font_size_picker), FALSE); + nautilus_caption_set_title_label (NAUTILUS_CAPTION (font_size_picker), _("Size")); + + gtk_signal_connect (GTK_OBJECT (font_size_picker), "changed", size_changed_callback, callback_data); + + font_size_list = nautilus_string_list_new_from_tokens ("5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20," + "30,40,50,60,70,80,90,100,110,120,130,140," + "200,400,800", ","); + + nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (font_size_picker), font_size_list); + nautilus_string_list_free (font_size_list); + + font_picker = nautilus_font_picker_new (); + gtk_signal_connect (GTK_OBJECT (font_picker), "selected_font_changed", changed_callback, callback_data); + + gtk_box_pack_start (GTK_BOX (hbox), font_picker, TRUE, TRUE, 0); + gtk_box_pack_end (GTK_BOX (hbox), font_size_picker, FALSE, FALSE, 5); + + gtk_widget_show_all (hbox); + + return frame; +} + +static GtkWidget* +create_text_caption_frame (const char *title, + GtkSignalFunc changed_callback, + gpointer callback_data) +{ + GtkWidget *frame; + GtkWidget *text_caption; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (changed_callback != NULL, NULL); + + frame = gtk_frame_new (title); + + text_caption = nautilus_text_caption_new (); + gtk_container_set_border_width (GTK_CONTAINER (text_caption), 6); + + nautilus_caption_set_show_title (NAUTILUS_CAPTION (text_caption), FALSE); + nautilus_caption_set_title_label (NAUTILUS_CAPTION (text_caption), title); + + gtk_signal_connect (GTK_OBJECT (text_caption), "changed", changed_callback, callback_data); + + gtk_container_add (GTK_CONTAINER (frame), text_caption); + + gtk_widget_show (text_caption); + + return frame; +} + +static void +widget_set_background_image (GtkWidget *widget, const char *image_name) +{ + NautilusBackground *background; + char *background_uri; + + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (image_name != NULL); + + background = nautilus_get_widget_background (widget); + + background_uri = g_strdup_printf ("file://%s/backgrounds/%s", NAUTILUS_DATADIR, image_name); + + nautilus_background_reset (background); + nautilus_background_set_image_uri (background, background_uri); + + g_free (background_uri); +} + +static void +widget_set_background_color (GtkWidget *widget, const char *color) +{ + NautilusBackground *background; + + g_return_if_fail (GTK_IS_WIDGET (widget)); + g_return_if_fail (color != NULL); + + background = nautilus_get_widget_background (widget); + + nautilus_background_reset (background); + nautilus_background_set_color (background, color); +} + +static void +widget_set_background_reset (GtkWidget *widget) +{ + NautilusBackground *background; + + g_return_if_fail (GTK_IS_WIDGET (widget)); + + background = nautilus_get_widget_background (widget); + + nautilus_background_reset (background); +} + +static void +background_changed_callback (NautilusStringPicker *string_picker, gpointer client_data) +{ + char *string; + + g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); + g_return_if_fail (NAUTILUS_IS_LABEL (client_data)); + + string = nautilus_string_picker_get_selected_string (string_picker); + + if (nautilus_str_has_prefix (string, "Image - ")) { + widget_set_background_image (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data)), + string + strlen ("Image - ")); + } + else if (nautilus_str_has_prefix (string, "Gradient - ")) { + widget_set_background_color (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data)), + string + strlen ("Gradient - ")); + } + else if (nautilus_str_has_prefix (string, "Solid - ")) { + widget_set_background_color (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data)), + string + strlen ("Solid - ")); + } + else if (nautilus_str_has_prefix (string, "Reset")) { + widget_set_background_reset (nautilus_gtk_widget_find_windowed_ancestor (GTK_WIDGET (client_data))); + } + + g_free (string); +} + +static GtkWidget* +create_background_frame (const char *title, + GtkSignalFunc background_changed_callback, + gpointer callback_data) +{ + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *background_picker; + + g_return_val_if_fail (title != NULL, NULL); + g_return_val_if_fail (background_changed_callback != NULL, NULL); + + vbox = gtk_vbox_new (FALSE, 0); + frame = gtk_frame_new (title); + + gtk_container_set_border_width (GTK_CONTAINER (vbox), 2); + gtk_container_add (GTK_CONTAINER (frame), vbox); + + background_picker = nautilus_string_picker_new (); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - pale_coins.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - bubbles.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - irish_spring.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Image - white_ribs.png"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "-----------------------"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Gradient - rgb:bbbb/bbbb/eeee-rgb:ffff/ffff/ffff:h"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Gradient - rgb:bbbb/bbbb/eeee-rgb:ffff/ffff/ffff"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "-----------------------"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Solid - rgb:bbbb/bbbb/eeee"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "-----------------------"); + nautilus_string_picker_insert_string (NAUTILUS_STRING_PICKER (background_picker), "Reset"); + + nautilus_caption_set_show_title (NAUTILUS_CAPTION (background_picker), FALSE); + + gtk_signal_connect (GTK_OBJECT (background_picker), "changed", background_changed_callback, callback_data); + + gtk_box_pack_start (GTK_BOX (vbox), background_picker, FALSE, FALSE, 0); + + gtk_widget_show_all (vbox); + + return frame; +} + +int +main (int argc, char* argv[]) +{ + GtkWidget *window; + GtkWidget *main_box; + GtkWidget *bottom_box; + GtkWidget *tool_box1; + GtkWidget *tool_box2; + GtkWidget *tool_box3; + GtkWidget *color_tool_box; + GtkWidget *label; + GtkWidget *label_color_picker_frame; + GtkWidget *background_color_picker_frame; + GtkWidget *font_picker_frame; + GtkWidget *text_caption_frame; + GtkWidget *background_frame; + + gtk_init (&argc, &argv); + gdk_rgb_init (); + gnome_vfs_init (); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Label Test"); + gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE); + gtk_container_set_border_width (GTK_CONTAINER (window), 10); + + main_box = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (window), main_box); + + label = nautilus_label_new (); + + bottom_box = gtk_vbox_new (FALSE, 4); + + tool_box1 = gtk_hbox_new (FALSE, 0); + tool_box2 = gtk_hbox_new (FALSE, 0); + tool_box3 = gtk_hbox_new (FALSE, 0); + + color_tool_box = gtk_hbox_new (FALSE, 0); + + gtk_box_pack_start (GTK_BOX (bottom_box), tool_box1, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (bottom_box), tool_box2, TRUE, TRUE, 0); + gtk_box_pack_end (GTK_BOX (bottom_box), tool_box3, TRUE, TRUE, 10); + + nautilus_label_set_text (NAUTILUS_LABEL (label), "Label that doesn't suck\nFoo\nBar"); + + gtk_box_pack_start (GTK_BOX (main_box), label, TRUE, TRUE, 10); + gtk_box_pack_end (GTK_BOX (main_box), bottom_box, TRUE, TRUE, 10); + + widget_set_background_image (nautilus_gtk_widget_find_windowed_ancestor (label), "pale_coins.png"); + + label_color_picker_frame = create_color_picker_frame ("Label Color", + red_label_color_value_changed_callback, + green_label_color_value_changed_callback, + blue_label_color_value_changed_callback, + alpha_label_color_value_changed_callback, + label, + nautilus_label_get_text_color (NAUTILUS_LABEL (label))); + + background_color_picker_frame = create_color_picker_frame ("Background Color", + red_background_color_value_changed_callback, + green_background_color_value_changed_callback, + blue_background_color_value_changed_callback, + alpha_background_color_value_changed_callback, + label, + nautilus_label_get_text_color (NAUTILUS_LABEL (label))); + + font_picker_frame = create_font_picker_frame ("Font", + font_changed_callback, + font_size_changed_callback, + label); + + text_caption_frame = create_text_caption_frame ("Text", + text_caption_changed_callback, + label); + + background_frame = create_background_frame ("Background", + background_changed_callback, + label); + + gtk_box_pack_start (GTK_BOX (color_tool_box), label_color_picker_frame, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (color_tool_box), background_frame, FALSE, FALSE, 0); + gtk_box_pack_end (GTK_BOX (color_tool_box), background_color_picker_frame, FALSE, FALSE, 0); + + gtk_box_pack_start (GTK_BOX (tool_box1), color_tool_box, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (tool_box2), font_picker_frame, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (tool_box3), text_caption_frame, TRUE, TRUE, 0); + + gtk_widget_show_all (window); + + gtk_main (); + + gnome_vfs_shutdown (); + + return 0; +} |