parent
d3f8c7afef
commit
55f28806c9
|
|
@ -52,6 +52,17 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ActionPtr ActionManager::GetAction(String const & name)
|
||||||
|
{
|
||||||
|
if (actions_.IsEmpty())
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
for (auto action = actions_.First().Get(); action; action = action->NextItem().Get())
|
||||||
|
if (action->IsName(name))
|
||||||
|
return action;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void ActionManager::ResumeAllActions()
|
void ActionManager::ResumeAllActions()
|
||||||
{
|
{
|
||||||
if (actions_.IsEmpty())
|
if (actions_.IsEmpty())
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,11 @@ namespace easy2d
|
||||||
ActionPtr const& action
|
ActionPtr const& action
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 获取动作
|
||||||
|
ActionPtr GetAction(
|
||||||
|
String const& name
|
||||||
|
);
|
||||||
|
|
||||||
// 继续所有暂停动作
|
// 继续所有暂停动作
|
||||||
void ResumeAllActions();
|
void ResumeAllActions();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,11 +43,11 @@ namespace easy2d
|
||||||
inline Array() { size_ = capacity_ = 0; data_ = nullptr; }
|
inline Array() { size_ = capacity_ = 0; data_ = nullptr; }
|
||||||
inline Array(std::initializer_list<_Ty> const& list) { size_ = capacity_ = 0; data_ = nullptr; operator=(list); }
|
inline Array(std::initializer_list<_Ty> const& list) { size_ = capacity_ = 0; data_ = nullptr; operator=(list); }
|
||||||
inline Array(const Array<_Ty>& src) { size_ = capacity_ = 0; data_ = nullptr; operator=(src); }
|
inline Array(const Array<_Ty>& src) { size_ = capacity_ = 0; data_ = nullptr; operator=(src); }
|
||||||
inline Array(Array<_Ty>&& src) { size_ = capacity_ = 0; data_ = nullptr; operator=(src); }
|
inline Array(Array<_Ty>&& src) { size_ = capacity_ = 0; data_ = nullptr; operator=(std::forward<Array<_Ty>&&>(src)); }
|
||||||
inline ~Array() { if (data_) _destroy_all(); }
|
inline ~Array() { if (data_) _destroy_all(); }
|
||||||
|
|
||||||
inline Array<_Ty>& operator=(const Array<_Ty>& src) { if (&src == this) { return *this; } clear(); reserve(src.size_); std::uninitialized_copy(src.begin(), src.end(), begin()); size_ = src.size_; return *this; }
|
inline Array<_Ty>& operator=(const Array<_Ty>& src) { if (&src == this) { return *this; } clear(); reserve(src.size_); std::uninitialized_copy(src.begin(), src.end(), begin()); size_ = src.size_; return *this; }
|
||||||
inline Array<_Ty>& operator=(Array<_Ty>&& src) { clear(); size_ = src.size_; capacity_ = src.capacity_; data_ = src.data_; src.data_ = src.size_ = src.capacity_ = 0; return *this; }
|
inline Array<_Ty>& operator=(Array<_Ty>&& src) { clear(); size_ = src.size_; capacity_ = src.capacity_; data_ = src.data_; src.size_ = src.capacity_ = 0; src.data_ = nullptr; return *this; }
|
||||||
inline Array<_Ty>& operator=(std::initializer_list<_Ty> const& list) { clear(); reserve((int)list.size()); std::uninitialized_copy(list.begin(), list.end(), begin()); size_ = (int)list.size(); return *this; }
|
inline Array<_Ty>& operator=(std::initializer_list<_Ty> const& list) { clear(); reserve((int)list.size()); std::uninitialized_copy(list.begin(), list.end(), begin()); size_ = (int)list.size(); return *this; }
|
||||||
|
|
||||||
inline bool empty() const { return size_ == 0; }
|
inline bool empty() const { return size_ == 0; }
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.First(); listener; listener = listener->NextItem())
|
for (auto listener = listeners_.First(); listener; listener = listener->NextItem())
|
||||||
{
|
{
|
||||||
if (listener->GetName() == listener_name)
|
if (listener->IsName(listener_name))
|
||||||
{
|
{
|
||||||
listener->Start();
|
listener->Start();
|
||||||
}
|
}
|
||||||
|
|
@ -74,7 +74,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
for (auto listener = listeners_.First(); listener; listener = listener->NextItem())
|
for (auto listener = listeners_.First(); listener; listener = listener->NextItem())
|
||||||
{
|
{
|
||||||
if (listener->GetName() == listener_name)
|
if (listener->IsName(listener_name))
|
||||||
{
|
{
|
||||||
listener->Stop();
|
listener->Stop();
|
||||||
}
|
}
|
||||||
|
|
@ -88,7 +88,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
next = listener->NextItem();
|
next = listener->NextItem();
|
||||||
|
|
||||||
if (listener->GetName() == listener_name)
|
if (listener->IsName(listener_name))
|
||||||
{
|
{
|
||||||
listeners_.Remove(listener);
|
listeners_.Remove(listener);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,9 @@ namespace easy2d
|
||||||
EventListener::EventListener(EventType type, EventCallback const & callback, String const & name)
|
EventListener::EventListener(EventType type, EventCallback const & callback, String const & name)
|
||||||
: type_(type)
|
: type_(type)
|
||||||
, callback_(callback)
|
, callback_(callback)
|
||||||
, name_(name)
|
|
||||||
, running_(true)
|
, running_(true)
|
||||||
{
|
{
|
||||||
|
SetName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
EventListener::~EventListener()
|
EventListener::~EventListener()
|
||||||
|
|
@ -50,14 +50,4 @@ namespace easy2d
|
||||||
return running_;
|
return running_;
|
||||||
}
|
}
|
||||||
|
|
||||||
String const & EventListener::GetName() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EventListener::SetName(String const & name)
|
|
||||||
{
|
|
||||||
name_ = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,15 +49,10 @@ namespace easy2d
|
||||||
|
|
||||||
void Stop();
|
void Stop();
|
||||||
|
|
||||||
void SetName(String const& name);
|
|
||||||
|
|
||||||
bool IsRunning() const;
|
bool IsRunning() const;
|
||||||
|
|
||||||
String const& GetName() const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool running_;
|
bool running_;
|
||||||
String name_;
|
|
||||||
EventType type_;
|
EventType type_;
|
||||||
EventCallback callback_;
|
EventCallback callback_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ namespace easy2d
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
D2DBitmapPtr bitmap;
|
D2DBitmapPtr bitmap;
|
||||||
|
|
||||||
if (res.IsFile())
|
if (res.IsFileType())
|
||||||
{
|
{
|
||||||
if (!File(res.GetFileName()).Exists())
|
if (!File(res.GetFileName()).Exists())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ namespace easy2d
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
Transcoder transcoder;
|
Transcoder transcoder;
|
||||||
|
|
||||||
if (res.IsFile())
|
if (res.IsFileType())
|
||||||
{
|
{
|
||||||
if (!File(res.GetFileName()).Exists())
|
if (!File(res.GetFileName()).Exists())
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -364,9 +364,9 @@ namespace easy2d
|
||||||
|
|
||||||
void Node::SetName(String const& name)
|
void Node::SetName(String const& name)
|
||||||
{
|
{
|
||||||
if (name_ != name)
|
if (!IsName(name))
|
||||||
{
|
{
|
||||||
name_ = name;
|
Object::SetName(name);
|
||||||
hash_name_ = std::hash<String>{}(name);
|
hash_name_ = std::hash<String>{}(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -511,7 +511,7 @@ namespace easy2d
|
||||||
|
|
||||||
for (Node* child = children_.First().Get(); child; child = child->NextItem().Get())
|
for (Node* child = children_.First().Get(); child; child = child->NextItem().Get())
|
||||||
{
|
{
|
||||||
if (child->hash_name_ == hash_code && child->name_ == name)
|
if (child->hash_name_ == hash_code && child->IsName(name))
|
||||||
{
|
{
|
||||||
children.push_back(child);
|
children.push_back(child);
|
||||||
}
|
}
|
||||||
|
|
@ -525,7 +525,7 @@ namespace easy2d
|
||||||
|
|
||||||
for (Node* child = children_.First().Get(); child; child = child->NextItem().Get())
|
for (Node* child = children_.First().Get(); child; child = child->NextItem().Get())
|
||||||
{
|
{
|
||||||
if (child->hash_name_ == hash_code && child->name_ == name)
|
if (child->hash_name_ == hash_code && child->IsName(name))
|
||||||
{
|
{
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
@ -582,7 +582,7 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
next = child->NextItem().Get();
|
next = child->NextItem().Get();
|
||||||
|
|
||||||
if (child->hash_name_ == hash_code && child->name_ == child_name)
|
if (child->hash_name_ == hash_code && child->IsName(child_name))
|
||||||
{
|
{
|
||||||
RemoveChild(child);
|
RemoveChild(child);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,9 +61,6 @@ namespace easy2d
|
||||||
// 获取显示状态
|
// 获取显示状态
|
||||||
bool IsVisible() const { return visible_; }
|
bool IsVisible() const { return visible_; }
|
||||||
|
|
||||||
// »ñÈ¡Ãû³Æ
|
|
||||||
String const& GetName() const { return name_; }
|
|
||||||
|
|
||||||
// 获取名称的 Hash 值
|
// 获取名称的 Hash 值
|
||||||
size_t GetHashName() const { return hash_name_; }
|
size_t GetHashName() const { return hash_name_; }
|
||||||
|
|
||||||
|
|
@ -377,7 +374,6 @@ namespace easy2d
|
||||||
int z_order_;
|
int z_order_;
|
||||||
float opacity_;
|
float opacity_;
|
||||||
float display_opacity_;
|
float display_opacity_;
|
||||||
String name_;
|
|
||||||
size_t hash_name_;
|
size_t hash_name_;
|
||||||
Transform transform_;
|
Transform transform_;
|
||||||
Point anchor_;
|
Point anchor_;
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ namespace easy2d
|
||||||
Object::Object()
|
Object::Object()
|
||||||
: tracing_leak_(false)
|
: tracing_leak_(false)
|
||||||
, user_data_(nullptr)
|
, user_data_(nullptr)
|
||||||
|
, name_(nullptr)
|
||||||
{
|
{
|
||||||
#ifdef E2D_DEBUG
|
#ifdef E2D_DEBUG
|
||||||
|
|
||||||
|
|
@ -41,6 +42,9 @@ namespace easy2d
|
||||||
|
|
||||||
Object::~Object()
|
Object::~Object()
|
||||||
{
|
{
|
||||||
|
if (name_)
|
||||||
|
delete name_;
|
||||||
|
|
||||||
#ifdef E2D_DEBUG
|
#ifdef E2D_DEBUG
|
||||||
|
|
||||||
Object::__RemoveObjectFromTracingList(this);
|
Object::__RemoveObjectFromTracingList(this);
|
||||||
|
|
@ -58,6 +62,27 @@ namespace easy2d
|
||||||
user_data_ = data;
|
user_data_ = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Object::SetName(String const & name)
|
||||||
|
{
|
||||||
|
if (IsName(name))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (name.empty())
|
||||||
|
{
|
||||||
|
if (name_)
|
||||||
|
name_->clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!name_)
|
||||||
|
{
|
||||||
|
name_ = new (std::nothrow) String(name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*name_ = name;
|
||||||
|
}
|
||||||
|
|
||||||
void Object::StartTracingLeaks()
|
void Object::StartTracingLeaks()
|
||||||
{
|
{
|
||||||
tracing_leaks = true;
|
tracing_leaks = true;
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,12 @@ namespace easy2d
|
||||||
|
|
||||||
void SetUserData(void* data);
|
void SetUserData(void* data);
|
||||||
|
|
||||||
|
void SetName(String const& name);
|
||||||
|
|
||||||
|
inline String GetName() const { if (name_) return *name_; return String(); }
|
||||||
|
|
||||||
|
inline bool IsName(String const& name) const { return (name_ && (*name_ == name)); }
|
||||||
|
|
||||||
static void StartTracingLeaks();
|
static void StartTracingLeaks();
|
||||||
|
|
||||||
static void StopTracingLeaks();
|
static void StopTracingLeaks();
|
||||||
|
|
@ -50,5 +56,6 @@ namespace easy2d
|
||||||
private:
|
private:
|
||||||
bool tracing_leak_;
|
bool tracing_leak_;
|
||||||
void* user_data_;
|
void* user_data_;
|
||||||
|
String* name_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,18 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
Resource::Resource(LPCWSTR file_name)
|
Resource::Resource(LPCWSTR file_name)
|
||||||
: type_(Type::File)
|
: type_(Type::File)
|
||||||
, file_name_(file_name)
|
, file_name_(nullptr)
|
||||||
{
|
{
|
||||||
|
if (file_name)
|
||||||
|
file_name_ = new (std::nothrow) String(file_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
Resource::Resource(String const& file_name)
|
||||||
|
: type_(Type::File)
|
||||||
|
, file_name_(nullptr)
|
||||||
|
{
|
||||||
|
if (!file_name.empty())
|
||||||
|
file_name_ = new (std::nothrow) String(file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
Resource::Resource(LPCWSTR name, LPCWSTR type)
|
Resource::Resource(LPCWSTR name, LPCWSTR type)
|
||||||
|
|
@ -36,17 +46,85 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Resource::Resource(Resource const & rhs)
|
||||||
|
{
|
||||||
|
operator=(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
|
Resource::Resource(Resource && rhs)
|
||||||
|
{
|
||||||
|
operator=(std::forward<Resource&&>(rhs));
|
||||||
|
}
|
||||||
|
|
||||||
|
Resource::~Resource()
|
||||||
|
{
|
||||||
|
if (IsFileType() && file_name_)
|
||||||
|
delete file_name_;
|
||||||
|
}
|
||||||
|
|
||||||
size_t Resource::GetHashCode() const
|
size_t Resource::GetHashCode() const
|
||||||
{
|
{
|
||||||
if (type_ == Type::File)
|
if (type_ == Type::File)
|
||||||
return std::hash<LPCWSTR>{}(file_name_);
|
return std::hash<String>{}(GetFileName());
|
||||||
return std::hash<LPCWSTR>{}(bin_name_);
|
return std::hash<LPCWSTR>{}(bin_name_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Resource & Resource::operator=(Resource const & rhs)
|
||||||
|
{
|
||||||
|
if (&rhs != this)
|
||||||
|
{
|
||||||
|
if (IsFileType() && file_name_)
|
||||||
|
{
|
||||||
|
delete file_name_;
|
||||||
|
file_name_ = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
type_ = rhs.type_;
|
||||||
|
if (IsFileType())
|
||||||
|
{
|
||||||
|
if (rhs.file_name_)
|
||||||
|
{
|
||||||
|
file_name_ = new (std::nothrow) String(*rhs.file_name_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bin_name_ = rhs.bin_name_;
|
||||||
|
bin_type_ = rhs.bin_type_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Resource & Resource::operator=(Resource && rhs)
|
||||||
|
{
|
||||||
|
if (IsFileType() && file_name_)
|
||||||
|
{
|
||||||
|
delete file_name_;
|
||||||
|
file_name_ = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
type_ = rhs.type_;
|
||||||
|
if (IsFileType())
|
||||||
|
{
|
||||||
|
file_name_ = rhs.file_name_;
|
||||||
|
rhs.file_name_ = nullptr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bin_name_ = rhs.bin_name_;
|
||||||
|
bin_type_ = rhs.bin_type_;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
bool Resource::Load(LPVOID& buffer, DWORD& buffer_size) const
|
bool Resource::Load(LPVOID& buffer, DWORD& buffer_size) const
|
||||||
{
|
{
|
||||||
if (type_ != Type::Binary)
|
if (type_ != Type::Binary)
|
||||||
|
{
|
||||||
|
E2D_ERROR_LOG(L"Only binary resource can be loaded");
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
HGLOBAL res_data;
|
HGLOBAL res_data;
|
||||||
HRSRC res_info;
|
HRSRC res_info;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "helper.hpp"
|
#include "helper.hpp"
|
||||||
#include "Frames.h"
|
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
{
|
{
|
||||||
|
|
@ -34,23 +33,35 @@ namespace easy2d
|
||||||
//
|
//
|
||||||
class Resource
|
class Resource
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
enum class Type { File, Binary };
|
enum class Type { File, Binary };
|
||||||
|
|
||||||
|
public:
|
||||||
Resource(
|
Resource(
|
||||||
LPCWSTR file_name /* 文件路径 */
|
LPCWSTR file_name /* 文件路径 */
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Resource(
|
||||||
|
String const& file_name /* Îļþ·¾¶ */
|
||||||
|
);
|
||||||
|
|
||||||
Resource(
|
Resource(
|
||||||
LPCWSTR name, /* 资源名称 */
|
LPCWSTR name, /* 资源名称 */
|
||||||
LPCWSTR type /* 资源类型 */
|
LPCWSTR type /* 资源类型 */
|
||||||
);
|
);
|
||||||
|
|
||||||
inline bool IsFile() const { return type_ == Type::File; }
|
Resource(
|
||||||
|
Resource const& rhs
|
||||||
|
);
|
||||||
|
|
||||||
inline Type GetType() const { return type_; }
|
Resource(
|
||||||
|
Resource && rhs
|
||||||
|
);
|
||||||
|
|
||||||
inline LPCWSTR GetFileName() const { return file_name_; }
|
virtual ~Resource();
|
||||||
|
|
||||||
|
inline bool IsFileType() const { return type_ == Type::File; }
|
||||||
|
|
||||||
|
inline String GetFileName() const { if (file_name_) return *file_name_; return String(); }
|
||||||
|
|
||||||
bool Load(
|
bool Load(
|
||||||
LPVOID& buffer,
|
LPVOID& buffer,
|
||||||
|
|
@ -59,13 +70,17 @@ namespace easy2d
|
||||||
|
|
||||||
size_t GetHashCode() const;
|
size_t GetHashCode() const;
|
||||||
|
|
||||||
|
Resource& operator= (Resource const& rhs);
|
||||||
|
|
||||||
|
Resource& operator= (Resource && rhs);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Type type_;
|
Type type_;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
LPCWSTR file_name_;
|
String* file_name_;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct
|
struct
|
||||||
|
|
|
||||||
|
|
@ -33,9 +33,9 @@ namespace easy2d
|
||||||
, total_times_(times)
|
, total_times_(times)
|
||||||
, delay_(delay)
|
, delay_(delay)
|
||||||
, callback_(func)
|
, callback_(func)
|
||||||
, name_(name)
|
|
||||||
, delta_()
|
, delta_()
|
||||||
{
|
{
|
||||||
|
SetName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Task::Start()
|
void Task::Start()
|
||||||
|
|
@ -91,9 +91,4 @@ namespace easy2d
|
||||||
return running_;
|
return running_;
|
||||||
}
|
}
|
||||||
|
|
||||||
String const& Task::GetName() const
|
|
||||||
{
|
|
||||||
return name_;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -60,9 +60,6 @@ namespace easy2d
|
||||||
// 任务是否正在执行
|
// 任务是否正在执行
|
||||||
bool IsRunning() const;
|
bool IsRunning() const;
|
||||||
|
|
||||||
// »ñÈ¡ÈÎÎñÃû³Æ
|
|
||||||
String const& GetName() const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Update(Duration dt, bool& remove_after_update);
|
void Update(Duration dt, bool& remove_after_update);
|
||||||
|
|
||||||
|
|
@ -72,7 +69,6 @@ namespace easy2d
|
||||||
bool running_;
|
bool running_;
|
||||||
int run_times_;
|
int run_times_;
|
||||||
int total_times_;
|
int total_times_;
|
||||||
String name_;
|
|
||||||
Duration delay_;
|
Duration delay_;
|
||||||
Duration delta_;
|
Duration delta_;
|
||||||
Callback callback_;
|
Callback callback_;
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ namespace easy2d
|
||||||
|
|
||||||
for (auto task = tasks_.First().Get(); task; task = task->NextItem().Get())
|
for (auto task = tasks_.First().Get(); task; task = task->NextItem().Get())
|
||||||
{
|
{
|
||||||
if (task->GetName() == name)
|
if (task->IsName(name))
|
||||||
{
|
{
|
||||||
task->Stop();
|
task->Stop();
|
||||||
}
|
}
|
||||||
|
|
@ -73,7 +73,7 @@ namespace easy2d
|
||||||
|
|
||||||
for (auto task = tasks_.First().Get(); task; task = task->NextItem().Get())
|
for (auto task = tasks_.First().Get(); task; task = task->NextItem().Get())
|
||||||
{
|
{
|
||||||
if (task->GetName() == name)
|
if (task->IsName(name))
|
||||||
{
|
{
|
||||||
task->Start();
|
task->Start();
|
||||||
}
|
}
|
||||||
|
|
@ -89,7 +89,7 @@ namespace easy2d
|
||||||
for (auto task = tasks_.First(); task; task = next)
|
for (auto task = tasks_.First(); task; task = next)
|
||||||
{
|
{
|
||||||
next = task->NextItem();
|
next = task->NextItem();
|
||||||
if (task->GetName() == name)
|
if (task->IsName(name))
|
||||||
{
|
{
|
||||||
tasks_.Remove(task);
|
tasks_.Remove(task);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,16 +28,20 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
String Search(LPCWSTR file_name, List<String> const& paths)
|
Resource LocateRes(Resource const& res, List<String> const& paths)
|
||||||
{
|
{
|
||||||
|
if (res.IsFileType())
|
||||||
|
{
|
||||||
|
String file_name = res.GetFileName();
|
||||||
for (const auto& path : paths)
|
for (const auto& path : paths)
|
||||||
{
|
{
|
||||||
if (modules::Shlwapi::Get().PathFileExistsW((path + file_name).c_str()))
|
if (modules::Shlwapi::Get().PathFileExistsW((path + file_name).c_str()))
|
||||||
{
|
{
|
||||||
return path + file_name;
|
return Resource{ path + file_name };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return file_name;
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,15 +50,7 @@ namespace easy2d
|
||||||
ImagePtr ptr = new (std::nothrow) Image;
|
ImagePtr ptr = new (std::nothrow) Image;
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
if (image.IsFile())
|
if (ptr->Load(LocateRes(image, search_paths_)))
|
||||||
{
|
|
||||||
String path = Search(image.GetFileName(), search_paths_);
|
|
||||||
ptr->Load(path.c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ptr->Load(image);
|
|
||||||
|
|
||||||
if (ptr->IsValid())
|
|
||||||
{
|
{
|
||||||
res_.insert(std::make_pair(id, ptr));
|
res_.insert(std::make_pair(id, ptr));
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -78,38 +74,28 @@ namespace easy2d
|
||||||
if (images.empty())
|
if (images.empty())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int total = 0;
|
|
||||||
Array<ImagePtr> image_arr;
|
Array<ImagePtr> image_arr;
|
||||||
|
|
||||||
image_arr.reserve(images.size());
|
image_arr.reserve(images.size());
|
||||||
|
|
||||||
for (const auto& image : images)
|
for (const auto& image : images)
|
||||||
{
|
{
|
||||||
ImagePtr ptr = new (std::nothrow) Image;
|
ImagePtr ptr = new (std::nothrow) Image;
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
if (image.IsFile())
|
if (ptr->Load(LocateRes(image, search_paths_)))
|
||||||
{
|
|
||||||
String path = Search(image.GetFileName(), search_paths_);
|
|
||||||
ptr->Load(path.c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ptr->Load(image);
|
|
||||||
|
|
||||||
if (ptr->IsValid())
|
|
||||||
{
|
{
|
||||||
image_arr.push_back(ptr);
|
image_arr.push_back(ptr);
|
||||||
++total;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (total)
|
if (!image_arr.empty())
|
||||||
{
|
{
|
||||||
FramesPtr frames = new (std::nothrow) Frames(image_arr);
|
FramesPtr frames = new (std::nothrow) Frames(image_arr);
|
||||||
if (frames)
|
if (frames)
|
||||||
{
|
{
|
||||||
res_.insert(std::make_pair(id, frames));
|
res_.insert(std::make_pair(id, frames));
|
||||||
return total;
|
return frames->GetFrames().size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -134,12 +120,8 @@ namespace easy2d
|
||||||
if (cols <= 0 || rows <= 0)
|
if (cols <= 0 || rows <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int total = 0;
|
|
||||||
FramesPtr frames = new (std::nothrow) Frames;
|
|
||||||
if (frames)
|
|
||||||
{
|
|
||||||
ImagePtr raw = new (std::nothrow) Image;
|
ImagePtr raw = new (std::nothrow) Image;
|
||||||
if (!raw || !raw->Load(image))
|
if (!raw || !raw->Load(LocateRes(image, search_paths_)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
float raw_width = raw->GetSourceWidth();
|
float raw_width = raw->GetSourceWidth();
|
||||||
|
|
@ -147,6 +129,9 @@ namespace easy2d
|
||||||
float width = raw_width / cols;
|
float width = raw_width / cols;
|
||||||
float height = raw_height / rows;
|
float height = raw_height / rows;
|
||||||
|
|
||||||
|
Array<ImagePtr> image_arr;
|
||||||
|
image_arr.reserve(rows * cols);
|
||||||
|
|
||||||
for (int i = 0; i < rows; i++)
|
for (int i = 0; i < rows; i++)
|
||||||
{
|
{
|
||||||
for (int j = 0; j < cols; j++)
|
for (int j = 0; j < cols; j++)
|
||||||
|
|
@ -155,41 +140,46 @@ namespace easy2d
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
ptr->Crop(Rect{ i * width, j * height, width, height });
|
ptr->Crop(Rect{ i * width, j * height, width, height });
|
||||||
frames->Add(ptr);
|
image_arr.push_back(ptr);
|
||||||
++total;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (total)
|
FramesPtr frames = new (std::nothrow) Frames(image_arr);
|
||||||
|
if (frames)
|
||||||
|
{
|
||||||
res_.insert(std::make_pair(id, frames));
|
res_.insert(std::make_pair(id, frames));
|
||||||
return total;
|
return frames->GetFrames().size();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ResLoader::AddFrames(String const & id, Resource const & image, Array<Rect> const & crop_rects)
|
int ResLoader::AddFrames(String const & id, Resource const & image, Array<Rect> const & crop_rects)
|
||||||
{
|
|
||||||
int total = 0;
|
|
||||||
FramesPtr frames = new (std::nothrow) Frames;
|
|
||||||
if (frames)
|
|
||||||
{
|
{
|
||||||
ImagePtr raw = new (std::nothrow) Image;
|
ImagePtr raw = new (std::nothrow) Image;
|
||||||
if (!raw || !raw->Load(image))
|
if (!raw || !raw->Load(LocateRes(image, search_paths_)))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Array<ImagePtr> image_arr;
|
||||||
|
image_arr.reserve(crop_rects.size());
|
||||||
|
|
||||||
for (const auto& rect : crop_rects)
|
for (const auto& rect : crop_rects)
|
||||||
{
|
{
|
||||||
ImagePtr ptr = new (std::nothrow) Image(raw->GetBitmap());
|
ImagePtr ptr = new (std::nothrow) Image(raw->GetBitmap());
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
ptr->Crop(rect);
|
ptr->Crop(rect);
|
||||||
frames->Add(ptr);
|
image_arr.push_back(ptr);
|
||||||
++total;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (total)
|
FramesPtr frames = new (std::nothrow) Frames(image_arr);
|
||||||
|
if (frames)
|
||||||
|
{
|
||||||
res_.insert(std::make_pair(id, frames));
|
res_.insert(std::make_pair(id, frames));
|
||||||
return total;
|
return frames->GetFrames().size();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ResLoader::AddFrames(String const & id, FramesPtr const & frames)
|
bool ResLoader::AddFrames(String const & id, FramesPtr const & frames)
|
||||||
|
|
@ -207,16 +197,7 @@ namespace easy2d
|
||||||
MusicPtr ptr = new (std::nothrow) Music;
|
MusicPtr ptr = new (std::nothrow) Music;
|
||||||
if (ptr)
|
if (ptr)
|
||||||
{
|
{
|
||||||
bool valid = false;
|
if (ptr->Load(LocateRes(music, search_paths_)))
|
||||||
if (music.IsFile())
|
|
||||||
{
|
|
||||||
String path = Search(music.GetFileName(), search_paths_);
|
|
||||||
valid = ptr->Load(path.c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
valid = ptr->Load(music);
|
|
||||||
|
|
||||||
if (valid)
|
|
||||||
{
|
{
|
||||||
res_.insert(std::make_pair(id, ptr));
|
res_.insert(std::make_pair(id, ptr));
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -49,14 +49,14 @@ namespace easy2d
|
||||||
return wave_format_;
|
return wave_format_;
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT Transcoder::LoadMediaFile(LPCWSTR file_path, BYTE** wave_data, UINT32* wave_data_size)
|
HRESULT Transcoder::LoadMediaFile(String const& file_path, BYTE** wave_data, UINT32* wave_data_size)
|
||||||
{
|
{
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
|
|
||||||
IntrusivePtr<IMFSourceReader> reader;
|
IntrusivePtr<IMFSourceReader> reader;
|
||||||
|
|
||||||
hr = modules::MediaFoundation::Get().MFCreateSourceReaderFromURL(
|
hr = modules::MediaFoundation::Get().MFCreateSourceReaderFromURL(
|
||||||
file_path,
|
file_path.c_str(),
|
||||||
nullptr,
|
nullptr,
|
||||||
&reader
|
&reader
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ namespace easy2d
|
||||||
const WAVEFORMATEX* GetWaveFormatEx() const;
|
const WAVEFORMATEX* GetWaveFormatEx() const;
|
||||||
|
|
||||||
HRESULT LoadMediaFile(
|
HRESULT LoadMediaFile(
|
||||||
LPCWSTR file_path,
|
String const& file_path,
|
||||||
BYTE** wave_data,
|
BYTE** wave_data,
|
||||||
UINT32* wave_data_size
|
UINT32* wave_data_size
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue