LoadImageFromFile for CImageBox

This commit is contained in:
d1str4ught
2025-09-22 01:43:01 +02:00
parent cc98bdb2da
commit 81c61692f1
5 changed files with 56 additions and 5 deletions

View File

@@ -1247,6 +1247,15 @@ namespace UI
return TRUE; 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) void CImageBox::SetDiffuseColor(float fr, float fg, float fb, float fa)
{ {
if (!m_pImageInstance) if (!m_pImageInstance)

View File

@@ -335,6 +335,7 @@ namespace UI
virtual ~CImageBox(); virtual ~CImageBox();
BOOL LoadImage(const char * c_szFileName); BOOL LoadImage(const char * c_szFileName);
BOOL LoadImageFromFile(const char * c_szFileName);
void SetDiffuseColor(float fr, float fg, float fb, float fa); void SetDiffuseColor(float fr, float fg, float fb, float fa);
int GetWidth(); int GetWidth();

View File

@@ -1957,6 +1957,21 @@ PyObject * wndImageLoadImage(PyObject * poSelf, PyObject * poArgs)
return Py_BuildNone(); 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) PyObject * wndImageSetDiffuseColor(PyObject * poSelf, PyObject * poArgs)
{ {
UI::CWindow * pWindow; UI::CWindow * pWindow;
@@ -2451,6 +2466,7 @@ void initwndMgr()
// ImageBox // ImageBox
{ "LoadImage", wndImageLoadImage, METH_VARARGS }, { "LoadImage", wndImageLoadImage, METH_VARARGS },
{ "LoadImageFromFile", wndImageLoadImageFromFile, METH_VARARGS },
{ "SetDiffuseColor", wndImageSetDiffuseColor, METH_VARARGS }, { "SetDiffuseColor", wndImageSetDiffuseColor, METH_VARARGS },
{ "GetWidth", wndImageGetWidth, METH_VARARGS }, { "GetWidth", wndImageGetWidth, METH_VARARGS },
{ "GetHeight", wndImageGetHeight, METH_VARARGS }, { "GetHeight", wndImageGetHeight, METH_VARARGS },

View File

@@ -1,4 +1,6 @@
#include "PackManager.h" #include "PackManager.h"
#include <fstream>
#include <filesystem>
bool CPackManager::AddPack(const std::string& path) 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; thread_local std::string buf;
NormalizePath(path, buf); NormalizePath(path, buf);
auto it = m_entries.find(buf); if (m_load_from_pack) {
if (it != m_entries.end()) { auto it = m_entries.find(buf);
return it->second.first->GetFile(it->second.second, result); 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; return false;
@@ -24,8 +40,13 @@ bool CPackManager::IsExist(std::string_view path) const
thread_local std::string buf; thread_local std::string buf;
NormalizePath(path, buf); NormalizePath(path, buf);
auto it = m_entries.find(buf); if (m_load_from_pack) {
return it != m_entries.end(); 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 void CPackManager::NormalizePath(std::string_view in, std::string& out) const

View File

@@ -14,9 +14,13 @@ public:
bool GetFile(std::string_view path, TPackFile& result); bool GetFile(std::string_view path, TPackFile& result);
bool IsExist(std::string_view path) const; bool IsExist(std::string_view path) const;
void SetPackLoadMode() { m_load_from_pack = true; }
void SetFileLoadMode() { m_load_from_pack = false; }
private: private:
void NormalizePath(std::string_view in, std::string& out) const; void NormalizePath(std::string_view in, std::string& out) const;
private: private:
bool m_load_from_pack = true;
TPackFileMap m_entries; TPackFileMap m_entries;
}; };