COLORREF vRef;
RECTL vRect = {rRect.x + 4, rRect.y + 1, rRect.x + (rRect.width - 2), rRect.y + rRect.height};
+ memset(&vCbnd, 0, sizeof(CHARBUNDLE));
+
//
// Use default font if no font set
//
,GetBValue(vRef)
);
}
+
rDC.SetTextBackground(vColBack);
rDC.SetTextForeground(vColText);
rDC.SetBackgroundMode(wxTRANSPARENT);
+ vCbnd.lColor = vColText.GetPixel();
+ vCbnd.lBackColor = vColBack.GetPixel();
+ ::GpiSetAttrs( hPS
+ ,PRIM_CHAR
+ ,CBB_BACK_COLOR | CBB_COLOR
+ ,0
+ ,&vCbnd
+ );
+ ::GpiSetBackMix( hPS
+ ,BM_LEAVEALONE
+ );
//
// Paint the background
//
// Draw the main item text sans the accel text
- rDC.DrawText( sFullString
- ,nX
- ,rRect.y + 4
- );
+ //
+ POINTL vPntStart = {nX, rRect.y + 4};
+ ::GpiCharStringAt( rDC.GetHPS()
+ ,&vPntStart
+ ,sFullString.length()
+ ,(PCH)sFullString.c_str()
+ );
if (bFoundMneumonic)
{
//
// Underline the mneumonic -- still won't work, but at least it "looks" right
//
wxPen vPen;
- POINTL vPntStart = {nX + nWidth - 1, rRect.y + 2}; // Make it look pretty!
POINTL vPntEnd = {nX + nWidth + nCharWidth - 3, rRect.y + 2}; //CharWidth is bit wide
+ vPntStart.x = nX + nWidth - 1;
+ vPntStart.y = rRect.y + 2; // Make it look pretty!
vPen = wxPen(vColText, 1, wxSOLID); // Assuming we are always black
rDC.SetPen(vPen);
::GpiMove(hPS, &vPntStart);
//
// Back off the starting position from the right edge
//
- rDC.DrawText( sAccel
- ,rRect.width - (nWidth + 7) // this seems to mimic the default OS/2 positioning
- ,rRect.y + 4
- );
+ vPntStart.x = rRect.width - (nWidth + 7);
+ vPntStart.y = rRect.y + 4;
+ ::GpiCharStringAt( rDC.GetHPS()
+ ,&vPntStart
+ ,sAccel.length()
+ ,(PCH)sAccel.c_str()
+ );
}
//
if (vBmp.Ok())
{
+
wxMemoryDC vDCMem(&rDC);
+ wxMemoryDC* pOldDC = (wxMemoryDC*)vBmp.GetSelectedInto();
+ if(pOldDC != NULL)
+ {
+ vBmp.SetSelectedInto(NULL);
+ }
vDCMem.SelectObject(vBmp);
//
,0L
);
}
+ vBmp.SetSelectedInto(NULL);
}
}
return TRUE;
if (dwStyle & wxSIMPLE_BORDER ||
dwStyle & wxSTATIC_BORDER)
{
- vPoint[1].x = rRect.xRight;
- vPoint[1].y = rRect.yTop;
+ vPoint[1].x = rRect.xRight - 1;
+ vPoint[1].y = rRect.yTop - 1;
::GpiBox( hPS
,DRO_OUTLINE
,&vPoint[1]
{
LINEBUNDLE vLineBundle;
- vLineBundle.lColor = 0x00FFFFFF; // White
+ vLineBundle.lColor = 0x00FFFFFF; // WHITE
vLineBundle.usMixMode = FM_OVERPAINT;
vLineBundle.fxWidth = 2;
vLineBundle.lGeomWidth = 2;
,0L
,&vLineBundle
);
- vPoint[1].x = rRect.xRight;
- vPoint[1].y = rRect.yTop;
+ 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;
vPoint[0].y = rRect.yBottom + 2;
::GpiMove(hPS, &vPoint[0]);
vPoint[1].x = rRect.xLeft + 2;
- vPoint[1].y = rRect.yTop - 2;
+ vPoint[1].y = rRect.yTop - 3;
::GpiLine(hPS, &vPoint[1]);
- vPoint[1].x = rRect.xRight - 2;
- vPoint[1].y = rRect.yTop - 2;
+ 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