「FlexでTitleWindowをresize可能に」へのパッチ

Flex でちょっと凝ったモーダルダイアログを作りたいときに便利な TitleWindow をリサイズ可能にしようと思って調べたら、以下のエントリを発見しました。

Flex で TitleWindow を resize 可能にする - Enjoi Blog

おおまさにこれだと、とても便利に使わせていただいたのですが、TitleWindow の子要素によっては意図せずしてリサイズ処理に入ってしまうことがありました。


これは子要素に対して発生したイベントが、バブリングで TitleWindow に届いたときに起こります。その時の event.localX, event.localY は子要素の座標系での値になりますので、それをリサイズ開始の判断に用いるとおかしなことになるんですね。

ということで onThis_mouseDown メソッドを以下のように修正しました。ステージ座標系の値から計算して、TitleWindow でのマウス座標を求めています。

      private function onThis_mouseDown(event:MouseEvent):void
      {
        var stageX:Number = event.stageX;
        var stageY:Number = event.stageY;
        var ctX:Number = event.currentTarget.x;
        var ctY:Number = event.currentTarget.y;

        var loc:Object = {
            x: stageX - ctX,
            y: stageY - ctY
        };

        // check Top pos
        if( loc.y < SIZE_DRAGAREA )
        {
          blDragTop = true;
          iDragPosHeight = loc.y;
        }

        // check Right pos
        if( this.width - SIZE_DRAGAREA < loc.x )
        {
          blDragRight = true;
          iDragPosWidth = this.width - loc.x;
        }

        // check Bottom pos
        if( this.height - SIZE_DRAGAREA < loc.y )
        {
          blDragBottom = true;
          iDragPosHeight = this.height - loc.y;
        }
        
        // check Left pos
        if( loc.x < SIZE_DRAGAREA )
        {
          blDragLeft = true;
          iDragPosWidth = loc.x;
        }
      }