X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b4f4d3dd610a29a7be3c7a5f165520438d0328bb..980ebb95527c974fa71e8e97c38543e8d731c7c7:/src/common/fs_mem.cpp?ds=sidebyside diff --git a/src/common/fs_mem.cpp b/src/common/fs_mem.cpp index 52fbc0649e..4d9ba72339 100644 --- a/src/common/fs_mem.cpp +++ b/src/common/fs_mem.cpp @@ -23,7 +23,6 @@ #include "wx/hash.h" #include "wx/wxcrtvararg.h" #if wxUSE_GUI - #include "wx/bitmap.h" #include "wx/image.h" #endif // wxUSE_GUI #endif @@ -34,19 +33,21 @@ class MemFSHashObj : public wxObject { public: - MemFSHashObj(const void *data, size_t len) + MemFSHashObj(const void *data, size_t len, const wxString& mime) { m_Data = new char[len]; memcpy(m_Data, data, len); m_Len = len; + m_MimeType = mime; InitTime(); } - MemFSHashObj(const wxMemoryOutputStream& stream) + MemFSHashObj(const wxMemoryOutputStream& stream, const wxString& mime) { m_Len = stream.GetSize(); m_Data = new char[m_Len]; stream.CopyTo(m_Data, m_Len); + m_MimeType = mime; InitTime(); } @@ -57,6 +58,7 @@ class MemFSHashObj : public wxObject char *m_Data; size_t m_Len; + wxString m_MimeType; #if wxUSE_DATETIME wxDateTime m_Time; #endif // wxUSE_DATETIME @@ -122,7 +124,7 @@ wxFSFile* wxMemoryFSHandlerBase::OpenFile(wxFileSystem& WXUNUSED(fs), const wxSt if (obj == NULL) return NULL; else return new wxFSFile(new wxMemoryInputStream(obj -> m_Data, obj -> m_Len), location, - GetMimeTypeFromExt(location), + obj->m_MimeType, GetAnchor(location) #if wxUSE_DATETIME , obj -> m_Time @@ -171,16 +173,39 @@ bool wxMemoryFSHandlerBase::CheckHash(const wxString& filename) } -/*static*/ void wxMemoryFSHandlerBase::AddFile(const wxString& filename, const wxString& textdata) +/*static*/ +void wxMemoryFSHandlerBase::AddFileWithMimeType(const wxString& filename, + const wxString& textdata, + const wxString& mimetype) { - AddFile(filename, (const void*) textdata.mb_str(), textdata.length()); + AddFileWithMimeType(filename, + (const void*) textdata.mb_str(), textdata.length(), + mimetype); } -/*static*/ void wxMemoryFSHandlerBase::AddFile(const wxString& filename, const void *binarydata, size_t size) +/*static*/ +void wxMemoryFSHandlerBase::AddFileWithMimeType(const wxString& filename, + const void *binarydata, size_t size, + const wxString& mimetype) { if (!CheckHash(filename)) return; - m_Hash -> Put(filename, new MemFSHashObj(binarydata, size)); + m_Hash -> Put(filename, new MemFSHashObj(binarydata, size, mimetype)); +} + +/*static*/ +void wxMemoryFSHandlerBase::AddFile(const wxString& filename, + const wxString& textdata) +{ + AddFileWithMimeType(filename, textdata, wxEmptyString); +} + + +/*static*/ +void wxMemoryFSHandlerBase::AddFile(const wxString& filename, + const void *binarydata, size_t size) +{ + AddFileWithMimeType(filename, binarydata, size, wxEmptyString); } @@ -207,13 +232,23 @@ bool wxMemoryFSHandlerBase::CheckHash(const wxString& filename) /*static*/ void wxMemoryFSHandler::AddFile(const wxString& filename, const wxImage& image, - long type) + wxBitmapType type) { if (!CheckHash(filename)) return; wxMemoryOutputStream mems; - if (image.Ok() && image.SaveFile(mems, (int)type)) - m_Hash -> Put(filename, new MemFSHashObj(mems)); + if (image.Ok() && image.SaveFile(mems, type)) + { + m_Hash->Put + ( + filename, + new MemFSHashObj + ( + mems, + wxImage::FindHandler(type)->GetMimeType() + ) + ); + } else { wxString s; @@ -226,7 +261,7 @@ wxMemoryFSHandler::AddFile(const wxString& filename, /*static*/ void wxMemoryFSHandler::AddFile(const wxString& filename, const wxBitmap& bitmap, - long type) + wxBitmapType type) { #if !defined(__WXMSW__) || wxUSE_WXDIB wxImage img = bitmap.ConvertToImage();