More image processing updates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15413 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2002-05-07 22:27:10 +00:00
parent d84afea9d1
commit 1c9a789ed9
3 changed files with 129 additions and 27 deletions

View File

@@ -87,6 +87,10 @@ void wxBitmapRefData::Free()
void wxBitmap::Init() void wxBitmap::Init()
{ {
m_bIsMono = FALSE; m_bIsMono = FALSE;
//
// True for all bitmaps created from bits, wxImages, Xpms
//
m_bFlip = TRUE;
} // end of wxBitmap::Init } // end of wxBitmap::Init
bool wxBitmap::CopyFromIconOrCursor( bool wxBitmap::CopyFromIconOrCursor(
@@ -265,7 +269,7 @@ wxBitmap::wxBitmap(
) )
{ {
Init(); Init();
m_bFlip = FALSE;
(void)Create( nW (void)Create( nW
,nH ,nH
,nD ,nD
@@ -296,7 +300,7 @@ wxBitmap::wxBitmap(
) )
{ {
Init(); Init();
m_bFlip = FALSE;
LoadFile( rFilename LoadFile( rFilename
,(int)lType ,(int)lType
); );
@@ -697,10 +701,6 @@ bool wxBitmap::CreateFromImage (
vError = ::WinGetLastError(vHabmain); vError = ::WinGetLastError(vHabmain);
sError = wxPMErrorToStr(vError); sError = wxPMErrorToStr(vError);
} }
//
// Debug stuff
//
hPSScreen = ::GpiCreatePS( vHabmain hPSScreen = ::GpiCreatePS( vHabmain
,hDCScreen ,hDCScreen
,&vSize ,&vSize
@@ -1127,7 +1127,7 @@ wxBitmap wxBitmap::GetSubBitmap(
vBmih.cx = rRect.width; vBmih.cx = rRect.width;
vBmih.cy = rRect.height; vBmih.cy = rRect.height;
vBmih.cPlanes = 1; vBmih.cPlanes = 1;
vBmih.cBitCount = 1; vBmih.cBitCount = 24;
HBITMAP hBmpMask = ::GpiCreateBitmap( hPSDst HBITMAP hBmpMask = ::GpiCreateBitmap( hPSDst
,&vBmih ,&vBmih
@@ -1292,7 +1292,7 @@ bool wxMask::Create(
vBmih.cx = rBitmap.GetWidth(); vBmih.cx = rBitmap.GetWidth();
vBmih.cy = rBitmap.GetHeight(); vBmih.cy = rBitmap.GetHeight();
vBmih.cPlanes = 1; vBmih.cPlanes = 1;
vBmih.cBitCount = 1; vBmih.cBitCount = 24;
m_hMaskBitmap = ::GpiCreateBitmap( hPSDst m_hMaskBitmap = ::GpiCreateBitmap( hPSDst
,&vBmih ,&vBmih
@@ -1586,12 +1586,12 @@ HBITMAP wxInvertMask(
0, 0, nWidth, nHeight 0, 0, nWidth, nHeight
}; };
memset(&vBmih, '\0', sizeof(BITMAPINFOHEADER2)); memset(&vBmih, '\0', 16);
vBmih.cbFix = sizeof(BITMAPINFOHEADER2); vBmih.cbFix = 16;
vBmih.cx = nWidth; vBmih.cx = nWidth;
vBmih.cy = nHeight; vBmih.cy = nHeight;
vBmih.cPlanes = 1; vBmih.cPlanes = 1;
vBmih.cBitCount = 1; vBmih.cBitCount = 24;
hBmpInvMask = ::GpiCreateBitmap( hPSDst hBmpInvMask = ::GpiCreateBitmap( hPSDst
,&vBmih ,&vBmih

View File

@@ -672,6 +672,16 @@ void wxDC::DoDrawLine(
vY1 = OS2Y(vY1,0); vY1 = OS2Y(vY1,0);
vY2 = OS2Y(vY2,0); vY2 = OS2Y(vY2,0);
} }
else
{
if (m_vSelectedBitmap != wxNullBitmap)
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
vY1 = OS2Y(vY1,0);
vY2 = OS2Y(vY2,0);
}
}
vPoint[0].x = vX1; vPoint[0].x = vX1;
vPoint[0].y = vY1; vPoint[0].y = vY1;
vPoint[1].x = vX2; vPoint[1].x = vX2;
@@ -1000,6 +1010,15 @@ void wxDC::DoDrawRectangle(
m_vRclPaint.xRight == 0 && m_vRclPaint.xRight == 0 &&
m_vRclPaint.xLeft == 0)) m_vRclPaint.xLeft == 0))
vY = OS2Y(vY,vHeight); vY = OS2Y(vY,vHeight);
else
{
if (m_vSelectedBitmap != wxNullBitmap)
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
vY = OS2Y(vY,vHeight);
}
}
wxCoord vX2 = vX + vWidth; wxCoord vX2 = vX + vWidth;
wxCoord vY2 = vY + vHeight; wxCoord vY2 = vY + vHeight;
@@ -1069,6 +1088,9 @@ void wxDC::DoDrawRoundedRectangle(
{ {
POINTL vPoint[2]; POINTL vPoint[2];
LONG lControl; LONG lControl;
LONG lColor;
LONG lBorderColor;
int nIsTRANSPARENT = 0;
// //
// Might be a memory DC with no Paint rect. // Might be a memory DC with no Paint rect.
@@ -1078,25 +1100,73 @@ void wxDC::DoDrawRoundedRectangle(
m_vRclPaint.xRight == 0 && m_vRclPaint.xRight == 0 &&
m_vRclPaint.xLeft == 0)) m_vRclPaint.xLeft == 0))
vY = OS2Y(vY,vHeight); vY = OS2Y(vY,vHeight);
else
{
if (m_vSelectedBitmap != wxNullBitmap)
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
vY = OS2Y(vY,vHeight);
}
}
wxCoord vX2 = (vX + vWidth); wxCoord vX2 = (vX + vWidth);
wxCoord vY2 = (vY + vHeight); wxCoord vY2 = (vY + vHeight);
vPoint[0].x = vX; vPoint[0].x = vX;
vPoint[0].y = YLOG2DEV(vY) - vHeight; vPoint[0].y = vY;
vPoint[1].x = vX + vWidth; vPoint[1].x = vX + vWidth - 1;
vPoint[1].y = vY; vPoint[1].y = vY + vHeight - 1;
::GpiMove(m_hPS, &vPoint[0]); ::GpiMove(m_hPS, &vPoint[0]);
lColor = m_brush.GetColour().GetPixel();
lBorderColor = m_pen.GetColour().GetPixel();
lControl = DRO_OUTLINEFILL; //DRO_FILL; lControl = DRO_OUTLINEFILL; //DRO_FILL;
if (m_brush.GetStyle() == wxTRANSPARENT) if (m_brush.GetStyle() == wxTRANSPARENT)
nIsTRANSPARENT = 1;
if(lColor == lBorderColor || nIsTRANSPARENT)
{
lControl = DRO_OUTLINEFILL; //DRO_FILL;
if(m_brush.GetStyle() == wxTRANSPARENT)
lControl = DRO_OUTLINE;
::GpiSetColor(m_hPS, lColor);
::GpiBox( m_hPS // handle to a presentation space
,lControl // draw the box outline ? or ?
,&vPoint[1] // address of the corner
,(LONG)dRadius // horizontal corner radius
,(LONG)dRadius // vertical corner radius
);
}
else
{
lControl = DRO_OUTLINE; lControl = DRO_OUTLINE;
::GpiBox( m_hPS // handle to a presentation space ::GpiSetColor( m_hPS
,DRO_OUTLINE // draw the box outline ? or ? ,lBorderColor
,&vPoint[1] // address of the corner );
,(LONG)dRadius // horizontal corner radius ::GpiBox( m_hPS
,(LONG)dRadius // vertical corner radius ,lControl
); ,&vPoint[1]
,0L
,0L
);
lControl = DRO_FILL;
::GpiSetColor( m_hPS
,lColor
);
vPoint[0].x = vX + 1;
vPoint[0].y = vY + 1;
vPoint[1].x = vX + vWidth - 2;
vPoint[1].y = vY + vHeight - 2;
::GpiMove(m_hPS, &vPoint[0]);
::GpiBox( m_hPS
,lControl
,&vPoint[1]
,0L
,0L
);
}
CalcBoundingBox(vX, vY); CalcBoundingBox(vX, vY);
CalcBoundingBox(vX2, vY2); CalcBoundingBox(vX2, vY2);
} // end of wxDC::DoDrawRoundedRectangle } // end of wxDC::DoDrawRoundedRectangle
@@ -1240,17 +1310,35 @@ void wxDC::DoDrawBitmap(
{ {
HBITMAP hBitmap = (HBITMAP)rBmp.GetHBITMAP(); HBITMAP hBitmap = (HBITMAP)rBmp.GetHBITMAP();
HBITMAP hBitmapOld; HBITMAP hBitmapOld;
POINTL vPoint[4];
vY = OS2Y(vY,rBmp.GetHeight()); vY = OS2Y(vY,rBmp.GetHeight());
// //
// Flip the picture as OS/2 is upside-down // Flip the picture as OS/2 is upside-down
// //
POINTL vPoint[4] = { vX, vY + rBmp.GetHeight() if (rBmp.Flip())
,vX + rBmp.GetWidth(), vY {
,0, 0 vPoint[0].x = vX;
,rBmp.GetWidth(), rBmp.GetHeight() vPoint[0].y = vY + rBmp.GetHeight();
}; vPoint[1].x = vX + rBmp.GetWidth();
vPoint[1].y = vY;
vPoint[2].x = 0;
vPoint[2].y = 0;
vPoint[3].x = rBmp.GetWidth();
vPoint[3].y = rBmp.GetHeight();
}
else
{
vPoint[0].x = vX;
vPoint[0].y = vY;
vPoint[1].x = vX + rBmp.GetWidth();
vPoint[1].y = vY + rBmp.GetHeight();
vPoint[2].x = 0;
vPoint[2].y = 0;
vPoint[3].x = rBmp.GetWidth();
vPoint[3].y = rBmp.GetHeight();
}
if (bUseMask) if (bUseMask)
{ {
wxMask* pMask = rBmp.GetMask(); wxMask* pMask = rBmp.GetMask();
@@ -1700,7 +1788,16 @@ void wxDC::DrawAnyText(
m_vRclPaint.xLeft == 0)) m_vRclPaint.xLeft == 0))
vPtlStart.y = OS2Y(vY,vTextY); vPtlStart.y = OS2Y(vY,vTextY);
else else
vPtlStart.y = vY; {
if (m_vSelectedBitmap != wxNullBitmap)
{
m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight();
m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth();
vPtlStart.y = OS2Y(vY,vTextY);
}
else
vPtlStart.y = vY;
}
PCH pzStr = (PCH)rsText.c_str(); PCH pzStr = (PCH)rsText.c_str();

View File

@@ -146,9 +146,14 @@ void wxMemoryDC::SelectObject(
(rBitmap.GetSelectedInto() == this), (rBitmap.GetSelectedInto() == this),
wxT("Bitmap is selected in another wxMemoryDC, delete the first wxMemoryDC or use SelectObject(NULL)") ); wxT("Bitmap is selected in another wxMemoryDC, delete the first wxMemoryDC or use SelectObject(NULL)") );
WXHBITMAP hBmp = rBitmap.GetHBITMAP();
if (!hBmp)
{
m_vSelectedBitmap.SetSelectedInto(NULL);
}
m_vSelectedBitmap = rBitmap; m_vSelectedBitmap = rBitmap;
WXHBITMAP hBmp = rBitmap.GetHBITMAP();
if (!hBmp) if (!hBmp)
{ {