//--------------------------------------------------------------------------------------------- // // Process Input // // check witch point of selected widget will be dragged etc. // //--------------------------------------------------------------------------------------------- void ProcessInput() { Event e = Event.current; if (e.type == EventType.ScrollWheel) { // Zoom if (e.delta.y > 0.0f) { m_ZoomFactor -= 0.1f; } else if (e.delta.y < 0.0f) { m_ZoomFactor += 0.1f; } m_ZoomFactor = Mathf.Clamp(m_ZoomFactor, GUIEditorUtils.MIN_SCALE_FACTOR, GUIEditorUtils.MAX_SCALE_FACTOR); // Pan with "horizontal" wheel float pan = e.delta.x * GUIEditorUtils.WHEEL_PAN_MULTIPLICATOR / m_ZoomFactor; SetPlatformShift(new Vector2(m_PlatformShift.x + pan, m_PlatformShift.y)); } else if (e.type == EventType.MouseDown && SecondaryButtons.Contains(e.button)) { // pan m_Pan = true; m_DragOrig = m_PlatformShift; m_DragMouse = Event.current.mousePosition; } else if (e.type == EventType.MouseUp && SecondaryButtons.Contains(e.button)) { m_Pan = false; } // Pan ? else if (m_Pan && (e.type == EventType.MouseDrag) && SecondaryButtons.Contains(e.button)) { if (m_TexturePosPrepared) { Vector2 mouseDelta = new Vector2(); mouseDelta = Event.current.mousePosition - m_DragMouse; mouseDelta /= m_ZoomFactor; mouseDelta.x /= m_TextureSize.x; mouseDelta.y /= m_TextureSize.y; SetPlatformShift(m_DragOrig + mouseDelta); } } else if (e.type == EventType.MouseDown && e.button == PrimaryButton) { m_MouseDown = true; // Select vertex of edited rectangle? if (m_TexturePosPrepared) { Vector2 mousePos = Event.current.mousePosition; if (mousePos.x >= m_TexturePos.x && mousePos.y >= m_TexturePos.y) { Vector2 pos = new Vector2(m_TexturePos.x + m_EditedArea.Area.x * m_ZoomFactor, m_TexturePos.y + m_EditedArea.Area.y * m_ZoomFactor); pos.x += m_TextureSize.x * m_ZoomFactor * m_PlatformShift.x; pos.y += m_TextureSize.y * m_ZoomFactor * m_PlatformShift.y; if (GUIEditorUtils.IsPointTouched(mousePos, pos, 0, 0, m_PointSize * 0.5f)) { m_SelectedPointIdx = 0; Undo.RecordObject(m_SelectedWidget, "Edit UV"); } else if (GUIEditorUtils.IsPointTouched(mousePos, pos, m_EditedArea.Area.width * m_ZoomFactor, 0, m_PointSize * 0.5f)) { m_SelectedPointIdx = 1; Undo.RecordObject(m_SelectedWidget, "Edit UV"); } else if (GUIEditorUtils.IsPointTouched(mousePos, pos, m_EditedArea.Area.width * m_ZoomFactor, m_EditedArea.Area.height * m_ZoomFactor, m_PointSize * 0.5f)) { m_SelectedPointIdx = 2; Undo.RecordObject(m_SelectedWidget, "Edit UV"); } else if (GUIEditorUtils.IsPointTouched(mousePos, pos, 0, m_EditedArea.Area.height * m_ZoomFactor, m_PointSize * 0.5f)) { m_SelectedPointIdx = 3; Undo.RecordObject(m_SelectedWidget, "Edit UV"); } else { m_SelectedPointIdx = -1; //Debug.Log(mousePos.x); // Move with whole widget ? float minX = Mathf.Min(pos.x, pos.x + m_EditedArea.Area.width * m_ZoomFactor); float minY = Mathf.Min(pos.y, pos.y + m_EditedArea.Area.height * m_ZoomFactor); if ((mousePos.x >= minX) && (mousePos.y >= minY) && (mousePos.x < (minX + Mathf.Abs(m_EditedArea.Area.width) * m_ZoomFactor)) && (mousePos.y < (minY + Mathf.Abs(m_EditedArea.Area.height) * m_ZoomFactor))) { //Debug.Log("mouse = "+ mousePos.x + ", minX = " + minX); m_WidgetDrag = true; m_DragOrig.x = m_EditedArea.Area.x; m_DragOrig.y = m_EditedArea.Area.y; m_DragMouse = mousePos; } } } } } else if (e.type == EventType.MouseUp && e.button == PrimaryButton) { m_MouseDown = false; m_SelectedPointIdx = -1; m_TexturePosPrepared = false; m_Pan = false; m_WidgetDrag = false; } else { // movement with widget ? if (m_WidgetDrag) { Vector2 mouseDelta = new Vector2(); mouseDelta = Event.current.mousePosition - m_DragMouse; mouseDelta /= m_ZoomFactor; m_EditedArea.Area.x = m_DragOrig.x + mouseDelta.x; m_EditedArea.Area.y = m_DragOrig.y + mouseDelta.y; EditorUtility.SetDirty(m_SelectedWidget); } } }