]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/statbmp.cpp
don't pass negative height to wxWindow::SetSize(), this results in GTK+ warnings
[wxWidgets.git] / src / os2 / statbmp.cpp
index 5d523be4ffd9fb8f72fc31d458580724b3acee00..dd3aff216347f511e5edb6cb526e62208b4e2422 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        statbmp.cpp
+// Name:        src/os2/statbmp.cpp
 // Purpose:     wxStaticBitmap
 // Author:      David Webster
 // Modified by:
 // Purpose:     wxStaticBitmap
 // Author:      David Webster
 // Modified by:
@@ -9,29 +9,31 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "statbmp.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
-#include "wx/window.h"
-#include "wx/os2/private.h"
+#include "wx/statbmp.h"
 
 #ifndef WX_PRECOMP
     #include "wx/icon.h"
 
 #ifndef WX_PRECOMP
     #include "wx/icon.h"
-    #include "wx/statbmp.h"
+    #include "wx/window.h"
+    #include "wx/dcclient.h"
 #endif
 
 #endif
 
+#include "wx/os2/private.h"
+
 #include <stdio.h>
 
 // ---------------------------------------------------------------------------
 #include <stdio.h>
 
 // ---------------------------------------------------------------------------
-// macors
+// macros
 // ---------------------------------------------------------------------------
 
 IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl)
 
 // ---------------------------------------------------------------------------
 
 IMPLEMENT_DYNAMIC_CLASS(wxStaticBitmap, wxControl)
 
+BEGIN_EVENT_TABLE(wxStaticBitmap, wxWindow)
+    EVT_PAINT(wxStaticBitmap::OnPaint)
+END_EVENT_TABLE()
+
 static wxGDIImage* ConvertImage(
   const wxGDIImage&                 rBitmap
 )
 static wxGDIImage* ConvertImage(
   const wxGDIImage&                 rBitmap
 )
