forked from metin-server/m2dev-client-src
LoadImageFromFile for CImageBox
This commit is contained in:
@@ -1247,6 +1247,15 @@ namespace UI
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL CImageBox::LoadImageFromFile(const char* c_szFileName)
|
||||
{
|
||||
CPackManager::instance().SetFileLoadMode();
|
||||
BOOL r = LoadImage(c_szFileName);
|
||||
CPackManager::instance().SetPackLoadMode();
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
void CImageBox::SetDiffuseColor(float fr, float fg, float fb, float fa)
|
||||
{
|
||||
if (!m_pImageInstance)
|
||||
|
||||
@@ -335,6 +335,7 @@ namespace UI
|
||||
virtual ~CImageBox();
|
||||
|
||||
BOOL LoadImage(const char * c_szFileName);
|
||||
BOOL LoadImageFromFile(const char * c_szFileName);
|
||||
void SetDiffuseColor(float fr, float fg, float fb, float fa);
|
||||
|
||||
int GetWidth();
|
||||
|
||||
@@ -1957,6 +1957,21 @@ PyObject * wndImageLoadImage(PyObject * poSelf, PyObject * poArgs)
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject* wndImageLoadImageFromFile(PyObject* poSelf, PyObject* poArgs)
|
||||
{
|
||||
UI::CWindow* pWindow;
|
||||
if (!PyTuple_GetWindow(poArgs, 0, &pWindow))
|
||||
return Py_BuildException();
|
||||
char* szFileName;
|
||||
if (!PyTuple_GetString(poArgs, 1, &szFileName))
|
||||
return Py_BuildException();
|
||||
|
||||
if (!((UI::CImageBox*)pWindow)->LoadImageFromFile(szFileName))
|
||||
return Py_BuildException("Failed to load image from file (filename: %s)", szFileName);
|
||||
|
||||
return Py_BuildNone();
|
||||
}
|
||||
|
||||
PyObject * wndImageSetDiffuseColor(PyObject * poSelf, PyObject * poArgs)
|
||||
{
|
||||
UI::CWindow * pWindow;
|
||||
@@ -2451,6 +2466,7 @@ void initwndMgr()
|
||||
|
||||
// ImageBox
|
||||
{ "LoadImage", wndImageLoadImage, METH_VARARGS },
|
||||
{ "LoadImageFromFile", wndImageLoadImageFromFile, METH_VARARGS },
|
||||
{ "SetDiffuseColor", wndImageSetDiffuseColor, METH_VARARGS },
|
||||
{ "GetWidth", wndImageGetWidth, METH_VARARGS },
|
||||
{ "GetHeight", wndImageGetHeight, METH_VARARGS },
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
#include "PackManager.h"
|
||||
#include <fstream>
|
||||
#include <filesystem>
|
||||
|
||||
bool CPackManager::AddPack(const std::string& path)
|
||||
{
|
||||
@@ -11,9 +13,23 @@ bool CPackManager::GetFile(std::string_view path, TPackFile& result)
|
||||
thread_local std::string buf;
|
||||
NormalizePath(path, buf);
|
||||
|
||||
auto it = m_entries.find(buf);
|
||||
if (it != m_entries.end()) {
|
||||
return it->second.first->GetFile(it->second.second, result);
|
||||
if (m_load_from_pack) {
|
||||
auto it = m_entries.find(buf);
|
||||
if (it != m_entries.end()) {
|
||||
return it->second.first->GetFile(it->second.second, result);
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::ifstream ifs(buf, std::ios::binary);
|
||||
if (ifs.is_open()) {
|
||||
ifs.seekg(0, std::ios::end);
|
||||
size_t size = ifs.tellg();
|
||||
ifs.seekg(0, std::ios::beg);
|
||||
result.resize(size);
|
||||
if (ifs.read((char*)result.data(), size)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -24,8 +40,13 @@ bool CPackManager::IsExist(std::string_view path) const
|
||||
thread_local std::string buf;
|
||||
NormalizePath(path, buf);
|
||||
|
||||
auto it = m_entries.find(buf);
|
||||
return it != m_entries.end();
|
||||
if (m_load_from_pack) {
|
||||
auto it = m_entries.find(buf);
|
||||
return it != m_entries.end();
|
||||
}
|
||||
else {
|
||||
return std::filesystem::exists(buf);
|
||||
}
|
||||
}
|
||||
|
||||
void CPackManager::NormalizePath(std::string_view in, std::string& out) const
|
||||
|
||||
@@ -14,9 +14,13 @@ public:
|
||||
bool GetFile(std::string_view path, TPackFile& result);
|
||||
bool IsExist(std::string_view path) const;
|
||||
|
||||
void SetPackLoadMode() { m_load_from_pack = true; }
|
||||
void SetFileLoadMode() { m_load_from_pack = false; }
|
||||
|
||||
private:
|
||||
void NormalizePath(std::string_view in, std::string& out) const;
|
||||
|
||||
private:
|
||||
bool m_load_from_pack = true;
|
||||
TPackFileMap m_entries;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user