| #ifndef SURFACE_H |
| #define SURFACE_H |
| |
| #include <memory> |
| |
| class SurfaceImpl; |
| |
| // This class implements a Cairo surface (buffer of pixel data for graphics) |
| // which can be initialized from a png file, and then the surface (bitmap) |
| // can be drawn anywhere on the screen and in many places on the screen |
| // if desired. Surfaces are created by the constructor from a filePath. |
| // The std::shared_ptr reference counts how many copies of a surface have been |
| // made through assignment and copy construction, and deallocates the cairo |
| // data representing the surface only when the last copy is destroyed. |
| |
| class Surface { |
| public: |
| Surface(); |
| Surface(const char* filePath); |
| ~Surface(); |
| Surface& operator=(Surface rhs); // assignment operator |
| Surface(const Surface& surface); |
| |
| void setSurface(const char* filePath); |
| |
| private: |
| //Requires access to the underlying cairo surface object |
| friend void draw_surface(const Surface& surface, float x, float y); |
| |
| friend void swap(Surface& lhs, Surface& rhs); |
| |
| |
| //We use the PIMPL idiom to avoid the main graphics.h |
| //interface becoming dependant on cario headers, which |
| //may not be availabe if graphics is disabled |
| std::unique_ptr<SurfaceImpl> impl_; |
| }; |
| |
| #endif |