X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frow.cpp;h=fc07cdbf25cb1c92cd56ca7e236edf9cb99c922f;hb=646af3dd91a6ca981572a5b69a0f0bd205d9af49;hp=8eb6bd4ac70444679b65cb843427c505a841ca36;hpb=df07e8f3e239b146cbc458d3cbd69758e590d255;p=libs%2Fgltk.git diff --git a/source/row.cpp b/source/row.cpp index 8eb6bd4..fc07cdb 100644 --- a/source/row.cpp +++ b/source/row.cpp @@ -3,26 +3,49 @@ namespace Msp { namespace GLtk { -Row::Row(bool u): - uniform(u) +Row::Row(Layout &l): + Arrangement(l), + first(true), + split_here(false), + gravity(-1) { } -Layout::Slot *Row::create_slot(Widget &w) +void Row::split() { - Slot *slot = new Slot(*this, w); + split_here = true; + gravity = 1; +} - if(!slots.empty()) +void Row::process_widget(Widget &wdg, Side side, bool aligned) +{ + if(side==LEFT) { - Slot &prev = *slots.back(); - slot->constraints.push_back(Constraint(RIGHT_OF, prev)); - slot->constraints.push_back(Constraint(ALIGN_TOP, prev)); - slot->constraints.push_back(Constraint(ALIGN_BOTTOM, prev)); - if(uniform) - slot->constraints.push_back(Constraint(COPY_WIDTH, prev)); + bool snug = (edges[RIGHT].aligned && aligned && !split_here); + add_constraint(wdg, (snug ? Layout::RIGHT_OF : Layout::FAR_RIGHT_OF), RIGHT); + if(first) + edges[LEFT].add(wdg, aligned); } - slot->vert_pack.expand = true; + else if(side==RIGHT) + next_right.add(wdg, (aligned && gravity>0)); + else + { + if(edges[side].aligned && aligned) + add_constraint(wdg, (side==TOP ? Layout::ALIGN_TOP : Layout::ALIGN_BOTTOM), side); + edges[side].add(wdg, aligned); + } +} - return slot; +void Row::finish_widget(Widget &wdg) +{ + layout.set_gravity(wdg, gravity, 1); +} + +void Row::finish_slot() +{ + edges[RIGHT] = next_right; + next_right.clear(); + split_here = false; + first = false; } } // namespace GLtk