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:
@@ -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
|
||||||
|
127
src/os2/dc.cpp
127
src/os2/dc.cpp
@@ -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();
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user