// Created: 20.11.99
// RCS-ID: $Id$
// Copyright: (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence: wxWindows license
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
#endif // WX_PRECOMP
#include "wx/os2/private.h"
-
#include "wx/app.h"
-
#include "wx/os2/gdiimage.h"
+#include "wx/listimpl.cpp"
+WX_DEFINE_LIST(wxGDIImageHandlerList);
+
// ----------------------------------------------------------------------------
// private classes
// ----------------------------------------------------------------------------
);
private:
+ inline virtual bool LoadFile( wxBitmap* pBitmap
+ ,int nId
+ ,long lFlags
+ ,int nDesiredWidth
+ ,int nDesiredHeight
+ )
+ {
+ return wxBitmapHandler::LoadFile( pBitmap
+ ,nId
+ ,lFlags
+ ,nDesiredWidth
+ ,nDesiredHeight
+ );
+ }
DECLARE_DYNAMIC_CLASS(wxBMPFileHandler)
};
}
virtual bool LoadFile( wxBitmap* pBitmap
- ,const wxString& rName
- ,HPS hPs
+ ,int nId
,long lFlags
,int nDesiredWidth
,int nDesiredHeight
,int nDesiredWidth = -1
,int nDesiredHeight = -1
) = 0;
+private:
+ inline virtual bool Load( wxGDIImage* pImage
+ ,int nId
+ ,long lFlags
+ ,int nDesiredWidth
+ ,int nDesiredHeight
+ )
+ {
+ return FALSE;
+ }
};
class WXDLLEXPORT wxICOFileHandler : public wxIconHandler
#if !USE_SHARED_LIBRARIES
IMPLEMENT_DYNAMIC_CLASS(wxBMPFileHandler, wxBitmapHandler)
IMPLEMENT_DYNAMIC_CLASS(wxBMPResourceHandler, wxBitmapHandler)
- IMPLEMENT_DYNAMIC_CLASS(wxICOFileHandler, wxGDIImageHandler)
- IMPLEMENT_DYNAMIC_CLASS(wxICOResourceHandler, wxGDIImageHandler)
+ IMPLEMENT_DYNAMIC_CLASS(wxICOFileHandler, wxObject)
+ IMPLEMENT_DYNAMIC_CLASS(wxICOResourceHandler, wxObject)
#endif
-// ----------------------------------------------------------------------------
-// private functions
-// ----------------------------------------------------------------------------
-
-static wxSize GetHiconSize(WXHICON hicon);
-
// ============================================================================
// implementation
// ============================================================================
-wxList wxGDIImage::ms_handlers;
+wxGDIImageHandlerList wxGDIImage::ms_handlers;
// ----------------------------------------------------------------------------
// wxGDIImage functions forwarded to wxGDIImageRefData
const wxString& rName
)
{
- wxNode* pNode = ms_handlers.First();
+ wxGDIImageHandlerList::compatibility_iterator pNode = ms_handlers.GetFirst();
- while (pNode)
+ while ( pNode )
{
- wxGDIImageHandler* pHandler = (wxGDIImageHandler *)pNode->Data();
+ wxGDIImageHandler* pHandler = pNode->GetData();
- if (pHandler->GetName() == rName)
- return(pHandler);
- pNode = pNode->Next();
+ if ( pHandler->GetName() == rName )
+ return pHandler;
+ pNode = pNode->GetNext();
}
- return(NULL);
+ return((wxGDIImageHandler*)NULL);
}
wxGDIImageHandler* wxGDIImage::FindHandler(
, long lType
)
{
- wxNode* pNode = ms_handlers.First();
-
- while (pNode)
+ wxGDIImageHandlerList::compatibility_iterator pNode = ms_handlers.GetFirst();
+ while ( pNode )
{
- wxGDIImageHandler* pHandler = (wxGDIImageHandler *)pNode->Data();
+ wxGDIImageHandler* pHandler = pNode->GetData();
- if ((pHandler->GetExtension() = rExtension) &&
- (lType == -1 || pHandler->GetType() == lType))
+ if ( (pHandler->GetExtension() = rExtension) &&
+ (lType == -1 || pHandler->GetType() == lType) )
{
- return(pHandler);
+ return pHandler;
}
- pNode = pNode->Next();
+ pNode = pNode->GetNext();
}
- return(NULL);
+ return((wxGDIImageHandler*)NULL);
}
wxGDIImageHandler* wxGDIImage::FindHandler(
long lType
)
{
- wxNode* pNode = ms_handlers.First();
+ wxGDIImageHandlerList::compatibility_iterator pNode = ms_handlers.GetFirst();
- while (pNode)
+ while ( pNode )
{
- wxGDIImageHandler* pHandler = (wxGDIImageHandler *)pNode->Data();
+ wxGDIImageHandler* pHandler = pNode->GetData();
- if (pHandler->GetType() == lType)
+ if ( pHandler->GetType() == lType )
return pHandler;
- pNode = pNode->Next();
+ pNode = pNode->GetNext();
}
- return(NULL);
+ return((wxGDIImageHandler*)NULL);
}
void wxGDIImage::CleanUpHandlers()
{
- wxNode* pNode = ms_handlers.First();
+ wxGDIImageHandlerList::compatibility_iterator pNode = ms_handlers.GetFirst();
- while (pNode)
+ while ( pNode )
{
- wxGDIImageHandler* pHandler = (wxGDIImageHandler *)pNode->Data();
- wxNode* pNext = pNode->Next();
+ wxGDIImageHandler* pHandler = pNode->GetData();
+ wxGDIImageHandlerList::compatibility_iterator pNext = pNode->GetNext();
delete pHandler;
- delete pNode;
+ ms_handlers.Erase( pNode );
pNode = pNext;
}
}
{
AddHandler(new wxBMPResourceHandler);
AddHandler(new wxBMPFileHandler);
-
- // Not added by default: include xpmhand.h in your app
- // and call these in your wxApp::OnInit.
- // AddHandler(new wxXPMFileHandler);
- // AddHandler(new wxXPMDataHandler);
-
AddHandler(new wxICOResourceHandler);
AddHandler(new wxICOFileHandler);
}
bool wxBMPResourceHandler::LoadFile(
wxBitmap* pBitmap
-, const wxString& rName
-, HPS hPs
+, int nId
, long lFlags
, int nDesiredWidth
, int nDesiredHeight
)
{
- // TODO: load a bitmap from a file
- /*
- rBitmap->SetHBITMAP((WXHBITMAP)::LoadBitmap(wxGetInstance(), rName));
-
- wxBitmapRefData* pData = bitmap->GetBitmapData();
-
- if (pBitmap->Ok())
+ SIZEL vSize = {0, 0};
+ DEVOPENSTRUC vDop = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
+ HDC hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE);
+ HPS hPS = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIA_ASSOC);
+
+ pBitmap->SetHBITMAP((WXHBITMAP)::GpiLoadBitmap( hPS
+ ,NULLHANDLE
+ ,nId
+ ,0
+ ,0
+ ));
+ ::GpiDestroyPS(hPS);
+ ::DevCloseDC(hDC);
+
+ wxBitmapRefData* pData = pBitmap->GetBitmapData();
+
+ if ( pBitmap->Ok() )
{
- BITMAP bm;
+ BITMAPINFOHEADER vBmph;
- if ( !::GetObject(GetHbitmapOf(*pBitmap), sizeof(BITMAP), (LPSTR) &bm) )
- {
- wxLogLastError("GetObject(HBITMAP)");
- }
-
- data->m_width = bm.bmWidth;
- data->m_height = bm.bmHeight;
- data->m_depth = bm.bmBitsPixel;
- }
- else
- {
- // it's probably not found
- wxLogError(wxT("Can't load bitmap '%s' from resources! Check .rc file."),
- name.c_str());
+ ::GpiQueryBitmapParameters(GetHbitmapOf(*pBitmap), &vBmph);
+ pData->m_nWidth = vBmph.cx;
+ pData->m_nHeight = vBmph.cy;
+ pData->m_nDepth = vBmph.cBitCount;
}
-
- return bitmap->Ok();
- */
- return(FALSE);
-}
+ return(pBitmap->Ok());
+} // end of wxBMPResourceHandler::LoadFile
bool wxBMPFileHandler::LoadFile(
wxBitmap* pBitmap
// actual size
wxSize vSize;
- // TODO: load icon directly from a file
- /*
-#ifdef __WIN32__
- HICON hicon = ::ExtractIcon(wxGetInstance(), name, first);
- if ( !hicon )
- {
- wxLogSysError(_T("Failed to load icon from the file '%s'"),
- name.c_str());
-
- return FALSE;
- }
-
- size = GetHiconSize(hicon);
-#else // Win16
- HICON hicon = ReadIconFile((wxChar *)name.c_str(),
- wxGetInstance(),
- &size.x, &size.y);
-#endif // Win32/Win16
-
- if ( (desiredWidth != -1 && desiredWidth != size.x) ||
- (desiredHeight != -1 && desiredHeight != size.y) )
- {
- wxLogDebug(_T("Returning FALSE from wxICOFileHandler::Load because "
- "of the size mismatch: actual (%d, %d), "
- "requested (%d, %d)"),
- size.x, size.y,
- desiredWidth, desiredHeight);
-
- ::DestroyIcon(hicon);
-
- return FALSE;
- }
-
- icon->SetHICON((WXHICON)hicon);
- icon->SetSize(size.x, size.y);
-
- return icon->Ok();
- */
return(FALSE);
#else
return(FALSE);
, const wxString& rName
, HPS hPs
, long lFlags
-, int nDesiredWidth
-, int nDesiredHeight
+, int WXUNUSED(nDesiredWidth)
+, int WXUNUSED(nDesiredHeight)
)
{
- // TODO: load icon from a file
- /*
- HICON hicon;
+ HPOINTER hIcon;
-#if defined(__WIN32__) && !defined(__SC__)
- if ( desiredWidth != -1 && desiredHeight != -1 )
- {
- hicon = (HICON)::LoadImage(wxGetInstance(), name, IMAGE_ICON,
- desiredWidth, desiredHeight,
- LR_DEFAULTCOLOR);
- }
- else
-#endif // Win32
- {
- hicon = ::LoadIcon(wxGetInstance(), name);
- }
-
- wxSize size = GetHiconSize(hicon);
- icon->SetSize(size.x, size.y);
-
- // Override the found values with desired values
- if ( desiredWidth > -1 && desiredHeight > -1 )
- {
- icon->SetSize(desiredWidth, desiredHeight);
- }
+ hIcon = ::WinLoadFileIcon( (PSZ)rName.c_str()
+ ,TRUE // load for private use
+ );
- icon->SetHICON((WXHICON)hicon);
+ pIcon->SetSize(32, 32); // all OS/2 icons are 32 x 32
- return icon->Ok();
- */
- return(FALSE);
-}
-
-// ----------------------------------------------------------------------------
-// private functions
-// ----------------------------------------------------------------------------
-static wxSize GetHiconSize(
- WXHICON hicon
-)
-{
- wxSize vSize(32, 32); // default
+ pIcon->SetHICON((WXHICON)hIcon);
- // all OS/2 icons are 32x32
- return(vSize);
-}
+ return pIcon->Ok();
+} // end of wxICOResourceHandler::LoadIcon