void CreateNewOrderingGroup(object pos) { OrderingGroup newOrderingGroup = new OrderingGroup(); newOrderingGroup.Initialize((Vector2)pos); graph.orderingGroups.Add(newOrderingGroup); }
void CreateAnchorRectCallabck(OrderingGroup orderingGroup, Rect r, MouseCursor cursor, Action callback) { EditorGUIUtility.AddCursorRect(r, cursor); if (orderingGroup.resizing && callbackId == orderingGroup.resizingCallbackId && Event.current.type == EventType.MouseDrag) callback(); if (!editorEvents.isMouseOverNode && !editorEvents.isMouseOverLink && r.Contains(Event.current.mousePosition)) { if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { orderingGroup.resizing = true; orderingGroup.resizingCallbackId = callbackId; Event.current.Use(); } } callbackId++; }
public void RenderOrderingGroup(OrderingGroup orderingGroup, BaseGraph graph, Vector2 screenSize) { var e = Event.current; Rect screen = new Rect(-graph.panPosition, screenSize); //check if ordering group is not visible if (!orderingGroup.orderGroupRect.Overlaps(screen)) return ; //Start GUI frame PWGUI.StartFrame(screen); if (orderingGroupStyle == null) LoadStyles(); Rect orderGroupWorldRect = Utils.DecalRect(orderingGroup.orderGroupRect, graph.panPosition); callbackId = 0; int controlSize = 8; int cornerSize = 14; //AH this is ugly CreateAnchorRectCallabck(orderingGroup, //left resize anchor new Rect(orderGroupWorldRect.x, orderGroupWorldRect.y + cornerSize, controlSize, orderGroupWorldRect.height - cornerSize * 2), MouseCursor.ResizeHorizontal, () => orderingGroup.orderGroupRect.xMin += e.delta.x ); CreateAnchorRectCallabck(orderingGroup, //right resize anchor new Rect(orderGroupWorldRect.x + orderGroupWorldRect.width - controlSize, orderGroupWorldRect.y + cornerSize, controlSize, orderGroupWorldRect.height - cornerSize * 2), MouseCursor.ResizeHorizontal, () => orderingGroup.orderGroupRect.xMax += e.delta.x ); CreateAnchorRectCallabck(orderingGroup, //top resize anchor new Rect(orderGroupWorldRect.x + cornerSize, orderGroupWorldRect.y, orderGroupWorldRect.width - cornerSize * 2, controlSize), MouseCursor.ResizeVertical, () => orderingGroup.orderGroupRect.yMin += e.delta.y ); CreateAnchorRectCallabck(orderingGroup, //down resize anchor new Rect(orderGroupWorldRect.x + cornerSize, orderGroupWorldRect.y + orderGroupWorldRect.height - controlSize, orderGroupWorldRect.width - cornerSize * 2, controlSize), MouseCursor.ResizeVertical, () => orderingGroup.orderGroupRect.yMax += e.delta.y ); CreateAnchorRectCallabck(orderingGroup, //top left anchor new Rect(orderGroupWorldRect.x, orderGroupWorldRect.y, cornerSize, cornerSize), MouseCursor.ResizeUpLeft, () => { orderingGroup.orderGroupRect.min += e.delta; } ); CreateAnchorRectCallabck(orderingGroup, //top right anchor new Rect(orderGroupWorldRect.x + orderGroupWorldRect.width - cornerSize, orderGroupWorldRect.y, cornerSize, cornerSize), MouseCursor.ResizeUpRight, () => { orderingGroup.orderGroupRect.yMin += e.delta.y; orderingGroup.orderGroupRect.xMax += e.delta.x; } ); CreateAnchorRectCallabck(orderingGroup, //down left anchor new Rect(orderGroupWorldRect.x, orderGroupWorldRect.y + orderGroupWorldRect.height - cornerSize, cornerSize, cornerSize), MouseCursor.ResizeUpRight, () => { orderingGroup.orderGroupRect.xMin += e.delta.x; orderingGroup.orderGroupRect.yMax += e.delta.y; } ); CreateAnchorRectCallabck(orderingGroup, //down right anchor new Rect(orderGroupWorldRect.x + orderGroupWorldRect.width - cornerSize, orderGroupWorldRect.y + orderGroupWorldRect.height - cornerSize, cornerSize, cornerSize), MouseCursor.ResizeUpLeft, () => { orderingGroup.orderGroupRect.yMax += e.delta.y; orderingGroup.orderGroupRect.xMax += e.delta.x; } ); if (e.rawType == EventType.MouseUp) orderingGroup.resizing = false; //draw renamable name field orderingGroupNameStyle.normal.textColor = orderingGroup.color; PWGUI.TextField(orderGroupWorldRect.position + new Vector2(10, -22), ref orderingGroup.name, true, orderingGroupNameStyle); //draw move pad Rect movePadRect = new Rect(orderGroupWorldRect.position + new Vector2(10, 10), new Vector2(50, 30)); GUI.DrawTextureWithTexCoords(movePadRect, movepadTexture, new Rect(0, 0, 5, 4)); EditorGUIUtility.AddCursorRect(movePadRect, MouseCursor.MoveArrow); if (e.type == EventType.MouseDown && e.button == 0) if (movePadRect.Contains(e.mousePosition)) { orderingGroup.innerNodes = graph.allNodes.Where(n => n.rect.Overlaps(orderingGroup.orderGroupRect)).ToList(); orderingGroup.moving = true; e.Use(); } if (e.rawType == EventType.MouseUp) orderingGroup.moving = false; if (orderingGroup.moving && e.type == EventType.MouseDrag) { editorEvents.isDraggingOrderingGroup = true; orderingGroup.orderGroupRect.position += e.delta; orderingGroup.innerNodes.ForEach(n => n.rect.position += e.delta); } //draw ordering group GUI.color = orderingGroup.color; GUI.Label(orderGroupWorldRect, (string)null, orderingGroupStyle); GUI.color = Color.white; //draw color picker Rect colorPickerRect = new Rect(orderGroupWorldRect.x + orderGroupWorldRect.width - 30, orderGroupWorldRect.y + 10, 20, 20); PWGUI.ColorPicker(colorPickerRect, ref orderingGroup.color, false); if (orderGroupWorldRect.Contains(e.mousePosition)) { graph.editorEvents.mouseOverOrderingGroup = orderingGroup; graph.editorEvents.isMouseOverOrderingGroupFrame = true; } }