bool HandleAxis() { bool bRet = false; if ( (null == currCtrl) || (null == currCtrl.GetEditorRoot()) || (null == currCtrl.GetEditorRoot().GetgeometryTool()) ) { return(false); } bool isMouseIn = false; string mouseInObjID = string.Empty; object paramObj = null; Vector2 localMousePos = currCtrl.CalcLocalPos(FrameInputInfo.GetInstance().currPos); localMousePos.x = localMousePos.x - (currCtrl.LastRect.width - 128f); Vector2 cameraMousePos = new Vector2(localMousePos.x, 128f - localMousePos.y); isMouseIn = currCtrl.GetEditorRoot().GetgeometryTool().GetGeometryObjWithMouse(currCtrl.assistantCam, cameraMousePos, out mouseInObjID, out paramObj); if ( FrameInputInfo.GetInstance().leftBtnPress && isMouseIn && (paramObj != null) && (mouseInObjID.StartsWith(currCtrl.mainViewRoot.name)) ) { if ((MOUSEINAXIS)paramObj == MOUSEINAXIS.MOUSEIN_X) { RoroateAll(new Vector3(0f, -90f, 0f)); } else if ((MOUSEINAXIS)paramObj == MOUSEINAXIS.MOUSEIN_XNEG) { RoroateAll(new Vector3(0f, 90f, 0f)); } else if ((MOUSEINAXIS)paramObj == MOUSEINAXIS.MOUSEIN_Y) { RoroateAll(new Vector3(90f, 0f, 0f)); } else if ((MOUSEINAXIS)paramObj == MOUSEINAXIS.MOUSEIN_YNEG) { RoroateAll(new Vector3(-90f, 0f, 0f)); } else if ((MOUSEINAXIS)paramObj == MOUSEINAXIS.MOUSEIN_Z) { RoroateAll(new Vector3(0f, 180f, 0f)); } else if ((MOUSEINAXIS)paramObj == MOUSEINAXIS.MOUSEIN_ZNEG) { RoroateAll(new Vector3(0f, 0f, 0f)); } bRet = true; } return(bRet); }
private void HandleDragAction(EditorControl c) { if ( (null == currCtrl) || !currCtrl.IsCurrentCtrlEnable() ) { return; } //Vector2 currMousePos = FrameInputInfo.GetInstance().currPos; Vector2 localMousePos = CalcLocalPos(c, FrameInputInfo.GetInstance().currPos); //DragUpdated if ( (currCtrl.LastRect.Contains(localMousePos)) && (FrameInputInfo.GetInstance().customDragUpdated) ) { CustomDragUpdated(currCtrl); currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().dragObjsPerform&& currCtrl.LastRect.Contains(localMousePos) ) { CustomDragAccept(currCtrl, false); currCtrl.RequestRepaint(); } }
public override void Visit(EditorControl c) { HSpliterCtrl spliter = c as HSpliterCtrl; GUILayout.Box("", c.GetStyle(), c.GetOptions()); c.UpdateLastRect(); if (spliter.Dragable && spliter.IsCurrentCtrlEnable()) { if ( FrameInputInfo.GetInstance().leftBtnPress&& c.LastRect.Contains(FrameInputInfo.GetInstance().currPos) ) { spliter.IsDragging = true; } else { if (FrameInputInfo.GetInstance().leftButtonDown == false) { spliter.IsDragging = false; } if (spliter.IsDragging) { if (null != c.layoutConstraint) { Vector2 mouseDelta = FrameInputInfo.GetInstance().posOffset; if (Mathf.Abs(mouseDelta.y) > Mathf.Epsilon) { if (c.layoutConstraint.spliterOffsetInv) { c.layoutConstraint.spliterOffset -= mouseDelta.y; } else { c.layoutConstraint.spliterOffset += mouseDelta.y; } if (c.layoutConstraint.spliterOffset < spliter.MinOffset) { c.layoutConstraint.spliterOffset = spliter.MinOffset; } if (c.layoutConstraint.spliterOffset > spliter.MaxOffset) { c.layoutConstraint.spliterOffset = spliter.MaxOffset; } c.RequestRepaint(); } } } } EditorGUIUtility.AddCursorRect(c.LastRect, MouseCursor.ResizeVertical); } }
void _UpdateDraggingState() { if (FrameInputInfo.GetInstance().leftButtonDown) { if (FrameInputInfo.GetInstance().leftBtnPress) { currCtrl.rotateDragging = true; } } else { currCtrl.rotateDragging = false; } if (FrameInputInfo.GetInstance().midButtonDown) { if (FrameInputInfo.GetInstance().midBtnPress) { currCtrl.moveDragging = true; } } else { currCtrl.moveDragging = false; } if (FrameInputInfo.GetInstance().rightButtonDown) { if (FrameInputInfo.GetInstance().rightBtnPress) { currCtrl.zoomDragging = true; } } else { currCtrl.zoomDragging = false; } if (FrameInputInfo.GetInstance().scroll) { currCtrl.zoomWheelScroll = true; } else { currCtrl.zoomWheelScroll = false; } }
virtual public void CheckInputEvent(EditorControl c) { if ( (null == c) ) { return; } Vector2 localMousePos = CalcLocalPos(c, FrameInputInfo.GetInstance().currPos); if ( FrameInputInfo.GetInstance().hasInput && c.LastRect.Contains(localMousePos) ) { c.frameTriggerInfo.isHandleInput = true; } }
public void RenderOneFrame() { if (isClosed) { Close(); return; } if (rootCtrl == null) { return; } //若当前窗口不是当前窗口,则不更新此 //窗口的输入信息 if (this == EditorWindow.focusedWindow) { InputInfo.Update(this); } FrameInputInfo.SetCurrInputInfo(InputInfo); _PrepareDrawGUI(); geometryTool.DrawBegin(); renderer.Render(rootCtrl, position); //广播本帧产生的所有消息 NotifyMessages(); if (onGUI != null) { onGUI(this); } geometryTool.DrawEnd(); if (renderer.IsRepaintRequested()) { Repaint(); } }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // * New Method: Get Updated Input Info //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ private LinkedList <FrameInputInfo> GetUpdatedInputInfo() { LinkedList <FrameInputInfo> lInputList = new LinkedList <FrameInputInfo>(); #if UNITY_EDITOR || UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX for (int i = 0; i < 2; ++i) { if (Input.GetMouseButton(i)) { FrameInputInfo info = new FrameInputInfo(); info.hitObject = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero).transform; info.inputID = i; info.triggered = Input.GetMouseButtonDown(i); lInputList.AddLast(info); #if UNITY_EDITOR // DEBUG ONLY~ Update InputTrigger List. In the CustomEditor This will tell the developer what has most recently been touched. // => Additionally, whenever the List gets above 100, reduce it back down to 100 (or below) by chopping off the first value in the list. if (info.triggered && info.hitObject != null) { while (dm_lTriggeredObjects.Count > 99) { dm_lTriggeredObjects.RemoveFirst(); } dm_lTriggeredObjects.AddLast(info.hitObject); } #endif } } #else for (int i = 0; i < Input.touchCount; ++i) { FrameInputInfo info = new FrameInputInfo(); info.hitObject = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position), Vector2.zero).transform; info.inputID = i; info.triggered = Input.GetTouch(i).phase == TouchPhase.Began; lInputList.AddLast(info); } #endif return(lInputList); }
private void Trigger(EditorControl c) { if (c.frameTriggerInfo.isCtrlBehaveChange) { if (null != c.onCtrlBehaveChange) { c.onCtrlBehaveChange(c); } } if (c.frameTriggerInfo.isClick) { if (null != c.onClick) { c.onClick(c); } } if (c.frameTriggerInfo.isHover) { if (null != c.onHover) { c.onHover(c); } } if (c.frameTriggerInfo.isValueChanged) { if (null != c.onValueChange) { c.onValueChange(c, c.CurrValue); } } if (c.frameTriggerInfo.lastSelectItem != -1) { if (null != c.onItemSelected) { c.onItemSelected(c, c.frameTriggerInfo.lastSelectItem); } } //add by liteng for atlas start if (c.frameTriggerInfo.lastSelectItemR != -1) { if (null != c.onItemSelectedR) { c.onItemSelectedR(c, c.frameTriggerInfo.lastSelectItemR); } } if (c.frameTriggerInfo.lastSelectItemRU != -1) { if (null != c.onItemSelectedRU) { c.onItemSelectedRU(c, c.frameTriggerInfo.lastSelectItemRU); } } //add by liteng end if (c.frameTriggerInfo.isScroll) { if (null != c.onScroll) { c.onScroll(c, c.frameTriggerInfo.scrollPos); } } if (c.frameTriggerInfo.isDraggingObjs) { if (null != c.onDragingObjs) { c.onDragingObjs(c, FrameInputInfo.GetInstance().dragObjs, FrameInputInfo.GetInstance().dragObjsPaths); } } if (c.frameTriggerInfo.isDropObjs) { if (null != c.onDropObjs) { c.onDropObjs(c, FrameInputInfo.GetInstance().dragObjs, FrameInputInfo.GetInstance().dragObjsPaths); } } //Add by liteng for MoveAtlas At 2014/1/4 Start if (c.frameTriggerInfo.isCustomDragAccept) { if (null != c.onAcceptCustomDrag) { c.onAcceptCustomDrag(c, c.DragObject); } } if (c.frameTriggerInfo.isCustomDragAcceptCtrl) { if (null != c.onAcceptCustomDragCtrl) { c.onAcceptCustomDragCtrl(c, c.DragObject); } } if (c.frameTriggerInfo.isCtrlSelectItem) { if (null != c.onItemCtrlSelected) { c.onItemCtrlSelected(c, c.frameTriggerInfo.lastCtrlSelectItem); } } if (c.frameTriggerInfo.isDoubleClick) { if (null != c.onDoubleClick) { c.onDoubleClick(c, c.ClickObject); } } if (c.frameTriggerInfo.isOnPress) { if (null != c.onOnPress) { c.onOnPress(c, c.ClickObject); } } if (c.frameTriggerInfo.isPressDown) { if (null != c.onPressDown) { c.onPressDown(c, c.ClickObject); } } if (c.frameTriggerInfo.isPressUp) { if (null != c.onPressUp) { c.onPressUp(c, c.ClickObject); } } if (c.frameTriggerInfo.isRPressDown) { if (null != c.onRPressDown) { c.onRPressDown(c, c.ClickObject); } } if (c.frameTriggerInfo.isRPressUP) { if (null != c.onRPressUp) { c.onRPressUp(c, c.ClickObject); } } if (c.frameTriggerInfo.isPlay) { if (null != c.onPlay) { c.onPlay(c); } } if (c.frameTriggerInfo.isPause) { if (null != c.onPause) { c.onPause(c); } } if (c.frameTriggerInfo.isStop) { if (null != c.onStop) { c.onStop(c); } } }
public static void SetCurrInputInfo(FrameInputInfo info) { currInputInfo = info; }
//处理所有输入 void HandleInput() { if ( (null == currCtrl) || (!currCtrl.IsCurrentCtrlEnable()) ) { return; } //Vector2 mousePos = FrameInputInfo.GetInstance().currPos; Vector2 mousePos = CalcLocalPos(currCtrl, FrameInputInfo.GetInstance().currPos); Vector2 mousePosOffset = FrameInputInfo.GetInstance().posOffset; //Vector2 viewLocalMousePos = FrameInputInfo.GetInstance().currPos + currCtrl.ScrollPos; Vector2 viewLocalMousePos = CalcLocalPos(FrameInputInfo.GetInstance().currPos); viewLocalMousePos += currCtrl.ScrollPos; bool lBtnPress = FrameInputInfo.GetInstance().leftBtnPress; bool lBtnPressUp = FrameInputInfo.GetInstance().leftBtnPressUp; bool lBtnDown = FrameInputInfo.GetInstance().leftButtonDown; bool mBtnPress = FrameInputInfo.GetInstance().midBtnPress; bool mBtnDown = FrameInputInfo.GetInstance().midButtonDown; bool rBtnPress = FrameInputInfo.GetInstance().rightBtnPress; bool rBtnDown = FrameInputInfo.GetInstance().rightButtonDown; bool mouseScroll = FrameInputInfo.GetInstance().scroll; Vector2 scrollDelta = FrameInputInfo.GetInstance().delta; bool hasInteractSubCtrl = false; CheckInputEvent(currCtrl); {//处理所有时间标签响应 int selTag = -1; int i = 0; //对控件的时间标签进行输入处理 foreach (var tag in currCtrl.Tags) { if (tag.lastRect.Contains(viewLocalMousePos) && lBtnPress) { tag.isDragging = true; selTag = i; currCtrl.LastSelectedTag = i; hasInteractSubCtrl = true; break; } i++; } if (!lBtnDown) { foreach (var tag in currCtrl.Tags) { tag.isDragging = false; } selTag = -1; if (currCtrl.LastSelectedTag != -1) { currCtrl.PostMessage(ControlMessage.Message.TIMELINECTRL_END_DRAG_TAG, currCtrl.LastSelectedTag); } currCtrl.LastSelectedTag = -1; } if (selTag != -1) {//有新选中项 currCtrl.PostMessage(ControlMessage.Message.TIMELINECTRL_BEGIN_DRAG_TAG, selTag); } bool hasDraggingMsg = false; foreach (var tag in currCtrl.Tags) { if (tag.isDragging) { float pixelOffset = FrameInputInfo.GetInstance().posOffset.x; float timeOffset = currCtrl.CalcTime(pixelOffset); tag.time += timeOffset; if (tag.time < 0f) { tag.time = 0f; } currCtrl.RequestRepaint(); if (Mathf.Abs(pixelOffset) > 0f) { hasDraggingMsg = true; } hasInteractSubCtrl = true; } } if (hasDraggingMsg) { currCtrl.PostMessage(ControlMessage.Message.TIMELINECTRL_DRAG_TAG, currCtrl.LastSelectedTag); } }//处理所有标签响应事件 {//处理所有时间线响应事件 //处理鼠标左键点击事件 if (lBtnPress) { if (currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_MUTI_SEL_CHOOSE_DRAGGER) {//若进入多选模式 int i = 0; //查看点击的项与矩形是否与多选记录相符 foreach (var item in currCtrl.Items) { int selSide = 0; if (item.leftDragLastRect.Contains(viewLocalMousePos)) { selSide = TimeLineViewCtrl.SIDE_LEFT; } else if (item.rightDragLastRect.Contains(viewLocalMousePos)) { selSide = TimeLineViewCtrl.SIDE_RIGHT; } else if (item.lastRect.Contains(viewLocalMousePos)) { selSide = TimeLineViewCtrl.SIDE_MID; } if (selSide > 0) { if (currCtrl.IsHighLightBox(i, selSide)) {//点中多选项中的一项 hasInteractSubCtrl = true; //进入多选拖拽模式 currCtrl.mutiSelectState = TimeLineViewCtrl.MutiSelectState.STATE_MUTI_SEL_DRAGGING; TriggerSelectChange(i); TriggerDragItemsBegin(); break; } else {//如果选中项与多选项不符 currCtrl.mutiSelectState = TimeLineViewCtrl.MutiSelectState.STATE_NULL; } } i++; } } if (currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_NULL) {//单选点击 currCtrl.ClearSelectItemInfo(); int i = 0; foreach (var item in currCtrl.Items) { int selSide = 0; if (item.leftDragLastRect.Contains(viewLocalMousePos)) { selSide = TimeLineViewCtrl.SIDE_LEFT; } else if (item.rightDragLastRect.Contains(viewLocalMousePos)) { selSide = TimeLineViewCtrl.SIDE_RIGHT; } else if (item.lastRect.Contains(viewLocalMousePos)) { selSide = TimeLineViewCtrl.SIDE_MID; } if (selSide > 0) { hasInteractSubCtrl = true; currCtrl.AddSelectItemInfo(i, selSide); break; } i++; } if (currCtrl.selectItemInfos.Count > 0) { TriggerSelectChange(i); TriggerDragItemsBegin(); } } }//处理鼠标左键点击事件 if (lBtnDown && ( currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_NULL || currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_MUTI_SEL_DRAGGING ) ) { bool triggerDragging = false; foreach (var info in currCtrl.selectItemInfos) { TimeLineItem item = currCtrl.Items[info.indx]; if (info.side == TimeLineViewCtrl.SIDE_LEFT) { float newStartX = item.lastRect.x + mousePosOffset.x; if (Mathf.Abs(newStartX - item.lastRect.x) > Mathf.Epsilon) { float newStartTime = currCtrl.Trans2RealTime(newStartX - currCtrl.LastRect.x); float oldEndTime = item.startTime + item.length; if (newStartTime < 0.0f) { newStartTime = 0.0f; } if (newStartTime > oldEndTime) { newStartTime = oldEndTime; } float newLength = oldEndTime - newStartTime; item.startTime = newStartTime; item.length = newLength; triggerDragging = true; } } else if (info.side == TimeLineViewCtrl.SIDE_RIGHT) { float newEndX = item.lastRect.x + item.lastRect.width + mousePosOffset.x; if (Mathf.Abs(newEndX - (item.lastRect.x + item.lastRect.width)) > Mathf.Epsilon) { float newEndTime = currCtrl.Trans2RealTime(newEndX - currCtrl.LastRect.x); if (newEndTime < 0.0f) { newEndTime = 0.0f; } if (newEndTime < item.startTime) { newEndTime = item.startTime; } item.length = newEndTime - item.startTime; triggerDragging = true; } } else if (info.side == TimeLineViewCtrl.SIDE_MID) { float newStartX = item.lastRect.x + mousePosOffset.x; if (Mathf.Abs(newStartX - item.lastRect.x) > Mathf.Epsilon) { float newStartTime = currCtrl.Trans2RealTime(newStartX - currCtrl.LastRect.x); if (newStartTime < 0.0f) { newStartTime = 0.0f; } item.startTime = newStartTime; triggerDragging = true; } } hasInteractSubCtrl = true; } if (triggerDragging) { TriggerItemsDraging(); } } }//处理所有时间线响应事件 {//对于松开鼠标左键处理 if (lBtnPressUp) { if (currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_MUTI_SEL_DRAGGING) { TriggerDragItemsEnd(); currCtrl.mutiSelectState = TimeLineViewCtrl.MutiSelectState.STATE_MUTI_SEL_CHOOSE_DRAGGER; } else if (currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_NULL) { if (currCtrl.selectItemInfos.Count > 0) { TriggerDragItemsEnd(); } } } } if (lBtnPressUp) { //左键松开 if (currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_DRAGGING_MUTI_SEL_RECT) { //进入多选模式 if (currCtrl.selectItemInfos.Count > 0) { if (currCtrl.selectItemInfos.Count > 0) { TriggerSelectChange(currCtrl.selectItemInfos[0].indx); } currCtrl.mutiSelectState = TimeLineViewCtrl.MutiSelectState.STATE_MUTI_SEL_CHOOSE_DRAGGER; } else { currCtrl.mutiSelectState = TimeLineViewCtrl.MutiSelectState.STATE_NULL; } } } {//处理在整个控件范围内的输入 //若鼠标在控件区域内 if (currCtrl.LastRect.Contains(mousePos)) { //左键点下并且之前没有与其他子控件交互 if (lBtnPress && !hasInteractSubCtrl) {//进入多选选择阶段 currCtrl.mutiSelectState = TimeLineViewCtrl.MutiSelectState.STATE_DRAGGING_MUTI_SEL_RECT; currCtrl.mutiSelectRectStartPos = viewLocalMousePos; currCtrl.ClearSelectItemInfo(); } if (lBtnDown && FrameInputInfo.GetInstance().isMouseInWindow&& currCtrl.mutiSelectState == TimeLineViewCtrl.MutiSelectState.STATE_DRAGGING_MUTI_SEL_RECT) { currCtrl.mutiSelectRectEndPos = viewLocalMousePos; currCtrl.RecalcDragMutiSelectRect(); //根据多选拖拽矩形,更新选中项列表 currCtrl.UpdateSelectItemInfoListWithMutiSelectRect(); } //控件的鼠标标线时间标签 if (mBtnDown && mBtnPress) { currCtrl.showMouseTag = !currCtrl.showMouseTag; } //对横向滚动响应 if (rBtnPress && rBtnDown) { currCtrl.horizonScrollDragging = true; } if (!rBtnDown) { currCtrl.horizonScrollDragging = false; } //缩放时间轴视图 if (mouseScroll) { if (Mathf.Abs(scrollDelta.y) > Mathf.Epsilon) { if (scrollDelta.y > 0.0f) { currCtrl.Zoom *= 1.1f; } else { currCtrl.Zoom /= 1.1f; } } } currCtrl.mousePos = mousePos; currCtrl.RequestRepaint(); } else { currCtrl.horizonScrollDragging = false; } //水平拖动 if (currCtrl.horizonScrollDragging) { currCtrl.ScrollPos -= new Vector2(mousePosOffset.x, 0); } }//处理在整个控件范围内的输入 }
private void HandleMouseInput(EditorControl c) { currCtrl = c as TabViewCtrl; if ( (null == currCtrl) || !currCtrl.IsCurrentCtrlEnable() || currCtrl.IsEventTriggered() ) { return; } CheckInputEvent(c); Rect tabViewField = new Rect(currCtrl.LastRect.x, currCtrl.LastRect.y + tabTitleRect.height, currCtrl.LastRect.width, currCtrl.LastRect.height - tabTitleRect.height); Vector2 localMousePos = CalcLocalPos(c, FrameInputInfo.GetInstance().currPos); if ( FrameInputInfo.GetInstance().leftBtnDoubleClick && tabViewField.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isDoubleClick = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnClick && tabViewField.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isClick = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnOnPress && tabViewField.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isOnPress = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnPress && tabViewField.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isPressDown = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnPressUp && tabViewField.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isPressUp = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } }
private void HandleMouseInput(EditorControl c) { HBoxCtrl hBox = c as HBoxCtrl; if ( (null == hBox) || !hBox.IsCurrentCtrlEnable() || hBox.IsEventTriggered() ) { return; } CheckInputEvent(c); Rect contentRect = GetCtrlLastRectWithOutScrollBar(hBox); Vector2 localMousePos = CalcLocalPos(c, FrameInputInfo.GetInstance().currPos); if ( FrameInputInfo.GetInstance().leftBtnDoubleClick && contentRect.Contains(localMousePos) ) { hBox.frameTriggerInfo.isDoubleClick = true; hBox.ClickObject = null; hBox.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnClick && contentRect.Contains(localMousePos) ) { hBox.frameTriggerInfo.isClick = true; hBox.ClickObject = null; hBox.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnOnPress && contentRect.Contains(localMousePos) ) { hBox.frameTriggerInfo.isOnPress = true; hBox.ClickObject = null; hBox.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnPress && contentRect.Contains(localMousePos) ) { hBox.frameTriggerInfo.isPressDown = true; hBox.ClickObject = null; hBox.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnPressUp && contentRect.Contains(localMousePos) ) { hBox.frameTriggerInfo.isPressUp = true; hBox.ClickObject = null; hBox.RequestRepaint(); } }
private void HandleMouseInput(EditorControl c) { LabelCtrl currCtrl = c as LabelCtrl; if ( (null == currCtrl) || !currCtrl.IsCurrentCtrlEnable() || currCtrl.IsEventTriggered() ) { return; } CheckInputEvent(c); Vector2 localMousePos = CalcLocalPos(c, FrameInputInfo.GetInstance().currPos); localMousePos += currCtrl.ScrollPos; if ( FrameInputInfo.GetInstance().leftBtnDoubleClick && currCtrl.LastRect.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isDoubleClick = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnClick && currCtrl.LastRect.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isClick = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnOnPress && currCtrl.LastRect.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isOnPress = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnPress && currCtrl.LastRect.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isPressDown = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().leftBtnPressUp && currCtrl.LastRect.Contains(localMousePos) ) { currCtrl.frameTriggerInfo.isPressUp = true; currCtrl.ClickObject = null; currCtrl.RequestRepaint(); } }
void _HandleInput() { if (currCtrl == null) { return; } Vector2 currMousePos = FrameInputInfo.GetInstance().currPos; //Vector2 localMousePos = currCtrl.CalcLocalPos(currMousePos); Vector2 mouseMoveDelta = FrameInputInfo.GetInstance().posOffset; Vector2 wheelScrollDelta = FrameInputInfo.GetInstance().delta; //2D视图 bool is2DView = currCtrl.Is2DView; CheckInputEvent(currCtrl); //若当前鼠标不在视口区域内直接忽略 if (!currCtrl.LastRect.Contains(currMousePos)) { currCtrl.rotateDragging = false; currCtrl.moveDragging = false; return; } if (FrameInputInfo.GetInstance().dragingObjs) { bool accept = false; if (currCtrl.onAcceptDragObjs != null) { accept = currCtrl.onAcceptDragObjs( currCtrl, FrameInputInfo.GetInstance().dragObjs, FrameInputInfo.GetInstance().dragObjsPaths); if (accept) { DragAndDrop.visualMode = DragAndDropVisualMode.Link; if (!FrameInputInfo.GetInstance().dragObjsPerform) { currCtrl.frameTriggerInfo.isDraggingObjs = true; } else { currCtrl.frameTriggerInfo.isDropObjs = true; } } else { DragAndDrop.visualMode = DragAndDropVisualMode.Rejected; } } else { DragAndDrop.visualMode = DragAndDropVisualMode.Rejected; } } //根据输入分析控件的推拽状态 _UpdateDraggingState(); if (Mathf.Abs(mouseMoveDelta.x) < Mathf.Epsilon && Mathf.Abs(mouseMoveDelta.y) < Mathf.Epsilon && !FrameInputInfo.GetInstance().scroll ) {//无明显移动直接返回 return; } //Transform rootTrans = currCtrl.mainViewRoot.transform; Transform camTrans = currCtrl.camObj.transform; Camera cam = currCtrl.mainCam; if (currCtrl.rotateDragging) { if (!is2DView) {//只有3D视图才响应旋转拖拽 float angleAroundUp = mouseMoveDelta.x * 0.1f; float angleAroundRight = mouseMoveDelta.y * 0.1f; Vector3 localPos = (camTrans.localPosition - currCtrl.center).normalized * currCtrl.radius; //Quaternion q0 = Quaternion.AngleAxis(angleAroundUp, camTrans.up); //camTrans.localPosition = q0 * localPos; //camTrans.Rotate(Vector3.up, angleAroundUp, Space.Self); //Quaternion q1 = Quaternion.AngleAxis(angleAroundRight, camTrans.right); //camTrans.Rotate(Vector3.right, angleAroundRight, Space.Self); //camTrans.localPosition = q1 * camTrans.localPosition; //camTrans.localPosition += currCtrl.center; Quaternion q0 = Quaternion.AngleAxis(angleAroundUp, Vector3.up); camTrans.localPosition = q0 * localPos; camTrans.Rotate(Vector3.up, angleAroundUp, Space.World); Quaternion q1 = Quaternion.AngleAxis(angleAroundRight, camTrans.right); camTrans.Rotate(camTrans.right, angleAroundRight, Space.World); camTrans.localPosition = q1 * camTrans.localPosition; camTrans.localPosition += currCtrl.center; if (currCtrl.IsShowAxis) { Transform assCamTrans = currCtrl.assistantCamObj.transform; Vector3 localPosAss = (assCamTrans.localPosition - currCtrl.assCentter).normalized * currCtrl.assRadius; //Quaternion q3 = Quaternion.AngleAxis(angleAroundUp, assCamTrans.up); //assCamTrans.localPosition = q3 * localPosAss; //assCamTrans.Rotate(Vector3.up, angleAroundUp, Space.Self); //Quaternion q2 = Quaternion.AngleAxis(angleAroundRight, assCamTrans.right); //assCamTrans.Rotate(Vector3.right, angleAroundRight, Space.Self); //assCamTrans.localPosition = q2 * assCamTrans.localPosition; Quaternion q3 = Quaternion.AngleAxis(angleAroundUp, Vector3.up); assCamTrans.localPosition = q3 * localPosAss; assCamTrans.Rotate(Vector3.up, angleAroundUp, Space.World); Quaternion q2 = Quaternion.AngleAxis(angleAroundRight, assCamTrans.right); assCamTrans.Rotate(assCamTrans.right, angleAroundRight, Space.World); assCamTrans.localPosition = q2 * assCamTrans.localPosition; assCamTrans.localPosition += currCtrl.assCentter; } currCtrl.RequestRepaint(); } } if (currCtrl.moveDragging) { float moveX = -mouseMoveDelta.x * 0.01f; float moveY = mouseMoveDelta.y * 0.01f; if (!is2DView) {//3D视图 Vector3 localPos = camTrans.localPosition - currCtrl.center; currCtrl.center += camTrans.up * moveY + camTrans.right * moveX; camTrans.localPosition = localPos + currCtrl.center; } currCtrl.RequestRepaint(); } float zoom = 0.0f; if (currCtrl.zoomWheelScroll) { zoom = wheelScrollDelta.y * 0.2f; } else if (currCtrl.zoomDragging) { zoom = mouseMoveDelta.y * 0.01f; } if (currCtrl.zoomWheelScroll || currCtrl.zoomDragging) { if (!is2DView) { currCtrl.radius += zoom; currCtrl.radius = Mathf.Clamp(currCtrl.radius, currCtrl.minRadius, currCtrl.maxRadius); Vector3 localPos = (camTrans.localPosition - currCtrl.center).normalized * currCtrl.radius; camTrans.localPosition = localPos + currCtrl.center; } else { if (currCtrl.zoomDragging) {//缩放拖拽在2D视图中是移动 float offsetX = (-mouseMoveDelta.x / cam.pixelWidth) * cam.orthographicSize * 2.0f; float offsetY = (mouseMoveDelta.y / cam.pixelHeight) * cam.orthographicSize * 2.0f; camTrans.localPosition += new Vector3(offsetX, offsetY); } else { if (zoom < 0.0f) { cam.orthographicSize *= 0.9f; } else { cam.orthographicSize *= 1.1f; } } } currCtrl.RequestRepaint(); } }
public override void Visit(EditorControl c) { currCtrl = c as PlayCtrl; if ( (null == currCtrl) ) { return; } EditorGUI.BeginDisabledGroup(!currCtrl.Enable); EditorGUILayout.BeginHorizontal(); float newPlayTime = 0.0f; try { GUI.SetNextControlName(currCtrl.CtrlID); newPlayTime = EditorGUILayout.Slider(currCtrl.PlayTime, 0.0f, currCtrl.TotalTime, new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(20f), GUILayout.MinWidth(300f) }); }catch (Exception e) { e.GetType(); //Debug.Log(e.Message); } EditorGUI.EndDisabledGroup(); c.UpdateLastRect(); CheckInputEvent(c); //若鼠标在播放条发生点按事件,暂停播放 if (c.LastRect.Contains(CalcLocalPos(c, FrameInputInfo.GetInstance().currPos))) { if ( FrameInputInfo.GetInstance().leftButtonDown&& FrameInputInfo.GetInstance().leftBtnPress&& c.IsCurrentCtrlEnable() ) { currCtrl.Pause(); } } if (!currCtrl.IsPlaying) { if (Mathf.Abs(currCtrl.PlayTime - newPlayTime) > Mathf.Epsilon) { currCtrl.frameTriggerInfo.isValueChanged = true; } currCtrl.PlayTime = newPlayTime; currCtrl.IsForceUpdate = false; } EditorGUI.BeginDisabledGroup(!currCtrl.Enable); GUILayoutOption[] btnOptions = new GUILayoutOption[] { GUILayout.Width(40), GUILayout.Height(20) }; if (!currCtrl.IsPlaying) { if (GUILayout.Button("播放", btnOptions)) { currCtrl.Play(); currCtrl.frameTriggerInfo.isValueChanged = true; currCtrl.frameTriggerInfo.isPlay = true; } } else { if (GUILayout.Button("暂停", btnOptions)) { currCtrl.Pause(); currCtrl.frameTriggerInfo.isValueChanged = true; currCtrl.frameTriggerInfo.isPause = true; } } //if( GUILayout.Button("播放", btnOptions) ) //{ // currCtrl.Play(); // currCtrl.frameTriggerInfo.isValueChanged = true; // currCtrl.frameTriggerInfo.isPlay = true; //} //if( GUILayout.Button("暂停", btnOptions) ) //{ // currCtrl.Pause(); // currCtrl.frameTriggerInfo.isValueChanged = true; // currCtrl.frameTriggerInfo.isPause = true; //} if (GUILayout.Button("停止", btnOptions)) { currCtrl.Stop(); currCtrl.frameTriggerInfo.isValueChanged = true; currCtrl.frameTriggerInfo.isStop = true; } EditorGUILayout.LabelField("Loop", GUILayout.Width(30f)); currCtrl.IsLoop = EditorGUILayout.Toggle(currCtrl.IsLoop, GUILayout.Width(20f)); EditorGUI.EndDisabledGroup(); EditorGUILayout.EndHorizontal(); SpecialEffectEditorUtility.GetLastRect(ref totalRect); CheckInputEvent(c, totalRect); }
private void HandleMouseAction(ListViewCtrl list, int curIndex) { if ( (null == list) || (!list.IsCurrentCtrlEnable()) ) { return; } if (!list.LastRect.Contains(CalcLocalPos(list, FrameInputInfo.GetInstance().currPos))) { return; } bool bIsFind = false; Vector2 localMousePos = list.CalcLocalPos(FrameInputInfo.GetInstance().currPos); localMousePos += list.ScrollPos; //Ctrl + LButtonPress if ( FrameInputInfo.GetInstance().leftBtnPress&& Event.current.control && list.Items[curIndex].lastRect.Contains(localMousePos) ) { foreach (var index in list.SelectItems) { if (curIndex == index) { bIsFind = true; break; } } if (!bIsFind) { list.SelectItems.Add(curIndex); list.LastSelectItem = curIndex; list.frameTriggerInfo.isCtrlSelectItem = true; list.frameTriggerInfo.lastCtrlSelectItem = list.LastSelectItem; } else { m_TargetCtrl = list; m_IsNeedRemove = true; } CustomDragPrepare(list); list.RequestRepaint(); } //Ctrl + LButtonPressUp else if ( FrameInputInfo.GetInstance().leftBtnPressUp&& Event.current.control && list.Items[curIndex].lastRect.Contains(localMousePos) ) { foreach (var index in list.SelectItems) { if (curIndex == index) { bIsFind = true; break; } } if (m_IsNeedRemove && (list.Name == m_TargetCtrl.Name)) { list.SelectItems.Remove(curIndex); UpdateLastSelectItemAfterRemove(list, curIndex); list.frameTriggerInfo.isCtrlSelectItem = true; list.frameTriggerInfo.lastCtrlSelectItem = list.LastSelectItem; m_IsNeedRemove = false; m_TargetCtrl = null; } list.RequestRepaint(); } //LButtonPress else if ( FrameInputInfo.GetInstance().leftBtnPress&& list.Items[curIndex].lastRect.Contains(localMousePos) ) { foreach (var index in list.SelectItems) { if (curIndex == index) { bIsFind = true; break; } } if (!bIsFind) { list.SelectItems.Clear(); list.SelectItems.Add(curIndex); list.LastSelectItem = curIndex; list.frameTriggerInfo.lastSelectItem = curIndex; } else { m_TargetCtrl = list; m_IsNeedRemove = true; } CustomDragPrepare(list); list.RequestRepaint(); } //LButtonPressUp else if ( FrameInputInfo.GetInstance().leftBtnPressUp&& list.Items[curIndex].lastRect.Contains(localMousePos) ) { if (m_IsNeedRemove && (list.Name == m_TargetCtrl.Name)) { list.SelectItems.Clear(); list.SelectItems.Add(curIndex); list.LastSelectItem = curIndex; list.frameTriggerInfo.lastSelectItem = curIndex; m_IsNeedRemove = false; m_TargetCtrl = null; } list.RequestRepaint(); } //LButtonDoubleClick else if ( FrameInputInfo.GetInstance().leftBtnDoubleClick&& list.Items[curIndex].lastRect.Contains(localMousePos) ) { list.SelectItems.Clear(); list.SelectItems.Add(curIndex); list.LastSelectItem = curIndex; list.frameTriggerInfo.lastSelectItem = curIndex; list.frameTriggerInfo.isDoubleClick = true; list.ClickObject = curIndex; list.RequestRepaint(); } //LButtonOnPress else if ( FrameInputInfo.GetInstance().leftBtnOnPress&& list.Items[curIndex].lastRect.Contains(localMousePos) ) { list.frameTriggerInfo.isOnPress = true; list.ClickObject = curIndex; list.RequestRepaint(); } //RButtonDown else if ( FrameInputInfo.GetInstance().rightBtnPress&& list.Items[curIndex].lastRect.Contains(localMousePos) ) { foreach (var index in list.SelectItems) { if (curIndex == index) { bIsFind = true; break; } } if (!bIsFind) { list.SelectItems.Clear(); list.SelectItems.Add(curIndex); } list.LastSelectItem = curIndex; list.frameTriggerInfo.lastSelectItemR = curIndex; list.RequestRepaint(); } //RButtonUP else if ( FrameInputInfo.GetInstance().rightBtnPressUp&& list.Items[curIndex].lastRect.Contains(localMousePos) ) { list.frameTriggerInfo.lastSelectItemRU = curIndex; list.RequestRepaint(); } //Drag else if ( FrameInputInfo.GetInstance().drag&& list.Items[curIndex].lastRect.Contains(localMousePos) ) { CustomDragStart(list); list.RequestRepaint(); } else { //do nothing } }
private void HandleDragAction(ListViewCtrl list) { if ( (null == list) || !list.IsCurrentCtrlEnable() ) { return; } if ( (list.LastRect.Contains(FrameInputInfo.GetInstance().currPos) && FrameInputInfo.GetInstance().dragingObjs&& !m_IsCusDragStart) ) { bool accept = false; if (list.onAcceptDragObjs != null) { accept = list.onAcceptDragObjs( list, FrameInputInfo.GetInstance().dragObjs, FrameInputInfo.GetInstance().dragObjsPaths); if (accept) { DragAndDrop.visualMode = DragAndDropVisualMode.Link; if (!FrameInputInfo.GetInstance().dragObjsPerform) { list.frameTriggerInfo.isDraggingObjs = true; } else { list.frameTriggerInfo.isDropObjs = true; } } else { DragAndDrop.visualMode = DragAndDropVisualMode.Rejected; } } else { DragAndDrop.visualMode = DragAndDropVisualMode.Rejected; } } //DragUpdated else if ( (list.LastRect.Contains(FrameInputInfo.GetInstance().currPos)) && (FrameInputInfo.GetInstance().customDragUpdated) ) { CustomDragUpdated(list); list.RequestRepaint(); } //DragAccept ctrl else if ( FrameInputInfo.GetInstance().dragObjsPerform&& Event.current.control && list.LastRect.Contains(FrameInputInfo.GetInstance().currPos) ) { CustomDragAccept(list, true); list.RequestRepaint(); } else if ( FrameInputInfo.GetInstance().dragObjsPerform&& list.LastRect.Contains(FrameInputInfo.GetInstance().currPos) ) { CustomDragAccept(list, false); list.RequestRepaint(); } }
private void HandleMouseInput(TreeViewNode n) { if ( (null == n) || (null == currCtrl) || !currCtrl.IsCurrentCtrlEnable() || currCtrl.IsEventTriggered() ) { return; } if (!currCtrl.LastRect.Contains(CalcLocalPos(currCtrl, FrameInputInfo.GetInstance().currPos))) { return; } //CheckInputEvent(currCtrl); //处理树状控件节点点击 Vector2 currMousePos = FrameInputInfo.GetInstance().currPos; Vector2 localMousePos = currCtrl.CalcLocalPos(currMousePos); float scrollBarWidth = 16f; Rect viewRect = new Rect(currCtrl.LastRect); viewRect.width = currCtrl.LastRect.width - scrollBarWidth; viewRect.height = currCtrl.LastRect.height - scrollBarWidth; if ( n.lastRect.Contains(localMousePos + currCtrl.scrollPos) && viewRect.Contains(currMousePos) && FrameInputInfo.GetInstance().leftBtnPress ) { if (!Object.ReferenceEquals(currCtrl.currSelectNode, n)) { currCtrl.frameTriggerInfo.lastSelectItem = 0; } currCtrl.currSelectNode = n; currCtrl.frameTriggerInfo.isPressDown = true; CustomDragPrepare(currCtrl); RequestRepaint(); } else if ( n.lastRect.Contains(localMousePos + currCtrl.scrollPos) && viewRect.Contains(currMousePos) && FrameInputInfo.GetInstance().leftBtnDoubleClick ) { if (!Object.ReferenceEquals(currCtrl.currSelectNode, n)) { currCtrl.frameTriggerInfo.lastSelectItem = 0; } currCtrl.frameTriggerInfo.isDoubleClick = true; currCtrl.ClickObject = n; currCtrl.currSelectNode = n; RequestRepaint(); } else if ( n.lastRect.Contains(localMousePos + currCtrl.scrollPos) && viewRect.Contains(currMousePos) && FrameInputInfo.GetInstance().leftBtnOnPress ) { currCtrl.frameTriggerInfo.isOnPress = true; currCtrl.ClickObject = n; RequestRepaint(); } else if ( n.lastRect.Contains(localMousePos + currCtrl.scrollPos) && viewRect.Contains(currMousePos) && FrameInputInfo.GetInstance().leftBtnPressUp ) { currCtrl.frameTriggerInfo.isPressUp = true; currCtrl.ClickObject = null; RequestRepaint(); } else if ( n.lastRect.Contains(localMousePos + currCtrl.scrollPos) && viewRect.Contains(currMousePos) && FrameInputInfo.GetInstance().drag ) { CustomDragStart(currCtrl); } else if ( n.lastRect.Contains(localMousePos + currCtrl.scrollPos) && viewRect.Contains(currMousePos) && FrameInputInfo.GetInstance().rightBtnPress ) { currCtrl.frameTriggerInfo.isRPressDown = true; if (!Object.ReferenceEquals(currCtrl.currSelectNode, n)) { currCtrl.frameTriggerInfo.lastSelectItem = 0; } currCtrl.currSelectNode = n; RequestRepaint(); } else if ( n.lastRect.Contains(localMousePos + currCtrl.scrollPos) && viewRect.Contains(currMousePos) && FrameInputInfo.GetInstance().rightBtnPressUp ) { currCtrl.frameTriggerInfo.isRPressUP = true; RequestRepaint(); } }