zoukankan      html  css  js  c++  java
  • TransformToolCursor.as

    package com.senocular.display {
        
        import flash.display.DisplayObject;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Matrix;
        import flash.geom.Point;
        import flash.utils.Dictionary;
        
        import com.senocular.display.TransformTool;
        import com.senocular.display.TransformToolControl;
        
        
    public class TransformToolCursor extends TransformToolControl {
            
            protected var _mouseOffset:Point 
    = new Point(2020);
            protected var contact:
    Boolean = false;
            protected var active:
    Boolean = false;
            protected var references:Dictionary 
    = new Dictionary(true);
                
            
    public function get mouseOffset():Point {
                return _mouseOffset.clone();
            }
            
    public function set mouseOffset(p:Point):void {
                _mouseOffset 
    = p;
            }
            
            
    public function TransformToolCursor() {
                addEventListener(TransformTool.CONTROL_INIT, init);
            }
                
            
    /**
             
    * Adds a reference to the list of references that the cursor
             
    * uses to determine when to be displayed.  Typically this would
             
    * be a TransformToolControl instance used in the transform tool
             
    * @see removeReference
             
    */
            
    public function addReference(reference:DisplayObject):void {
                
    if (reference && !references[reference]) {
                    references[reference] 
    = true;
                    addReferenceListeners(reference);
                }
            }
            
            
    /**
             
    * Removes a reference to the list of references that the cursor
             
    * uses to determine when to be displayed.
             
    * @see addReference
             
    */
            
    public function removeReference(reference:DisplayObject):DisplayObject {
                
    if (reference && references[reference]) {
                    removeReferenceListeners(reference);
                    delete references[reference];
                    return reference;
                }
                return 
    null;
            }
            
            
    /**
             
    * Called when the cursor should determine 
             
    * whether it should be visible or not
             
    */
            
    public function updateVisible(event:Event = null):void {
                
    if (active) {
                    
    if (!visible) {
                        visible 
    = true;
                    }
                }
    else if (visible != contact) {
                    visible 
    = contact;
                }
                position(event);
            }
            
            
    /**
             
    * Called when the cursor should position itself
             
    */
            
    public function position(event:Event = null):void {
                
    if (parent) {
                    x 
    = parent.mouseX + mouseOffset.x;
                    y 
    = parent.mouseY + mouseOffset.y;
                }
            }
            
            
    private function init(event:Event):void {
                _transformTool.addEventListener(TransformTool.TRANSFORM_TOOL, position, 
    false0true);
                _transformTool.addEventListener(TransformTool.NEW_TARGET, referenceUnset, 
    false0true);
                _transformTool.addEventListener(TransformTool.CONTROL_TRANSFORM_TOOL, position, 
    false0true);
                _transformTool.addEventListener(TransformTool.CONTROL_DOWN, controlMouseDown, 
    false0true);
                _transformTool.addEventListener(TransformTool.CONTROL_MOVE, controlMove, 
    false0true);
                _transformTool.addEventListener(TransformTool.CONTROL_UP, controlMouseUp, 
    false0true);
                updateVisible(event);
                position(event);
            }
            
            
    private function addReferenceListeners(reference:DisplayObject):void {
                reference.addEventListener(MouseEvent.MOUSE_MOVE, referenceMove, 
    false0true);
                reference.addEventListener(MouseEvent.MOUSE_DOWN, referenceSet, 
    false0true);
                reference.addEventListener(MouseEvent.ROLL_OVER, referenceSet, 
    false0true);
                reference.addEventListener(MouseEvent.ROLL_OUT, referenceUnset, 
    false0true);
            }
            
            
    private function removeReferenceListeners(reference:DisplayObject):void {
                reference.removeEventListener(MouseEvent.MOUSE_MOVE, referenceMove, 
    false);
                reference.removeEventListener(MouseEvent.MOUSE_DOWN, referenceSet, 
    false);
                reference.removeEventListener(MouseEvent.ROLL_OVER, referenceSet, 
    false);
                reference.removeEventListener(MouseEvent.ROLL_OUT, referenceUnset, 
    false);
            }
            
            protected 
    function referenceMove(event:MouseEvent):void {
                position(event);
                event.updateAfterEvent();
            }
            
            protected 
    function referenceSet(event:Event):void {
                contact 
    = true;
                
    if (!_transformTool.currentControl) {
                    updateVisible(event);
                }
            }
            
            protected 
    function referenceUnset(event:Event):void {
                contact 
    = false;
                
    if (!_transformTool.currentControl) {
                    updateVisible(event);
                }
            }
        
            
    // the following control methods rely on TransformToolControl.relatedObject
            
    // to tell if a reference is being interacted with and therefore active
            
            protected 
    function controlMouseDown(event:Event):void {
                
    if (references[_transformTool.currentControl.relatedObject]) {
                    active 
    = true;
                    
    //~ contact = true;
                }
                updateVisible(event);
            }
            
            protected 
    function controlMove(event:Event):void {
                
    if (references[_transformTool.currentControl.relatedObject]) {
                    position(event);
                }
            }
            
            protected 
    function controlMouseUp(event:Event):void {
                
    if (references[_transformTool.currentControl.relatedObject]) {
                    active 
    = false;
                }
                updateVisible(event);
            }
        }
    }
  • 相关阅读:
    nodejs dateformat date-utils
    nodejs async
    nodejs dateformat date-utils
    nodejs timer block-timer timer-ease
    linux 修改 ssh 的端口号,启动hg服务
    linux 下添加 路由
    tkprof 命令行工具用法
    通过API删除库存货位
    使用FROM个性化修改标准FORM的LOV
    批量更新 ITEM 物料属性
  • 原文地址:https://www.cnblogs.com/ddw1997/p/1579922.html
Copyright © 2011-2022 走看看