some optimizations when loading image

minor
This commit is contained in:
Nomango 2019-07-29 14:48:17 +08:00
parent 331ec42523
commit 3ee2749b28
9 changed files with 52 additions and 92 deletions

View File

@ -22,6 +22,7 @@
#include "../base/logs.h"
#include "../renderer/render.h"
#include "../platform/modules.h"
#include "../utils/FileUtil.h"
namespace kiwano
{
@ -61,11 +62,13 @@ namespace kiwano
if (res.IsFileType())
{
if (!modules::Shlwapi::Get().PathFileExistsW(res.GetFileName().c_str()))
#if defined(KGE_DEBUG)
if (!FileUtil::ExistsFile(res.GetFileName()))
{
KGE_WARNING_LOG(L"Image file '%s' not found!", res.GetFileName().c_str());
return false;
}
#endif
hr = Renderer::Instance().GetDeviceResources()->CreateBitmapFromFile(bitmap, res.GetFileName());
}
else

View File

@ -98,7 +98,7 @@
<ClInclude Include="ui\Button.h" />
<ClInclude Include="ui\Menu.h" />
<ClInclude Include="utils\DataUtil.h" />
<ClInclude Include="utils\File.h" />
<ClInclude Include="utils\FileUtil.h" />
<ClInclude Include="utils\Path.h" />
<ClInclude Include="utils\ResLoader.h" />
</ItemGroup>
@ -158,7 +158,7 @@
<ClCompile Include="ui\Button.cpp" />
<ClCompile Include="ui\Menu.cpp" />
<ClCompile Include="utils\DataUtil.cpp" />
<ClCompile Include="utils\File.cpp" />
<ClCompile Include="utils\FileUtil.cpp" />
<ClCompile Include="utils\Path.cpp" />
<ClCompile Include="utils\ResLoader.cpp" />
</ItemGroup>

View File

@ -219,9 +219,6 @@
<ClInclude Include="platform\modules.h">
<Filter>platform</Filter>
</ClInclude>
<ClInclude Include="utils\File.h">
<Filter>utils</Filter>
</ClInclude>
<ClInclude Include="utils\Path.h">
<Filter>utils</Filter>
</ClInclude>
@ -333,6 +330,9 @@
<ClInclude Include="third-party\StackWalker\StackWalker.h">
<Filter>third-party\StackWalker</Filter>
</ClInclude>
<ClInclude Include="utils\FileUtil.h">
<Filter>utils</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="ui\Button.cpp">
@ -431,9 +431,6 @@
<ClCompile Include="platform\modules.cpp">
<Filter>platform</Filter>
</ClCompile>
<ClCompile Include="utils\File.cpp">
<Filter>utils</Filter>
</ClCompile>
<ClCompile Include="utils\Path.cpp">
<Filter>utils</Filter>
</ClCompile>
@ -509,5 +506,8 @@
<ClCompile Include="third-party\StackWalker\StackWalker.cpp">
<Filter>third-party\StackWalker</Filter>
</ClCompile>
<ClCompile Include="utils\FileUtil.cpp">
<Filter>utils</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -56,11 +56,13 @@ namespace kiwano
if (res.IsFileType())
{
if (!modules::Shlwapi::Get().PathFileExistsW(res.GetFileName().c_str()))
#if defined(KGE_DEBUG)
if (!FileUtil::ExistsFile(res.GetFileName()))
{
KGE_WARNING_LOG(L"Media file '%s' not found", res.GetFileName().c_str());
return false;
}
#endif
hr = transcoder.LoadMediaFile(res.GetFileName(), &wave_data_, &size_);
}
else

View File

@ -110,7 +110,7 @@
#include "utils/Path.h"
#include "utils/DataUtil.h"
#include "utils/File.h"
#include "utils/FileUtil.h"
#include "utils/ResLoader.h"

View File

@ -63,6 +63,11 @@ namespace kiwano
return reinterpret_cast<D2D1_MATRIX_3X2_F const&>(matrix);
}
inline const D2D1_MATRIX_3X2_F* ConvertToMatrix3x2F(const Matrix* matrix)
{
return reinterpret_cast<const D2D1_MATRIX_3X2_F*>(matrix);
}
// Converts a length in device-independent pixels (DIPs) to a length in physical pixels.
inline float ConvertDipsToPixels(float dips, float dpi)
{

View File

@ -354,7 +354,7 @@ namespace kiwano
if (!device_context_)
return E_UNEXPECTED;
device_context_->SetTransform(DX::ConvertToMatrix3x2F(matrix));
device_context_->SetTransform(DX::ConvertToMatrix3x2F(&matrix));
return S_OK;
}