@@ -64,15 +66,13 @@ static wxGDIImage* ConvertImage(
 //  wxStaticBitmap
 // ---------------------------------------------------------------------------
 
 //  wxStaticBitmap
 // ---------------------------------------------------------------------------
 
-bool wxStaticBitmap::Create(
-  wxWindow*                         pParent
-, wxWindowID                        nId
-, const wxGDIImage&                 rBitmap
-, const wxPoint&                    rPos
-, const wxSize&                     rSize
-, long                              lStyle
-, const wxString&                   rName
-)
+bool wxStaticBitmap::Create( wxWindow*         pParent,
+                             wxWindowID        nId,
+                             const wxGDIImage& rBitmap,
+                             const wxPoint&    rPos,
+                             const wxSize&     WXUNUSED(rSize),
+                             long              lStyle,
+                             const wxString&   rName )
 {
     ERRORID                         vError;
     wxString                        sError;
 {
     ERRORID                         vError;
     wxString                        sError;
@@ -92,8 +92,6 @@ bool wxStaticBitmap::Create(
 
     int                             nX= rPos.x;
     int                             nY = rPos.y;
 
     int                             nX= rPos.x;
     int                             nY = rPos.y;
-    int                             nWidth = rSize.x;
-    int                             nHeight = rSize.y;
     char                            zId[16];
 
     m_windowStyle = lStyle;
     char                            zId[16];
 
     m_windowStyle = lStyle;
@@ -105,9 +103,8 @@ bool wxStaticBitmap::Create(
     //
     int                             nWinstyle = SS_ICON;
 
     //
     int                             nWinstyle = SS_ICON;
 
-    sprintf(zId, "#%d", rBitmap.GetId());
     m_hWnd = (WXHWND)::WinCreateWindow( pParent->GetHWND()
     m_hWnd = (WXHWND)::WinCreateWindow( pParent->GetHWND()
-                                       ,WC_STATIC
+                                       ,(PSZ)wxCanvasClassName
                                        ,zId
                                        ,nWinstyle | WS_VISIBLE
                                        ,0,0,0,0
                                        ,zId
                                        ,nWinstyle | WS_VISIBLE
                                        ,0,0,0,0
@@ -121,15 +118,20 @@ bool wxStaticBitmap::Create(
     {
         vError = ::WinGetLastError(wxGetInstance());
         sError = wxPMErrorToStr(vError);
     {
         vError = ::WinGetLastError(wxGetInstance());
         sError = wxPMErrorToStr(vError);
-        return FALSE;
+        return false;
     }
     }
-    wxCHECK_MSG( m_hWnd, FALSE, wxT("Failed to create static bitmap") );
+    wxCHECK_MSG( m_hWnd, false, wxT("Failed to create static bitmap") );
     m_pImage = ConvertImage(rBitmap);
     m_pImage = ConvertImage(rBitmap);
-    m_pImage->SetHandle((WXHWND)::WinSendMsg(m_hWnd, SM_QUERYHANDLE, (MPARAM)0, (MPARAM)0));
+    ::WinSendMsg(   m_hWnd,
+                    SM_SETHANDLE,
+                    MPFROMHWND(rBitmap.GetHandle()),
+                    (MPARAM)0);
 
     // Subclass again for purposes of dialog editing mode
     SubclassWin(m_hWnd);
 
     // Subclass again for purposes of dialog editing mode
     SubclassWin(m_hWnd);
-    return(TRUE);
+    SetSize(nX, nY, m_pImage->GetWidth(), m_pImage->GetHeight());
+
+    return true;
 } // end of wxStaticBitmap::Create
 
 bool wxStaticBitmap::ImageIsOk() const
 } // end of wxStaticBitmap::Create
 
 bool wxStaticBitmap::ImageIsOk() const
@@ -153,14 +155,33 @@ wxSize wxStaticBitmap::DoGetBestSize() const
     return wxWindow::DoGetBestSize();
 }
 
     return wxWindow::DoGetBestSize();
 }
 
-void wxStaticBitmap::SetImage(
-  const wxGDIImage&                 rBitmap
-)
+void wxStaticBitmap::OnPaint ( wxPaintEvent& WXUNUSED(rEvent) )
+{
+    wxPaintDC vDc(this);
+    wxBitmap* pBitmap;
+
+    if (m_pImage->IsKindOf(CLASSINFO(wxIcon)))
+    {
+        wxIcon*                     pIcon;
+
+        pIcon = wxDynamicCast(m_pImage, wxIcon);
+        pBitmap = new wxBitmap(*pIcon);
+        vDc.DrawBitmap(*pBitmap, 0, 0);
+        delete pBitmap;
+    }
+    else
+    {
+        pBitmap = wxDynamicCast(m_pImage, wxBitmap);
+        vDc.DrawBitmap(*pBitmap, 0, 0);
+    }
+} // end of wxStaticBitmap::OnPaint
+
+void wxStaticBitmap::SetImage( const wxGDIImage& rBitmap )
 {
 {
-    int                             nX = 0;
-    int                             nY = 0;
-    int                             nWidth = 0;
-    int                             nHeight = 0;
+    int nX = 0;
+    int nY = 0;
+    int nWidth = 0;
+    int nHeight = 0;
 
     Free();
     ::WinSendMsg( GetHwnd()
 
     Free();
     ::WinSendMsg( GetHwnd()
@@ -172,13 +193,15 @@ void wxStaticBitmap::SetImage(
 
     GetPosition(&nX, &nY);
     GetSize(&nWidth, &nHeight);
 
     GetPosition(&nX, &nY);
     GetSize(&nWidth, &nHeight);
+    // Convert to OS/2 coordinate system
+    nY = wxWindow::GetOS2ParentHeight(GetParent()) - nY - nHeight;
 
     RECTL                           vRect;
 
     vRect.xLeft   = nX;
 
     RECTL                           vRect;
 
     vRect.xLeft   = nX;
-    vRect.yTop    = nY;
+    vRect.yTop    = nY + nHeight;
     vRect.xRight  = nX + nWidth;
     vRect.xRight  = nX + nWidth;
-    vRect.yBottom = nY + nHeight;
+    vRect.yBottom = nY;
 
     ::WinInvalidateRect(GetHwndOf(GetParent()), &vRect, TRUE);
 }
 
     ::WinInvalidateRect(GetHwndOf(GetParent()), &vRect, TRUE);
 }