public void Refresh() { // HACK until fix goes in: SetDelayOnSizeFieldsEnabled(false); m_CanvasWidth.SetValueWithoutNotify(settings.CanvasWidth); m_CanvasHeight.SetValueWithoutNotify(settings.CanvasHeight); SetDelayOnSizeFieldsEnabled(true); m_BackgroundOptionsFoldout.SetCheckboxValueWithoutNotify(settings.EnableCanvasBackground); m_ColorOpacityField.SetValueWithoutNotify(settings.ColorModeBackgroundOpacity); m_ImageOpacityField.SetValueWithoutNotify(settings.ImageModeCanvasBackgroundOpacity); m_CameraOpacityField.SetValueWithoutNotify(settings.CameraModeCanvasBackgroundOpacity); m_BackgroundMode.SetValueWithoutNotify(settings.CanvasBackgroundMode.ToString()); m_ColorField.SetValueWithoutNotify(settings.CanvasBackgroundColor); var scaleModeStr = settings.CanvasBackgroundImageScaleMode.ToString(); scaleModeStr = BuilderNameUtilities.ConvertCamelToDash(scaleModeStr); m_ImageField.SetValueWithoutNotify(settings.CanvasBackgroundImage); m_ImageScaleModeField.SetValueWithoutNotify(scaleModeStr); m_CameraField.SetValueWithoutNotify(FindCameraByName()); m_EditorExtensionsModeToggle?.SetValueWithoutNotify(m_Document.fileSettings.editorExtensionMode); ApplyBackgroundOptions(); RefreshMatchGameViewToggle(); }
public void Refresh() { // HACK until fix goes in: m_CanvasWidth.isDelayed = false; m_CanvasHeight.isDelayed = false; m_CanvasWidth.SetValueWithoutNotify(settings.CanvasWidth); m_CanvasHeight.SetValueWithoutNotify(settings.CanvasHeight); m_CanvasWidth.isDelayed = true; m_CanvasHeight.isDelayed = true; m_OpacityField.SetValueWithoutNotify(settings.CanvasBackgroundOpacity); m_BackgroundMode.SetValueWithoutNotify(settings.CanvasBackgroundMode.ToString()); m_ColorField.SetValueWithoutNotify(settings.CanvasBackgroundColor); var scaleModeStr = settings.CanvasBackgroundImageScaleMode.ToString(); scaleModeStr = BuilderNameUtilities.ConvertCamelToDash(scaleModeStr); m_ImageField.SetValueWithoutNotify(settings.CanvasBackgroundImage); m_ImageScaleModeField.SetValueWithoutNotify(scaleModeStr); m_CameraField.SetValueWithoutNotify(FindCameraByName()); ApplyBackgroundOptions(); }
public static void SetValue(this StyleSheet styleSheet, StyleValueHandle valueHandle, Enum value) { // Undo/Redo Undo.RegisterCompleteObjectUndo(styleSheet, BuilderConstants.ChangeUIStyleValueUndoMessage); var newEnumStr = value.ToString(); var strValue = BuilderNameUtilities.ConvertCamelToDash(newEnumStr); styleSheet.strings[valueHandle.valueIndex] = strValue; }
public static int AddValueToArray(this StyleSheet styleSheet, Enum value) { var newEnumStr = value.ToString(); var strValue = BuilderNameUtilities.ConvertCamelToDash(newEnumStr); // Add value data to data array. var values = styleSheet.strings.ToList(); values.Add(strValue); styleSheet.strings = values.ToArray(); return(values.Count - 1); }
public BuilderInspectorCanvas(BuilderInspector inspector) { m_Inspector = inspector; m_Document = inspector.document; m_CanvasInspector = m_Inspector.Q(ContainerName); var builderWindow = inspector.paneWindow as Builder; if (builderWindow == null) { return; } m_Canvas = builderWindow.canvas; m_CameraModeEnabled = false; // Size Fields m_CanvasWidth = root.Q <IntegerField>("canvas-width"); m_CanvasWidth.RegisterValueChangedCallback(OnWidthChange); m_CanvasHeight = root.Q <IntegerField>("canvas-height"); m_CanvasHeight.RegisterValueChangedCallback(OnHeightChange); m_Canvas.RegisterCallback <GeometryChangedEvent>(OnCanvasSizeChange); // This allows user to temporarily type values below the minimum canvas size SetDelayOnSizeFieldsEnabled(true); // To update the canvas size as user mouse drags the width or height labels DisableDelayOnActiveLabelMouseDraggers(); m_MatchGameViewToggle = root.Q <Toggle>("match-game-view"); m_MatchGameViewToggle.RegisterValueChangedCallback(OnMatchGameViewModeChanged); m_MatchGameViewHelpBox = root.Q <HelpBox>("match-game-view-hint"); // Background Opacity m_ColorOpacityField = root.Q <PercentSlider>("background-color-opacity-field"); m_ColorOpacityField.RegisterValueChangedCallback(e => { settings.ColorModeBackgroundOpacity = e.newValue; OnBackgroundOpacityChange(e.newValue); }); m_ImageOpacityField = root.Q <PercentSlider>("background-image-opacity-field"); m_ImageOpacityField.RegisterValueChangedCallback(e => { settings.ImageModeCanvasBackgroundOpacity = e.newValue; OnBackgroundOpacityChange(e.newValue); }); m_CameraOpacityField = root.Q <PercentSlider>("background-camera-opacity-field"); m_CameraOpacityField.RegisterValueChangedCallback(e => { settings.CameraModeCanvasBackgroundOpacity = e.newValue; OnBackgroundOpacityChange(e.newValue); }); // Setup Background State m_BackgroundOptionsFoldout = root.Q <FoldoutWithCheckbox>("canvas-background-foldout"); m_BackgroundOptionsFoldout.RegisterCheckboxValueChangedCallback(e => { settings.EnableCanvasBackground = e.newValue; PostSettingsChange(); ApplyBackgroundOptions(); }); // Setup Background Mode var backgroundModeType = typeof(BuilderCanvasBackgroundMode); var backgroundModeValues = Enum.GetValues(backgroundModeType) .OfType <BuilderCanvasBackgroundMode>().Select((v) => v.ToString()).ToList(); m_BackgroundMode = root.Q <ToggleButtonStrip>("background-mode-field"); m_BackgroundMode.enumType = backgroundModeType; m_BackgroundMode.choices = backgroundModeValues; m_BackgroundMode.RegisterValueChangedCallback(OnBackgroundModeChange); // Color field. m_ColorField = root.Q <ColorField>("background-color-field"); m_ColorField.RegisterValueChangedCallback(OnBackgroundColorChange); // Set Image field. m_ImageField = root.Q <ObjectField>("background-image-field"); m_ImageField.objectType = typeof(Texture2D); m_ImageField.RegisterValueChangedCallback(OnBackgroundImageChange); m_ImageScaleModeField = root.Q <ToggleButtonStrip>("background-image-scale-mode-field"); m_ImageScaleModeField.enumType = typeof(ScaleMode); var backgroundScaleModeValues = Enum.GetValues(typeof(ScaleMode)) .OfType <ScaleMode>().Select((v) => BuilderNameUtilities.ConvertCamelToDash(v.ToString())).ToList(); m_ImageScaleModeField.choices = backgroundScaleModeValues; m_ImageScaleModeField.RegisterValueChangedCallback(OnBackgroundImageScaleModeChange); m_FitCanvasToImageButton = root.Q <Button>("background-image-fit-canvas-button"); m_FitCanvasToImageButton.clickable.clicked += FitCanvasToImage; // Set Camera field. m_CameraField = root.Q <ObjectField>("background-camera-field"); m_CameraField.objectType = typeof(Camera); m_CameraField.RegisterValueChangedCallback(OnBackgroundCameraChange); #if !UNITY_2019_4 SetupEditorExtensionsModeToggle(); #else RemoveDocumentSettings(); #endif // Control Containers m_BackgroundColorModeControls = root.Q("canvas-background-color-mode-controls"); m_BackgroundImageModeControls = root.Q("canvas-background-image-mode-controls"); m_BackgroundCameraModeControls = root.Q("canvas-background-camera-mode-controls"); EditorApplication.playModeStateChanged += PlayModeStateChange; }
public void BindStyleField(BuilderStyleRow styleRow, string styleName, VisualElement fieldElement) { // Link the row. fieldElement.SetProperty(BuilderConstants.InspectorLinkedStyleRowVEPropertyName, styleRow); var field = FindStylePropertyInfo(styleName); if (field == null) { return; } // We don't care which element we get the value for here as we're only interested // in the type of Enum it might be (and for validation), but not it's actual value. var val = field.GetValue(fieldElement.computedStyle, null); var valType = val.GetType(); if (val is StyleFloat && fieldElement is FloatField) { var uiField = fieldElement as FloatField; uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else if (val is StyleFloat && fieldElement is IntegerField) { var uiField = fieldElement as IntegerField; #if UNITY_2019_3_OR_NEWER if (BuilderConstants.SpecialSnowflakeLengthSytles.Contains(styleName)) { uiField.RegisterValueChangedCallback(e => OnFieldDimensionChange(e, styleName)); } else #endif uiField.RegisterValueChangedCallback(e => OnFieldValueChangeIntToFloat(e, styleName)); } else if (val is StyleFloat && fieldElement is PercentSlider) { var uiField = fieldElement as PercentSlider; uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else if (val is StyleInt && fieldElement is IntegerField) { var uiField = fieldElement as IntegerField; uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else if (val is StyleLength && fieldElement is IntegerField) { var uiField = fieldElement as IntegerField; #if UNITY_2019_3_OR_NEWER uiField.RegisterValueChangedCallback(e => OnFieldDimensionChange(e, styleName)); #else uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); #endif } else if (val is StyleColor && fieldElement is ColorField) { var uiField = fieldElement as ColorField; uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else if (val is StyleFont && fieldElement is ObjectField) { var uiField = fieldElement as ObjectField; uiField.objectType = typeof(Font); uiField.RegisterValueChangedCallback(e => OnFieldValueChangeFont(e, styleName)); } else if (val is StyleBackground && fieldElement is ObjectField) { var uiField = fieldElement as ObjectField; uiField.objectType = typeof(Texture2D); uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else if (val is StyleCursor && fieldElement is ObjectField) { var uiField = fieldElement as ObjectField; uiField.objectType = typeof(Texture2D); uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else if (valType.IsGenericType && valType.GetGenericArguments()[0].IsEnum) { var propInfo = valType.GetProperty("value"); var enumValue = propInfo.GetValue(val, null) as Enum; if (fieldElement is EnumField) { var uiField = fieldElement as EnumField; uiField.Init(enumValue); uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else if (fieldElement is IToggleButtonStrip) { var uiField = fieldElement as IToggleButtonStrip; var choices = new List <string>(); var labels = new List <string>(); var enumType = enumValue.GetType(); foreach (Enum item in Enum.GetValues(enumType)) { var typeName = item.ToString(); var label = string.Empty; if (typeName == "Auto") { label = "AUTO"; } var choice = BuilderNameUtilities.ConvertCamelToDash(typeName); choices.Add(choice); labels.Add(label); } uiField.enumType = enumType; uiField.choices = choices; uiField.labels = labels; uiField.RegisterValueChangedCallback(e => OnFieldValueChange(e, styleName)); } else { // Unsupported style value type. return; } } else { // Unsupported style value type. return; } fieldElement.SetProperty(BuilderConstants.InspectorStylePropertyNameVEPropertyName, styleName); fieldElement.SetProperty(BuilderConstants.InspectorComputedStylePropertyInfoVEPropertyName, field); fieldElement.AddManipulator(new ContextualMenuManipulator(BuildStyleFieldContextualMenu)); // Add to styleName to field map. if (!m_StyleFields.ContainsKey(styleName)) { var newList = new List <VisualElement>(); newList.Add(fieldElement); m_StyleFields.Add(styleName, newList); } else { m_StyleFields[styleName].Add(fieldElement); } }
public void RefreshStyleField(string styleName, VisualElement fieldElement) { var field = FindStylePropertyInfo(styleName); if (field == null) { return; } var val = field.GetValue(currentVisualElement.computedStyle, null); var valType = val.GetType(); var cSharpStyleName = ConvertUssStyleNameToCSharpStyleName(styleName); var styleProperty = GetStyleProperty(currentRule, cSharpStyleName); if (val is StyleFloat && fieldElement is FloatField) { var style = (StyleFloat)val; var uiField = fieldElement as FloatField; var value = style.value; if (styleProperty != null) { value = styleSheet.GetFloat(styleProperty.values[0]); } uiField.SetValueWithoutNotify(value); } else if (val is StyleFloat && fieldElement is IntegerField) { var style = (StyleFloat)val; var uiField = fieldElement as IntegerField; var value = (int)style.value; if (styleProperty != null) { value = (int)styleSheet.GetFloat(styleProperty.values[0]); } uiField.SetValueWithoutNotify(value); } else if (val is StyleFloat && fieldElement is PercentSlider) { var style = (StyleFloat)val; var uiField = fieldElement as PercentSlider; var value = style.value; if (styleProperty != null) { value = styleSheet.GetFloat(styleProperty.values[0]); } uiField.SetValueWithoutNotify(value); } else if (val is StyleInt && fieldElement is IntegerField) { var style = (StyleInt)val; var uiField = fieldElement as IntegerField; var value = style.value; if (styleProperty != null) { value = styleSheet.GetInt(styleProperty.values[0]); } uiField.SetValueWithoutNotify(value); } else if (val is StyleLength && fieldElement is IntegerField) { var style = (StyleLength)val; var uiField = fieldElement as IntegerField; var value = (int)style.value.value; if (styleProperty != null) #if UNITY_2019_3_OR_NEWER { value = (int)styleSheet.GetDimension(styleProperty.values[0]).value; } #else { value = styleSheet.GetInt(styleProperty.values[0]); } #endif uiField.SetValueWithoutNotify(value); } else if (val is StyleColor && fieldElement is ColorField) { var style = (StyleColor)val; var uiField = fieldElement as ColorField; var value = style.value; if (styleProperty != null) { value = styleSheet.GetColor(styleProperty.values[0]); } // We keep falling into the alpha==0 trap. This patches the issue a little. if (value.a < 0.1f) { value.a = 255.0f; } uiField.SetValueWithoutNotify(value); } else if (val is StyleFont && fieldElement is ObjectField) { var style = (StyleFont)val; var uiField = fieldElement as ObjectField; var value = style.value; if (styleProperty != null) { value = styleSheet.GetAsset(styleProperty.values[0]) as Font; } uiField.SetValueWithoutNotify(value); } else if (val is StyleBackground && fieldElement is ObjectField) { var style = (StyleBackground)val; var uiField = fieldElement as ObjectField; var value = style.value; if (styleProperty != null) { value.texture = styleSheet.GetAsset(styleProperty.values[0]) as Texture2D; } uiField.SetValueWithoutNotify(value.texture); } else if (val is StyleCursor && fieldElement is ObjectField) { var style = (StyleCursor)val; var uiField = fieldElement as ObjectField; var value = style.value; if (styleProperty != null) { value.texture = styleSheet.GetAsset(styleProperty.values[0]) as Texture2D; } uiField.SetValueWithoutNotify(value.texture); } else if (valType.IsGenericType && valType.GetGenericArguments()[0].IsEnum) { var propInfo = valType.GetProperty("value"); var enumValue = propInfo.GetValue(val, null) as Enum; if (styleProperty != null) { var enumStr = styleSheet.GetEnum(styleProperty.values[0]); var enumStrHungarian = BuilderNameUtilities.ConvertDashToHungarian(enumStr); var enumObj = Enum.Parse(enumValue.GetType(), enumStrHungarian); enumValue = enumObj as Enum; } // The state of Flex Direction can affect many other Flex-related fields. if (styleName == "flex-direction") { updateFlexColumnGlobalState?.Invoke(enumValue); } if (fieldElement is EnumField) { var uiField = fieldElement as EnumField; uiField.SetValueWithoutNotify(enumValue); } else if (fieldElement is IToggleButtonStrip) { var enumStr = BuilderNameUtilities.ConvertCamelToDash(enumValue.ToString()); var uiField = fieldElement as IToggleButtonStrip; uiField.SetValueWithoutNotify(enumStr); } else { // Unsupported style value type. return; } } else { // Unsupported style value type. return; } // Add override style to field if it is overwritten. var styleRow = fieldElement.GetProperty(BuilderConstants.InspectorLinkedStyleRowVEPropertyName) as BuilderStyleRow; Assert.IsNotNull(styleRow); if (styleRow == null) { return; } var styleFields = styleRow.Query <BindableElement>().ToList(); bool isRowOverride = false; foreach (var styleField in styleFields) { var cShartStyleName = ConvertUssStyleNameToCSharpStyleName(styleField.bindingPath); if (GetStyleProperty(currentRule, cShartStyleName) != null) { isRowOverride = true; styleField.RemoveFromClassList(BuilderConstants.InspectorLocalStyleResetClassName); styleField.AddToClassList(BuilderConstants.InspectorLocalStyleOverrideClassName); } else if (!string.IsNullOrEmpty(styleField.bindingPath)) { styleField.AddToClassList(BuilderConstants.InspectorLocalStyleResetClassName); } } if (styleProperty != null || isRowOverride) { styleRow.AddToClassList(BuilderConstants.InspectorLocalStyleOverrideClassName); } else { styleRow.RemoveFromClassList(BuilderConstants.InspectorLocalStyleOverrideClassName); foreach (var styleField in styleFields) { styleField.RemoveFromClassList(BuilderConstants.InspectorLocalStyleOverrideClassName); styleField.RemoveFromClassList(BuilderConstants.InspectorLocalStyleResetClassName); } } }
public BuilderInspectorCanvas(BuilderInspector inspector) { m_Inspector = inspector; m_Document = inspector.document; m_CanvasInspector = m_Inspector.Q("canvas-inspector"); var builderWindow = inspector.paneWindow as Builder; if (builderWindow == null) { return; } m_Canvas = builderWindow.canvas; m_CameraModeEnabled = false; // Size Fields m_CanvasWidth = root.Q <IntegerField>("canvas-width"); m_CanvasWidth.isDelayed = true; m_CanvasWidth.RegisterValueChangedCallback(OnWidthChange); m_CanvasHeight = root.Q <IntegerField>("canvas-height"); m_CanvasHeight.isDelayed = true; m_CanvasHeight.RegisterValueChangedCallback(OnHeightChange); m_Canvas.RegisterCallback <GeometryChangedEvent>(OnCanvasSizeChange); // Background Opacity m_OpacityField = root.Q <PercentSlider>("background-opacity-field"); m_OpacityField.RegisterValueChangedCallback(OnBackgroundOpacityChange); // Setup Background Mode var backgroundModeType = typeof(BuilderCanvasBackgroundMode); var backgroundModeValues = Enum.GetValues(backgroundModeType) .OfType <BuilderCanvasBackgroundMode>().Select((v) => v.ToString()).ToList(); var backgroundModeNames = Enum.GetNames(backgroundModeType); m_BackgroundMode = root.Q <ToggleButtonStrip>("background-mode-field"); m_BackgroundMode.enumType = backgroundModeType; m_BackgroundMode.labels = backgroundModeNames; m_BackgroundMode.choices = backgroundModeValues; m_BackgroundMode.RegisterValueChangedCallback(OnBackgroundModeChange); // Color field. m_ColorField = root.Q <ColorField>("background-color-field"); m_ColorField.RegisterValueChangedCallback(OnBackgroundColorChange); // Set Image field. m_ImageField = root.Q <ObjectField>("background-image-field"); m_ImageField.objectType = typeof(Texture2D); m_ImageField.RegisterValueChangedCallback(OnBackgroundImageChange); m_ImageScaleModeField = root.Q <ToggleButtonStrip>("background-image-scale-mode-field"); m_ImageScaleModeField.enumType = typeof(ScaleMode); var backgroundScaleModeValues = Enum.GetValues(typeof(ScaleMode)) .OfType <ScaleMode>().Select((v) => BuilderNameUtilities.ConvertCamelToDash(v.ToString())).ToList(); m_ImageScaleModeField.choices = backgroundScaleModeValues; m_ImageScaleModeField.RegisterValueChangedCallback(OnBackgroundImageScaleModeChange); m_FitCanvasToImageButton = root.Q <Button>("background-image-fit-canvas-button"); m_FitCanvasToImageButton.clickable.clicked += FitCanvasToImage; // Set Camera field. m_CameraField = root.Q <ObjectField>("background-camera-field"); m_CameraField.objectType = typeof(Camera); m_CameraField.RegisterValueChangedCallback(OnBackgroundCameraChange); // Control Containers m_BackgroundColorModeControls = root.Q("canvas-background-color-mode-controls"); m_BackgroundImageModeControls = root.Q("canvas-background-image-mode-controls"); m_BackgroundCameraModeControls = root.Q("canvas-background-camera-mode-controls"); EditorApplication.playModeStateChanged += PlayModeStateChange; }