X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/272ebf16f85536aced3277ebd69e0c70eabf8d0a..b11433049e45511f75510f2631ae039732abf36d:/src/os2/toolbar.cpp diff --git a/src/os2/toolbar.cpp b/src/os2/toolbar.cpp index e432c1b1c6..56ab552677 100644 --- a/src/os2/toolbar.cpp +++ b/src/os2/toolbar.cpp @@ -28,222 +28,6 @@ bool wxToolBar::m_bInitialized = FALSE; -// --------------------------------------------------------------------------- -// Helper for taking a regular bitmap and giving it a disabled look -// --------------------------------------------------------------------------- -wxBitmap wxDisableBitmap( - const wxBitmap& rBmp -, long lColor -) -{ - wxMask* pMask = rBmp.GetMask(); - - if (!pMask) - return(wxNullBitmap); - - DEVOPENSTRUC vDop = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L}; - SIZEL vSize = {0, 0}; - HDC hDC = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE); - HPS hPS = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIA_ASSOC); - BITMAPINFOHEADER2 vHeader; - BITMAPINFO2 vInfo; - ERRORID vError; - wxString sError; - HBITMAP hBitmap = (HBITMAP)rBmp.GetHBITMAP(); - HBITMAP hOldBitmap = NULLHANDLE; - HBITMAP hOldMask = NULLHANDLE; - HBITMAP hMask = (HBITMAP)rBmp.GetMask()->GetMaskBitmap(); - unsigned char* pucBits; // buffer that will contain the bitmap data - unsigned char* pucData; // pointer to use to traverse bitmap data - unsigned char* pucBitsMask; // buffer that will contain the mask data - unsigned char* pucDataMask; // pointer to use to traverse mask data - LONG lScans = 0L; - LONG lScansSet = 0L; - bool bpp16 = (wxDisplayDepth() == 16); - - memset(&vHeader, '\0', 16); - vHeader.cbFix = 16; - - memset(&vInfo, '\0', 16); - vInfo.cbFix = 16; - vInfo.cx = (ULONG)rBmp.GetWidth(); - vInfo.cy = (ULONG)rBmp.GetHeight(); - vInfo.cPlanes = 1; - vInfo.cBitCount = 24; // Set to desired count going in - - // - // Create the buffers for data....all wxBitmaps are 24 bit internally - // - int nBytesPerLine = rBmp.GetWidth() * 3; - int nSizeDWORD = sizeof(DWORD); - int nLineBoundary = nBytesPerLine % nSizeDWORD; - int nPadding = 0; - int i; - int j; - - // - // Bitmap must be ina double-word alligned address so we may - // have some padding to worry about - // - if (nLineBoundary > 0) - { - nPadding = nSizeDWORD - nLineBoundary; - nBytesPerLine += nPadding; - } - pucBits = (unsigned char *)malloc(nBytesPerLine * rBmp.GetHeight()); - memset(pucBits, '\0', (nBytesPerLine * rBmp.GetHeight())); - pucBitsMask = (unsigned char *)malloc(nBytesPerLine * rBmp.GetHeight()); - memset(pucBitsMask, '\0', (nBytesPerLine * rBmp.GetHeight())); - - // - // Extract the bitmap and mask data - // - if ((hOldBitmap = ::GpiSetBitmap(hPS, hBitmap)) == HBM_ERROR) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - ::GpiQueryBitmapInfoHeader(hBitmap, &vHeader); - vInfo.cBitCount = 24; - if ((lScans = ::GpiQueryBitmapBits( hPS - ,0L - ,(LONG)rBmp.GetHeight() - ,(PBYTE)pucBits - ,&vInfo - )) == GPI_ALTERROR) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - if ((hOldMask = ::GpiSetBitmap(hPS, hMask)) == HBM_ERROR) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - ::GpiQueryBitmapInfoHeader(hMask, &vHeader); - vInfo.cBitCount = 24; - if ((lScans = ::GpiQueryBitmapBits( hPS - ,0L - ,(LONG)rBmp.GetHeight() - ,(PBYTE)pucBitsMask - ,&vInfo - )) == GPI_ALTERROR) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - if (( hMask = ::GpiSetBitmap(hPS, hOldMask)) == HBM_ERROR) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - pucData = pucBits; - pucDataMask = pucBitsMask; - - // - // Get the mask value - // - for (i = 0; i < rBmp.GetHeight(); i++) - { - for (j = 0; j < rBmp.GetWidth(); j++) - { - // Byte 1 - if (bpp16 && *pucDataMask == 0xF8) // 16 bit display gobblygook - { - *pucData = 0x7F; - pucData++; - } - else if (*pucDataMask == 0xFF) // set to grey - { - *pucData = 0x7F; - pucData++; - } - else - { - *pucData = ((unsigned char)(lColor >> 16)); - pucData++; - } - - // Byte 2 - if (bpp16 && *(pucDataMask + 1) == 0xFC) // 16 bit display gobblygook - { - *pucData = 0x7F; - pucData++; - } - else if (*(pucDataMask + 1) == 0xFF) // set to grey - { - *pucData = 0x7F; - pucData++; - } - else - { - *pucData = ((unsigned char)(lColor >> 8)); - pucData++; - } - - // Byte 3 - if (bpp16 && *(pucDataMask + 2) == 0xF8) // 16 bit display gobblygook - { - *pucData = 0x7F; - pucData++; - } - else if (*(pucDataMask + 2) == 0xFF) // set to grey - { - *pucData = 0x7F; - pucData++; - } - else - { - *pucData = ((unsigned char)lColor); - pucData++; - } - pucDataMask += 3; - } - for (j = 0; j < nPadding; j++) - { - pucData++; - pucDataMask++; - } - } - - // - // Create a new bitmap and set the modified bits - // - wxBitmap vNewBmp( rBmp.GetWidth() - ,rBmp.GetHeight() - ,24 - ); - HBITMAP hNewBmp = (HBITMAP)vNewBmp.GetHBITMAP(); - - if ((hOldBitmap = ::GpiSetBitmap(hPS, hNewBmp)) == HBM_ERROR) - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - if ((lScansSet = ::GpiSetBitmapBits( hPS - ,0L - ,(LONG)rBmp.GetHeight() - ,(PBYTE)pucBits - ,&vInfo - )) == GPI_ALTERROR) - - { - vError = ::WinGetLastError(vHabmain); - sError = wxPMErrorToStr(vError); - } - wxMask* pNewMask; - - pNewMask = new wxMask(pMask->GetMaskBitmap()); - vNewBmp.SetMask(pNewMask); - free(pucBits); - ::GpiSetBitmap(hPS, NULLHANDLE); - ::GpiDestroyPS(hPS); - ::DevCloseDC(hDC); - if (vNewBmp.Ok()) - return(vNewBmp); - return(wxNullBitmap); -} // end of wxDisableBitmap - // ---------------------------------------------------------------------------- // private classes // ---------------------------------------------------------------------------- @@ -300,7 +84,7 @@ public: // wxWin macros // ---------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxToolBarBase) +IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl) BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase) EVT_SIZE(wxToolBar::OnSize) @@ -595,7 +379,6 @@ bool wxToolBar::Create( int nY = rPos.y; int nWidth = rSize.x; int nHeight = rSize.y; - wxFrame* pFrame = wxDynamicCast(GetParent(), wxFrame); if (lStyle & wxTB_HORIZONTAL) { @@ -651,8 +434,6 @@ bool wxToolBar::Realize() { int nMaxToolWidth = 0; int nMaxToolHeight = 0; - int nX; - int nY; m_nCurrentRowsOrColumns = 0; m_vLastX = m_xMargin; @@ -664,11 +445,11 @@ bool wxToolBar::Realize() // // Find the maximum tool width and height // - wxToolBarToolsList::Node* pNode = m_tools.GetFirst(); + wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); - while (pNode ) + while (node ) { - wxToolBarTool* pTool = (wxToolBarTool *)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool *)node->GetData(); if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsEmpty()) { @@ -689,7 +470,7 @@ bool wxToolBar::Realize() if (pTool->GetHeight() > nMaxToolHeight) nMaxToolHeight = pTool->GetHeight(); } - pNode = pNode->GetNext(); + node = node->GetNext(); } wxCoord vTbWidth = 0L; @@ -716,10 +497,10 @@ bool wxToolBar::Realize() int nSeparatorSize = m_toolSeparation; - pNode = m_tools.GetFirst(); - while (pNode) + node = m_tools.GetFirst(); + while (node) { - wxToolBarTool* pTool = (wxToolBarTool *)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool *)node->GetData(); if (pTool->IsSeparator()) { @@ -786,7 +567,7 @@ bool wxToolBar::Realize() if (m_vLastY > m_maxHeight) m_maxHeight = m_vLastY; - pNode = pNode->GetNext(); + node = node->GetNext(); } if ( GetWindowStyleFlag() & wxTB_HORIZONTAL ) @@ -822,11 +603,11 @@ void wxToolBar::OnPaint ( nCount++; ::WinFillRect(vDc.GetHPS(), &vDc.m_vRclPaint, GetBackgroundColour().GetPixel()); - for ( wxToolBarToolsList::Node* pNode = m_tools.GetFirst(); - pNode; - pNode = pNode->GetNext() ) + for ( wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); + node; + node = node->GetNext() ) { - wxToolBarTool* pTool = (wxToolBarTool*)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool*)node->GetData(); if (pTool->IsButton() ) DrawTool(vDc, pTool); @@ -1063,7 +844,6 @@ void wxToolBar::DrawTool( wxBitmap vBitmap = pTool->GetNormalBitmap(); bool bUseMask = FALSE; wxMask* pMask = NULL; - RECTL vRect; PrepareDC(rDc); @@ -1190,18 +970,16 @@ wxToolBarToolBase* wxToolBar::FindToolForPosition( , wxCoord vY ) const { - wxCoord vTextX = 0; - wxCoord vTextY = 0; wxCoord vTBarHeight = 0; GetSize( NULL ,&vTBarHeight ); vY = vTBarHeight - vY; - wxToolBarToolsList::Node* pNode = m_tools.GetFirst(); - while (pNode) + wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); + while (node) { - wxToolBarTool* pTool = (wxToolBarTool *)pNode->GetData(); + wxToolBarTool* pTool = (wxToolBarTool *)node->GetData(); if (HasFlag(wxTB_TEXT) && !pTool->GetLabel().IsNull()) { @@ -1223,7 +1001,7 @@ wxToolBarToolBase* wxToolBar::FindToolForPosition( return pTool; } } - pNode = pNode->GetNext(); + node = node->GetNext(); } return (wxToolBarToolBase *)NULL; } // end of wxToolBar::FindToolForPosition