Image crop bounds limited to not cause integer division by zero error
This commit is contained in:
parent
fb344f3a54
commit
5cbcc9af80
6 changed files with 15 additions and 8 deletions
|
|
@ -102,7 +102,6 @@ void EditTool::input_mouse_button_on_canvas_callback(const InputManager::MouseBu
|
|||
if(SCollision::collide(mouseCircle, SCollision::Circle<float>(drawP.world.drawData.cam.c.to_space(objInfoBeingEdited->obj->coords.from_space(h.coordMatrix * (*h.p))), drawP.drag_point_radius()))) {
|
||||
pointDragging = &h;
|
||||
isMovingPoint = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!isMovingPoint && !objInfoBeingEdited->obj->collides_with_cam_coords(drawP.world.drawData.cam.c, cMouseCircle))
|
||||
|
|
@ -141,9 +140,9 @@ void EditTool::input_mouse_motion_callback(const InputManager::MouseMotionCallba
|
|||
Vector2f newPos = pointDragging->coordMatrix.inverse() * objInfoBeingEdited->obj->coords.get_mouse_pos(drawP.world);
|
||||
if(newPos != *pointDragging->p) {
|
||||
if(pointDragging->min)
|
||||
newPos = cwise_vec_max((*pointDragging->min + Vector2f{pointDragging->minimumDistanceBetweenBoundsAndPoint, pointDragging->minimumDistanceBetweenBoundsAndPoint}).eval(), newPos);
|
||||
newPos = cwise_vec_max((*pointDragging->min + Vector2f{pointDragging->minimumDistanceBetweenMinAndPoint, pointDragging->minimumDistanceBetweenMinAndPoint}).eval(), newPos);
|
||||
if(pointDragging->max)
|
||||
newPos = cwise_vec_min((*pointDragging->max - Vector2f{pointDragging->minimumDistanceBetweenBoundsAndPoint, pointDragging->minimumDistanceBetweenBoundsAndPoint}).eval(), newPos);
|
||||
newPos = cwise_vec_min((*pointDragging->max - Vector2f{pointDragging->minimumDistanceBetweenMaxAndPoint, pointDragging->minimumDistanceBetweenMaxAndPoint}).eval(), newPos);
|
||||
*pointDragging->p = newPos;
|
||||
objInfoBeingEdited->obj->commit_update(drawP);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,8 @@ class EditTool : public DrawingProgramToolBase {
|
|||
Vector2f* p;
|
||||
Vector2f* min;
|
||||
Vector2f* max;
|
||||
float minimumDistanceBetweenBoundsAndPoint = MINIMUM_DISTANCE_BETWEEN_BOUNDS;
|
||||
float minimumDistanceBetweenMinAndPoint = MINIMUM_DISTANCE_BETWEEN_BOUNDS;
|
||||
float minimumDistanceBetweenMaxAndPoint = MINIMUM_DISTANCE_BETWEEN_BOUNDS;
|
||||
Affine2f coordMatrix = Affine2f::Identity();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -29,8 +29,9 @@ void ImageEditTool::edit_start(EditTool& editTool, CanvasComponentContainer::Obj
|
|||
Affine2f transformMat = Translation2f(a.d.p1) * AlignedScaling2f(a.d.p2 - a.d.p1) * Affine2f::Identity();
|
||||
|
||||
prevData = a.d;
|
||||
editTool.add_point_handle({&a.d.cropP1, &staticZero, &a.d.cropP2, 0.0f, transformMat});
|
||||
editTool.add_point_handle({&a.d.cropP2, &a.d.cropP1, &staticOne, 0.0f, transformMat});
|
||||
constexpr float MINIMUM_DISTANCE_BETWEEN_IMAGE_CROP_POINTS = 0.02f;
|
||||
editTool.add_point_handle({&a.d.cropP1, &staticZero, &a.d.cropP2, 0.0f, MINIMUM_DISTANCE_BETWEEN_IMAGE_CROP_POINTS, transformMat});
|
||||
editTool.add_point_handle({&a.d.cropP2, &a.d.cropP1, &staticOne, MINIMUM_DISTANCE_BETWEEN_IMAGE_CROP_POINTS, 0.0f, transformMat});
|
||||
a.d.editing = true;
|
||||
comp->obj->commit_update(drawP);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue