📄 anchorcontrol.as
字号:
package flare.vis.controls
{
import flare.vis.Visualization;
import flare.vis.operator.layout.Layout;
import flash.display.InteractiveObject;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
/**
* Interactive control for updating a layout's anchor point in response
* to mouse movement. This control is often used to dynamically update a
* focus+context distortion.
*/
public class AnchorControl extends Control
{
private var _layout:Layout;
public function get layout():Layout { return _layout; }
public function set layout(l:Layout):void { _layout = l; }
/** Update function called when the layout anchor changes. */
public var update:Function = function():void {
Visualization(_object).update();
}
// --------------------------------------------------------------------
/**
* Creates a new AnchorControl
* @param layout the layout on which to update the anchor point
*/
public function AnchorControl(layout:Layout=null)
{
_layout = layout;
}
/** @inheritDoc */
public override function attach(obj:InteractiveObject):void
{
super.attach(obj);
if (obj != null) {
obj.addEventListener(Event.ENTER_FRAME, updateMouse);
}
}
/** @inheritDoc */
public override function detach():InteractiveObject
{
if (_object != null) {
_object.removeEventListener(Event.ENTER_FRAME, updateMouse);
}
return super.detach();
}
/**
* Causes the layout anchor to be updated according to the current
* mouse position.
* @param evt an optional mouse event
*/
public function updateMouse(evt:Event=null):void
{
// get current anchor, run update if changed
var p1:Point = _layout.layoutAnchor;
_layout.layoutAnchor = new Point(_object.mouseX, _object.mouseY);
// distortion might snap the anchor to the layout bounds
// so we need to re-retrieve the point to ensure accuracy
var p2:Point = _layout.layoutAnchor;
if (p1.x != p2.x || p1.y != p2.y) update();
}
} // end of class AnchorControl
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -