diff --git a/src/bazaar.gresource.xml b/src/bazaar.gresource.xml index c1eb1899..3c055b29 100644 --- a/src/bazaar.gresource.xml +++ b/src/bazaar.gresource.xml @@ -36,7 +36,7 @@ bz-releases-list.ui bz-releases-dialog.ui bz-rich-app-tile.ui - bz-screenshot-dialog.ui + bz-screenshot-page.ui bz-screenshots-carousel.ui bz-search-widget.ui bz-section-view.ui diff --git a/src/bz-full-view.blp b/src/bz-full-view.blp index 79b84590..9b776a8f 100644 --- a/src/bz-full-view.blp +++ b/src/bz-full-view.blp @@ -500,6 +500,7 @@ template $BzFullView: Adw.Bin { vexpand: true; hexpand: true; visible: bind template.debounced-ui-entry as <$BzResult>.resolved as ; + clicked => $screenshot_clicked_cb() swapped; model: $BzLazyAsyncTextureModel { model: bind template.debounced-ui-entry as <$BzResult>.object as <$BzEntry>.screenshot-paintables; diff --git a/src/bz-full-view.c b/src/bz-full-view.c index e439da8c..a4d2d082 100644 --- a/src/bz-full-view.c +++ b/src/bz-full-view.c @@ -23,7 +23,6 @@ #include #include -#include "bz-application.h" #include "bz-addons-dialog.h" #include "bz-app-size-dialog.h" #include "bz-app-tile.h" @@ -40,6 +39,7 @@ #include "bz-lazy-async-texture-model.h" #include "bz-license-dialog.h" #include "bz-releases-list.h" +#include "bz-screenshot-page.h" #include "bz-screenshots-carousel.h" #include "bz-section-view.h" #include "bz-share-list.h" @@ -61,17 +61,17 @@ struct _BzFullView BzResult *group_model; gboolean show_sidebar; - guint debounce_timeout; - DexFuture *loading_forge_stars; + guint debounce_timeout; + DexFuture *loading_forge_stars; GMenuModel *main_menu; /* Template widgets */ GtkScrolledWindow *main_scroll; - AdwViewStack *stack; - GtkWidget *shadow_overlay; - GtkWidget *forge_stars; - GtkLabel *forge_stars_label; - GtkToggleButton *description_toggle; + AdwViewStack *stack; + GtkWidget *shadow_overlay; + GtkWidget *forge_stars; + GtkLabel *forge_stars_label; + GtkToggleButton *description_toggle; }; G_DEFINE_FINAL_TYPE (BzFullView, bz_full_view, ADW_TYPE_BIN) @@ -199,8 +199,8 @@ bz_full_view_set_property (GObject *object, case PROP_DEBOUNCED_UI_ENTRY: case PROP_MAIN_MENU: if (self->main_menu) - g_object_unref(self->main_menu); - self->main_menu = g_value_dup_object(value); + g_object_unref (self->main_menu); + self->main_menu = g_value_dup_object (value); break; case PROP_SHOW_SIDEBAR: self->show_sidebar = g_value_get_boolean (value); @@ -450,66 +450,66 @@ pick_license_warning (gpointer object, static char * format_other_apps_label (gpointer object, const char *developer) { - if (!developer || *developer == '\0') - return g_strdup (_("Other Apps by this Developer")); + if (!developer || *developer == '\0') + return g_strdup (_ ("Other Apps by this Developer")); - return g_strdup_printf (_("Other Apps by %s"), developer); + return g_strdup_printf (_ ("Other Apps by %s"), developer); } static gpointer filter_own_app_id (BzEntry *entry, GtkStringList *app_ids) { - const char *own_id; - g_autoptr (GtkStringList) filtered = NULL; - guint n_items = 0; + const char *own_id; + g_autoptr (GtkStringList) filtered = NULL; + guint n_items = 0; - if (!BZ_IS_ENTRY(entry) || !GTK_IS_STRING_LIST(app_ids)) - return NULL; + if (!BZ_IS_ENTRY (entry) || !GTK_IS_STRING_LIST (app_ids)) + return NULL; - own_id = bz_entry_get_id (entry); - if (!own_id) - return NULL; + own_id = bz_entry_get_id (entry); + if (!own_id) + return NULL; - filtered = gtk_string_list_new (NULL); - n_items = g_list_model_get_n_items (G_LIST_MODEL (app_ids)); + filtered = gtk_string_list_new (NULL); + n_items = g_list_model_get_n_items (G_LIST_MODEL (app_ids)); - for (guint i = 0; i < n_items; i++) - { - const char *id = NULL; + for (guint i = 0; i < n_items; i++) + { + const char *id = NULL; - id = gtk_string_list_get_string (app_ids, i); - if (g_strcmp0 (id, own_id) != 0) - gtk_string_list_append (filtered, id); - } + id = gtk_string_list_get_string (app_ids, i); + if (g_strcmp0 (id, own_id) != 0) + gtk_string_list_append (filtered, id); + } - if (g_list_model_get_n_items (G_LIST_MODEL (filtered)) > 0) - return g_steal_pointer (&filtered); - else - return NULL; + if (g_list_model_get_n_items (G_LIST_MODEL (filtered)) > 0) + return g_steal_pointer (&filtered); + else + return NULL; } static gboolean -has_other_apps (gpointer object, GtkStringList *app_ids, BzEntry *entry ) +has_other_apps (gpointer object, GtkStringList *app_ids, BzEntry *entry) { - g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids); - return filtered != NULL; + g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids); + return filtered != NULL; } static GListModel * get_developer_apps_entries (gpointer object, GtkStringList *app_ids, BzEntry *entry) { - BzFullView *self = BZ_FULL_VIEW (object); - g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids); - BzApplicationMapFactory *factory; + BzFullView *self = BZ_FULL_VIEW (object); + g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids); + BzApplicationMapFactory *factory; - if (!filtered) - return NULL; + if (!filtered) + return NULL; - factory = bz_state_info_get_application_factory (self->state); - if (!factory) - return NULL; + factory = bz_state_info_get_application_factory (self->state); + if (!factory) + return NULL; - return bz_application_map_factory_generate (factory, G_LIST_MODEL (filtered)); + return bz_application_map_factory_generate (factory, G_LIST_MODEL (filtered)); } static gboolean @@ -521,10 +521,10 @@ scroll_to_top_idle (GtkAdjustment *vadj) static void app_tile_clicked_cb (BzFullView *self, - BzAppTile *tile) + BzAppTile *tile) { GtkAdjustment *vadj; - BzEntryGroup *group = bz_app_tile_get_group (tile); + BzEntryGroup *group = bz_app_tile_get_group (tile); bz_full_view_set_entry_group (self, group); @@ -534,20 +534,20 @@ app_tile_clicked_cb (BzFullView *self, static void bind_app_tile_cb (BzFullView *self, - BzAppTile *tile, - BzEntryGroup *group, - BzDynamicListView *view) + BzAppTile *tile, + BzEntryGroup *group, + BzDynamicListView *view) { g_signal_connect_swapped (tile, "clicked", - G_CALLBACK (app_tile_clicked_cb), - self); + G_CALLBACK (app_tile_clicked_cb), + self); } static void unbind_app_tile_cb (BzFullView *self, - BzAppTile *tile, - BzEntryGroup *group, - BzDynamicListView *view) + BzAppTile *tile, + BzEntryGroup *group, + BzDynamicListView *view) { g_signal_handlers_disconnect_by_func (tile, G_CALLBACK (app_tile_clicked_cb), self); } @@ -630,6 +630,26 @@ dl_stats_cb (BzFullView *self, bz_stats_dialog_animate_open (BZ_STATS_DIALOG (dialog)); } +static void +screenshot_clicked_cb (BzFullView *self, + guint index, + BzScreenshotsCarousel *carousel) +{ + GListModel *screenshots = NULL; + AdwNavigationPage *page = NULL; + GtkWidget *nav_view = NULL; + + screenshots = bz_screenshots_carousel_get_model (carousel); + if (screenshots == NULL) + return; + + page = bz_screenshot_page_new (screenshots, index); + + nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW); + if (nav_view != NULL) + adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), page); +} + static void size_cb (BzFullView *self, GtkButton *button) @@ -861,18 +881,18 @@ bz_full_view_class_init (BzFullViewClass *klass) G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); props[PROP_MAIN_MENU] = - g_param_spec_object( - "main-menu", - NULL, NULL, - G_TYPE_MENU_MODEL, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_param_spec_object ( + "main-menu", + NULL, NULL, + G_TYPE_MENU_MODEL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); props[PROP_SHOW_SIDEBAR] = - g_param_spec_boolean( - "show-sidebar", - NULL, NULL, - FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); + g_param_spec_boolean ( + "show-sidebar", + NULL, NULL, + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY); g_object_class_install_properties (object_class, LAST_PROP, props); @@ -982,6 +1002,7 @@ bz_full_view_class_init (BzFullViewClass *klass) gtk_widget_class_bind_template_callback (widget_class, open_flathub_url_cb); gtk_widget_class_bind_template_callback (widget_class, license_cb); gtk_widget_class_bind_template_callback (widget_class, dl_stats_cb); + gtk_widget_class_bind_template_callback (widget_class, screenshot_clicked_cb); gtk_widget_class_bind_template_callback (widget_class, size_cb); gtk_widget_class_bind_template_callback (widget_class, formfactor_cb); gtk_widget_class_bind_template_callback (widget_class, run_cb); diff --git a/src/bz-screenshot-dialog.blp b/src/bz-screenshot-page.blp similarity index 88% rename from src/bz-screenshot-dialog.blp rename to src/bz-screenshot-page.blp index 5c884555..c388fe2d 100644 --- a/src/bz-screenshot-dialog.blp +++ b/src/bz-screenshot-page.blp @@ -1,21 +1,41 @@ using Gtk 4.0; using Adw 1; -template $BzScreenshotDialog: Adw.Dialog { - content-width: 1600; - content-height: 900; + +template $BzScreenshotPage: Adw.NavigationPage { + title: _("Screenshots"); + child: Adw.ToastOverlay toast_overlay { child: Adw.ToolbarView { top-bar-style: flat; extend-content-to-top-edge: true; - styles ["view-dark"] + + styles [ + "view-dark", + ] + [top] Adw.HeaderBar { styles [ "flat", "header-osd", ] + show-title: false; + + [end] + Box { + Button copy_button { + icon-name: "edit-copy-symbolic"; + tooltip-text: _("Copy Image"); + clicked => $copy_clicked() swapped; + + styles [ + "flat", + ] + } + } } + content: Overlay { [overlay] Box { @@ -25,44 +45,38 @@ template $BzScreenshotDialog: Adw.Dialog { margin-bottom: 12; margin-start: 12; spacing: 6; + Box navigation_controls { orientation: horizontal; spacing: 6; visible: bind $has_multiple_screenshots(template.screenshots) as ; + styles [ "osd-box", ] + Button previous_button { icon-name: "go-previous-symbolic"; tooltip-text: _("Previous Screenshot"); clicked => $previous_clicked() swapped; + styles [ "flat", ] } + Button next_button { icon-name: "go-next-symbolic"; tooltip-text: _("Next Screenshot"); clicked => $next_clicked() swapped; - styles [ - "flat", - ] - } - } - Box { - styles [ - "osd-box", - ] - Button copy_button { - icon-name: "copy-symbolic"; - tooltip-text: _("Copy Image"); - clicked => $copy_clicked() swapped; + styles [ "flat", ] } } } + [overlay] Box { orientation: horizontal; @@ -70,41 +84,51 @@ template $BzScreenshotDialog: Adw.Dialog { valign: end; margin-bottom: 12; margin-end: 12; + Box zoom_controls { orientation: horizontal; + styles [ "osd-box", ] + Revealer { reveal-child: bind template.is-zoomed as ; transition-type: slide_right; + Button reset_zoom_button { icon-name: "zoom-original-symbolic"; tooltip-text: _("Reset View"); clicked => $reset_zoom_clicked() swapped; + styles [ "flat", ] } } + Button zoom_out_button { icon-name: "zoom-minus-symbolic"; tooltip-text: _("Zoom Out"); clicked => $zoom_out_clicked() swapped; + styles [ "flat", ] } + Button zoom_in_button { icon-name: "zoom-plus-symbolic"; tooltip-text: _("Zoom In"); clicked => $zoom_in_clicked() swapped; + styles [ "flat", ] } } } + child: Adw.Carousel carousel { can-focus: false; interactive: bind $invert_boolean(template.is-zoomed) as ; @@ -116,4 +140,4 @@ template $BzScreenshotDialog: Adw.Dialog { }; }; }; -} \ No newline at end of file +} diff --git a/src/bz-screenshot-dialog.c b/src/bz-screenshot-page.c similarity index 79% rename from src/bz-screenshot-dialog.c rename to src/bz-screenshot-page.c index 99d680ef..9af530ad 100644 --- a/src/bz-screenshot-dialog.c +++ b/src/bz-screenshot-page.c @@ -1,4 +1,4 @@ -/* bz-screenshot-dialog.c +/* bz-screenshot-page.c * * Copyright 2025 Alexander Vanhee * @@ -18,14 +18,14 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -#include "bz-screenshot-dialog.h" +#include "bz-screenshot-page.h" #include "bz-screenshot.h" #include "bz-zoom.h" #include -struct _BzScreenshotDialog +struct _BzScreenshotPage { - AdwDialog parent_instance; + AdwNavigationPage parent_instance; AdwCarousel *carousel; AdwToastOverlay *toast_overlay; @@ -37,11 +37,11 @@ struct _BzScreenshotDialog gboolean is_zoomed; }; -G_DEFINE_FINAL_TYPE (BzScreenshotDialog, bz_screenshot_dialog, ADW_TYPE_DIALOG) +G_DEFINE_FINAL_TYPE (BzScreenshotPage, bz_screenshot_page, ADW_TYPE_NAVIGATION_PAGE) -static void on_zoom_level_changed (BzZoom *zoom, - GParamSpec *pspec, - BzScreenshotDialog *self); +static void on_zoom_level_changed (BzZoom *zoom, + GParamSpec *pspec, + BzScreenshotPage *self); enum { @@ -56,22 +56,22 @@ enum static GParamSpec *props[LAST_PROP] = { 0 }; static void -bz_screenshot_dialog_dispose (GObject *object) +bz_screenshot_page_dispose (GObject *object) { - BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object); + BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); g_clear_object (&self->screenshots); - G_OBJECT_CLASS (bz_screenshot_dialog_parent_class)->dispose (object); + G_OBJECT_CLASS (bz_screenshot_page_parent_class)->dispose (object); } static void -bz_screenshot_dialog_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +bz_screenshot_page_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object); + BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); switch (prop_id) { @@ -90,7 +90,7 @@ bz_screenshot_dialog_get_property (GObject *object, } static void -populate_carousel (BzScreenshotDialog *self) +populate_carousel (BzScreenshotPage *self) { guint n_items = 0; guint i = 0; @@ -117,6 +117,10 @@ populate_carousel (BzScreenshotDialog *self) screenshot = bz_screenshot_new (); bz_screenshot_set_paintable (BZ_SCREENSHOT (screenshot), GDK_PAINTABLE (async_texture)); bz_screenshot_set_rounded_corners (BZ_SCREENSHOT (screenshot), FALSE); + gtk_widget_set_margin_top (screenshot, 25); + gtk_widget_set_margin_bottom (screenshot, 25); + gtk_widget_set_margin_start (screenshot, 25); + gtk_widget_set_margin_end (screenshot, 25); zoom_widget = bz_zoom_new (); gtk_widget_set_hexpand (zoom_widget, TRUE); @@ -128,7 +132,7 @@ populate_carousel (BzScreenshotDialog *self) } static void -update_is_zoomed (BzScreenshotDialog *self) +update_is_zoomed (BzScreenshotPage *self) { GtkWidget *page = NULL; BzZoom *zoom = NULL; @@ -164,16 +168,16 @@ update_is_zoomed (BzScreenshotDialog *self) } static void -on_zoom_level_changed (BzZoom *zoom, - GParamSpec *pspec, - BzScreenshotDialog *self) +on_zoom_level_changed (BzZoom *zoom, + GParamSpec *pspec, + BzScreenshotPage *self) { update_is_zoomed (self); } static void -connect_zoom_signal (BzScreenshotDialog *self, - GtkWidget *page) +connect_zoom_signal (BzScreenshotPage *self, + GtkWidget *page) { BzZoom *zoom = NULL; @@ -186,12 +190,12 @@ connect_zoom_signal (BzScreenshotDialog *self, } static void -bz_screenshot_dialog_constructed (GObject *object) +bz_screenshot_page_constructed (GObject *object) { - BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object); - GtkWidget *page = NULL; + BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); + GtkWidget *page = NULL; - G_OBJECT_CLASS (bz_screenshot_dialog_parent_class)->constructed (object); + G_OBJECT_CLASS (bz_screenshot_page_parent_class)->constructed (object); populate_carousel (self); @@ -205,12 +209,12 @@ bz_screenshot_dialog_constructed (GObject *object) } static void -bz_screenshot_dialog_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +bz_screenshot_page_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { - BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object); + BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object); switch (prop_id) { @@ -227,7 +231,7 @@ bz_screenshot_dialog_set_property (GObject *object, } static void -zoom_in_clicked (BzScreenshotDialog *self) +zoom_in_clicked (BzScreenshotPage *self) { GtkWidget *page = NULL; BzZoom *zoom = NULL; @@ -246,7 +250,7 @@ zoom_in_clicked (BzScreenshotDialog *self) } static void -zoom_out_clicked (BzScreenshotDialog *self) +zoom_out_clicked (BzScreenshotPage *self) { GtkWidget *page = NULL; BzZoom *zoom = NULL; @@ -265,7 +269,7 @@ zoom_out_clicked (BzScreenshotDialog *self) } static void -reset_zoom_clicked (BzScreenshotDialog *self) +reset_zoom_clicked (BzScreenshotPage *self) { GtkWidget *page = NULL; BzZoom *zoom = NULL; @@ -284,7 +288,7 @@ reset_zoom_clicked (BzScreenshotDialog *self) } static void -previous_clicked (BzScreenshotDialog *self) +previous_clicked (BzScreenshotPage *self) { guint n_pages = 0; GtkWidget *page = NULL; @@ -303,7 +307,7 @@ previous_clicked (BzScreenshotDialog *self) } static void -next_clicked (BzScreenshotDialog *self) +next_clicked (BzScreenshotPage *self) { guint n_pages = 0; GtkWidget *page = NULL; @@ -322,9 +326,9 @@ next_clicked (BzScreenshotDialog *self) } static void -on_carousel_position_changed (AdwCarousel *carousel, - GParamSpec *pspec, - BzScreenshotDialog *self) +on_carousel_position_changed (AdwCarousel *carousel, + GParamSpec *pspec, + BzScreenshotPage *self) { GtkWidget *old_page = NULL; GtkWidget *new_page = NULL; @@ -360,7 +364,7 @@ on_carousel_position_changed (AdwCarousel *carousel, } static void -copy_clicked (BzScreenshotDialog *self) +copy_clicked (BzScreenshotPage *self) { g_autoptr (BzAsyncTexture) async_texture = NULL; g_autoptr (GdkTexture) texture = NULL; @@ -399,7 +403,7 @@ on_key_pressed (GtkEventControllerKey *controller, guint keyval, guint keycode, GdkModifierType state, - BzScreenshotDialog *self) + BzScreenshotPage *self) { if (keyval == GDK_KEY_Left) { @@ -433,15 +437,15 @@ invert_boolean (gpointer object, } static void -bz_screenshot_dialog_class_init (BzScreenshotDialogClass *klass) +bz_screenshot_page_class_init (BzScreenshotPageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->dispose = bz_screenshot_dialog_dispose; - object_class->constructed = bz_screenshot_dialog_constructed; - object_class->get_property = bz_screenshot_dialog_get_property; - object_class->set_property = bz_screenshot_dialog_set_property; + object_class->dispose = bz_screenshot_page_dispose; + object_class->constructed = bz_screenshot_page_constructed; + object_class->get_property = bz_screenshot_page_get_property; + object_class->set_property = bz_screenshot_page_set_property; props[PROP_SCREENSHOTS] = g_param_spec_object ( @@ -468,9 +472,9 @@ bz_screenshot_dialog_class_init (BzScreenshotDialogClass *klass) g_type_ensure (BZ_TYPE_ZOOM); - gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshot-dialog.ui"); - gtk_widget_class_bind_template_child (widget_class, BzScreenshotDialog, carousel); - gtk_widget_class_bind_template_child (widget_class, BzScreenshotDialog, toast_overlay); + gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshot-page.ui"); + gtk_widget_class_bind_template_child (widget_class, BzScreenshotPage, carousel); + gtk_widget_class_bind_template_child (widget_class, BzScreenshotPage, toast_overlay); gtk_widget_class_bind_template_callback (widget_class, zoom_in_clicked); gtk_widget_class_bind_template_callback (widget_class, zoom_out_clicked); gtk_widget_class_bind_template_callback (widget_class, on_carousel_position_changed); @@ -483,7 +487,7 @@ bz_screenshot_dialog_class_init (BzScreenshotDialogClass *klass) } static void -bz_screenshot_dialog_init (BzScreenshotDialog *self) +bz_screenshot_page_init (BzScreenshotPage *self) { GtkEventController *key_controller = NULL; @@ -495,12 +499,12 @@ bz_screenshot_dialog_init (BzScreenshotDialog *self) gtk_widget_add_controller (GTK_WIDGET (self), key_controller); } -AdwDialog * -bz_screenshot_dialog_new (GListModel *screenshots, - guint initial_index) +AdwNavigationPage * +bz_screenshot_page_new (GListModel *screenshots, + guint initial_index) { return g_object_new ( - BZ_TYPE_SCREENSHOT_DIALOG, + BZ_TYPE_SCREENSHOT_PAGE, "screenshots", screenshots, "current-index", initial_index, NULL); diff --git a/src/bz-screenshot-dialog.h b/src/bz-screenshot-page.h similarity index 71% rename from src/bz-screenshot-dialog.h rename to src/bz-screenshot-page.h index df4053ff..dfad1192 100644 --- a/src/bz-screenshot-dialog.h +++ b/src/bz-screenshot-page.h @@ -1,4 +1,4 @@ -/* bz-screenshot-dialog.h +/* bz-screenshot-page.h * * Copyright 2025 Alexander Vanhee * @@ -25,11 +25,11 @@ G_BEGIN_DECLS -#define BZ_TYPE_SCREENSHOT_DIALOG (bz_screenshot_dialog_get_type ()) +#define BZ_TYPE_SCREENSHOT_PAGE (bz_screenshot_page_get_type ()) -G_DECLARE_FINAL_TYPE (BzScreenshotDialog, bz_screenshot_dialog, BZ, SCREENSHOT_DIALOG, AdwDialog) +G_DECLARE_FINAL_TYPE (BzScreenshotPage, bz_screenshot_page, BZ, SCREENSHOT_PAGE, AdwNavigationPage) -AdwDialog *bz_screenshot_dialog_new (GListModel *screenshots, - guint initial_index); +AdwNavigationPage *bz_screenshot_page_new (GListModel *screenshots, + guint initial_index); G_END_DECLS diff --git a/src/bz-screenshots-carousel.c b/src/bz-screenshots-carousel.c index 685bacd1..ee1f5f99 100644 --- a/src/bz-screenshots-carousel.c +++ b/src/bz-screenshots-carousel.c @@ -28,7 +28,6 @@ #include "bz-screenshots-carousel.h" #include "bz-decorated-screenshot.h" -#include "bz-screenshot-dialog.h" #include struct _BzScreenshotsCarousel @@ -57,6 +56,14 @@ enum static GParamSpec *properties[N_PROPS]; +enum +{ + SIGNAL_CLICKED, + N_SIGNALS +}; + +static guint signals[N_SIGNALS]; + static void update_button_visibility (BzScreenshotsCarousel *self) { @@ -134,10 +141,9 @@ on_notify_n_pages (BzScreenshotsCarousel *self) } static void -open_screenshot_dialog_at_index (BzScreenshotsCarousel *self, guint index) +open_screenshot_at_index (BzScreenshotsCarousel *self, guint index) { - AdwDialog *dialog = NULL; - guint n_items; + guint n_items; if (!self->model) return; @@ -146,8 +152,7 @@ open_screenshot_dialog_at_index (BzScreenshotsCarousel *self, guint index) if (index >= n_items) return; - dialog = bz_screenshot_dialog_new (self->model, index); - adw_dialog_present (dialog, GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self)))); + g_signal_emit (self, signals[SIGNAL_CLICKED], 0, index); } static void @@ -177,7 +182,7 @@ on_screenshot_clicked (BzDecoratedScreenshot *screenshot, BzScreenshotsCarousel } } - open_screenshot_dialog_at_index (self, index); + open_screenshot_at_index (self, index); } static void @@ -198,7 +203,7 @@ on_expand_clicked (BzScreenshotsCarousel *self) index = (guint) round (position); index = MIN (index, n_pages - 1); - open_screenshot_dialog_at_index (self, index); + open_screenshot_at_index (self, index); } static void @@ -334,6 +339,17 @@ bz_screenshots_carousel_class_init (BzScreenshotsCarouselClass *klass) g_object_class_install_properties (object_class, N_PROPS, properties); + signals[SIGNAL_CLICKED] = + g_signal_new ("clicked", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + NULL, + G_TYPE_NONE, + 1, + G_TYPE_UINT); + gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshots-carousel.ui"); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, carousel); gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, carousel_indicator); diff --git a/src/gtk/style.css b/src/gtk/style.css index c7766a27..0eb7e74c 100644 --- a/src/gtk/style.css +++ b/src/gtk/style.css @@ -341,7 +341,13 @@ window.flathub { } .view-dark { - background-color: #1d1d20; + background-color: black; + color: white; +} + +.header-osd box.horizontal:not(.end) { + background-color: rgba(0, 0, 0, 0.65); + border-radius: 10px; } .accent-button { diff --git a/src/meson.build b/src/meson.build index 1bb39404..d539f2f3 100644 --- a/src/meson.build +++ b/src/meson.build @@ -118,7 +118,7 @@ bz_sources = [ 'bz-review.c', 'bz-rich-app-tile.c', 'bz-rounded-picture.c', - 'bz-screenshot-dialog.c', + 'bz-screenshot-page.c', 'bz-screenshot.c', 'bz-screenshots-carousel.c', 'bz-search-engine.c', @@ -191,7 +191,7 @@ blueprints = custom_target('blueprints', 'bz-releases-dialog.blp', 'bz-releases-list.blp', 'bz-rich-app-tile.blp', - 'bz-screenshot-dialog.blp', + 'bz-screenshot-page.blp', 'bz-screenshots-carousel.blp', 'bz-search-widget.blp', 'bz-section-view.blp',