View File

@ -18,67 +18,21 @@
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#include "File.h"
#include "FileUtil.h"
#include "../platform/modules.h"
#include <cwctype>
namespace kiwano
{
File::File()
: file_path_()
{
}
File::File(String const& file_name)
: file_path_(file_name)
bool FileUtil::Delete(String const& file_path)
{
}
File::~File()
{
}
bool File::Open(String const& file_name)
{
if (file_name.empty())
return false;
file_path_ = file_name;
return Exists();
}
bool File::Exists() const
{
return !!modules::Shlwapi::Get().PathFileExistsW(file_path_.c_str());
}
String const& File::GetPath() const
{
return file_path_;
}
String File::GetExtension() const
{
String file_ext;
size_t pos = file_path_.find_last_of(L'.');
if (pos != String::npos)
{
file_ext = file_path_.substr(pos);
std::transform(file_ext.begin(), file_ext.end(), file_ext.begin(), std::towlower);
}
return file_ext;
}
bool File::Delete()
{
if (::DeleteFile(file_path_.c_str()))
if (::DeleteFile(file_path.c_str()))
return true;
return false;
}
File File::Extract(Resource const& res, String const& dest_file_name)
bool FileUtil::Extract(Resource const& res, String const& dest_file_name)
{
File file;
HANDLE file_handle = ::CreateFile(
dest_file_name.c_str(),
GENERIC_WRITE,
@ -90,7 +44,7 @@ namespace kiwano
);
if (file_handle == INVALID_HANDLE_VALUE)
return file;
return false;
LPVOID buffer;
DWORD buffer_size;
@ -100,14 +54,29 @@ namespace kiwano
::WriteFile(file_handle, buffer, buffer_size, &written_bytes, NULL);
::CloseHandle(file_handle);
file.Open(dest_file_name);
return true;
}
else
{
::CloseHandle(file_handle);
::DeleteFile(dest_file_name.c_str());
}
return false;
}
return file;
bool FileUtil::ExistsFile(String const& file_path)
{
DWORD dwAttrib = ::GetFileAttributesW(file_path.c_str());
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
!(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
bool FileUtil::ExistsDirectory(String const& dir_path)
{
DWORD dwAttrib = ::GetFileAttributesW(dir_path.c_str());
return (dwAttrib != INVALID_FILE_ATTRIBUTES &&
(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
}

View File

@ -26,41 +26,22 @@
namespace kiwano
{
// 文件
class KGE_API File
class KGE_API FileUtil
{
public:
File();
File(
String const& file_name
);
virtual ~File();
// 打开文件
bool Open(
String const& file_name
);
// 文件是否存在
bool Exists() const;
// 删除文件
bool Delete();
// 获取文件路径
String const& GetPath() const;
// 获取文件扩展名
String GetExtension() const;
static bool Delete(String const& file_path);
// 释放二进制资源到临时文件目录
static File Extract(
static bool Extract(
Resource const& res, /* 资源 */
String const& dest_file_name /* 目标文件名 */
);
protected:
String file_path_;
// 文件是否存在
static bool ExistsFile(String const& file_path);
// 文件夹是否存在
static bool ExistsDirectory(String const& dir_path);
};
}