52 if(gtk_widget_get_allocated_height(widget) < 2 || gtk_widget_get_allocated_width(widget) < 2)
return TRUE;
54 GtkStateFlags
state = gtk_widget_get_state_flags(widget);
56 GdkRGBA *fg_color, *bg_color;
57 GtkStyleContext *context = gtk_widget_get_style_context(widget);
58 gtk_style_context_get(context,
state, GTK_STYLE_PROPERTY_COLOR, &fg_color, GTK_STYLE_PROPERTY_BACKGROUND_COLOR,
62 gtk_style_context_get_margin(context,
state, &margin);
63 gtk_widget_set_margin_bottom(widget, margin.bottom);
64 gtk_widget_set_margin_top(widget, margin.top);
65 gtk_widget_set_margin_start(widget, margin.left);
66 gtk_widget_set_margin_end(widget, margin.right);
68 if(fg_color->alpha == 0 && bg_color->alpha == 0)
71 gdk_rgba_free(fg_color);
72 gdk_rgba_free(bg_color);
78 gdk_cairo_set_source_rgba(cr, fg_color);
83 GtkAllocation allocation;
84 gtk_widget_get_allocation(widget, &allocation);
87 if(
state & GTK_STATE_FLAG_PRELIGHT)
90 flags &= ~CPF_PRELIGHT;
92 if(
state & GTK_STATE_FLAG_ACTIVE)
98 gtk_style_context_get_padding(context,
state, &padding);
100 const float icon_x = padding.left;
101 const float icon_y = padding.top;
102 const float icon_w = allocation.width - (padding.left + padding.right);
103 const float icon_h = allocation.height - (padding.top + padding.bottom);
109 if(icon_w > 0.f && icon_h > 0.f)
111 cr, icon_x, icon_y, icon_w, icon_h,
flags,
116 gtk_render_frame(context, cr, 0, 0, gtk_widget_get_allocated_width(widget),
117 gtk_widget_get_allocated_height(widget));
119 gdk_rgba_free(fg_color);
120 gdk_rgba_free(bg_color);
128 if(event->type == GDK_ENTER_NOTIFY)
129 gtk_widget_set_state_flags(widget, GTK_STATE_FLAG_PRELIGHT,
FALSE);
131 gtk_widget_unset_state_flags(widget, GTK_STATE_FLAG_PRELIGHT);
133 gtk_widget_queue_draw(widget);
155 static GType dtgtk_thumbnail_btn_type = 0;
156 if(!dtgtk_thumbnail_btn_type)
158 static const GTypeInfo dtgtk_thumbnail_btn_info = {
161 (GBaseFinalizeFunc)NULL,
169 dtgtk_thumbnail_btn_type
170 = g_type_register_static(GTK_TYPE_DRAWING_AREA,
"GtkDarktableThumbnailBtn", &dtgtk_thumbnail_btn_info, 0);
172 return dtgtk_thumbnail_btn_type;