{
LinearProgram::Row row = linprog.add_row();
float polarity = ((j->type&SELF_DIM) ? -1 : 1);
+ float dim_weight = ((j->type&HALF_DIM) ? 0.5f : 1);
if(j->type&SELF_POS)
row[(*i)->index*5] = polarity;
if(j->type&SELF_DIM)
- row[(*i)->index*5+1] = polarity;
+ row[(*i)->index*5+1] = polarity*dim_weight;
if(j->type&TARGET_POS)
row[j->target.index*5] = -polarity;
if(j->type&TARGET_DIM)
- row[j->target.index*5+1] = -polarity;
+ row[j->target.index*5+1] = -polarity*dim_weight;
if(j->type&SPACING)
row.back() = (j->spacing>=0 ? j->spacing : this->*(ptrs.spacing));
if(j->type&SLACK)
TARGET_POS = 8,
TARGET_DIM = 16,
TARGET_MASK = 24,
- SPACING = 32,
- SLACK = 64
+ HALF_DIM = 32,
+ SPACING = 64,
+ SLACK = 128
};
public:
FAR_RIGHT_OF = HORIZONTAL|SELF_POS|TARGET_POS|TARGET_DIM|SPACING|SLACK,
FAR_LEFT_OF = HORIZONTAL|SELF_POS|SELF_DIM|TARGET_POS|SPACING|SLACK,
ALIGN_TOP = VERTICAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM,
+ ALIGN_VCENTER = VERTICAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM|HALF_DIM,
ALIGN_BOTTOM = VERTICAL|SELF_POS|TARGET_POS,
ALIGN_RIGHT = HORIZONTAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM,
+ ALIGN_HCENTER = HORIZONTAL|SELF_POS|SELF_DIM|TARGET_POS|TARGET_DIM|HALF_DIM,
ALIGN_LEFT = HORIZONTAL|SELF_POS|TARGET_POS,
COPY_WIDTH = HORIZONTAL|SELF_DIM|TARGET_DIM,
COPY_HEIGHT = VERTICAL|SELF_DIM|TARGET_DIM