-void wxDrawBorder(
- HPS hPS
-, RECTL& rRect
-, WXDWORD dwStyle
-)
-{
- POINTL vPoint[2];
-
- vPoint[0].x = rRect.xLeft;
- vPoint[0].y = rRect.yBottom;
- ::GpiMove(hPS, &vPoint[0]);
- if (dwStyle & wxSIMPLE_BORDER ||
- dwStyle & wxSTATIC_BORDER)
- {
- vPoint[1].x = rRect.xRight - 1;
- vPoint[1].y = rRect.yTop - 1;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
- }
- if (dwStyle & wxSUNKEN_BORDER)
- {
- LINEBUNDLE vLineBundle;
-
- vLineBundle.lColor = 0x00FFFFFF; // WHITE
- vLineBundle.usMixMode = FM_OVERPAINT;
- vLineBundle.fxWidth = 2;
- vLineBundle.lGeomWidth = 2;
- vLineBundle.usType = LINETYPE_SOLID;
- vLineBundle.usEnd = 0;
- vLineBundle.usJoin = 0;
- ::GpiSetAttrs( hPS
- ,PRIM_LINE
- ,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
- ,0L
- ,&vLineBundle
- );
- vPoint[1].x = rRect.xRight - 1;
- vPoint[1].y = rRect.yTop - 1;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
- vPoint[0].x = rRect.xLeft + 1;
- vPoint[0].y = rRect.yBottom + 1;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xRight - 2;
- vPoint[1].y = rRect.yTop - 2;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
-
- vLineBundle.lColor = 0x00000000; // BLACK
- vLineBundle.usMixMode = FM_OVERPAINT;
- vLineBundle.fxWidth = 2;
- vLineBundle.lGeomWidth = 2;
- vLineBundle.usType = LINETYPE_SOLID;
- vLineBundle.usEnd = 0;
- vLineBundle.usJoin = 0;
- ::GpiSetAttrs( hPS
- ,PRIM_LINE
- ,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
- ,0L
- ,&vLineBundle
- );
- vPoint[0].x = rRect.xLeft + 2;
- vPoint[0].y = rRect.yBottom + 2;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xLeft + 2;
- vPoint[1].y = rRect.yTop - 3;
- ::GpiLine(hPS, &vPoint[1]);
- vPoint[1].x = rRect.xRight - 3;
- vPoint[1].y = rRect.yTop - 3;
- ::GpiLine(hPS, &vPoint[1]);
-
- vPoint[0].x = rRect.xLeft + 3;
- vPoint[0].y = rRect.yBottom + 3;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xLeft + 3;
- vPoint[1].y = rRect.yTop - 4;
- ::GpiLine(hPS, &vPoint[1]);
- vPoint[1].x = rRect.xRight - 4;
- vPoint[1].y = rRect.yTop - 4;
- ::GpiLine(hPS, &vPoint[1]);
- }
- if (dwStyle & wxDOUBLE_BORDER)
- {
- LINEBUNDLE vLineBundle;
-
- vLineBundle.lColor = 0x00FFFFFF; // WHITE
- vLineBundle.usMixMode = FM_OVERPAINT;
- vLineBundle.fxWidth = 2;
- vLineBundle.lGeomWidth = 2;
- vLineBundle.usType = LINETYPE_SOLID;
- vLineBundle.usEnd = 0;
- vLineBundle.usJoin = 0;
- ::GpiSetAttrs( hPS
- ,PRIM_LINE
- ,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
- ,0L
- ,&vLineBundle
- );
- vPoint[1].x = rRect.xRight - 1;
- vPoint[1].y = rRect.yTop - 1;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
- vLineBundle.lColor = 0x00000000; // WHITE
- vLineBundle.usMixMode = FM_OVERPAINT;
- vLineBundle.fxWidth = 2;
- vLineBundle.lGeomWidth = 2;
- vLineBundle.usType = LINETYPE_SOLID;
- vLineBundle.usEnd = 0;
- vLineBundle.usJoin = 0;
- ::GpiSetAttrs( hPS
- ,PRIM_LINE
- ,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
- ,0L
- ,&vLineBundle
- );
- vPoint[0].x = rRect.xLeft + 2;
- vPoint[0].y = rRect.yBottom + 2;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xRight - 2;
- vPoint[1].y = rRect.yTop - 2;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
- vLineBundle.lColor = 0x00FFFFFF; // BLACK
- vLineBundle.usMixMode = FM_OVERPAINT;
- vLineBundle.fxWidth = 2;
- vLineBundle.lGeomWidth = 2;
- vLineBundle.usType = LINETYPE_SOLID;
- vLineBundle.usEnd = 0;
- vLineBundle.usJoin = 0;
- ::GpiSetAttrs( hPS
- ,PRIM_LINE
- ,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
- ,0L
- ,&vLineBundle
- );
- vPoint[0].x = rRect.xLeft + 3;
- vPoint[0].y = rRect.yBottom + 3;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xRight - 3;
- vPoint[1].y = rRect.yTop - 3;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
- }
- if (dwStyle & wxRAISED_BORDER)
- {
- LINEBUNDLE vLineBundle;
-
- vLineBundle.lColor = 0x00000000; // BLACK
- vLineBundle.usMixMode = FM_OVERPAINT;
- vLineBundle.fxWidth = 2;
- vLineBundle.lGeomWidth = 2;
- vLineBundle.usType = LINETYPE_SOLID;
- vLineBundle.usEnd = 0;
- vLineBundle.usJoin = 0;
- ::GpiSetAttrs( hPS
- ,PRIM_LINE
- ,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
- ,0L
- ,&vLineBundle
- );
- vPoint[1].x = rRect.xRight - 1;
- vPoint[1].y = rRect.yTop - 1;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
- vPoint[0].x = rRect.xLeft + 1;
- vPoint[0].y = rRect.yBottom + 1;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xRight - 2;
- vPoint[1].y = rRect.yTop - 2;
- ::GpiBox( hPS
- ,DRO_OUTLINE
- ,&vPoint[1]
- ,0L
- ,0L
- );
-
- vLineBundle.lColor = 0x00FFFFFF; // WHITE
- vLineBundle.usMixMode = FM_OVERPAINT;
- vLineBundle.fxWidth = 2;
- vLineBundle.lGeomWidth = 2;
- vLineBundle.usType = LINETYPE_SOLID;
- vLineBundle.usEnd = 0;
- vLineBundle.usJoin = 0;
- ::GpiSetAttrs( hPS
- ,PRIM_LINE
- ,LBB_COLOR | LBB_MIX_MODE | LBB_WIDTH | LBB_GEOM_WIDTH | LBB_TYPE
- ,0L
- ,&vLineBundle
- );
- vPoint[0].x = rRect.xLeft + 2;
- vPoint[0].y = rRect.yBottom + 2;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xLeft + 2;
- vPoint[1].y = rRect.yTop - 3;
- ::GpiLine(hPS, &vPoint[1]);
- vPoint[1].x = rRect.xRight - 3;
- vPoint[1].y = rRect.yTop - 3;
- ::GpiLine(hPS, &vPoint[1]);
-
- vPoint[0].x = rRect.xLeft + 3;
- vPoint[0].y = rRect.yBottom + 3;
- ::GpiMove(hPS, &vPoint[0]);
- vPoint[1].x = rRect.xLeft + 3;
- vPoint[1].y = rRect.yTop - 4;
- ::GpiLine(hPS, &vPoint[1]);
- vPoint[1].x = rRect.xRight - 4;
- vPoint[1].y = rRect.yTop - 4;
- ::GpiLine(hPS, &vPoint[1]);
- }
-} // end of wxDrawBorder
-
-void wxOS2SetFont(
- HWND hWnd
-, const wxFont& rFont
-)
-{
- char zFont[128];
- char zFacename[30];
- char zWeight[30];
- char zStyle[30];
-
- if (hWnd == NULLHANDLE)
- return;
-
- //
- // The fonts available for Presentation Params are just a few
- // outline fonts, the rest are available to the GPI, so we must
- // map the families to one of these three
- //
- switch(rFont.GetFamily())
- {
- case wxSCRIPT:
- strcpy(zFacename, "Script");
- break;
-
- case wxDECORATIVE:
- strcpy(zFacename, "WarpSans");
- break;
-
- case wxROMAN:
- strcpy(zFacename,"Times New Roman");
- break;
-
- case wxTELETYPE:
- strcpy(zFacename, "Courier New");
- break;
-
- case wxMODERN:
- strcpy(zFacename, "Courier New");
- break;
-
- case wxDEFAULT:
- default:
- case wxSWISS:
- strcpy(zFacename, "Helvetica");
- break;
- }
-
- switch(rFont.GetWeight())
- {
- default:
- case wxNORMAL:
- case wxLIGHT:
- zWeight[0] = '\0';
- break;
-
- case wxBOLD:
- case wxFONTWEIGHT_MAX:
- strcpy(zWeight, "Bold");
- break;
- }
-
- switch(rFont.GetStyle())
- {
- case wxITALIC:
- case wxSLANT:
- strcpy(zStyle, "Italic");
- break;
-
- default:
- zStyle[0] = '\0';
- break;
- }
- sprintf(zFont, "%d.%s", rFont.GetPointSize(), zFacename);
- if (zWeight[0] != '\0')
- {
- strcat(zFont, " ");
- strcat(zFont, zWeight);
- }
- if (zStyle[0] != '\0')
- {
- strcat(zFont, " ");
- strcat(zFont, zStyle);
- }
- ::WinSetPresParam(hWnd, PP_FONTNAMESIZE, strlen(zFont) + 1, (PVOID)zFont);
-} // end of wxOS2SetFont
-
-// ---------------------------------------------------------------------------
-// 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;