@@ -30,7 +30,6 @@ const ALL_ANCHORS: string[] = [
30
30
'bottom-center' ,
31
31
'bottom-right' ,
32
32
] ;
33
- const CORNER_ANCHORS : string [ ] = [ 'top-left' , 'top-right' , 'bottom-left' , 'bottom-right' ] ;
34
33
const NO_ANCHORS : string [ ] = [ ] ;
35
34
36
35
/**
@@ -344,9 +343,23 @@ export class CanvasBboxToolModule extends CanvasModuleBase {
344
343
let width = roundToMultipleMin ( this . konva . proxyRect . width ( ) * this . konva . proxyRect . scaleX ( ) , gridSize ) ;
345
344
let height = roundToMultipleMin ( this . konva . proxyRect . height ( ) * this . konva . proxyRect . scaleY ( ) , gridSize ) ;
346
345
347
- // If ratio is locked OR shift is held and we are resizing from a corner, retain aspect ratio - needs special
348
- // handling. We skip this if alt/opt is held - this requires math too big for my brain.
349
- if ( ( this . manager . stateApi . getBbox ( ) . aspectRatio . isLocked || ( shift && CORNER_ANCHORS . includes ( anchor ) ) ) && ! alt ) {
346
+ // When resizing the bbox using the transformer, we may need to do some extra math to maintain the current aspect
347
+ // ratio. Need to check a few things to determine if we should be maintaining the aspect ratio or not.
348
+ let shouldMaintainAspectRatio = false ;
349
+
350
+ if ( alt ) {
351
+ // If alt is held, we are doing center-anchored transforming. In this case, maintaining aspect ratio is rather
352
+ // complicated.
353
+ shouldMaintainAspectRatio = false ;
354
+ } else if ( this . manager . stateApi . getBbox ( ) . aspectRatio . isLocked ) {
355
+ // When the aspect ratio is locked, holding shift means we SHOULD NOT maintain the aspect ratio
356
+ shouldMaintainAspectRatio = ! shift ;
357
+ } else {
358
+ // When the aspect ratio is not locked, holding shift means we SHOULD maintain aspect ratio
359
+ shouldMaintainAspectRatio = shift ;
360
+ }
361
+
362
+ if ( shouldMaintainAspectRatio ) {
350
363
// Fit the bbox to the last aspect ratio
351
364
let fittedWidth = Math . sqrt ( width * height * this . $aspectRatioBuffer . get ( ) ) ;
352
365
let fittedHeight = fittedWidth / this . $aspectRatioBuffer . get ( ) ;
0 commit comments