Beispiel #1
0
        /// <summary>
        /// モーション移動対象パーツを1モーションステップ分 進める
        /// </summary>
        /// <returns>true=もう一度自己Invalidateでモーション継続が必要</returns>
        private bool move1step()
        {
            var dels  = new List <PartsBase>();
            var nDone = 0;
            var ret   = false;

            lock (_tarPos)
            {
                foreach (var kv in _tarPos)
                {
                    var part = kv.Key;
                    var tar  = kv.Value;

                    if (part.Rect.LT.Equals(tar.Pos))
                    {
                        dels.Add(part);
                        tar.StepN = 0;
                    }
                    else
                    {
                        tar.StepN--;
                        if (tar.StepN == 0)
                        {
                            part.Rect = CodeRect.FromLTWH(tar.Pos.X, tar.Pos.Y, part.Rect.Width, part.Rect.Height);
                            dels.Add(part);
                        }
                        else
                        {
                            float dx  = tar.Pos.X - part.Rect.LT.X;
                            float dy  = tar.Pos.Y - part.Rect.LT.Y;
                            var   div = (float)tar.StepN * 2;
                            dx        /= div;
                            dy        /= div;
                            part.Rect += CodePos.FromInt((int)dx, (int)dy);
                        }
                        nDone++;
                    }
                }
            }
            if (nDone > 0)
            {
                ret = true;
            }

            foreach (var del in dels)
            {
                _tarPos.Remove(del);
            }
            _isMoving |= _tarPos.Count > 0 ? Moving.Parts : Moving.None;
            return(ret);
        }
Beispiel #2
0
        /// <summary>
        /// 移動情報を更新する
        /// 注意:いったんスクリーン座標に変換して移動するので、コード座標に変換誤差が生じる可能性がある。
        /// </summary>
        /// <param name="dragStartPos">移動開始時のマウス座標(ドラッグ開始点)</param>
        /// <param name="currentPos">現在のマウス座標</param>
        /// <param name="type">座標変更タイプ</param>
        public void Develop(ScreenPos dragStartPos, ScreenPos currentPos, DevelopType type)
        {
            _lastDevelpType = type;
            var sdelta = currentPos - dragStartPos;     // マウスの移動量

            _prevShift = sdelta;

            foreach (DictionaryEntry de in this)            // 選択中全パーツに対して行う
            {
                var p3     = (Pos3)de.Value;
                var target = (PartsBase)de.Key;
                p3.Pre = p3.Now;                                                                              // ひとつ前の座標に記憶
                p3.Now = (CodeRect)p3.Now.Clone();                                                            // サイズ系の処理が正しく動作するために必要
                var virtualPos = target.GetCdRect(p3.NowPane, target.GetScRect(p3.OrgPane, p3.Org) + sdelta); // 移動後の位置を計算
                var d          = target.GetCdPos(p3.NowPane, sdelta);
                //Debug.WriteLine( string.Format( "[{0}] Delta[{1}]:Offset[{2}]", i, d, p3.Offset) );

                virtualPos = CodeRect.FromLTWH(virtualPos.LT.X + p3.Offset.X, virtualPos.LT.Y, virtualPos.Width, virtualPos.Height);

                switch (type)
                {
                case DevelopType.Move:
                    p3.Now = virtualPos;
                    if (p3.Now.Width != p3.Org.Width)
                    {
                        p3.Now.RB.X = p3.Now.LT.X + p3.Org.Width - 1;       // 幅が変わらないようにする
                    }
                    break;

                case DevelopType.SizeRight:
                    p3.Now.RB.X = virtualPos.RB.X;
                    break;

                case DevelopType.SizeLeft:
                    p3.Now.LT.X = virtualPos.LT.X;
                    break;

                case DevelopType.SizeTop:
                    p3.Now.LT.Y = virtualPos.LT.Y;
                    break;

                case DevelopType.SizeBottom:
                    p3.Now.RB.Y = virtualPos.RB.Y;
                    break;
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// パーツ作成開始
        /// </summary>
        /// <param name="who"></param>
        public override void Start(NamedId who)
        {
            base.Start(who);
            if (MultiTokenTriggerID[0].Equals(who))
            {
                var ph = (int)ConfigRegister.Current["LogPanelGroupHeight", 128];
                _lp = createLogPartInstance(_clickArea);
                LOG.JumpInf.Jumping += new EventHandler(onJumping);
                LOG.JumpErr.Jumping += new EventHandler(onJumping);
                LOG.JumpWar.Jumping += new EventHandler(onJumping);
                LOG.JumpDev.Jumping += new EventHandler(onJumping);
                _lp.SetMargin(_margin);
                _lp.Rect = CodeRect.FromLTWH(0, 0, 0, ph);   // 高さの初期値(単位;ドット)
                Parts.Add(_tarPane, _lp, Const.Layer.StaticLayers.LogPanel);
                _tarPane.Invalidate(null);

                Timer.AddTrigger(320, new GuiTimer.Proc0(refresh0));
            }
            if (MultiTokenTriggerID[1].Equals(who))
            {
                triggerCloseButtonProc();
            }
        }