示例#1
0
 /// <summary>
 /// BMPキャッシュ機能を追加したレイヤー描画
 /// </summary>
 /// <param name="pane"></param>
 /// <param name="layerid"></param>
 /// <param name="pts"></param>
 protected override void drawLayer(IRichPane pane, int layerid, IEnumerable <PartsBase> pts)
 {
     if (_enabledLayers.ContainsKey(layerid))
     {
         if (bmps.ContainKeys(pane, layerid) == false)
         {
             var pr = MotherPane.GetPaneRect();
             bmps[pane, layerid] = new Bitmap(pr.Width, pr.Height);
         }
         var bmp = bmps[pane, layerid];
         if (EnableShot == false)
         {
             var rp = RichPaneCustomGraphicsBinder.CreateCopy(MotherPane, Graphics.FromImage(bmp));
             rp.SetParent(MotherPane);
             rp.Graphics.Clear(Color.Transparent);
             base.drawLayer(rp, layerid, pts);
             var sr = pane.GetPaneRect();
             MotherPane.Graphics.DrawImageUnscaledAndClipped(bmp, sr);
             panebak[pane, layerid] = rp;
         }
         else
         {
             var sr    = pane.GetPaneRect();
             var rpbak = panebak[pane, layerid];
             //					pane.Graphics.SetClip(sr);
             sr += ScreenPos.FromInt(pane.Scroll.X - rpbak.Scroll.X, pane.Scroll.Y - rpbak.Scroll.Y);
             MotherPane.Graphics.DrawImageUnscaledAndClipped(bmp, sr);
         }
     }
     else
     {
         base.drawLayer(pane, layerid, pts);
     }
 }
示例#2
0
        public void OnMouseMove(MouseState e)
        {
            _bar.MouseNow = e;

            // バーの位置だけ再描画
            var br = _tarPane.GetPaneRect();

            br.LT.X = br.RB.X - PartsScrollbarV.Width;
            Pane.Invalidate(br);

            if (_bar.IsOn)
            {
                var k = _speed * _bar.Acc;

                var ly = (_downPos.Y - e.Pos.Y) * k;
                ly          = Math.Pow(Math.Abs(ly), 1.25) * (ly > 0 ? 1 : -1); // たくさん移動したら、加速度的に移動する
                Pane.Scroll = ScreenPos.FromInt(Pane.Scroll.X, _downScroll.Y + (int)ly);
                _bar.SetHighlight(false);
                Pane.Invalidate(null);
            }
            else
            {
                _bar.SetHighlight(true);
            }
        }
示例#3
0
        public void OnMouseMove(MouseState e)
        {
            _bar.MouseNow = e;

            // バーの位置だけ再描画
            var br = _tarPane.GetPaneRect();

            br.LT.Y = br.RB.Y - PartsScrollbarH.Height;
            Pane.Invalidate(br);

            if (_bar.IsOn)
            {
                var k = Pane.Zoom.X > 84 ? Pane.Zoom.X / 84 : 1.0;
                k *= _speed * _bar.Acc;

                var lx = (_downPos.X - e.Pos.X) * k;
                lx          = Math.Pow(Math.Abs(lx), 1.25) * (lx > 0 ? 1 : -1); // たくさん移動したら、加速度的に移動する
                Pane.Scroll = ScreenPos.FromInt(_downScroll.X + (int)lx, Pane.Scroll.Y);
                _bar.SetHighlight(false);
                Pane.Invalidate(null);
            }
            else
            {
                _bar.SetHighlight(true);
            }
        }
示例#4
0
        /// <summary>
        /// 指定量のズームを行う
        /// </summary>
        /// <param name="value"></param>
        private void zoom(int x, int y)
        {
            // 選択ペーンの描画領域の中心をズームのセンターの設定
            var _posDown = new ScreenPos
            {
                X = _tarPane.GetPaneRect().LT.X + _tarPane.GetPaneRect().Width / 2 - _tarPane.GetPaneRect().LT.X,
                Y = _tarPane.GetPaneRect().LT.Y + _tarPane.GetPaneRect().Height / 2 - _tarPane.GetPaneRect().LT.Y
            };
            var _scrollDown = (ScreenPos)Pane.Scroll.Clone();
            var _zoomDown   = (XyBase)Pane.Zoom.Clone();

            // 画面の拡大/縮小
            XyBase zoomNow;

            if (_isX && !_isY)
            {
                zoomNow = Pane.Zoom + XyBase.FromInt(x, 0);            // ズーム値の算出
            }
            else if (!_isX && _isY)
            {
                zoomNow = Pane.Zoom + XyBase.FromInt(0, y);            // ズーム値の算出
            }
            else
            {
                zoomNow = Pane.Zoom + x;                            // ズーム値の算出
            }
            // ズーム値を規定範囲内に収める
            if (zoomNow.X > 4000)
            {
                zoomNow.X = 4000;
            }

            if (zoomNow.Y > 4000)
            {
                zoomNow.Y = 4000;
            }

            if (zoomNow.X < 5)
            {
                zoomNow.X = 5;
            }

            if (zoomNow.Y < 5)
            {
                zoomNow.Y = 5;
            }

            Pane.Zoom = (XyBase)zoomNow.Clone();           // ズーム値の反映

            // クリックした位置を基準にしてズームするように画面をスクロールする。
            var ZoomRatioX = (double)zoomNow.X / _zoomDown.X;                       // X方向のズーム率の算出
            var ZoomRatioY = (double)zoomNow.Y / _zoomDown.Y;                       // Y方向のズーム率の算出

            var beforeDownPos = _posDown - _scrollDown - _tarPane.GetPaneRect().LT; //
            var afterDownPos  = ScreenPos.FromInt((int)(ZoomRatioX * beforeDownPos.X), (int)(ZoomRatioY * beforeDownPos.Y));

            Pane.Scroll = _scrollDown - (afterDownPos - beforeDownPos);
            Pane.Invalidate(null);
        }
