浏览代码

Added active state for title bar buttons a la the CSS pseudo class

/main
Peter Bay Bastian 8 年前
当前提交
1ded56e2
共有 3 个文件被更改,包括 44 次插入7 次删除
  1. 9
      MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Editor/Drawing/Drawer/TitleBarButtonDrawer.cs
  2. 38
      MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Editor/Drawing/Manipulators/Clicker.cs
  3. 4
      MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Editor/Drawing/Styles/TitleBar.uss

9
MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Editor/Drawing/Drawer/TitleBarButtonDrawer.cs


m_clicker = new Clicker();
m_clicker.onClick += OnClick;
m_clicker.onStateChange += OnClickStateChanged;
AddManipulator(m_clicker);
AddChild(new VisualElement() { classList = new ClassList("titleBarItemBorder") });

m_dataProvider.onClick();
}
void OnClickStateChanged(ClickerState newState)
{
if (newState == ClickerState.Active)
AddToClassList("active");
else if (newState == ClickerState.Inactive)
RemoveFromClassList("active");
this.Touch(ChangeType.Repaint);
}
protected override object toWatch
{

38
MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Editor/Drawing/Manipulators/Clicker.cs


namespace UnityEditor.Graphing.Drawing
{
public class Clicker : MouseManipulator
public enum ClickerState
Inactive,
Active
}
public delegate void StateChangeCallback();
public class Clicker : MouseManipulator
{
public delegate void StateChangeCallback(ClickerState newState);
public StateChangeCallback onStateChange { get; set; }
bool withinInitialTarget;
ClickerState state;
public override EventPropagation HandleEvent(Event evt, VisualElement finalTarget)
{

{
this.TakeCapture();
initialTarget = finalTarget;
UpdateState(evt);
case EventType.mouseDrag:
UpdateState(evt);
break;
withinInitialTarget = initialTarget != null && initialTarget.ContainsPoint(evt.mousePosition);
if (withinInitialTarget && onClick != null)
{
// withinInitialTarget = initialTarget != null && initialTarget.ContainsPoint(evt.mousePosition);
if (initialTarget != null && state == ClickerState.Active && onClick != null)
}
initialTarget = null;
UpdateState(evt);
}
void UpdateState(Event evt)
{
ClickerState newState;
if (initialTarget != null && initialTarget.ContainsPoint(evt.mousePosition))
newState = ClickerState.Active;
else
newState = ClickerState.Inactive;
if (onStateChange != null && state != newState)
onStateChange(newState);
state = newState;
}
}
}

4
MaterialGraphProject/Assets/GraphFramework/SerializableGraph/Editor/Drawing/Styles/TitleBar.uss


flex-direction: row;
}
.titleBarItem.active {
background-color: rgba(33, 33, 33, 0.5);
}
#left .titleBarItem {
margin-left: 5;
}

正在加载...
取消
保存