Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / reactos / win32ss / gdi / gdi32 / objects / coord.c
diff --git a/reactos/win32ss/gdi/gdi32/objects/coord.c b/reactos/win32ss/gdi/gdi32/objects/coord.c
deleted file mode 100644 (file)
index 727d4bd..0000000
+++ /dev/null
@@ -1,934 +0,0 @@
-/*
- * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS System Libraries
- * FILE:            win32ss/gdi/gdi32/objects/coord.c
- * PURPOSE:         Functions for coordinate transformation
- * PROGRAMMER:
- */
-#include <precomp.h>
-
-/* Currently we use a MATRIX inside the DC_ATTR containing the
-   coordinate transformations, while we deal with XFORM structures
-   internally. If we move all coordinate transformation to gdi32,
-   we might as well have an XFORM structure in the DC_ATTR. */
-void
-MatrixToXForm(XFORM *pxform, const MATRIX *pmx)
-{
-    XFORML *pxforml = (XFORML*)pxform;
-    pxforml->eM11 = FOtoF(&pmx->efM11);
-    pxforml->eM12 = FOtoF(&pmx->efM12);
-    pxforml->eM21 = FOtoF(&pmx->efM21);
-    pxforml->eM22 = FOtoF(&pmx->efM22);
-    pxforml->eDx = FOtoF(&pmx->efDx);
-    pxforml->eDy = FOtoF(&pmx->efDy);
-}
-
-void
-GdiTransformPoints2(
-    _In_ XFORM *pxform,
-    _Out_writes_(nCount) PPOINT pptOut,
-    _In_reads_(nCount) PPOINT pptIn,
-    _In_ ULONG nCount)
-{
-    ULONG i;
-    FLOAT x, y;
-
-    for (i = 0; i < nCount; i++)
-    {
-        x = pptIn[i].x * pxform->eM11 + pptIn[i].y * pxform->eM12 + pxform->eDx;
-        pptOut[i].x = _lrintf(x);
-        y = pptIn[i].x * pxform->eM21 + pptIn[i].y * pxform->eM22 + pxform->eDy;
-        pptOut[i].y = _lrintf(y);
-    }
-}
-
-FORCEINLINE
-void
-GdiTransformPoints(
-    _In_ MATRIX *pmx,
-    _Out_writes_(nCount) PPOINT pptOut,
-    _In_reads_(nCount) PPOINT pptIn,
-    _In_ ULONG nCount)
-{
-    XFORM xform;
-
-    MatrixToXForm(&xform, pmx);
-    GdiTransformPoints2(&xform, pptOut, pptIn, nCount);
-}
-
-#define MAX_OFFSET 4294967041.0
-#define _fmul(x,y) (((x) == 0) ? 0 : (x) * (y))
-
-BOOL
-WINAPI
-CombineTransform(
-    _Out_ LPXFORM pxfResult,
-    _In_ const XFORM *pxf1,
-    _In_ const XFORM *pxf2)
-{
-    XFORM xformTmp;
-
-    /* Check paramters */
-    if (!pxfResult || !pxf1 || !pxf2) return FALSE;
-
-    /* Do matrix multiplication, start with scaling elements */
-    xformTmp.eM11 = (pxf1->eM11 * pxf2->eM11) + (pxf1->eM12 * pxf2->eM21);
-    xformTmp.eM22 = (pxf1->eM21 * pxf2->eM12) + (pxf1->eM22 * pxf2->eM22);
-
-    /* Calculate shear/rotate elements only of they are present */
-    if ((pxf1->eM12 != 0.) || (pxf1->eM21 != 0.) ||
-        (pxf2->eM12 != 0.) || (pxf2->eM21 != 0.))
-    {
-        xformTmp.eM12 = (pxf1->eM11 * pxf2->eM12) + (pxf1->eM12 * pxf2->eM22);
-        xformTmp.eM21 = (pxf1->eM21 * pxf2->eM11) + (pxf1->eM22 * pxf2->eM21);
-    }
-    else
-    {
-        xformTmp.eM12 = 0.;
-        xformTmp.eM21 = 0.;
-    }
-
-    /* Calculate the offset */
-    xformTmp.eDx = _fmul(pxf1->eDx, pxf2->eM11) + _fmul(pxf1->eDy, pxf2->eM21) + pxf2->eDx;
-    xformTmp.eDy = _fmul(pxf1->eDx, pxf2->eM12) + _fmul(pxf1->eDy, pxf2->eM22) + pxf2->eDy;
-
-    /* Check for invalid offset ranges */
-    if ((xformTmp.eDx > MAX_OFFSET) || (xformTmp.eDx < -MAX_OFFSET) ||
-        (xformTmp.eDy > MAX_OFFSET) || (xformTmp.eDy < -MAX_OFFSET))
-    {
-        return FALSE;
-    }
-
-    /* All is ok, return the calculated values */
-    *pxfResult = xformTmp;
-    return TRUE;
-}
-
-
-/*
- * @implemented
- *
- */
-int
-WINAPI
-GetMapMode(
-    _In_ HDC hdc)
-{
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return 0;
-    }
-
-    /* Return the map mode */
-    return pdcattr->iMapMode;
-}
-
-/*
- * @implemented
- */
-INT
-WINAPI
-SetMapMode(
-    _In_ HDC hdc,
-    _In_ INT iMode)
-{
-    PDC_ATTR pdcattr;
-
-    /* Handle METADC16 here, since we don't have a DCATTR. */
-    if (GDI_HANDLE_GET_TYPE(hdc) == GDILoObjType_LO_METADC16_TYPE) \
-    {
-        return GetAndSetDCDWord(hdc, GdiGetSetMapMode, iMode, 0, 0, 0 );
-    }
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return 0;
-    }
-
-    /* Force change if Isotropic is set for recompute. */
-    if ((iMode != pdcattr->iMapMode) || (iMode == MM_ISOTROPIC))
-    {
-        pdcattr->ulDirty_ &= ~SLOW_WIDTHS;
-        return GetAndSetDCDWord(hdc, GdiGetSetMapMode, iMode, 0, 0, 0 );
-    }
-
-    return pdcattr->iMapMode;
-}
-
-
-BOOL
-WINAPI
-DPtoLP(
-    _In_ HDC hdc,
-    _Inout_updates_(nCount) LPPOINT lpPoints,
-    _In_ INT nCount)
-{
-#if 0
-    INT i;
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    if (pdcattr->flXform & ANY_XFORM_CHANGES)
-    {
-        GdiFixupTransforms(pdcattr);
-    }
-
-    // FIXME: can this fail on Windows?
-    GdiTransformPoints(&pdcattr->mxDeviceToWorld, lpPoints, lpPoints, nCount);
-
-    return TRUE;
-#endif
-    return NtGdiTransformPoints(hdc, lpPoints, lpPoints, nCount, GdiDpToLp);
-}
-
-BOOL
-WINAPI
-LPtoDP(
-    _In_ HDC hdc,
-    _Inout_updates_(nCount) LPPOINT lpPoints,
-    _In_ INT nCount)
-{
-#if 0
-    INT i;
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    if (pdcattr->flXform & ANY_XFORM_CHANGES)
-    {
-        GdiFixupTransforms(pdcattr);
-    }
-
-    // FIXME: can this fail on Windows?
-    GdiTransformPoints(&pdcattr->mxWorldToDevice, lpPoints, lpPoints, nCount);
-
-    return TRUE;
-#endif
-    return NtGdiTransformPoints(hdc, lpPoints, lpPoints, nCount, GdiLpToDp);
-}
-
-/*
- * @implemented
- *
- */
-BOOL
-WINAPI
-GetCurrentPositionEx(
-    _In_ HDC hdc,
-    _Out_ LPPOINT lpPoint)
-{
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if ((pdcattr == NULL) || (lpPoint == NULL))
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    if (pdcattr->ulDirty_ & DIRTY_PTLCURRENT) // have a hit!
-    {
-        lpPoint->x = pdcattr->ptfxCurrent.x;
-        lpPoint->y = pdcattr->ptfxCurrent.y;
-        DPtoLP(hdc, lpPoint, 1);          // reconvert back.
-        pdcattr->ptlCurrent.x = lpPoint->x; // save it
-        pdcattr->ptlCurrent.y = lpPoint->y;
-        pdcattr->ulDirty_ &= ~DIRTY_PTLCURRENT; // clear bit
-    }
-    else
-    {
-        lpPoint->x = pdcattr->ptlCurrent.x;
-        lpPoint->y = pdcattr->ptlCurrent.y;
-    }
-
-    return TRUE;
-}
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-GetWorldTransform(
-    _In_ HDC hdc,
-    _Out_ LPXFORM pxform)
-{
-#if 0
-    PDC_ATTR pdcattr;
-
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        SetLastError(ERROR_INVALID_HANDLE);
-        return FALSE;
-    }
-
-    if (pdcattr->flXform & ANY_XFORM_INVALID)
-    {
-        GdiFixupTransforms(pdcattr);
-    }
-
-    MatrixToXForm(pxform, &pdcattr->mxWorldToDevice);
-#endif
-    return NtGdiGetTransform(hdc, GdiWorldSpaceToPageSpace, pxform);
-}
-
-
-BOOL
-WINAPI
-SetWorldTransform(
-    _In_ HDC hdc,
-    _Out_ CONST XFORM *pxform)
-{
-    /* FIXME  shall we add undoc #define MWT_SETXFORM 4 ?? */
-    return ModifyWorldTransform(hdc, pxform, MWT_MAX+1);
-}
-
-
-BOOL
-WINAPI
-ModifyWorldTransform(
-    _In_ HDC hdc,
-    _In_opt_ CONST XFORM *pxform,
-    _In_ DWORD dwMode)
-{
-    PDC_ATTR pdcattr;
-
-    if (GDI_HANDLE_GET_TYPE(hdc) == GDILoObjType_LO_METADC16_TYPE)
-        return FALSE;
-
-    HANDLE_METADC(BOOL, ModifyWorldTransform, FALSE, hdc, pxform, dwMode);
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    /* Check that graphics mode is GM_ADVANCED */
-    if (pdcattr->iGraphicsMode != GM_ADVANCED)
-        return FALSE;
-
-    /* Call win32k to do the work */
-    return NtGdiModifyWorldTransform(hdc, (LPXFORM)pxform, dwMode);
-}
-
-BOOL
-WINAPI
-GetViewportExtEx(
-    _In_ HDC hdc,
-    _Out_ LPSIZE lpSize)
-{
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-
-    /* Check if we need to update values */
-    if ((pdcattr->flXform & PAGE_EXTENTS_CHANGED) &&
-        (pdcattr->iMapMode == MM_ISOTROPIC))
-    {
-        /* Call win32k to do the work */
-        return NtGdiGetDCPoint(hdc, GdiGetViewPortExt, (PPOINTL)lpSize);
-    }
-
-    /* Nothing to calculate, return the current extension */
-    lpSize->cx = pdcattr->szlViewportExt.cx;
-    lpSize->cy = pdcattr->szlViewportExt.cy;
-
-    return TRUE;
-}
-
-
-BOOL
-WINAPI
-GetViewportOrgEx(
-    _In_ HDC hdc,
-    _Out_ LPPOINT lpPoint)
-{
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-
-    /* Get the current viewport org */
-    lpPoint->x = pdcattr->ptlViewportOrg.x;
-    lpPoint->y = pdcattr->ptlViewportOrg.y;
-
-    /* Handle right-to-left layout */
-    if (pdcattr->dwLayout & LAYOUT_RTL)
-        lpPoint->x = -lpPoint->x;
-
-    return TRUE;
-}
-
-
-BOOL
-WINAPI
-GetWindowExtEx(
-    _In_ HDC hdc,
-    _Out_ LPSIZE lpSize)
-{
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-
-    /* Get the current window extension */
-    lpSize->cx = pdcattr->szlWindowExt.cx;
-    lpSize->cy = pdcattr->szlWindowExt.cy;
-
-    /* Handle right-to-left layout */
-    if (pdcattr->dwLayout & LAYOUT_RTL)
-        lpSize->cx = -lpSize->cx;
-
-    return TRUE;
-}
-
-
-BOOL
-WINAPI
-GetWindowOrgEx(
-    _In_ HDC hdc,
-    _Out_ LPPOINT lpPoint)
-{
-    PDC_ATTR pdcattr;
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-
-    /* Get the current window origin */
-    lpPoint->x = pdcattr->ptlWindowOrg.x;
-    lpPoint->y = pdcattr->ptlWindowOrg.y;
-
-    return TRUE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-WINAPI
-SetViewportExtEx(
-    _In_ HDC hdc,
-    _In_ int nXExtent,
-    _In_ int nYExtent,
-    _Out_opt_ LPSIZE lpSize)
-{
-    PDC_ATTR pdcattr;
-
-    HANDLE_METADC(BOOL, SetViewportExtEx, FALSE, hdc, nXExtent, nYExtent, lpSize);
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    /* Check if the caller wants the old extension */
-    if (lpSize)
-    {
-        /* Return the current viewport extension */
-        lpSize->cx = pdcattr->szlViewportExt.cx;
-        lpSize->cy = pdcattr->szlViewportExt.cy;
-    }
-
-    /* Check for trivial case */
-    if ((pdcattr->szlViewportExt.cx == nXExtent) &&
-        (pdcattr->szlViewportExt.cy == nYExtent))
-        return TRUE;
-
-    /* Only change viewport extension if we are in iso or aniso mode */
-    if ((pdcattr->iMapMode == MM_ISOTROPIC) ||
-        (pdcattr->iMapMode == MM_ANISOTROPIC))
-    {
-        if (NtCurrentTeb()->GdiTebBatch.HDC == hdc)
-        {
-            if (pdcattr->ulDirty_ & DC_FONTTEXT_DIRTY)
-            {
-                NtGdiFlush(); // Sync up pdcattr from Kernel space.
-                pdcattr->ulDirty_ &= ~(DC_MODE_DIRTY|DC_FONTTEXT_DIRTY);
-            }
-        }
-
-        /* Set the new viewport extension */
-        pdcattr->szlViewportExt.cx = nXExtent;
-        pdcattr->szlViewportExt.cy = nYExtent;
-
-        /* Handle right-to-left layout */
-        if (pdcattr->dwLayout & LAYOUT_RTL)
-            NtGdiMirrorWindowOrg(hdc);
-
-        /* Update xform flags */
-        pdcattr->flXform |= (PAGE_EXTENTS_CHANGED|INVALIDATE_ATTRIBUTES|DEVICE_TO_WORLD_INVALID);
-    }
-
-    return TRUE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-WINAPI
-SetWindowOrgEx(
-    _In_ HDC hdc,
-    _In_ int X,
-    _In_ int Y,
-    _Out_opt_ LPPOINT lpPoint)
-{
-    PDC_ATTR pdcattr;
-
-    HANDLE_METADC(BOOL, SetWindowOrgEx, FALSE, hdc, X, Y, lpPoint);
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (pdcattr == NULL)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-#if 0
-    if (lpPoint)
-    {
-        lpPoint->x = pdcattr->ptlWindowOrg.x;
-        lpPoint->y = pdcattr->ptlWindowOrg.y;
-    }
-
-    if ((pdcattr->ptlWindowOrg.x == X) && (pdcattr->ptlWindowOrg.y == Y))
-        return TRUE;
-
-    if (NtCurrentTeb()->GdiTebBatch.HDC == (ULONG)hdc)
-    {
-        if (pdcattr->ulDirty_ & DC_FONTTEXT_DIRTY)
-        {
-            NtGdiFlush(); // Sync up pdcattr from Kernel space.
-            pdcattr->ulDirty_ &= ~(DC_MODE_DIRTY|DC_FONTTEXT_DIRTY);
-        }
-    }
-
-    pdcattr->ptlWindowOrg.x = X;
-    pdcattr->lWindowOrgx    = X;
-    pdcattr->ptlWindowOrg.y = Y;
-    if (pdcattr->dwLayout & LAYOUT_RTL) NtGdiMirrorWindowOrg(hdc);
-    pdcattr->flXform |= (PAGE_XLATE_CHANGED|DEVICE_TO_WORLD_INVALID);
-    return TRUE;
-#endif
-    return NtGdiSetWindowOrgEx(hdc, X, Y, lpPoint);
-}
-
-/*
- * @unimplemented
- */
-BOOL
-WINAPI
-SetWindowExtEx(
-    _In_ HDC hdc,
-    _In_ INT nXExtent,
-    _In_ INT nYExtent,
-    _Out_opt_ LPSIZE lpSize)
-{
-    PDC_ATTR pdcattr;
-
-    HANDLE_METADC(BOOL, SetWindowExtEx, FALSE, hdc, nXExtent, nYExtent, lpSize);
-
-    /* Get the DC attr */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        /* Set the error value and return failure */
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    /* Check if the caller wants the old extension */
-    if (lpSize)
-    {
-        /* Return the current window extension */
-        lpSize->cx = pdcattr->szlWindowExt.cx;
-        lpSize->cy = pdcattr->szlWindowExt.cy;
-
-        /* Handle right-to-left layout */
-        if (pdcattr->dwLayout & LAYOUT_RTL)
-            lpSize->cx = -lpSize->cx;
-    }
-
-    if (pdcattr->dwLayout & LAYOUT_RTL)
-    {
-        NtGdiMirrorWindowOrg(hdc);
-        pdcattr->flXform |= (PAGE_EXTENTS_CHANGED|INVALIDATE_ATTRIBUTES|DEVICE_TO_WORLD_INVALID);
-    }
-    else if ((pdcattr->iMapMode == MM_ISOTROPIC) ||
-             (pdcattr->iMapMode == MM_ANISOTROPIC))
-    {
-        if ((pdcattr->szlWindowExt.cx == nXExtent) &&
-            (pdcattr->szlWindowExt.cy == nYExtent))
-            return TRUE;
-
-        if ((!nXExtent) || (!nYExtent))
-            return FALSE;
-
-        if (NtCurrentTeb()->GdiTebBatch.HDC == hdc)
-        {
-            if (pdcattr->ulDirty_ & DC_FONTTEXT_DIRTY)
-            {
-                NtGdiFlush(); // Sync up Dc_Attr from Kernel space.
-                pdcattr->ulDirty_ &= ~(DC_MODE_DIRTY|DC_FONTTEXT_DIRTY);
-            }
-        }
-
-        pdcattr->szlWindowExt.cx = nXExtent;
-        pdcattr->szlWindowExt.cy = nYExtent;
-        if (pdcattr->dwLayout & LAYOUT_RTL)
-            NtGdiMirrorWindowOrg(hdc);
-
-        pdcattr->flXform |= (PAGE_EXTENTS_CHANGED|INVALIDATE_ATTRIBUTES|DEVICE_TO_WORLD_INVALID);
-    }
-
-    return TRUE;
-}
-
-/*
- * @unimplemented
- */
-BOOL
-WINAPI
-SetViewportOrgEx(
-    _In_ HDC hdc,
-    _In_ int X,
-    _In_ int Y,
-    _Out_opt_ LPPOINT lpPoint)
-{
-    PDC_ATTR pdcattr;
-
-    HANDLE_METADC(BOOL, SetViewportOrgEx, FALSE, hdc, X, Y, lpPoint);
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-
-#if 0
-    if (lpPoint)
-    {
-        lpPoint->x = pdcattr->ptlViewportOrg.x;
-        lpPoint->y = pdcattr->ptlViewportOrg.y;
-        if (pdcattr->dwLayout & LAYOUT_RTL) lpPoint->x = -lpPoint->x;
-    }
-    pdcattr->flXform |= (PAGE_XLATE_CHANGED|DEVICE_TO_WORLD_INVALID);
-    if (pdcattr->dwLayout & LAYOUT_RTL) X = -X;
-    pdcattr->ptlViewportOrg.x = X;
-    pdcattr->ptlViewportOrg.y = Y;
-    return TRUE;
-#endif
-    return NtGdiSetViewportOrgEx(hdc,X,Y,lpPoint);
-}
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-ScaleViewportExtEx(
-    _In_ HDC hdc,
-    _In_ INT xNum,
-    _In_ INT xDenom,
-    _In_ INT yNum,
-    _In_ INT yDenom,
-    _Out_ LPSIZE lpSize)
-{
-    HANDLE_METADC(BOOL, ScaleViewportExtEx, FALSE, hdc, xNum, xDenom, yNum, yDenom, lpSize);
-
-    if (!GdiGetDcAttr(hdc))
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    return NtGdiScaleViewportExtEx(hdc, xNum, xDenom, yNum, yDenom, lpSize);
-}
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-ScaleWindowExtEx(
-    _In_ HDC hdc,
-    _In_ INT xNum,
-    _In_ INT xDenom,
-    _In_ INT yNum,
-    _In_ INT yDenom,
-    _Out_ LPSIZE lpSize)
-{
-    HANDLE_METADC(BOOL, ScaleWindowExtEx, FALSE, hdc, xNum, xDenom, yNum, yDenom, lpSize);
-
-    if (!GdiGetDcAttr(hdc))
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return FALSE;
-    }
-
-    return NtGdiScaleWindowExtEx(hdc, xNum, xDenom, yNum, yDenom, lpSize);
-}
-
-/*
- * @implemented
- */
-DWORD
-WINAPI
-GetLayout(
-    _In_ HDC hdc)
-{
-    PDC_ATTR pdcattr;
-
-    /* METADC16 is not supported in this API */
-    if (GDI_HANDLE_GET_TYPE(hdc) == GDILoObjType_LO_METADC16_TYPE)
-    {
-        return GDI_ERROR;
-    }
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        /* Set the error value and return failure */
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return GDI_ERROR;
-    }
-
-    /* Return the layout */
-    return pdcattr->dwLayout;
-}
-
-
-/*
- * @implemented
- */
-DWORD
-WINAPI
-SetLayout(
-    _In_ HDC hdc,
-    _In_ DWORD dwLayout)
-{
-    HANDLE_METADC(DWORD, SetLayout, GDI_ERROR, hdc, dwLayout);
-
-    if (!GdiGetDcAttr(hdc))
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return GDI_ERROR;
-    }
-
-    return NtGdiSetLayout(hdc, -1, dwLayout);
-}
-
-/*
- * @implemented
- */
-DWORD
-WINAPI
-SetLayoutWidth(
-    _In_ HDC hdc,
-    _In_ LONG wox,
-    _In_ DWORD dwLayout)
-{
-    /* Only normal DCs are handled here */
-    if (GDI_HANDLE_GET_TYPE(hdc) != GDILoObjType_LO_DC_TYPE)
-    {
-        return GDI_ERROR;
-    }
-
-    if (!GdiGetDcAttr(hdc))
-    {
-        SetLastError(ERROR_INVALID_PARAMETER);
-        return GDI_ERROR;
-    }
-
-    return NtGdiSetLayout(hdc, wox, dwLayout);
-}
-
-/*
- * @implemented
- */
-BOOL
-WINAPI
-GetDCOrgEx(
-    _In_ HDC hdc,
-    _Out_ LPPOINT lpPoint)
-{
-    return NtGdiGetDCPoint(hdc, GdiGetDCOrg, (PPOINTL)lpPoint);
-}
-
-
-/*
- * @implemented
- */
-LONG
-WINAPI
-GetDCOrg(
-    _In_ HDC hdc)
-{
-    POINT pt;
-
-    /* Call the new API */
-    if (!GetDCOrgEx(hdc, &pt))
-        return 0;
-
-    /* Return the point in the old way */
-    return(MAKELONG(pt.x, pt.y));
-}
-
-
-/*
- * @implemented
- *
- */
-BOOL
-WINAPI
-OffsetViewportOrgEx(
-    _In_ HDC hdc,
-    _In_ int nXOffset,
-    _In_ int nYOffset,
-    _Out_opt_ LPPOINT lpPoint)
-{
-    //PDC_ATTR pdcattr;
-
-    HANDLE_METADC(BOOL, OffsetViewportOrgEx, FALSE, hdc, nXOffset, nYOffset, lpPoint);
-#if 0
-
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-
-    if (lpPoint)
-    {
-        *lpPoint = (POINT)pdcattr->ptlViewportOrg;
-        if ( pdcattr->dwLayout & LAYOUT_RTL) lpPoint->x = -lpPoint->x;
-    }
-
-    if ( nXOffset || nYOffset != nXOffset )
-    {
-        if (NtCurrentTeb()->GdiTebBatch.HDC == (ULONG)hdc)
-        {
-            if (pdcattr->ulDirty_ & DC_MODE_DIRTY)
-            {
-                NtGdiFlush();
-                pdcattr->ulDirty_ &= ~DC_MODE_DIRTY;
-            }
-        }
-
-        pdcattr->flXform |= (PAGE_XLATE_CHANGED|DEVICE_TO_WORLD_INVALID);
-        if (pdcattr->dwLayout & LAYOUT_RTL) nXOffset = -nXOffset;
-        pdcattr->ptlViewportOrg.x += nXOffset;
-        pdcattr->ptlViewportOrg.y += nYOffset;
-    }
-    return TRUE;
-#endif
-    return  NtGdiOffsetViewportOrgEx(hdc, nXOffset, nYOffset, lpPoint);
-}
-
-/*
- * @implemented
- *
- */
-BOOL
-WINAPI
-OffsetWindowOrgEx(
-    _In_ HDC hdc,
-    _In_ int nXOffset,
-    _In_ int nYOffset,
-    _Out_opt_ LPPOINT lpPoint)
-{
-    //PDC_ATTR pdcattr;
-
-    HANDLE_METADC(BOOL, OffsetWindowOrgEx, FALSE, hdc, nXOffset, nYOffset, lpPoint);
-
-#if 0
-    /* Get the DC attribute */
-    pdcattr = GdiGetDcAttr(hdc);
-    if (!pdcattr)
-    {
-        /* Do not set LastError here! */
-        return FALSE;
-    }
-
-    if ( lpPoint )
-    {
-        *lpPoint   = (POINT)pdcattr->ptlWindowOrg;
-        lpPoint->x = pdcattr->lWindowOrgx;
-    }
-
-    if ( nXOffset || nYOffset != nXOffset )
-    {
-        if (NtCurrentTeb()->GdiTebBatch.HDC == (ULONG)hdc)
-        {
-            if (pdcattr->ulDirty_ & DC_MODE_DIRTY)
-            {
-                NtGdiFlush();
-                pdcattr->ulDirty_ &= ~DC_MODE_DIRTY;
-            }
-        }
-
-        pdcattr->flXform |= (PAGE_XLATE_CHANGED|DEVICE_TO_WORLD_INVALID);
-        pdcattr->ptlWindowOrg.x += nXOffset;
-        pdcattr->ptlWindowOrg.y += nYOffset;
-        pdcattr->lWindowOrgx += nXOffset;
-    }
-    return TRUE;
-#endif
-    return NtGdiOffsetWindowOrgEx(hdc, nXOffset, nYOffset, lpPoint);
-}
-