[gnome-software/wip/inline-lozenge-layout] build: Inline GsLozengeLayout into gs-lozenge.c



commit c00fa3ff41c70da89e0a0ec72405533a2f88ecc7
Author: Milan Crha <mcrha redhat com>
Date:   Wed May 18 08:14:32 2022 +0200

    build: Inline GsLozengeLayout into gs-lozenge.c
    
    This follows the pattern of the other descendants of the GsLayoutManager
    to inline the layout into the source where it's used, without providing
    unneeded overhead with a code not being used at all/anywhere else.

 src/gs-lozenge-layout.c | 179 ------------------------------------------------
 src/gs-lozenge-layout.h |  28 --------
 src/gs-lozenge.c        |  59 +++++++++++++++-
 src/meson.build         |   1 -
 4 files changed, 57 insertions(+), 210 deletions(-)
---
diff --git a/src/gs-lozenge.c b/src/gs-lozenge.c
index 39886cf73..6e7cff2a0 100644
--- a/src/gs-lozenge.c
+++ b/src/gs-lozenge.c
@@ -9,7 +9,61 @@
 #include "config.h"
 
 #include "gs-lozenge.h"
-#include "gs-lozenge-layout.h"
+#include "gs-layout-manager.h"
+
+#define GS_TYPE_LOZENGE_LAYOUT (gs_lozenge_layout_get_type ())
+G_DECLARE_FINAL_TYPE (GsLozengeLayout, gs_lozenge_layout, GS, LOZENGE_LAYOUT, GsLayoutManager)
+
+struct _GsLozengeLayout
+{
+       GsLayoutManager          parent_instance;
+
+       gboolean                 circular;
+};
+
+G_DEFINE_TYPE (GsLozengeLayout, gs_lozenge_layout, GS_TYPE_LAYOUT_MANAGER)
+
+static void
+gs_lozenge_layout_measure (GtkLayoutManager *layout_manager,
+                          GtkWidget        *widget,
+                          GtkOrientation    orientation,
+                          gint              for_size,
+                          gint             *minimum,
+                          gint             *natural,
+                          gint             *minimum_baseline,
+                          gint             *natural_baseline)
+{
+       GsLozengeLayout *self = GS_LOZENGE_LAYOUT (layout_manager);
+
+       GTK_LAYOUT_MANAGER_CLASS (gs_lozenge_layout_parent_class)->measure (layout_manager,
+               widget, orientation, for_size, minimum, natural, minimum_baseline, natural_baseline);
+
+       if (self->circular) {
+               *minimum = MAX (for_size, *minimum);
+               *natural = *minimum;
+               *natural_baseline = *minimum_baseline;
+       }
+
+       if (*natural_baseline > *natural)
+               *natural_baseline = *natural;
+       if (*minimum_baseline > *minimum)
+               *minimum_baseline = *minimum;
+}
+
+static void
+gs_lozenge_layout_class_init (GsLozengeLayoutClass *klass)
+{
+       GtkLayoutManagerClass *layout_manager_class = GTK_LAYOUT_MANAGER_CLASS (klass);
+
+       layout_manager_class->measure = gs_lozenge_layout_measure;
+}
+
+static void
+gs_lozenge_layout_init (GsLozengeLayout *self)
+{
+}
+
+/* ********************************************************************* */
 
 struct _GsLozenge
 {
@@ -245,7 +299,8 @@ gs_lozenge_set_circular (GsLozenge *self,
        self->circular = value;
 
        layout_manager = gtk_widget_get_layout_manager (GTK_WIDGET (self));
-       gs_lozenge_layout_set_circular (GS_LOZENGE_LAYOUT (layout_manager), self->circular);
+       GS_LOZENGE_LAYOUT (layout_manager)->circular = self->circular;
+       gtk_layout_manager_layout_changed (layout_manager);
 
        g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_CIRCULAR]);
 }
diff --git a/src/meson.build b/src/meson.build
index 1b5858691..3e866ee47 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -54,7 +54,6 @@ gnome_software_sources = [
   'gs-license-tile.c',
   'gs-loading-page.c',
   'gs-lozenge.c',
-  'gs-lozenge-layout.c',
   'gs-main.c',
   'gs-metered-data-dialog.c',
   'gs-moderate-page.c',


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