Skip to content

Commit

Permalink
Fix corner hit detection on hand tool when zoomed
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed Jul 27, 2023
1 parent b1bed2c commit a77f82b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
21 changes: 13 additions & 8 deletions app/lib/handlers/hand.dart
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ class HandSelectionRenderer extends Renderer<Rect> {
enum HandTransformMode { scale, scaleProp }

enum HandTransformCorner {
// For rotating
center,

topLeft,
topCenter,
topRight,
Expand All @@ -77,9 +80,6 @@ enum HandTransformCorner {
bottomLeft,
bottomCenter,
bottomRight,

// For rotating
center
}

extension HandTransformCornerExtension on HandTransformCorner {
Expand Down Expand Up @@ -128,6 +128,7 @@ class HandHandler extends Handler<HandPainter> {
Offset _contextMenuOffset = Offset.zero;
Rect? _freeSelection;
Offset? _currentMousePosition;
double _scale = 1.0;

HandHandler(super.data);

Expand Down Expand Up @@ -326,7 +327,9 @@ class HandHandler extends Handler<HandPainter> {
return HandTransformCorner.values.firstWhereOrNull((element) {
final corner = element.getFromRect(selectionRect);
return Rect.fromCenter(
center: corner, width: cornerSize, height: cornerSize)
center: corner,
width: cornerSize / _scale,
height: cornerSize / _scale)
.contains(position);
});
}
Expand Down Expand Up @@ -441,9 +444,10 @@ class HandHandler extends Handler<HandPainter> {
_rulerRotation = 0;
return true;
}
final globalPos =
context.getCameraTransform().localToGlobal(details.localFocalPoint);
final cameraTransform = context.getCameraTransform();
final globalPos = cameraTransform.localToGlobal(details.localFocalPoint);
_currentMousePosition = globalPos;
_scale = cameraTransform.size;
_transformCorner = _getCornerHit(globalPos);
if (_transformCorner != null ||
(getSelectionRect()?.contains(globalPos) ?? false)) {
Expand Down Expand Up @@ -535,9 +539,10 @@ class HandHandler extends Handler<HandPainter> {

@override
void onPointerHover(PointerHoverEvent event, EventContext context) {
final globalPos =
context.getCameraTransform().localToGlobal(event.localPosition);
final transform = context.getCameraTransform();
final globalPos = transform.localToGlobal(event.localPosition);
_currentMousePosition = globalPos;
_scale = transform.size;
_transformCorner = _getCornerHit(globalPos);
context.refresh();
}
Expand Down
3 changes: 2 additions & 1 deletion fastlane/metadata/android/en-US/changelogs/70.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
* Improve import painter position
* Improve hit calculation on single point pen elements
* Improve performance of quick start view in home page ([#459](https://github.com/LinwoodDev/Butterfly/issues/459))
* Set position to clicked when pasting ([#465](https://github.com/LinwoodDev/Butterfly/issues/465))
* Fix native title bar error on mobile devices
* Fix internet problems on android ([#457](https://github.com/LinwoodDev/Butterfly/issues/457))
* Fix position when pasting elements ([#465](https://github.com/LinwoodDev/Butterfly/issues/465))
* Set position to clicked when pasting ([#465](https://github.com/LinwoodDev/Butterfly/issues/465))
* Fix corner hit detection on hand tool when zoomed

0 comments on commit a77f82b

Please sign in to comment.