PanTool.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using Resources;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. namespace SmartCoalApplication.Annotation.Other
  5. {
  6. /// <summary>
  7. /// 平移工具(手型)
  8. /// </summary>
  9. public class PanTool : Tool
  10. {
  11. private static Cursor cursorMouseDown = new Cursor(PdnResources.GetResourceStream("Cursors.PanToolCursorMouseDown.cur"));
  12. private static Cursor cursorMouseUp = new Cursor(PdnResources.GetResourceStream("Cursors.PanToolCursor.cur"));
  13. private static bool tracking = false;
  14. private static Point lastMouseXY;
  15. private static int ignoreMouseMove = 0;
  16. private static ISurfaceBox surfaceBox;
  17. private static bool CanPan()
  18. {
  19. if (surfaceBox.GetVisibleDocumentRectangleF().Size == surfaceBox.GetDocumentSize())
  20. {
  21. return false;
  22. }
  23. else
  24. {
  25. return true;
  26. }
  27. }
  28. public static void OnMouseDown(ISurfaceBox drawArea, MouseEventArgs e)
  29. {
  30. surfaceBox = drawArea;
  31. lastMouseXY = new Point(e.X, e.Y);
  32. tracking = true;
  33. if (CanPan())
  34. {
  35. drawArea.Cursor = cursorMouseDown;
  36. }
  37. else
  38. {
  39. drawArea.Cursor = null;
  40. }
  41. }
  42. public static void OnMouseMove(ISurfaceBox drawArea, MouseEventArgs e)
  43. {
  44. surfaceBox = drawArea;
  45. if (ignoreMouseMove > 0)
  46. {
  47. --ignoreMouseMove;
  48. }
  49. else if (tracking)
  50. {
  51. Point mouseXY = new Point(e.X, e.Y);
  52. Size delta = new Size(mouseXY.X - lastMouseXY.X, mouseXY.Y - lastMouseXY.Y);
  53. if (delta.Width != 0 || delta.Height != 0)
  54. {
  55. PointF scrollPos = drawArea.GetDocumentScrollPositionF();
  56. PointF newScrollPos = new PointF(scrollPos.X - delta.Width, scrollPos.Y - delta.Height);
  57. ++ignoreMouseMove;
  58. drawArea.SetDocumentScrollPositionF(newScrollPos);
  59. lastMouseXY = mouseXY;
  60. }
  61. }
  62. else
  63. {
  64. if (CanPan())
  65. {
  66. drawArea.Cursor = cursorMouseUp;
  67. }
  68. else
  69. {
  70. drawArea.Cursor = null;
  71. }
  72. }
  73. }
  74. public static void OnMouseUp(ISurfaceBox drawArea, MouseEventArgs e)
  75. {
  76. surfaceBox = drawArea;
  77. if (CanPan())
  78. {
  79. drawArea.Cursor = cursorMouseUp;
  80. }
  81. else
  82. {
  83. drawArea.Cursor = null;
  84. }
  85. tracking = false;
  86. }
  87. public static void OnMouseClick(ISurfaceBox drawArea, MouseEventArgs e)
  88. {
  89. }
  90. /// <summary>
  91. /// 鼠标左键双击
  92. /// </summary>
  93. /// <param name="drawArea"></param>
  94. /// <param name="e"></param>
  95. public static void OnMouseLeftDoubleClick(ISurfaceBox surfacebox, MouseEventArgs e)
  96. {
  97. }
  98. /// <summary>
  99. /// 删除按键
  100. /// </summary>
  101. /// <param name="surfacebox"></param>
  102. /// <param name="e"></param>
  103. public static void OnDelKeyDown(ISurfaceBox surfacebox, MouseEventArgs e)
  104. {
  105. }
  106. /// <summary>
  107. /// 删除划痕处理&污迹处理选择区域的痕迹
  108. /// </summary>
  109. /// <param name="surfacebox"></param>
  110. /// <param name="e"></param>
  111. public static void OnDel2KeyDown(ISurfaceBox surfacebox, MouseEventArgs e)
  112. {
  113. }
  114. /// <summary>
  115. /// 清空全部时调用该方法,将可能未绘制完的对象清空
  116. /// </summary>
  117. public static void beginWithNewObject()
  118. {
  119. }
  120. }
  121. }