From f26aff5e78143fd983f969574c55ee73dbb4118f Mon Sep 17 00:00:00 2001 From: Nomango Date: Fri, 7 Sep 2018 17:56:03 +0800 Subject: [PATCH] update: Code style & Resource Class & File Class --- core/e2dmodule.h | 6 +- core/e2dutil.h | 4 +- core/objects/Image.cpp | 135 ++++++++++++++++++++-------------------- core/tools/File.cpp | 6 +- core/tools/Music.cpp | 24 ++++--- core/tools/Player.cpp | 22 +++---- core/utils/Resource.cpp | 4 +- 7 files changed, 104 insertions(+), 97 deletions(-) diff --git a/core/e2dmodule.h b/core/e2dmodule.h index d3811f6d..443f253a 100644 --- a/core/e2dmodule.h +++ b/core/e2dmodule.h @@ -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_; diff --git a/core/e2dutil.h b/core/e2dutil.h index e0a212e7..518a2f9f 100644 --- a/core/e2dutil.h +++ b/core/e2dutil.h @@ -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; }; diff --git a/core/objects/Image.cpp b/core/objects/Image.cpp index c31f7e2b..105a902a 100644 --- a/core/objects/Image.cpp +++ b/core/objects/Image.cpp @@ -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(pImageFile), - imageFileSize + hr = stream->InitializeFromMemory( + reinterpret_cast(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); } diff --git a/core/tools/File.cpp b/core/tools/File.cpp index aaa11f32..78c2accc 100644 --- a/core/tools/File.cpp +++ b/core/tools/File.cpp @@ -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; } } diff --git a/core/tools/Music.cpp b/core/tools/Music.cpp index fec1273a..d6e1175c 100644 --- a/core/tools/Music.cpp +++ b/core/tools/Music.cpp @@ -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))) diff --git a/core/tools/Player.cpp b/core/tools/Player.cpp index 7bf8d802..45588e4e 100644 --- a/core/tools/Player.cpp +++ b/core/tools/Player.cpp @@ -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; } diff --git a/core/utils/Resource.cpp b/core/utils/Resource.cpp index e3807d62..4d938a52 100644 --- a/core/utils/Resource.cpp +++ b/core/utils/Resource.cpp @@ -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) { }