]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/window.cpp
Remvoed a yield in HitTest because of undesirable consequences
[wxWidgets.git] / src / os2 / window.cpp
index d5489b0daff80bd624197d058bc39c7d5c261522..94d3060d5e1b3deb8e471ee948d0762c3fc60343 100644 (file)
@@ -329,6 +329,7 @@ bool wxWindow::Create(
 )
 {
     HWND                            hParent = NULLHANDLE;
+    wxPoint                         vPos = rPos; // The OS/2 position
 
     wxCHECK_MSG(pParent, FALSE, wxT("can't create wxWindow without parent"));
 
@@ -346,9 +347,19 @@ bool wxWindow::Create(
     {
         pParent->AddChild(this);
         hParent = GetWinHwnd(pParent);
+        //
+        // OS2 uses normal coordinates, no bassackwards Windows ones
+        //
+        vPos.y = pParent->GetSize().y - (vPos.y + rSize.y);
     }
     else
-       hParent = HWND_DESKTOP;
+    {
+        RECTL                   vRect;
+
+        ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
+        hParent = HWND_DESKTOP;
+        vPos.y = vRect.yTop - (vPos.y + rSize.y);
+    }
 
     ULONG                           ulCreateFlags = 0L;
 
@@ -382,8 +393,8 @@ bool wxWindow::Create(
               ,(PSZ)wxCanvasClassName
               ,rName.c_str()
               ,ulCreateFlags
-              ,rPos.x
-              ,rPos.y
+              ,vPos.x
+              ,vPos.y
               ,WidthDefault(rSize.x)
               ,HeightDefault(rSize.y)
               ,NULLHANDLE
@@ -1984,7 +1995,6 @@ MRESULT wxWindow::OS2WindowProc(
         case WM_MEASUREITEM:
             {
                 int                 nIdCtrl = (UINT)wParam;
-                char                zMsg[128];
 
                 if ( uMsg == WM_DRAWITEM )
                 {
@@ -2664,6 +2674,8 @@ bool wxWindow::OS2OnDrawItem(
     //
     if (vId == 0)
     {
+        ERRORID                     vError;
+        wxString                    sError;
         POWNERITEM                  pMeasureStruct = (POWNERITEM)pItemStruct;
         wxFrame*                    pFrame = (wxFrame*)this;
         wxMenuItem*                 pMenuItem = pFrame->GetMenuBar()->FindItem(pMeasureStruct->idItem, pMeasureStruct->hItem);
@@ -2677,6 +2689,36 @@ bool wxWindow::OS2OnDrawItem(
                    ,FALSE
                   );
         vDc.SetHPS(pMeasureStruct->hps);
+        //
+        // Load the wxWindows Pallete and set to RGB mode
+        //
+        if (!::GpiCreateLogColorTable( pMeasureStruct->hps
+                                      ,0L
+                                      ,LCOLF_CONSECRGB
+                                      ,0L
+                                      ,(LONG)wxTheColourDatabase->m_nSize
+                                      ,(PLONG)wxTheColourDatabase->m_palTable
+                                     ))
+        {
+            vError = ::WinGetLastError(vHabmain);
+            sError = wxPMErrorToStr(vError);
+            wxLogError("Unable to set current color table. Error: %s\n", sError);
+        }
+        //
+        // Set the color table to RGB mode
+        //
+        if (!::GpiCreateLogColorTable( pMeasureStruct->hps
+                                      ,0L
+                                      ,LCOLF_RGB
+                                      ,0L
+                                      ,0L
+                                      ,NULL
+                                     ))
+        {
+            vError = ::WinGetLastError(vHabmain);
+            sError = wxPMErrorToStr(vError);
+            wxLogError("Unable to set current color table. Error: %s\n", sError);
+        }
 
         wxCHECK( pMenuItem->IsKindOf(CLASSINFO(wxMenuItem)), FALSE );
 
@@ -2720,11 +2762,32 @@ bool wxWindow::OS2OnDrawItem(
         }
         else
         {
-            //
-            // For now we don't care about doing our own highlighting so we'll
-            // just ignore the entie message!
-            //
-            return TRUE;
+            if (pMeasureStruct->fsAttribute & MIA_HILITED)
+            {
+                eAction = wxOwnerDrawn::wxODDrawAll;
+                eStatus |= wxOwnerDrawn::wxODSelected;
+                //
+                // Keep the system from trying to highlight with its bogus colors
+                //
+                pMeasureStruct->fsAttributeOld = pMeasureStruct->fsAttribute &= ~MIA_HILITED;
+            }
+            else if (!(pMeasureStruct->fsAttribute & MIA_HILITED))
+            {
+                eAction = wxOwnerDrawn::wxODDrawAll;
+                eStatus = 0;
+                //
+                // Keep the system from trying to highlight with its bogus colors
+                //
+                pMeasureStruct->fsAttribute = pMeasureStruct->fsAttributeOld &= ~MIA_HILITED;
+            }
+            else
+            {
+                //
+                // For now we don't care about anything else
+                // just ignore the entire message!
+                //
+                return TRUE;
+            }
         }
         //
         // Now redraw the item
@@ -2785,7 +2848,7 @@ bool wxWindow::OS2OnMeasureItem(
             return FALSE;
         }
     }
-    wxWindow*                      pItem = FindItem(id);
+    wxWindow*                      pItem = FindItem(lId);
 
     if (pItem && pItem->IsKindOf(CLASSINFO(wxControl)))
     {