SIGNAL_ZOOM = 0,
SIGNAL_CLICKED,
SIGNAL_SCROLL_NOTIFY,
+ SIGNAL_RENDER_COMPLETE,
SIGNAL_COUNT
};
PROP_SCROLL_RESET,
PROP_DELAY_FLIP,
PROP_LOADING,
+ PROP_COMPLETE,
PROP_CACHE_SIZE_DISPLAY,
PROP_CACHE_SIZE_TILES,
PROP_WINDOW_FIT,
GValue *value, GParamSpec *pspec);
static gint pixbuf_renderer_expose(GtkWidget *widget, GdkEventExpose *event);
+static void pr_render_complete_signal(PixbufRenderer *pr);
static void pr_overlay_list_clear(PixbufRenderer *pr);
static void pr_scroller_timer_set(PixbufRenderer *pr, gint start);
FALSE,
G_PARAM_READABLE | G_PARAM_WRITABLE));
+ g_object_class_install_property(gobject_class,
+ PROP_COMPLETE,
+ g_param_spec_boolean("complete",
+ "Image rendering complete",
+ NULL,
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_WRITABLE));
+
g_object_class_install_property(gobject_class,
PROP_CACHE_SIZE_DISPLAY,
g_param_spec_uint("cache_display",
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ signals[SIGNAL_RENDER_COMPLETE] =
+ g_signal_new("render-complete",
+ G_OBJECT_CLASS_TYPE(gobject_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET(PixbufRendererClass, render_complete),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
static void pixbuf_renderer_init(PixbufRenderer *pr)
case PROP_LOADING:
pr->loading = g_value_get_boolean(value);
break;
+ case PROP_COMPLETE:
+ pr->complete = g_value_get_boolean(value);
+ break;
case PROP_CACHE_SIZE_DISPLAY:
pr->tile_cache_max = g_value_get_uint(value);
break;
case PROP_LOADING:
g_value_set_boolean(value, pr->loading);
break;
+ case PROP_COMPLETE:
+ g_value_set_boolean(value, pr->complete);
+ break;
case PROP_CACHE_SIZE_DISPLAY:
g_value_set_uint(value, pr->tile_cache_max);
break;
(!pr->draw_queue && !pr->draw_queue_2pass) ||
pr->draw_idle_id == -1)
{
-#if 0
- if (!pr->completed) image_complete_util(pr, FALSE);
-#endif
+ pr_render_complete_signal(pr);
pr->draw_idle_id = -1;
return FALSE;
if (!pr->draw_queue && !pr->draw_queue_2pass)
{
-#if 0
- if (!pr->completed) image_complete_util(pr, FALSE);
-#endif
+ pr_render_complete_signal(pr);
pr->draw_idle_id = -1;
return FALSE;
g_signal_emit(pr, signals[SIGNAL_ZOOM], 0, pr->zoom);
}
+static void pr_clicked_signal(PixbufRenderer *pr, GdkEventButton *bevent)
+{
+ g_signal_emit(pr, signals[SIGNAL_CLICKED], 0, bevent);
+}
+
static void pr_scroll_notify_signal(PixbufRenderer *pr)
{
g_signal_emit(pr, signals[SIGNAL_SCROLL_NOTIFY], 0);
}
-static void pr_button_signal(PixbufRenderer *pr, GdkEventButton *bevent)
+static void pr_render_complete_signal(PixbufRenderer *pr)
{
- g_signal_emit(pr, signals[SIGNAL_CLICKED], 0, bevent);
+ if (!pr->complete)
+ {
+ g_signal_emit(pr, signals[SIGNAL_RENDER_COMPLETE], 0);
+ g_object_set(G_OBJECT(pr), "complete", TRUE, NULL);
+ }
}
/*
pr->drag_moved = 0;
break;
case 3:
- pr_button_signal(pr, bevent);
+ pr_clicked_signal(pr, bevent);
break;
default:
break;
}
else if (bevent->button == 1 || bevent->button == 2)
{
- pr_button_signal(pr, bevent);
+ pr_clicked_signal(pr, bevent);
}
}