Drag GUI circles change with display scale
This commit is contained in:
parent
45fa4b2774
commit
c287d2793c
6 changed files with 22 additions and 19 deletions
|
|
@ -696,8 +696,12 @@ ClientPortionID DrawingProgram::get_max_id(ServerPortionID serverID) {
|
|||
return maxClientID;
|
||||
}
|
||||
|
||||
float DrawingProgram::drag_point_radius() {
|
||||
return 8.0f * world.main.toolbar.final_gui_scale();
|
||||
}
|
||||
|
||||
void DrawingProgram::draw_drag_circle(SkCanvas* canvas, const Vector2f& sPos, const SkColor4f& c, const DrawData& drawData, float radiusMultiplier) {
|
||||
float constantRadius = DRAG_POINT_RADIUS * radiusMultiplier;
|
||||
float constantRadius = drag_point_radius() * radiusMultiplier;
|
||||
float constantThickness = constantRadius * 0.2f;
|
||||
canvas->drawCircle(sPos.x(), sPos.y(), constantRadius, SkPaint(c));
|
||||
SkPaint paintOutline(SkColor4f{0.95f, 0.95f, 0.95f, 1.0f});
|
||||
|
|
|
|||
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
class World;
|
||||
|
||||
#define DRAG_POINT_RADIUS 10.0f
|
||||
|
||||
class DrawingProgram {
|
||||
public:
|
||||
DrawingProgram(World& initWorld);
|
||||
|
|
@ -86,6 +84,7 @@ class DrawingProgram {
|
|||
|
||||
void drag_drop_update();
|
||||
|
||||
float drag_point_radius();
|
||||
void draw_drag_circle(SkCanvas* canvas, const Vector2f& pos, const SkColor4f& c, const DrawData& drawData, float radiusMultiplier = 1.0f);
|
||||
|
||||
void add_undo_place_component(const CollabListType::ObjectInfoPtr& objToUndo);
|
||||
|
|
|
|||
|
|
@ -459,15 +459,15 @@ bool DrawingProgramSelection::mouse_collided_with_selection_aabb() {
|
|||
}
|
||||
|
||||
bool DrawingProgramSelection::mouse_collided_with_scale_point() {
|
||||
return SCollision::collide(SCollision::Circle(scaleData.handlePoint, DRAG_POINT_RADIUS), drawP.world.main.input.mouse.pos);
|
||||
return SCollision::collide(SCollision::Circle(scaleData.handlePoint, drawP.drag_point_radius()), drawP.world.main.input.mouse.pos);
|
||||
}
|
||||
|
||||
bool DrawingProgramSelection::mouse_collided_with_rotate_center_handle_point() {
|
||||
return SCollision::collide(SCollision::Circle(rotateData.centerHandlePoint, DRAG_POINT_RADIUS), drawP.world.main.input.mouse.pos);
|
||||
return SCollision::collide(SCollision::Circle(rotateData.centerHandlePoint, drawP.drag_point_radius()), drawP.world.main.input.mouse.pos);
|
||||
}
|
||||
|
||||
bool DrawingProgramSelection::mouse_collided_with_rotate_handle_point() {
|
||||
return SCollision::collide(SCollision::Circle(rotateData.handlePoint, DRAG_POINT_RADIUS * ROTATION_POINT_RADIUS_MULTIPLIER), drawP.world.main.input.mouse.pos);
|
||||
return SCollision::collide(SCollision::Circle(rotateData.handlePoint, drawP.drag_point_radius() * ROTATION_POINT_RADIUS_MULTIPLIER), drawP.world.main.input.mouse.pos);
|
||||
}
|
||||
|
||||
Vector2f DrawingProgramSelection::get_rotation_point_pos_from_angle(double angle) {
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ void EditTool::tool_update() {
|
|||
bool clickedAway = false;
|
||||
if(!controls.pointDragging && drawP.controls.leftClick) {
|
||||
for(HandleData& h : controls.pointHandles) {
|
||||
if(SCollision::collide(mouseCircle, SCollision::Circle<float>(drawP.world.drawData.cam.c.to_space(a->coords.from_space(*h.p)), DRAG_POINT_RADIUS))) {
|
||||
if(SCollision::collide(mouseCircle, SCollision::Circle<float>(drawP.world.drawData.cam.c.to_space(a->coords.from_space(*h.p)), drawP.drag_point_radius()))) {
|
||||
controls.pointDragging = &h;
|
||||
isMovingPoint = true;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -87,17 +87,17 @@ void GridModifyTool::tool_update() {
|
|||
if(drawP.controls.leftClick) {
|
||||
Vector2f gOffsetScreenPos = drawP.world.drawData.cam.c.to_space(g.offset);
|
||||
Vector2f gSizeScreenPos = drawP.world.drawData.cam.c.to_space(g.offset + WorldVec{g.size, 0});
|
||||
if(SCollision::collide(SCollision::Circle(gOffsetScreenPos, DRAG_POINT_RADIUS), drawP.world.main.input.mouse.pos))
|
||||
if(SCollision::collide(SCollision::Circle(gOffsetScreenPos, drawP.drag_point_radius()), drawP.world.main.input.mouse.pos))
|
||||
selectionMode = 1;
|
||||
else if(SCollision::collide(SCollision::Circle(gSizeScreenPos, DRAG_POINT_RADIUS), drawP.world.main.input.mouse.pos))
|
||||
else if(SCollision::collide(SCollision::Circle(gSizeScreenPos, drawP.drag_point_radius()), drawP.world.main.input.mouse.pos))
|
||||
selectionMode = 2;
|
||||
else if(g.bounds.has_value()) {
|
||||
const auto& b = g.bounds.value();
|
||||
Vector2f bMin = drawP.world.drawData.cam.c.to_space(b.min);
|
||||
Vector2f bMax = drawP.world.drawData.cam.c.to_space(b.max);
|
||||
if(SCollision::collide(SCollision::Circle(bMin, DRAG_POINT_RADIUS), drawP.world.main.input.mouse.pos))
|
||||
if(SCollision::collide(SCollision::Circle(bMin, drawP.drag_point_radius()), drawP.world.main.input.mouse.pos))
|
||||
selectionMode = 3;
|
||||
else if(SCollision::collide(SCollision::Circle(bMax, DRAG_POINT_RADIUS), drawP.world.main.input.mouse.pos))
|
||||
else if(SCollision::collide(SCollision::Circle(bMax, drawP.drag_point_radius()), drawP.world.main.input.mouse.pos))
|
||||
selectionMode = 4;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -462,14 +462,14 @@ void ScreenshotTool::commit_rect() {
|
|||
controls.rectY1 = std::min(y1, y2);
|
||||
controls.rectY2 = std::max(y1, y2);
|
||||
|
||||
controls.circles[0] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX2 , controls.rectY2})), DRAG_POINT_RADIUS};
|
||||
controls.circles[1] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({(controls.rectX1 + controls.rectX2) * 0.5, controls.rectY2})), DRAG_POINT_RADIUS};
|
||||
controls.circles[2] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX1 , controls.rectY2})), DRAG_POINT_RADIUS};
|
||||
controls.circles[3] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX1, (controls.rectY1 + controls.rectY2) * 0.5})), DRAG_POINT_RADIUS};
|
||||
controls.circles[4] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX1 , controls.rectY1})), DRAG_POINT_RADIUS};
|
||||
controls.circles[5] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({(controls.rectX1 + controls.rectX2) * 0.5, controls.rectY1})), DRAG_POINT_RADIUS};
|
||||
controls.circles[6] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX2 , controls.rectY1})), DRAG_POINT_RADIUS};
|
||||
controls.circles[7] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX2, (controls.rectY1 + controls.rectY2) * 0.5})), DRAG_POINT_RADIUS};
|
||||
controls.circles[0] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX2 , controls.rectY2})), drawP.drag_point_radius()};
|
||||
controls.circles[1] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({(controls.rectX1 + controls.rectX2) * 0.5, controls.rectY2})), drawP.drag_point_radius()};
|
||||
controls.circles[2] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX1 , controls.rectY2})), drawP.drag_point_radius()};
|
||||
controls.circles[3] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX1, (controls.rectY1 + controls.rectY2) * 0.5})), drawP.drag_point_radius()};
|
||||
controls.circles[4] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX1 , controls.rectY1})), drawP.drag_point_radius()};
|
||||
controls.circles[5] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({(controls.rectX1 + controls.rectX2) * 0.5, controls.rectY1})), drawP.drag_point_radius()};
|
||||
controls.circles[6] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX2 , controls.rectY1})), drawP.drag_point_radius()};
|
||||
controls.circles[7] = {drawP.world.drawData.cam.c.to_space(controls.coords.from_space({controls.rectX2, (controls.rectY1 + controls.rectY2) * 0.5})), drawP.drag_point_radius()};
|
||||
}
|
||||
|
||||
bool ScreenshotTool::prevent_undo_or_redo() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue