void ApplyCanvasBackground(VisualElement element, BuilderDocument.CanvasTheme theme)
        {
            if (element == null)
            {
                return;
            }

            element.RemoveFromClassList(BuilderConstants.CanvasContainerDarkStyleClassName);
            element.RemoveFromClassList(BuilderConstants.CanvasContainerLightStyleClassName);
            element.RemoveFromClassList(BuilderConstants.CanvasContainerRuntimeStyleClassName);

            switch (theme)
            {
            case BuilderDocument.CanvasTheme.Dark:
                element.AddToClassList(BuilderConstants.CanvasContainerDarkStyleClassName);
                break;

            case BuilderDocument.CanvasTheme.Light:
                element.AddToClassList(BuilderConstants.CanvasContainerLightStyleClassName);
                break;

            case BuilderDocument.CanvasTheme.Runtime:
                element.AddToClassList(BuilderConstants.CanvasContainerRuntimeStyleClassName);
                break;

            case BuilderDocument.CanvasTheme.Default:
                string defaultClass = EditorGUIUtility.isProSkin
                        ? BuilderConstants.CanvasContainerDarkStyleClassName
                        : BuilderConstants.CanvasContainerLightStyleClassName;
                element.AddToClassList(defaultClass);
                break;
            }
        }
        void ChangeCanvasTheme(BuilderDocument.CanvasTheme theme)
        {
            ApplyCanvasTheme(m_Viewport.documentElement, theme);
            ApplyCanvasBackground(m_Viewport.canvas.defaultBackgroundElement, theme);
            ApplyCanvasTheme(m_TooltipPreview, theme);
            ApplyCanvasBackground(m_TooltipPreview, theme);

            document.ChangeDocumentTheme(m_Viewport.documentElement, theme);
        }
        public void ChangeCanvasTheme(BuilderDocument.CanvasTheme theme, ThemeStyleSheet themeStyleSheet = null)
        {
            ApplyCanvasTheme(m_Viewport.sharedStylesAndDocumentElement, theme, themeStyleSheet);
            ApplyCanvasBackground(m_Viewport.canvas.defaultBackgroundElement, theme, themeStyleSheet);
            ApplyCanvasTheme(m_TooltipPreview, theme, themeStyleSheet);
            ApplyCanvasBackground(m_TooltipPreview, theme, themeStyleSheet);

            document.ChangeDocumentTheme(m_Viewport.documentRootElement, theme, themeStyleSheet);
            m_Inspector?.selection.NotifyOfStylingChange(null, null, BuilderStylingChangeType.RefreshOnly);
        }
Example #4
0
        void ApplyCanvasTheme(VisualElement element, BuilderDocument.CanvasTheme theme)
        {
            if (element == null)
            {
                return;
            }

            // Find the runtime stylesheet.
            var runtimeStyleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>(BuilderConstants.RuntimeThemeUSSPath);

            if (runtimeStyleSheet == null)
            {
                runtimeStyleSheet = UIElementsEditorUtility.s_DefaultCommonLightStyleSheet;
            }

            element.styleSheets.Remove(UIElementsEditorUtility.s_DefaultCommonDarkStyleSheet);
            element.styleSheets.Remove(UIElementsEditorUtility.s_DefaultCommonLightStyleSheet);
            element.styleSheets.Remove(runtimeStyleSheet);
            m_Viewport.canvas.defaultBackgroundElement.style.display = DisplayStyle.Flex;

            StyleSheet themeStyleSheet = null;

            m_Viewport.canvas.checkerboardBackgroundElement.style.display = DisplayStyle.None;

            switch (theme)
            {
            case BuilderDocument.CanvasTheme.Dark:
                themeStyleSheet = UIElementsEditorUtility.s_DefaultCommonDarkStyleSheet;
                break;

            case BuilderDocument.CanvasTheme.Light:
                themeStyleSheet = UIElementsEditorUtility.s_DefaultCommonLightStyleSheet;
                break;

            case BuilderDocument.CanvasTheme.Runtime:
                themeStyleSheet = runtimeStyleSheet;
#if UNITY_2019_3_OR_NEWER
                m_Viewport.canvas.defaultBackgroundElement.style.display      = DisplayStyle.None;
                m_Viewport.canvas.checkerboardBackgroundElement.style.display = DisplayStyle.Flex;
#endif
                break;

            case BuilderDocument.CanvasTheme.Default:
                themeStyleSheet = null;
                break;
            }

            if (themeStyleSheet != null)
            {
                element.styleSheets.Add(themeStyleSheet);
            }
        }
        static string GetEditorThemeText(BuilderDocument.CanvasTheme theme)
        {
            switch (theme)
            {
            case BuilderDocument.CanvasTheme.Default: return("Active Editor Theme");

            case BuilderDocument.CanvasTheme.Dark: return("Dark Editor Theme");

            case BuilderDocument.CanvasTheme.Light: return("Light Editor Theme");

            default:
                break;
            }

            return(null);
        }
        void ApplyCanvasTheme(VisualElement element, BuilderDocument.CanvasTheme theme)
        {
            if (element == null)
            {
                return;
            }

            // Find the runtime stylesheet.
            var runtimeStyleSheet = AssetDatabase.LoadAssetAtPath <StyleSheet>(BuilderConstants.RuntimeThemeUSSPath);

            if (runtimeStyleSheet == null)
            {
                runtimeStyleSheet = UIElementsEditorUtility.s_DefaultCommonLightStyleSheet;
            }

            element.styleSheets.Remove(UIElementsEditorUtility.s_DefaultCommonDarkStyleSheet);
            element.styleSheets.Remove(UIElementsEditorUtility.s_DefaultCommonLightStyleSheet);
            element.styleSheets.Remove(runtimeStyleSheet);

            StyleSheet themeStyleSheet = null;

            switch (theme)
            {
            case BuilderDocument.CanvasTheme.Dark:
                themeStyleSheet = UIElementsEditorUtility.s_DefaultCommonDarkStyleSheet;
                break;

            case BuilderDocument.CanvasTheme.Light:
                themeStyleSheet = UIElementsEditorUtility.s_DefaultCommonLightStyleSheet;
                break;

            case BuilderDocument.CanvasTheme.Runtime:
                themeStyleSheet = runtimeStyleSheet;
                break;

            case BuilderDocument.CanvasTheme.Default:
                themeStyleSheet = null;
                break;
            }

            if (themeStyleSheet != null)
            {
                element.styleSheets.Add(themeStyleSheet);
            }
        }
        void ApplyCanvasTheme(VisualElement element, BuilderDocument.CanvasTheme theme, ThemeStyleSheet customThemeSheet)
        {
            if (element == null)
            {
                return;
            }

            // Find the runtime stylesheet.
            var runtimeStyleSheet = BuilderPackageUtilities.LoadAssetAtPath <StyleSheet>(BuilderConstants.RuntimeThemeUSSPath);

            if (runtimeStyleSheet == null)
#if !UI_BUILDER_PACKAGE || UNITY_2021_1_OR_NEWER
            { runtimeStyleSheet = UIElementsEditorUtility.GetCommonLightStyleSheet(); }
#else
            { runtimeStyleSheet = UIElementsEditorUtility.s_DefaultCommonLightStyleSheet; }
#endif

            // Remove any null stylesheet. This may occur if an used theme has been deleted.
            // This should be handle by ui toolkit
            var i = 0;

            if (element.styleSheetList != null)
            {
                while (i < element.styleSheetList.Count)
                {
                    var sheet = element.styleSheetList[i];
                    if (sheet == null)
                    {
                        element.styleSheetList?.Remove(sheet);
                        if (element.styleSheetList.Count == 0)
                        {
                            element.styleSheetList = null;
                            break;
                        }
                    }
                    else
                    {
                        i++;
                    }
                }
            }

            // Should remove the previous custom theme stylesheet
            if (m_LastCustomTheme)
            {
                element.styleSheets.Remove(m_LastCustomTheme);
            }
#if !UI_BUILDER_PACKAGE || UNITY_2021_1_OR_NEWER
            element.styleSheets.Remove(UIElementsEditorUtility.GetCommonDarkStyleSheet());
            element.styleSheets.Remove(UIElementsEditorUtility.GetCommonLightStyleSheet());
#else
            element.styleSheets.Remove(UIElementsEditorUtility.s_DefaultCommonDarkStyleSheet);
            element.styleSheets.Remove(UIElementsEditorUtility.s_DefaultCommonLightStyleSheet);
#endif
            element.styleSheets.Remove(runtimeStyleSheet);
            m_Viewport.canvas.defaultBackgroundElement.style.display = DisplayStyle.Flex;

            StyleSheet themeStyleSheet = null;
            m_Viewport.canvas.checkerboardBackgroundElement.style.display = DisplayStyle.None;

            switch (theme)
            {
            case BuilderDocument.CanvasTheme.Dark:
#if !UI_BUILDER_PACKAGE || UNITY_2021_1_OR_NEWER
                themeStyleSheet = UIElementsEditorUtility.GetCommonDarkStyleSheet();
#else
                themeStyleSheet = UIElementsEditorUtility.s_DefaultCommonDarkStyleSheet;
#endif
                break;

            case BuilderDocument.CanvasTheme.Light:
#if !UI_BUILDER_PACKAGE || UNITY_2021_1_OR_NEWER
                themeStyleSheet = UIElementsEditorUtility.GetCommonLightStyleSheet();
#else
                themeStyleSheet = UIElementsEditorUtility.s_DefaultCommonLightStyleSheet;
#endif
                break;

            case BuilderDocument.CanvasTheme.Runtime:
                themeStyleSheet = runtimeStyleSheet;
                m_Viewport.canvas.defaultBackgroundElement.style.display      = DisplayStyle.None;
                m_Viewport.canvas.checkerboardBackgroundElement.style.display = DisplayStyle.Flex;
                break;

            case BuilderDocument.CanvasTheme.Default:
                themeStyleSheet = null;
                break;

            case BuilderDocument.CanvasTheme.Custom:
                m_LastCustomTheme = customThemeSheet;
                themeStyleSheet   = customThemeSheet;
                break;
            }

            if (themeStyleSheet != null)
            {
                element.styleSheets.Add(themeStyleSheet);
            }
        }
        void ApplyCanvasTheme(VisualElement element, BuilderDocument.CanvasTheme theme, ThemeStyleSheet customThemeSheet)
        {
            if (element == null)
            {
                return;
            }

            // Remove any null stylesheet. This may occur if an used theme has been deleted.
            // This should be handle by ui toolkit
            var i = 0;

            if (element.styleSheetList != null)
            {
                while (i < element.styleSheetList.Count)
                {
                    var sheet = element.styleSheetList[i];
                    if (sheet == null)
                    {
                        element.styleSheetList?.Remove(sheet);
                        if (element.styleSheetList.Count == 0)
                        {
                            element.styleSheetList = null;
                            break;
                        }
                    }
                    else
                    {
                        i++;
                    }
                }
            }

            // Should remove the previous custom theme stylesheet
            if (m_LastCustomTheme)
            {
                element.styleSheets.Remove(m_LastCustomTheme);
                m_LastCustomTheme = null;
            }
            // We verify whether the styles are loaded beforehand because calling GetCommonXXXStyleSheet() will load them unecessarily in this case
            if (UIElementsEditorUtility.IsCommonDarkStyleSheetLoaded())
            {
                element.styleSheets.Remove(UIElementsEditorUtility.GetCommonDarkStyleSheet());
            }
            if (UIElementsEditorUtility.IsCommonLightStyleSheetLoaded())
            {
                element.styleSheets.Remove(UIElementsEditorUtility.GetCommonLightStyleSheet());
            }
            m_Viewport.canvas.defaultBackgroundElement.style.display = DisplayStyle.Flex;

            StyleSheet themeStyleSheet = null;

            m_Viewport.canvas.checkerboardBackgroundElement.style.display = DisplayStyle.None;

            switch (theme)
            {
            case BuilderDocument.CanvasTheme.Dark:
                themeStyleSheet = UIElementsEditorUtility.GetCommonDarkStyleSheet();
                break;

            case BuilderDocument.CanvasTheme.Light:
                themeStyleSheet = UIElementsEditorUtility.GetCommonLightStyleSheet();
                break;

            case BuilderDocument.CanvasTheme.Default:
                themeStyleSheet = EditorGUIUtility.isProSkin ? UIElementsEditorUtility.GetCommonDarkStyleSheet() : UIElementsEditorUtility.GetCommonLightStyleSheet();
                break;

            case BuilderDocument.CanvasTheme.Custom:
                m_Viewport.canvas.defaultBackgroundElement.style.display      = DisplayStyle.None;
                m_Viewport.canvas.checkerboardBackgroundElement.style.display = DisplayStyle.Flex;
                m_LastCustomTheme = customThemeSheet;
                themeStyleSheet   = customThemeSheet;
                break;

            default:
                break;
            }

            if (themeStyleSheet != null)
            {
                element.styleSheets.Add(themeStyleSheet);
            }

            element.SetProperty(BuilderConstants.ElementLinkedActiveThemeStyleSheetVEPropertyName, themeStyleSheet);
        }
 bool IsEditorCanvasTheme(BuilderDocument.CanvasTheme theme)
 {
     return(theme is BuilderDocument.CanvasTheme.Default or BuilderDocument.CanvasTheme.Dark or BuilderDocument.CanvasTheme.Light);
 }