Column();
};
- unsigned n_columns;
- unsigned n_rows;
+ unsigned n_columns = 1;
+ unsigned n_rows = 1;
std::vector<Column> columns;
- bool solved;
- bool infeasible;
+ bool solved = false;
+ bool infeasible = false;
public:
LinearProgram(unsigned);
} };
-Layout::Layout():
- container(0),
- n_active_slots(0),
- margin(8),
- row_spacing(5),
- col_spacing(4)
-{
- n_slack_vars[0] = 0;
- n_slack_vars[1] = 0;
-}
-
Layout::~Layout()
{
for(Slot *s: slots)
Arrangement *Layout::get_arrangement() const
{
if(arrangement_stack.empty())
- return 0;
+ return nullptr;
else
return arrangement_stack.back();
}
{
for(auto k=s->constraints.begin(); k!=s->constraints.end(); )
{
- if(&k->target==*i)
- s->constraints.erase(k++);
+ if(k->target==*i)
+ k = s->constraints.erase(k);
else
++k;
}
}
for(const Constraint &c: s->constraints)
- if(c.target.index>s->index && (c.type&SLACK))
+ if(c.target->index>s->index && (c.type&SLACK))
++n_slack_vars[c.type&1];
}
}
Slot &tgt_slot = get_slot_for_widget(tgt);
for(const Constraint &c: src_slot.constraints)
- if(c.type==type && &c.target==&tgt_slot)
+ if(c.type==type && c.target==&tgt_slot)
return;
src_slot.constraints.push_back(Constraint(type, tgt_slot));
/* Add rows for user-defined constraints. Constraints are always added
in pairs, so it's only necessary to create a row for one half. */
for(const Constraint &c: s->constraints)
- if(c.target.index>s->index && (c.type&1)==dir)
+ if(c.target->index>s->index && (c.type&1)==dir)
{
LinearProgram::Row row = linprog.add_row();
float polarity = ((c.type&SELF_DIM) ? -1 : 1);
if(c.type&SELF_DIM)
row[s->index*5+1] = polarity*dim_weight;
if(c.type&TARGET_POS)
- row[c.target.index*5] = -polarity;
+ row[c.target->index*5] = -polarity;
if(c.type&TARGET_DIM)
- row[c.target.index*5+1] = -polarity*dim_weight;
+ row[c.target->index*5+1] = -polarity*dim_weight;
if(c.type&SPACING)
row.back() = (c.spacing>=0 ? c.spacing : this->*(ptrs.spacing));
if(c.type&SLACK)
Layout::Constraint::Constraint(ConstraintType t, Slot &s):
type(t),
- target(s),
- spacing(-1)
-{ }
-
-
-Layout::Packing::Packing():
- gravity(-1),
- expand(false)
+ target(&s)
{ }
Layout::Slot::Slot(Layout &l, Widget &w):
layout(l),
- index(0),
- widget(w),
- ghost(false),
- floating(false)
+ widget(w)
{
vert_pack.gravity = 1;
widget.signal_autosize_changed.connect(sigc::mem_fun(this, &Slot::autosize_changed));
Layout::LinearProgram::LinearProgram(unsigned s):
n_columns(s),
- n_rows(1),
- columns(n_columns),
- solved(false),
- infeasible(false)
+ columns(n_columns)
{ }
Layout::LinearProgram::Row Layout::LinearProgram::add_row()