paneimage.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. #include "pch.h"
  2. /////////////////////////////////////////////////////////////////////////////
  3. //
  4. // PaneImage
  5. //
  6. /////////////////////////////////////////////////////////////////////////////
  7. class PaneImage : public Image {
  8. private:
  9. /////////////////////////////////////////////////////////////////////////////
  10. //
  11. // Types
  12. //
  13. /////////////////////////////////////////////////////////////////////////////
  14. class ImageTopPaneSiteImpl : public TopPaneSite {
  15. private:
  16. PaneImage* m_pimage;
  17. public:
  18. ImageTopPaneSiteImpl(PaneImage* pimage) :
  19. m_pimage(pimage)
  20. {
  21. }
  22. Point TransformLocalToImage(const Point& point)
  23. {
  24. return m_pimage->TransformLocalToImage(point);
  25. }
  26. void SurfaceChanged()
  27. {
  28. m_pimage->PaneChanged();
  29. }
  30. void SizeChanged()
  31. {
  32. m_pimage->PaneChanged();
  33. }
  34. };
  35. /////////////////////////////////////////////////////////////////////////////
  36. //
  37. // Members
  38. //
  39. /////////////////////////////////////////////////////////////////////////////
  40. TRef<TopPane> m_ptopPane;
  41. Point m_pointOrigin;
  42. public:
  43. /////////////////////////////////////////////////////////////////////////////
  44. //
  45. // Constructor
  46. //
  47. /////////////////////////////////////////////////////////////////////////////
  48. PaneImage(Engine* pengine, SurfaceType stype, bool bColorKey, Pane* ppane)
  49. {
  50. m_ptopPane =
  51. new TopPane(
  52. pengine,
  53. stype,
  54. bColorKey,
  55. new ImageTopPaneSiteImpl(this),
  56. ppane
  57. );
  58. }
  59. /////////////////////////////////////////////////////////////////////////////
  60. //
  61. // Implementation methods
  62. //
  63. /////////////////////////////////////////////////////////////////////////////
  64. void PaneChanged()
  65. {
  66. Changed();
  67. }
  68. /////////////////////////////////////////////////////////////////////////////
  69. //
  70. // Image methods
  71. //
  72. /////////////////////////////////////////////////////////////////////////////
  73. void PaneImage::CalcBounds()
  74. {
  75. m_bounds.SetRect(
  76. Rect(
  77. Point(0, 0),
  78. Point::Cast(m_ptopPane->GetSize())
  79. )
  80. );
  81. }
  82. void PaneImage::Render(Context* pcontext)
  83. {
  84. ZEnter("PaneImage::Render()");
  85. pcontext->TransformLocalToImage(Vector(0, 0, 0), m_pointOrigin);
  86. pcontext->DrawImage(m_ptopPane->GetSurface());
  87. ZExit("PaneImage::Render()");
  88. }
  89. TRef<Surface> GetSurface()
  90. {
  91. return m_ptopPane->GetSurface();
  92. }
  93. /////////////////////////////////////////////////////////////////////////////
  94. //
  95. // Value methods
  96. //
  97. /////////////////////////////////////////////////////////////////////////////
  98. void PaneImage::Evaluate()
  99. {
  100. m_ptopPane->Evaluate();
  101. Image::Evaluate();
  102. }
  103. ZString GetFunctionName()
  104. {
  105. return "PaneImage";
  106. }
  107. Point TransformLocalToImage(const Point& point)
  108. {
  109. return m_pointOrigin + point;
  110. }
  111. /////////////////////////////////////////////////////////////////////////////
  112. //
  113. // IMouseInput methods
  114. //
  115. /////////////////////////////////////////////////////////////////////////////
  116. void PaneImage::RemoveCapture()
  117. {
  118. m_ptopPane->RemoveCapture();
  119. }
  120. MouseResult PaneImage::HitTest(IInputProvider* pprovider, const Point& point, bool bCaptured)
  121. {
  122. return m_ptopPane->HitTest(pprovider, point, bCaptured);
  123. }
  124. void PaneImage::MouseMove(IInputProvider* pprovider, const Point& point, bool bCaptured, bool bInside)
  125. {
  126. m_ptopPane->MouseMove(pprovider, point, bCaptured, bInside);
  127. }
  128. void PaneImage::MouseEnter(IInputProvider* pprovider, const Point& point)
  129. {
  130. m_ptopPane->MouseEnter(pprovider, point);
  131. }
  132. void PaneImage::MouseLeave(IInputProvider* pprovider)
  133. {
  134. m_ptopPane->MouseLeave(pprovider);
  135. }
  136. MouseResult PaneImage::Button(IInputProvider* pprovider, const Point& point, int button, bool bCaptured, bool bInside, bool bDown)
  137. {
  138. return m_ptopPane->Button(pprovider, point, button, bCaptured, bInside, bDown);
  139. }
  140. };
  141. /////////////////////////////////////////////////////////////////////////////
  142. //
  143. // Constructor
  144. //
  145. /////////////////////////////////////////////////////////////////////////////
  146. TRef<Image> CreatePaneImage(Engine* pengine, SurfaceType stype, bool bColorKey, Pane* ppane)
  147. {
  148. return new PaneImage(pengine, stype, bColorKey, ppane);
  149. }