VeldridContent.Event.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Numerics;
  6. using System.Text;
  7. using Veldrid.Common.Tools;
  8. using Veldrid.Sdl2;
  9. namespace Veldrid.Common
  10. {
  11. public partial class VeldridContent
  12. {
  13. private event EventHandler PlottableDragged;
  14. private event EventHandler PlottableDropped;
  15. private event EventHandler RenderEventHandler;
  16. private event EventHandler Resized;
  17. private event EventHandler Closing;
  18. private event EventHandler Closed;
  19. private event EventHandler FocusLost;
  20. private event EventHandler FocusGained;
  21. private event EventHandler Shown;
  22. private event EventHandler Hidden;
  23. private event EventHandler MouseEntered;
  24. private event EventHandler MouseLeave;
  25. private event EventHandler Exposed;
  26. private event EventHandler<Point> Moved;
  27. private event EventHandler<MouseWheelEventArgs> MouseWheel;
  28. private event EventHandler<MouseMoveEventArgs> MouseMove;
  29. private event EventHandler<MouseEvent> MouseDown;
  30. private event EventHandler<MouseEvent> MouseUp;
  31. private event EventHandler<KeyEvent> KeyDown;
  32. private event EventHandler<KeyEvent> KeyUp;
  33. private event EventHandler<DragDropEvent> DragDrop;
  34. private IDropRender dropRender = null;
  35. private void InitEvent()
  36. {
  37. graphicsManger.Window.Closed += Window_Closed;
  38. graphicsManger.Window.Closing += Window_Closing;
  39. graphicsManger.Window.MouseDown += Window_MouseDown;
  40. graphicsManger.Window.Shown += Window_Shown;
  41. graphicsManger.Window.KeyDown += Window_KeyDown;
  42. graphicsManger.Window.KeyUp += Window_KeyUp;
  43. graphicsManger.Window.MouseEntered += Window_MouseEntered;
  44. graphicsManger.Window.MouseMove += Window_MouseMove;
  45. graphicsManger.Window.MouseUp += Window_MouseUp;
  46. graphicsManger.Window.MouseLeave += Window_MouseLeave;
  47. graphicsManger.Window.MouseWheel += Window_MouseWheel;
  48. graphicsManger.Window.Moved += Window_Moved;
  49. graphicsManger.Window.Exposed += Window_Exposed;
  50. graphicsManger.Window.FocusGained += Window_FocusGained;
  51. graphicsManger.Window.FocusLost += Window_FocusLost;
  52. graphicsManger.Window.DragDrop += Window_DragDrop;
  53. graphicsManger.Window.Resized += Window_Resized;
  54. graphicsManger.Window.Hidden += Window_Hidden;
  55. }
  56. private void Window_Hidden()
  57. {
  58. Hidden?.Invoke(this, EventArgs.Empty);
  59. }
  60. private void Window_Resized()
  61. {
  62. sizechanged = true;
  63. Resized?.Invoke(this, EventArgs.Empty);
  64. }
  65. private void Window_DragDrop(DragDropEvent obj)
  66. {
  67. DragDrop?.Invoke(this, obj);
  68. }
  69. private void Window_FocusLost()
  70. {
  71. FocusLost?.Invoke(this, EventArgs.Empty);
  72. }
  73. private void Window_FocusGained()
  74. {
  75. FocusGained?.Invoke(this, EventArgs.Empty);
  76. }
  77. private void Window_Exposed()
  78. {
  79. Exposed?.Invoke(this, EventArgs.Empty);
  80. }
  81. private void Window_Moved(Point obj)
  82. {
  83. Moved?.Invoke(this, obj);
  84. }
  85. private void Window_MouseWheel(MouseWheelEventArgs obj)
  86. {
  87. MouseWheel?.Invoke(this, obj);
  88. }
  89. private void Window_MouseLeave()
  90. {
  91. bool result = false;
  92. if (dropRender != null)
  93. {
  94. dropRender.OnMouseLeave(ref result);
  95. dropRender.Selected = false;
  96. dropRender = null;
  97. }
  98. else
  99. {
  100. var items = Series.Cast<IRender>().Concat(Cursors).Concat(Sundries).Where(x => !x.Skip && x is IDropRender).Cast<IDropRender>().OrderByDescending(x => x.ZIndex).ToList();
  101. foreach (var item in items)
  102. {
  103. item.OnMouseLeave(ref result);
  104. }
  105. foreach (var item in items)
  106. {
  107. item.Selected = false;
  108. }
  109. }
  110. MouseLeave?.Invoke(this, EventArgs.Empty);
  111. }
  112. private void Window_MouseUp(MouseEvent obj)
  113. {
  114. bool result = false;
  115. if (dropRender != null)
  116. {
  117. dropRender.OnMouseUp(dropRender.LocalPointToVirtualPoint(obj.Position), ref result);
  118. if (result)
  119. {
  120. PlottableDropped?.Invoke(dropRender, EventArgs.Empty);
  121. }
  122. dropRender.Selected = false;
  123. dropRender = null;
  124. }
  125. else
  126. {
  127. var items = Series.Cast<IRender>().Concat(Cursors).Concat(Sundries).Where(x => !x.Skip && x is IDropRender).Cast<IDropRender>().OrderByDescending(x => x.ZIndex).ToList();
  128. foreach (var item in items)
  129. {
  130. item.OnMouseUp(item.LocalPointToVirtualPoint(obj.Position), ref result);
  131. if (result)
  132. {
  133. PlottableDropped?.Invoke(item, EventArgs.Empty);
  134. }
  135. }
  136. foreach (var item in items)
  137. {
  138. item.Selected = false;
  139. }
  140. }
  141. MouseUp?.Invoke(this, obj);
  142. }
  143. private void Window_MouseMove(MouseMoveEventArgs obj)
  144. {
  145. if (dropRender != null)
  146. {
  147. dropRender.OnDragged(dropRender.LocalPointToVirtualPoint(obj.MousePosition));
  148. lastpoint = obj.MousePosition;
  149. }
  150. else
  151. {
  152. var items = Series.Cast<IRender>().Concat(Cursors).Concat(Sundries).Where(x => !x.Skip && x is IDropRender).Cast<IDropRender>().OrderByDescending(x => x.ZIndex).ToList();
  153. bool result = false;
  154. foreach (var item in items)
  155. {
  156. item.OnMouseMove(item.LocalPointToVirtualPoint(obj.MousePosition), ref result);
  157. if (result)
  158. {
  159. break;
  160. }
  161. }
  162. if (!result)
  163. {
  164. graphicsManger.Window.Cursor = SDL_SystemCursor.Arrow;
  165. }
  166. }
  167. MouseMove?.Invoke(this, obj);
  168. }
  169. private void Window_MouseEntered()
  170. {
  171. MouseEntered?.Invoke(this, EventArgs.Empty);
  172. }
  173. private void Window_KeyUp(KeyEvent obj)
  174. {
  175. KeyUp?.Invoke(this, obj);
  176. }
  177. private void Window_KeyDown(KeyEvent obj)
  178. {
  179. KeyDown?.Invoke(this,obj);
  180. }
  181. private void Window_Shown()
  182. {
  183. Shown?.Invoke(this, EventArgs.Empty);
  184. }
  185. private void Window_MouseDown(MouseEvent obj)
  186. {
  187. if ((DateTime.Now - lastmousedowntime).TotalMilliseconds < 500)
  188. {
  189. // FPSVisibily = !FPSVisibily;
  190. }
  191. lastmousedowntime = DateTime.Now;
  192. MouseDown?.Invoke(this, obj);
  193. var items = Series.Cast<IRender>().Concat(Cursors).Concat(Sundries).Where(x => !x.Skip && x is IDropRender).Cast<IDropRender>().OrderByDescending(x => x.ZIndex).ToList();
  194. bool result = false;
  195. foreach (var item in items)
  196. {
  197. var point = item.LocalPointToVirtualPoint(obj.Position);
  198. item.OnMouseDown(point, ref result);
  199. if (result)
  200. {
  201. item.Selected = true;
  202. lastpoint = obj.Position;
  203. PlottableDragged?.Invoke(item, EventArgs.Empty);
  204. dropRender = item;
  205. break;
  206. }
  207. }
  208. }
  209. private void Window_Closing()
  210. {
  211. Closing?.Invoke(this, EventArgs.Empty);
  212. }
  213. private void Window_Closed()
  214. {
  215. Closed?.Invoke(this,EventArgs.Empty);
  216. }
  217. event EventHandler IVeldridContent.Resized
  218. {
  219. add
  220. {
  221. this.Resized+=value;
  222. }
  223. remove
  224. {
  225. this.Resized-=value;
  226. }
  227. }
  228. event EventHandler IVeldridContent.Closing
  229. {
  230. add
  231. {
  232. Closing+=value;
  233. }
  234. remove
  235. {
  236. Closing-=value;
  237. }
  238. }
  239. event EventHandler IVeldridContent.Closed
  240. {
  241. add
  242. {
  243. Closed+=value;
  244. }
  245. remove
  246. {
  247. Closed-=value;
  248. }
  249. }
  250. event EventHandler IVeldridContent.FocusLost
  251. {
  252. add
  253. {
  254. FocusLost+=value;
  255. }
  256. remove
  257. {
  258. FocusLost-=value;
  259. }
  260. }
  261. event EventHandler IVeldridContent.FocusGained
  262. {
  263. add
  264. {
  265. FocusGained+=value;
  266. }
  267. remove
  268. {
  269. FocusGained-=value;
  270. }
  271. }
  272. event EventHandler IVeldridContent.Shown
  273. {
  274. add
  275. {
  276. Shown+=value;
  277. }
  278. remove
  279. {
  280. Shown-=value;
  281. }
  282. }
  283. event EventHandler IVeldridContent.Hidden
  284. {
  285. add
  286. {
  287. Hidden+=value;
  288. }
  289. remove
  290. {
  291. Hidden-=value;
  292. }
  293. }
  294. event EventHandler IVeldridContent.MouseEntered
  295. {
  296. add
  297. {
  298. MouseEntered+=value;
  299. }
  300. remove
  301. {
  302. MouseEntered-=value;
  303. }
  304. }
  305. event EventHandler IVeldridContent.MouseLeave
  306. {
  307. add
  308. {
  309. MouseLeave += value;
  310. }
  311. remove
  312. {
  313. MouseLeave -= value;
  314. }
  315. }
  316. event EventHandler IVeldridContent.Exposed
  317. {
  318. add
  319. {
  320. Exposed+=value;
  321. }
  322. remove
  323. {
  324. Exposed-=value;
  325. }
  326. }
  327. event EventHandler<Point> IVeldridContent.Moved
  328. {
  329. add
  330. {
  331. Moved+=value;
  332. }
  333. remove
  334. {
  335. Moved-=value;
  336. }
  337. }
  338. event EventHandler<MouseWheelEventArgs> IVeldridContent.MouseWheel
  339. {
  340. add
  341. {
  342. MouseWheel+=value;
  343. }
  344. remove
  345. {
  346. MouseWheel-=value;
  347. }
  348. }
  349. event EventHandler<MouseMoveEventArgs> IVeldridContent.MouseMove
  350. {
  351. add
  352. {
  353. MouseMove+=value;
  354. }
  355. remove
  356. {
  357. MouseMove-=value;
  358. }
  359. }
  360. event EventHandler<MouseEvent> IVeldridContent.MouseDown
  361. {
  362. add
  363. {
  364. MouseDown+=value;
  365. }
  366. remove
  367. {
  368. MouseDown-=value;
  369. }
  370. }
  371. event EventHandler<MouseEvent> IVeldridContent.MouseUp
  372. {
  373. add
  374. {
  375. MouseUp+=value;
  376. }
  377. remove
  378. {
  379. MouseUp-=value;
  380. }
  381. }
  382. event EventHandler<KeyEvent> IVeldridContent.KeyDown
  383. {
  384. add
  385. {
  386. KeyDown+=value;
  387. }
  388. remove
  389. {
  390. KeyDown-=value;
  391. }
  392. }
  393. event EventHandler<KeyEvent> IVeldridContent.KeyUp
  394. {
  395. add
  396. {
  397. KeyUp+=value;
  398. }
  399. remove
  400. {
  401. KeyUp-=value;
  402. }
  403. }
  404. event EventHandler<DragDropEvent> IVeldridContent.DragDrop
  405. {
  406. add => DragDrop += value;
  407. remove => DragDrop -= value;
  408. }
  409. event EventHandler IVeldridContent.PlottableDragged
  410. {
  411. add => PlottableDragged += value;
  412. remove => PlottableDragged -= value;
  413. }
  414. event EventHandler IVeldridContent.PlottableDropped
  415. {
  416. add => PlottableDropped += value;
  417. remove => PlottableDropped -= value;
  418. }
  419. event EventHandler IVeldridContent.RenderEventHandler
  420. {
  421. add => RenderEventHandler += value;
  422. remove => RenderEventHandler -= value;
  423. }
  424. Vector2 lastpoint;
  425. private DateTime lastmousedowntime;
  426. public void OnMouseDown(MouseEvent mouseEvent) => MouseDown?.Invoke(this, mouseEvent);
  427. public void OnMouseMove(MouseMoveEventArgs mouseMove)=>MouseMove?.Invoke(this, mouseMove);
  428. public void OnMouseUp(MouseEvent mouseEvent)=>MouseUp?.Invoke(this, mouseEvent);
  429. public void OnMouseWheel(MouseWheelEventArgs mouseWheel)=>MouseWheel?.Invoke(this, mouseWheel);
  430. }
  431. }