#include "video/texture.hpp"
#include "video/video_systems.hpp"
+SurfacePtr
+Surface::create(const std::string& file)
+{
+ return SurfacePtr(new Surface(file));
+}
+
+SurfacePtr
+Surface::create(const std::string& file, const Rect& rect)
+{
+ return SurfacePtr(new Surface(file, rect));
+}
+
Surface::Surface(const std::string& file) :
texture(texture_manager->get(file)),
surface_data(),
- x(0), y(0), w(0), h(0),
+ rect(0, 0,
+ Size(texture->get_image_width(),
+ texture->get_image_height())),
flipx(false)
{
- texture->ref();
- w = texture->get_image_width();
- h = texture->get_image_height();
- surface_data = new_surface_data(*this);
+ surface_data = VideoSystem::new_surface_data(*this);
}
-Surface::Surface(const std::string& file, int x, int y, int w, int h) :
- texture(texture_manager->get(file)),
+Surface::Surface(const std::string& file, const Rect& rect_) :
+ texture(texture_manager->get(file, rect_)),
surface_data(),
- x(x), y(y), w(w), h(h),
+ rect(0, 0, Size(rect_.get_width(), rect_.get_height())),
flipx(false)
{
- texture->ref();
- surface_data = new_surface_data(*this);
+ surface_data = VideoSystem::new_surface_data(*this);
}
-Surface::Surface(const Surface& other) :
- texture(other.texture),
+Surface::Surface(const Surface& rhs) :
+ texture(rhs.texture),
surface_data(),
- x(other.x), y(other.y),
- w(other.w), h(other.h),
+ rect(rhs.rect),
flipx(false)
{
- texture->ref();
- surface_data = new_surface_data(*this);
+ surface_data = VideoSystem::new_surface_data(*this);
}
-const Surface&
-Surface::operator= (const Surface& other)
+Surface::~Surface()
{
- other.texture->ref();
- texture->unref();
- texture = other.texture;
- x = other.x;
- y = other.y;
- w = other.w;
- h = other.h;
- return *this;
+ VideoSystem::free_surface_data(surface_data);
}
-Surface::~Surface()
+SurfacePtr
+Surface::clone() const
{
- free_surface_data(surface_data);
- texture->unref();
+ SurfacePtr surface(new Surface(*this));
+ return surface;
}
/** flip the surface horizontally */
return flipx;
}
-Texture*
+TexturePtr
Surface::get_texture() const
{
return texture;
}
-void*
+SurfaceData*
Surface::get_surface_data() const
{
return surface_data;
int
Surface::get_x() const
{
- return x;
+ return rect.left;
}
int
Surface::get_y() const
{
- return y;
+ return rect.top;
}
int
Surface::get_width() const
{
- return w;
+ return rect.get_width();
}
int
Surface::get_height() const
{
- return h;
+ return rect.get_height();
}
Vector