// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using System.Collections.Generic; namespace osu.Game.Skinning { /// /// An abstract skin implementation, whose primary purpose is to properly handle component fallback across multiple layers of skins (e.g.: beatmap skin, user skin, default skin). /// /// /// Common usage is to do an initial lookup via , and use the returned /// to do further lookups for related components. /// /// The initial lookup is used to lock consecutive lookups to the same underlying skin source (as to not get some elements /// from one skin and others from another, which would be the case if using methods like /// directly). /// public interface ISkinSource : ISkin { /// /// Fired whenever a source change occurs, signalling that consumers should re-query as required. /// event Action SourceChanged; /// /// Find the first (if any) skin that can fulfill the lookup. /// This should be used for cases where subsequent lookups (for related components) need to occur on the same skin. /// /// The skin to be used for subsequent lookups, or null if none is available. ISkin? FindProvider(Func lookupFunction); /// /// Retrieve all sources available for lookup, with highest priority source first. /// IEnumerable AllSources { get; } } }