MyResizer.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Runtime.InteropServices;
  4. using System.Threading;
  5. using System.Windows;
  6. using System.Windows.Input;
  7. using System.Windows.Interop;
  8. using System.Windows.Media;
  9. using System.Windows.Threading;
  10. using Microsoft.VisualBasic;
  11. namespace PCL
  12. {
  13. // Token: 0x020001D6 RID: 470
  14. public class MyResizer
  15. {
  16. // Token: 0x06001601 RID: 5633 RVA: 0x00091480 File Offset: 0x0008F680
  17. public MyResizer(Window target)
  18. {
  19. this.orderComposer = null;
  20. this.m_ProducerComposer = false;
  21. this.schemaComposer = false;
  22. this.descriptorComposer = false;
  23. this._PublisherComposer = false;
  24. this._DefinitionComposer = new Dictionary<UIElement, short>();
  25. this._StrategyComposer = new Dictionary<UIElement, short>();
  26. this.procComposer = new Dictionary<UIElement, short>();
  27. this.parserIterator = new Dictionary<UIElement, short>();
  28. this._BroadcasterIterator = default(MyResizer.PointAPI);
  29. this.fieldIterator = default(Size);
  30. this.m_ReaderIterator = default(MyResizer.POINT);
  31. this.orderComposer = target;
  32. if (Information.IsNothing(target))
  33. {
  34. throw new Exception("Invalid Window handle");
  35. }
  36. target.SourceInitialized += this.MyMacClass_SourceInitialized;
  37. }
  38. // Token: 0x06001602 RID: 5634 RVA: 0x0000C530 File Offset: 0x0000A730
  39. private void MyMacClass_SourceInitialized(object sender, EventArgs e)
  40. {
  41. this.configIterator = (PresentationSource.FromVisual((Visual)sender) as HwndSource);
  42. this.configIterator.AddHook(new HwndSourceHook(this.WndProc));
  43. }
  44. // Token: 0x06001603 RID: 5635 RVA: 0x0000C55F File Offset: 0x0000A75F
  45. private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
  46. {
  47. if (msg == 36)
  48. {
  49. MyResizer.WmGetMinMaxInfo(hwnd, lParam);
  50. handled = true;
  51. }
  52. return (IntPtr)0;
  53. }
  54. // Token: 0x06001604 RID: 5636 RVA: 0x00091534 File Offset: 0x0008F734
  55. private static void WmGetMinMaxInfo(IntPtr hwnd, IntPtr lParam)
  56. {
  57. object obj = Marshal.PtrToStructure(lParam, typeof(MyResizer.MINMAXINFO));
  58. MyResizer.MINMAXINFO minmaxinfo = (obj != null) ? ((MyResizer.MINMAXINFO)obj) : default(MyResizer.MINMAXINFO);
  59. IntPtr intPtr = MyResizer.MonitorFromWindow(hwnd, 2);
  60. checked
  61. {
  62. if (intPtr != IntPtr.Zero)
  63. {
  64. MyResizer.MONITORINFO monitorinfo = new MyResizer.MONITORINFO();
  65. MyResizer.GetMonitorInfo(intPtr, monitorinfo);
  66. MyResizer.RECT messageMap = monitorinfo.messageMap;
  67. MyResizer.RECT proxyMap = monitorinfo._ProxyMap;
  68. minmaxinfo.m_InterceptorMap.predicateMap = Math.Abs(messageMap.m_DispatcherMap - proxyMap.m_DispatcherMap);
  69. minmaxinfo.m_InterceptorMap.m_PoolMap = Math.Abs(messageMap._ProcessMap - proxyMap._ProcessMap);
  70. minmaxinfo._PageMap.m_PoolMap = Math.Abs(messageMap.m_RecordMap - messageMap._ProcessMap);
  71. MyResizer._ClientIterator = minmaxinfo._PageMap.m_PoolMap;
  72. if (messageMap.Height == proxyMap.Height)
  73. {
  74. ref int ptr = ref minmaxinfo._PageMap.m_PoolMap;
  75. minmaxinfo._PageMap.m_PoolMap = ptr - 2;
  76. }
  77. }
  78. Marshal.StructureToPtr<MyResizer.MINMAXINFO>(minmaxinfo, lParam, true);
  79. }
  80. }
  81. // Token: 0x06001605 RID: 5637
  82. [DllImport("user32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
  83. private static extern bool GetMonitorInfo(IntPtr hMonitor, MyResizer.MONITORINFO lpmi);
  84. // Token: 0x06001606 RID: 5638
  85. [DllImport("user32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
  86. private static extern IntPtr MonitorFromWindow(IntPtr handle, int flags);
  87. // Token: 0x06001607 RID: 5639 RVA: 0x0000C578 File Offset: 0x0000A778
  88. private void connectMouseHandlers(UIElement element)
  89. {
  90. element.MouseLeftButtonDown += this.element_MouseLeftButtonDown;
  91. }
  92. // Token: 0x06001608 RID: 5640 RVA: 0x0000C58C File Offset: 0x0000A78C
  93. public void addResizerRight(UIElement element)
  94. {
  95. this.connectMouseHandlers(element);
  96. this._StrategyComposer.Add(element, 0);
  97. }
  98. // Token: 0x06001609 RID: 5641 RVA: 0x0000C5A2 File Offset: 0x0000A7A2
  99. public void addResizerLeft(UIElement element)
  100. {
  101. this.connectMouseHandlers(element);
  102. this._DefinitionComposer.Add(element, 0);
  103. }
  104. // Token: 0x0600160A RID: 5642 RVA: 0x0000C5B8 File Offset: 0x0000A7B8
  105. public void addResizerUp(UIElement element)
  106. {
  107. this.connectMouseHandlers(element);
  108. this.procComposer.Add(element, 0);
  109. }
  110. // Token: 0x0600160B RID: 5643 RVA: 0x0000C5CE File Offset: 0x0000A7CE
  111. public void addResizerDown(UIElement element)
  112. {
  113. this.connectMouseHandlers(element);
  114. this.parserIterator.Add(element, 0);
  115. }
  116. // Token: 0x0600160C RID: 5644 RVA: 0x0000C5E4 File Offset: 0x0000A7E4
  117. public void addResizerRightDown(UIElement element)
  118. {
  119. this.connectMouseHandlers(element);
  120. this._StrategyComposer.Add(element, 0);
  121. this.parserIterator.Add(element, 0);
  122. }
  123. // Token: 0x0600160D RID: 5645 RVA: 0x0000C607 File Offset: 0x0000A807
  124. public void addResizerLeftDown(UIElement element)
  125. {
  126. this.connectMouseHandlers(element);
  127. this._DefinitionComposer.Add(element, 0);
  128. this.parserIterator.Add(element, 0);
  129. }
  130. // Token: 0x0600160E RID: 5646 RVA: 0x0000C62A File Offset: 0x0000A82A
  131. public void addResizerRightUp(UIElement element)
  132. {
  133. this.connectMouseHandlers(element);
  134. this._StrategyComposer.Add(element, 0);
  135. this.procComposer.Add(element, 0);
  136. }
  137. // Token: 0x0600160F RID: 5647 RVA: 0x0000C64D File Offset: 0x0000A84D
  138. public void addResizerLeftUp(UIElement element)
  139. {
  140. this.connectMouseHandlers(element);
  141. this._DefinitionComposer.Add(element, 0);
  142. this.procComposer.Add(element, 0);
  143. }
  144. // Token: 0x06001610 RID: 5648 RVA: 0x00091640 File Offset: 0x0008F840
  145. private void element_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  146. {
  147. MyResizer.GetCursorPos(out this._BroadcasterIterator);
  148. checked
  149. {
  150. this._BroadcasterIterator.X = (int)Math.Round(ModBase.smethod_4((double)this._BroadcasterIterator.X));
  151. this._BroadcasterIterator.Y = (int)Math.Round(ModBase.smethod_4((double)this._BroadcasterIterator.Y));
  152. this.fieldIterator = new Size(this.orderComposer.Width, this.orderComposer.Height);
  153. this.m_ReaderIterator = new MyResizer.POINT((int)Math.Round(this.orderComposer.Left), (int)Math.Round(this.orderComposer.Top));
  154. UIElement key = (UIElement)sender;
  155. if (this._DefinitionComposer.ContainsKey(key))
  156. {
  157. this.schemaComposer = true;
  158. }
  159. if (this._StrategyComposer.ContainsKey(key))
  160. {
  161. this.m_ProducerComposer = true;
  162. }
  163. if (this.procComposer.ContainsKey(key))
  164. {
  165. this.descriptorComposer = true;
  166. }
  167. if (this.parserIterator.ContainsKey(key))
  168. {
  169. this._PublisherComposer = true;
  170. }
  171. ModBase.RunInNewThread(new Action(this.updateSizeLoop), "窗口大小调整检测", ThreadPriority.Normal);
  172. }
  173. }
  174. // Token: 0x06001611 RID: 5649 RVA: 0x00091760 File Offset: 0x0008F960
  175. private void updateSizeLoop()
  176. {
  177. try
  178. {
  179. while (this._PublisherComposer || this.schemaComposer || this.m_ProducerComposer || this.descriptorComposer)
  180. {
  181. this.orderComposer.Dispatcher.Invoke(new Action(this.updateSize), DispatcherPriority.Render);
  182. this.orderComposer.Dispatcher.Invoke(new Action(this.updateMouseDown), DispatcherPriority.Render);
  183. Thread.Sleep(0);
  184. }
  185. }
  186. catch (Exception ex)
  187. {
  188. }
  189. }
  190. // Token: 0x06001612 RID: 5650 RVA: 0x000917F8 File Offset: 0x0008F9F8
  191. private void updateSize()
  192. {
  193. MyResizer.PointAPI pointAPI = default(MyResizer.PointAPI);
  194. MyResizer.GetCursorPos(out pointAPI);
  195. checked
  196. {
  197. pointAPI.X = (int)Math.Round(ModBase.smethod_4((double)pointAPI.X));
  198. pointAPI.Y = (int)Math.Round(ModBase.smethod_4((double)pointAPI.Y));
  199. }
  200. try
  201. {
  202. double num = -1.0;
  203. double num2 = -1.0;
  204. double num3 = -10000.0;
  205. double num4 = -10000.0;
  206. if (this.m_ProducerComposer)
  207. {
  208. if (this.orderComposer.Width == this.orderComposer.MinWidth)
  209. {
  210. if (this._BroadcasterIterator.X < pointAPI.X)
  211. {
  212. num = this.fieldIterator.Width - (double)(checked(this._BroadcasterIterator.X - pointAPI.X));
  213. }
  214. }
  215. else if (this.fieldIterator.Width - (double)(checked(this._BroadcasterIterator.X - pointAPI.X)) >= this.orderComposer.MinWidth)
  216. {
  217. num = this.fieldIterator.Width - (double)(checked(this._BroadcasterIterator.X - pointAPI.X));
  218. }
  219. else
  220. {
  221. num = this.orderComposer.MinWidth;
  222. }
  223. }
  224. if (this._PublisherComposer)
  225. {
  226. if (this.orderComposer.Height == this.orderComposer.MinHeight)
  227. {
  228. if (this._BroadcasterIterator.Y < pointAPI.Y)
  229. {
  230. if (MyResizer._ClientIterator > 0)
  231. {
  232. num2 = ((this.fieldIterator.Height - (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y)) + this.orderComposer.Top <= (double)MyResizer._ClientIterator) ? (this.fieldIterator.Height - (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y))) : ((double)MyResizer._ClientIterator - this.orderComposer.Top));
  233. }
  234. else
  235. {
  236. num2 = this.fieldIterator.Height - (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y));
  237. }
  238. }
  239. }
  240. else if (this.fieldIterator.Height - (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y)) >= this.orderComposer.MinHeight)
  241. {
  242. if (MyResizer._ClientIterator > 0)
  243. {
  244. num2 = ((this.fieldIterator.Height - (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y)) + this.orderComposer.Top <= (double)MyResizer._ClientIterator) ? (this.fieldIterator.Height - (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y))) : ((double)MyResizer._ClientIterator - this.orderComposer.Top));
  245. }
  246. else
  247. {
  248. num2 = this.fieldIterator.Height - (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y));
  249. }
  250. }
  251. else
  252. {
  253. num2 = this.orderComposer.MinHeight;
  254. }
  255. }
  256. if (this.schemaComposer)
  257. {
  258. if (this.orderComposer.Width == this.orderComposer.MinWidth)
  259. {
  260. if (this._BroadcasterIterator.X > pointAPI.X)
  261. {
  262. num = this.fieldIterator.Width + (double)this._BroadcasterIterator.X - (double)pointAPI.X;
  263. num3 = (double)(checked(this.m_ReaderIterator.predicateMap - (this._BroadcasterIterator.X - pointAPI.X)));
  264. }
  265. else
  266. {
  267. num = this.orderComposer.MinWidth;
  268. num3 = (double)this.m_ReaderIterator.predicateMap + this.fieldIterator.Width - this.orderComposer.Width;
  269. }
  270. }
  271. else if (this.fieldIterator.Width + (double)(checked(this._BroadcasterIterator.X - pointAPI.X)) >= this.orderComposer.MinWidth)
  272. {
  273. num = this.fieldIterator.Width + (double)(checked(this._BroadcasterIterator.X - pointAPI.X));
  274. num3 = (double)(checked(this.m_ReaderIterator.predicateMap - (this._BroadcasterIterator.X - pointAPI.X)));
  275. }
  276. else
  277. {
  278. num = this.orderComposer.MinWidth;
  279. num3 = (double)this.m_ReaderIterator.predicateMap + this.fieldIterator.Width - this.orderComposer.Width;
  280. }
  281. }
  282. if (this.descriptorComposer)
  283. {
  284. if (this.orderComposer.Height == this.orderComposer.MinHeight)
  285. {
  286. if (this._BroadcasterIterator.Y > pointAPI.Y)
  287. {
  288. num2 = this.fieldIterator.Height + (double)this._BroadcasterIterator.Y - (double)pointAPI.Y;
  289. num4 = (double)(checked(this.m_ReaderIterator.m_PoolMap - (this._BroadcasterIterator.Y - pointAPI.Y)));
  290. }
  291. else
  292. {
  293. num2 = this.orderComposer.MinHeight;
  294. num4 = (double)this.m_ReaderIterator.m_PoolMap + this.fieldIterator.Height - this.orderComposer.Height;
  295. }
  296. }
  297. else if (this.fieldIterator.Height + (double)(checked(this._BroadcasterIterator.Y - pointAPI.Y)) >= this.orderComposer.MinHeight)
  298. {
  299. num2 = this.fieldIterator.Height + (double)this._BroadcasterIterator.Y - (double)pointAPI.Y;
  300. num4 = (double)(checked(this.m_ReaderIterator.m_PoolMap - (this._BroadcasterIterator.Y - pointAPI.Y)));
  301. }
  302. else
  303. {
  304. num2 = this.orderComposer.MinHeight;
  305. num4 = (double)this.m_ReaderIterator.m_PoolMap + this.fieldIterator.Height - this.orderComposer.Height;
  306. }
  307. }
  308. if (num > 10.0 && Math.Abs(num - this.orderComposer.Width) > 0.7)
  309. {
  310. this.orderComposer.Width = num;
  311. }
  312. if (num2 > 10.0 && Math.Abs(num2 - this.orderComposer.Height) > 0.7)
  313. {
  314. this.orderComposer.Height = num2;
  315. }
  316. if (num3 > -9999.0 && Math.Abs(num3 - this.orderComposer.Left) > 0.7)
  317. {
  318. this.orderComposer.Left = num3;
  319. }
  320. if (num4 > -9999.0 && Math.Abs(num4 - this.orderComposer.Top) > 0.7)
  321. {
  322. this.orderComposer.Top = num4;
  323. }
  324. }
  325. catch (Exception ex)
  326. {
  327. }
  328. }
  329. // Token: 0x06001613 RID: 5651 RVA: 0x0000C670 File Offset: 0x0000A870
  330. private void updateMouseDown()
  331. {
  332. if (Mouse.LeftButton == MouseButtonState.Released)
  333. {
  334. this.m_ProducerComposer = false;
  335. this.schemaComposer = false;
  336. this.descriptorComposer = false;
  337. this._PublisherComposer = false;
  338. }
  339. }
  340. // Token: 0x06001614 RID: 5652
  341. [DllImport("user32.dll", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)]
  342. private static extern bool GetCursorPos(out MyResizer.PointAPI lpPoint);
  343. // Token: 0x04000B25 RID: 2853
  344. private readonly Window orderComposer;
  345. // Token: 0x04000B26 RID: 2854
  346. private bool m_ProducerComposer;
  347. // Token: 0x04000B27 RID: 2855
  348. private bool schemaComposer;
  349. // Token: 0x04000B28 RID: 2856
  350. private bool descriptorComposer;
  351. // Token: 0x04000B29 RID: 2857
  352. private bool _PublisherComposer;
  353. // Token: 0x04000B2A RID: 2858
  354. private readonly Dictionary<UIElement, short> _DefinitionComposer;
  355. // Token: 0x04000B2B RID: 2859
  356. private readonly Dictionary<UIElement, short> _StrategyComposer;
  357. // Token: 0x04000B2C RID: 2860
  358. private readonly Dictionary<UIElement, short> procComposer;
  359. // Token: 0x04000B2D RID: 2861
  360. private readonly Dictionary<UIElement, short> parserIterator;
  361. // Token: 0x04000B2E RID: 2862
  362. private MyResizer.PointAPI _BroadcasterIterator;
  363. // Token: 0x04000B2F RID: 2863
  364. private Size fieldIterator;
  365. // Token: 0x04000B30 RID: 2864
  366. private MyResizer.POINT m_ReaderIterator;
  367. // Token: 0x04000B31 RID: 2865
  368. private static int _ClientIterator = -1;
  369. // Token: 0x04000B32 RID: 2866
  370. private HwndSource configIterator;
  371. // Token: 0x020001D7 RID: 471
  372. // (Invoke) Token: 0x06001618 RID: 5656
  373. private delegate void RefreshDelegate();
  374. // Token: 0x020001D8 RID: 472
  375. private struct POINT
  376. {
  377. // Token: 0x0600161A RID: 5658 RVA: 0x0000C698 File Offset: 0x0000A898
  378. public POINT(int x, int y)
  379. {
  380. this = default(MyResizer.POINT);
  381. this.predicateMap = x;
  382. this.m_PoolMap = y;
  383. }
  384. // Token: 0x04000B33 RID: 2867
  385. public int predicateMap;
  386. // Token: 0x04000B34 RID: 2868
  387. public int m_PoolMap;
  388. }
  389. // Token: 0x020001D9 RID: 473
  390. private struct MINMAXINFO
  391. {
  392. // Token: 0x04000B35 RID: 2869
  393. public MyResizer.POINT m_CustomerMap;
  394. // Token: 0x04000B36 RID: 2870
  395. public MyResizer.POINT _PageMap;
  396. // Token: 0x04000B37 RID: 2871
  397. public MyResizer.POINT m_InterceptorMap;
  398. // Token: 0x04000B38 RID: 2872
  399. public MyResizer.POINT m_ContainerMap;
  400. // Token: 0x04000B39 RID: 2873
  401. public MyResizer.POINT _ParamsMap;
  402. }
  403. // Token: 0x020001DA RID: 474
  404. private struct RECT
  405. {
  406. // Token: 0x170003C4 RID: 964
  407. // (get) Token: 0x0600161D RID: 5661 RVA: 0x0000C6C0 File Offset: 0x0000A8C0
  408. public int Width
  409. {
  410. get
  411. {
  412. return Math.Abs(checked(this.parameterMap - this.m_DispatcherMap));
  413. }
  414. }
  415. // Token: 0x170003C5 RID: 965
  416. // (get) Token: 0x0600161E RID: 5662 RVA: 0x0000C6D4 File Offset: 0x0000A8D4
  417. public int Height
  418. {
  419. get
  420. {
  421. return checked(this.m_RecordMap - this._ProcessMap);
  422. }
  423. }
  424. // Token: 0x0600161F RID: 5663 RVA: 0x0000C6E3 File Offset: 0x0000A8E3
  425. public RECT(int left, int top, int right, int bottom)
  426. {
  427. this = default(MyResizer.RECT);
  428. this.m_DispatcherMap = left;
  429. this._ProcessMap = top;
  430. this.parameterMap = right;
  431. this.m_RecordMap = bottom;
  432. }
  433. // Token: 0x06001620 RID: 5664 RVA: 0x0000C70A File Offset: 0x0000A90A
  434. public RECT(MyResizer.RECT rcSrc)
  435. {
  436. this = default(MyResizer.RECT);
  437. this.m_DispatcherMap = rcSrc.m_DispatcherMap;
  438. this._ProcessMap = rcSrc._ProcessMap;
  439. this.parameterMap = rcSrc.parameterMap;
  440. this.m_RecordMap = rcSrc.m_RecordMap;
  441. }
  442. // Token: 0x04000B3A RID: 2874
  443. public int m_DispatcherMap;
  444. // Token: 0x04000B3B RID: 2875
  445. public int _ProcessMap;
  446. // Token: 0x04000B3C RID: 2876
  447. public int parameterMap;
  448. // Token: 0x04000B3D RID: 2877
  449. public int m_RecordMap;
  450. // Token: 0x04000B3E RID: 2878
  451. public static MyResizer.RECT m_ServiceMap = default(MyResizer.RECT);
  452. }
  453. // Token: 0x020001DB RID: 475
  454. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  455. private class MONITORINFO
  456. {
  457. // Token: 0x06001621 RID: 5665 RVA: 0x0000C744 File Offset: 0x0000A944
  458. public MONITORINFO()
  459. {
  460. this._InvocationMap = Marshal.SizeOf(typeof(MyResizer.MONITORINFO));
  461. this._ProxyMap = default(MyResizer.RECT);
  462. this.messageMap = default(MyResizer.RECT);
  463. this._CreatorMap = 0;
  464. }
  465. // Token: 0x04000B3F RID: 2879
  466. public int _InvocationMap;
  467. // Token: 0x04000B40 RID: 2880
  468. public MyResizer.RECT _ProxyMap;
  469. // Token: 0x04000B41 RID: 2881
  470. public MyResizer.RECT messageMap;
  471. // Token: 0x04000B42 RID: 2882
  472. public int _CreatorMap;
  473. }
  474. // Token: 0x020001DC RID: 476
  475. private struct PointAPI
  476. {
  477. // Token: 0x04000B43 RID: 2883
  478. public int X;
  479. // Token: 0x04000B44 RID: 2884
  480. public int Y;
  481. }
  482. }
  483. }