#include "..\e2dobject.h" #include "..\e2dmodule.h" e2d::Sprite::Sprite() : image_(nullptr) { } e2d::Sprite::Sprite(Image * image) : image_(nullptr) { Open(image); } e2d::Sprite::Sprite(const Resource& res) : image_(nullptr) { Open(res); } e2d::Sprite::Sprite(const Resource& res, const Rect& crop_rect) : image_(nullptr) { Open(res); Crop(crop_rect); } e2d::Sprite::Sprite(const String & file_name) : image_(nullptr) { Open(file_name); } e2d::Sprite::Sprite(const String & file_name, const Rect & crop_rect) : image_(nullptr) { Open(file_name); Crop(crop_rect); } e2d::Sprite::~Sprite() { SafeRelease(image_); } bool e2d::Sprite::Open(Image * image) { if (image) { if (image_) { image_->Release(); } image_ = image; image_->Retain(); Node::SetSize(image_->GetWidth(), image_->GetHeight()); return true; } return false; } bool e2d::Sprite::Open(const Resource& res) { if (!image_) { image_ = new Image(); image_->Retain(); } if (image_->Open(res)) { Node::SetSize(image_->GetWidth(), image_->GetHeight()); return true; } return false; } bool e2d::Sprite::Open(const String & file_name) { if (!image_) { image_ = new Image(); image_->Retain(); } if (image_->Open(file_name)) { Node::SetSize(image_->GetWidth(), image_->GetHeight()); return true; } return false; } void e2d::Sprite::Crop(const Rect& crop_rect) { image_->Crop(crop_rect); Node::SetSize( std::min(std::max(crop_rect.size.width, 0.f), image_->GetSourceWidth() - image_->GetCropX()), std::min(std::max(crop_rect.size.height, 0.f), image_->GetSourceHeight() - image_->GetCropY()) ); } e2d::Image * e2d::Sprite::GetImage() const { return image_; } void e2d::Sprite::Draw() const { if (image_ && image_->GetBitmap()) { auto crop_pos = image_->GetCropPos(); Device::GetGraphics()->GetRenderTarget()->DrawBitmap( image_->GetBitmap(), D2D1::RectF(0, 0, transform_.size.width, transform_.size.height), display_opacity_, D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, D2D1::RectF( crop_pos.x, crop_pos.y, crop_pos.y + transform_.size.width, crop_pos.y + transform_.size.height ) ); } }