X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3c299c3ab663257429983c24e6fb71450f3cf9f1..7ea1c917764fb2588fe1aadc75c49ba300f8cb2f:/src/os2/gauge.cpp?ds=inline diff --git a/src/os2/gauge.cpp b/src/os2/gauge.cpp index b227ebf692..972246d597 100644 --- a/src/os2/gauge.cpp +++ b/src/os2/gauge.cpp @@ -14,6 +14,7 @@ #ifndef WX_PRECOMP #include "wx/defs.h" #include "wx/utils.h" +#include "wx/scrolwin.h" #endif #include "wx/os2/private.h" @@ -36,12 +37,10 @@ MRESULT EXPENTRY wxGaugeWndProc( wxGauge* pGauge = (wxGauge *)::WinQueryWindowULong( hWnd ,QWL_USER ); - wxWindowOS2* pWindow = NULL; - MRESULT rc = (MRESULT)0; - bool bProcessed = FALSE; HPS hPS; RECTL vRect; RECTL vRect2; + RECTL vRect3; double dPixelToRange = 0.0; double dRange = 0.0; @@ -69,28 +68,55 @@ MRESULT EXPENTRY wxGaugeWndProc( ,0L ,NULL ); + // + // Draw the guage box + // + LONG lColor = 0x00FFFFFF; // White + POINTL vPoint = {vRect.xLeft + 1, vRect.yBottom + 1}; + + ::GpiSetColor(hPS, lColor); + ::GpiMove(hPS, &vPoint); + vPoint.x = vRect.xRight - 1; + ::GpiLine(hPS, &vPoint); + vPoint.y = vRect.yTop - 1; + ::GpiLine(hPS, &vPoint); + lColor = 0x000C0C0C; // Darkish Grey to give depth feel + ::GpiSetColor(hPS, lColor); + vPoint.x = vRect.xLeft + 1; + ::GpiLine(hPS, &vPoint); + vPoint.y = vRect.yBottom + 1; + ::GpiLine(hPS, &vPoint); + vRect3.xLeft = vRect.xLeft + 2; + vRect3.xRight = vRect.xRight - 2; + vRect3.yTop = vRect.yTop - 2; + vRect3.yBottom = vRect.yBottom + 2; + if (pGauge->GetWindowStyleFlag() & wxGA_VERTICAL) { - dRange = (double)(vRect.yTop - vRect.yBottom); + dRange = (double)(vRect3.yTop - vRect3.yBottom); dPixelToRange = dRange/(double)pGauge->GetRange(); vRect2.yTop = (int)(pGauge->GetValue() * dPixelToRange); - vRect2.yBottom = vRect.yBottom; - vRect2.xLeft = vRect.xLeft; - vRect2.xRight = vRect.xRight; - vRect.yBottom = vRect2.yTop; - ::WinFillRect(hPS, &vRect, pGauge->GetBackgroundColour().GetPixel()); + vRect2.yBottom = vRect3.yBottom; + vRect2.xLeft = vRect3.xLeft; + vRect2.xRight = vRect3.xRight; + vRect3.yBottom = vRect2.yTop; + if (vRect3.yBottom <= 1) + vRect3.yBottom = 2; + ::WinFillRect(hPS, &vRect3, pGauge->GetBackgroundColour().GetPixel()); ::WinFillRect(hPS, &vRect2, pGauge->GetForegroundColour().GetPixel()); } else { - dRange = (double)(vRect.xRight - vRect.xLeft); + dRange = (double)(vRect3.xRight - vRect3.xLeft); dPixelToRange = dRange/(double)pGauge->GetRange(); - vRect2.yTop = vRect.yTop; - vRect2.yBottom = vRect.yBottom; - vRect2.xLeft = vRect.xLeft; + vRect2.yTop = vRect3.yTop; + vRect2.yBottom = vRect3.yBottom; + vRect2.xLeft = vRect3.xLeft; vRect2.xRight = (int)(pGauge->GetValue() * dPixelToRange); - vRect.xLeft = vRect2.xRight; - ::WinFillRect(hPS, &vRect, pGauge->GetBackgroundColour().GetPixel()); + vRect3.xLeft = vRect2.xRight; + if (vRect3.xLeft <= 1) + vRect3.xLeft = 2; + ::WinFillRect(hPS, &vRect3, pGauge->GetBackgroundColour().GetPixel()); ::WinFillRect(hPS, &vRect2, pGauge->GetForegroundColour().GetPixel()); } ::WinEndPaint(hPS); @@ -111,9 +137,7 @@ bool wxGauge::Create( , const wxPoint& rPos , const wxSize& rSize , long lStyle -#if wxUSE_VALIDATORS , const wxValidator& rValidator -#endif , const wxString& rsName ) { @@ -122,6 +146,7 @@ bool wxGauge::Create( int nWidth = rSize.x; int nHeight = rSize.y; long lMsStyle = 0L; + SWP vSwp; SetName(rsName); #if wxUSE_VALIDATORS @@ -129,8 +154,8 @@ bool wxGauge::Create( #endif if (pParent) pParent->AddChild(this); - SetBackgroundColour(pParent->GetBackgroundColour()) ; - SetForegroundColour(pParent->GetForegroundColour()) ; + m_backgroundColour.Set(wxString(wxT("LIGHT GREY"))); + m_foregroundColour.Set(wxString(wxT("NAVY"))); m_nRangeMax = nRange; m_nGaugePos = 0; @@ -154,8 +179,6 @@ bool wxGauge::Create( if (m_windowStyle & wxCLIP_SIBLINGS) lMsStyle |= WS_CLIPSIBLINGS; - - m_hWnd = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle ,WC_ENTRYFIELD // Window class ,(PSZ)NULL // Initial Text @@ -173,7 +196,15 @@ bool wxGauge::Create( ); ::WinSetWindowULong(GetHwnd(), QWL_USER, (LONG)this); fnWndProcGauge = (WXFARPROC)::WinSubclassWindow(m_hWnd, (PFNWP)wxGaugeWndProc); - SetFont(pParent->GetFont()); + ::WinQueryWindowPos(m_hWnd, &vSwp); + SetXComp(vSwp.x); + SetYComp(vSwp.y); + wxFont* pTextFont = new wxFont( 10 + ,wxMODERN + ,wxNORMAL + ,wxNORMAL + ); + SetFont(*pTextFont); if (nWidth == -1L) nWidth = 50L; if (nHeight == -1L) @@ -183,7 +214,10 @@ bool wxGauge::Create( ,nWidth ,nHeight ); + m_nWidth = nWidth; // Save for GetBestSize + m_nHeight = nHeight; ::WinShowWindow((HWND)GetHWND(), TRUE); + delete pTextFont; return TRUE; } // end of wxGauge::Create @@ -272,4 +306,7 @@ void wxGauge::SetValue( ::WinInvalidateRect(GetHwnd(), &vRect, FALSE); } // end of wxGauge::SetValue - +wxSize wxGauge::DoGetBestSize() const +{ + return wxSize(m_nWidth,m_nHeight); +}