示例#5
0
 /// <summary>
 /// オートスクロールする
 /// </summary>
 public void autoScroll()
 {
     try
     {
         var e = MouseState.Now;
         _timer = null;
         var pp = 0;
         if (e.Attr.IsButton)
         {
             var pr = _tarPane.GetPaneRect();
             e.Pos = ThreadSafe.PointToClient(_tarPane.Control, e.Pos);
             if (e.Pos.Y > -24 && e.Pos.Y < pr.Height + 24)
             {
                 if (e.Pos.X < 16)
                 {
                     pp = 20;
                 }
                 if (e.Pos.X > pr.Width - 32)
                 {
                     pp = -20;
                 }
             }
         }
         if (pp != 0)
         {
             Pane.Scroll = ScreenPos.FromInt(Pane.Scroll.X + pp, Pane.Scroll.Y);
             Pane.Invalidate(null);
             _timer = Timer.AddTrigger(100, new GuiTimer.Proc0(autoScroll));
         }
         else
         {
             _timer = null;
         }
     }
     catch (Exception)
     {
     }
 }
示例#6
0
        /// <summary>
        /// マウスMoveイベント
        /// </summary>
        /// <param name="e"></param>
        public virtual void OnMouseMove(MouseState e)
        {
            if (_posDown == null || _zoomDown == null || _scrollDown == null || e.Pane == null)
            {
                return;
            }

            if (e.Attr.Equals(_trigger))
            {
                // 画面の拡大/縮小
                ScreenPos movePos = e.Pos - _posDown;          // カーソルの移動量の計算
                ScreenPos pdBak   = (ScreenPos)_posDown.Clone();
                if (_isCenterLock)
                {
                    _posDown.X = e.Pane.GetPaneRect().LT.X + (e.Pane.GetPaneRect().RB.X - e.Pane.GetPaneRect().LT.X) / 2;
                    _posDown.Y = e.Pane.GetPaneRect().LT.Y + (e.Pane.GetPaneRect().RB.Y - e.Pane.GetPaneRect().LT.Y) / 2;
                }

                XyBase zoomNow = _zoomDown + movePos * 3;      // ズーム値の算出  速度変更(高解像度に伴い) 2016.11.15 Tono 2→3

                // ズーム値を規定範囲内に収める
                if (zoomNow.X > 4000)
                {
                    zoomNow.X = 4000;
                }

                if (zoomNow.Y > 4000)
                {
                    zoomNow.Y = 4000;
                }

                if (zoomNow.X < 5)
                {
                    zoomNow.X = 5;
                }

                if (zoomNow.Y < 5)
                {
                    zoomNow.Y = 5;
                }

                if (_isSameXY)
                {
                    zoomNow.Y = zoomNow.X;
                }

                Pane.Zoom = (XyBase)zoomNow.Clone();           // ズーム値の反映

                // クリックした位置を基準にしてズームするように画面をスクロールする。
                double ZoomRatioX = (double)zoomNow.X / _zoomDown.X;                        // X方向のズーム率の算出
                double ZoomRatioY = (double)zoomNow.Y / _zoomDown.Y;                        // Y方向のズーム率の算出

                ScreenPos beforeDownPos = _posDown - _scrollDown - e.Pane.GetPaneRect().LT; //
                ScreenPos afterDownPos  = ScreenPos.FromInt((int)(ZoomRatioX * beforeDownPos.X), (int)(ZoomRatioY * beforeDownPos.Y));

                if (_noscrollmove.value == false)
                {
                    Pane.Scroll = _scrollDown - (afterDownPos - beforeDownPos);
                }
                else
                {
                    _noscrollmove.value = false;
                }
                Pane.Invalidate(null);
                _posDown = pdBak;
            }
            else
            {
                OnMouseUp(e);
            }
        }