/* histmap_get is relatively expensive, run it only when we really need it
and with lower priority than pixbuf_renderer
FIXME: this does not work for fullscreen*/
-#if GTK_CHECK_VERSION(2,20,0)
if (gtk_widget_is_drawable(phd->drawing_area))
-#else
- if (GTK_WIDGET_DRAWABLE(phd->drawing_area))
-#endif
{
if (!phd->idle_id)
{
}
}
+#if GTK_CHECK_VERSION(3,0,0)
+static gboolean bar_pane_histogram_draw_cb(GtkWidget *widget, cairo_t *cr, gpointer data)
+{
+ PaneHistogramData *phd = data;
+ if (!phd) return TRUE;
+
+ if (phd->need_update)
+ {
+ bar_pane_histogram_update(phd);
+ }
+
+ if (!phd->pixbuf) return TRUE;
+
+ gdk_cairo_set_source_pixbuf(cr, phd->pixbuf, 0, 0);
+ cairo_paint (cr);
+
+ return TRUE;
+}
+
+#else
static gboolean bar_pane_histogram_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
{
PaneHistogramData *phd = data;
return TRUE;
}
+#endif
static void bar_pane_histogram_size_cb(GtkWidget *widget, GtkAllocation *allocation, gpointer data)
{
bar_pane_histogram_update(phd);
}
-#if 0
-static void bar_pane_histogram_close(GtkWidget *pane)
-{
- PaneHistogramData *phd;
-
- phd = g_object_get_data(G_OBJECT(pane), "pane_data");
- if (!phd) return;
-
- gtk_widget_destroy(phd->widget);
-}
-#endif
-
static void bar_pane_histogram_destroy(GtkWidget *widget, gpointer data)
{
PaneHistogramData *phd = data;
g_signal_connect_after(G_OBJECT(phd->drawing_area), "size_allocate",
G_CALLBACK(bar_pane_histogram_size_cb), phd);
+#if GTK_CHECK_VERSION(3,0,0)
+ g_signal_connect(G_OBJECT(phd->drawing_area), "draw",
+ G_CALLBACK(bar_pane_histogram_draw_cb), phd);
+#else
g_signal_connect(G_OBJECT(phd->drawing_area), "expose_event",
G_CALLBACK(bar_pane_histogram_expose_event_cb), phd);
+#endif
gtk_box_pack_start(GTK_BOX(phd->widget), phd->drawing_area, TRUE, TRUE, 0);
gtk_widget_show(phd->drawing_area);