]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/layout.h
Add autosizing for panels
[libs/gltk.git] / source / layout.h
index 7e8cdea123fc1a25f845bfb5ecf3e272df9d9b57..cbd763e9e5337dc7a6395d7d0b3a860c6d9ad7e1 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of libmspgltk
-Copyright © 2011  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef MSP_GLTK_LAYOUT_H_
 #define MSP_GLTK_LAYOUT_H_
 
@@ -27,11 +20,11 @@ is then solved to obtain positions and dimensions that fulfill the constraints.
 There are three kinds of constraints available: ordering, alignment and
 dimension matching.
 
-Ordering constraints specify that the widgets should be placed next to other
-along X or Y axis.  These operate on one axis at a time, so a widget could be
-"right of" another even if they are separated by hundreds of pixels vertically.
-The widgets will be separated by a spacing value, which is settable on a per-
-layout basis.
+Ordering constraints specify that the widgets should be placed next to each
+other along X or Y axis.  These operate on one axis at a time, so a widget
+could be "right of" another even if they are separated by hundreds of pixels
+vertically.  The widgets will be separated by a spacing value, which is
+settable on a per-layout basis.
 
 Alignment constraints make the corresponding edges of two widgets be on the
 same line.  These are incompatible with ordering constraints, so only one or
@@ -52,8 +45,8 @@ dependent widgets have the expand flag set, the results are currently
 undefined.
 
 Since specifiyng constraints manually can be quite tedious, there are some
-derived Layout classes that implement common positioning patterns.  See
-MixedRows and Grid.
+derived Layout classes that implement common positioning patterns.  See Row,
+Column, MixedRows and Grid.
 */
 class Layout
 {
@@ -108,6 +101,7 @@ protected:
                Layout &layout;
                unsigned index;
                Widget &widget;
+               Geometry autosize_geom;
                Geometry geom;
                std::list<Constraint> constraints;
                Packing horiz_pack;
@@ -119,6 +113,12 @@ protected:
                void autosize_changed();
        };
 
+       enum SolveMode
+       {
+               UPDATE,
+               AUTOSIZE
+       };
+
        class LinearProgram;
        struct Pointers;
 
@@ -127,6 +127,7 @@ protected:
        Sides margin;
        unsigned row_spacing;
        unsigned col_spacing;
+       Geometry autosize_geom;
 
        static Pointers pointers[2];
 
@@ -152,11 +153,10 @@ public:
        void set_expand(Widget &, bool, bool);
 
        void update();
+       void autosize();
 
 protected:
-       void find_constraint_group(Slot &, ConstraintType, std::set<Slot *> &);
-       void sort_slots(std::list<Slot *> &, ConstraintType);
-       void solve_constraints(int);
+       void solve_constraints(int, SolveMode);
 };
 
 } // namespace GLtk