X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/70a2c6562fcc7088076ab421419069ef50e4a7d3..d289329218fb13e56c297fc27d82cb44cb849083:/src/os2/slider.cpp diff --git a/src/os2/slider.cpp b/src/os2/slider.cpp index c548169535..1dec64ffc2 100644 --- a/src/os2/slider.cpp +++ b/src/os2/slider.cpp @@ -23,6 +23,8 @@ #include #endif +#if wxUSE_SLIDER + #include "wx/slider.h" #include "wx/os2/private.h" @@ -58,18 +60,18 @@ void wxSlider::AdjustSubControls( , int nSizeFlags ) { - SWP vSwp; int nXOffset = nX; int nYOffset = nY; int nCx; // slider,min,max sizes int nCy; int nCyf; char zBuf[300]; + wxFont vFont = this->GetFont(); wxGetCharSize( GetHWND() ,&nCx ,&nCy - ,&this->GetFont() + ,&vFont ); if ((m_windowStyle & wxSL_VERTICAL) != wxSL_VERTICAL) @@ -80,10 +82,10 @@ void wxSlider::AdjustSubControls( int nMaxLen = 0; ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf); - GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &vFont); ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf); - GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &vFont); if (m_hStaticValue) { @@ -104,7 +106,7 @@ void wxSlider::AdjustSubControls( ,(LONG)nXOffset - (nMinLen + nCx) ,(LONG)nYOffset ,(LONG)nMinLen - ,(LONG)nCy + ,(LONG)nCyf ,SWP_SIZE | SWP_MOVE ); nXOffset += nWidth + nCx; @@ -114,7 +116,7 @@ void wxSlider::AdjustSubControls( ,(LONG)nXOffset ,(LONG)nYOffset ,(LONG)nMaxLen - ,(LONG)nCy + ,(LONG)nCyf ,SWP_ZORDER | SWP_SHOW ); } @@ -125,20 +127,20 @@ void wxSlider::AdjustSubControls( // Now deal with a vertical slider // - if (m_lWindowStyle & winSL_LABELS ) + if (m_windowStyle & wxSL_LABELS ) { int nMinLen = 0; int nMaxLen = 0; ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf); - GetTextExtent(zBuf, &lMinLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &vFont); ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf); - GetTextExtent(zBuf, &lMaxLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &vFont); if (m_hStaticValue) { - int nNewWidth = (DAWUTL_MAX(nMinLen, nMaxLen)); + int nNewWidth = (wxMax(nMinLen, nMaxLen)); ::WinSetWindowPos( (HWND)m_hStaticValue ,HWND_TOP @@ -204,9 +206,7 @@ bool wxSlider::Create( , const wxPoint& rPos , const wxSize& rSize , long lStyle -#if wxUSE_VALIDATORS , const wxValidator& rValidator -#endif , const wxString& rsName ) { @@ -286,7 +286,7 @@ bool wxSlider::Create( if (m_windowStyle & wxSL_VERTICAL) lMsStyle = SLS_VERTICAL | SLS_HOMEBOTTOM | WS_VISIBLE | WS_TABSTOP; else - lMsStyle = SLS_HORIZONTAL | SLS_HOMELEFT| WS_VISIBLE | WS_TABSTOP; + lMsStyle = SLS_HORIZONTAL | SLS_HOMELEFT | WS_VISIBLE | WS_TABSTOP; if (m_windowStyle & wxCLIP_SIBLINGS) lMsStyle |= WS_CLIPSIBLINGS; @@ -321,7 +321,7 @@ bool wxSlider::Create( ,(ULONG)lMsStyle // Style flags ,0L, 0L, 0L, 0L // Origin -- 0 size ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent - ,HWND_TOP // initial z position + ,HWND_BOTTOM // initial z position ,(HMENU)m_windowId // Window identifier ,&vSlData // Slider control data ,NULL // no Presentation parameters @@ -392,6 +392,8 @@ bool wxSlider::Create( } } + SetXComp(0); + SetYComp(0); SetSize( nX ,nY ,nWidth @@ -461,8 +463,7 @@ bool wxSlider::Create( ,(PVOID)&lColor ); SetValue(nValue); - delete pTextFont; - return TRUE; + return true; } // end of wxSlider::Create void wxSlider::DoSetSize( @@ -485,6 +486,7 @@ void wxSlider::DoSetSize( int nCurrentX; int nCurrentY; char zBuf[300]; + wxFont vFont = this->GetFont(); // // Adjust for OS/2's reverse coordinate system @@ -530,7 +532,7 @@ void wxSlider::DoSetSize( wxGetCharSize( GetHWND() ,&nCx ,&nCy - ,&this->GetFont() + ,&vFont ); if ((m_windowStyle & wxSL_VERTICAL) != wxSL_VERTICAL) @@ -541,9 +543,9 @@ void wxSlider::DoSetSize( int nMaxLen = 0; ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf); - GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &vFont); ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf); - GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &vFont); if (m_hStaticValue) { @@ -553,7 +555,7 @@ void wxSlider::DoSetSize( ::WinSetWindowPos( (HWND)m_hStaticValue ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset - (nCyf * 1.2) + ,(LONG)nYOffset - (LONG)(nCyf * 1.2) ,(LONG)nNewWidth ,(LONG)nValueHeight ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW @@ -563,7 +565,7 @@ void wxSlider::DoSetSize( ::WinSetWindowPos( (HWND)m_hStaticMin ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset - (nCyf * 1.2) + ,(LONG)nYOffset - (LONG)(nCyf * 1.2) ,(LONG)nMinLen ,(LONG)nCy ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW @@ -590,12 +592,20 @@ void wxSlider::DoSetSize( ,(LONG)nSliderHeight ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW ); + ::WinQueryWindowPos(GetHwnd(), GetSwp()); + ::WinSendMsg( GetHwnd() + ,SLM_SETSLIDERINFO + ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS + ,0 + ) + ,MPFROMLONG((ULONG)(nSliderHeight/2)) + ); nXOffset += nSliderLength + nCx; ::WinSetWindowPos( (HWND)m_hStaticMax ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset - (nCyf * 1.2) + ,(LONG)nYOffset - (LONG)(nCyf * 1.2) ,(LONG)nMaxLen ,(LONG)nCy ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW @@ -640,34 +650,28 @@ void wxSlider::DoSetSize( int nMaxLen; ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf); - GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &vFont); ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf); - GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont()); + GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &vFont); if (m_hStaticValue) { int nNewWidth = wxMax(nMinLen, nMaxLen); int nValueHeight = nCyf; - nNewWidth += nCx; - - // - // The height needs to be a bit bigger under Win95 if using native - // 3D effects. - // ::WinSetWindowPos( (HWND)m_hStaticValue ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset + lHeight + ,(LONG)nYOffset + nHeight ,(LONG)nNewWidth ,(LONG)nValueHeight ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW ); - nUsedHeight += nCy; + nUsedHeight += nCyf; } ::WinSetWindowPos( (HWND)m_hStaticMin ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset + lHeight -lCyf + ,(LONG)nYOffset + nHeight - nCyf ,(LONG)nMinLen ,(LONG)nCy ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW @@ -689,16 +693,24 @@ void wxSlider::DoSetSize( ::WinSetWindowPos( GetHwnd() ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset + ,(LONG)nYOffset + nCyf ,(LONG)nSliderWidth ,(LONG)nSliderLength ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW ); + ::WinQueryWindowPos(GetHwnd(), GetSwp()); + ::WinSendMsg( GetHwnd() + ,SLM_SETSLIDERINFO + ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS + ,0 + ) + ,MPFROMLONG((ULONG)(nSliderWidth/2)) + ); nUsedHeight += nSliderLength; ::WinSetWindowPos( (HWND)m_hStaticMax ,HWND_TOP ,(LONG)nXOffset - ,(LONG)nYOffset + ,(LONG)nYOffset - nCyf ,(LONG)nMaxLen ,(LONG)nCy ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW @@ -854,8 +866,10 @@ void wxSlider::GetSize( wxFindMaxSize( m_hStaticValue ,&vRect ); - *pnWidth = vRect.xRight - vRect.xLeft; - *pnHeight = vRect.yBottom - vRect.yTop; + if (pnWidth) + *pnWidth = vRect.xRight - vRect.xLeft; + if (pnHeight) + *pnHeight = vRect.yTop - vRect.yBottom; } // end of wxSlider::GetSize int wxSlider::GetThumbLength() const @@ -931,7 +945,7 @@ bool wxSlider::OS2OnScroll( break; default: - return FALSE; + return false; } int nPixelRange = SHORT1FROMMR(::WinSendMsg( GetHwnd() @@ -952,7 +966,7 @@ bool wxSlider::OS2OnScroll( ,(MPARAM)0 ) ); - nNewPos = (nPixelPos/m_dPixelToRange); + nNewPos = (int)(nPixelPos/m_dPixelToRange); if (nNewPos > (m_nRangeMax - m_nRangeMin)/2) nNewPos++; if ((nNewPos < GetMin()) || (nNewPos > GetMax())) @@ -960,7 +974,7 @@ bool wxSlider::OS2OnScroll( // // Out of range - but we did process it // - return TRUE; + return true; } SetValue(nNewPos); @@ -1071,7 +1085,7 @@ void wxSlider::SetTick( int nTickPos ) { - nTickPos *= m_dPixelToRange; + nTickPos = (int)(nTickPos * m_dPixelToRange); ::WinSendMsg( GetHwnd() ,SLM_ADDDETENT ,MPFROMSHORT(nTickPos) @@ -1109,7 +1123,7 @@ void wxSlider::SetTickFreq( ::WinSendMsg(GetHwnd(), WM_SETWINDOWPARAMS, (MPARAM)&vWndParams, (MPARAM)0); for (i = 1; i < (m_nRangeMax - m_nRangeMin)/n; i++) { - nPixelPos = i * n * m_dPixelToRange; + nPixelPos = (int)(i * n * m_dPixelToRange); ::WinSendMsg( GetHwnd() ,SLM_ADDDETENT ,MPFROMSHORT(nPixelPos) @@ -1122,14 +1136,6 @@ void wxSlider::SetValue( int nValue ) { - int nPixelPos = SHORT1FROMMR(::WinSendMsg( GetHwnd() - ,SLM_QUERYSLIDERINFO - ,MPFROM2SHORT( SMA_SLIDERARMPOSITION - ,SMA_RANGEVALUE - ) - ,(MPARAM)0 - ) - ); int nPixelRange = SHORT1FROMMR(::WinSendMsg( GetHwnd() ,SLM_QUERYSLIDERINFO ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS @@ -1166,6 +1172,7 @@ bool wxSlider::Show( ::WinShowWindow((HWND)m_hStaticMin, bShow); if(m_hStaticMax) ::WinShowWindow((HWND)m_hStaticMax, bShow); - return TRUE; + return true; } // end of wxSlider::Show +#endif // wxUSE_SLIDER