]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/textctrl.cpp
Fix so OGL can build without wxBuffer
[wxWidgets.git] / src / os2 / textctrl.cpp
index 7aabef5045def4fe1b54f7cb2a98daa897a93d0d..87c8150bace89f7e35d3afedc41677c892bbfbc0 100644 (file)
@@ -117,37 +117,11 @@ bool wxTextCtrl::Create(
         return FALSE;
 
     wxPoint                         vPos = rPos; // The OS/2 position
+    SWP                             vSwp;
 
     if (pParent )
     {
         pParent->AddChild(this);
-        hParent = GetWinHwnd(pParent);
-        //
-        // OS2 uses normal coordinates, no bassackwards Windows ones
-        //
-        if (pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
-            pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
-           )
-        {
-            wxWindow*               pGrandParent = NULL;
-
-            pGrandParent = pParent->GetParent();
-            if (pGrandParent)
-                nTempy = pGrandParent->GetSize().y - (vPos.y + rSize.y);
-            else
-                nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
-        }
-        else
-            nTempy = pParent->GetSize().y - (vPos.y + rSize.y);
-        vPos.y = nTempy;
-    }
-    else
-    {
-        RECTL                   vRect;
-
-        ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
-        hParent = HWND_DESKTOP;
-        vPos.y = vRect.yTop - (vPos.y + rSize.y);
     }
 
     m_windowStyle = lStyle;
@@ -159,8 +133,8 @@ bool wxTextCtrl::Create(
     //
     if ( m_windowStyle & wxTE_MULTILINE )
     {
+        lSstyle |= MLS_BORDER | MLS_WORDWRAP;
         m_bIsMLE = TRUE;
-        m_windowStyle |= wxTE_PROCESS_ENTER;
 
         if ((m_windowStyle & wxTE_NO_VSCROLL) == 0)
             lSstyle |= MLS_VSCROLL;
@@ -180,10 +154,7 @@ bool wxTextCtrl::Create(
         if (m_windowStyle & wxTE_PASSWORD) // hidden input
             lSstyle |= ES_UNREADABLE;
     }
-    if ( pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)) ||
-         pParent->IsKindOf(CLASSINFO(wxScrolledWindow))
-       )
-        lSstyle |= WS_CLIPSIBLINGS;
+
     if (m_bIsMLE)
     {
         m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
@@ -229,26 +200,30 @@ bool wxTextCtrl::Create(
     //
     // Set font, position, size and initial value
     //
-    wxFont&                         vFontParent = pParent->GetFont();
-
-    if (vFontParent.Ok())
-    {
-        SetFont(vFontParent);
-    }
-    else
-    {
-        SetFont(wxSystemSettings::GetSystemFont(wxSYS_SYSTEM_FONT));
-    }
+    wxFont*                          pTextFont = new wxFont( 10
+                                                            ,wxMODERN
+                                                            ,wxNORMAL
+                                                            ,wxNORMAL
+                                                           );
+    SetFont(*pTextFont);
     if (!rsValue.IsEmpty())
     {
         SetValue(rsValue);
     }
     SetupColours();
+    //
+    // If X and/or Y are not zero the difference is the compensation value
+    // for margins for OS/2 controls.
+    //
+    ::WinQueryWindowPos(m_hWnd, &vSwp);
+    SetXComp(vSwp.x);
+    SetYComp(vSwp.y);
     SetSize( vPos.x
             ,vPos.y
             ,rSize.x
             ,rSize.y
            );
+    delete pTextFont;
     return TRUE;
 } // end of wxTextCtrl::Create
 
@@ -281,9 +256,17 @@ void wxTextCtrl::SetupColours()
 {
     wxColour                        vBkgndColour;
 
-    vBkgndColour = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_WINDOW);
+    vBkgndColour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
     SetBackgroundColour(vBkgndColour);
     SetForegroundColour(GetParent()->GetForegroundColour());
+    if (m_bIsMLE)
+    {
+        ::WinSendMsg( GetHwnd()
+                     ,MLM_SETTEXTCOLOR
+                     ,(MPARAM)GetParent()->GetForegroundColour().GetPixel()
+                     ,(MPARAM)MLE_RGB
+                    );
+    }
 } // end of wxTextCtrl::SetupColours
 
 // ----------------------------------------------------------------------------
@@ -330,7 +313,10 @@ void wxTextCtrl::WriteText(
   const wxString&                   rsValue
 )
 {
-    ::WinSetWindowText(GetHwnd(), rsValue.c_str());
+    if (m_bIsMLE)
+        ::WinSendMsg(GetHwnd(), MLM_INSERT, MPARAM((PCHAR)rsValue.c_str()), MPARAM(0));
+    else
+        ::WinSetWindowText(GetHwnd(), rsValue.c_str());
     AdjustSpaceLimit();
 } // end of wxTextCtrl::WriteText
 
@@ -965,12 +951,19 @@ WXHBRUSH wxTextCtrl::OnCtlColor(
     else
         ::GpiSetBackMix(hPS, BM_OVERPAINT);
     if (!IsEnabled() && (GetWindowStyle() & wxTE_MULTILINE) == 0)
-        vColBack = wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE);
+        vColBack = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE);
     ::GpiSetBackColor(hPS, vColBack.GetPixel());
     ::GpiSetColor(hPS, vColFore.GetPixel());
     return (WXHBRUSH)pBackgroundBrush->GetResourceHandle();
 } // end of wxTextCtrl::OnCtlColor
 
+bool wxTextCtrl::OS2ShouldPreProcessMessage(
+  WXMSG*                            pMsg
+)
+{
+    return wxControl::OS2ShouldPreProcessMessage(pMsg);
+} // end of wxTextCtrl::OS2ShouldPreProcessMessage
+
 void wxTextCtrl::OnChar(
   wxKeyEvent&                       rEvent
 )
@@ -1134,7 +1127,7 @@ wxSize wxTextCtrl::DoGetBestSize() const
 
     if (m_windowStyle & wxTE_MULTILINE)
     {
-        hText *= wxMin(GetNumberOfLines(), 5);
+        hText *= wxMax(GetNumberOfLines(), 5);
     }
     //else: for single line control everything is ok
     return wxSize(wText, hText);