diff --git a/ChangeLog b/ChangeLog index 363fc925b5..01232bb46c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2004-06-24 Bill Skaggs + + * plug-ins/gfig/gfig.[ch]: + * plug-ins/gfig/gfig-preview.c: Let gfig use a thumbnail of the + image as background for its preview, if the image is RGB and "Show + image" is checked in the Options tab. (Next best thing to + previewing in the image.) + 2004-06-25 Michael Natterer * app/widgets/gimpcontrollerinfo.[ch]: added a boolean property diff --git a/plug-ins/gfig/gfig-preview.c b/plug-ins/gfig/gfig-preview.c index 723e781e58..6e78dcfba6 100644 --- a/plug-ins/gfig/gfig-preview.c +++ b/plug-ins/gfig/gfig-preview.c @@ -44,12 +44,12 @@ #include "libgimp/stdplugins-intl.h" #define PREVIEW_MASK (GDK_EXPOSURE_MASK | \ - GDK_POINTER_MOTION_MASK | \ + GDK_POINTER_MOTION_MASK | \ GDK_BUTTON_PRESS_MASK | \ - GDK_BUTTON_RELEASE_MASK | \ - GDK_BUTTON_MOTION_MASK | \ - GDK_KEY_PRESS_MASK | \ - GDK_KEY_RELEASE_MASK) + GDK_BUTTON_RELEASE_MASK | \ + GDK_BUTTON_MOTION_MASK | \ + GDK_KEY_PRESS_MASK | \ + GDK_KEY_RELEASE_MASK) static gint x_pos_val; static gint y_pos_val; @@ -61,21 +61,19 @@ static guchar preview_row[PREVIEW_SIZE * 4]; static guchar *pv_cache; static gint img_bpp; -static gboolean gfig_preview_expose (GtkWidget *widget, - GdkEvent *event); -static void gfig_preview_realize (GtkWidget *widget); -static gboolean gfig_preview_events (GtkWidget *widget, - GdkEvent *event); -static void cache_preview (GimpDrawable *drawable); +static void gfig_preview_realize (GtkWidget *widget); +static gboolean gfig_preview_events (GtkWidget *widget, + GdkEvent *event); +static void cache_preview (GimpDrawable *drawable); -static gint gfig_invscale_x (gint x); -static gint gfig_invscale_y (gint y); -static GtkWidget* gfig_pos_labels (void); -static GtkWidget* make_pos_info (void); -static GtkWidget* make_status (void); +static gint gfig_invscale_x (gint x); +static gint gfig_invscale_y (gint y); +static GtkWidget* gfig_pos_labels (void); +static GtkWidget* make_pos_info (void); +static GtkWidget* make_status (void); -static void gfig_pos_update (gint x, - gint y); +static void gfig_pos_update (gint x, + gint y); GtkWidget * make_preview (void) @@ -98,11 +96,11 @@ make_preview (void) NULL); g_signal_connect_after (gfig_preview , "expose_event", - G_CALLBACK (gfig_preview_expose), - NULL); + G_CALLBACK (gfig_preview_expose), + NULL); gtk_preview_size (GTK_PREVIEW (gfig_preview), preview_width, - preview_height); + preview_height); frame = gtk_frame_new (NULL); @@ -110,7 +108,7 @@ make_preview (void) table = gtk_table_new (3, 3, FALSE); gtk_table_attach (GTK_TABLE (table), gfig_preview, 1, 2, 1, 2, - GTK_FILL , GTK_FILL , 0, 0); + GTK_FILL , GTK_FILL , 0, 0); gtk_container_add (GTK_CONTAINER (frame), table); ruler = gtk_hruler_new (); @@ -119,16 +117,16 @@ make_preview (void) G_CALLBACK (GTK_WIDGET_CLASS (G_OBJECT_GET_CLASS (ruler))->motion_notify_event), ruler); gtk_table_attach (GTK_TABLE (table), ruler, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); + GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (ruler); ruler = gtk_vruler_new (); gtk_ruler_set_range (GTK_RULER (ruler), 0, preview_height, 0, PREVIEW_SIZE); g_signal_connect_swapped (gfig_preview, "motion_notify_event", G_CALLBACK (GTK_WIDGET_CLASS (G_OBJECT_GET_CLASS (ruler))->motion_notify_event), - ruler); + ruler); gtk_table_attach (GTK_TABLE (table), ruler, 0, 1, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); + GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (ruler); gtk_widget_show (frame); @@ -154,11 +152,11 @@ make_preview (void) /* Given a row then srink it down a bit */ static void do_gfig_preview (guchar *dest_row, - guchar *src_row, - gint width, - gint dh, - gint height, - gint bpp) + guchar *src_row, + gint width, + gint dh, + gint height, + gint bpp) { memcpy (dest_row, src_row, width * bpp); } @@ -205,18 +203,18 @@ cache_preview (GimpDrawable *drawable) guchar *src_rows; guchar *p; gboolean isgrey, has_alpha; - gint bpp, img_bpp; - gint sel_x1, sel_y1, sel_x2, sel_y2; - gint sel_width, sel_height; + gint bpp, img_bpp; + gint sel_x1, sel_y1, sel_x2, sel_y2; + gint sel_width, sel_height; gimp_drawable_mask_bounds (drawable->drawable_id, - &sel_x1, &sel_y1, &sel_x2, &sel_y2); + &sel_x1, &sel_y1, &sel_x2, &sel_y2); sel_width = sel_x2 - sel_x1; sel_height = sel_y2 - sel_y1; gimp_pixel_rgn_init (&src_rgn, drawable, - sel_x1, sel_y1, sel_width, sel_height, FALSE, FALSE); + sel_x1, sel_y1, sel_width, sel_height, FALSE, FALSE); src_rows = g_new (guchar , sel_width * 4); p = pv_cache = g_new (guchar , preview_width * preview_height * 4); @@ -239,10 +237,10 @@ cache_preview (GimpDrawable *drawable) for (y = 0; y < preview_height; y++) { gimp_pixel_rgn_get_row (&src_rgn, - src_rows, - sel_x1, - sel_y1 + (y*sel_height)/preview_height, - sel_width); + src_rows, + sel_x1, + sel_y1 + (y*sel_height)/preview_height, + sel_width); for (x = 0; x < (preview_width); x ++) { @@ -252,11 +250,11 @@ cache_preview (GimpDrawable *drawable) for (i = 0 ; i < 3; i++) p[x*img_bpp+i] = src_rows[((x*sel_width)/preview_width) * src_rgn.bpp + - ((isgrey)?0:i)]; + ((isgrey)?0:i)]; if (has_alpha) p[x*img_bpp+3] = src_rows[((x*sel_width)/preview_width) * src_rgn.bpp + - ((isgrey)?1:3)]; + ((isgrey)?1:3)]; } p += (preview_width*img_bpp); } @@ -274,10 +272,10 @@ dialog_update_preview (GimpDrawable *drawable) { memset (preview_row, -1, preview_width*4); for (y = 0; y < preview_height; y++) - { - gtk_preview_draw_row (GTK_PREVIEW (gfig_preview), preview_row, - 0, y, preview_width); - } + { + gtk_preview_draw_row (GTK_PREVIEW (gfig_preview), preview_row, + 0, y, preview_width); + } return; } @@ -289,47 +287,47 @@ dialog_update_preview (GimpDrawable *drawable) for (y = 0; y < preview_height; y++) { if ((y / GIMP_CHECK_SIZE) & 1) - { - check_0 = GIMP_CHECK_DARK * 255; - check_1 = GIMP_CHECK_LIGHT * 255; - } + { + check_0 = GIMP_CHECK_DARK * 255; + check_1 = GIMP_CHECK_LIGHT * 255; + } else - { - check_0 = GIMP_CHECK_LIGHT * 255; - check_1 = GIMP_CHECK_DARK * 255; - } + { + check_0 = GIMP_CHECK_LIGHT * 255; + check_1 = GIMP_CHECK_DARK * 255; + } do_gfig_preview (preview_row, - pv_cache + y * preview_width * img_bpp, - preview_width, - y, - preview_height, - img_bpp); + pv_cache + y * preview_width * img_bpp, + preview_width, + y, + preview_height, + img_bpp); if (img_bpp > 3) - { - int i, j; - for (i = 0, j = 0 ; i < sizeof (preview_row); i += 4, j += 3) - { - gint alphaval; - if (((i/4) / GIMP_CHECK_SIZE) & 1) - check = check_0; - else - check = check_1; + { + int i, j; + for (i = 0, j = 0 ; i < sizeof (preview_row); i += 4, j += 3) + { + gint alphaval; + if (((i/4) / GIMP_CHECK_SIZE) & 1) + check = check_0; + else + check = check_1; - alphaval = preview_row[i + 3]; + alphaval = preview_row[i + 3]; - preview_row[j] = - check + (((preview_row[i] - check)*alphaval)/255); - preview_row[j + 1] = - check + (((preview_row[i + 1] - check)*alphaval)/255); - preview_row[j + 2] = - check + (((preview_row[i + 2] - check)*alphaval)/255); - } - } + preview_row[j] = + check + (((preview_row[i] - check)*alphaval)/255); + preview_row[j + 1] = + check + (((preview_row[i + 1] - check)*alphaval)/255); + preview_row[j + 2] = + check + (((preview_row[i + 2] - check)*alphaval)/255); + } + } gtk_preview_draw_row (GTK_PREVIEW (gfig_preview), preview_row, - 0, y, preview_width); + 0, y, preview_width); } } @@ -339,13 +337,28 @@ gfig_preview_realize (GtkWidget *widget) GdkDisplay *display = gtk_widget_get_display (widget); gdk_window_set_cursor (gfig_preview->window, - gdk_cursor_new_for_display (display, GDK_CROSSHAIR)); + gdk_cursor_new_for_display (display, GDK_CROSSHAIR)); } -static gboolean -gfig_preview_expose (GtkWidget *widget, - GdkEvent *event) +static void +draw_background () { + if (back_pixbuf) + gdk_draw_pixbuf (gfig_preview->window, + gfig_preview->style->fg_gc[GTK_STATE_NORMAL], + back_pixbuf, 0, 0, 0, 0, -1, -1, + GDK_RGB_DITHER_NONE, 0, 0); +} + +gboolean +gfig_preview_expose (GtkWidget *widget, + GdkEvent *event) +{ + gdk_window_clear (gfig_preview->window); + + if (gfig_context->show_background) + draw_background (); + draw_grid (); draw_objects (pic_obj->obj_list, TRUE); @@ -354,7 +367,7 @@ gfig_preview_expose (GtkWidget *widget, static gint gfig_preview_events (GtkWidget *widget, - GdkEvent *event) + GdkEvent *event) { GdkEventButton *bevent; GdkEventMotion *mevent; @@ -375,39 +388,39 @@ gfig_preview_events (GtkWidget *widget, /* Start drawing of object */ if (selvals.otype >= MOVE_OBJ) - { - if (!selvals.scaletoimage) - { - point.x = gfig_invscale_x (point.x); - point.y = gfig_invscale_y (point.y); - } - object_operation_start (&point, bevent->state & GDK_SHIFT_MASK); + { + if (!selvals.scaletoimage) + { + point.x = gfig_invscale_x (point.x); + point.y = gfig_invscale_y (point.y); + } + object_operation_start (&point, bevent->state & GDK_SHIFT_MASK); - /* If constraining save start pnt */ - if (selvals.opts.snap2grid) - { - /* Save point to constained point ... if button 3 down */ - if (bevent->button == 3) - { - find_grid_pos (&point, &point, FALSE); - } - } - } + /* If constraining save start pnt */ + if (selvals.opts.snap2grid) + { + /* Save point to constained point ... if button 3 down */ + if (bevent->button == 3) + { + find_grid_pos (&point, &point, FALSE); + } + } + } else - { - if (selvals.opts.snap2grid) - { - if (bevent->button == 3) - { - find_grid_pos (&point, &point, FALSE); - } - else - { - find_grid_pos (&point, &point, FALSE); - } - } - object_start (&point, bevent->state & GDK_SHIFT_MASK); - } + { + if (selvals.opts.snap2grid) + { + if (bevent->button == 3) + { + find_grid_pos (&point, &point, FALSE); + } + else + { + find_grid_pos (&point, &point, FALSE); + } + } + object_start (&point, bevent->state & GDK_SHIFT_MASK); + } break; @@ -417,27 +430,27 @@ gfig_preview_events (GtkWidget *widget, point.y = bevent->y; if (selvals.opts.snap2grid) - find_grid_pos (&point, &point, bevent->button == 3); + find_grid_pos (&point, &point, bevent->button == 3); /* Still got shift down ?*/ if (selvals.otype >= MOVE_OBJ) - { - if (!selvals.scaletoimage) - { - point.x = gfig_invscale_x (point.x); - point.y = gfig_invscale_y (point.y); - } - object_operation_end (&point, bevent->state & GDK_SHIFT_MASK); - } + { + if (!selvals.scaletoimage) + { + point.x = gfig_invscale_x (point.x); + point.y = gfig_invscale_y (point.y); + } + object_operation_end (&point, bevent->state & GDK_SHIFT_MASK); + } else - { - if (obj_creating) - { - object_end (&point, bevent->state & GDK_SHIFT_MASK); - } - else - break; - } + { + if (obj_creating) + { + object_end (&point, bevent->state & GDK_SHIFT_MASK); + } + else + break; + } /* make small preview reflect changes ?*/ list_button_update (current_obj); @@ -449,42 +462,42 @@ gfig_preview_events (GtkWidget *widget, point.y = mevent->y; if (selvals.opts.snap2grid) - find_grid_pos (&point, &point, mevent->state & GDK_BUTTON3_MASK); + find_grid_pos (&point, &point, mevent->state & GDK_BUTTON3_MASK); if (selvals.otype >= MOVE_OBJ) - { - /* Moving objects around */ - if (!selvals.scaletoimage) - { - point.x = gfig_invscale_x (point.x); - point.y = gfig_invscale_y (point.y); - } - object_operation (&point, mevent->state & GDK_SHIFT_MASK); - gfig_pos_update (point.x, point.y); - return FALSE; - } + { + /* Moving objects around */ + if (!selvals.scaletoimage) + { + point.x = gfig_invscale_x (point.x); + point.y = gfig_invscale_y (point.y); + } + object_operation (&point, mevent->state & GDK_SHIFT_MASK); + gfig_pos_update (point.x, point.y); + return FALSE; + } if (obj_creating) - { - object_update (&point); - } + { + object_update (&point); + } gfig_pos_update (point.x, point.y); break; case GDK_KEY_PRESS: if ((tmp_show_single = obj_show_single) != -1) - { - obj_show_single = -1; - draw_grid_clear (); - } + { + obj_show_single = -1; + draw_grid_clear (); + } break; case GDK_KEY_RELEASE: if (tmp_show_single != -1) - { - obj_show_single = tmp_show_single; - draw_grid_clear (); - } + { + obj_show_single = tmp_show_single; + draw_grid_clear (); + } break; default: @@ -540,25 +553,25 @@ make_status (void) label = gtk_label_new (_("Draw name:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, - GTK_FILL, GTK_FILL, 0, 0); + GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); label = gtk_label_new (_("Filename:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach (GTK_TABLE (table), label, 1, 2, 1, 2, - GTK_FILL, GTK_FILL, 0, 0); + GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); status_label_dname = gtk_label_new (_("(none)")); gtk_misc_set_alignment (GTK_MISC (status_label_dname), 0.0, 0.5); gtk_table_attach (GTK_TABLE (table), status_label_dname, 2, 4, 0, 1, - GTK_FILL | GTK_EXPAND, 0, 0, 0); + GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_widget_show (status_label_dname); status_label_fname = gtk_label_new (_("(none)")); gtk_misc_set_alignment (GTK_MISC (status_label_fname), 0.0, 0.5); gtk_table_attach (GTK_TABLE (table), status_label_fname, 2, 4, 1, 2, - GTK_FILL | GTK_EXPAND, 0, 0, 0); + GTK_FILL | GTK_EXPAND, 0, 0, 0); gtk_widget_show (status_label_fname); gtk_widget_show (frame); @@ -590,13 +603,13 @@ gfig_update_stat_labels (void) strcat (dfn, &dfn[strlen (hm)]); } if ((slen = strlen (dfn)) > 40) - { - strncpy (str, dfn, 19); - str[19] = '\0'; - strcat (str, "..."); - strncat (str, &dfn[slen - 21], 19); - str[40] ='\0'; - } + { + strncpy (str, dfn, 19); + str[19] = '\0'; + strcat (str, "..."); + strncat (str, &dfn[slen - 21], 19); + str[40] ='\0'; + } else { sprintf (str, "%.40s", dfn); @@ -656,7 +669,7 @@ gfig_pos_labels (void) void gfig_pos_enable (GtkWidget *widget, - gpointer data) + gpointer data) { gboolean enable = selvals.showpos; @@ -676,7 +689,7 @@ gfig_pos_update_labels (gpointer data) static void gfig_pos_update (gint x, - gint y) + gint y) { if ((x_pos_val !=x || y_pos_val != y) && pos_tag == -1 && selvals.showpos) { diff --git a/plug-ins/gfig/gfig.c b/plug-ins/gfig/gfig.c index d63a98ec2f..d266b65822 100644 --- a/plug-ins/gfig/gfig.c +++ b/plug-ins/gfig/gfig.c @@ -50,7 +50,8 @@ #include #include - +#include +#include #include "libgimp/stdplugins-intl.h" #include "gfig.h" @@ -153,10 +154,6 @@ static void edit_button_callback (GtkWidget *widget, gpointer data); static void merge_button_callback (GtkWidget *widget, gpointer data); -static void about_button_callback (GtkWidget *widget, - gpointer data); -static void reload_button_callback (GtkWidget *widget, - gpointer data); static void do_gfig (void); static void toggle_show_image (void); @@ -324,6 +321,7 @@ static gint sel_x1, sel_y1, sel_x2, sel_y2; static gint sel_width, sel_height; gint preview_width, preview_height; gdouble scale_x_factor, scale_y_factor; +GdkPixbuf *back_pixbuf = NULL; static gdouble org_scale_x_factor, org_scale_y_factor; MAIN () @@ -366,7 +364,6 @@ run (const gchar *name, GimpDrawable *drawable; GimpRunMode run_mode; GimpPDBStatusType status = GIMP_PDB_SUCCESS; - gint pwidth, pheight; INIT_I18N (); @@ -381,6 +378,9 @@ run (const gchar *name, values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = status; + gfig_context = (GFigContext*)g_malloc (sizeof (GFigContext)); + gfig_context->show_background = TRUE; + gfig_select_drawable = drawable = gimp_drawable_get (param[2].data.d_drawable); /* TMP Hack - clear any selections */ @@ -393,6 +393,7 @@ run (const gchar *name, sel_width = sel_x2 - sel_x1; sel_height = sel_y2 - sel_y1; + /* Calculate preview size */ if (sel_width > sel_height) @@ -405,6 +406,7 @@ run (const gchar *name, pheight = MIN (sel_height, PREVIEW_SIZE); pwidth = sel_width * pheight / sel_height; } + preview_width = MAX (pwidth, 2); /* Min size is 2 */ preview_height = MAX (pheight, 2); @@ -2521,7 +2523,6 @@ options_page (void) GtkWidget *table; GtkWidget *combo; GtkWidget *toggle; - GtkWidget *button; GtkWidget *vbox; GtkObject *size_data; @@ -2536,25 +2537,18 @@ options_page (void) /* Put buttons in */ toggle = gtk_check_button_new_with_label (_("Show image")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), + gfig_context->show_background); gtk_table_attach (GTK_TABLE (table), toggle, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), - &selvals.showimage); + &gfig_context->show_background); g_signal_connect (toggle, "toggled", - G_CALLBACK (toggle_show_image), + G_CALLBACK (gfig_preview_expose), NULL); gtk_widget_show (toggle); - button = gtk_button_new_with_label (_("Reload image")); - gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 2, 0); - g_signal_connect (button, "clicked", - G_CALLBACK (reload_button_callback), - NULL); - gimp_table_attach_aligned (GTK_TABLE (table), 0, 0, - NULL, 0, 0, - button, 1, TRUE); - combo = gimp_int_combo_box_new (_("Rectangle"), RECT_GRID, _("Polar"), POLAR_GRID, _("Isometric"), ISO_GRID, @@ -2621,15 +2615,6 @@ options_page (void) gtk_widget_show (toggle); gfig_opt_widget.showcontrol = toggle; - button = gtk_button_new_with_label (_("About")); - gtk_misc_set_padding (GTK_MISC (GTK_BIN (button)->child), 8, 0); - gtk_table_attach (GTK_TABLE (table), button, 1, 3, 5, 6, - 0, 0, 0, 0); - g_signal_connect (button, "clicked", - G_CALLBACK (about_button_callback), - NULL); - gtk_widget_show (button); - return vbox; } @@ -2893,8 +2878,30 @@ gfig_dialog (void) GtkWidget *vbox; GtkWidget *notebook; GtkWidget *page; + gint tmpwidth, tmpheight; + gint bpp, rowstride; + guchar *back_data; gimp_ui_init ("gfig", TRUE); + + tmpwidth = preview_width; + tmpheight = preview_height; + + back_data = gimp_image_get_thumbnail_data (gfig_image, + &tmpwidth, &tmpheight, &bpp); + + rowstride = tmpwidth * bpp; + + /* we only handle RGB because GdkPixbuf doesn't do grayscale */ + if (bpp == 3) + back_pixbuf = gdk_pixbuf_new_from_data (back_data, GDK_COLORSPACE_RGB, FALSE, + 8, tmpwidth, tmpheight, rowstride, + NULL, NULL); + else if (bpp == 4) + back_pixbuf = gdk_pixbuf_new_from_data (back_data, GDK_COLORSPACE_RGB, TRUE, + 8, tmpwidth, tmpheight, rowstride, + NULL, NULL); + gfig_stock_init (); gfig_path = gimp_gimprc_query ("gfig-path"); @@ -3017,6 +3024,9 @@ gfig_dialog (void) /* Popup for list area */ gfig_op_menu_create (top_level_dlg); + /* clear anything that might be loaded at this point */ + gfig_response (top_level_dlg, RESPONSE_CLEAR, NULL); + gtk_main (); gimp_image_delete (brush_image_ID); @@ -3642,73 +3652,6 @@ gfig_paint_callback (void) gimp_displays_flush (); } -static void -reload_button_callback (GtkWidget *widget, - gpointer data) -{ - refill_cache (gfig_select_drawable); - draw_grid_clear (); -} - -static void -about_button_callback (GtkWidget *widget, - gpointer data) -{ - GtkWidget *window; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *image; - - window = gimp_dialog_new (_("About Gfig"), "gfig", - NULL, 0, - gimp_standard_help_func, HELP_ID, - - GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, - - NULL); - - g_signal_connect (window, "response", - G_CALLBACK (gtk_widget_destroy), - NULL); - - hbox = gtk_hbox_new (FALSE, 12); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), - hbox, TRUE, TRUE, 0); - gtk_widget_show (hbox); - - vbox = gtk_vbox_new (FALSE, 12); - gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); - gtk_widget_show (vbox); - - image = gtk_image_new_from_stock (GFIG_STOCK_LOGO, GTK_ICON_SIZE_DIALOG); - gtk_box_pack_start (GTK_BOX (hbox), image, TRUE, TRUE, 0); - gtk_widget_show (image); - - label = gtk_label_new (_("Gfig - GIMP plug-in")); - gtk_misc_set_padding (GTK_MISC (label), 2, 2); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - - label = gtk_label_new (_("Release 2.0")); - gtk_misc_set_padding (GTK_MISC (label), 2, 2); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - - label = gtk_label_new ("Andy Thomas"); - gtk_misc_set_padding (GTK_MISC (label), 2, 2); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - - label = gtk_label_new ("Isometric grid By Rob Saunders"); - gtk_misc_set_padding (GTK_MISC (label), 2, 2); - gtk_widget_show (label); - gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); - - gtk_widget_show (window); -} - static void rescan_button_callback (GtkWidget *widget, gpointer data) diff --git a/plug-ins/gfig/gfig.h b/plug-ins/gfig/gfig.h index 8a9967b2b5..5df3fd0f07 100644 --- a/plug-ins/gfig/gfig.h +++ b/plug-ins/gfig/gfig.h @@ -41,6 +41,7 @@ extern gint32 gfig_image; extern gint32 gfig_drawable; extern GdkGC *gfig_gc; extern gdouble scale_x_factor, scale_y_factor; +extern GdkPixbuf *back_pixbuf; extern GtkWidget *gfig_preview; extern GtkWidget *pic_preview; @@ -170,6 +171,13 @@ typedef struct DFigObj GtkWidget *pixmap_widget; } GFigObj; +typedef struct +{ + gboolean show_background; +} GFigContext; + +GFigContext *gfig_context; + extern GFigObj *current_obj; extern GFigObj *pic_obj; @@ -179,50 +187,52 @@ extern SelectItVals selvals; void add_to_all_obj (GFigObj * fobj, Dobject *obj); gchar *get_line (gchar *buf, - gint s, - FILE *from, - gint init); + gint s, + FILE *from, + gint init); -void scale_to_xy (gdouble *list, - gint size); -void scale_to_original_xy (gdouble *list, - gint size); +void scale_to_xy (gdouble *list, + gint size); +void scale_to_original_xy (gdouble *list, + gint size); void reverse_pairs_list (gdouble *list, - gint size); + gint size); void gfig_paint (BrushType brush_type, - gint32 drawable_ID, - gint seg_count, - gdouble line_pnts[]); + gint32 drawable_ID, + gint seg_count, + gdouble line_pnts[]); void draw_circle (GdkPoint *p); void draw_sqr (GdkPoint *p); void list_button_update (GFigObj *obj); -void num_sides_dialog (gchar *d_title, - gint *num_sides, - gint *which_way, - gint adj_min, - gint adj_max); -void toggle_obj_type (GtkWidget *widget, - gpointer data); +void num_sides_dialog (gchar *d_title, + gint *num_sides, + gint *which_way, + gint adj_min, + gint adj_max); +void toggle_obj_type (GtkWidget *widget, + gpointer data); -void setup_undo (void); -void draw_grid_clear (void); -void prepend_to_all_obj (GFigObj *fobj, - DAllObjs *nobj); +void setup_undo (void); +void draw_grid_clear (void); +void prepend_to_all_obj (GFigObj *fobj, + DAllObjs *nobj); -void gfig_draw_arc (gint x, - gint y, - gint width, - gint height, - gint angle1, - gint angle2); +void gfig_draw_arc (gint x, + gint y, + gint width, + gint height, + gint angle1, + gint angle2); -void gfig_draw_line (gint x0, - gint y0, - gint x1, - gint y1); +void gfig_draw_line (gint x0, + gint y0, + gint x1, + gint y1); +gboolean gfig_preview_expose (GtkWidget *widget, + GdkEvent *event); #endif /* __GFIG_H__ */