internal static bool DrawStyle(GUIStyle gs, Rect position, GUIContent content, DrawStates states) { if (gs == GUIStyle.none || gs.blockId == -1 || String.IsNullOrEmpty(gs.name) || gs.normal.background != null) { return(false); } if (!GUIClip.visibleRect.Overlaps(position)) { return(true); } if (gs.blockId == 0) { gs.blockId = GUIStyleExtensions.StyleNameToBlockName(gs.name, false).GetHashCode(); } var block = FindBlock(gs.blockId, states); if (!block.IsValid()) { gs.blockId = -1; return(false); } DrawBlock(gs, block, position, content, states); return(true); }
internal static void PopulateSkin(StyleSheetResolver resolver, GUISkin skin) { var catalog = new StyleCatalog(); catalog.Load(resolver); // Global values: var globalBlock = catalog.GetStyle("*"); if (globalBlock.IsValid()) { skin.font = globalBlock.GetResource(ConverterUtils.k_Font, skin.font); } // builtin (type selector) GUIStyle skin.ForEachGUIStyleProperty((name, style) => { PopulateStyle(catalog, name.Capitalize(), style); }); // CustomStyles var customStyleBlockNames = resolver.Rules.Select(r => r.Key) .Where(ConverterUtils.IsCustomStyleSelector) .Select(GUIStyleExtensions.RuleNameToBlockName) .ToArray(); var blockNameToStyleDict = new Dictionary <string, GUIStyle>(); if (skin.customStyles != null) { // Add Existing style: ready to be overridden: foreach (var customStyle in skin.customStyles) { // GUISkin by default adds a null Style if (customStyle != null) { var blockName = GUIStyleExtensions.StyleNameToBlockName(customStyle.name); blockNameToStyleDict.TryAdd(blockName, customStyle); } } } foreach (var customStyleBlockName in customStyleBlockNames) { GUIStyle customStyle; // Check if we are overriding an existing style or if we are creating a new custom style: if (!blockNameToStyleDict.TryGetValue(customStyleBlockName, out customStyle)) { // New style being added: customStyle = new GUIStyle(); blockNameToStyleDict.Add(customStyleBlockName, customStyle); } PopulateStyle(catalog, customStyleBlockName, customStyle); } skin.customStyles = blockNameToStyleDict.Values.ToArray(); Array.Sort(skin.customStyles, (s1, s2) => s1.name.CompareTo(s2.name)); // GUISettings var settingsBlock = catalog.GetStyle("imgui-skin-settings"); if (settingsBlock.IsValid()) { skin.settings.selectionColor = settingsBlock.GetColor(ConverterUtils.k_SelectionColor, skin.settings.selectionColor); skin.settings.cursorColor = settingsBlock.GetColor(ConverterUtils.k_CursorColor, skin.settings.cursorColor); skin.settings.cursorFlashSpeed = settingsBlock.GetFloat(ConverterUtils.k_CursorFlashSpeed, skin.settings.cursorFlashSpeed); skin.settings.doubleClickSelectsWord = settingsBlock.GetBool(ConverterUtils.k_DoubleClickSelectsWord, skin.settings.doubleClickSelectsWord); skin.settings.tripleClickSelectsLine = settingsBlock.GetBool(ConverterUtils.k_TripleClickSelectsLine, skin.settings.tripleClickSelectsLine); } }
internal static void PopulateStyle(StyleCatalog catalog, string styleBlockName, GUIStyle style) { GUIStyleExtensions.PopulateStyle(catalog, style, styleBlockName, false); }