Skip to content

Commit

Permalink
fix header of first module at top of panel
Browse files Browse the repository at this point in the history
  • Loading branch information
dterrahe committed Jan 31, 2025
1 parent c832fcf commit b953c70
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
1 change: 1 addition & 0 deletions data/themes/darktable.css
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,7 @@ dialog .sidebar row:selected:hover label,
#module-header
{
border-bottom: 1px solid @plugin_bg_color;
background-color: @bg_color;
padding: 0.5em;
}

Expand Down
28 changes: 26 additions & 2 deletions src/dtgtk/expander.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,8 @@ static gboolean _expander_scroll(GtkWidget *widget, GdkFrameClock *frame_clock,

static void _expander_resize(GtkWidget *widget, GdkRectangle *allocation, gpointer user_data)
{
GtkDarktableExpander *expander = DTGTK_EXPANDER(widget);
gtk_widget_set_margin_top(expander->frame, gtk_widget_get_allocated_height(expander->header));

if(widget == _scroll_widget ||
_drop_widget ? widget != _drop_widget :
Expand Down Expand Up @@ -258,6 +260,24 @@ static void dtgtk_expander_init(GtkDarktableExpander *expander)
{
}

static gboolean _adjust_header_position(GtkWidget *widget, cairo_t *cr, GtkWidget *header)
{
GtkWidget *sw = gtk_widget_get_ancestor(widget, GTK_TYPE_SCROLLED_WINDOW);
if(!sw) return FALSE;

GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation);

GtkAdjustment *adjustment = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(sw));
gdouble value = gtk_adjustment_get_value(adjustment);

gtk_widget_set_margin_top(header,
CLAMP(value - allocation.y, 0, allocation.height - gtk_widget_get_allocated_height(header)));
dt_gui_widget_reallocate_now(widget);

return FALSE;
}

// public functions
GtkWidget *dtgtk_expander_new(GtkWidget *header, GtkWidget *body)
{
Expand All @@ -283,8 +303,12 @@ GtkWidget *dtgtk_expander_new(GtkWidget *header, GtkWidget *body)
gtk_revealer_set_reveal_child(GTK_REVEALER(expander->frame), TRUE);
gtk_container_add(GTK_CONTAINER(expander->frame), frame);

gtk_box_pack_start(GTK_BOX(expander), expander->header_evb, TRUE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(expander), expander->frame, TRUE, FALSE, 0);
GtkWidget *overlay = gtk_overlay_new();
gtk_container_add(GTK_CONTAINER(overlay), expander->frame);
gtk_overlay_add_overlay(GTK_OVERLAY(overlay), expander->header_evb);
gtk_widget_set_valign(expander->header_evb, GTK_ALIGN_START);
gtk_container_add(GTK_CONTAINER(expander), overlay);
g_signal_connect(expander, "draw", G_CALLBACK(_adjust_header_position), header);

g_signal_connect(expander->header_evb, "drag-begin", G_CALLBACK(_expander_drag_begin), NULL);
g_signal_connect(expander->header_evb, "drag-end", G_CALLBACK(_expander_drag_end), NULL);
Expand Down
1 change: 1 addition & 0 deletions src/gui/gtk.c
Original file line number Diff line number Diff line change
Expand Up @@ -2429,6 +2429,7 @@ static GtkWidget *_ui_init_panel_container_center(GtkWidget *container,
gtk_widget_set_name(widget, "plugins_vbox_left");
gtk_container_add(GTK_CONTAINER(container), widget);
g_signal_connect_swapped(widget, "draw", G_CALLBACK(_side_panel_draw), NULL);
g_signal_connect_swapped(gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(container)), "value-changed", G_CALLBACK(gtk_widget_queue_draw), widget);

GtkWidget *empty = gtk_event_box_new();
gtk_widget_set_tooltip_text(empty, _("right-click to show/hide modules"));
Expand Down

0 comments on commit b953c70

Please sign in to comment.