+wxString WXDLLEXPORT wxPMErrorToStr(
+ ERRORID vError
+)
+{
+ wxString sError;
+
+ //
+ // Remove the high order byte -- it is useless
+ //
+ vError &= 0x0000ffff;
+ switch(vError)
+ {
+ case PMERR_INVALID_HWND:
+ sError = wxT("Invalid window handle specified");
+ break;
+
+ case PMERR_INVALID_FLAG:
+ sError = wxT("Invalid flag bit set");
+ break;
+
+ case PMERR_NO_MSG_QUEUE:
+ sError = wxT("No message queue available");
+ break;
+
+ case PMERR_INVALID_PARM:
+ sError = wxT("Parameter contained invalid data");
+ break;
+
+ case PMERR_INVALID_PARAMETERS:
+ sError = wxT("Parameter value is out of range");
+ break;
+
+ case PMERR_PARAMETER_OUT_OF_RANGE:
+ sError = wxT("Parameter value is out of range");
+ break;
+
+ case PMERR_INVALID_INTEGER_ATOM:
+ sError = wxT("Not a valid atom");
+ break;
+
+ case PMERR_INVALID_HATOMTBL:
+ sError = wxT("Atom table handle is invalid");
+ break;
+
+ case PMERR_INVALID_ATOM_NAME:
+ sError = wxT("Not a valid atom name");
+ break;
+
+ case PMERR_ATOM_NAME_NOT_FOUND:
+ sError = wxT("Valid name format, but cannot find name in atom table");
+ break;
+
+ default:
+ sError = wxT("Unknown error");
+ }
+ return(sError);
+} // end of wxPMErrorToStr
+
+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)
+
+ //
+ // The fonts available for Presentation Params are just three
+ // 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:
+ case wxDECORATIVE:
+ case wxROMAN:
+ strcpy(zFacename,"Times New Roman");
+ break;
+
+ case wxTELETYPE:
+ case wxMODERN:
+ strcpy(zFacename, "Courier");
+ break;
+
+ case wxSWISS:
+ case wxDEFAULT:
+ default:
+ 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