if (!phd->histogram_width || !phd->histogram_height || !phd->fd) return;
/* histmap_get is relatively expensive, run it only when we really need it
- and with lower priority than pixbuf_renderer
+ 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 (phd->fd == NULL) return FALSE;
histmap = histmap_get(phd->fd);
- if (!histmap)
+ if (!histmap)
{
histmap_start_idle(phd->fd);
return FALSE;
static void bar_pane_histogram_notify_cb(FileData *fd, NotifyType type, gpointer data)
{
PaneHistogramData *phd = data;
- if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_HISTMAP | NOTIFY_PIXBUF)) && fd == phd->fd)
+ if ((type & (NOTIFY_REREAD | NOTIFY_CHANGE | NOTIFY_HISTMAP | NOTIFY_PIXBUF)) && fd == phd->fd)
{
DEBUG_1("Notify pane_histogram: %s %04x", fd->path, type);
bar_pane_histogram_update(phd);
}
}
-static gboolean bar_pane_histogram_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+#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->pixbuf) return TRUE;
- gdk_draw_pixbuf(widget->window,
-#if GTK_CHECK_VERSION(2,20,0)
- widget->style->fg_gc[gtk_widget_get_state(widget)],
+ gdk_cairo_set_source_pixbuf(cr, phd->pixbuf, 0, 0);
+ cairo_paint (cr);
+
+ return TRUE;
+}
+
#else
- widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
-#endif
- phd->pixbuf,
- 0, 0,
- 0, 0,
- -1, -1,
- GDK_RGB_DITHER_NORMAL, 0, 0);
+static gboolean bar_pane_histogram_expose_event_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data)
+{
+ PaneHistogramData *phd = data;
+ if (!phd) return TRUE;
+
+ if (phd->need_update)
+ {
+ bar_pane_histogram_update(phd);
+ }
+
+ if (!phd->pixbuf) return TRUE;
+
+ cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget));
+ gdk_cairo_set_source_pixbuf (cr, phd->pixbuf, 0, 0);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+
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);
- g_signal_connect(G_OBJECT(phd->drawing_area), "expose_event",
+#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);