Re: [Gimp-developer] Problem refreshing GimpPreviewArea

Top Page

Reply to this message
Author: Nicolás Serrano Martínez Santos
Date:  
To: gimp-developer
Subject: Re: [Gimp-developer] Problem refreshing GimpPreviewArea
>
> Can you show us some example code?
>


Of course!

-----------------------------------------------------------


(When the plugin dialog appears it creates a layer that changes when
you are changing the options. This layer has variable size and I use
GimpDrawablePreview in order to see it at it's real size.

....

/* clear the current preview and get the new line adjusted drawable */
gimp_image_remove_layer(m->image_id,*(m->layer));
gimp_drawable_detach(*(m->d));
*(m->layer) = gimp_layer_copy(m->back_layer);
gimp_image_add_layer(m->image_id,*(m->layer),-1);
width = x2-x1; height = (y2-y1;
gimp_layer_resize(*(m->layer),width,height,-x1,-y1);
d_id = gimp_image_get_active_drawable(m->image_id);
*(m->d) = gimp_drawable_get(d_id);

refresh_preview((GimpPreviewArea *) m->preview,*(m->d));
}

void refresh_preview(GimpPreviewArea *p, GimpDrawable *d){
gint width, height; GimpPixelRgn rgn_input; guchar *buf;

width = gimp_drawable_width(d->drawable_id);
height = gimp_drawable_height(d->drawable_id);
buf = g_new(guchar,width*height*3);
gimp_pixel_rgn_init (&rgn_input,
d,
0,0,
width, height,
FALSE, FALSE);
gimp_pixel_rgn_get_rect(&rgn_input,buf,0,0,width,height);
gtk_widget_set_size_request((GtkWidget *) p,width,height);
gimp_preview_area_draw(p,0,0,width,
height,GIMP_RGB_IMAGE,buf,3*width); /* always RGB    */
g_free(buf);
}
--------------------------------------

As I commented if the size of drawable shown changes it isn't
refreshed. On the other hand if immediately after a layer of the same
size is shown it's refreshed (or if you minimize the dialog window).


_______________________________________________
Gimp-developer mailing list
Gimp-developer@???
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer