def add_keep_rect_within_constraint(canvas, parent, child): solver = canvas.solver child_nw = ItemProjection(child.handles()[NW].pos, child, parent) child_se = ItemProjection(child.handles()[SE].pos, child, parent) constraint = KeepRectangleWithinConstraint(parent.handles()[NW].pos, parent.handles()[SE].pos, child_nw, child_se, child, lambda: parent.border_width) solver.add_constraint(constraint) parent.keep_rect_constraints[child] = constraint
def _keep_handle_in_parent_state(self, handle): canvas = self.canvas parent = canvas.get_parent(self) solver = canvas.solver if parent is None: return handle_pos = ItemProjection(handle.pos, self, self.parent) constraint = KeepPointWithinConstraint(parent.handles()[NW].pos, parent.handles()[SE].pos, handle_pos, lambda: parent.border_width) solver.add_constraint(constraint) self._waypoint_constraints.append(constraint)