mirror of https://github.com/GNOME/gimp.git
plug-ins: separate preview computation from drawing in map-object
This commit is contained in:
parent
5173b8559c
commit
9912e3f4ee
|
@ -32,8 +32,14 @@ static BackBuffer backbuf = { 0, 0, 0, 0, NULL };
|
|||
/* Protos */
|
||||
/* ====== */
|
||||
|
||||
static void draw_light_marker (gint xpos,
|
||||
gint ypos);
|
||||
static void compute_preview (gint x,
|
||||
gint y,
|
||||
gint w,
|
||||
gint h,
|
||||
gint pw,
|
||||
gint ph);
|
||||
static void draw_light_marker (gint xpos,
|
||||
gint ypos);
|
||||
static void clear_light_marker (void);
|
||||
|
||||
/**************************************************************/
|
||||
|
@ -41,7 +47,7 @@ static void clear_light_marker (void);
|
|||
/* dimensions (w,h), placing the result in preview_RGB_data. */
|
||||
/**************************************************************/
|
||||
|
||||
void
|
||||
static void
|
||||
compute_preview (gint x,
|
||||
gint y,
|
||||
gint w,
|
||||
|
@ -330,7 +336,32 @@ update_light (gint xpos,
|
|||
/******************************************************************/
|
||||
|
||||
void
|
||||
draw_preview_image (gint docompute)
|
||||
compute_preview_image (void)
|
||||
{
|
||||
GdkDisplay *display = gtk_widget_get_display (previewarea);
|
||||
GdkCursor *cursor;
|
||||
gint startx, starty, pw, ph;
|
||||
|
||||
pw = PREVIEW_WIDTH * mapvals.zoom;
|
||||
ph = PREVIEW_HEIGHT * mapvals.zoom;
|
||||
startx = (PREVIEW_WIDTH - pw) / 2;
|
||||
starty = (PREVIEW_HEIGHT - ph) / 2;
|
||||
|
||||
cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
|
||||
gdk_window_set_cursor (gtk_widget_get_window (previewarea), cursor);
|
||||
gdk_cursor_unref (cursor);
|
||||
|
||||
compute_preview (0, 0, width - 1, height - 1, pw, ph);
|
||||
|
||||
cursor = gdk_cursor_new_for_display (display, GDK_HAND2);
|
||||
gdk_window_set_cursor(gtk_widget_get_window (previewarea), cursor);
|
||||
gdk_cursor_unref (cursor);
|
||||
|
||||
clear_light_marker ();
|
||||
}
|
||||
|
||||
void
|
||||
draw_preview_image (void)
|
||||
{
|
||||
gint startx, starty, pw, ph;
|
||||
GdkColor color;
|
||||
|
@ -348,27 +379,6 @@ draw_preview_image (gint docompute)
|
|||
startx = (PREVIEW_WIDTH - pw) / 2;
|
||||
starty = (PREVIEW_HEIGHT - ph) / 2;
|
||||
|
||||
if (docompute == TRUE)
|
||||
{
|
||||
GdkDisplay *display = gtk_widget_get_display (previewarea);
|
||||
GdkCursor *cursor;
|
||||
|
||||
cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
|
||||
gdk_window_set_cursor (gtk_widget_get_window (previewarea), cursor);
|
||||
gdk_cursor_unref (cursor);
|
||||
|
||||
compute_preview (0, 0, width - 1, height - 1, pw, ph);
|
||||
|
||||
cursor = gdk_cursor_new_for_display (display, GDK_HAND2);
|
||||
gdk_window_set_cursor(gtk_widget_get_window (previewarea), cursor);
|
||||
gdk_cursor_unref (cursor);
|
||||
|
||||
clear_light_marker ();
|
||||
}
|
||||
|
||||
if (pw != PREVIEW_WIDTH || ph != PREVIEW_HEIGHT)
|
||||
gdk_window_clear (gtk_widget_get_window (previewarea));
|
||||
|
||||
cairo_set_source_surface (cr, preview_surface, startx, starty);
|
||||
cairo_rectangle (cr, startx, starty, pw, ph);
|
||||
cairo_clip (cr);
|
||||
|
|
|
@ -13,13 +13,8 @@ extern gint lightx,lighty;
|
|||
/* Externally visible functions */
|
||||
/* ============================ */
|
||||
|
||||
void compute_preview (gint x,
|
||||
gint y,
|
||||
gint w,
|
||||
gint h,
|
||||
gint pw,
|
||||
gint ph);
|
||||
void draw_preview_image (gint docompute);
|
||||
void compute_preview_image (void);
|
||||
void draw_preview_image (void);
|
||||
gint check_light_hit (gint xpos,
|
||||
gint ypos);
|
||||
void update_light (gint xpos,
|
||||
|
|
|
@ -80,7 +80,9 @@ double_adjustment_update (GtkAdjustment *adjustment,
|
|||
gimp_double_adjustment_update (adjustment, data);
|
||||
|
||||
if (mapvals.livepreview)
|
||||
draw_preview_image (TRUE);
|
||||
compute_preview_image ();
|
||||
|
||||
gtk_widget_queue_draw (previewarea);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -124,7 +126,8 @@ toggle_update (GtkWidget *widget,
|
|||
{
|
||||
gimp_toggle_button_update (widget, data);
|
||||
|
||||
draw_preview_image (TRUE);
|
||||
compute_preview_image ();
|
||||
gtk_widget_queue_draw (previewarea);
|
||||
}
|
||||
|
||||
/*****************************************/
|
||||
|
@ -154,7 +157,9 @@ lightmenu_callback (GtkWidget *widget,
|
|||
}
|
||||
|
||||
if (mapvals.livepreview)
|
||||
draw_preview_image (TRUE);
|
||||
compute_preview_image ();
|
||||
|
||||
gtk_widget_queue_draw (previewarea);
|
||||
}
|
||||
|
||||
/***************************************/
|
||||
|
@ -170,7 +175,9 @@ mapmenu_callback (GtkWidget *widget,
|
|||
|
||||
gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), (gint *) data);
|
||||
|
||||
draw_preview_image (TRUE);
|
||||
compute_preview_image ();
|
||||
|
||||
gtk_widget_queue_draw (previewarea);
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (options_note_book));
|
||||
n_children = g_list_length (children);
|
||||
|
@ -234,7 +241,9 @@ static void
|
|||
preview_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
draw_preview_image (TRUE);
|
||||
compute_preview_image ();
|
||||
|
||||
gtk_widget_queue_draw (previewarea);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -242,7 +251,9 @@ zoomed_callback (GimpZoomModel *model)
|
|||
{
|
||||
mapvals.zoom = gimp_zoom_model_get_factor (model);
|
||||
|
||||
draw_preview_image (TRUE);
|
||||
compute_preview_image ();
|
||||
|
||||
gtk_widget_queue_draw (previewarea);
|
||||
}
|
||||
|
||||
/**********************************************/
|
||||
|
@ -289,7 +300,7 @@ preview_events (GtkWidget *area,
|
|||
switch (event->type)
|
||||
{
|
||||
case GDK_EXPOSE:
|
||||
draw_preview_image (FALSE);
|
||||
draw_preview_image ();
|
||||
break;
|
||||
|
||||
case GDK_ENTER_NOTIFY:
|
||||
|
@ -315,7 +326,9 @@ preview_events (GtkWidget *area,
|
|||
case GDK_BUTTON_RELEASE:
|
||||
if (light_hit == TRUE)
|
||||
{
|
||||
draw_preview_image (TRUE);
|
||||
compute_preview_image ();
|
||||
|
||||
gtk_widget_queue_draw (previewarea);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1360,7 +1373,8 @@ main_dialog (GimpDrawable *drawable)
|
|||
}
|
||||
|
||||
image_setup (drawable, TRUE);
|
||||
draw_preview_image (TRUE);
|
||||
|
||||
compute_preview_image ();
|
||||
|
||||
if (gimp_dialog_run (GIMP_DIALOG (appwin)) == GTK_RESPONSE_OK)
|
||||
run = TRUE;
|
||||
|
|
Loading…
Reference in New Issue