// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; using System.Linq; using OpenTK; using OpenTK.Graphics; using OpenTK.Input; using osu.Framework.Graphics; using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.UserInterface; using osu.Framework.Input; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; namespace osu.Game.Screens.Select { public class SearchTextBox : OsuTextBox { protected override Color4 BackgroundUnfocused => new Color4(10, 10, 10, 255); protected override Color4 BackgroundFocused => new Color4(10, 10, 10, 255); public Action Exit; private bool focus; public bool HoldFocus { get { return focus; } set { focus = value; if (!focus) TriggerFocusLost(); } } public SearchTextBox() { Height = 35; Add(new Drawable[] { new TextAwesome { Icon = FontAwesome.fa_search, Origin = Anchor.CentreRight, Anchor = Anchor.CentreRight, Margin = new MarginPadding { Right = 10 }, } }); PlaceholderText = "type to search"; } protected override void Update() { if (HoldFocus) RequestFocus(); base.Update(); } protected override bool OnFocus(InputState state) { var result = base.OnFocus(state); BorderThickness = 0; return result; } protected override void OnFocusLost(InputState state) { if (state.Keyboard.Keys.Any(key => key == Key.Escape)) Exit?.Invoke(); base.OnFocusLost(state); } protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { if (args.Key == Key.Left || args.Key == Key.Right || args.Key == Key.Enter) return false; return base.OnKeyDown(state, args); } } }