X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aa21388719bc324227895bd2f1328d533dc130e2..78ca56690e93e14af43f5b6f090f474a0ff7d736:/src/os2/gdiimage.cpp diff --git a/src/os2/gdiimage.cpp b/src/os2/gdiimage.cpp index d3b1965074..a3ccae8a11 100644 --- a/src/os2/gdiimage.cpp +++ b/src/os2/gdiimage.cpp @@ -6,7 +6,7 @@ // Created: 20.11.99 // RCS-ID: $Id$ // Copyright: (c) 1999 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -30,9 +30,7 @@ #endif // WX_PRECOMP #include "wx/os2/private.h" - #include "wx/app.h" - #include "wx/os2/gdiimage.h" // ---------------------------------------------------------------------------- @@ -64,6 +62,20 @@ public: ); 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) }; @@ -77,8 +89,7 @@ public: } virtual bool LoadFile( wxBitmap* pBitmap - ,const wxString& rName - ,HPS hPs + ,int nId ,long lFlags ,int nDesiredWidth ,int nDesiredHeight @@ -148,6 +159,16 @@ protected: ,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 @@ -199,8 +220,8 @@ private: #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 // ---------------------------------------------------------------------------- @@ -335,7 +356,9 @@ void wxGDIImage::CleanUpHandlers() wxNode* pNext = pNode->Next(); delete pHandler; +#if (!(defined(__VISAGECPP__) && (__IBMCPP__ < 400 || __IBMC__ < 400 ))) delete pNode; +#endif pNode = pNext; } } @@ -344,12 +367,6 @@ void wxGDIImage::InitStandardHandlers() { 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); } @@ -360,43 +377,39 @@ void wxGDIImage::InitStandardHandlers() 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; - - if ( !::GetObject(GetHbitmapOf(*pBitmap), sizeof(BITMAP), (LPSTR) &bm) ) - { - wxLogLastError("GetObject(HBITMAP)"); - } + BITMAPINFOHEADER vBmph; - data->m_width = bm.bmWidth; - data->m_height = bm.bmHeight; - data->m_depth = bm.bmBitsPixel; + ::GpiQueryBitmapParameters(GetHbitmapOf(*pBitmap), &vBmph); + pData->m_nWidth = vBmph.cx; + pData->m_nHeight = vBmph.cy; + pData->m_nDepth = vBmph.cBitCount; } - else - { - // it's probably not found - wxLogError(wxT("Can't load bitmap '%s' from resources! Check .rc file."), - name.c_str()); - } - - return bitmap->Ok(); - */ - return(FALSE); -} + return(pBitmap->Ok()); +} // end of wxBMPResourceHandler::LoadFile bool wxBMPFileHandler::LoadFile( wxBitmap* pBitmap @@ -469,44 +482,6 @@ bool wxICOFileHandler::LoadIcon( // 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); @@ -518,42 +493,23 @@ bool wxICOResourceHandler::LoadIcon( , 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); - } + hIcon = ::WinLoadFileIcon( (PSZ)rName.c_str() + ,TRUE // load for private use + ); - wxSize size = GetHiconSize(hicon); - icon->SetSize(size.x, size.y); + pIcon->SetSize(32, 32); // all OS/2 icons are 32 x 32 - // Override the found values with desired values - if ( desiredWidth > -1 && desiredHeight > -1 ) - { - icon->SetSize(desiredWidth, desiredHeight); - } - icon->SetHICON((WXHICON)hicon); + pIcon->SetHICON((WXHICON)hIcon); - return icon->Ok(); - */ - return(FALSE); -} + return pIcon->Ok(); +} // end of wxICOResourceHandler::LoadIcon // ---------------------------------------------------------------------------- // private functions