/***************************************************************************** * * rects - Entry points for Win32 to Win 16 converter * * Date: 7/1/91 * Author: Jeffrey Newman (c-jeffn) * * Copyright 1991 Microsoft Corp *****************************************************************************/ #include "precomp.h" #pragma hdrstop /*************************************************************************** * Rectangle - Win32 to Win16 Metafile Converter Entry Point **************************************************************************/ BOOL WINAPI DoRectangle ( PLOCALDC pLocalDC, int x1, int y1, int x2, int y2 ) { BOOL b ; b = bConicCommon (pLocalDC, x1, y1, x2, y2, 0, 0, 0, 0, EMR_RECTANGLE) ; return(b) ; } /*************************************************************************** * RoundRect - Win32 to Win16 Metafile Converter Entry Point **************************************************************************/ BOOL WINAPI DoRoundRect ( PLOCALDC pLocalDC, int x1, int y1, int x2, int y2, int x3, int y3 ) { BOOL b ; b = bConicCommon (pLocalDC, x1, y1, x2, y2, x3, y3, 0, 0, EMR_ROUNDRECT); return(b) ; } /*************************************************************************** * IntersectClipRect/ExcludeClipRect - Win32 to Win16 Metafile Converter * Entry Point **************************************************************************/ BOOL WINAPI DoClipRect ( PLOCALDC pLocalDC, INT xLeft, INT yTop, INT xRight, INT yBottom, INT mrType ) { BOOL bNoClipRgn ; // Do it to the helper DC. // If there is no initial clip region, we have to // create one. Otherwise, GDI will create some random default // clipping region for us! bNoClipRgn = bNoDCRgn(pLocalDC, DCRGN_CLIP); if (bNoClipRgn) { BOOL bRet; HRGN hrgnDefault; if (!(hrgnDefault = CreateRectRgn((int) (SHORT) MINSHORT, (int) (SHORT) MINSHORT, (int) (SHORT) MAXSHORT, (int) (SHORT) MAXSHORT))) { ASSERTGDI(FALSE, "MF3216: CreateRectRgn failed"); return(FALSE); } bRet = (ExtSelectClipRgn(pLocalDC->hdcHelper, hrgnDefault, RGN_COPY) != ERROR); ASSERTGDI(bRet, "MF3216: ExtSelectClipRgn failed"); if (!DeleteObject(hrgnDefault)) ASSERTGDI(FALSE, "MF3216: DeleteObject failed"); if (!bRet) return(FALSE); } switch(mrType) { case EMR_INTERSECTCLIPRECT: if (!IntersectClipRect(pLocalDC->hdcHelper, xLeft, yTop, xRight, yBottom)) return(FALSE); break; case EMR_EXCLUDECLIPRECT: if (!ExcludeClipRect(pLocalDC->hdcHelper, xLeft, yTop, xRight, yBottom)) return(FALSE); break; default: ASSERTGDI(FALSE, "MF3216: DoClipRect, bad mrType\n"); break; } // Dump the clip region data. return(bDumpDCClipping(pLocalDC)); #if 0 // It's too much work to try to optimize it here! POINTL aptl[2] ; // Dump the clip region data if there is a strange xform. if (pLocalDC->flags & STRANGE_XFORM || bNoClipRgn) return(bDumpDCClipping(pLocalDC)); // Do the simple case. // Are they inclusive-exclusive?! aptl[0].x = xLeft; aptl[0].y = yTop ; aptl[1].x = xRight; aptl[1].y = yBottom ; // Order the rectangle first, see EXFORMOBJ::bXform(ERECTL) in gre! if (!bXformRWorldToPPage(pLocalDC, (PPOINTL) aptl, 2)) return(FALSE); ASSERTGDI(bCoordinateOverflowTest((PLONG) aptl, 4), "MF3216: coord overflow"); // Verify rectangle ordering and check off-by-1 error! if (mrType == EMR_INTERSECTCLIPRECT) return(bEmitWin16IntersectClipRect(pLocalDC, (SHORT) aptl[0].x, (SHORT) aptl[0].y, (SHORT) aptl[1].x, (SHORT) aptl[1].y)); else return(bEmitWin16ExcludeClipRect(pLocalDC, (SHORT) aptl[0].x, (SHORT) aptl[0].y, (SHORT) aptl[1].x, (SHORT) aptl[1].y)); #endif }