[gnome-software/1392-unify-lozenge-styling: 3/14] gs-summary-tile: Replace GsSummaryTileLayout with GsLayoutManager




commit a5c480d67f3988437e9468cf9572fc559b7b7cfa
Author: Milan Crha <mcrha redhat com>
Date:   Tue May 3 15:40:17 2022 +0200

    gs-summary-tile: Replace GsSummaryTileLayout with GsLayoutManager
    
    To avoid code duplication.

 src/gs-summary-tile-layout.c | 114 -------------------------------------------
 src/gs-summary-tile-layout.h |  25 ----------
 src/gs-summary-tile.c        |  52 ++++++++++++++++++--
 src/meson.build              |   1 -
 4 files changed, 49 insertions(+), 143 deletions(-)
---
diff --git a/src/gs-summary-tile.c b/src/gs-summary-tile.c
index c447eb617..dcd977b44 100644
--- a/src/gs-summary-tile.c
+++ b/src/gs-summary-tile.c
@@ -12,9 +12,55 @@
 #include <glib/gi18n.h>
 
 #include "gs-summary-tile.h"
-#include "gs-summary-tile-layout.h"
+#include "gs-layout-manager.h"
 #include "gs-common.h"
 
+#define GS_TYPE_SUMMARY_TILE_LAYOUT (gs_summary_tile_layout_get_type ())
+G_DECLARE_FINAL_TYPE (GsSummaryTileLayout, gs_summary_tile_layout, GS, SUMMARY_TILE_LAYOUT, GsLayoutManager)
+
+struct _GsSummaryTileLayout
+{
+       GsLayoutManager parent_instance;
+
+       gint            preferred_width;
+};
+
+G_DEFINE_TYPE (GsSummaryTileLayout, gs_summary_tile_layout, GS_TYPE_LAYOUT_MANAGER)
+
+static void
+gs_summary_tile_layout_measure (GtkLayoutManager *layout_manager,
+                               GtkWidget        *widget,
+                               GtkOrientation    orientation,
+                               gint              for_size,
+                               gint             *minimum,
+                               gint             *natural,
+                               gint             *minimum_baseline,
+                               gint             *natural_baseline)
+{
+       GsSummaryTileLayout *self = GS_SUMMARY_TILE_LAYOUT (layout_manager);
+
+       GTK_LAYOUT_MANAGER_CLASS (gs_summary_tile_layout_parent_class)->measure (layout_manager,
+               widget, orientation, for_size, minimum, natural, minimum_baseline, natural_baseline);
+
+       /* Limit the natural width */
+       if (self->preferred_width > 0 && orientation == GTK_ORIENTATION_HORIZONTAL)
+               *natural = MAX (*minimum, self->preferred_width);
+}
+
+static void
+gs_summary_tile_layout_class_init (GsSummaryTileLayoutClass *klass)
+{
+       GtkLayoutManagerClass *layout_manager_class = GTK_LAYOUT_MANAGER_CLASS (klass);
+       layout_manager_class->measure = gs_summary_tile_layout_measure;
+}
+
+static void
+gs_summary_tile_layout_init (GsSummaryTileLayout *self)
+{
+}
+
+/* ********************************************************************* */
+
 struct _GsSummaryTile
 {
        GsAppTile        parent_instance;
@@ -138,8 +184,8 @@ gs_summary_tile_set_property (GObject *object,
        case PROP_PREFERRED_WIDTH:
                app_tile->preferred_width = g_value_get_int (value);
                layout_manager = gtk_widget_get_layout_manager (GTK_WIDGET (app_tile));
-               gs_summary_tile_layout_set_preferred_width (GS_SUMMARY_TILE_LAYOUT (layout_manager),
-                                                           g_value_get_int (value));
+               GS_SUMMARY_TILE_LAYOUT (layout_manager)->preferred_width = app_tile->preferred_width;
+               gtk_layout_manager_layout_changed (layout_manager);
                g_object_notify_by_pspec (object, obj_props[PROP_PREFERRED_WIDTH]);
                break;
        default:
diff --git a/src/meson.build b/src/meson.build
index d945ba83c..4b40abdb8 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -80,7 +80,6 @@ gnome_software_sources = [
   'gs-star-widget.c',
   'gs-storage-context-dialog.c',
   'gs-summary-tile.c',
-  'gs-summary-tile-layout.c',
   'gs-update-dialog.c',
   'gs-update-list.c',
   'gs-update-monitor.c',


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]