]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/layout.h
Rework how widget ownership works in Container
[libs/gltk.git] / source / layout.h
index 8b1c527640e4e29e69bd61c3f9fab4a4188044be..274660c6464b5da55e3506bd370e77c3377a8f4c 100644 (file)
@@ -1,8 +1,8 @@
 #ifndef MSP_GLTK_LAYOUT_H_
 #define MSP_GLTK_LAYOUT_H_
 
-#include <list>
-#include <set>
+#include <memory>
+#include <vector>
 #include <sigc++/trackable.h>
 #include <msp/strings/lexicalcast.h>
 #include "geometry.h"
@@ -132,7 +132,7 @@ private:
        struct Constraint
        {
                ConstraintType type;
-               Slot &target;
+               Slot *target = nullptr;
                int spacing = -1;
 
                Constraint(ConstraintType, Slot &);
@@ -151,7 +151,7 @@ private:
                Widget &widget;
                Geometry autosize_geom;
                Geometry geom;
-               std::list<Constraint> constraints;
+               std::vector<Constraint> constraints;
                Packing horiz_pack;
                Packing vert_pack;
                bool ghost = false;
@@ -172,21 +172,19 @@ private:
        class LinearProgram;
        struct Pointers;
 
-       Container *container = 0;
-       std::list<Slot *> slots;
-       unsigned n_active_slots = 0;
-       unsigned n_slack_vars[2] = { 0, 0 };
+       Container *container = nullptr;
+       std::vector<std::unique_ptr<Slot>> slots;
+       std::size_t n_active_slots = 0;
+       std::size_t n_slack_vars[2] = { 0, 0 };
        Sides margin{ 8 };
        unsigned row_spacing = 5;
        unsigned col_spacing = 4;
        Geometry autosize_geom;
-       std::list<Arrangement *> arrangement_stack;
+       std::vector<Arrangement *> arrangement_stack;
 
        static Pointers pointers[2];
 
 public:
-       ~Layout();
-
        void set_container(Container &);
        void set_margin(const Sides &);
        const Sides &get_margin() const { return margin; }