devel-docs: undeprecate doc-shooter and add a few more widgets

Doesn't use X11 any longer, just plain GTK and cairo.
This commit is contained in:
Michael Natterer 2019-07-24 19:17:14 +02:00
parent 9e88105ee6
commit dcbd83cafc
5 changed files with 292 additions and 386 deletions

View File

@ -15,9 +15,9 @@ libgimpwidgets = $(top_builddir)/libgimpwidgets/libgimpwidgets-$(GIMP_API_VERSIO
AM_CPPFLAGS = \
$(GTK_CFLAGS) \
-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

View File

@ -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 +

View File

@ -1,18 +1,9 @@
#include "config.h"
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <gegl.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h>
#include <X11/extensions/shape.h>
#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;
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++;
}
}
}
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);
pixbuf = create_shadowed_pixbuf (tmp);
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,9 +124,9 @@ shooter_ensure_modules (void)
}
int
main (int argc, char **argv)
main (int argc,
char **argv)
{
GdkPixbuf *screenshot = NULL;
GList *toplevels;
GList *node;
@ -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;
WidgetInfo *info = node->data;
GdkPixbuf *screenshot = NULL;
gtk_widget_show (info->widget);
gtk_widget_queue_draw (info->widget);
while (gtk_events_pending ())
gtk_main_iteration ();
screenshot = take_window_shot (info->widget);
if (screenshot)
{
gchar *filename;
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);
while (gtk_events_pending ())
{
gtk_main_iteration ();
}
sleep (1);
while (gtk_events_pending ())
{
gtk_main_iteration ();
}
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);
g_object_unref (screenshot);
}
gtk_widget_hide (info->widget);
}
return EXIT_SUCCESS;

View File

@ -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->window), 12);
gtk_container_add (GTK_CONTAINER (info->window), widget);
gtk_widget_show_all (widget);
gtk_container_set_border_width (GTK_CONTAINER (info->widget), 12);
gtk_container_add (GTK_CONTAINER (info->widget), widget);
}
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (info->window), TRUE);
if (info->show_all)
gtk_widget_show_all (widget);
else
gtk_widget_show (widget);
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);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
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_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);
gtk_box_pack_start (GTK_BOX (vbox), selection, TRUE, TRUE, 0);
gtk_widget_show (selection);
return new_widget_info ("gimp-widget-color-selection", vbox, ASIS);
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;
}

View File

@ -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;