diff --git a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs index 838b5ff2f0..f01533641e 100644 --- a/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs +++ b/osu.Game/Overlays/SkinEditor/SkinSelectionHandler.cs @@ -120,7 +120,7 @@ namespace osu.Game.Overlays.SkinEditor var closest = getClosestAnchor(drawable); applyAnchor(drawable, closest); - applyOrigin(drawable, closest); + applyScreenSpaceOrigin(drawable, closest); } protected override void OnSelectionChanged() @@ -236,10 +236,7 @@ namespace osu.Game.Overlays.SkinEditor { var drawable = (Drawable)item; - applyOrigin(drawable, origin); - - if (!item.UsesFixedAnchor) - ApplyClosestAnchorOrigin(drawable); + applyLocalSpaceOrigin(drawable, origin); } OnOperationEnded(); @@ -320,7 +317,17 @@ namespace osu.Game.Overlays.SkinEditor drawable.Position -= drawable.AnchorPosition - previousAnchor; } - private static void applyOrigin(Drawable drawable, Anchor screenSpaceOrigin) + private static void applyLocalSpaceOrigin(Drawable drawable, Anchor localSpaceOrigin) + { + if (localSpaceOrigin == drawable.Origin) + return; + + Vector2 offset = drawable.ToParentSpace(localSpaceOrigin.PositionOnQuad(drawable.DrawRectangle)) - drawable.ToParentSpace(drawable.Origin.PositionOnQuad(drawable.DrawRectangle)); + drawable.Origin = localSpaceOrigin; + drawable.Position += offset; + } + + private static void applyScreenSpaceOrigin(Drawable drawable, Anchor screenSpaceOrigin) { var boundingBox = drawable.ScreenSpaceDrawQuad.AABBFloat;