diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenuAction.cs b/Assets/ContextCircleMenu/Editor/Core/CircleMenuAction.cs new file mode 100644 index 0000000..02be82f --- /dev/null +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenuAction.cs @@ -0,0 +1,63 @@ +using System; +using UnityEngine; + +namespace ContextCircleMenu.Editor +{ + public class CircleMenuAction + { + [Flags] + public enum Status + { + Normal, + Disabled + } + + private readonly Func _actionStatusCallback; + + private CircleMenuEventInformation _information; + + public CircleMenuAction(string path, Action action, + Func status = null, GUIContent icon = null) + { + Path = path; + ActionName = path.Split("/")[^1]; + ActionCallback = action; + _actionStatusCallback = status; + Icon = icon; + } + + public CircleMenuAction(string path, Action action, GUIContent icon) + : this(path, action, AlwaysEnabled, icon) + { + } + + public string Path { get; } + public string ActionName { get; set; } + public Action ActionCallback { get; internal set; } + public GUIContent Icon { get; set; } + public Status CurrentStatus { get; private set; } + + public void UpdateStatus(CircleMenuEventInformation information) + { + _information = information; + CurrentStatus = _actionStatusCallback?.Invoke(information) ?? Status.Disabled; + } + + public void Execute() + { + if (CurrentStatus == Status.Disabled) + return; + ActionCallback?.Invoke(_information); + } + + public static Status AlwaysEnabled(CircleMenuEventInformation _) + { + return Status.Normal; + } + + public static Status AlwaysDisabled(CircleMenuEventInformation _) + { + return Status.Disabled; + } + } +} \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenuAction.cs.meta b/Assets/ContextCircleMenu/Editor/Core/CircleMenuAction.cs.meta new file mode 100644 index 0000000..2690462 --- /dev/null +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenuAction.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 826aeeee70b54e3889cca1cff0dd833d +timeCreated: 1716118343 \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenuBuilder.cs b/Assets/ContextCircleMenu/Editor/Core/CircleMenuBuilder.cs index 2f28b36..6acfc6d 100644 --- a/Assets/ContextCircleMenu/Editor/Core/CircleMenuBuilder.cs +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenuBuilder.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using UnityEditor; using UnityEngine; namespace ContextCircleMenu.Editor @@ -9,26 +10,51 @@ namespace ContextCircleMenu.Editor public sealed class CircleMenuBuilder { private readonly List _factories = new(); + private Func _basePathCallback; private IButtonFactory _buttonFactory; + private IFolderCircleMenuFactory _folderFactory; internal CircleMenu Build(IMenuControllable menu) { _folderFactory ??= new FolderMenuFactory(); _buttonFactory ??= new ButtonFactory(); + + var basePath = _basePathCallback?.Invoke(); CircleMenu root = _folderFactory.Create(string.Empty, menu, null, _buttonFactory); foreach (var factory in _factories) { + if (factory is FilteredCircleMenuFactory filteredFactory) + { + if (!filteredFactory.Filter()) + continue; + } + var pathSegments = factory.PathSegments.SkipLast(1); + + if (!string.IsNullOrEmpty(basePath)) + { + var basePathSegments = basePath.Split('/'); + if (pathSegments.Take(basePathSegments.Length).SequenceEqual(basePathSegments)) + { + pathSegments = pathSegments.Skip(basePathSegments.Length); + }else + { + continue; + } + } + var currentMenu = root; foreach (var pathSegment in pathSegments) { - var child = currentMenu.Children.Find(m => m.Path == pathSegment); + var child = currentMenu.Children.Find(m => m.MenuAction.Path == pathSegment); if (child == null) { child = _folderFactory.Create(pathSegment, menu, currentMenu, _buttonFactory); - var backButton = _buttonFactory.CreateBackButton(menu.Back); + var backMenuAction = new CircleMenuAction(pathSegment, _ => menu.Back(), + _ => CircleMenuAction.Status.Normal, EditorGUIUtility.IconContent(EditorIcons.Back2x)); + var backButton = _buttonFactory.CreateBackButton(backMenuAction, -1); backButton.ShouldCloseMenuAfterSelection = false; child.PrepareButton(backButton); currentMenu.Children.Add(child); @@ -61,7 +87,24 @@ public void AddMenu(ContextCircleMenuAttribute attribute, MethodInfo method) /// public void AddMenu(string path, GUIContent content, Action action) { - AddMenu(new CircleMenuFactory(path, content, action)); + var circleMenuAction = new CircleMenuAction(path, _ => action(), content); + AddMenu(new CircleMenuFactory(circleMenuAction)); + } + + public void AddMenu(string path, Action action, + Func statusCallback = null, + GUIContent content = null) + { + var circleMenuAction = new CircleMenuAction(path, action, statusCallback, content); + AddMenu(new CircleMenuFactory(circleMenuAction)); + } + + public void AddMenuWithFilter(string path, Action action, Func filter, + Func statusCallback = null, + GUIContent content = null) + { + var circleMenuAction = new CircleMenuAction(path, action, statusCallback, content); + AddMenu(new FilteredCircleMenuFactory(circleMenuAction, filter)); } /// @@ -90,5 +133,11 @@ public void ConfigureButton(IButtonFactory factory) { _buttonFactory = factory; } + + public void ConfigureBasePath(Func basePathCallback) + { + _basePathCallback = basePathCallback; + } + } } \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenuEventInformation.cs b/Assets/ContextCircleMenu/Editor/Core/CircleMenuEventInformation.cs new file mode 100644 index 0000000..28b52ae --- /dev/null +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenuEventInformation.cs @@ -0,0 +1,16 @@ +using UnityEngine; + +namespace ContextCircleMenu.Editor +{ + public struct CircleMenuEventInformation + { + public CircleMenuEventInformation(Vector2 mousePosition, Vector2 position) + { + MousePosition = mousePosition; + Position = position; + } + + public Vector2 MousePosition { get; } + public Vector2 Position { get; } + } +} \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenuEventInformation.cs.meta b/Assets/ContextCircleMenu/Editor/Core/CircleMenuEventInformation.cs.meta new file mode 100644 index 0000000..259f723 --- /dev/null +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenuEventInformation.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 693d3a586e3541698b79eb264a7d3dc5 +timeCreated: 1716124369 \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenu.cs b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenu.cs index ef08767..8172bda 100644 --- a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenu.cs +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenu.cs @@ -2,7 +2,6 @@ using System.Buffers; using System.Collections.Generic; using System.Linq; -using UnityEngine; using UnityEngine.UIElements; namespace ContextCircleMenu.Editor @@ -20,24 +19,21 @@ public abstract class CircleMenu protected CircleButton[] ButtonElements; protected VisualElement[] UtilityElements; - protected CircleMenu(string path, GUIContent icon, Action onSelected, CircleMenu parent, IButtonFactory factory, - bool shouldCloseMenuAfterSelection = true) + protected CircleMenu(CircleMenuAction menuAction, IButtonFactory factory, + CircleMenu parent = null, bool shouldCloseMenuAfterSelection = true) { - Path = path; - Icon = icon; - OnSelected = onSelected; + MenuAction = menuAction; + _buttonFactory = factory; Parent = parent; ShouldCloseMenuAfterSelection = shouldCloseMenuAfterSelection; - _buttonFactory = factory; } + internal CircleMenuAction MenuAction { get; private set; } public List Children { get; } = new(8); - public GUIContent Icon { get; } - public string Path { get; } public bool ShouldCloseMenuAfterSelection { get; } - public Action OnSelected { get; protected set; } - internal ReadOnlySpan BuildElements(ref ContextCircleMenuOption menuOption) + internal ReadOnlySpan BuildElements(CircleMenuEventInformation information, + ref ContextCircleMenuOption menuOption) { if (!_alreadyInitialized) { @@ -50,6 +46,9 @@ internal ReadOnlySpan BuildElements(ref ContextCircleMenuOption m _alreadyInitialized = true; } + var buttonSpan = ButtonElements.AsSpan(); + for (var i = 0; i < buttonSpan.Length; i++) buttonSpan[i].UpdateStatus(information); + OnBuild(); var pool = ArrayPool.Shared; diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenuFactory.cs b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenuFactory.cs index b363c66..8a8ba96 100644 --- a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenuFactory.cs +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/CircleMenuFactory.cs @@ -1,55 +1,68 @@ using System; using System.Collections.Generic; -using System.Linq; using System.Reflection; using UnityEditor; using UnityEngine; namespace ContextCircleMenu.Editor { - public class AttributeCircleMenuFactory : ICircleMenuFactory + public class CircleMenuFactory : ICircleMenuFactory { - private readonly GUIContent _content; - private readonly MethodInfo _method; + private readonly CircleMenuAction _circleMenuAction; - public AttributeCircleMenuFactory(ContextCircleMenuAttribute attribute, MethodInfo method) + public CircleMenuFactory(CircleMenuAction circleMenuAction) { - PathSegments = attribute.Path.Split("/"); - _method = method; - - _content = !string.IsNullOrEmpty(attribute.IconPath) - ? EditorGUIUtility.IconContent(attribute.IconPath) - : default; + PathSegments = circleMenuAction.Path.Split("/"); + _circleMenuAction = circleMenuAction; } public IEnumerable PathSegments { get; } public CircleMenu Create(IButtonFactory factory) { - return new LeafCircleMenu(PathSegments.Last(), _content, () => _method.Invoke(null, null), factory); + return new LeafCircleMenu(_circleMenuAction, factory); } } - public class CircleMenuFactory : ICircleMenuFactory + public class AttributeCircleMenuFactory : ICircleMenuFactory { - private readonly Action _action; - private readonly GUIContent _content; + private readonly CircleMenuAction _circleMenuAction; - public CircleMenuFactory(string path, GUIContent content, Action action) + public AttributeCircleMenuFactory(ContextCircleMenuAttribute attribute, MethodInfo method) { - PathSegments = path.Split("/"); - _content = content; - _action = action; + PathSegments = attribute.Path.Split("/"); + + var icon = default(GUIContent); + + if (!string.IsNullOrEmpty(attribute.IconPath)) + icon = EditorGUIUtility.IconContent(attribute.IconPath); + + _circleMenuAction = + new CircleMenuAction(attribute.Path, + action => + method.Invoke(null, method.GetParameters().Length == 0 ? null : new object[] { action }), + icon); } public IEnumerable PathSegments { get; } public CircleMenu Create(IButtonFactory factory) { - return new LeafCircleMenu(PathSegments.Last(), _content, _action, factory); + return new LeafCircleMenu(_circleMenuAction, factory); } } + public class FilteredCircleMenuFactory : CircleMenuFactory + { + public FilteredCircleMenuFactory(CircleMenuAction circleMenuAction, Func filter) : base( + circleMenuAction) + { + Filter = filter; + } + + public Func Filter { get; } + } + public class FolderMenuFactory : IFolderCircleMenuFactory { public FolderCircleMenu Create(string path, IMenuControllable menu, CircleMenu parent, IButtonFactory factory) diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/FolderCircleMenu.cs b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/FolderCircleMenu.cs index d8256e5..7473313 100644 --- a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/FolderCircleMenu.cs +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/FolderCircleMenu.cs @@ -9,20 +9,11 @@ public class FolderCircleMenu : CircleMenu { private Vector3[] _buttonPositions; - public FolderCircleMenu(string path, IMenuControllable menu, - GUIContent icon, - CircleMenu parent, - IButtonFactory factory) : - base(path, icon, null, parent, factory, false) - { - OnSelected = () => menu.Open(this); - } - - internal FolderCircleMenu(string path, IMenuControllable menu, - CircleMenu parent, - IButtonFactory factory) : - this(path, menu, EditorGUIUtility.IconContent(EditorIcons.FolderIcon), parent, factory) + public FolderCircleMenu(string path, IMenuControllable menu, CircleMenu parent, IButtonFactory factory) + : base(new CircleMenuAction(path, null, EditorGUIUtility.IconContent(EditorIcons.FolderIcon)) + , factory, parent, false) { + MenuAction.ActionCallback = _ => menu.Open(this); } /// @@ -32,11 +23,7 @@ protected override CircleButton[] CreateButtons(IButtonFactory factory, ref Cont for (var index = 0; index < buttons.Length; index++) { var item = Children[index]; - var button = factory.Create( - item.Path, - item.Icon, - item.OnSelected, - Children.Count - index); + var button = factory.Create(item.MenuAction, Children.Count - index); button.ShouldCloseMenuAfterSelection = item.ShouldCloseMenuAfterSelection; buttons[index] = button; } @@ -47,7 +34,7 @@ protected override CircleButton[] CreateButtons(IButtonFactory factory, ref Cont /// protected override VisualElement[] CreateUtilityElements(ref ContextCircleMenuOption menuOption) { - var label = new Label(Path) + var label = new Label(MenuAction.ActionName) { style = { diff --git a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/LeafCircleMenu.cs b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/LeafCircleMenu.cs index 4401217..519dfe7 100644 --- a/Assets/ContextCircleMenu/Editor/Core/CircleMenus/LeafCircleMenu.cs +++ b/Assets/ContextCircleMenu/Editor/Core/CircleMenus/LeafCircleMenu.cs @@ -1,13 +1,9 @@ -using System; -using UnityEngine; - namespace ContextCircleMenu.Editor { /// public sealed class LeafCircleMenu : CircleMenu { - public LeafCircleMenu(string path, GUIContent icon, Action onSelected, IButtonFactory factory, - CircleMenu parent = null) : base(path, icon, onSelected, parent, factory) + public LeafCircleMenu(CircleMenuAction action, IButtonFactory factory) : base(action, factory) { } diff --git a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/ButtonFactory.cs b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/ButtonFactory.cs index 44b3b61..5bc828d 100644 --- a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/ButtonFactory.cs +++ b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/ButtonFactory.cs @@ -1,19 +1,19 @@ -using System; using UnityEditor; -using UnityEngine; namespace ContextCircleMenu.Editor { public class ButtonFactory : IButtonFactory { - public CircleButton Create(string path, GUIContent icon, Action onSelected, int section) + public CircleButton Create(CircleMenuAction menuAction, int section) { - return new SimpleCircleButton(path, icon, section, onSelected); + return new SimpleCircleButton(menuAction, section); } - public CircleButton CreateBackButton(Action onBack) + public CircleButton CreateBackButton(CircleMenuAction menuAction, int section) { - return new SimpleCircleButton("Back", EditorGUIUtility.IconContent(EditorIcons.Back2x), -1, onBack); + menuAction.ActionName = "Back"; + menuAction.Icon = EditorGUIUtility.IconContent(EditorIcons.Back2x); + return new SimpleCircleButton(menuAction, section); } } } \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/CircleButton.cs b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/CircleButton.cs index c864533..129224a 100644 --- a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/CircleButton.cs +++ b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/CircleButton.cs @@ -1,46 +1,49 @@ -using System; -using UnityEngine; using UnityEngine.UIElements; namespace ContextCircleMenu.Editor { public abstract class CircleButton : VisualElement { - private readonly Action _onSelect; private Button _button; + private bool _shouldCloseMenuAfterSelection = true; - protected CircleButton(string text, GUIContent icon, int section, Action onSelect) + protected CircleButton(CircleMenuAction menuAction, int section) { - _onSelect = onSelect; - + CircleMenuAction = menuAction; Section = section; + Initialize(); + } - Initialize(text, icon, section); + internal CircleMenuAction CircleMenuAction { get; } + + internal bool ShouldCloseMenuAfterSelection + { + get => _shouldCloseMenuAfterSelection && CircleMenuAction.CurrentStatus == CircleMenuAction.Status.Normal; + set => _shouldCloseMenuAfterSelection = value; } - internal bool ShouldCloseMenuAfterSelection { get; set; } = true; + public bool IsEntered { get; internal set; } + public int Section { get; } - public bool IsEntered { get; private set; } - public int Section { get; private set; } - private void Initialize(string text, GUIContent icon, int section) + private void Initialize() { style.position = Position.Absolute; style.alignItems = Align.Center; - _button = new Button(_onSelect); - ModifierButton(_button, text, icon, section); + _button = new Button(CircleMenuAction.Execute); + ModifierButton(_button, CircleMenuAction, Section); Add(_button); RegisterCallback(InternalOnMouseEnter); RegisterCallback(InternalOnMouseLeave); } - protected abstract void ModifierButton(Button button, string text, GUIContent icon, int section); + protected abstract void ModifierButton(Button button, CircleMenuAction menuAction, int section); internal bool TryForceSelect() { - _onSelect?.Invoke(); - return ShouldCloseMenuAfterSelection; + CircleMenuAction.Execute(); + return ShouldCloseMenuAfterSelection && CircleMenuAction.CurrentStatus == CircleMenuAction.Status.Normal; } private void InternalOnMouseEnter(MouseEnterEvent evt) @@ -62,5 +65,13 @@ private void InternalOnMouseLeave(MouseLeaveEvent evt) protected virtual void OnMouseLeave(Button button, MouseLeaveEvent evt) { } + + + internal void UpdateStatus(CircleMenuEventInformation information) + { + CircleMenuAction.UpdateStatus(information); + var enabled = CircleMenuAction.CurrentStatus == CircleMenuAction.Status.Normal; + _button.SetEnabled(enabled); + } } } \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/IButtonFactory.cs b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/IButtonFactory.cs index 46a996b..a071edb 100644 --- a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/IButtonFactory.cs +++ b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/IButtonFactory.cs @@ -1,12 +1,9 @@ -using System; -using UnityEngine; - namespace ContextCircleMenu.Editor { public interface IButtonFactory { - public CircleButton Create(string path, GUIContent icon, Action onSelected, int section); + public CircleButton Create(CircleMenuAction menuAction, int section); - public CircleButton CreateBackButton(Action onBack); + public CircleButton CreateBackButton(CircleMenuAction menuAction, int section); } } \ No newline at end of file diff --git a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/SimpleCircleButton.cs b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/SimpleCircleButton.cs index 03a0a83..59a4bf2 100644 --- a/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/SimpleCircleButton.cs +++ b/Assets/ContextCircleMenu/Editor/Core/ClircleButtons/SimpleCircleButton.cs @@ -1,4 +1,4 @@ -using System; +using System.Linq; using UnityEngine; using UnityEngine.UIElements; @@ -9,12 +9,11 @@ public class SimpleCircleButton : CircleButton private readonly Color _hoverColor = new(0.2745098f, 0.3764706f, 0.4862745f, 1.0f); private readonly Color _normalColor = new(0.02f, 0.02f, 0.02f, 0.8f); - public SimpleCircleButton(string text, GUIContent icon, int section, Action onSelect) - : base(text, icon, section, onSelect) + public SimpleCircleButton(CircleMenuAction menuAction, int section) : base(menuAction, section) { } - protected override void ModifierButton(Button button, string text, GUIContent icon, int section) + protected override void ModifierButton(Button button, CircleMenuAction menuAction, int section) { button.style.paddingLeft = 8f; button.style.paddingRight = 8f; @@ -41,14 +40,14 @@ protected override void ModifierButton(Button button, string text, GUIContent ic marginRight = 5f, flexGrow = 1 }, - text = text + text = menuAction.ActionName.Split("/").Last() }; - if (icon != null) + if (menuAction.Icon != null) { var image = new Image { - image = icon.image, + image = menuAction.Icon.image, style = { width = 16f, diff --git a/Assets/ContextCircleMenu/Editor/Core/ContextCircleMenu.cs b/Assets/ContextCircleMenu/Editor/Core/ContextCircleMenu.cs index 9952bfd..e95df00 100644 --- a/Assets/ContextCircleMenu/Editor/Core/ContextCircleMenu.cs +++ b/Assets/ContextCircleMenu/Editor/Core/ContextCircleMenu.cs @@ -177,7 +177,8 @@ public bool TryForceEnterByMousePosition() private void Rebuild() { Clear(); - var elements = _selectedMenu.BuildElements(ref _option); + var circleMenuInfo = new CircleMenuEventInformation(_mousePosition, _position); + var elements = _selectedMenu.BuildElements(circleMenuInfo, ref _option); for (var i = 0; i < elements.Length; i++) Add(elements[i]); } diff --git a/Assets/ContextCircleMenu/Samples~/Custom/Editor/CustomMenu.cs b/Assets/ContextCircleMenu/Samples~/Custom/Editor/CustomMenu.cs index eb38ca4..622da3c 100644 --- a/Assets/ContextCircleMenu/Samples~/Custom/Editor/CustomMenu.cs +++ b/Assets/ContextCircleMenu/Samples~/Custom/Editor/CustomMenu.cs @@ -55,7 +55,7 @@ public FolderCircleMenu Create(string path, IMenuControllable menu, CircleMenu p public class CustomFolderCircleMenu : FolderCircleMenu { public CustomFolderCircleMenu(string path, IMenuControllable menu, CircleMenu parent, IButtonFactory factory) : - base(path, menu, EditorGUIUtility.IconContent(EditorIcons.FolderIcon), parent, factory) + base(path, menu, parent, factory) { } @@ -101,37 +101,37 @@ protected override VisualElement[] CreateUtilityElements(ref ContextCircleMenuOp public class CustomButtonFactory : IButtonFactory { - public CircleButton Create(string path, GUIContent icon, Action onSelected, int section) + public CircleButton Create(CircleMenuAction menuAction, int section) { - return new OnlyImageCircleButton(path, icon, section, onSelected); + return new OnlyImageCircleButton(menuAction, section); } - public CircleButton CreateBackButton(Action onBack) + public CircleButton CreateBackButton(CircleMenuAction menuAction, int section) { - return new OnlyImageCircleButton("Back", EditorGUIUtility.IconContent(EditorIcons.Back2x), - -1, onBack); + menuAction.ActionName = "Back"; + menuAction.Icon = EditorGUIUtility.IconContent(EditorIcons.Back2x); + return new OnlyImageCircleButton(menuAction, section); } } public class OnlyImageCircleButton : CircleButton { - public OnlyImageCircleButton(string text, GUIContent icon, int section, Action onSelect) : base(text, icon, - section, onSelect) + public OnlyImageCircleButton(CircleMenuAction menuAction, int section) : base(menuAction, section) { } - protected override void ModifierButton(Button button, string text, GUIContent icon, int section) + protected override void ModifierButton(Button button, CircleMenuAction menuAction, int section) { var image = new Image { - image = icon.image, + image = menuAction.Icon.image, style = { width = 32f, height = 32f, flexShrink = 0 }, - tooltip = text + tooltip = menuAction.ActionName }; button.Add(image); diff --git a/Assets/ContextCircleMenu/package.json b/Assets/ContextCircleMenu/package.json index 75ee5f1..2a7cafe 100644 --- a/Assets/ContextCircleMenu/package.json +++ b/Assets/ContextCircleMenu/package.json @@ -1,7 +1,7 @@ { "name": "com.garume.context-circle-menu", "displayName": "Context Circle Menu", - "version": "1.0.0", + "version": "1.0.1", "unity": "2022.3", "license": "MIT", "category": "UI", @@ -26,4 +26,4 @@ "path": "Samples~/Custom" } ] -} \ No newline at end of file +}