X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aad6765cbd8916ddeb0362b091663138c2e74df3..542178500559061ac046dde172186a7616dfd1e6:/src/os2/dc.cpp diff --git a/src/os2/dc.cpp b/src/os2/dc.cpp index cbfbce0d33..c0f2f0b666 100644 --- a/src/os2/dc.cpp +++ b/src/os2/dc.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dc.cpp +// Name: src/os2/dc.cpp // Purpose: wxDC class // Author: David Webster // Modified by: @@ -32,29 +32,28 @@ #include "wx/dcprint.h" #include -#include #include "wx/os2/private.h" IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) // -// wxWindows uses the Microsoft convention that the origin is the UPPER left. +// wxWidgets uses the Microsoft convention that the origin is the UPPER left. // Native OS/2 however in the GPI and PM define the origin as the LOWER left. -// In order to map OS/2 GPI/PM y coordinates to wxWindows coordinates we must +// In order to map OS/2 GPI/PM y coordinates to wxWidgets coordinates we must // perform the following transformation: // // Parent object height: POBJHEIGHT // Desried origin: WXORIGINY // Object to place's height: OBJHEIGHT // -// To get the OS2 position from the wxWindows one: +// To get the OS2 position from the wxWidgets one: // // OS2Y = POBJHEIGHT - (WXORIGINY + OBJHEIGHT) // // For OS/2 wxDC's we will always determine m_vRclPaint as the size of the // OS/2 Presentation Space associated with the device context. y is the -// desired application's y coordinate of the origin in wxWindows space. +// desired application's y coordinate of the origin in wxWidgets space. // objy is the height of the object we are going to draw. // #define OS2Y(y, objy) ((m_vRclPaint.yTop - m_vRclPaint.yBottom) - (y + objy)) @@ -68,11 +67,6 @@ static const int VIEWPORT_EXTENT = 1000; static const int MM_POINTS = 9; static const int MM_METRIC = 10; -// usually this is defined in math.h -#ifndef M_PI - static const double M_PI = 3.14159265358979323846; -#endif // M_PI - // --------------------------------------------------------------------------- // private functions // --------------------------------------------------------------------------- @@ -227,7 +221,7 @@ wxDCCacheEntry* wxDC::FindBitmapInCache( vBmpHdr.cx = nWidth; vBmpHdr.cy = nHeight; vBmpHdr.cPlanes = 1; - vBmpHdr.cBitCount = nDepth; + vBmpHdr.cBitCount = (USHORT)nDepth; pEntry->m_hBitmap = (WXHBITMAP) ::GpiCreateBitmap( hPS ,&vBmpHdr @@ -250,7 +244,7 @@ wxDCCacheEntry* wxDC::FindBitmapInCache( vBmpHdr.cx = nWidth; vBmpHdr.cy = nHeight; vBmpHdr.cPlanes = 1; - vBmpHdr.cBitCount = nDepth; + vBmpHdr.cBitCount = (USHORT)nDepth; WXHBITMAP hBitmap = (WXHBITMAP) ::GpiCreateBitmap( hPS ,&vBmpHdr @@ -503,7 +497,7 @@ void wxDC::DestroyClippingRegion(void) ::GpiSetClipRegion(m_hPS, hRgn, &hRgnOld); } - m_clipping = false; + ResetClipping(); } // end of wxDC::DestroyClippingRegion // --------------------------------------------------------------------------- @@ -526,7 +520,7 @@ bool wxDC::CanGetTextExtent() const int wxDC::GetDepth() const { LONG lArray[CAPS_COLOR_BITCOUNT]; - int nBitsPerPixel; + int nBitsPerPixel = 0; if(::DevQueryCaps( GetHDC() ,CAPS_FAMILY @@ -584,7 +578,7 @@ bool wxDC::DoFloodFill( if ((lHits = ::GpiFloodFill(m_hPS, lOptions, lColor)) != GPI_ERROR) bSuccess = true; - return true; + return bSuccess; } // end of wxDC::DoFloodFill bool wxDC::DoGetPixel( @@ -598,17 +592,7 @@ bool wxDC::DoGetPixel( vPoint.x = vX; vPoint.y = OS2Y(vY,0); - lColor = ::GpiSetPel(m_hPS, &vPoint); - - // - // Get the color of the pen - // - LONG lPencolor = 0x00ffffff; - - if (m_pen.Ok()) - { - lPencolor = m_pen.GetColour().GetPixel(); - } + lColor = ::GpiQueryPel(m_hPS, &vPoint); // // return the color of the pixel @@ -618,7 +602,7 @@ bool wxDC::DoGetPixel( ,GetGValue(lColor) ,GetBValue(lColor) ); - return(lColor == lPencolor); + return true; } // end of wxDC::DoGetPixel void wxDC::DoCrossHair( @@ -718,8 +702,6 @@ void wxDC::DoDrawArc( { POINTL vPtlPos; POINTL vPtlArc[2]; // Structure for current position - int nDx; - int nDy; double dRadius; double dAngl1; double dAngl2; @@ -756,8 +738,8 @@ void wxDC::DoDrawArc( // Medium point // dAnglmid = (dAngl1 + dAngl2)/2. + M_PI; - vXm = vXc + dRadius * cos(dAnglmid); - vYm = vYc + dRadius * sin(dAnglmid); + vXm = (wxCoord)(vXc + dRadius * cos(dAnglmid)); + vYm = (wxCoord)(vYc + dRadius * sin(dAnglmid)); DoDrawArc( vX1, vY1 ,vXm, vYm ,vXc, vYc @@ -773,8 +755,8 @@ void wxDC::DoDrawArc( // Medium point // dAnglmid = (dAngl1 + dAngl2)/2.; - vXm = vXc + dRadius * cos(dAnglmid); - vYm = vYc + dRadius * sin(dAnglmid); + vXm = (wxCoord)(vXc + dRadius * cos(dAnglmid)); + vYm = (wxCoord)(vYc + dRadius * sin(dAnglmid)); // // Ellipse main axis (r,q), (p,s) with center at (0,0) */ @@ -793,11 +775,11 @@ void wxDC::DoDrawArc( vPtlArc[1].x = vX2; vPtlArc[1].y = vY2; ::GpiPointArc(m_hPS, vPtlArc); // Draws the arc - CalcBoundingBox( (vXc - dRadius) - ,(vYc - dRadius) + CalcBoundingBox( (wxCoord)(vXc - dRadius) + ,(wxCoord)(vYc - dRadius) ); - CalcBoundingBox( (vXc + dRadius) - ,(vYc + dRadius) + CalcBoundingBox( (wxCoord)(vXc + dRadius) + ,(wxCoord)(vYc + dRadius) ); } // end of wxDC::DoDrawArc @@ -974,8 +956,8 @@ void wxDC::DoDrawLines( { int i; - CalcBoundingBox( vPoints[i].x - ,vPoints[i].y + CalcBoundingBox( vPoints[0].x + ,vPoints[0].y ); vPoint.x = vPoints[0].x; vPoint.y = OS2Y(vPoints[0].y,0); @@ -1234,7 +1216,6 @@ void wxDC::DoDrawEllipticArc( FIXED vFSweepa; // Start angle, sweep angle double dIntPart; double dFractPart; - double dRadius; vY = OS2Y(vY,vHeight); @@ -1251,8 +1232,8 @@ void wxDC::DoDrawEllipticArc( vArcp.lP = vWidth/2; vArcp.lS = 0; ::GpiSetArcParams(m_hPS, &vArcp); // Sets parameters to default - vPtlPos.x = vX + vWidth/2 * (1. + cos(DegToRad(dSa))); // Loads x-coordinate - vPtlPos.y = vY + vHeight/2 * (1. + sin(DegToRad(dSa))); // Loads y-coordinate + vPtlPos.x = (wxCoord)(vX + vWidth/2 * (1. + cos(DegToRad(dSa)))); // Loads x-coordinate + vPtlPos.y = (wxCoord)(vY + vHeight/2 * (1. + sin(DegToRad(dSa)))); // Loads y-coordinate ::GpiMove(m_hPS, &vPtlPos); // Sets current position // @@ -1310,10 +1291,12 @@ void wxDC::DoDrawBitmap( , bool bUseMask ) { +#if wxUSE_PRINTING_ARCHITECTURE if (!IsKindOf(CLASSINFO(wxPrinterDC))) +#endif { HBITMAP hBitmap = (HBITMAP)rBmp.GetHBITMAP(); - HBITMAP hBitmapOld; + HBITMAP hBitmapOld = NULLHANDLE; POINTL vPoint[4]; vY = OS2Y(vY,rBmp.GetHeight()); @@ -1400,13 +1383,13 @@ void wxDC::DoDrawBitmap( lColor = pWindowDC->m_pCanvas->GetBackgroundColour().GetPixel(); } - else if (GetBrush() != wxNullBrush) + else if (GetBrush().Ok()) lColor = GetBrush().GetColour().GetPixel(); else lColor = m_textBackgroundColour.GetPixel(); // - // Bitmap must be ina double-word alligned address so we may + // Bitmap must be in a double-word aligned address so we may // have some padding to worry about // if (nLineBoundary > 0) @@ -1564,8 +1547,8 @@ void wxDC::DoDrawBitmap( } else { - LONG lOldForeGround = ::GpiQueryColor((HPS)GetHPS()); - LONG lOldBackGround = ::GpiQueryBackColor((HPS)GetHPS()); + ULONG lOldForeGround = ::GpiQueryColor((HPS)GetHPS()); + ULONG lOldBackGround = ::GpiQueryBackColor((HPS)GetHPS()); if (m_textForegroundColour.Ok()) { @@ -1637,10 +1620,6 @@ void wxDC::DoDrawBitmap( unsigned char cOldGreenFore = (unsigned char)(lOldForeGround >> 8); unsigned char cOldBlueFore = (unsigned char)lOldForeGround; - unsigned char cOldRedBack = (unsigned char)(lOldBackGround >> 16); - unsigned char cOldGreenBack = (unsigned char)(lOldBackGround >> 8); - unsigned char cOldBlueBack = (unsigned char)lOldBackGround; - unsigned char cRedFore = (unsigned char)(lForeGround >> 16); unsigned char cGreenFore = (unsigned char)(lForeGround >> 8); unsigned char cBlueFore = (unsigned char)lForeGround; @@ -1780,7 +1759,7 @@ void wxDC::DrawAnyText( if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar))) vPtlStart.y = OS2Y(vY,vTextY); else - vPtlStart.y = OS2Y(vY,vTextY/1.5); // Full extent is a bit much + vPtlStart.y = (wxCoord)(OS2Y(vY,vTextY/1.5)); // Full extent is a bit much } else { @@ -1791,7 +1770,7 @@ void wxDC::DrawAnyText( if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar))) vPtlStart.y = OS2Y(vY,vTextY); else - vPtlStart.y = OS2Y(vY,vTextY/1.5); + vPtlStart.y = (LONG)(OS2Y(vY,vTextY/1.5)); } else vPtlStart.y = vY; @@ -1894,9 +1873,7 @@ void wxDC::DoDrawRotatedText( // set GDI objects // --------------------------------------------------------------------------- -void wxDC::DoSelectPalette( - bool bRealize -) +void wxDC::DoSelectPalette( bool WXUNUSED(bRealize) ) { // // Set the old object temporarily, in case the assignment deletes an object @@ -2189,9 +2166,7 @@ void wxDC::SetRop( ::GpiSetMix((HPS)hDC, lCRop); } // end of wxDC::SetRop -bool wxDC::StartDoc( - const wxString& rsMessage -) +bool wxDC::StartDoc( const wxString& WXUNUSED(rsMessage) ) { // We might be previewing, so return true to let it continue. return true; @@ -2251,24 +2226,22 @@ void wxDC::DoGetTextExtent( int l; FONTMETRICS vFM; // metrics structure BOOL bRc; - char* pStr; ERRORID vErrorCode; // last error id code wxFont* pFontToUse = (wxFont*)pTheFont; - char zMsg[128]; // DEBUG + wxChar zMsg[128]; // DEBUG wxString sError; if (!pFontToUse) pFontToUse = (wxFont*)&m_font; l = rsString.length(); - pStr = (PCH) rsString.c_str(); // // In world coordinates. // bRc = ::GpiQueryTextBox( m_hPS ,l - ,pStr + ,(PCH)rsString.c_str() ,TXTBOX_COUNT // return maximum information ,avPoint // array of coordinates points ); @@ -2277,8 +2250,8 @@ void wxDC::DoGetTextExtent( vErrorCode = ::WinGetLastError(wxGetInstance()); sError = wxPMErrorToStr(vErrorCode); // DEBUG - sprintf(zMsg, "GpiQueryTextBox for %s: failed with Error: %x - %s", pStr, vErrorCode, sError.c_str()); - (void)wxMessageBox( "wxWindows Menu sample" + wxSprintf(zMsg, _T("GpiQueryTextBox for %s: failed with Error: %lx - %s"), rsString.c_str(), vErrorCode, sError.c_str()); + (void)wxMessageBox( _T("wxWidgets Menu sample") ,zMsg ,wxICON_INFORMATION ); @@ -2388,10 +2361,8 @@ void wxDC::SetMapMode( // ???? }; // end of wxDC::SetMapMode -void wxDC::SetUserScale( - double dX -, double dY -) +void wxDC::SetUserScale( double dX, + double dY ) { m_userScaleX = dX; m_userScaleY = dY; @@ -2399,10 +2370,8 @@ void wxDC::SetUserScale( SetMapMode(m_mappingMode); } // end of wxDC::SetUserScale -void wxDC::SetAxisOrientation( - bool bXLeftRight -, bool bYBottomUp -) +void wxDC::SetAxisOrientation( bool bXLeftRight, + bool bYBottomUp ) { m_signX = bXLeftRight ? 1 : -1; m_signY = bYBottomUp ? -1 : 1; @@ -2513,19 +2482,17 @@ wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const // bit blit // --------------------------------------------------------------------------- -bool wxDC::DoBlit( - wxCoord vXdest -, wxCoord vYdest -, wxCoord vWidth -, wxCoord vHeight -, wxDC* pSource -, wxCoord vXsrc -, wxCoord vYsrc -, int nRop -, bool bUseMask -, wxCoord vXsrcMask -, wxCoord vYsrcMask -) +bool wxDC::DoBlit( wxCoord vXdest, + wxCoord vYdest, + wxCoord vWidth, + wxCoord vHeight, + wxDC* pSource, + wxCoord vXsrc, + wxCoord vYsrc, + int nRop, + bool bUseMask, + wxCoord WXUNUSED(vXsrcMask), + wxCoord WXUNUSED(vYsrcMask) ) { wxMask* pMask = NULL; CHARBUNDLE vCbnd; @@ -2619,7 +2586,6 @@ bool wxDC::DoBlit( vBmpHdr.cBitCount = 24; #if wxUSE_DC_CACHEING - if (true) { // // create a temp buffer bitmap and DCs to access it and the mask @@ -2638,9 +2604,9 @@ bool wxDC::DoBlit( hPSMask = pDCCacheEntry1->m_hPS; hDCBuffer = (HDC)pDCCacheEntry2->m_hPS; hBufBitmap = (HBITMAP)pBitmapCacheEntry->m_hBitmap; + wxUnusedVar(hDCMask); } - else -#endif +#else { hDCMask = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDOP, NULLHANDLE); hDCBuffer = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDOP, NULLHANDLE); @@ -2648,6 +2614,7 @@ bool wxDC::DoBlit( hPSBuffer = ::GpiCreatePS(vHabmain, hDCBuffer, &vSize, PU_PELS | GPIT_MICRO | GPIA_ASSOC); hBufBitmap = ::GpiCreateBitmap(GetHPS(), &vBmpHdr, 0L, NULL, NULL); } +#endif POINTL aPoint1[4] = { {0, 0} ,{vWidth, vHeight} @@ -2825,10 +2792,8 @@ void wxDC::DoGetSize( } }; // end of wxDC::DoGetSize( -void wxDC::DoGetSizeMM( - int* pnWidth -, int* pnHeight -) const +void wxDC::DoGetSizeMM( int* pnWidth, + int* pnHeight ) const { LONG lArray[CAPS_VERTICAL_RESOLUTION]; @@ -2838,25 +2803,27 @@ void wxDC::DoGetSizeMM( ,lArray )) { - int nWidth; - int nHeight; - int nHorzRes; - int nVertRes; + if(pnWidth) + { + int nWidth = lArray[CAPS_WIDTH]; + int nHorzRes = lArray[CAPS_HORIZONTAL_RESOLUTION]; // returns pel/meter + *pnWidth = (nHorzRes/1000) * nWidth; + } - nWidth = lArray[CAPS_WIDTH]; - nHeight = lArray[CAPS_HEIGHT]; - nHorzRes = lArray[CAPS_HORIZONTAL_RESOLUTION]; // returns pel/meter - nVertRes = lArray[CAPS_VERTICAL_RESOLUTION]; // returns pel/meter - nWidth = (nHorzRes/1000) * nWidth; - nHeight = (nVertRes/1000) * nHeight; + if(pnHeight) + { + int nHeight = lArray[CAPS_HEIGHT]; + int nVertRes = lArray[CAPS_VERTICAL_RESOLUTION]; // returns pel/meter + *pnHeight = (nVertRes/1000) * nHeight; + } } }; // end of wxDC::DoGetSizeMM wxSize wxDC::GetPPI() const { LONG lArray[CAPS_VERTICAL_RESOLUTION]; - int nWidth; - int nHeight; + int nWidth = 0; + int nHeight = 0; if(::DevQueryCaps( m_hDC ,CAPS_FAMILY @@ -2873,10 +2840,11 @@ wxSize wxDC::GetPPI() const nPelHeight = lArray[CAPS_HEIGHT]; nHorzRes = lArray[CAPS_HORIZONTAL_RESOLUTION]; // returns pel/meter nVertRes = lArray[CAPS_VERTICAL_RESOLUTION]; // returns pel/meter - nWidth = (nHorzRes/39.3) * nPelWidth; - nHeight = (nVertRes/39.3) * nPelHeight; + nWidth = (int)((nHorzRes/39.3) * nPelWidth); + nHeight = (int)((nVertRes/39.3) * nPelHeight); } - return (wxSize(nWidth,nHeight)); + wxSize ppisize(nWidth, nHeight); + return ppisize; } // end of wxDC::GetPPI void wxDC::SetLogicalScale( @@ -2887,6 +2855,3 @@ void wxDC::SetLogicalScale( m_logicalScaleX = dX; m_logicalScaleY = dY; }; // end of wxDC::SetLogicalScale - - -