|
@@ -87,6 +87,17 @@ class SceneEvents {
|
|
currentFocus = null;
|
|
currentFocus = null;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ function checkFocus() {
|
|
|
|
+ if( currentFocus == null ) return;
|
|
|
|
+ var s = currentFocus.getInteractiveScene();
|
|
|
|
+ if( s == null ) {
|
|
|
|
+ currentFocus = null;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if( !s.isInteractiveVisible(currentFocus) )
|
|
|
|
+ blur();
|
|
|
|
+ }
|
|
|
|
+
|
|
function emitEvent( event : hxd.Event ) {
|
|
function emitEvent( event : hxd.Event ) {
|
|
var oldX = event.relX, oldY = event.relY;
|
|
var oldX = event.relX, oldY = event.relY;
|
|
var handled = false;
|
|
var handled = false;
|
|
@@ -97,15 +108,12 @@ class SceneEvents {
|
|
case ERelease: checkPush = true;
|
|
case ERelease: checkPush = true;
|
|
case EKeyUp, EKeyDown, EWheel:
|
|
case EKeyUp, EKeyDown, EWheel:
|
|
if( currentFocus != null ) {
|
|
if( currentFocus != null ) {
|
|
- var s = currentFocus.getInteractiveScene();
|
|
|
|
- if( s != null && s.isInteractiveVisible(currentFocus) ) {
|
|
|
|
- event.relX = event.relY = 0;
|
|
|
|
- currentFocus.handleEvent(event);
|
|
|
|
- event.relX = oldX;
|
|
|
|
- event.relY = oldY;
|
|
|
|
- if( !event.propagate )
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ event.relX = event.relY = 0;
|
|
|
|
+ currentFocus.handleEvent(event);
|
|
|
|
+ event.relX = oldX;
|
|
|
|
+ event.relY = oldY;
|
|
|
|
+ if( !event.propagate )
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
default:
|
|
default:
|
|
}
|
|
}
|
|
@@ -208,6 +216,7 @@ class SceneEvents {
|
|
public function checkEvents() {
|
|
public function checkEvents() {
|
|
var old = pendingEvents;
|
|
var old = pendingEvents;
|
|
var checkMoved = false;
|
|
var checkMoved = false;
|
|
|
|
+ var checkFocused = currentFocus == null;
|
|
if( old.length > 0 ) {
|
|
if( old.length > 0 ) {
|
|
pendingEvents = [];
|
|
pendingEvents = [];
|
|
for( e in old ) {
|
|
for( e in old ) {
|
|
@@ -224,6 +233,11 @@ class SceneEvents {
|
|
mouseX = e.relX;
|
|
mouseX = e.relX;
|
|
mouseY = e.relY;
|
|
mouseY = e.relY;
|
|
lastTouch = e.touchId;
|
|
lastTouch = e.touchId;
|
|
|
|
+ case EKeyUp, EKeyDown, EWheel:
|
|
|
|
+ if( !checkFocused ) {
|
|
|
|
+ checkFocused = true;
|
|
|
|
+ checkFocus();
|
|
|
|
+ }
|
|
default:
|
|
default:
|
|
}
|
|
}
|
|
|
|
|
|
@@ -239,6 +253,9 @@ class SceneEvents {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if( !checkFocused )
|
|
|
|
+ checkFocus();
|
|
|
|
+
|
|
if( !checkMoved && currentDrag == null ) {
|
|
if( !checkMoved && currentDrag == null ) {
|
|
checkPos.relX = mouseX;
|
|
checkPos.relX = mouseX;
|
|
checkPos.relY = mouseY;
|
|
checkPos.relY = mouseY;
|