Changed DrawingContext::draw_surface_part() to handle srcrect/dstrect, instead of...
[supertux.git] / src / video / surface.cpp
index 6df0cf1..790aa3f 100644 (file)
@@ -38,12 +38,11 @@ Surface::create(const std::string& file, const Rect& rect)
 Surface::Surface(const std::string& file) :
   texture(texture_manager->get(file)),
   surface_data(),
-  rect(0, 0, 
+  rect(0, 0,
       Size(texture->get_image_width(),
            texture->get_image_height())),
   flipx(false)
 {
-  texture->ref();
   surface_data = VideoSystem::new_surface_data(*this);
 }
 
@@ -53,7 +52,6 @@ Surface::Surface(const std::string& file, const Rect& rect_) :
   rect(0, 0, Size(rect_.get_width(), rect_.get_height())),
   flipx(false)
 {
-  texture->ref();
   surface_data = VideoSystem::new_surface_data(*this);
 }
 
@@ -63,24 +61,19 @@ Surface::Surface(const Surface& rhs) :
   rect(rhs.rect),
   flipx(false)
 {
-  texture->ref();
   surface_data = VideoSystem::new_surface_data(*this);
 }
 
-const Surface& 
-Surface::operator=(const Surface& rhs)
+Surface::~Surface()
 {
-  rhs.texture->ref();
-  texture->unref();
-  texture = rhs.texture;
-  rect = rhs.rect;
-  return *this;
+  VideoSystem::free_surface_data(surface_data);
 }
 
-Surface::~Surface()
+SurfacePtr
+Surface::clone() const
 {
-  VideoSystem::free_surface_data(surface_data);
-  texture->unref();
+  SurfacePtr surface(new Surface(*this));
+  return surface;
 }
 
 /** flip the surface horizontally */
@@ -94,13 +87,13 @@ bool Surface::get_flipx() const
   return flipx;
 }
 
-Texture
+TexturePtr
 Surface::get_texture() const
 {
   return texture;
 }
 
-SurfaceData* 
+SurfaceData*
 Surface::get_surface_data() const
 {
   return surface_data;
@@ -118,13 +111,13 @@ Surface::get_y() const
   return rect.top;
 }
 
-int 
+int
 Surface::get_width() const
 {
   return rect.get_width();
 }
 
-int 
+int
 Surface::get_height() const
 {
   return rect.get_height();
@@ -133,13 +126,13 @@ Surface::get_height() const
 Vector
 Surface::get_position() const
 {
-  return Vector(get_x(), get_y()); 
+  return Vector(get_x(), get_y());
 }
 
 Vector
 Surface::get_size() const
 {
-  return Vector(get_width(), get_height()); 
+  return Vector(get_width(), get_height());
 }
 
 /* EOF */