MirImageControl.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. using Client.MirGraphics;
  2. namespace Client.MirControls
  3. {
  4. public class MirImageControl : MirControl
  5. {
  6. public override Point DisplayLocation { get { return UseOffSet ? base.DisplayLocation.Add(Library.GetOffSet(Index)) : base.DisplayLocation; } }
  7. public Point DisplayLocationWithoutOffSet { get { return base.DisplayLocation; } }
  8. #region Auto Size
  9. private bool _autoSize;
  10. public bool AutoSize
  11. {
  12. get { return _autoSize; }
  13. set
  14. {
  15. if (_autoSize == value)
  16. return;
  17. _autoSize = value;
  18. OnAutoSizeChanged(EventArgs.Empty);
  19. }
  20. }
  21. public event EventHandler AutoSizeChanged;
  22. private void OnAutoSizeChanged(EventArgs e)
  23. {
  24. TextureValid = false;
  25. if (AutoSizeChanged != null)
  26. AutoSizeChanged.Invoke(this, e);
  27. }
  28. #endregion
  29. #region DrawImage
  30. private bool _drawImage;
  31. public bool DrawImage
  32. {
  33. get { return _drawImage; }
  34. set
  35. {
  36. if (_drawImage == value)
  37. return;
  38. _drawImage = value;
  39. OnDrawImageChanged();
  40. }
  41. }
  42. public event EventHandler DrawImageChanged;
  43. private void OnDrawImageChanged()
  44. {
  45. Redraw();
  46. if (DrawImageChanged != null)
  47. DrawImageChanged.Invoke(this, EventArgs.Empty);
  48. }
  49. #endregion
  50. #region Index
  51. private int _index;
  52. public virtual int Index
  53. {
  54. get { return _index; }
  55. set
  56. {
  57. if (_index == value)
  58. return;
  59. _index = value;
  60. OnIndexChanged();
  61. }
  62. }
  63. public event EventHandler IndexChanged;
  64. protected void OnIndexChanged()
  65. {
  66. OnSizeChanged();
  67. if (IndexChanged != null)
  68. IndexChanged.Invoke(this, EventArgs.Empty);
  69. }
  70. #endregion
  71. #region Library
  72. private MLibrary _library;
  73. public MLibrary Library
  74. {
  75. get { return _library; }
  76. set
  77. {
  78. if (_library == value)
  79. return;
  80. _library = value;
  81. OnLibraryChanged();
  82. }
  83. }
  84. public event EventHandler LibraryChanged;
  85. private void OnLibraryChanged()
  86. {
  87. OnSizeChanged();
  88. if (LibraryChanged != null)
  89. LibraryChanged.Invoke(this, EventArgs.Empty);
  90. }
  91. #endregion
  92. #region PixelDetect
  93. private bool _pixelDetect;
  94. protected bool PixelDetect
  95. {
  96. set
  97. {
  98. if (_pixelDetect == value)
  99. return;
  100. _pixelDetect = value;
  101. OnPixelDetectChanged();
  102. }
  103. }
  104. public event EventHandler PixelDetectChanged;
  105. private void OnPixelDetectChanged()
  106. {
  107. Redraw();
  108. if (PixelDetectChanged != null)
  109. PixelDetectChanged.Invoke(this, EventArgs.Empty);
  110. }
  111. #endregion
  112. #region UseOffset
  113. private bool _useOffSet;
  114. public bool UseOffSet
  115. {
  116. protected get { return _useOffSet; }
  117. set
  118. {
  119. if (_useOffSet == value)
  120. return;
  121. _useOffSet = value;
  122. OnUseOffSetChanged();
  123. }
  124. }
  125. public event EventHandler UseOffSetChanged;
  126. private void OnUseOffSetChanged()
  127. {
  128. OnLocationChanged();
  129. if (UseOffSetChanged != null)
  130. UseOffSetChanged.Invoke(this, EventArgs.Empty);
  131. }
  132. #endregion
  133. #region Size
  134. public override Size Size
  135. {
  136. set { base.Size = value; }
  137. get
  138. {
  139. if (AutoSize && Library != null && Index >= 0)
  140. return Library.GetTrueSize(Index);
  141. return base.Size;
  142. }
  143. }
  144. public override Size TrueSize
  145. {
  146. get
  147. {
  148. if (Library != null && Index >= 0)
  149. return Library.GetTrueSize(Index);
  150. return base.TrueSize;
  151. }
  152. }
  153. #endregion
  154. public MirImageControl()
  155. {
  156. _drawImage = true;
  157. _index = -1;
  158. ForeColour = Color.White;
  159. _autoSize = true;
  160. }
  161. protected internal override void DrawControl()
  162. {
  163. base.DrawControl();
  164. if (DrawImage && Library != null)
  165. {
  166. bool oldGray = DXManager.GrayScale;
  167. if (GrayScale)
  168. {
  169. DXManager.SetGrayscale(true);
  170. }
  171. if (Blending)
  172. Library.DrawBlend(Index, DisplayLocation, ForeColour, false, BlendingRate);
  173. else
  174. Library.Draw(Index, DisplayLocation, ForeColour, false, Opacity);
  175. if (GrayScale) DXManager.SetGrayscale(oldGray);
  176. }
  177. }
  178. public override bool IsMouseOver(Point p)
  179. {
  180. return base.IsMouseOver(p) && (!_pixelDetect || Library.VisiblePixel(Index, p.Subtract(DisplayLocation),true) || Moving);
  181. }
  182. #region Disposable
  183. protected override void Dispose(bool disposing)
  184. {
  185. base.Dispose(disposing);
  186. if (!disposing) return;
  187. DrawImageChanged = null;
  188. _drawImage = false;
  189. IndexChanged = null;
  190. _index = 0;
  191. LibraryChanged = null;
  192. Library = null;
  193. PixelDetectChanged = null;
  194. _pixelDetect = false;
  195. UseOffSetChanged = null;
  196. _useOffSet = false;
  197. }
  198. #endregion
  199. }
  200. }