123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- using System.Drawing;
- using System.Windows.Forms;
- namespace PaintDotNet.Measurement.Tools
- {
- /// <summary>
- /// Æ½ÒÆ¹¤¾ß£¨ÊÖÐÍ£©
- /// </summary>
- public class PanTool : Tool
- {
- private bool tracking = false;
- private Point lastMouseXY;
- private Cursor cursorMouseDown;
- private Cursor cursorMouseUp;
- private Cursor cursorMouseInvalid;
- private int ignoreMouseMove = 0;
- private bool CanPan()
- {
- if (DocumentWorkspace.GetVisibleDocumentRectangleF().Size == Document.Size)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- protected override void OnMouseDown(MouseEventArgs e)
- {
- base.OnMouseDown(e);
- lastMouseXY = new Point(e.X, e.Y);
- tracking = true;
- if (CanPan())
- {
- Cursor = cursorMouseDown;
- }
- else
- {
- Cursor = cursorMouseInvalid;
- }
- }
- protected override void OnMouseUp(MouseEventArgs e)
- {
- base.OnMouseUp(e);
- if (CanPan())
- {
- Cursor = cursorMouseUp;
- }
- else
- {
- Cursor = cursorMouseInvalid;
- }
- tracking = false;
- }
- protected override void OnMouseMove(MouseEventArgs e)
- {
- base.OnMouseMove(e);
- if (this.ignoreMouseMove > 0)
- {
- --this.ignoreMouseMove;
- }
- else if (tracking)
- {
- Point mouseXY = new Point(e.X, e.Y);
- Size delta = new Size(mouseXY.X - lastMouseXY.X, mouseXY.Y - lastMouseXY.Y);
- if (delta.Width != 0 || delta.Height != 0)
- {
- PointF scrollPos = DocumentWorkspace.GetDocumentScrollPositionF();
- PointF newScrollPos = new PointF(scrollPos.X - delta.Width, scrollPos.Y - delta.Height);
- ++this.ignoreMouseMove; // setting DocumentScrollPosition incurs a MouseMove event
- DocumentWorkspace.SetDocumentScrollPositionF(newScrollPos);
- lastMouseXY = mouseXY;
- lastMouseXY.X -= delta.Width;
- lastMouseXY.Y -= delta.Height;
- }
- }
- else
- {
- if (CanPan())
- {
- Cursor = cursorMouseUp;
- }
- else
- {
- Cursor = cursorMouseInvalid;
- }
- }
- }
- protected override void OnActivate()
- {
- // cursor-action assignments
- this.cursorMouseDown = new Cursor(PdnResources.GetResourceStream("Cursors.PanToolCursorMouseDown.cur"));
- this.cursorMouseUp = new Cursor(PdnResources.GetResourceStream("Cursors.PanToolCursor.cur"));
- this.cursorMouseInvalid = new Cursor(PdnResources.GetResourceStream("Cursors.PanToolCursorInvalid.cur"));
- this.Cursor = cursorMouseUp;
- base.OnActivate();
- }
- protected override void OnDeactivate()
- {
- if (cursorMouseDown != null)
- {
- cursorMouseDown.Dispose();
- cursorMouseDown = null;
- }
- if (cursorMouseUp != null)
- {
- cursorMouseUp.Dispose();
- cursorMouseUp = null;
- }
- if (cursorMouseInvalid != null)
- {
- cursorMouseInvalid.Dispose();
- cursorMouseInvalid = null;
- }
- base.OnDeactivate();
- }
- public PanTool(IDocumentWorkspace documentWorkspace)
- : base(documentWorkspace,
- PdnResources.GetImageResource("Icons.PanToolIcon.png"),
- PdnResources.GetString("PanTool.Name"),
- PdnResources.GetString("PanTool.HelpText"),
- 'h',
- false,
- ToolBarConfigItems.None)
- {
- autoScroll = false;
- tracking = false;
- }
- }
- }
|