Compare commits

...

2 Commits

Author SHA1 Message Date
c3eb5ca170
Simplify toolbar separators 2021-12-20 05:34:12 +01:00
9c0e9d8d49
Stretch the toolbar across the window
The division is kind of logical, it might make sense for the view
to create the center widget, then we'd get rid of some recently added
GObject boilerplate.

Only make_separator() is kind of annoying.
2021-12-20 05:33:27 +01:00

View File

@ -54,6 +54,8 @@ exit_fatal(const gchar *format, ...)
// --- Main -------------------------------------------------------------------- // --- Main --------------------------------------------------------------------
// TODO(p): See if it's possible to give separators room to shrink
// by some minor amount of pixels, margin-wise.
// TODO(p): Add a toggle for a checkerboard background. // TODO(p): Add a toggle for a checkerboard background.
// TODO(p): Implement commented-out actions. // TODO(p): Implement commented-out actions.
#define B make_toolbar_button #define B make_toolbar_button
@ -62,23 +64,23 @@ exit_fatal(const gchar *format, ...)
XX(BROWSE, B("view-grid-symbolic", "Browse")) \ XX(BROWSE, B("view-grid-symbolic", "Browse")) \
XX(FILE_PREVIOUS, B("go-previous-symbolic", "Previous file")) \ XX(FILE_PREVIOUS, B("go-previous-symbolic", "Previous file")) \
XX(FILE_NEXT, B("go-next-symbolic", "Next file")) \ XX(FILE_NEXT, B("go-next-symbolic", "Next file")) \
XX(S1, make_separator()) \ XX(S1, gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)) \
XX(PAGE_FIRST, B("go-top-symbolic", "First page")) \ XX(PAGE_FIRST, B("go-top-symbolic", "First page")) \
XX(PAGE_PREVIOUS, B("go-up-symbolic", "Previous page")) \ XX(PAGE_PREVIOUS, B("go-up-symbolic", "Previous page")) \
XX(PAGE_NEXT, B("go-down-symbolic", "Next page")) \ XX(PAGE_NEXT, B("go-down-symbolic", "Next page")) \
XX(PAGE_LAST, B("go-bottom-symbolic", "Last page")) \ XX(PAGE_LAST, B("go-bottom-symbolic", "Last page")) \
XX(S2, make_separator()) \ XX(S2, gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)) \
XX(SKIP_BACK, B("media-skip-backward-symbolic", "Rewind playback")) \ XX(SKIP_BACK, B("media-skip-backward-symbolic", "Rewind playback")) \
XX(SEEK_BACK, B("media-seek-backward-symbolic", "Previous frame")) \ XX(SEEK_BACK, B("media-seek-backward-symbolic", "Previous frame")) \
XX(PLAY_PAUSE, B("media-playback-start-symbolic", "Pause")) \ XX(PLAY_PAUSE, B("media-playback-start-symbolic", "Pause")) \
XX(SEEK_FORWARD, B("media-seek-forward-symbolic", "Next frame")) \ XX(SEEK_FORWARD, B("media-seek-forward-symbolic", "Next frame")) \
XX(S3, make_separator()) \ XX(S3, gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)) \
XX(PLUS, B("zoom-in-symbolic", "Zoom in")) \ XX(PLUS, B("zoom-in-symbolic", "Zoom in")) \
XX(SCALE, gtk_label_new("")) \ XX(SCALE, gtk_label_new("")) \
XX(MINUS, B("zoom-out-symbolic", "Zoom out")) \ XX(MINUS, B("zoom-out-symbolic", "Zoom out")) \
XX(ONE, B("zoom-original-symbolic", "Original size")) \ XX(ONE, B("zoom-original-symbolic", "Original size")) \
XX(FIT, T("zoom-fit-best-symbolic", "Scale to fit")) \ XX(FIT, T("zoom-fit-best-symbolic", "Scale to fit")) \
XX(S4, make_separator()) \ XX(S4, gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)) \
/* XX(PIN, B("view-pin-symbolic", "Keep view configuration")) */ \ /* XX(PIN, B("view-pin-symbolic", "Keep view configuration")) */ \
/* Or perhaps "blur-symbolic", also in the extended set. */ \ /* Or perhaps "blur-symbolic", also in the extended set. */ \
XX(SMOOTH, T("blend-tool-symbolic", "Smooth scaling")) \ XX(SMOOTH, T("blend-tool-symbolic", "Smooth scaling")) \
@ -86,11 +88,11 @@ exit_fatal(const gchar *format, ...)
XX(SAVE, B("document-save-as-symbolic", "Save as...")) \ XX(SAVE, B("document-save-as-symbolic", "Save as...")) \
XX(PRINT, B("document-print-symbolic", "Print...")) \ XX(PRINT, B("document-print-symbolic", "Print...")) \
/* XX(INFO, B("info-symbolic", "Information")) */ \ /* XX(INFO, B("info-symbolic", "Information")) */ \
XX(S5, make_separator()) \ XX(S5, gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)) \
XX(LEFT, B("object-rotate-left-symbolic", "Rotate left")) \ XX(LEFT, B("object-rotate-left-symbolic", "Rotate left")) \
XX(MIRROR, B("object-flip-horizontal-symbolic", "Mirror")) \ XX(MIRROR, B("object-flip-horizontal-symbolic", "Mirror")) \
XX(RIGHT, B("object-rotate-right-symbolic", "Rotate right")) \ XX(RIGHT, B("object-rotate-right-symbolic", "Rotate right")) \
XX(S6, make_separator()) \ XX(S6, gtk_separator_new(GTK_ORIENTATION_HORIZONTAL)) \
/* We are YouTube. */ \ /* We are YouTube. */ \
XX(FULLSCREEN, B("view-fullscreen-symbolic", "Fullscreen")) XX(FULLSCREEN, B("view-fullscreen-symbolic", "Fullscreen"))
@ -723,17 +725,6 @@ make_toolbar_toggle(const gchar *symbolic, const gchar *tooltip)
return button; return button;
} }
static GtkWidget *
make_separator(void)
{
// TODO(p): See if it's possible to give the separator room to shrink
// by some minor amount of pixels, margin-wise.
GtkWidget *separator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
gtk_widget_set_margin_start(separator, 10);
gtk_widget_set_margin_end(separator, 10);
return separator;
}
static void static void
on_view_actions_changed(void) on_view_actions_changed(void)
{ {
@ -873,9 +864,19 @@ make_view_toolbar(void)
// GtkStatusBar solves a problem we do not have here. // GtkStatusBar solves a problem we do not have here.
GtkWidget *view_toolbar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); GtkWidget *view_toolbar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_set_name(view_toolbar, "toolbar");
GtkBox *box = GTK_BOX(view_toolbar); GtkBox *box = GTK_BOX(view_toolbar);
for (int i = 0; i < TOOLBAR_COUNT; i++)
// Exploring different versions of awkward layouts.
for (int i = 0; i <= TOOLBAR_S1; i++)
gtk_box_pack_start(box, g.toolbar[i], FALSE, FALSE, 0); gtk_box_pack_start(box, g.toolbar[i], FALSE, FALSE, 0);
for (int i = TOOLBAR_COUNT; --i >= TOOLBAR_S6; )
gtk_box_pack_end(box, g.toolbar[i], FALSE, FALSE, 0);
GtkWidget *center = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
for (int i = TOOLBAR_S1; ++i < TOOLBAR_S6; )
gtk_box_pack_start(GTK_BOX(center), g.toolbar[i], FALSE, FALSE, 0);
gtk_box_set_center_widget(box, center);
toolbar_connect(TOOLBAR_BROWSE, G_CALLBACK(switch_to_browser)); toolbar_connect(TOOLBAR_BROWSE, G_CALLBACK(switch_to_browser));
toolbar_connect(TOOLBAR_FILE_PREVIOUS, G_CALLBACK(on_previous)); toolbar_connect(TOOLBAR_FILE_PREVIOUS, G_CALLBACK(on_previous));
@ -971,17 +972,16 @@ main(int argc, char *argv[])
// This is incredibly broken https://stackoverflow.com/a/51054396/76313 // This is incredibly broken https://stackoverflow.com/a/51054396/76313
// thus resolving the problem using overlaps. // thus resolving the problem using overlaps.
// XXX: button.flat is too generic, it's only for the view toolbar.
// XXX: Similarly, box > separator.horizontal is a temporary hack.
// Consider using a #name or a .class here, possibly for a parent widget.
const char *style = "@define-color fiv-tile #3c3c3c; \ const char *style = "@define-color fiv-tile #3c3c3c; \
fiv-view, fiv-browser { background: @content_view_bg; } \ fiv-view, fiv-browser { background: @content_view_bg; } \
placessidebar.fiv .toolbar { padding: 2px 6px; } \ placessidebar.fiv .toolbar { padding: 2px 6px; } \
placessidebar.fiv box > separator { margin: 4px 0; } \ placessidebar.fiv box > separator { margin: 4px 0; } \
button.flat { padding-left: 0; padding-right: 0 } \ #toolbar button { padding-left: 0; padding-right: 0; } \
box > separator.horizontal { \ #toolbar > button:first-child { padding-left: 4px; } \
#toolbar > button:last-child { padding-right: 4px; } \
#toolbar separator { \
background: mix(@insensitive_fg_color, \ background: mix(@insensitive_fg_color, \
@insensitive_bg_color, 0.4); margin: 6px 0; \ @insensitive_bg_color, 0.4); margin: 6px 10px; \
} \ } \
fiv-browser { padding: 5px; } \ fiv-browser { padding: 5px; } \
fiv-browser.item { \ fiv-browser.item { \
@ -1019,11 +1019,9 @@ main(int argc, char *argv[])
g_object_set(gtk_settings_get_default(), g_object_set(gtk_settings_get_default(),
"gtk-application-prefer-dark-theme", TRUE, NULL); "gtk-application-prefer-dark-theme", TRUE, NULL);
GtkWidget *view_toolbar = make_view_toolbar();
gtk_widget_set_halign(view_toolbar, GTK_ALIGN_CENTER);
// Need to put the toolbar at the top, because of the horizontal scrollbar. // Need to put the toolbar at the top, because of the horizontal scrollbar.
g.view_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); g.view_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
GtkWidget *view_toolbar = make_view_toolbar();
gtk_box_pack_start(GTK_BOX(g.view_box), view_toolbar, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(g.view_box), view_toolbar, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(g.view_box), gtk_box_pack_start(GTK_BOX(g.view_box),
gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, 0); gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, 0);