X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9923c37dccb4e5dbe6387ceb3ab0a8202fadc231..cf4a8b2698fb853ac4b638d08d95cc8e5794d1aa:/src/os2/dc.cpp diff --git a/src/os2/dc.cpp b/src/os2/dc.cpp index 2d3673c4b5..3e6e349b6a 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: @@ -23,38 +23,34 @@ #include "wx/log.h" #include "wx/icon.h" #include "wx/msgdlg.h" -#if wxUSE_STATUSBAR + #include "wx/dcprint.h" #include "wx/statusbr.h" + #include "wx/module.h" #endif -#endif - -#include "wx/module.h" -#include "wx/dcprint.h" #include -#include #include "wx/os2/private.h" - IMPLEMENT_ABSTRACT_CLASS(wxDC, wxObject) +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 +64,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 +218,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 +241,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 @@ -359,11 +350,8 @@ wxDC::wxDC(void) m_hPS = NULL; m_bIsPaintTime = false; // True at Paint Time - wxColour vColor( wxT("BLACK") ); - m_pen.SetColour(vColor); - - vColor.Set( wxT("WHITE") ); - m_brush.SetColour(vColor); + m_pen.SetColour(*wxBLACK); + m_brush.SetColour(*wxWHITE); } // end of wxDC::wxDC @@ -503,7 +491,7 @@ void wxDC::DestroyClippingRegion(void) ::GpiSetClipRegion(m_hPS, hRgn, &hRgnOld); } - m_clipping = false; + ResetClipping(); } // end of wxDC::DestroyClippingRegion // --------------------------------------------------------------------------- @@ -526,7 +514,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 +572,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 +586,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 +596,7 @@ bool wxDC::DoGetPixel( ,GetGValue(lColor) ,GetBValue(lColor) ); - return(lColor == lPencolor); + return true; } // end of wxDC::DoGetPixel void wxDC::DoCrossHair( @@ -678,7 +656,7 @@ void wxDC::DoDrawLine( } else { - if (m_vSelectedBitmap != wxNullBitmap) + if (m_vSelectedBitmap.Ok()) { m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); @@ -869,47 +847,44 @@ void wxDC::DoDrawPoint( ); } // end of wxDC::DoDrawPoint -void wxDC::DoDrawPolygon( - int n -, wxPoint vPoints[] -, wxCoord vXoffset -, wxCoord vYoffset -, int nFillStyle -) +void wxDC::DoDrawPolygon( int n, + wxPoint vPoints[], + wxCoord vXoffset, + wxCoord vYoffset, + int nFillStyle ) { - ULONG ulCount = 1; // Number of polygons. - POLYGON vPlgn; // polygon. - ULONG flOptions = 0L; // Drawing options. + ULONG ulCount = 1; // Number of polygons. + POLYGON vPlgn; // polygon. + ULONG flOptions = 0L; // Drawing options. -////////////////////////////////////////////////////////////////////////////// -// This contains fields of option bits... to draw boundary lines as well as -// the area interior. -// -// Drawing boundary lines: -// POLYGON_NOBOUNDARY Does not draw boundary lines. -// POLYGON_BOUNDARY Draws boundary lines (the default). -// -// Construction of the area interior: -// POLYGON_ALTERNATE Constructs interior in alternate mode -// (the default). -// POLYGON_WINDING Constructs interior in winding mode. -////////////////////////////////////////////////////////////////////////////// - - ULONG flModel = 0L; // Drawing model. - -////////////////////////////////////////////////////////////////////////////// -// Drawing model. -// POLYGON_INCL Fill is inclusive of bottom right (the default). -// POLYGON_EXCL Fill is exclusive of bottom right. -// This is provided to aid migration from other graphics models. -////////////////////////////////////////////////////////////////////////////// - - LONG lHits = 0L; // Correlation/error indicator. - POINTL vPoint; - int i; - int nIsTRANSPARENT = 0; - LONG lBorderColor = 0L; - LONG lColor = 0L; + ////////////////////////////////////////////////////////////////////////////// + // This contains fields of option bits... to draw boundary lines as well as + // the area interior. + // + // Drawing boundary lines: + // POLYGON_NOBOUNDARY Does not draw boundary lines. + // POLYGON_BOUNDARY Draws boundary lines (the default). + // + // Construction of the area interior: + // POLYGON_ALTERNATE Constructs interior in alternate mode + // (the default). + // POLYGON_WINDING Constructs interior in winding mode. + ////////////////////////////////////////////////////////////////////////////// + + ULONG flModel = POLYGON_INCL; // Drawing model. + + ////////////////////////////////////////////////////////////////////////////// + // Drawing model. + // POLYGON_INCL Fill is inclusive of bottom right (the default). + // POLYGON_EXCL Fill is exclusive of bottom right. + // This is provided to aid migration from other graphics models. + ////////////////////////////////////////////////////////////////////////////// + + LONG lHits = 0L; // Correlation/error indicator. + int i; + int nIsTRANSPARENT = 0; + LONG lBorderColor = 0L; + LONG lColor = 0L; lBorderColor = m_pen.GetColour().GetPixel(); lColor = m_brush.GetColour().GetPixel(); @@ -923,20 +898,17 @@ void wxDC::DoDrawPolygon( for(i = 0; i < n; i++) { - vPlgn.aPointl[i].x = vPoints[i].x; // +xoffset; - vPlgn.aPointl[i].y = OS2Y(vPoints[i].y,0); // +yoffset; + vPlgn.aPointl[i].x = vPoints[i].x+vXoffset; + vPlgn.aPointl[i].y = OS2Y(vPoints[i].y+vYoffset,0); } - flModel = POLYGON_BOUNDARY; + flOptions = POLYGON_BOUNDARY; if(nFillStyle == wxWINDING_RULE) - flModel |= POLYGON_WINDING; + flOptions |= POLYGON_WINDING; else - flModel |= POLYGON_ALTERNATE; - - vPoint.x = vXoffset; - vPoint.y = OS2Y(vYoffset,0); + flOptions |= POLYGON_ALTERNATE; ::GpiSetColor(m_hPS, lBorderColor); - ::GpiMove(m_hPS, &vPoint); + ::GpiMove(m_hPS, &vPlgn.aPointl[0]); lHits = ::GpiPolygons(m_hPS, ulCount, &vPlgn, flOptions, flModel); free(vPlgn.aPointl); } // end of wxDC::DoDrawPolygon @@ -972,8 +944,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); @@ -1014,7 +986,7 @@ void wxDC::DoDrawRectangle( vY = OS2Y(vY,vHeight); else { - if (m_vSelectedBitmap != wxNullBitmap) + if (m_vSelectedBitmap.Ok()) { m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); @@ -1104,7 +1076,7 @@ void wxDC::DoDrawRoundedRectangle( vY = OS2Y(vY,vHeight); else { - if (m_vSelectedBitmap != wxNullBitmap) + if (m_vSelectedBitmap.Ok()) { m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); @@ -1284,7 +1256,7 @@ void wxDC::DoDrawIcon( // // Need to copy back into a bitmap. ::WinDrawPointer uses device coords // and I don't feel like figuring those out for scrollable windows so - // just convert to a bitmap then let the DoDrawBitmap routing display it + // just convert to a bitmap then let the DoDrawBitmap routine display it // if (rIcon.IsXpm()) { @@ -1307,10 +1279,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()); @@ -1397,13 +1371,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) @@ -1722,11 +1696,9 @@ void wxDC::DoDrawText( CalcBoundingBox((vX + vWidth), (vY + vHeight)); } // end of wxDC::DoDrawText -void wxDC::DrawAnyText( - const wxString& rsText -, wxCoord vX -, wxCoord vY -) +void wxDC::DrawAnyText( const wxString& rsText, + wxCoord vX, + wxCoord vY ) { int nOldBackground = 0; POINTL vPtlStart; @@ -1767,35 +1739,24 @@ void wxDC::DrawAnyText( m_vRclPaint.xRight == 0 && m_vRclPaint.xLeft == 0)) { - // - // Position Text a little differently in the Statusbar from other panels - // - if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar))) - vPtlStart.y = OS2Y(vY,vTextY); - else - vPtlStart.y = (wxCoord)(OS2Y(vY,vTextY/1.5)); // Full extent is a bit much + vPtlStart.y = OS2Y(vY,vTextY); } else { - if (m_vSelectedBitmap != wxNullBitmap) + if (m_vSelectedBitmap.Ok()) { m_vRclPaint.yTop = m_vSelectedBitmap.GetHeight(); m_vRclPaint.xRight = m_vSelectedBitmap.GetWidth(); - if (m_pCanvas && m_pCanvas->IsKindOf(CLASSINFO(wxStatusBar))) - vPtlStart.y = OS2Y(vY,vTextY); - else - vPtlStart.y = (LONG)(OS2Y(vY,vTextY/1.5)); + vPtlStart.y = OS2Y(vY,vTextY); } else vPtlStart.y = vY; } - PCH pzStr = (PCH)rsText.c_str(); - ::GpiMove(m_hPS, &vPtlStart); lHits = ::GpiCharString( m_hPS ,rsText.length() - ,pzStr + ,rsText.char_str() ); if (lHits != GPI_OK) { @@ -1887,9 +1848,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 @@ -2059,73 +2018,33 @@ void wxDC::SetBrush( } } // end of wxDC::SetBrush -void wxDC::SetBackground( - const wxBrush& rBrush -) +void wxDC::SetBackground(const wxBrush& rBrush) { m_backgroundBrush = rBrush; - if (!m_backgroundBrush.Ok()) - return; - if (m_pCanvas) - { - bool bCustomColours = true; - // - // If we haven't specified wxUSER_COLOURS, don't allow the panel/dialog box to - // change background colours from the control-panel specified colours. - // - if (m_pCanvas->IsKindOf(CLASSINFO(wxWindow)) && - ((m_pCanvas->GetWindowStyleFlag() & wxUSER_COLOURS) != wxUSER_COLOURS)) - bCustomColours = false; - if (bCustomColours) - { - if (m_backgroundBrush.GetStyle()==wxTRANSPARENT) - { - m_pCanvas->SetTransparent(true); - } - else - { - // - // Setting the background brush of a DC - // doesn't affect the window background colour. However, - // I'm leaving in the transparency setting because it's needed by - // various controls (e.g. wxStaticText) to determine whether to draw - // transparently or not. TODO: maybe this should be a new function - // wxWindow::SetTransparency(). Should that apply to the child itself, or the - // parent? - // m_canvas->SetBackgroundColour(m_backgroundBrush.GetColour()); - // - m_pCanvas->SetTransparent(false); - } - } + if (m_backgroundBrush.Ok()) + { + (void)::GpiSetBackColor((HPS)m_hPS, m_backgroundBrush.GetColour().GetPixel()); } - COLORREF vNewColor = m_backgroundBrush.GetColour().GetPixel(); - (void)::GpiSetBackColor((HPS)m_hPS, (LONG)vNewColor); } // end of wxDC::SetBackground -void wxDC::SetBackgroundMode( - int nMode -) +void wxDC::SetBackgroundMode(int nMode) { m_backgroundMode = nMode; } // end of wxDC::SetBackgroundMode -void wxDC::SetLogicalFunction( - int nFunction -) +void wxDC::SetLogicalFunction(int nFunction) { m_logicalFunction = nFunction; SetRop((WXHDC)m_hDC); } // wxDC::SetLogicalFunction -void wxDC::SetRop( - WXHDC hDC -) +void wxDC::SetRop(WXHDC hDC) { if (!hDC || m_logicalFunction < 0) return; - LONG lCRop; + LONG lCRop; switch (m_logicalFunction) { case wxXOR: @@ -2182,9 +2101,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; @@ -2234,7 +2151,7 @@ void wxDC::DoGetTextExtent( , wxCoord* pvY , wxCoord* pvDescent , wxCoord* pvExternalLeading -, wxFont* pTheFont +, const wxFont* pTheFont ) const { POINTL avPoint[TXTBOX_COUNT]; @@ -2244,24 +2161,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 + ,rsString.char_str() ,TXTBOX_COUNT // return maximum information ,avPoint // array of coordinates points ); @@ -2270,8 +2185,8 @@ void wxDC::DoGetTextExtent( vErrorCode = ::WinGetLastError(wxGetInstance()); sError = wxPMErrorToStr(vErrorCode); // DEBUG - sprintf(zMsg, "GpiQueryTextBox for %s: failed with Error: %lx - %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 ); @@ -2379,12 +2294,13 @@ void wxDC::SetMapMode( m_nWindowExtX = (int)MS_XDEV2LOG(VIEWPORT_EXTENT); m_nWindowExtY = (int)MS_YDEV2LOG(VIEWPORT_EXTENT); // ???? + + ComputeScaleAndOrigin(); + }; // end of wxDC::SetMapMode -void wxDC::SetUserScale( - double dX -, double dY -) +void wxDC::SetUserScale( double dX, + double dY ) { m_userScaleX = dX; m_userScaleY = dY; @@ -2392,10 +2308,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; @@ -2403,17 +2317,6 @@ void wxDC::SetAxisOrientation( SetMapMode(m_mappingMode); } // end of wxDC::SetAxisOrientation -void wxDC::SetSystemScale( - double dX -, double dY -) -{ - m_scaleX = dX; - m_scaleY = dY; - - SetMapMode(m_mappingMode); -} // end of wxDC::SetSystemScale - void wxDC::SetLogicalOrigin( wxCoord vX , wxCoord vY @@ -2454,71 +2357,21 @@ void wxDC::SetDeviceOrigin( ); }; // end of wxDC::SetDeviceOrigin -// --------------------------------------------------------------------------- -// coordinates transformations -// --------------------------------------------------------------------------- - -wxCoord wxDCBase::DeviceToLogicalX(wxCoord x) const -{ - return (wxCoord) (((x) - m_deviceOriginX)/(m_logicalScaleX*m_userScaleX*m_signX*m_scaleX) - m_logicalOriginX); -} - -wxCoord wxDCBase::DeviceToLogicalXRel(wxCoord x) const -{ - // axis orientation is not taken into account for conversion of a distance - return (wxCoord) ((x)/(m_logicalScaleX*m_userScaleX*m_scaleX)); -} - -wxCoord wxDCBase::DeviceToLogicalY(wxCoord y) const -{ - return (wxCoord) (((y) - m_deviceOriginY)/(m_logicalScaleY*m_userScaleY*m_signY*m_scaleY) - m_logicalOriginY); -} - -wxCoord wxDCBase::DeviceToLogicalYRel(wxCoord y) const -{ - // axis orientation is not taken into account for conversion of a distance - return (wxCoord) ((y)/(m_logicalScaleY*m_userScaleY*m_scaleY)); -} - -wxCoord wxDCBase::LogicalToDeviceX(wxCoord x) const -{ - return (wxCoord) ((x - m_logicalOriginX)*m_logicalScaleX*m_userScaleX*m_signX*m_scaleX + m_deviceOriginX); -} - -wxCoord wxDCBase::LogicalToDeviceXRel(wxCoord x) const -{ - // axis orientation is not taken into account for conversion of a distance - return (wxCoord) (x*m_logicalScaleX*m_userScaleX*m_scaleX); -} - -wxCoord wxDCBase::LogicalToDeviceY(wxCoord y) const -{ - return (wxCoord) ((y - m_logicalOriginY)*m_logicalScaleY*m_userScaleY*m_signY*m_scaleY + m_deviceOriginY); -} - -wxCoord wxDCBase::LogicalToDeviceYRel(wxCoord y) const -{ - // axis orientation is not taken into account for conversion of a distance - return (wxCoord) (y*m_logicalScaleY*m_userScaleY*m_scaleY); -} - // --------------------------------------------------------------------------- // 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; @@ -2612,7 +2465,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 @@ -2631,9 +2483,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); @@ -2641,6 +2493,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} @@ -2800,12 +2653,10 @@ bool wxDC::DoBlit( return bSuccess; } -void wxDC::DoGetSize( - int* pnWidth -, int* pnHeight -) const +void wxDC::DoGetSize( int* pnWidth, + int* pnHeight ) const { - LONG lArray[CAPS_HEIGHT]; + LONG lArray[CAPS_HEIGHT]; if(::DevQueryCaps( m_hDC ,CAPS_FAMILY @@ -2818,10 +2669,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]; @@ -2831,25 +2680,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 @@ -2869,17 +2720,12 @@ wxSize wxDC::GetPPI() const 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( - double dX -, double dY -) +void wxDC::SetLogicalScale( double dX, double dY ) { m_logicalScaleX = dX; m_logicalScaleY = dY; }; // end of wxDC::SetLogicalScale - - -