fixed loading of bitmaps from mem_fs
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8033 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
6ba549f2a5
commit
792064e93f
@ -21,12 +21,16 @@
|
||||
#include "wx/datetime.h"
|
||||
#include "wx/list.h"
|
||||
#include "wx/gdicmn.h"
|
||||
#include "wx/filesys.h"
|
||||
#include "wx/bitmap.h"
|
||||
#include "wx/icon.h"
|
||||
|
||||
class WXDLLEXPORT wxMenu;
|
||||
class WXDLLEXPORT wxMenuBar;
|
||||
class WXDLLEXPORT wxDialog;
|
||||
class WXDLLEXPORT wxPanel;
|
||||
class WXDLLEXPORT wxWindow;
|
||||
class WXDLLEXPORT wxToolBar;
|
||||
|
||||
class WXDLLEXPORT wxXmlResourceHandler;
|
||||
|
||||
@ -82,6 +86,11 @@ class WXDLLEXPORT wxXmlResource : public wxObject
|
||||
// Loads menubar from resource. Returns NULL on failure.
|
||||
wxMenuBar *LoadMenuBar(const wxString& name);
|
||||
|
||||
#if wxUSE_TOOLBAR
|
||||
// Loads toolbar
|
||||
wxToolBar *LoadToolBar(wxWindow *parent, const wxString& name);
|
||||
#endif
|
||||
|
||||
// Loads dialog. dlg points to parent window (if any). Second form
|
||||
// is used to finish creation of already existing instance (main reason
|
||||
// for this is that you may want to use derived class with new event table)
|
||||
@ -120,8 +129,12 @@ class WXDLLEXPORT wxXmlResource : public wxObject
|
||||
private:
|
||||
wxList m_Handlers;
|
||||
wxXmlResourceDataRecords m_Data;
|
||||
|
||||
friend class wxXmlResourceHandler;
|
||||
#if wxUSE_FILESYSTEM
|
||||
wxFileSystem m_CurFileSystem;
|
||||
wxFileSystem& GetCurFileSystem() { return m_CurFileSystem; }
|
||||
#endif
|
||||
|
||||
friend class wxXmlResourceHandler;
|
||||
};
|
||||
|
||||
|
||||
@ -236,9 +249,14 @@ class WXDLLEXPORT wxXmlResourceHandler : public wxObject
|
||||
// Get colour in HTML syntax (#RRGGBB)
|
||||
wxColour GetColour(const wxString& param);
|
||||
|
||||
// Get size/position:
|
||||
wxSize GetSize(const wxString& param = _T("size"));
|
||||
wxPoint GetPosition(const wxString& param = _T("pos"));
|
||||
|
||||
// Get bitmap:
|
||||
wxBitmap GetBitmap(const wxString& param = _T("bitmap"), wxSize size = wxDefaultSize);
|
||||
wxIcon GetIcon(const wxString& param = _T("icon"), wxSize size = wxDefaultSize);
|
||||
|
||||
// Sets common window options:
|
||||
void SetupWindow(wxWindow *wnd);
|
||||
|
||||
@ -247,6 +265,9 @@ class WXDLLEXPORT wxXmlResourceHandler : public wxObject
|
||||
GetParamNode("children")*/);
|
||||
wxObject *CreateResFromNode(wxXmlNode *node, wxObject *parent, wxObject *instance = NULL)
|
||||
{ return m_Resource->CreateResFromNode(node, parent, instance); }
|
||||
|
||||
// helper
|
||||
wxFileSystem& GetCurFileSystem() { return m_Resource->GetCurFileSystem(); }
|
||||
};
|
||||
|
||||
#define ADD_STYLE(style) AddStyle(_T(#style), style)
|
||||
|
@ -21,8 +21,6 @@
|
||||
|
||||
#include "wx/xml/xh_stbmp.h"
|
||||
#include "wx/statbmp.h"
|
||||
#include "wx/image.h"
|
||||
#include "wx/bitmap.h"
|
||||
|
||||
wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler()
|
||||
: wxXmlResourceHandler()
|
||||
@ -31,14 +29,9 @@ wxStaticBitmapXmlHandler::wxStaticBitmapXmlHandler()
|
||||
|
||||
wxObject *wxStaticBitmapXmlHandler::DoCreateResource()
|
||||
{
|
||||
wxImage img(GetParamValue(_T("bitmap")));
|
||||
wxSize sz = GetSize();
|
||||
|
||||
if (!(sz == wxDefaultSize)) img.Rescale(sz.x, sz.y);
|
||||
|
||||
wxStaticBitmap *bmp = new wxStaticBitmap(m_ParentAsWindow,
|
||||
GetID(),
|
||||
img.ConvertToBitmap(),
|
||||
GetBitmap(_T("bitmap"), GetSize()),
|
||||
GetPosition(), GetSize(),
|
||||
GetStyle(),
|
||||
GetName()
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include "wx/intl.h"
|
||||
#include "wx/tokenzr.h"
|
||||
#include "wx/module.h"
|
||||
#include "wx/bitmap.h"
|
||||
#include "wx/image.h"
|
||||
|
||||
#include "wx/xml/xml.h"
|
||||
#include "wx/xml/xmlres.h"
|
||||
@ -137,6 +139,13 @@ wxMenuBar *wxXmlResource::LoadMenuBar(const wxString& name)
|
||||
|
||||
|
||||
|
||||
wxToolBar *wxXmlResource::LoadToolBar(wxWindow *parent, const wxString& name)
|
||||
{
|
||||
return (wxToolBar*)CreateResFromNode(FindResource(name, wxT("toolbar")), parent, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
wxDialog *wxXmlResource::LoadDialog(wxWindow *parent, const wxString& name)
|
||||
{
|
||||
wxDialog *dialog = new wxDialog;
|
||||
@ -296,7 +305,12 @@ wxXmlNode *wxXmlResource::FindResource(const wxString& name, const wxString& typ
|
||||
(!type || node->GetName() == type) &&
|
||||
node->GetPropVal(wxT("name"), &dummy) &&
|
||||
dummy == name)
|
||||
{
|
||||
#if wxUSE_FILESYSTEM
|
||||
m_CurFileSystem.ChangePathTo(m_Data[f].File);
|
||||
#endif
|
||||
return node;
|
||||
}
|
||||
}
|
||||
|
||||
wxLogError(_("XML resource '%s' (type '%s') not found!"),
|
||||
@ -508,6 +522,50 @@ wxColour wxXmlResourceHandler::GetColour(const wxString& param)
|
||||
}
|
||||
|
||||
|
||||
|
||||
wxBitmap wxXmlResourceHandler::GetBitmap(const wxString& param, wxSize size)
|
||||
{
|
||||
wxString name = GetParamValue(param);
|
||||
if (name.IsEmpty()) return wxNullBitmap;
|
||||
#if wxUSE_FILESYSTEM
|
||||
wxFSFile *fsfile = GetCurFileSystem().OpenFile(name);
|
||||
if (fsfile == NULL)
|
||||
{
|
||||
wxLogError(_("XML resource: Cannot create bitmap from '%s'."), param.mb_str());
|
||||
return wxNullBitmap;
|
||||
}
|
||||
wxImage img(*(fsfile->GetStream()));
|
||||
delete fsfile;
|
||||
#else
|
||||
wxImage img(GetParamValue(_T("bitmap")));
|
||||
#endif
|
||||
if (!img.Ok())
|
||||
{
|
||||
wxLogError(_("XML resource: Cannot create bitmap from '%s'."), param.mb_str());
|
||||
return wxNullBitmap;
|
||||
}
|
||||
if (!(size == wxDefaultSize)) img.Rescale(size.x, size.y);
|
||||
return img.ConvertToBitmap();
|
||||
}
|
||||
|
||||
|
||||
|
||||
wxIcon wxXmlResourceHandler::GetIcon(const wxString& param, wxSize size)
|
||||
{
|
||||
#ifdef __WXMSW__
|
||||
wxIcon icon;
|
||||
icon.CopyFromBitmap(GetBitmap(param, size));
|
||||
#else
|
||||
wxIcon *iconpt;
|
||||
wxBitmap bmppt = GetBitmap(param, size);
|
||||
iconpt = (wxIcon*)(&bmppt);
|
||||
wxIcon icon(*iconpt);
|
||||
#endif
|
||||
return icon;
|
||||
}
|
||||
|
||||
|
||||
|
||||
wxXmlNode *wxXmlResourceHandler::GetParamNode(const wxString& param)
|
||||
{
|
||||
wxXmlNode *n = m_Node->GetChildren();
|
||||
@ -617,9 +675,9 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent,
|
||||
{
|
||||
if (children_node == NULL) children_node = GetParamNode(_T("children"));
|
||||
if (children_node == NULL) return;
|
||||
|
||||
|
||||
wxXmlNode *n = children_node->GetChildren();
|
||||
|
||||
|
||||
while (n)
|
||||
{
|
||||
if (n->GetType() == wxXML_ELEMENT_NODE)
|
||||
@ -646,7 +704,6 @@ void wxXmlResourceHandler::CreateChildren(wxObject *parent,
|
||||
|
||||
// --------------- XMLID implementation -----------------------------
|
||||
|
||||
|
||||
#define XMLID_TABLE_SIZE 1024
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user