Use the TextField hack ourselves.
- Flash seems to sketch out when key events go elsewhere - Whirled now does the handy thing of re-routing 'word' keypresses to the ChatControl, unless a TextField has focus. We want to automatically let games get any and all keypresses... - The damn focus stuff is broken anyway Untested, Nathan will test. git-svn-id: svn+ssh://src.earth.threerings.net/vilya/trunk@231 c613c5cb-e716-0410-b11b-feb51c14d237
This commit is contained in:
@@ -25,16 +25,14 @@ import flash.display.DisplayObject;
|
|||||||
|
|
||||||
import flash.geom.Rectangle;
|
import flash.geom.Rectangle;
|
||||||
|
|
||||||
|
import flash.text.TextField;
|
||||||
|
|
||||||
import mx.core.mx_internal;
|
import mx.core.mx_internal;
|
||||||
import mx.core.IFlexDisplayObject;
|
import mx.core.IFlexDisplayObject;
|
||||||
import mx.core.IInvalidating;
|
import mx.core.IInvalidating;
|
||||||
|
|
||||||
import mx.containers.VBox;
|
import mx.containers.VBox;
|
||||||
|
|
||||||
import mx.managers.IFocusManagerComponent;
|
|
||||||
|
|
||||||
import mx.skins.ProgrammaticSkin;
|
|
||||||
|
|
||||||
import com.threerings.flash.MediaContainer;
|
import com.threerings.flash.MediaContainer;
|
||||||
|
|
||||||
// TODO: there are focus issues in here that need dealing with.
|
// TODO: there are focus issues in here that need dealing with.
|
||||||
@@ -45,10 +43,11 @@ import com.threerings.flash.MediaContainer;
|
|||||||
// damn thing doesn't seem to grip onto the focus.
|
// damn thing doesn't seem to grip onto the focus.
|
||||||
//
|
//
|
||||||
public class GameContainer extends VBox
|
public class GameContainer extends VBox
|
||||||
implements IFocusManagerComponent
|
|
||||||
{
|
{
|
||||||
public function GameContainer (url :String)
|
public function GameContainer (url :String)
|
||||||
{
|
{
|
||||||
|
rawChildren.addChild(_keyGrabber = new TextField());
|
||||||
|
_keyGrabber.selectable = false;
|
||||||
rawChildren.addChild(_game = new MediaContainer(url));
|
rawChildren.addChild(_game = new MediaContainer(url));
|
||||||
|
|
||||||
tabEnabled = true; // turned off by Container
|
tabEnabled = true; // turned off by Container
|
||||||
@@ -60,6 +59,13 @@ public class GameContainer extends VBox
|
|||||||
return _game;
|
return _game;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override public function setActualSize (w :Number, h :Number) :void
|
||||||
|
{
|
||||||
|
super.setActualSize(w, h);
|
||||||
|
_keyGrabber.width = w;
|
||||||
|
_keyGrabber.height = h;
|
||||||
|
}
|
||||||
|
|
||||||
// override public function setFocus () :void
|
// override public function setFocus () :void
|
||||||
// {
|
// {
|
||||||
// if (stage) {
|
// if (stage) {
|
||||||
@@ -71,27 +77,29 @@ public class GameContainer extends VBox
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
override protected function adjustFocusRect (obj :DisplayObject = null) :void
|
// override protected function adjustFocusRect (obj :DisplayObject = null) :void
|
||||||
{
|
// {
|
||||||
super.adjustFocusRect(obj);
|
// super.adjustFocusRect(obj);
|
||||||
|
//
|
||||||
// TODO: this is probably all wrong
|
// // TODO: this is probably all wrong
|
||||||
var focusObj :IFlexDisplayObject =
|
// var focusObj :IFlexDisplayObject =
|
||||||
IFlexDisplayObject(mx_internal::getFocusObject());
|
// IFlexDisplayObject(mx_internal::getFocusObject());
|
||||||
if (focusObj) {
|
// if (focusObj) {
|
||||||
var r :Rectangle = transform.pixelBounds;
|
// var r :Rectangle = transform.pixelBounds;
|
||||||
focusObj.setActualSize(r.width - 2, r.height - 2);
|
// focusObj.setActualSize(r.width - 2, r.height - 2);
|
||||||
focusObj.move(0, 0);
|
// focusObj.move(0, 0);
|
||||||
|
//
|
||||||
if (focusObj is IInvalidating) {
|
// if (focusObj is IInvalidating) {
|
||||||
IInvalidating(focusObj).validateNow();
|
// IInvalidating(focusObj).validateNow();
|
||||||
|
//
|
||||||
} else if (focusObj is ProgrammaticSkin) {
|
// } else if (focusObj is ProgrammaticSkin) {
|
||||||
ProgrammaticSkin(focusObj).validateNow();
|
// ProgrammaticSkin(focusObj).validateNow();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
protected var _game :MediaContainer;
|
protected var _game :MediaContainer;
|
||||||
|
|
||||||
|
protected var _keyGrabber :TextField;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user