update: Code style & Resource Class & File Class
This commit is contained in:
parent
9472aebff2
commit
f26aff5e78
|
|
@ -71,7 +71,7 @@ namespace e2d
|
|||
|
||||
// 譜崔完悶夕炎
|
||||
void SetIcon(
|
||||
int icon_id
|
||||
int icon_id /* ͼ±ê×ÊÔ´ ID */
|
||||
);
|
||||
|
||||
// 譜崔報炎峺寞劔塀
|
||||
|
|
@ -131,9 +131,9 @@ namespace e2d
|
|||
MSG msg_;
|
||||
int width_;
|
||||
int height_;
|
||||
String title_;
|
||||
int icon_id_;
|
||||
float dpi_;
|
||||
String title_;
|
||||
|
||||
static Window * instance_;
|
||||
};
|
||||
|
|
@ -273,7 +273,7 @@ namespace e2d
|
|||
E2D_DISABLE_COPY(Input);
|
||||
|
||||
protected:
|
||||
IDirectInput8W * direct_input_;
|
||||
IDirectInput8W * direct_input_;
|
||||
IDirectInputDevice8W* keyboard_device_;
|
||||
IDirectInputDevice8W* mouse_device_;
|
||||
DIMOUSESTATE mouse_state_;
|
||||
|
|
|
|||
|
|
@ -591,12 +591,12 @@ namespace e2d
|
|||
{
|
||||
public:
|
||||
Resource(
|
||||
size_t resource_name, /* ×ĘÔ´ĂűłĆ */
|
||||
int resource_id, /* ×ÊÔ´Ãû³Æ */
|
||||
const String& resource_type /* ×ÊÔ´ÀàÐÍ */
|
||||
);
|
||||
|
||||
public:
|
||||
size_t name;
|
||||
int id;
|
||||
String type;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ bool e2d::Image::Open(const Resource& res)
|
|||
return false;
|
||||
}
|
||||
|
||||
this->SetBitmap(bitmap_cache_.at(res.name));
|
||||
this->SetBitmap(bitmap_cache_.at(res.id));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -153,98 +153,98 @@ e2d::Point e2d::Image::GetCropPos() const
|
|||
|
||||
bool e2d::Image::Preload(const Resource& res)
|
||||
{
|
||||
if (bitmap_cache_.find(res.name) != bitmap_cache_.end())
|
||||
if (bitmap_cache_.find(res.id) != bitmap_cache_.end())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
IWICImagingFactory *pImagingFactory = Renderer::GetImagingFactory();
|
||||
ID2D1HwndRenderTarget* pRenderTarget = Renderer::GetInstance()->GetRenderTarget();
|
||||
IWICBitmapDecoder *pDecoder = nullptr;
|
||||
IWICBitmapFrameDecode *pSource = nullptr;
|
||||
IWICStream *pStream = nullptr;
|
||||
IWICFormatConverter *pConverter = nullptr;
|
||||
ID2D1Bitmap *pBitmap = nullptr;
|
||||
HRSRC imageResHandle = nullptr;
|
||||
HGLOBAL imageResDataHandle = nullptr;
|
||||
void *pImageFile = nullptr;
|
||||
DWORD imageFileSize = 0;
|
||||
IWICImagingFactory *imaging_factory = Renderer::GetImagingFactory();
|
||||
ID2D1HwndRenderTarget* render_target = Renderer::GetInstance()->GetRenderTarget();
|
||||
IWICBitmadecoder *decoder = nullptr;
|
||||
IWICBitmapFrameDecode *source = nullptr;
|
||||
IWICStream *stream = nullptr;
|
||||
IWICFormatConverter *converter = nullptr;
|
||||
ID2D1Bitmap *bitmap = nullptr;
|
||||
HRSRC res_handle = nullptr;
|
||||
HGLOBAL res_data_handle = nullptr;
|
||||
void *image_file = nullptr;
|
||||
DWORD image_file_size = 0;
|
||||
|
||||
// 定位资源
|
||||
imageResHandle = ::FindResourceW(
|
||||
res_handle = ::FindResourceW(
|
||||
HINST_THISCOMPONENT,
|
||||
MAKEINTRESOURCE(res.name),
|
||||
MAKEINTRESOURCE(res.id),
|
||||
(LPCWSTR)res.type
|
||||
);
|
||||
|
||||
HRESULT hr = imageResHandle ? S_OK : E_FAIL;
|
||||
HRESULT hr = res_handle ? S_OK : E_FAIL;
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 加载资源
|
||||
imageResDataHandle = ::LoadResource(HINST_THISCOMPONENT, imageResHandle);
|
||||
res_data_handle = ::LoadResource(HINST_THISCOMPONENT, res_handle);
|
||||
|
||||
hr = imageResDataHandle ? S_OK : E_FAIL;
|
||||
hr = res_data_handle ? S_OK : E_FAIL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 获取文件指针,并锁定资源
|
||||
pImageFile = ::LockResource(imageResDataHandle);
|
||||
image_file = ::LockResource(res_data_handle);
|
||||
|
||||
hr = pImageFile ? S_OK : E_FAIL;
|
||||
hr = image_file ? S_OK : E_FAIL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 计算大小
|
||||
imageFileSize = ::SizeofResource(HINST_THISCOMPONENT, imageResHandle);
|
||||
image_file_size = ::SizeofResource(HINST_THISCOMPONENT, res_handle);
|
||||
|
||||
hr = imageFileSize ? S_OK : E_FAIL;
|
||||
hr = image_file_size ? S_OK : E_FAIL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建 WIC 流
|
||||
hr = pImagingFactory->CreateStream(&pStream);
|
||||
hr = imaging_factory->CreateStream(&stream);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 初始化流
|
||||
hr = pStream->InitializeFromMemory(
|
||||
reinterpret_cast<BYTE*>(pImageFile),
|
||||
imageFileSize
|
||||
hr = stream->InitializeFromMemory(
|
||||
reinterpret_cast<BYTE*>(image_file),
|
||||
image_file_size
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建流的解码器
|
||||
hr = pImagingFactory->CreateDecoderFromStream(
|
||||
pStream,
|
||||
hr = imaging_factory->CreateDecoderFromStream(
|
||||
stream,
|
||||
nullptr,
|
||||
WICDecodeMetadataCacheOnLoad,
|
||||
&pDecoder
|
||||
&decoder
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建初始化框架
|
||||
hr = pDecoder->GetFrame(0, &pSource);
|
||||
hr = decoder->GetFrame(0, &source);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建图片格式转换器
|
||||
hr = pImagingFactory->CreateFormatConverter(&pConverter);
|
||||
hr = imaging_factory->CreateFormatConverter(&converter);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 图片格式转换成 32bppPBGRA
|
||||
hr = pConverter->Initialize(
|
||||
pSource,
|
||||
hr = converter->Initialize(
|
||||
source,
|
||||
GUID_WICPixelFormat32bppPBGRA,
|
||||
WICBitmapDitherTypeNone,
|
||||
nullptr,
|
||||
|
|
@ -256,71 +256,74 @@ bool e2d::Image::Preload(const Resource& res)
|
|||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 从 WIC 位图创建一个 Direct2D 位图
|
||||
hr = pRenderTarget->CreateBitmapFromWicBitmap(
|
||||
pConverter,
|
||||
hr = render_target->CreateBitmapFromWicBitmap(
|
||||
converter,
|
||||
nullptr,
|
||||
&pBitmap
|
||||
&bitmap
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
bitmap_cache_.insert(std::make_pair(res.name, pBitmap));
|
||||
bitmap_cache_.insert(std::make_pair(res.id, bitmap));
|
||||
}
|
||||
|
||||
// 释放相关资源
|
||||
SafeRelease(pDecoder);
|
||||
SafeRelease(pSource);
|
||||
SafeRelease(pStream);
|
||||
SafeRelease(pConverter);
|
||||
SafeRelease(decoder);
|
||||
SafeRelease(source);
|
||||
SafeRelease(stream);
|
||||
SafeRelease(converter);
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
||||
bool e2d::Image::Preload(const String & file_name)
|
||||
{
|
||||
String actualFilePath = File(file_name).GetPath();
|
||||
if (actualFilePath.IsEmpty())
|
||||
File image_file;
|
||||
if (!image_file.Open(file_name))
|
||||
return false;
|
||||
|
||||
size_t hash = actualFilePath.GetHash();
|
||||
// 用户输入的路径不一定是完整路径,因为用户可能通过 File::AddSearchPath 添加
|
||||
// 默认搜索路径,所以需要通过 File::GetPath 获取完整路径
|
||||
String image_file_path = image_file.GetPath();
|
||||
size_t hash = image_file_path.GetHash();
|
||||
if (bitmap_cache_.find(hash) != bitmap_cache_.end())
|
||||
return true;
|
||||
|
||||
IWICImagingFactory *pImagingFactory = Renderer::GetImagingFactory();
|
||||
ID2D1HwndRenderTarget* pRenderTarget = Renderer::GetInstance()->GetRenderTarget();
|
||||
IWICBitmapDecoder *pDecoder = nullptr;
|
||||
IWICBitmapFrameDecode *pSource = nullptr;
|
||||
IWICStream *pStream = nullptr;
|
||||
IWICFormatConverter *pConverter = nullptr;
|
||||
ID2D1Bitmap *pBitmap = nullptr;
|
||||
IWICImagingFactory *imaging_factory = Renderer::GetImagingFactory();
|
||||
ID2D1HwndRenderTarget* render_target = Renderer::GetInstance()->GetRenderTarget();
|
||||
IWICBitmadecoder *decoder = nullptr;
|
||||
IWICBitmapFrameDecode *source = nullptr;
|
||||
IWICStream *stream = nullptr;
|
||||
IWICFormatConverter *converter = nullptr;
|
||||
ID2D1Bitmap *bitmap = nullptr;
|
||||
|
||||
// 创建解码器
|
||||
HRESULT hr = pImagingFactory->CreateDecoderFromFilename(
|
||||
(LPCWSTR)actualFilePath,
|
||||
HRESULT hr = imaging_factory->CreateDecoderFromFilename(
|
||||
(LPCWSTR)image_file_path,
|
||||
nullptr,
|
||||
GENERIC_READ,
|
||||
WICDecodeMetadataCacheOnLoad,
|
||||
&pDecoder
|
||||
&decoder
|
||||
);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建初始化框架
|
||||
hr = pDecoder->GetFrame(0, &pSource);
|
||||
hr = decoder->GetFrame(0, &source);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 创建图片格式转换器
|
||||
hr = pImagingFactory->CreateFormatConverter(&pConverter);
|
||||
hr = imaging_factory->CreateFormatConverter(&converter);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 图片格式转换成 32bppPBGRA
|
||||
hr = pConverter->Initialize(
|
||||
pSource,
|
||||
hr = converter->Initialize(
|
||||
source,
|
||||
GUID_WICPixelFormat32bppPBGRA,
|
||||
WICBitmapDitherTypeNone,
|
||||
nullptr,
|
||||
|
|
@ -332,23 +335,23 @@ bool e2d::Image::Preload(const String & file_name)
|
|||
if (SUCCEEDED(hr))
|
||||
{
|
||||
// 从 WIC 位图创建一个 Direct2D 位图
|
||||
hr = pRenderTarget->CreateBitmapFromWicBitmap(
|
||||
pConverter,
|
||||
hr = render_target->CreateBitmapFromWicBitmap(
|
||||
converter,
|
||||
nullptr,
|
||||
&pBitmap
|
||||
&bitmap
|
||||
);
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
bitmap_cache_.insert(std::make_pair(hash, pBitmap));
|
||||
bitmap_cache_.insert(std::make_pair(hash, bitmap));
|
||||
}
|
||||
|
||||
// 释放相关资源
|
||||
SafeRelease(pDecoder);
|
||||
SafeRelease(pSource);
|
||||
SafeRelease(pStream);
|
||||
SafeRelease(pConverter);
|
||||
SafeRelease(decoder);
|
||||
SafeRelease(source);
|
||||
SafeRelease(stream);
|
||||
SafeRelease(converter);
|
||||
|
||||
return SUCCEEDED(hr);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,11 +40,11 @@ bool e2d::File::Open(const String & file_name)
|
|||
}
|
||||
else
|
||||
{
|
||||
for (const auto& resPath : search_paths_)
|
||||
for (const auto& path : search_paths_)
|
||||
{
|
||||
if (FindFile(resPath + file_name))
|
||||
if (FindFile(path + file_name))
|
||||
{
|
||||
file_path_ = resPath + file_name;
|
||||
file_path_ = path + file_name;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,15 +10,15 @@
|
|||
#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p); (p)=nullptr; } }
|
||||
#endif
|
||||
|
||||
inline bool TraceError(wchar_t* sPrompt)
|
||||
inline bool TraceError(wchar_t* prompt)
|
||||
{
|
||||
WARN("MusicInfo error: %s failed!", sPrompt);
|
||||
WARN("Music error: %s failed!", prompt);
|
||||
return false;
|
||||
}
|
||||
|
||||
inline bool TraceError(wchar_t* sPrompt, HRESULT hr)
|
||||
inline bool TraceError(wchar_t* prompt, HRESULT hr)
|
||||
{
|
||||
WARN("MusicInfo error: %s (%#X)", sPrompt, hr);
|
||||
WARN("Music error: %s (%#X)", prompt, hr);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -75,20 +75,24 @@ bool e2d::Music::Open(const e2d::String & file_path)
|
|||
|
||||
if (file_path.IsEmpty())
|
||||
{
|
||||
WARN("MusicInfo::Open Invalid file name.");
|
||||
WARN("Music::Open error: Invalid file name.");
|
||||
return false;
|
||||
}
|
||||
|
||||
String actualFilePath = File(file_path).GetPath();
|
||||
if (actualFilePath.IsEmpty())
|
||||
File music_file;
|
||||
if (!music_file.Open(file_name))
|
||||
{
|
||||
WARN("MusicInfo::Open File not found.");
|
||||
WARN("Music::Open error: File not found.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 用户输入的路径不一定是完整路径,因为用户可能通过 File::AddSearchPath 添加
|
||||
// 默认搜索路径,所以需要通过 File::GetPath 获取完整路径
|
||||
String music_file_path = music_file.GetPath();
|
||||
|
||||
// ¶¨Î» wave Îļþ
|
||||
wchar_t pFilePath[MAX_PATH];
|
||||
if (!FindMediaFileCch(pFilePath, MAX_PATH, (const wchar_t *)actualFilePath))
|
||||
if (!FindMediaFileCch(pFilePath, MAX_PATH, (const wchar_t *)music_file_path))
|
||||
{
|
||||
WARN("Failed to Find media file: %s", pFilePath);
|
||||
return false;
|
||||
|
|
@ -151,7 +155,7 @@ bool e2d::Music::Open(const Resource& res)
|
|||
DWORD dwSize;
|
||||
void* pvRes;
|
||||
|
||||
if (nullptr == (hResInfo = FindResourceW(HINST_THISCOMPONENT, MAKEINTRESOURCE(res.name), (LPCWSTR)res.type)))
|
||||
if (nullptr == (hResInfo = FindResourceW(HINST_THISCOMPONENT, MAKEINTRESOURCE(res.id), (LPCWSTR)res.type)))
|
||||
return TraceError(L"FindResource");
|
||||
|
||||
if (nullptr == (hResData = LoadResource(HINST_THISCOMPONENT, hResInfo)))
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ bool e2d::Player::IsPlaying(const String & file_path)
|
|||
|
||||
bool e2d::Player::Preload(const Resource& res)
|
||||
{
|
||||
if (musics_.end() != musics_.find(res.name))
|
||||
if (musics_.end() != musics_.find(res.id))
|
||||
return true;
|
||||
|
||||
Music * music = new (std::nothrow) Music();
|
||||
|
|
@ -133,7 +133,7 @@ bool e2d::Player::Preload(const Resource& res)
|
|||
if (music->Open(res))
|
||||
{
|
||||
music->SetVolume(volume_);
|
||||
musics_.insert(std::make_pair(res.name, music));
|
||||
musics_.insert(std::make_pair(res.id, music));
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
|
@ -148,7 +148,7 @@ bool e2d::Player::Play(const Resource& res, int loop_count)
|
|||
{
|
||||
if (Player::Preload(res))
|
||||
{
|
||||
auto music = musics_[res.name];
|
||||
auto music = musics_[res.id];
|
||||
if (music->Play(loop_count))
|
||||
{
|
||||
return true;
|
||||
|
|
@ -159,26 +159,26 @@ bool e2d::Player::Play(const Resource& res, int loop_count)
|
|||
|
||||
void e2d::Player::Pause(const Resource& res)
|
||||
{
|
||||
if (musics_.end() != musics_.find(res.name))
|
||||
musics_[res.name]->Pause();
|
||||
if (musics_.end() != musics_.find(res.id))
|
||||
musics_[res.id]->Pause();
|
||||
}
|
||||
|
||||
void e2d::Player::Resume(const Resource& res)
|
||||
{
|
||||
if (musics_.end() != musics_.find(res.name))
|
||||
musics_[res.name]->Resume();
|
||||
if (musics_.end() != musics_.find(res.id))
|
||||
musics_[res.id]->Resume();
|
||||
}
|
||||
|
||||
void e2d::Player::Stop(const Resource& res)
|
||||
{
|
||||
if (musics_.end() != musics_.find(res.name))
|
||||
musics_[res.name]->Stop();
|
||||
if (musics_.end() != musics_.find(res.id))
|
||||
musics_[res.id]->Stop();
|
||||
}
|
||||
|
||||
bool e2d::Player::IsPlaying(const Resource& res)
|
||||
{
|
||||
if (musics_.end() != musics_.find(res.name))
|
||||
return musics_[res.name]->IsPlaying();
|
||||
if (musics_.end() != musics_.find(res.id))
|
||||
return musics_[res.id]->IsPlaying();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#include "..\e2dtool.h"
|
||||
|
||||
|
||||
e2d::Resource::Resource(size_t resource_name, const String & resource_type)
|
||||
: name(resource_name)
|
||||
e2d::Resource::Resource(int resource_id, const String & resource_type)
|
||||
: id(resource_id)
|
||||
, type(resource_type)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue