diff --git a/ChangeLog b/ChangeLog index f35fc7dff9..9a8aaecbf1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-07-31 Shlomi Fish + + * plug-ins/gimpressionist/brush.c + * plug-ins/gimpressionist/orientmap.c + * plug-ins/gimpressionist/paper.c + * plug-ins/gimpressionist/preview.c + * plug-ins/gimpressionist/size.c: + Converted the code from using GtkPreview to GimpPreviewArea. + 2004-07-30 Seth Burgess * plug-ins/common/gauss.c: added some non-interactive modes (if called diff --git a/plug-ins/gimpressionist/brush.c b/plug-ins/gimpressionist/brush.c index 52dfecb262..457869d08a 100644 --- a/plug-ins/gimpressionist/brush.c +++ b/plug-ins/gimpressionist/brush.c @@ -294,16 +294,15 @@ static void update_brush_preview (const gchar *fn) { gint i, j; - guchar buf[100]; + guchar *preview_image; if(fn) brush_from_file = 1; + preview_image = g_new0(guchar, 100*100); + if (!fn && brush_from_file) { - memset(buf, 0, 100); - for(i = 0; i < 100; i++) { - gtk_preview_draw_row (GTK_PREVIEW (brush_preview), buf, 0, i, 100); - } + /* preview_image is already initialized to our liking. */ } else { double sc; ppm_t p = {0,0,NULL}; @@ -332,21 +331,29 @@ update_brush_preview (const gchar *fn) padbrush (&p, 100, 100); for(i = 0; i < 100; i++) { int k = i * p.width * 3; - memset(buf,0,100); if(i < p.height) for(j = 0; j < p.width; j++) - buf[j] = gammatable[p.col[k + j * 3]]; - gtk_preview_draw_row (GTK_PREVIEW (brush_preview), buf, 0, i, 100); + preview_image[i*100+j] = gammatable[p.col[k + j * 3]]; } ppm_kill(&p); } - gtk_widget_queue_draw (brush_preview); + gimp_preview_area_draw (GIMP_PREVIEW_AREA (brush_preview), + 0, 0, 100, 100, + GIMP_GRAY_IMAGE, + preview_image, + 100); + + g_free (preview_image); } static gboolean brush_dont_update = FALSE; +/* + * "force" implies here to change the brush even if it was the same. + * It is used for the initialization of the preview. + * */ static void -brush_select (GtkTreeSelection *selection) +brush_select (GtkTreeSelection *selection, gboolean force) { GtkTreeIter iter; GtkTreeModel *model; @@ -377,7 +384,12 @@ brush_select (GtkTreeSelection *selection) else { if (!strcmp (last_selected_brush, brush)) - goto cleanup; + { + if (!force) + { + goto cleanup; + } + } else { g_free (last_selected_brush); @@ -413,7 +425,15 @@ brush_select_file (GtkTreeSelection *selection, gpointer data) { brush_from_file = 1; preset_save_button_set_sensitive (TRUE); - brush_select (selection); + brush_select (selection, FALSE); +} + +static void +brush_preview_size_allocate (GtkWidget *preview) +{ + GtkTreeSelection *selection; + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (brush_list)); + brush_select (selection, TRUE); } static void @@ -460,10 +480,12 @@ create_brushpage(GtkNotebook *notebook) gtk_box_pack_start(GTK_BOX (box2), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - brush_preview = tmpw = gtk_preview_new (GTK_PREVIEW_GRAYSCALE); - gtk_preview_size (GTK_PREVIEW (tmpw), 100, 100); + brush_preview = tmpw = gimp_preview_area_new (); + gtk_widget_set_size_request (brush_preview, 100, 100); gtk_container_add (GTK_CONTAINER (frame), tmpw); gtk_widget_show (tmpw); + g_signal_connect (brush_preview, "size-allocate", + G_CALLBACK(brush_preview_size_allocate), NULL); box3 = gtk_vbox_new (FALSE, 2); gtk_box_pack_end (GTK_BOX (box2), box3, FALSE, FALSE,0); @@ -548,7 +570,7 @@ create_brushpage(GtkNotebook *notebook) G_CALLBACK (gimp_double_adjustment_update), &pcvals.brush_relief); - brush_select (selection); + brush_select (selection, FALSE); readdirintolist ("Brushes", view, pcvals.selected_brush); /* diff --git a/plug-ins/gimpressionist/orientmap.c b/plug-ins/gimpressionist/orientmap.c index b85ba18efd..53a06328fc 100644 --- a/plug-ins/gimpressionist/orientmap.c +++ b/plug-ins/gimpressionist/orientmap.c @@ -151,11 +151,11 @@ static void update_orient_map_preview_prev (void) ppm_put_rgb (&update_om_preview_nbuffer, x-xo, y-yo, white); } - for (y = 0; y < OMHEIGHT; y++) - gtk_preview_draw_row (GTK_PREVIEW (orient_map_preview_prev), - (guchar *) update_om_preview_nbuffer.col + - y * OMWIDTH * 3, 0, y, - OMWIDTH); + gimp_preview_area_draw (GIMP_PREVIEW_AREA (orient_map_preview_prev), + 0, 0, OMWIDTH, OMHEIGHT, + GIMP_RGB_IMAGE, + (guchar *)update_om_preview_nbuffer.col, + OMWIDTH * 3); gtk_widget_queue_draw (orient_map_preview_prev); @@ -213,13 +213,11 @@ static void update_vector_prev(void) ppm_put_rgb (&update_vector_preview_buffer, x-xo, y-yo, white); } - for (y = 0; y < OMHEIGHT; y++) - gtk_preview_draw_row (GTK_PREVIEW (vector_preview), - (guchar *) update_vector_preview_buffer.col + - y * OMWIDTH * 3, - 0, y, OMWIDTH); - - gtk_widget_queue_draw (vector_preview); + gimp_preview_area_draw (GIMP_PREVIEW_AREA (vector_preview), + 0, 0, OMWIDTH, OMHEIGHT, + GIMP_RGB_IMAGE, + (guchar *)update_vector_preview_buffer.col, + OMWIDTH * 3); } void orientation_map_free_resources() @@ -475,8 +473,8 @@ void create_orientmap_dialog(void) "Middle-click to add a new vector."), NULL); gtk_box_pack_start(GTK_BOX(hbox), ebox, FALSE, FALSE, 0); - tmpw = vector_preview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (tmpw), OMWIDTH, OMHEIGHT); + tmpw = vector_preview = gimp_preview_area_new (); + gtk_widget_set_size_request (tmpw, OMWIDTH, OMHEIGHT); gtk_container_add (GTK_CONTAINER (ebox), tmpw); gtk_widget_show (tmpw); gtk_widget_add_events (ebox, GDK_BUTTON_PRESS_MASK); @@ -498,8 +496,8 @@ void create_orientmap_dialog(void) gtk_table_attach(GTK_TABLE(table1), tmpw, 1,2,0,1,GTK_EXPAND,GTK_EXPAND,0,0); gtk_widget_show(tmpw); - tmpw = orient_map_preview_prev = gtk_preview_new(GTK_PREVIEW_COLOR); - gtk_preview_size(GTK_PREVIEW(tmpw), OMWIDTH, OMHEIGHT); + tmpw = orient_map_preview_prev = gimp_preview_area_new (); + gtk_widget_set_size_request (tmpw, OMWIDTH, OMHEIGHT);; gtk_container_add(GTK_CONTAINER(tmpw2), tmpw); gtk_widget_show(tmpw); diff --git a/plug-ins/gimpressionist/paper.c b/plug-ins/gimpressionist/paper.c index 8fa1a27556..18002f9072 100644 --- a/plug-ins/gimpressionist/paper.c +++ b/plug-ins/gimpressionist/paper.c @@ -29,7 +29,7 @@ static GtkWidget *paper_overlay = NULL; static void paper_update_preview(void) { gint i, j; - guchar buf[100]; + guchar *buf,*paper_preview_buffer; gdouble sc; ppm_t p = {0,0,NULL}; @@ -37,9 +37,9 @@ static void paper_update_preview(void) sc = p.width > p.height ? p.width : p.height; sc = 100.0 / sc; resize(&p, p.width*sc,p.height*sc); - for (i = 0; i < 100; i++) { + paper_preview_buffer = g_new0 (guchar, 100*100); + for (i = 0, buf = paper_preview_buffer; i < 100; i++, buf += 100) { int k = i * p.width * 3; - memset(buf, 0, 100); if(i < p.height) { for(j = 0; j < p.width; j++) buf[j] = p.col[k + j * 3]; @@ -47,9 +47,15 @@ static void paper_update_preview(void) for (j = 0; j < p.width; j++) buf[j] = 255 - buf[j]; } - gtk_preview_draw_row (GTK_PREVIEW (paper_preview), buf, 0, i, 100); } + gimp_preview_area_draw (GIMP_PREVIEW_AREA (paper_preview), + 0, 0, 100, 100, + GIMP_GRAY_IMAGE, + paper_preview_buffer, + 100); + ppm_kill(&p); + g_free (paper_preview_buffer); gtk_widget_queue_draw (paper_preview); } @@ -129,8 +135,8 @@ void create_paperpage(GtkNotebook *notebook) gtk_box_pack_start(GTK_BOX (box2), frame, FALSE, FALSE, 0); gtk_widget_show (frame); - paper_preview = tmpw = gtk_preview_new (GTK_PREVIEW_GRAYSCALE); - gtk_preview_size(GTK_PREVIEW (tmpw), 100, 100); + paper_preview = tmpw = gimp_preview_area_new (); + gtk_widget_set_size_request (tmpw, 100, 100); gtk_container_add (GTK_CONTAINER (frame), tmpw); gtk_widget_show(tmpw); diff --git a/plug-ins/gimpressionist/preview.c b/plug-ins/gimpressionist/preview.c index 4a8814feb2..c8d5a2be18 100644 --- a/plug-ins/gimpressionist/preview.c +++ b/plug-ins/gimpressionist/preview.c @@ -68,8 +68,6 @@ void preview_free_resources (void) void updatepreview (GtkWidget *wg, gpointer d) { - gint i; - /* This portion is remmed out because of the remming out of the * code below. * -- Shlomi Fish @@ -88,13 +86,17 @@ updatepreview (GtkWidget *wg, gpointer d) * */ #if 0 if (!PPM_IS_INITED (&infile) && !d) { + guchar *buffer; - memset(buf, 0, sizeof(buf)); - for(i = 0; i < PREVIEWSIZE; i++) - { - gtk_preview_draw_row (GTK_PREVIEW(preview), buf, 0, i, PREVIEWSIZE); - } - } + buffer = g_new0 (guchar, 3*PREVIEWSIZE*PREVIEWSIZE); + gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview), + 0, 0, PREVIEWSIZE, PREVIEWSIZE, + GIMP_RGB_IMAGE, + buffer, + PREVIEWSIZE * 3); + + g_free (buffer); + } else #endif { @@ -126,18 +128,22 @@ updatepreview (GtkWidget *wg, gpointer d) if(img_has_alpha) drawalpha(&preview_ppm, &alpha_ppm); - for(i = 0; i < PREVIEWSIZE; i++) - { - gtk_preview_draw_row(GTK_PREVIEW(preview), - (guchar*) &preview_ppm.col[i * PREVIEWSIZE * 3], 0, i, - PREVIEWSIZE); - } + gimp_preview_area_draw (GIMP_PREVIEW_AREA (preview), + 0, 0, PREVIEWSIZE, PREVIEWSIZE, + GIMP_RGB_IMAGE, + preview_ppm.col, + PREVIEWSIZE * 3); + ppm_kill(&preview_ppm); if(img_has_alpha) ppm_kill(&alpha_ppm); } +} - gtk_widget_queue_draw (preview); +static void +preview_size_allocate (GtkWidget *preview) +{ + updatepreview (preview, GINT_TO_POINTER (0)); } GtkWidget * @@ -155,10 +161,14 @@ create_preview (void) gtk_box_pack_start(GTK_BOX (vbox), frame, FALSE, FALSE, 5); gtk_widget_show (frame); - preview = gtk_preview_new (GTK_PREVIEW_COLOR); - gtk_preview_size (GTK_PREVIEW (preview), PREVIEWSIZE, PREVIEWSIZE); + preview = gimp_preview_area_new (); + gtk_widget_set_size_request (preview, PREVIEWSIZE, PREVIEWSIZE); + gtk_container_add (GTK_CONTAINER (frame), preview); gtk_widget_show (preview); + /* This is so the preview will be displayed when the dialog is invoked. */ + g_signal_connect (preview, "size-allocate", + G_CALLBACK (preview_size_allocate), NULL); hbox = gtk_hbox_new (TRUE, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); diff --git a/plug-ins/gimpressionist/sizemap.c b/plug-ins/gimpressionist/sizemap.c index 5f0ed2dc8b..904c110200 100644 --- a/plug-ins/gimpressionist/sizemap.c +++ b/plug-ins/gimpressionist/sizemap.c @@ -78,12 +78,12 @@ static void updatesmpreviewprev(void) } } - for (y = 0; y < OMHEIGHT; y++) - gtk_preview_draw_row (GTK_PREVIEW(smpreviewprev), - nsbuffer.col + y * nsbuffer.width * 3, - 0, y, OMWIDTH); - gtk_widget_queue_draw (smpreviewprev); + gimp_preview_area_draw (GIMP_PREVIEW_AREA (smpreviewprev), + 0, 0, OMWIDTH, OMHEIGHT, + GIMP_RGB_IMAGE, + nsbuffer.col, + OMWIDTH * 3); } static gint selectedsmvector = 0; @@ -139,13 +139,11 @@ static void updatesmvectorprev(void) ppm_put_rgb (&update_vector_preview_sbuffer, x, y, white); } - for (y = 0; y < OMHEIGHT; y++) - gtk_preview_draw_row (GTK_PREVIEW(smvectorprev), - update_vector_preview_sbuffer.col + - y * update_vector_preview_sbuffer.width * 3, - 0, y, OMWIDTH); - - gtk_widget_queue_draw (smvectorprev); + gimp_preview_area_draw (GIMP_PREVIEW_AREA (smvectorprev), + 0, 0, OMWIDTH, OMHEIGHT, + GIMP_RGB_IMAGE, + update_vector_preview_sbuffer.col, + OMWIDTH * 3); gtk_widget_set_sensitive (prev_button, (numsmvect > 1)); gtk_widget_set_sensitive (next_button, (numsmvect > 1)); @@ -397,8 +395,8 @@ void create_sizemap_dialog(void) gtk_box_pack_start(GTK_BOX(hbox), tmpw, FALSE, FALSE, 0); tmpw2 = tmpw; - tmpw = smvectorprev = gtk_preview_new(GTK_PREVIEW_COLOR); - gtk_preview_size(GTK_PREVIEW(tmpw), OMWIDTH, OMHEIGHT); + tmpw = smvectorprev = gimp_preview_area_new (); + gtk_widget_set_size_request (tmpw, OMWIDTH, OMHEIGHT); gtk_container_add(GTK_CONTAINER(tmpw2), tmpw); gtk_widget_show(tmpw); gtk_widget_add_events (tmpw2, GDK_BUTTON_PRESS_MASK); @@ -420,8 +418,8 @@ void create_sizemap_dialog(void) gtk_table_attach(GTK_TABLE(table1), tmpw, 1,2,0,1,GTK_EXPAND,GTK_EXPAND,0,0); gtk_widget_show(tmpw); - tmpw = smpreviewprev = gtk_preview_new(GTK_PREVIEW_COLOR); - gtk_preview_size(GTK_PREVIEW(tmpw), OMWIDTH, OMHEIGHT); + tmpw = smpreviewprev = gimp_preview_area_new (); + gtk_widget_set_size_request (tmpw, OMWIDTH, OMHEIGHT); gtk_container_add(GTK_CONTAINER(tmpw2), tmpw); gtk_widget_show(tmpw);