// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Input.States; using OpenTK; namespace osu.Game.Tournament.Screens.Ladder { public class ScrollableContainer : Container { protected override bool OnDragStart(InputState state) => true; public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => true; private Vector2 target; private float scale = 1; protected override bool OnDrag(InputState state) { this.TransformTo(nameof(OriginPosition), target -= state.Mouse.Delta / scale, 1000, Easing.OutQuint); return base.OnDrag(state); } protected override bool OnScroll(InputState state) { this.ScaleTo(scale += state.Mouse.ScrollDelta.Y / 15 * scale, 1000, Easing.OutQuint); target = ToLocalSpace(state.Mouse.NativeState.Position) / 2; this.TransformTo(nameof(OriginPosition), target, 1000, Easing.OutQuint); return base.OnScroll(state); } protected override void Update() { base.Update(); Invalidate(); } } }