From 91b0a812ba9eb2d3cbfb2e392f5892c16d0bac67 Mon Sep 17 00:00:00 2001 From: Dave Hoover Date: Tue, 6 Jul 2010 17:28:12 +0000 Subject: [PATCH] Line ending happy fun times git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@935 ed5b42cb-e716-0410-a449-f6a68f950b19 --- src/as/com/threerings/flex/CursorManager.as | 604 ++++++++++---------- 1 file changed, 302 insertions(+), 302 deletions(-) diff --git a/src/as/com/threerings/flex/CursorManager.as b/src/as/com/threerings/flex/CursorManager.as index 1d4e675f..4c8b7f0e 100644 --- a/src/as/com/threerings/flex/CursorManager.as +++ b/src/as/com/threerings/flex/CursorManager.as @@ -19,305 +19,305 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -package com.threerings.flex { - -import flash.display.DisplayObject; -import flash.display.InteractiveObject; -import flash.display.Sprite; -import flash.events.MouseEvent; -import flash.text.TextField; -import flash.text.TextFieldType; -import flash.ui.Mouse; - -import mx.core.Application; -import mx.managers.SystemManager; -import mx.styles.CSSStyleDeclaration; -import mx.styles.StyleManager; - -import com.threerings.util.Map; -import com.threerings.util.Maps; - -/** - * A better CursorManager. - */ -public class CursorManager -{ - public static const SYSTEM_CURSOR :int = 0; - - public static const BUSY_CURSOR :int = 1; - - //-------------------------------------------------------------------------- - // - // Class methods - // - //-------------------------------------------------------------------------- - - /** - * Makes the cursor visible. - * Cursor visibility is not reference-counted. - * A single call to the showCursor() method - * always shows the cursor regardless of how many calls - * to the hideCursor() method were made. - */ - public static function showCursor () :void - { - if (_currentCursorId == SYSTEM_CURSOR) { - Mouse.show(); - } else { - _cursorHolder.visible = true; - } - } - - /** - * Makes the cursor invisible. - * Cursor visibility is not reference-counted. - * A single call to the hideCursor() method - * always hides the cursor regardless of how many calls - * to the showCursor() method were made. - */ - public static function hideCursor () :void - { - _cursorHolder.visible = false; - Mouse.hide(); - } - - public static function getCurrentCursorId () :int - { - return _currentCursorId; - } - - /** - * Creates a new cursor. - * - * @param cursorClass Class of the cursor to display. - * - * @param xOffset Number that specifies the x offset - * of the cursor, in pixels, relative to the mouse pointer. - * The default value is 0. - * - * @param yOffset Number that specifies the y offset - * of the cursor, in pixels, relative to the mouse pointer. - * The default value is 0. - * - * @return The ID of the cursor. - */ - public static function addCursor ( - cursorClass :Class, xOffset :int = 0, yOffset :int = 0) :int - { - var cursorId :int = _nextCursorId++; - - var rec :CursorRecord = new CursorRecord(cursorClass); - rec.x = xOffset; - rec.y = yOffset; - - _cursors.put(cursorId, rec); - - return cursorId; - } - - /** - * Set the current cursor. - */ - public static function setCursor (id :int) :void - { - if (id == _currentCursorId) { - return; - } - - if (!_initialized) { - // oh, let's set it up - _systemManager = Application.application.systemManager; - - // set up the busy cursor - var cursorManagerStyleDeclaration :CSSStyleDeclaration = - StyleManager.getStyleDeclaration("CursorManager"); - var busyCursorClass :Class = - cursorManagerStyleDeclaration.getStyle("busyCursor"); - _busyCursor = new CursorRecord(busyCursorClass); - - // The first time a cursor is requested of the CursorManager, - // create a Sprite to hold the cursor symbol - _cursorHolder = new Sprite(); - _cursorHolder.mouseEnabled = false; - _systemManager.cursorChildren.addChild(_cursorHolder); - - _initialized = true; - } - - // figure out what the new cursor will be like - var rec :CursorRecord; - if (id == BUSY_CURSOR) { - rec = _busyCursor; - - } else if (id != SYSTEM_CURSOR) { - rec = (_cursors.get(id) as CursorRecord); - if (rec == null) { - // a bogus id was specified - // TODO: throw an error? - return; - } - } - - if (rec != null && (rec.cursor is Class)) { - // go ahead and instantiate the class - try { - var disp :DisplayObject = new (rec.cursor as Class); - rec.cursor = disp; - if (disp is InteractiveObject) { - (disp as InteractiveObject).mouseEnabled = false; - } - - } catch (err :Error) { - // this cursor is not usable, bail - return; - } - } - - // always remove any custom cursors from the hierarchy - if (_cursorHolder.numChildren > 0) { - _cursorHolder.removeChildAt(0); - } - - if (id != SYSTEM_CURSOR) { - Mouse.hide(); - var currentCursor :DisplayObject = (rec.cursor as DisplayObject); - _cursorHolder.addChild(currentCursor); - _cursorHolder.x = _systemManager.mouseX + rec.x; - _cursorHolder.y = _systemManager.mouseY + rec.y; - - _currentXOffset = rec.x; - _currentYOffset = rec.y; - _systemManager.stage.addEventListener( - MouseEvent.MOUSE_MOVE, mouseMoveHandler); - - - } else { - _currentXOffset = 0; - _currentYOffset = 0; - _systemManager.stage.removeEventListener( - MouseEvent.MOUSE_MOVE, mouseMoveHandler); - - Mouse.show(); - } - - _currentCursorId = id; - } - - /** - * Removes a cursor from the cursor list. - * If the cursor being removed is the currently displayed cursor, - * the CursorManager displays the next cursor in the list, if one exists. - * If the list becomes empty, the CursorManager displays - * the default system cursor. - * - * @param cursorID ID of cursor to remove. - */ - public static function removeCursor (id :int) :void - { - var rec :CursorRecord = (_cursors.remove(id) as CursorRecord); - - if (rec != null && id == _currentCursorId) { - setCursor(SYSTEM_CURSOR); - } - } - - /** - * Removes all of the cursors from the cursor list - * and restores the system cursor. - */ - public static function removeAllCursors () :void - { - _cursors.clear(); - - if (_currentCursorId != BUSY_CURSOR) { - setCursor(SYSTEM_CURSOR); - } - } - - //-------------------------------------------------------------------------- - // - // Class event handlers - // - //-------------------------------------------------------------------------- - - /** - * @private - */ - private static function mouseMoveHandler (event :MouseEvent) :void - { - _cursorHolder.x = _systemManager.mouseX + _currentXOffset; - _cursorHolder.y = _systemManager.mouseY + _currentYOffset; - - var target :Object = event.target; - - // Do target test. - if (!_overTextField && - target is TextField && target.type == TextFieldType.INPUT) { - _overTextField = true; - _showSystemCursor = true; - - } else if (_overTextField && - !(target is TextField && target.type == TextFieldType.INPUT)) { - _overTextField = false; - _showCustomCursor = true; - } - - // Handle switching between system and custom cursor. - if (_showSystemCursor) { - _showSystemCursor = false; - _cursorHolder.visible = false; - Mouse.show(); - } - if (_showCustomCursor) { - _showCustomCursor = false; - _cursorHolder.visible = true; - Mouse.hide(); - } - } - - /** A mapping of all assigned cursor ids. */ - private static const _cursors :Map = Maps.newMapOf(int); - - private static var _currentCursorId :int = 0; // SYSTEM_CURSOR - - private static var _nextCursorId :int = 2; // skip BUSY - - private static var _initialized :Boolean = false; - - private static var _cursorHolder :Sprite; - - private static var _currentXOffset :int = 0; - private static var _currentYOffset :int = 0; - - /** A record for the busy cursor (where it can't be removed). */ - private static var _busyCursor :CursorRecord; - - private static var _overTextField :Boolean = false; - - private static var _overLink :Boolean = false; - - private static var _showSystemCursor :Boolean = false; - - private static var _showCustomCursor :Boolean = false; - - private static var _systemManager :SystemManager = null; -} -} - - -/** - */ -class CursorRecord extends Object -{ - public function CursorRecord (clazz :Class) - { - cursor = clazz; - } - - /** The class, or instantiated cursor. */ - public var cursor :Object - - /** The x/y offset for the hotspot. */ - public var x :Number; - public var y :Number; -} +package com.threerings.flex { + +import flash.display.DisplayObject; +import flash.display.InteractiveObject; +import flash.display.Sprite; +import flash.events.MouseEvent; +import flash.text.TextField; +import flash.text.TextFieldType; +import flash.ui.Mouse; + +import mx.core.Application; +import mx.managers.SystemManager; +import mx.styles.CSSStyleDeclaration; +import mx.styles.StyleManager; + +import com.threerings.util.Map; +import com.threerings.util.Maps; + +/** + * A better CursorManager. + */ +public class CursorManager +{ + public static const SYSTEM_CURSOR :int = 0; + + public static const BUSY_CURSOR :int = 1; + + //-------------------------------------------------------------------------- + // + // Class methods + // + //-------------------------------------------------------------------------- + + /** + * Makes the cursor visible. + * Cursor visibility is not reference-counted. + * A single call to the showCursor() method + * always shows the cursor regardless of how many calls + * to the hideCursor() method were made. + */ + public static function showCursor () :void + { + if (_currentCursorId == SYSTEM_CURSOR) { + Mouse.show(); + } else { + _cursorHolder.visible = true; + } + } + + /** + * Makes the cursor invisible. + * Cursor visibility is not reference-counted. + * A single call to the hideCursor() method + * always hides the cursor regardless of how many calls + * to the showCursor() method were made. + */ + public static function hideCursor () :void + { + _cursorHolder.visible = false; + Mouse.hide(); + } + + public static function getCurrentCursorId () :int + { + return _currentCursorId; + } + + /** + * Creates a new cursor. + * + * @param cursorClass Class of the cursor to display. + * + * @param xOffset Number that specifies the x offset + * of the cursor, in pixels, relative to the mouse pointer. + * The default value is 0. + * + * @param yOffset Number that specifies the y offset + * of the cursor, in pixels, relative to the mouse pointer. + * The default value is 0. + * + * @return The ID of the cursor. + */ + public static function addCursor ( + cursorClass :Class, xOffset :int = 0, yOffset :int = 0) :int + { + var cursorId :int = _nextCursorId++; + + var rec :CursorRecord = new CursorRecord(cursorClass); + rec.x = xOffset; + rec.y = yOffset; + + _cursors.put(cursorId, rec); + + return cursorId; + } + + /** + * Set the current cursor. + */ + public static function setCursor (id :int) :void + { + if (id == _currentCursorId) { + return; + } + + if (!_initialized) { + // oh, let's set it up + _systemManager = Application.application.systemManager; + + // set up the busy cursor + var cursorManagerStyleDeclaration :CSSStyleDeclaration = + StyleManager.getStyleDeclaration("CursorManager"); + var busyCursorClass :Class = + cursorManagerStyleDeclaration.getStyle("busyCursor"); + _busyCursor = new CursorRecord(busyCursorClass); + + // The first time a cursor is requested of the CursorManager, + // create a Sprite to hold the cursor symbol + _cursorHolder = new Sprite(); + _cursorHolder.mouseEnabled = false; + _systemManager.cursorChildren.addChild(_cursorHolder); + + _initialized = true; + } + + // figure out what the new cursor will be like + var rec :CursorRecord; + if (id == BUSY_CURSOR) { + rec = _busyCursor; + + } else if (id != SYSTEM_CURSOR) { + rec = (_cursors.get(id) as CursorRecord); + if (rec == null) { + // a bogus id was specified + // TODO: throw an error? + return; + } + } + + if (rec != null && (rec.cursor is Class)) { + // go ahead and instantiate the class + try { + var disp :DisplayObject = new (rec.cursor as Class); + rec.cursor = disp; + if (disp is InteractiveObject) { + (disp as InteractiveObject).mouseEnabled = false; + } + + } catch (err :Error) { + // this cursor is not usable, bail + return; + } + } + + // always remove any custom cursors from the hierarchy + if (_cursorHolder.numChildren > 0) { + _cursorHolder.removeChildAt(0); + } + + if (id != SYSTEM_CURSOR) { + Mouse.hide(); + var currentCursor :DisplayObject = (rec.cursor as DisplayObject); + _cursorHolder.addChild(currentCursor); + _cursorHolder.x = _systemManager.mouseX + rec.x; + _cursorHolder.y = _systemManager.mouseY + rec.y; + + _currentXOffset = rec.x; + _currentYOffset = rec.y; + _systemManager.stage.addEventListener( + MouseEvent.MOUSE_MOVE, mouseMoveHandler); + + + } else { + _currentXOffset = 0; + _currentYOffset = 0; + _systemManager.stage.removeEventListener( + MouseEvent.MOUSE_MOVE, mouseMoveHandler); + + Mouse.show(); + } + + _currentCursorId = id; + } + + /** + * Removes a cursor from the cursor list. + * If the cursor being removed is the currently displayed cursor, + * the CursorManager displays the next cursor in the list, if one exists. + * If the list becomes empty, the CursorManager displays + * the default system cursor. + * + * @param cursorID ID of cursor to remove. + */ + public static function removeCursor (id :int) :void + { + var rec :CursorRecord = (_cursors.remove(id) as CursorRecord); + + if (rec != null && id == _currentCursorId) { + setCursor(SYSTEM_CURSOR); + } + } + + /** + * Removes all of the cursors from the cursor list + * and restores the system cursor. + */ + public static function removeAllCursors () :void + { + _cursors.clear(); + + if (_currentCursorId != BUSY_CURSOR) { + setCursor(SYSTEM_CURSOR); + } + } + + //-------------------------------------------------------------------------- + // + // Class event handlers + // + //-------------------------------------------------------------------------- + + /** + * @private + */ + private static function mouseMoveHandler (event :MouseEvent) :void + { + _cursorHolder.x = _systemManager.mouseX + _currentXOffset; + _cursorHolder.y = _systemManager.mouseY + _currentYOffset; + + var target :Object = event.target; + + // Do target test. + if (!_overTextField && + target is TextField && target.type == TextFieldType.INPUT) { + _overTextField = true; + _showSystemCursor = true; + + } else if (_overTextField && + !(target is TextField && target.type == TextFieldType.INPUT)) { + _overTextField = false; + _showCustomCursor = true; + } + + // Handle switching between system and custom cursor. + if (_showSystemCursor) { + _showSystemCursor = false; + _cursorHolder.visible = false; + Mouse.show(); + } + if (_showCustomCursor) { + _showCustomCursor = false; + _cursorHolder.visible = true; + Mouse.hide(); + } + } + + /** A mapping of all assigned cursor ids. */ + private static const _cursors :Map = Maps.newMapOf(int); + + private static var _currentCursorId :int = 0; // SYSTEM_CURSOR + + private static var _nextCursorId :int = 2; // skip BUSY + + private static var _initialized :Boolean = false; + + private static var _cursorHolder :Sprite; + + private static var _currentXOffset :int = 0; + private static var _currentYOffset :int = 0; + + /** A record for the busy cursor (where it can't be removed). */ + private static var _busyCursor :CursorRecord; + + private static var _overTextField :Boolean = false; + + private static var _overLink :Boolean = false; + + private static var _showSystemCursor :Boolean = false; + + private static var _showCustomCursor :Boolean = false; + + private static var _systemManager :SystemManager = null; +} +} + + +/** + */ +class CursorRecord extends Object +{ + public function CursorRecord (clazz :Class) + { + cursor = clazz; + } + + /** The class, or instantiated cursor. */ + public var cursor :Object + + /** The x/y offset for the hotspot. */ + public var x :Number; + public var y :Number; +}