update: Code style & Resource Class & File Class

This commit is contained in:
Nomango 2018-09-07 17:56:03 +08:00
parent 9472aebff2
commit f26aff5e78
7 changed files with 104 additions and 97 deletions

View File

@ -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_;

View File

@ -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;
};

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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)))

View File

@ -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;
}

View File

@ -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)
{
}