Всем привет.
Мне нужно ловить событие, когда курсор выходит за пределы окна проектора. Использую MOUSE_LEAVE.
Все нормально работает до тех пор, пока я в своем приложении не переключусь в полноэкранный режим и потом обратно. После этого MOUSE_LEAVE перестает срабатывать.
Но стоит изменить размер окна мышкой, MOUSE_LEAVE снова в деле...
Кто нибудь сталкивался с этим? Глюк?
Компилирую через FlashBuilder. Mac OS 10.9.5
Подробно о том, что делаю:
В программе есть менюшка, которая должна появляться при активности мыши (но только когда мышь находится в пределах окна программы). И при простое - скрываться вместе с курсором.
Кстати, в конструкторе Mouse.hide тоже почему-то не срабатывает - только после первого MOUSE_OVER.. Очень странно..
Код AS3:
public class MainMenu extends MainMenuSWC
{
private var _timerIdle:Timer;
public function MainMenu()
{
visible = false;
Mouse.hide();
if (stage) initMonitoringMouseMove();
else addEventListener(Event.ADDED_TO_STAGE, initMonitoringMouseMove);
}
private function initMonitoringMouseMove(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, initMonitoringMouseMove);
stage.addEventListener(Event.MOUSE_LEAVE, onMouseLeaveHandler);
stage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler);
_timerIdle = new Timer(2000);
_timerIdle.addEventListener(TimerEvent.TIMER, onTimerIdleCompleteHandler);
onMouseOverHandler();
}
private function onMouseOverHandler(e:MouseEvent = null):void
{
stage.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler);
}
private function onMouseLeaveHandler(e:Event):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler);
}
private function onMouseMoveHandler(e:MouseEvent):void
{
visible = true;
Mouse.show();
_timerIdle.delay = 2000;
_timerIdle.start();
}
private function onTimerIdleCompleteHandler(e:TimerEvent):void
{
_timerIdle.stop();
visible = false;
Mouse.hide();
}
public function destroy():void
{
removeEventListener(Event.ADDED_TO_STAGE, initMonitoringMouseMove);
if (stage)
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler);
stage.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler);
stage.removeEventListener(Event.MOUSE_LEAVE, onMouseLeaveHandler);
}
if (_timerIdle)
{
_timerIdle.stop();
_timerIdle.removeEventListener(TimerEvent.TIMER, onTimerIdleCompleteHandler);
}
}
}