2 * ReactOS W32 Subsystem
3 * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
29 IntGetipfdDevMax(PDC pdc
)
32 PPDEVOBJ ppdev
= pdc
->ppdev
;
34 if (ppdev
->flFlags
& PDEV_META_DEVICE
)
39 if (ppdev
->DriverFunctions
.DescribePixelFormat
)
41 Ret
= ppdev
->DriverFunctions
.DescribePixelFormat(
48 if (Ret
) pdc
->ipfdDevMax
= Ret
;
56 NtGdiDescribePixelFormat(HDC hDC
,
59 LPPIXELFORMATDESCRIPTOR pfd
)
64 PIXELFORMATDESCRIPTOR pfdSafe
;
65 NTSTATUS Status
= STATUS_SUCCESS
;
67 if (!BufSize
) return 0;
72 SetLastWin32Error(ERROR_INVALID_HANDLE
);
76 if (!pdc
->ipfdDevMax
) IntGetipfdDevMax(pdc
);
78 if ( BufSize
< sizeof(PIXELFORMATDESCRIPTOR
) ||
80 PixelFormat
> pdc
->ipfdDevMax
)
82 SetLastWin32Error(ERROR_INVALID_PARAMETER
);
88 if (ppdev
->flFlags
& PDEV_META_DEVICE
)
94 if (ppdev
->DriverFunctions
.DescribePixelFormat
)
96 Ret
= ppdev
->DriverFunctions
.DescribePixelFormat(
99 sizeof(PIXELFORMATDESCRIPTOR
),
106 sizeof(PIXELFORMATDESCRIPTOR
),
108 RtlCopyMemory(&pfdSafe
, pfd
, sizeof(PIXELFORMATDESCRIPTOR
));
110 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER
)
112 Status
= _SEH2_GetExceptionCode();
116 if (!NT_SUCCESS(Status
)) SetLastNtError(Status
);
137 pdc
= DC_LockDc(hdc
);
140 SetLastWin32Error(ERROR_INVALID_HANDLE
);
144 if (!pdc
->ipfdDevMax
) IntGetipfdDevMax(pdc
);
147 ipfd
> pdc
->ipfdDevMax
)
149 SetLastWin32Error(ERROR_INVALID_PARAMETER
);
153 UserEnterExclusive();
154 hWnd
= UserGethWnd(hdc
, &pWndObj
);
159 SetLastWin32Error(ERROR_INVALID_WINDOW_STYLE
);
166 WndObj is needed so exit on NULL pointer.
168 if (pWndObj
) pso
= pWndObj
->psoOwner
;
171 SetLastWin32Error(ERROR_INVALID_PIXEL_FORMAT
);
175 if (ppdev
->flFlags
& PDEV_META_DEVICE
)
181 if (ppdev
->DriverFunctions
.SetPixelFormat
)
183 Ret
= ppdev
->DriverFunctions
.SetPixelFormat(
196 NtGdiSwapBuffers(HDC hDC
)