diff --git a/src/blocks/scratch3_looks.js b/src/blocks/scratch3_looks.js index 9061a008f..8b9e49cc9 100644 --- a/src/blocks/scratch3_looks.js +++ b/src/blocks/scratch3_looks.js @@ -114,16 +114,22 @@ class Scratch3LooksBlocks { const [bubbleWidth, bubbleHeight] = this.runtime.renderer.getSkinSize(bubbleState.drawableId); const targetBounds = target.getBounds(); const stageBounds = this.runtime.getTargetForStage().getBounds(); - if (bubbleState.onSpriteRight && bubbleWidth + targetBounds.right > stageBounds.right) { + if (bubbleState.onSpriteRight && bubbleWidth + targetBounds.right > stageBounds.right && + (targetBounds.left - bubbleWidth > stageBounds.left)) { // Only flip if it would fit bubbleState.onSpriteRight = false; this._renderBubble(target); - } else if (!bubbleState.onSpriteRight && targetBounds.left - bubbleWidth < stageBounds.left) { + } else if (!bubbleState.onSpriteRight && targetBounds.left - bubbleWidth < stageBounds.left && + (bubbleWidth + targetBounds.right < stageBounds.right)) { // Only flip if it would fit bubbleState.onSpriteRight = true; this._renderBubble(target); } else { this.runtime.renderer.updateDrawableProperties(bubbleState.drawableId, { position: [ - bubbleState.onSpriteRight ? targetBounds.right : targetBounds.left - bubbleWidth, + bubbleState.onSpriteRight ? ( + Math.min(stageBounds.right - bubbleWidth, targetBounds.right) + ) : ( + Math.max(stageBounds.left, targetBounds.left - bubbleWidth) + ), Math.min(stageBounds.top, targetBounds.top + bubbleHeight) ] });