1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
| package scripts
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
import mx.core.UIComponent;
import mx.events.SandboxMouseEvent;
import spark.components.TitleWindow;
/**
* ResizableTitleWindow is a TitleWindow with
* a resize handle.
*/
public class ResizableTitleWindow extends TitleWindow
{
//--------------------------------------------------------------------------
//
// Constructor
//
//--------------------------------------------------------------------------
/**
* Constructor.
*/
public function ResizableTitleWindow()
{
super();
}
//--------------------------------------------------------------------------
//
// Variables
//
//--------------------------------------------------------------------------
private var clickOffset:Point;
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// Resize Handle
//----------------------------------
[SkinPart(required="false")]
/**
* The skin part that defines the area where
* the user may drag to resize the window.
*/
public var resizeHandle:UIComponent;
//--------------------------------------------------------------------------
//
// Overridden methods: UIComponent, SkinnableComponent
//
//--------------------------------------------------------------------------
/**
* @private
*/
override protected function partAdded(partName:String, instance:Object) : void
{
super.partAdded(partName, instance);
if (instance == resizeHandle)
{
resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, resizeHandle_mouseDownHandler);
}
}
/**
* @private
*/
override protected function partRemoved(partName:String, instance:Object):void
{
if (instance == resizeHandle)
{
resizeHandle.removeEventListener(MouseEvent.MOUSE_DOWN, resizeHandle_mouseDownHandler);
}
super.partRemoved(partName, instance);
}
//--------------------------------------------------------------------------
//
// Event Handlers
//
//--------------------------------------------------------------------------
private var prevWidth:Number;
private var prevHeight:Number;
protected function resizeHandle_mouseDownHandler(event:MouseEvent):void
{
if (enabled && isPopUp && !clickOffset)
{
clickOffset = new Point(event.stageX, event.stageY);
prevWidth = width;
prevHeight = height;
var sbRoot:DisplayObject = systemManager.getSandboxRoot();
sbRoot.addEventListener(
MouseEvent.MOUSE_MOVE, resizeHandle_mouseMoveHandler, true);
sbRoot.addEventListener(
MouseEvent.MOUSE_UP, resizeHandle_mouseUpHandler, true);
sbRoot.addEventListener(
SandboxMouseEvent.MOUSE_UP_SOMEWHERE, resizeHandle_mouseUpHandler)
}
}
/**
* @private
*/
protected function resizeHandle_mouseMoveHandler(event:MouseEvent):void
{
// during a resize, only the TitleWindow should get mouse move events
// we don't check the target since this is on the systemManager and the target
// changes a lot -- but this listener only exists during a resize.
event.stopImmediatePropagation();
if (!clickOffset)
{
return;
}
width = prevWidth + (event.stageX - clickOffset.x);
height = prevHeight + (event.stageY - clickOffset.y);
event.updateAfterEvent();
}
/**
* @private
*/
protected function resizeHandle_mouseUpHandler(event:Event):void
{
clickOffset = null;
prevWidth = NaN;
prevHeight = NaN;
var sbRoot:DisplayObject = systemManager.getSandboxRoot();
sbRoot.removeEventListener(
MouseEvent.MOUSE_MOVE, resizeHandle_mouseMoveHandler, true);
sbRoot.removeEventListener(
MouseEvent.MOUSE_UP, resizeHandle_mouseUpHandler, true);
sbRoot.removeEventListener(
SandboxMouseEvent.MOUSE_UP_SOMEWHERE, resizeHandle_mouseUpHandler);
}
}
} |
Partager