Various fixes in DC's, ownerdrawn menu items, etc...
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10370 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -821,8 +821,8 @@ void wxDC::DoDrawRectangle(
|
|||||||
);
|
);
|
||||||
vPoint[0].x = vX + 1;
|
vPoint[0].x = vX + 1;
|
||||||
vPoint[0].y = vY + 1;
|
vPoint[0].y = vY + 1;
|
||||||
vPoint[1].x = vX + vWidth - 2;
|
vPoint[1].x = vX + vWidth - 1;
|
||||||
vPoint[1].y = vY + vHeight - 2;
|
vPoint[1].y = vY + vHeight - 1;
|
||||||
::GpiMove(m_hPS, &vPoint[0]);
|
::GpiMove(m_hPS, &vPoint[0]);
|
||||||
::GpiBox( m_hPS
|
::GpiBox( m_hPS
|
||||||
,lControl
|
,lControl
|
||||||
|
@@ -111,6 +111,8 @@ bool wxOwnerDrawn::OnDrawItem(
|
|||||||
COLORREF vRef;
|
COLORREF vRef;
|
||||||
RECTL vRect = {rRect.x + 4, rRect.y + 1, rRect.x + (rRect.width - 2), rRect.y + rRect.height};
|
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
|
// Use default font if no font set
|
||||||
//
|
//
|
||||||
@@ -176,9 +178,21 @@ bool wxOwnerDrawn::OnDrawItem(
|
|||||||
,GetBValue(vRef)
|
,GetBValue(vRef)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
rDC.SetTextBackground(vColBack);
|
rDC.SetTextBackground(vColBack);
|
||||||
rDC.SetTextForeground(vColText);
|
rDC.SetTextForeground(vColText);
|
||||||
rDC.SetBackgroundMode(wxTRANSPARENT);
|
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
|
// Paint the background
|
||||||
@@ -248,19 +262,23 @@ bool wxOwnerDrawn::OnDrawItem(
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Draw the main item text sans the accel text
|
// Draw the main item text sans the accel text
|
||||||
rDC.DrawText( sFullString
|
//
|
||||||
,nX
|
POINTL vPntStart = {nX, rRect.y + 4};
|
||||||
,rRect.y + 4
|
::GpiCharStringAt( rDC.GetHPS()
|
||||||
);
|
,&vPntStart
|
||||||
|
,sFullString.length()
|
||||||
|
,(PCH)sFullString.c_str()
|
||||||
|
);
|
||||||
if (bFoundMneumonic)
|
if (bFoundMneumonic)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Underline the mneumonic -- still won't work, but at least it "looks" right
|
// Underline the mneumonic -- still won't work, but at least it "looks" right
|
||||||
//
|
//
|
||||||
wxPen vPen;
|
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
|
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
|
vPen = wxPen(vColText, 1, wxSOLID); // Assuming we are always black
|
||||||
rDC.SetPen(vPen);
|
rDC.SetPen(vPen);
|
||||||
::GpiMove(hPS, &vPntStart);
|
::GpiMove(hPS, &vPntStart);
|
||||||
@@ -282,10 +300,13 @@ bool wxOwnerDrawn::OnDrawItem(
|
|||||||
//
|
//
|
||||||
// Back off the starting position from the right edge
|
// Back off the starting position from the right edge
|
||||||
//
|
//
|
||||||
rDC.DrawText( sAccel
|
vPntStart.x = rRect.width - (nWidth + 7);
|
||||||
,rRect.width - (nWidth + 7) // this seems to mimic the default OS/2 positioning
|
vPntStart.y = rRect.y + 4;
|
||||||
,rRect.y + 4
|
::GpiCharStringAt( rDC.GetHPS()
|
||||||
);
|
,&vPntStart
|
||||||
|
,sAccel.length()
|
||||||
|
,(PCH)sAccel.c_str()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -323,8 +344,14 @@ bool wxOwnerDrawn::OnDrawItem(
|
|||||||
|
|
||||||
if (vBmp.Ok())
|
if (vBmp.Ok())
|
||||||
{
|
{
|
||||||
wxMemoryDC vDCMem(&rDC);
|
|
||||||
|
|
||||||
|
wxMemoryDC vDCMem(&rDC);
|
||||||
|
wxMemoryDC* pOldDC = (wxMemoryDC*)vBmp.GetSelectedInto();
|
||||||
|
|
||||||
|
if(pOldDC != NULL)
|
||||||
|
{
|
||||||
|
vBmp.SetSelectedInto(NULL);
|
||||||
|
}
|
||||||
vDCMem.SelectObject(vBmp);
|
vDCMem.SelectObject(vBmp);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -378,6 +405,7 @@ bool wxOwnerDrawn::OnDrawItem(
|
|||||||
,0L
|
,0L
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
vBmp.SetSelectedInto(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@@ -964,8 +964,8 @@ void wxDrawBorder(
|
|||||||
if (dwStyle & wxSIMPLE_BORDER ||
|
if (dwStyle & wxSIMPLE_BORDER ||
|
||||||
dwStyle & wxSTATIC_BORDER)
|
dwStyle & wxSTATIC_BORDER)
|
||||||
{
|
{
|
||||||
vPoint[1].x = rRect.xRight;
|
vPoint[1].x = rRect.xRight - 1;
|
||||||
vPoint[1].y = rRect.yTop;
|
vPoint[1].y = rRect.yTop - 1;
|
||||||
::GpiBox( hPS
|
::GpiBox( hPS
|
||||||
,DRO_OUTLINE
|
,DRO_OUTLINE
|
||||||
,&vPoint[1]
|
,&vPoint[1]
|
||||||
@@ -977,7 +977,7 @@ void wxDrawBorder(
|
|||||||
{
|
{
|
||||||
LINEBUNDLE vLineBundle;
|
LINEBUNDLE vLineBundle;
|
||||||
|
|
||||||
vLineBundle.lColor = 0x00FFFFFF; // White
|
vLineBundle.lColor = 0x00FFFFFF; // WHITE
|
||||||
vLineBundle.usMixMode = FM_OVERPAINT;
|
vLineBundle.usMixMode = FM_OVERPAINT;
|
||||||
vLineBundle.fxWidth = 2;
|
vLineBundle.fxWidth = 2;
|
||||||
vLineBundle.lGeomWidth = 2;
|
vLineBundle.lGeomWidth = 2;
|
||||||
@@ -990,14 +990,26 @@ void wxDrawBorder(
|
|||||||
,0L
|
,0L
|
||||||
,&vLineBundle
|
,&vLineBundle
|
||||||
);
|
);
|
||||||
vPoint[1].x = rRect.xRight;
|
vPoint[1].x = rRect.xRight - 1;
|
||||||
vPoint[1].y = rRect.yTop;
|
vPoint[1].y = rRect.yTop - 1;
|
||||||
::GpiBox( hPS
|
::GpiBox( hPS
|
||||||
,DRO_OUTLINE
|
,DRO_OUTLINE
|
||||||
,&vPoint[1]
|
,&vPoint[1]
|
||||||
,0L
|
,0L
|
||||||
,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.lColor = 0x00000000; // BLACK
|
||||||
vLineBundle.usMixMode = FM_OVERPAINT;
|
vLineBundle.usMixMode = FM_OVERPAINT;
|
||||||
vLineBundle.fxWidth = 2;
|
vLineBundle.fxWidth = 2;
|
||||||
@@ -1015,17 +1027,165 @@ void wxDrawBorder(
|
|||||||
vPoint[0].y = rRect.yBottom + 2;
|
vPoint[0].y = rRect.yBottom + 2;
|
||||||
::GpiMove(hPS, &vPoint[0]);
|
::GpiMove(hPS, &vPoint[0]);
|
||||||
vPoint[1].x = rRect.xLeft + 2;
|
vPoint[1].x = rRect.xLeft + 2;
|
||||||
vPoint[1].y = rRect.yTop - 2;
|
vPoint[1].y = rRect.yTop - 3;
|
||||||
::GpiLine(hPS, &vPoint[1]);
|
::GpiLine(hPS, &vPoint[1]);
|
||||||
vPoint[1].x = rRect.xRight - 2;
|
vPoint[1].x = rRect.xRight - 3;
|
||||||
vPoint[1].y = rRect.yTop - 2;
|
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]);
|
::GpiLine(hPS, &vPoint[1]);
|
||||||
}
|
}
|
||||||
if (dwStyle & wxDOUBLE_BORDER)
|
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)
|
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
|
} // end of wxDrawBorder
|
||||||
|
|
||||||
|
@@ -3338,6 +3338,7 @@ bool wxWindow::HandlePaint()
|
|||||||
,0L
|
,0L
|
||||||
,&vLineBundle
|
,&vLineBundle
|
||||||
);
|
);
|
||||||
|
::WinQueryWindowRect(GetHwnd(), &vRect);
|
||||||
wxDrawBorder( hPS
|
wxDrawBorder( hPS
|
||||||
,vRect
|
,vRect
|
||||||
,m_dwExStyle
|
,m_dwExStyle
|
||||||
|
Reference in New Issue
Block a user