#include "pch.h" ///////////////////////////////////////////////////////////////////////////// // // PaneImage // ///////////////////////////////////////////////////////////////////////////// class PaneImage : public Image { private: ///////////////////////////////////////////////////////////////////////////// // // Types // ///////////////////////////////////////////////////////////////////////////// class ImageTopPaneSiteImpl : public TopPaneSite { private: PaneImage* m_pimage; public: ImageTopPaneSiteImpl(PaneImage* pimage) : m_pimage(pimage) { } Point TransformLocalToImage(const Point& point) { return m_pimage->TransformLocalToImage(point); } void SurfaceChanged() { m_pimage->PaneChanged(); } void SizeChanged() { m_pimage->PaneChanged(); } }; ///////////////////////////////////////////////////////////////////////////// // // Members // ///////////////////////////////////////////////////////////////////////////// TRef m_ptopPane; Point m_pointOrigin; public: ///////////////////////////////////////////////////////////////////////////// // // Constructor // ///////////////////////////////////////////////////////////////////////////// PaneImage(Engine* pengine, SurfaceType stype, bool bColorKey, Pane* ppane) { m_ptopPane = new TopPane( pengine, stype, bColorKey, new ImageTopPaneSiteImpl(this), ppane ); } ///////////////////////////////////////////////////////////////////////////// // // Implementation methods // ///////////////////////////////////////////////////////////////////////////// void PaneChanged() { Changed(); } ///////////////////////////////////////////////////////////////////////////// // // Image methods // ///////////////////////////////////////////////////////////////////////////// void PaneImage::CalcBounds() { m_bounds.SetRect( Rect( Point(0, 0), Point::Cast(m_ptopPane->GetSize()) ) ); } void PaneImage::Render(Context* pcontext) { ZEnter("PaneImage::Render()"); pcontext->TransformLocalToImage(Vector(0, 0, 0), m_pointOrigin); pcontext->DrawImage(m_ptopPane->GetSurface()); ZExit("PaneImage::Render()"); } TRef GetSurface() { return m_ptopPane->GetSurface(); } ///////////////////////////////////////////////////////////////////////////// // // Value methods // ///////////////////////////////////////////////////////////////////////////// void PaneImage::Evaluate() { m_ptopPane->Evaluate(); Image::Evaluate(); } ZString GetFunctionName() { return "PaneImage"; } Point TransformLocalToImage(const Point& point) { return m_pointOrigin + point; } ///////////////////////////////////////////////////////////////////////////// // // IMouseInput methods // ///////////////////////////////////////////////////////////////////////////// void PaneImage::RemoveCapture() { m_ptopPane->RemoveCapture(); } MouseResult PaneImage::HitTest(IInputProvider* pprovider, const Point& point, bool bCaptured) { return m_ptopPane->HitTest(pprovider, point, bCaptured); } void PaneImage::MouseMove(IInputProvider* pprovider, const Point& point, bool bCaptured, bool bInside) { m_ptopPane->MouseMove(pprovider, point, bCaptured, bInside); } void PaneImage::MouseEnter(IInputProvider* pprovider, const Point& point) { m_ptopPane->MouseEnter(pprovider, point); } void PaneImage::MouseLeave(IInputProvider* pprovider) { m_ptopPane->MouseLeave(pprovider); } MouseResult PaneImage::Button(IInputProvider* pprovider, const Point& point, int button, bool bCaptured, bool bInside, bool bDown) { return m_ptopPane->Button(pprovider, point, button, bCaptured, bInside, bDown); } }; ///////////////////////////////////////////////////////////////////////////// // // Constructor // ///////////////////////////////////////////////////////////////////////////// TRef CreatePaneImage(Engine* pengine, SurfaceType stype, bool bColorKey, Pane* ppane) { return new PaneImage(pengine, stype, bColorKey, ppane); }