diff --git a/devel-docs/tools/Makefile.am b/devel-docs/tools/Makefile.am index 45548520b2..9668a44d04 100644 --- a/devel-docs/tools/Makefile.am +++ b/devel-docs/tools/Makefile.am @@ -15,9 +15,9 @@ libgimpwidgets = $(top_builddir)/libgimpwidgets/libgimpwidgets-$(GIMP_API_VERSIO AM_CPPFLAGS = \ - $(GTK_CFLAGS) \ - -DTOP_SRCDIR=\"$(top_srcdir)\" \ + -DTOP_SRCDIR=\"$(top_srcdir)\" \ -I$(top_srcdir) \ + $(GTK_CFLAGS) \ $(GEGL_CFLAGS) AM_LDFLAGS = $(mwindows) @@ -43,8 +43,7 @@ doc_shooter_LDADD = \ $(libgimpmath) \ $(libgimpcolor) \ $(libgimpbase) \ - $(GTK_LIBS) \ - $(X_LIBS) -lX11 -lXext + $(GTK_LIBS) EXTRA_PROGRAMS = doc-shooter diff --git a/devel-docs/tools/shadow.c b/devel-docs/tools/shadow.c index cf292c9fac..1ea95bd54d 100644 --- a/devel-docs/tools/shadow.c +++ b/devel-docs/tools/shadow.c @@ -98,8 +98,8 @@ create_shadow (GdkPixbuf *src) src_y = -(BLUR_RADIUS + SHADOW_OFFSET) + y - (filter->size >> 1) + i; src_x = -(BLUR_RADIUS + SHADOW_OFFSET) + x - (filter->size >> 1) + j; - if (src_y < 0 || src_y > gdk_pixbuf_get_height (src) || - src_x < 0 || src_x > gdk_pixbuf_get_width (src)) + if (src_y < 0 || src_y >= gdk_pixbuf_get_height (src) || + src_x < 0 || src_x >= gdk_pixbuf_get_width (src)) continue; sumr += src_pixels [src_y * src_rowstride + diff --git a/devel-docs/tools/shooter.c b/devel-docs/tools/shooter.c index efe2cf0012..b273ee9907 100644 --- a/devel-docs/tools/shooter.c +++ b/devel-docs/tools/shooter.c @@ -1,18 +1,9 @@ #include "config.h" -#include - -#ifdef HAVE_UNISTD_H -#include -#endif - #include -#include #include -#include - #include "libgimpbase/gimpbase.h" #include "libgimpconfig/gimpconfig.h" #include "libgimpmodule/gimpmodule.h" @@ -24,30 +15,6 @@ #include "widgets.h" -static Window -find_toplevel_window (Display *display, - Window xid) -{ - Window root, parent, *children; - guint nchildren; - - do - { - if (XQueryTree (display, xid, - &root, &parent, &children, &nchildren) == 0) - { - g_warning ("Couldn't find window manager window"); - return 0; - } - - if (root == parent) - return xid; - - xid = parent; - } - while (TRUE); -} - static GdkPixbuf * add_border_to_shot (GdkPixbuf *pixbuf) { @@ -70,125 +37,48 @@ add_border_to_shot (GdkPixbuf *pixbuf) } static GdkPixbuf * -remove_shaped_area (GdkPixbuf *pixbuf, - Window window) +take_window_shot (GtkWidget *widget) { - Display *display; - GdkPixbuf *retval; - XRectangle *rectangles; - gint rectangle_count, rectangle_order; - gint i; + GtkAllocation allocation; + cairo_surface_t *surface; + cairo_t *cr; + GdkPixbuf *pixbuf; - retval = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, - gdk_pixbuf_get_width (pixbuf), - gdk_pixbuf_get_height (pixbuf)); + allocation.x = 0; + allocation.y = 0; + gtk_widget_get_preferred_width (widget, NULL, &allocation.width); + gtk_widget_get_preferred_height (widget, NULL, &allocation.height); - gdk_pixbuf_fill (retval, 0); + gtk_widget_size_allocate (widget, &allocation); + gtk_widget_get_allocation (widget, &allocation); - display = gdk_x11_display_get_xdisplay (gdk_display_get_default ()); + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, + allocation.width, + allocation.height); + cr = cairo_create (surface); + gtk_widget_draw (widget, cr); + cairo_destroy (cr); - rectangles = XShapeGetRectangles (display, window, ShapeBounding, - &rectangle_count, &rectangle_order); + pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0, + allocation.width, + allocation.height); - for (i = 0; i < rectangle_count; i++) + cairo_surface_destroy (surface); + + if (GTK_IS_OFFSCREEN_WINDOW (widget)) { - int y, x; + GdkPixbuf *tmp; - for (y = rectangles[i].y; - y < rectangles[i].y + rectangles[i].height; - y++) - { - const guchar *src_pixels; - guchar *dest_pixels; + tmp = add_border_to_shot (pixbuf); - src_pixels = gdk_pixbuf_get_pixels (pixbuf) + - y * gdk_pixbuf_get_rowstride (pixbuf) + - rectangles[i].x * (gdk_pixbuf_get_has_alpha (pixbuf) ? 4 : 3); + g_object_unref (pixbuf); - dest_pixels = gdk_pixbuf_get_pixels (retval) + - y * gdk_pixbuf_get_rowstride (retval) + - rectangles[i].x * 4; + pixbuf = create_shadowed_pixbuf (tmp); - for (x = rectangles[i].x; - x < rectangles[i].x + rectangles[i].width; - x++) - { - *dest_pixels++ = *src_pixels ++; - *dest_pixels++ = *src_pixels ++; - *dest_pixels++ = *src_pixels ++; - *dest_pixels++ = 255; - - if (gdk_pixbuf_get_has_alpha (pixbuf)) - src_pixels++; - } - } + g_object_unref (tmp); } - return retval; -} - -static GdkPixbuf * -take_window_shot (Window child, - gboolean include_decoration) -{ - GdkDisplay *display; - GdkScreen *screen; - GdkWindow *window; - Window xid; - gint x_orig, y_orig; - gint x = 0, y = 0; - gint width, height; - GdkPixbuf *tmp, *tmp2; - GdkPixbuf *retval; - - display = gdk_display_get_default (); - screen = gdk_screen_get_default (); - - if (include_decoration) - xid = find_toplevel_window (gdk_x11_display_get_xdisplay (display), child); - else - xid = child; - - window = gdk_x11_window_foreign_new_for_display (display, xid); - - width = gdk_window_get_width (window); - height = gdk_window_get_height (window); - gdk_window_get_origin (window, &x_orig, &y_orig); - - if (x_orig < 0) - { - x = - x_orig; - width = width + x_orig; - x_orig = 0; - } - - if (y_orig < 0) - { - y = - y_orig; - height = height + y_orig; - y_orig = 0; - } - - if (x_orig + width > gdk_screen_get_width (screen)) - width = gdk_screen_get_width (screen) - x_orig; - - if (y_orig + height > gdk_screen_get_height (screen)) - height = gdk_screen_get_height (screen) - y_orig; - - tmp = gdk_pixbuf_get_from_window (window, - x, y, width, height); - - if (include_decoration) - tmp2 = remove_shaped_area (tmp, xid); - else - tmp2 = add_border_to_shot (tmp); - - retval = create_shadowed_pixbuf (tmp2); - - g_object_unref (tmp); - g_object_unref (tmp2); - - return retval; + return pixbuf; } static gboolean @@ -196,6 +86,7 @@ shooter_get_foreground (GimpRGB *color) { color->r = color->g = color->b = 0.0; color->a = 1.0; + return TRUE; } @@ -204,6 +95,7 @@ shooter_get_background (GimpRGB *color) { color->r = color->g = color->b = 1.0; color->a = 1.0; + return TRUE; } @@ -232,11 +124,11 @@ shooter_ensure_modules (void) } int -main (int argc, char **argv) +main (int argc, + char **argv) { - GdkPixbuf *screenshot = NULL; - GList *toplevels; - GList *node; + GList *toplevels; + GList *node; g_set_application_name ("GIMP documentation shooter"); @@ -246,8 +138,6 @@ main (int argc, char **argv) if (! gtk_init_check (&argc, &argv)) return EXIT_SUCCESS; - gtk_rc_add_default_file (gimp_gtkrc ()); - units_init (); gimp_widgets_init (shooter_standard_help, @@ -259,39 +149,29 @@ main (int argc, char **argv) for (node = toplevels; node; node = g_list_next (node)) { - GdkWindow *window; - WidgetInfo *info; - XID xid; - gchar *filename; + WidgetInfo *info = node->data; + GdkPixbuf *screenshot = NULL; - info = node->data; - - gtk_widget_show (info->window); - - window = gtk_widget_get_window (info->window); - - gtk_widget_show_now (info->window); - gtk_widget_queue_draw (info->window); + gtk_widget_show (info->widget); + gtk_widget_queue_draw (info->widget); while (gtk_events_pending ()) - { - gtk_main_iteration (); - } - sleep (1); + gtk_main_iteration (); - while (gtk_events_pending ()) + screenshot = take_window_shot (info->widget); + + if (screenshot) { - gtk_main_iteration (); + gchar *filename; + + filename = g_strdup_printf ("%s.png", info->name); + gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL); + g_free(filename); + + g_object_unref (screenshot); } - xid = gdk_x11_window_get_xid (window); - screenshot = take_window_shot (xid, info->include_decorations); - - filename = g_strdup_printf ("%s.png", info->name); - gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL); - g_free(filename); - - gtk_widget_hide (info->window); + gtk_widget_hide (info->widget); } return EXIT_SUCCESS; diff --git a/devel-docs/tools/widgets.c b/devel-docs/tools/widgets.c index 682eb14647..af91dcba38 100644 --- a/devel-docs/tools/widgets.c +++ b/devel-docs/tools/widgets.c @@ -26,66 +26,10 @@ #define LARGE_HEIGHT 240 -#if 0 -static gboolean -adjust_size_callback (WidgetInfo *info) -{ - Window toplevel; - Window root; - gint tx; - gint ty; - guint twidth; - guint theight; - guint tborder_width; - guint tdepth; - guint target_width = 0; - guint target_height = 0; - - toplevel = GDK_WINDOW_XWINDOW (gtk_widget_get_window (info->window)); - XGetGeometry (GDK_WINDOW_XDISPLAY (gtk_widget_get_window (info->window)), - toplevel, - &root, &tx, &ty, &twidth, &theight, &tborder_width, &tdepth); - - switch (info->size) - { - case SMALL: - target_width = SMALL_WIDTH; - target_height = SMALL_HEIGHT; - break; - case MEDIUM: - target_width = MEDIUM_WIDTH; - target_height = MEDIUM_HEIGHT; - break; - case LARGE: - target_width = LARGE_WIDTH; - target_height = LARGE_HEIGHT; - break; - case ASIS: - target_width = twidth; - target_height = theight; - break; - } - - if (twidth > target_width || - theight > target_height) - { - gtk_widget_set_size_request (info->window, - 2 + target_width - (twidth - target_width), /* Dunno why I need the +2 fudge factor; */ - 2 + target_height - (theight - target_height)); - } - return FALSE; -} - -static void -realize_callback (WidgetInfo *info) -{ - g_timeout_add (500, (GSourceFunc)adjust_size_callback, info); -} -#endif - static WidgetInfo * new_widget_info (const char *name, GtkWidget *widget, + gboolean show_all, WidgetSize size) { WidgetInfo *info; @@ -93,45 +37,41 @@ new_widget_info (const char *name, info = g_new0 (WidgetInfo, 1); info->name = g_strdup (name); + info->show_all = show_all; info->size = size; info->no_focus = TRUE; if (GTK_IS_WINDOW (widget)) { - info->window = widget; + info->widget = widget; - gtk_window_set_resizable (GTK_WINDOW (info->window), FALSE); -#if 0 - g_signal_connect_swapped (info->window, "realize", - G_CALLBACK (realize_callback), info); -#endif + gtk_window_set_resizable (GTK_WINDOW (info->widget), FALSE); } else { - info->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + info->widget = gtk_offscreen_window_new (); - gtk_window_set_accept_focus (GTK_WINDOW (info->window), FALSE); + gtk_container_set_border_width (GTK_CONTAINER (info->widget), 12); + gtk_container_add (GTK_CONTAINER (info->widget), widget); + } - gtk_container_set_border_width (GTK_CONTAINER (info->window), 12); - gtk_container_add (GTK_CONTAINER (info->window), widget); - gtk_widget_show_all (widget); - } + if (info->show_all) + gtk_widget_show_all (widget); + else + gtk_widget_show (widget); - gtk_window_set_skip_taskbar_hint (GTK_WINDOW (info->window), TRUE); - - gtk_widget_set_app_paintable (info->window, TRUE); - g_signal_connect (info->window, "focus", G_CALLBACK (gtk_true), NULL); + g_signal_connect (info->widget, "focus", G_CALLBACK (gtk_true), NULL); switch (size) { case SMALL: - gtk_widget_set_size_request (info->window, SMALL_WIDTH, SMALL_HEIGHT); + gtk_widget_set_size_request (info->widget, SMALL_WIDTH, SMALL_HEIGHT); break; case MEDIUM: - gtk_widget_set_size_request (info->window, MEDIUM_WIDTH, MEDIUM_HEIGHT); + gtk_widget_set_size_request (info->widget, MEDIUM_WIDTH, MEDIUM_HEIGHT); break; case LARGE: - gtk_widget_set_size_request (info->window, LARGE_WIDTH, LARGE_HEIGHT); + gtk_widget_set_size_request (info->widget, LARGE_WIDTH, LARGE_HEIGHT); break; default: break; @@ -166,75 +106,98 @@ static WidgetInfo * create_browser (void) { GtkWidget *vbox; - GtkWidget *align; GtkWidget *browser; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + browser = gimp_browser_new (); + gtk_widget_set_size_request (browser, 500, 200); + gimp_browser_add_search_types (GIMP_BROWSER (browser), + "by name", 1, + NULL); + gimp_browser_show_message (GIMP_BROWSER (browser), "Result goes here"); gtk_box_pack_start (GTK_BOX (gimp_browser_get_left_vbox (GIMP_BROWSER (browser))), gtk_label_new ("TreeView goes here"), TRUE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (align), browser); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), browser, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Browser"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-browser", vbox, MEDIUM); + return new_widget_info ("gimp-widget-browser", vbox, TRUE, MEDIUM); +} + +static WidgetInfo * +create_busy_box (void) +{ + GtkWidget *widget; + + widget = gimp_busy_box_new ("Busy Box"); + gtk_widget_set_halign (widget, GTK_ALIGN_CENTER); + gtk_widget_set_valign (widget, GTK_ALIGN_CENTER); + + return new_widget_info ("gimp-widget-busy-box", widget, TRUE, SMALL); } static WidgetInfo * create_button (void) { GtkWidget *widget; - GtkWidget *align; widget = gimp_button_new (); + gtk_widget_set_halign (widget, GTK_ALIGN_CENTER); + gtk_widget_set_valign (widget, GTK_ALIGN_CENTER); + gtk_container_add (GTK_CONTAINER (widget), gtk_label_new_with_mnemonic ("_Button")); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); - gtk_container_add (GTK_CONTAINER (align), widget); - return new_widget_info ("gimp-widget-button", align, SMALL); + return new_widget_info ("gimp-widget-button", widget, TRUE, SMALL); } static WidgetInfo * create_chain_button (void) { GtkWidget *vbox; - GtkWidget *align; GtkWidget *grid; GtkWidget *label; GtkWidget *chain; GtkWidget *separator; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.8); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + grid = gtk_grid_new (); + gtk_widget_set_halign (grid, GTK_ALIGN_CENTER); + gtk_widget_set_valign (grid, GTK_ALIGN_CENTER); gtk_grid_set_row_spacing (GTK_GRID (grid), 6); gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (align), grid); + gtk_box_pack_start (GTK_BOX (vbox), grid, TRUE, TRUE, 0); + chain = gimp_chain_button_new (GIMP_CHAIN_LEFT); gimp_chain_button_set_active (GIMP_CHAIN_BUTTON (chain), TRUE); gtk_grid_attach (GTK_GRID (grid), chain, 0, 0, 1, 2); + label = gtk_label_new ("Linked "); gtk_grid_attach (GTK_GRID (grid), label, 1, 0, 1, 1); + label = gtk_label_new ("Linked "); gtk_grid_attach (GTK_GRID (grid), label, 1, 1, 1, 1); + separator = gtk_separator_new (GTK_ORIENTATION_VERTICAL); gtk_grid_attach (GTK_GRID (grid), separator, 2, 0, 1, 2); + label = gtk_label_new (" Unlinked"); gtk_grid_attach (GTK_GRID (grid), label, 3, 0, 1, 1); + label = gtk_label_new (" Unlinked"); gtk_grid_attach (GTK_GRID (grid), label, 3, 1, 1, 1); + chain = gimp_chain_button_new (GIMP_CHAIN_RIGHT); gimp_chain_button_set_active (GIMP_CHAIN_BUTTON (chain), FALSE); gtk_grid_attach (GTK_GRID (grid), chain, 4, 0, 1, 2); gtk_box_pack_end (GTK_BOX (vbox), gtk_label_new ("Chain Button"), - TRUE, TRUE, 0); + FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-chain-button", vbox, MEDIUM); + return new_widget_info ("gimp-widget-chain-button", vbox, TRUE, MEDIUM); } static WidgetInfo * @@ -242,22 +205,23 @@ create_color_area (void) { GtkWidget *vbox; GtkWidget *area; - GtkWidget *align; GimpRGB color; color_init (&color); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 1.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + area = gimp_color_area_new (&color, GIMP_COLOR_AREA_SMALL_CHECKS, 0); + gtk_widget_set_halign (area, GTK_ALIGN_FILL); + gtk_widget_set_valign (area, GTK_ALIGN_CENTER); gimp_color_area_set_draw_border (GIMP_COLOR_AREA (area), TRUE); gtk_widget_set_size_request (area, -1, 25); - gtk_container_add (GTK_CONTAINER (align), area); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), area, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Color Area"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-color-area", vbox, SMALL); + return new_widget_info ("gimp-widget-color-area", vbox, TRUE, SMALL); } static WidgetInfo * @@ -265,22 +229,23 @@ create_color_button (void) { GtkWidget *vbox; GtkWidget *button; - GtkWidget *align; GimpRGB color; color_init (&color); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 1.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + button = gimp_color_button_new ("Color Button", 80, 20, &color, GIMP_COLOR_AREA_SMALL_CHECKS); - gtk_container_add (GTK_CONTAINER (align), button); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_widget_set_halign (button, GTK_ALIGN_CENTER); + gtk_widget_set_valign (button, GTK_ALIGN_CENTER); + gtk_container_add (GTK_CONTAINER (vbox), button); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Color Button"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-color-button", vbox, SMALL); + return new_widget_info ("gimp-widget-color-button", vbox, TRUE, SMALL); } static WidgetInfo * @@ -288,21 +253,22 @@ create_color_hex_entry (void) { GtkWidget *vbox; GtkWidget *entry; - GtkWidget *align; GimpRGB color; color_init (&color); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + entry = gimp_color_hex_entry_new (); + gtk_widget_set_halign (entry, GTK_ALIGN_CENTER); + gtk_widget_set_valign (entry, GTK_ALIGN_CENTER); gimp_color_hex_entry_set_color (GIMP_COLOR_HEX_ENTRY (entry), &color); - gtk_container_add (GTK_CONTAINER (align), entry); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Color Hex Entry"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-color-hex-entry", vbox, SMALL); + return new_widget_info ("gimp-widget-color-hex-entry", vbox, TRUE, SMALL); } static WidgetInfo * @@ -310,21 +276,44 @@ create_color_profile_combo_box (void) { GtkWidget *vbox; GtkWidget *combo; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + combo = gimp_color_profile_combo_box_new (gtk_dialog_new (), NULL); + gtk_widget_set_halign (combo, GTK_ALIGN_CENTER); + gtk_widget_set_valign (combo, GTK_ALIGN_CENTER); gimp_color_profile_combo_box_add_file (GIMP_COLOR_PROFILE_COMBO_BOX (combo), NULL, "sRGB"); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); - gtk_container_add (GTK_CONTAINER (align), combo); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), combo, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Color Profile Combo Box"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-color-profile-combo-box", vbox, SMALL); + return new_widget_info ("gimp-widget-color-profile-combo-box", vbox, TRUE, SMALL); +} + +static WidgetInfo * +create_color_profile_view (void) +{ + GtkWidget *vbox; + GtkWidget *view; + + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + + view = gimp_color_profile_view_new (); + gtk_widget_set_halign (view, GTK_ALIGN_FILL); + gtk_widget_set_valign (view, GTK_ALIGN_CENTER); + gimp_color_profile_view_set_profile (GIMP_COLOR_PROFILE_VIEW (view), + gimp_color_profile_new_rgb_srgb ()); + gtk_box_pack_start (GTK_BOX (vbox), view, TRUE, TRUE, 0); + + gtk_box_pack_start (GTK_BOX (vbox), + gtk_label_new ("Color Profile View"), + FALSE, FALSE, 0); + + return new_widget_info ("gimp-widget-color-profile-view", vbox, TRUE, SMALL); } static WidgetInfo * @@ -332,25 +321,26 @@ create_color_scale (void) { GtkWidget *vbox; GtkWidget *scale; - GtkWidget *align; GimpRGB rgb; GimpHSV hsv; color_init (&rgb); gimp_rgb_to_hsv (&rgb, &hsv); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.8, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + scale = gimp_color_scale_new (GTK_ORIENTATION_HORIZONTAL, GIMP_COLOR_SELECTOR_HUE); + gtk_widget_set_halign (scale, GTK_ALIGN_FILL); + gtk_widget_set_valign (scale, GTK_ALIGN_CENTER); gimp_color_scale_set_color (GIMP_COLOR_SCALE (scale), &rgb, &hsv); gtk_range_set_value (GTK_RANGE (scale), 40); - gtk_container_add (GTK_CONTAINER (align), scale); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), scale, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Color Scale"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-color-scale", vbox, SMALL); + return new_widget_info ("gimp-widget-color-scale", vbox, TRUE, SMALL); } static WidgetInfo * @@ -358,23 +348,27 @@ create_color_selection (void) { GtkWidget *vbox; GtkWidget *selection; - GtkWidget *align; + GtkWidget *label; GimpRGB color; color_init (&color); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); - selection = gimp_color_selection_new (); - gimp_color_selection_set_show_alpha(GIMP_COLOR_SELECTION (selection), TRUE); - gimp_color_selection_set_color (GIMP_COLOR_SELECTION (selection), &color); - gtk_widget_set_size_request (selection, 400, -1); - gtk_container_add (GTK_CONTAINER (align), selection); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (vbox), - gtk_label_new ("Color Selection"), FALSE, FALSE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); - return new_widget_info ("gimp-widget-color-selection", vbox, ASIS); + selection = gimp_color_selection_new (); + gtk_widget_set_halign (selection, GTK_ALIGN_CENTER); + gtk_widget_set_valign (selection, GTK_ALIGN_CENTER); + gtk_widget_set_size_request (selection, 400, -1); + gimp_color_selection_set_show_alpha (GIMP_COLOR_SELECTION (selection), TRUE); + gimp_color_selection_set_color (GIMP_COLOR_SELECTION (selection), &color); + gtk_box_pack_start (GTK_BOX (vbox), selection, TRUE, TRUE, 0); + gtk_widget_show (selection); + + label = gtk_label_new ("Color Selection"); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + return new_widget_info ("gimp-widget-color-selection", vbox, FALSE, ASIS); } static WidgetInfo * @@ -397,8 +391,7 @@ create_dialog (void) content = gtk_dialog_get_content_area (GTK_DIALOG (widget)); gtk_container_add (GTK_CONTAINER (content), label); gtk_widget_show (label); - info = new_widget_info ("gimp-widget-dialog", widget, MEDIUM); - info->include_decorations = TRUE; + info = new_widget_info ("gimp-widget-dialog", widget, TRUE, MEDIUM); return info; } @@ -408,18 +401,19 @@ create_enum_combo_box (void) { GtkWidget *vbox; GtkWidget *combo; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + combo = gimp_enum_combo_box_new (GIMP_TYPE_CHANNEL_TYPE); + gtk_widget_set_halign (combo, GTK_ALIGN_FILL); + gtk_widget_set_valign (combo, GTK_ALIGN_CENTER); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), GIMP_CHANNEL_BLUE); - gtk_container_add (GTK_CONTAINER (align), combo); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), combo, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Enum Combo Box"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-enum-combo-box", vbox, SMALL); + return new_widget_info ("gimp-widget-enum-combo-box", vbox, TRUE, SMALL); } static WidgetInfo * @@ -427,17 +421,18 @@ create_enum_label (void) { GtkWidget *vbox; GtkWidget *label; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + label = gimp_enum_label_new (GIMP_TYPE_IMAGE_BASE_TYPE, GIMP_RGB); - gtk_container_add (GTK_CONTAINER (align), label); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_widget_set_halign (label, GTK_ALIGN_CENTER); + gtk_widget_set_valign (label, GTK_ALIGN_CENTER); + gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Enum Label"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-enum-label", vbox, SMALL); + return new_widget_info ("gimp-widget-enum-label", vbox, TRUE, SMALL); } static WidgetInfo * @@ -445,19 +440,20 @@ create_file_entry (void) { GtkWidget *vbox; GtkWidget *entry; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + entry = gimp_file_entry_new ("File Entry", "wilber.png", FALSE, TRUE); - gtk_container_add (GTK_CONTAINER (align), entry); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_widget_set_halign (entry, GTK_ALIGN_FILL); + gtk_widget_set_valign (entry, GTK_ALIGN_CENTER); + gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("File Entry"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-file-entry", vbox, SMALL); + return new_widget_info ("gimp-widget-file-entry", vbox, TRUE, SMALL); } static WidgetInfo * @@ -472,7 +468,7 @@ create_frame (void) gtk_label_set_yalign (GTK_LABEL (content), 0.0); gtk_container_add (GTK_CONTAINER (frame), content); - return new_widget_info ("gimp-widget-frame", frame, MEDIUM); + return new_widget_info ("gimp-widget-frame", frame, TRUE, MEDIUM); } static WidgetInfo * @@ -480,7 +476,7 @@ create_hint_box (void) { GtkWidget *box = gimp_hint_box_new ("This is a user hint."); - return new_widget_info ("gimp-widget-hint-box", box, MEDIUM); + return new_widget_info ("gimp-widget-hint-box", box, TRUE, MEDIUM); } static WidgetInfo * @@ -488,18 +484,19 @@ create_number_pair_entry (void) { GtkWidget *vbox; GtkWidget *entry; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + entry = gimp_number_pair_entry_new (":/", TRUE, 0.001, GIMP_MAX_IMAGE_SIZE); + gtk_widget_set_halign (entry, GTK_ALIGN_FILL); + gtk_widget_set_valign (entry, GTK_ALIGN_CENTER); gimp_number_pair_entry_set_values (GIMP_NUMBER_PAIR_ENTRY (entry), 4, 3); - gtk_container_add (GTK_CONTAINER (align), entry); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Number Pair Entry"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-number-pair-entry", vbox, SMALL); + return new_widget_info ("gimp-widget-number-pair-entry", vbox, TRUE, SMALL); } static WidgetInfo * @@ -507,10 +504,9 @@ create_int_combo_box (void) { GtkWidget *vbox; GtkWidget *combo; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + combo = gimp_int_combo_box_new ("Sobel", 1, "Prewitt", 2, "Gradient", 3, @@ -518,14 +514,15 @@ create_int_combo_box (void) "Differential", 5, "Laplace", 6, NULL); + gtk_widget_set_halign (combo, GTK_ALIGN_FILL); + gtk_widget_set_valign (combo, GTK_ALIGN_CENTER); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (combo), 1); + gtk_box_pack_start (GTK_BOX (vbox), combo, TRUE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (align), combo); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Int Combo Box"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-int-combo-box", vbox, SMALL); + return new_widget_info ("gimp-widget-int-combo-box", vbox, TRUE, SMALL); } static WidgetInfo * @@ -533,18 +530,19 @@ create_memsize_entry (void) { GtkWidget *vbox; GtkWidget *entry; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + entry = gimp_memsize_entry_new ((3 * 1024 + 512) * 1024, 0, 1024 * 1024 * 1024); - gtk_container_add (GTK_CONTAINER (align), entry); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_widget_set_halign (entry, GTK_ALIGN_CENTER); + gtk_widget_set_valign (entry, GTK_ALIGN_CENTER); + gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Memsize Entry"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-memsize-entry", vbox, SMALL); + return new_widget_info ("gimp-widget-memsize-entry", vbox, TRUE, SMALL); } static WidgetInfo * @@ -553,22 +551,24 @@ create_offset_area (void) GtkWidget *vbox; GtkWidget *frame; GtkWidget *area; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + frame = gtk_frame_new (NULL); + gtk_widget_set_halign (frame, GTK_ALIGN_CENTER); + gtk_widget_set_valign (frame, GTK_ALIGN_CENTER); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); - gtk_container_add (GTK_CONTAINER (align), frame); + gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); + area = gimp_offset_area_new (100, 100); gimp_offset_area_set_size (GIMP_OFFSET_AREA (area), 180, 160); gimp_offset_area_set_offsets (GIMP_OFFSET_AREA (area), 30, 30); gtk_container_add (GTK_CONTAINER (frame), area); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Offset Area"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-offset-area", vbox, LARGE); + return new_widget_info ("gimp-widget-offset-area", vbox, TRUE, LARGE); } static WidgetInfo * @@ -577,17 +577,18 @@ create_page_selector (void) GtkWidget *vbox; GtkWidget *selector; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); selector = gimp_page_selector_new (); gtk_widget_set_size_request (selector, -1, 240); gimp_page_selector_set_n_pages (GIMP_PAGE_SELECTOR (selector), 16); gimp_page_selector_select_range (GIMP_PAGE_SELECTOR (selector), "1,3,7-9,12-15"); gtk_box_pack_start (GTK_BOX (vbox), selector, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Page Selector"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-page-selector", vbox, ASIS); + return new_widget_info ("gimp-widget-page-selector", vbox, TRUE, ASIS); } static WidgetInfo * @@ -595,23 +596,24 @@ create_path_editor (void) { GtkWidget *vbox; GtkWidget *editor; - GtkWidget *align; gchar *config = gimp_config_build_data_path ("patterns"); gchar *path = gimp_config_path_expand (config, TRUE, NULL); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + editor = gimp_path_editor_new ("Path Editor", path); + gtk_widget_set_halign (editor, GTK_ALIGN_CENTER); + gtk_widget_set_valign (editor, GTK_ALIGN_CENTER); gtk_widget_set_size_request (editor, -1, 240); - gtk_container_add (GTK_CONTAINER (align), editor); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), editor, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Path Editor"), FALSE, FALSE, 0); g_free (path); g_free (config); - return new_widget_info ("gimp-widget-path-editor", vbox, ASIS); + return new_widget_info ("gimp-widget-path-editor", vbox, TRUE, ASIS); } static WidgetInfo * @@ -619,17 +621,18 @@ create_pick_button (void) { GtkWidget *vbox; GtkWidget *button; - GtkWidget *align; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 1.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + button = gimp_pick_button_new (); - gtk_container_add (GTK_CONTAINER (align), button); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_widget_set_halign (button, GTK_ALIGN_CENTER); + gtk_widget_set_valign (button, GTK_ALIGN_CENTER); + gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Pick Button"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-pick-button", vbox, SMALL); + return new_widget_info ("gimp-widget-pick-button", vbox, TRUE, SMALL); } static gboolean @@ -654,25 +657,26 @@ create_preview_area (void) { GtkWidget *vbox; GtkWidget *area; - GtkWidget *align; GdkPixbuf *pixbuf; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + area = gimp_preview_area_new (); + gtk_widget_set_halign (area, GTK_ALIGN_CENTER); + gtk_widget_set_valign (area, GTK_ALIGN_CENTER); g_signal_connect (area, "realize", G_CALLBACK (area_realize), NULL); - gtk_container_add (GTK_CONTAINER (align), area); pixbuf = load_image ("wilber-wizard.png"); gtk_widget_set_size_request (area, gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf)); g_object_unref (pixbuf); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), area, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("Preview Area"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-preview-area", vbox, MEDIUM); + return new_widget_info ("gimp-widget-preview-area", vbox, TRUE, MEDIUM); } static WidgetInfo * @@ -680,24 +684,44 @@ create_string_combo_box (void) { GtkWidget *vbox; GtkWidget *combo; - GtkWidget *align; GtkListStore *store; - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - align = gtk_alignment_new (0.5, 0.5, 0.5, 0.0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + store = gtk_list_store_new (1, G_TYPE_STRING); gtk_list_store_insert_with_values (store, NULL, 0, 0, "Foo", -1); gtk_list_store_insert_with_values (store, NULL, 1, 0, "Bar", -1); combo = gimp_string_combo_box_new (GTK_TREE_MODEL (store), 0, 0); + gtk_widget_set_halign (combo, GTK_ALIGN_FILL); + gtk_widget_set_valign (combo, GTK_ALIGN_CENTER); g_object_unref (store); gimp_string_combo_box_set_active (GIMP_STRING_COMBO_BOX (combo), "Foo"); + gtk_box_pack_start (GTK_BOX (vbox), combo, TRUE, TRUE, 0); - gtk_container_add (GTK_CONTAINER (align), combo); - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), gtk_label_new ("String Combo Box"), FALSE, FALSE, 0); - return new_widget_info ("gimp-widget-string-combo-box", vbox, SMALL); + return new_widget_info ("gimp-widget-string-combo-box", vbox, TRUE, SMALL); +} + +static WidgetInfo * +create_unit_combo_box (void) +{ + GtkWidget *vbox; + GtkWidget *combo; + + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); + + combo = gimp_unit_combo_box_new (); + gtk_widget_set_halign (combo, GTK_ALIGN_FILL); + gtk_widget_set_valign (combo, GTK_ALIGN_CENTER); + gimp_unit_combo_box_set_active (GIMP_UNIT_COMBO_BOX (combo), GIMP_UNIT_INCH); + gtk_box_pack_start (GTK_BOX (vbox), combo, TRUE, TRUE, 0); + + gtk_box_pack_start (GTK_BOX (vbox), + gtk_label_new ("Unit Combo Box"), FALSE, FALSE, 0); + + return new_widget_info ("gimp-widget-unit-combo-box", vbox, TRUE, SMALL); } GList * @@ -706,12 +730,14 @@ get_all_widgets (void) GList *retval = NULL; retval = g_list_append (retval, create_browser ()); + retval = g_list_append (retval, create_busy_box ()); retval = g_list_append (retval, create_button ()); retval = g_list_append (retval, create_chain_button ()); retval = g_list_append (retval, create_color_area ()); retval = g_list_append (retval, create_color_button ()); retval = g_list_append (retval, create_color_hex_entry ()); retval = g_list_append (retval, create_color_profile_combo_box ()); + retval = g_list_append (retval, create_color_profile_view ()); retval = g_list_append (retval, create_color_scale ()); retval = g_list_append (retval, create_color_selection ()); retval = g_list_append (retval, create_dialog ()); @@ -729,6 +755,7 @@ get_all_widgets (void) retval = g_list_append (retval, create_pick_button ()); retval = g_list_append (retval, create_preview_area ()); retval = g_list_append (retval, create_string_combo_box ()); + retval = g_list_append (retval, create_unit_combo_box ()); return retval; } diff --git a/devel-docs/tools/widgets.h b/devel-docs/tools/widgets.h index 53925cb073..1542320e02 100644 --- a/devel-docs/tools/widgets.h +++ b/devel-docs/tools/widgets.h @@ -12,10 +12,10 @@ typedef enum typedef struct WidgetInfo { - GtkWidget *window; + GtkWidget *widget; gchar *name; gboolean no_focus; - gboolean include_decorations; + gboolean show_all; WidgetSize size; } WidgetInfo;