#pragma once #include namespace mt { class Screen; class Window; } class IPlatformSurface { public: virtual ~IPlatformSurface() = default; virtual void beforePaint(mt::Screen* screen) = 0; virtual void afterPaint(mt::Screen* screen) = 0; }; class IPlatformWindow : public IPlatformSurface { public: IPlatformWindow(mt::Window* window) : mWindow(window) { } virtual ~IPlatformWindow() = default; virtual void show() = 0; virtual void map() = 0; virtual void clear() = 0; virtual void onResize(unsigned width, unsigned height) = 0; protected: mt::Window* mWindow{nullptr}; }; using IPlatformWindowPtr = std::unique_ptr;