//#include "wx/msw/dib.h"
#include "wx/image.h"
+#include "wx/xpmdecod.h"
// ----------------------------------------------------------------------------
// macros
SetHBITMAP((WXHBITMAP)hBmp);
} // end of wxBitmap::wxBitmap
-//
-// Create from XPM data
-//
-wxBitmap::wxBitmap(
- char** ppData
-)
-{
- Init();
-
- (void)Create( (void *)ppData
- ,wxBITMAP_TYPE_XPM_DATA
- ,0
- ,0
- ,0
- );
-} // end of wxBitmap::wxBitmap
-
-wxBitmap::wxBitmap(
- const char** ppData
-)
-{
- Init();
-
- (void)Create( (void *)ppData
- ,wxBITMAP_TYPE_XPM_DATA
- ,0
- ,0
- ,0
- );
-} // end of wxBitmap::wxBitmap
-
wxBitmap::wxBitmap(
int nW
, int nH
return Ok();
} // end of wxBitmap::Create
+bool wxBitmap::CreateFromXpm(
+ const char** ppData
+)
+{
+#if wxUSE_IMAGE && wxUSE_XPM
+ Init();
+
+ wxCHECK_MSG(ppData != NULL, FALSE, wxT("invalid bitmap data"))
+
+ wxXPMDecoder vDecoder;
+ wxImage vImg = vDecoder.ReadData(ppData);
+
+ wxCHECK_MSG(vImg.Ok(), FALSE, wxT("invalid bitmap data"))
+
+ *this = wxBitmap(vImg);
+ return TRUE;
+#else
+ return FALSE;
+#endif
+} // end of wxBitmap::CreateFromXpm
+
bool wxBitmap::LoadFile(
const wxString& rFilename
, long lType
wxImage wxBitmap::ConvertToImage() const
{
wxImage image;
-
+
wxCHECK_MSG( Ok(), wxNullImage, wxT("invalid bitmap") );
// create an wxImage object
#include "wx/os2/private.h"
#include "wx/app.h"
-#include "wx/xpmhand.h"
#include "wx/os2/gdiimage.h"
// ----------------------------------------------------------------------------
{
AddHandler(new wxBMPResourceHandler);
AddHandler(new wxBMPFileHandler);
-
-#if wxUSE_XPM_IN_OS2
- AddHandler(new wxXPMFileHandler);
- AddHandler(new wxXPMDataHandler);
-#endif
-
AddHandler(new wxICOResourceHandler);
AddHandler(new wxICOFileHandler);
}
..\os2\$D\utils.obj \
..\os2\$D\utilsexc.obj \
..\os2\$D\wave.obj \
- ..\os2\$D\window.obj \
- ..\os2\$D\xpmhand.obj
+ ..\os2\$D\window.obj
OS2LIBOBJS1 = \
accel.obj \
utils.obj \
utilsexc.obj \
wave.obj \
- window.obj \
- xpmhand.obj
+ window.obj
HTMLOBJS = \
..\html\$D\helpctrl.obj \
OBJECTS = $(COMMONOBJS) $(GENERICOBJS) $(HTMLOBJS) $(NONESSENTIALOBJS) $(OS2OBJS)
# Normal, static library
-all: $(WXDIR)\include\wx\setup.h $(DUMMYOBJ) $(OBJECTS) $(PERIPH_TARGET) zlib png jpeg xpm tiff $(LIBTARGET)
+all: $(WXDIR)\include\wx\setup.h $(DUMMYOBJ) $(OBJECTS) $(PERIPH_TARGET) zlib png jpeg tiff $(LIBTARGET)
dirs: $(OS2DIR)\$D $(COMMDIR)\$D $(GENDIR)\$D $(HTMLDIR)\$D
copy ..\os2\$D\utilsexc.obj
copy ..\os2\$D\wave.obj
copy ..\os2\$D\window.obj
- copy ..\os2\$D\xpmhand.obj
# wxWindows library as DLL
dll:
nmake -f makefile.va clean
cd $(WXDIR)\src\os2
-xpm:
- cd $(WXDIR)\src\xpm
- nmake -f makefile.va FINAL=$(FINAL) DLL=$(DLL) WXMAKINGDLL=$(WXMAKINGDLL)
- cd $(WXDIR)\src\os2
-
-clean_xpm:
- cd $(WXDIR)\src\xpm
- nmake -f makefile.va clean
- cd $(WXDIR)\src\os2
-
tiff:
cd $(WXDIR)\src\tiff
nmake -f makefile.va FINAL=$(FINAL) DLL=$(DLL) WXMAKINGDLL=$(WXMAKINGDLL)
CODE LOADONCALL
EXPORTS
-;From library: H:\Dev\Wx2\WxWindows\lib\wx.lib
+;From library: F:\DEV\WX2\WXWINDOWS\LIB\wx.lib
;From object file: dummy.cpp
;PUBDEFs (Symbols available from object file):
wxDummyChar
wxEVT_NC_LEFT_DCLICK
wxEVT_INIT_DIALOG
wxEVT_COMMAND_SET_FOCUS
- ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\extended.c
+ ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\extended.c
;PUBDEFs (Symbols available from object file):
ConvertToIeeeExtended
ConvertFromIeeeExtended
Read32__17wxTextInputStreamFv
;wxTextInputStream::SkipIfEndOfLine(char)
SkipIfEndOfLine__17wxTextInputStreamFc
- ;From object file: H:\DEV\WX2\WXWINDOWS\src\common\unzip.c
+ ;From object file: F:\DEV\WX2\WXWINDOWS\src\common\unzip.c
;PUBDEFs (Symbols available from object file):
unzReadCurrentFile
unzGetCurrentFileInfo
OnSetCursor__16wxSplitterWindowFR16wxSetCursorEvent
;wxSplitterWindow::DoSplit(wxSplitMode,wxWindow*,wxWindow*,int)
DoSplit__16wxSplitterWindowF11wxSplitModeP8wxWindowT2i
+ ;wxSplitterWindow::SetMinimumPaneSize(int)
+ SetMinimumPaneSize__16wxSplitterWindowFi
;wxSplitterWindow::DrawSashTracker(int,int)
DrawSashTracker__16wxSplitterWindowFiT1
;wxConstructorForwxSplitterWindow()
OnIdle__16wxSplitterWindowFR11wxIdleEvent
;wxSplitterWindow::OnDoubleClick(wxSplitterEvent&)
OnDoubleClick__16wxSplitterWindowFR15wxSplitterEvent
+ ;wxSplitterWindow::DoSetSashPosition(int)
+ DoSetSashPosition__16wxSplitterWindowFi
;wxSplitterWindow::Init()
Init__16wxSplitterWindowFv
;wxSplitterWindow::GetEventTable() const
wxInvertMask__FUliT2
;wxMask::wxMask()
__ct__6wxMaskFv
- ;wxBitmap::wxBitmap(const char**)
- __ct__8wxBitmapFPPCc
;wxMask::sm_classwxMask
sm_classwxMask__6wxMask
__vft8wxBitmap8wxObject
wxConstructorForwxBitmap__Fv
;wxConstructorForwxMask()
wxConstructorForwxMask__Fv
- ;wxBitmap::wxBitmap(char**)
- __ct__8wxBitmapFPPc
+ ;wxBitmap::CreateFromXpm(const char**)
+ CreateFromXpm__8wxBitmapFPPCc
;wxBitmap::SetMask(wxMask*)
SetMask__8wxBitmapFP6wxMask
;From object file: ..\os2\bmpbuttn.cpp
SetTitle__8wxWindowFRC8wxString
;wxWindow::sm_eventTableEntries
sm_eventTableEntries__8wxWindow
- ;From object file: ..\os2\xpmhand.cpp
- ;PUBDEFs (Symbols available from object file):
- ;wxXPMDataHandler::Create(wxBitmap*,void*,long,int,int,int)
- Create__16wxXPMDataHandlerFP8wxBitmapPvliN24
- __vft16wxXPMDataHandler8wxObject
- ;wxConstructorForwxXPMFileHandler()
- wxConstructorForwxXPMFileHandler__Fv
- __vft16wxXPMFileHandler8wxObject
- ;wxConstructorForwxXPMDataHandler()
- wxConstructorForwxXPMDataHandler__Fv
- ;wxXPMFileHandler::LoadFile(wxBitmap*,const wxString&,long,int,int)
- LoadFile__16wxXPMFileHandlerFP8wxBitmapRC8wxStringliT4
- ;wxXPMFileHandler::SaveFile(wxBitmap*,const wxString&,int,const wxPalette*)
- SaveFile__16wxXPMFileHandlerFP8wxBitmapRC8wxStringiPC9wxPalette
- ;wxXPMDataHandler::sm_classwxXPMDataHandler
- sm_classwxXPMDataHandler__16wxXPMDataHandler
- ;wxXPMFileHandler::sm_classwxXPMFileHandler
- sm_classwxXPMFileHandler__16wxXPMFileHandler
+++ /dev/null
-/////////////////////////////////////////////////////////////////////////////
-// Name: os2/xpmhand.cpp
-// Purpose: wxBitmap: XPM handler and constructors
-// Author: Julian Smart
-// Modified for OS/2 by: Evgeny Kotsuba
-// Created: 04/01/98
-// RCS-ID: $Id$
-// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifdef __GNUG__
- #pragma implementation "xpmhand.h"
-#endif
-
-// For compilers that support precompilation, includes "wx.h".
-//#include "wx/wxprec.h"
-
-#ifdef __BORLANDC__
- #pragma hdrstop
-#endif
-
-#ifndef WX_PRECOMP
- #include "wx/list.h"
- #include "wx/utils.h"
- #include "wx/app.h"
- #include "wx/palette.h"
- #include "wx/dcmemory.h"
- #include "wx/bitmap.h"
- #include "wx/icon.h"
-#endif
-
-#include "wx/os2/private.h"
-#include "wx/log.h"
-
-
-#if wxUSE_XPM_IN_OS2
- #define FOR_MSW 1
- #include "xpm.h"
-#endif
-
-#include "wx/xpmhand.h"
-
-#if wxUSE_XPM_IN_OS2
-
-static void XpmToBitmap(
- wxBitmap* pBitmap
-, const XImage* pXimage
-, const XImage* pXmask
-, const XpmAttributes& rXpmAttr
-)
-{
- wxBitmapRefData* pRefData = pBitmap->GetBitmapData();
- pRefData->m_hBitmap = (WXHBITMAP)pXimage->bitmap;
-
- //
- // First set the bitmap width, height, depth...
- //
- BITMAPINFOHEADER vBm;
-
- if (!::GpiQueryBitmapParameters( GetHbitmapOf(*pBitmap)
- ,&vBm
- ))
- {
- wxLogLastError(wxT("GetObject(pBitmap)"));
- }
-
- pRefData->m_nWidth = vBm.cx;
- pRefData->m_nHeight = vBm.cy;
- pRefData->m_nDepth = vBm.cPlanes * vBm.cBitCount;
- pRefData->m_nNumColors = rXpmAttr.npixels;
-
- if (pXmask)
- {
- wxMask* pMask = new wxMask();
-
- pMask->SetMaskBitmap((WXHBITMAP) wxInvertMask( pXmask->bitmap
- ,vBm.cx
- ,vBm.cy
- ));
- pBitmap->SetMask(pMask);
- }
-} // end of XpmToBitmap
-
-IMPLEMENT_DYNAMIC_CLASS(wxXPMFileHandler, wxBitmapHandler)
-
-bool wxXPMFileHandler::LoadFile(
- wxBitmap* pBitmap
-, const wxString& rName
-, long lFlags
-, int lDesiredWidth
-, int lDesiredHeight
-)
-{
- XImage* pXimage = NULL;
- XImage* pXmask = NULL;
- XpmAttributes vXpmAttr;
- HDC hDC;
- HPS hPS;
- DEVOPENSTRUC dOP = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
- SIZEL vSizl;
-
- hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&dOP, NULLHANDLE);
- hPS = ::GpiCreatePS(vHabmain, hDC, &vSizl, PU_PELS | GPIT_MICRO | GPIA_ASSOC);
- if (hPS)
- {
- vXpmAttr.valuemask = XpmReturnPixels | XpmColorTable;
-
- int nErrorStatus = XpmReadFileToImage( &hPS
- ,wxMBSTRINGCAST rName.fn_str()
- ,&pXimage
- ,&pXmask
- ,&vXpmAttr
- );
- ::GpiDestroyPS(hPS);
- ::DevCloseDC(hDC);
- if (nErrorStatus == XpmSuccess)
- {
- XpmToBitmap( pBitmap
- ,pXimage
- ,pXmask
- ,vXpmAttr
- );
- XpmFree(vXpmAttr.pixels);
- XpmFreeAttributes(&vXpmAttr);
- XImageFree(pXimage);
- if (pXmask)
- XDestroyImage(pXmask);
- }
- return pBitmap->Ok();
- }
- return FALSE;
-} // end of wxXPMFileHandler::LoadFile
-
-bool wxXPMFileHandler::SaveFile(
- wxBitmap* pBitmap
-, const wxString& rName
-, int lType
-, const wxPalette* pPalette
-)
-{
- XImage vXimage;
- XImage vXmask;
- bool bHasmask = FALSE;
- HDC hDC;
- HPS hPS;
- DEVOPENSTRUC dOP = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
- SIZEL vSizl;
-
- hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&dOP, NULLHANDLE);
- hPS = ::GpiCreatePS(vHabmain, hDC, &vSizl, PU_PELS | GPIT_MICRO | GPIA_ASSOC);
- if (hPS)
- {
- // fill the XImage struct 'by hand'
- wxBitmapRefData* pRefData = pBitmap->GetBitmapData();
-
- vXimage.width = pRefData->m_nWidth;
- vXimage.height = pRefData->m_nHeight;
- vXimage.depth = pRefData->m_nDepth;
- vXimage.bitmap = (HBITMAP)pRefData->m_hBitmap;
-
- bHasmask = (pRefData->m_pBitmapMask != NULL);
- if (bHasmask)
- {
- //
- // Strangely enough, the MSW version of xpmlib is not
- // coherent with itself regarding masks; we have to invert
- // the mask we get when loading, but we still must pass it
- // 'as is' when saving...
- //
- vXmask.bitmap = (HBITMAP)pRefData->m_pBitmapMask->GetMaskBitmap();
- vXmask.width = pRefData->m_nWidth;
- vXmask.height = pRefData->m_nHeight;
- vXmask.depth = 1;
- }
-
- int nErrorStatus = XpmWriteFileFromImage( &hPS
- ,wxMBSTRINGCAST rName.fn_str()
- ,&vXimage
- ,(bHasmask? &vXmask : (XImage *)NULL)
- ,(XpmAttributes *) NULL
- );
- ::GpiDestroyPS(hPS);
- ::DevCloseDC(hDC);
- return (nErrorStatus == XpmSuccess);
- }
- return FALSE;
-} // end of wxXPMFileHandler::SaveFile
-
-IMPLEMENT_DYNAMIC_CLASS(wxXPMDataHandler, wxBitmapHandler)
-
-bool wxXPMDataHandler::Create(
- wxBitmap* pBitmap
-, void* pData
-, long lFlags
-, int nWidth
-, int nHeight
-, int nDepth
-)
-{
- XImage* pXimage = NULL;
- XImage* pXmask = NULL;
- XpmAttributes vXpmAttr;
- HDC hDC;
- HPS hPS;
- DEVOPENSTRUC dOP = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
- SIZEL vSizl;
-
- hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&dOP, NULLHANDLE);
- hPS = ::GpiCreatePS(vHabmain, hDC, &vSizl, PU_PELS | GPIT_MICRO | GPIA_ASSOC);
- if (hPS)
- {
- vXpmAttr.valuemask = XpmReturnInfos | XpmColorTable;
-
- int nErrorStatus = XpmCreateImageFromData( &hPS
- ,(char **)pData
- ,&pXimage
- ,&pXmask
- ,&vXpmAttr
- );
- ::GpiDestroyPS(hPS);
- ::DevCloseDC(hDC);
- if (nErrorStatus == XpmSuccess)
- {
- XpmToBitmap( pBitmap
- ,pXimage
- ,pXmask
- ,vXpmAttr
- );
- XpmFree(vXpmAttr.pixels);
- XpmFreeAttributes(&vXpmAttr);
- XImageFree(pXimage); // releases the malloc, but does not destroy bitmap
- if (pXmask)
- XDestroyImage(pXmask);
- }
- return pBitmap->Ok();
- }
- return FALSE;
-} // end of wxXPMDataHandler::Create
-
-#endif // wxUSE_XPM_IN_OS2