X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flineararrangement.cpp;h=5294252a11b5f38ffec445c24880e0d4009f69eb;hb=d2491d05fe17541a01bd7f3264e693fad616f2d9;hp=7769db2d64e47af8384237cc4b1eff8e80f6fc21;hpb=a4d18206b6352b3240ad9697aed10e2066d160bd;p=libs%2Fgltk.git diff --git a/source/lineararrangement.cpp b/source/lineararrangement.cpp index 7769db2..5294252 100644 --- a/source/lineararrangement.cpp +++ b/source/lineararrangement.cpp @@ -9,9 +9,20 @@ LinearArrangement::LinearArrangement(Layout &l, Side p): opposite(static_cast((primary+2)%4)), first(true), split_here(false), - gravity(opposite) + gravity(opposite), + internal_aligned(false), + uniform(false), + uniform_ref(0), + next_spacing(-1) { } +void LinearArrangement::set_uniform(bool u) +{ + uniform = u; + if(!uniform) + uniform_ref = 0; +} + void LinearArrangement::split() { if(gravity==primary) @@ -34,12 +45,17 @@ void LinearArrangement::expand() gravity = primary; } +void LinearArrangement::spacing(unsigned s) +{ + next_spacing = s; +} + void LinearArrangement::process_widget(Widget &wdg, Side side, bool aligned) { if(side==opposite) { bool snug = (internal_aligned && aligned && !split_here); - add_constraint(wdg, get_order_constraint(primary, !snug), primary); + add_constraint(wdg, get_order_constraint(primary, !snug), primary, next_spacing); if(first) edges[side].add(wdg, (aligned && gravity==opposite)); } @@ -53,6 +69,20 @@ void LinearArrangement::process_widget(Widget &wdg, Side side, bool aligned) } } +void LinearArrangement::finish_widget(Widget &wdg) +{ + if(uniform) + { + if(!uniform_ref) + uniform_ref = &wdg; + else + { + Layout::ConstraintType ct = ((primary==LEFT || primary==RIGHT) ? Layout::COPY_WIDTH : Layout::COPY_HEIGHT); + layout.add_constraint(wdg, ct, *uniform_ref); + } + } +} + void LinearArrangement::finish_slot() { internal_aligned = next.aligned; @@ -62,6 +92,7 @@ void LinearArrangement::finish_slot() next.clear(); split_here = false; first = false; + next_spacing = -1; } @@ -69,7 +100,9 @@ LinearArrangement::Loader::Loader(LinearArrangement &c): DataFile::ObjectLoader(c) { add("expand", &Loader::expand); + add("spacing", &Loader::spacing); add("split", &Loader::split); + add("uniform", &Loader::uniform); } void LinearArrangement::Loader::expand() @@ -77,10 +110,20 @@ void LinearArrangement::Loader::expand() obj.expand(); } +void LinearArrangement::Loader::spacing(unsigned s) +{ + obj.spacing(s); +} + void LinearArrangement::Loader::split() { obj.split(); } +void LinearArrangement::Loader::uniform(bool u) +{ + obj.set_uniform(u); +} + } // namespace GLtk } // namespace Msp