- Home /
Gui.modalWindow catch mouseUp event outside of the window
I have a problem with mouseUp event. I need to catch this event inside window function, because of that part of code is generic and can be used anywhwere.
so here is an example
using UnityEngine;
using System.Collections;
public class ModalWindow : MonoBehaviour {
Rect windowRect = new Rect(80,80,200,200);
Rect statusRect = new Rect(20,20,200,40);
string mouseStatus= "unknown";
void OnGUI () {
GUI.Label(statusRect, "last status: "+mouseStatus);
windowRect = GUI.ModalWindow(100,windowRect,doMyWindow,"test window");
}
void doMyWindow(int windowId){
Event e = Event.current;
if (!e.isMouse)
return;
if (e.type == EventType.MouseDown && localRectContains(windowRect,e.mousePosition)){
mouseStatus = "mouseDown";
} else if (e.type == EventType.mouseUp){
mouseStatus = "mouseUp";
}
}
//in modal window we work with local coordinates (because of new layout)
bool localRectContains(Rect rect, Vector2 position){
return (position.x >=0 && position.y >=0 && position.x < rect.width && position.y < rect.height);
}
}
and result is, when you mouse down inside that window, status changed to mouseDown and then you release mouse button while your cursor is still inside that window, status changed back to mouseUp.
But if you click mouse inside the window, and release button when your mouse is outside of the window, status wont be changed. And i don't know how to handle that.
I'm not sure that i can use that safely, But on mouse up eventType.Ignored fired, so the following code works
if (mouseStatus.Equals("mouseDown") && GUIUtility.has$$anonymous$$odalWindow && e.type == EventType.ignore){
Debug.Log("mouse up ignored");
mouseStatus = "mouseUp";
}
Your answer
Follow this Question
Related Questions
Is there an easy way to consume mouse/keyboard input events? 1 Answer
EditorWindow: Window works, why does ModalWindow not? 1 Answer
EventType.MouseDrag not working in WebPlayer 0 Answers
EventType.MouseUp seems to dislike buttons 1 Answer
TextField, Event.current, Input.GetKey, and GUI.FocusControl locking 1 Answer