[ros-diffs] [tkreuzer] 30906: Beginning of an implementation of SelectObject, using NtGdiSelectBitmap, NtGdiSelectBrush, NtGdiselectFont, NtGdiSelectPen and ExtSelectClipRgn instead of NtGdiSelectObject. Todo: Do most stuff in user mode

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Fri Nov 30 03:14:58 CET 2007


Author: tkreuzer
Date: Fri Nov 30 05:14:58 2007
New Revision: 30906

URL: http://svn.reactos.org/svn/reactos?rev=30906&view=rev
Log:
Beginning of an implementation of SelectObject, using NtGdiSelectBitmap, NtGdiSelectBrush, NtGdiselectFont, NtGdiSelectPen and ExtSelectClipRgn instead of NtGdiSelectObject.
Todo: Do most stuff in user mode

Modified:
    trunk/reactos/dll/win32/gdi32/misc/hacks.c
    trunk/reactos/dll/win32/gdi32/objects/dc.c

Modified: trunk/reactos/dll/win32/gdi32/misc/hacks.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/misc/hacks.c?rev=30906&r1=30905&r2=30906&view=diff
==============================================================================
--- trunk/reactos/dll/win32/gdi32/misc/hacks.c (original)
+++ trunk/reactos/dll/win32/gdi32/misc/hacks.c Fri Nov 30 05:14:58 2007
@@ -48,17 +48,6 @@
                                           NULL);
 }
 
-/*
- * @implemented
- *
- */
-HGDIOBJ
-STDCALL
-SelectObject(HDC hdc,
-             HGDIOBJ hgdiobj)
-{
-    return NtGdiSelectObject(hdc,hgdiobj);
-}
 
 /*
  * @implemented

Modified: trunk/reactos/dll/win32/gdi32/objects/dc.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/dc.c?rev=30906&r1=30905&r2=30906&view=diff
==============================================================================
--- trunk/reactos/dll/win32/gdi32/objects/dc.c (original)
+++ trunk/reactos/dll/win32/gdi32/objects/dc.c Fri Nov 30 05:14:58 2007
@@ -1333,3 +1333,58 @@
 }
 
 
+/*
+ * @implemented
+ *
+ */
+HGDIOBJ
+STDCALL
+SelectObject(HDC hDC,
+             HGDIOBJ hGdiObj)
+{
+    PDC_ATTR pDc_Attr;
+//    HGDIOBJ hOldObj = NULL;
+
+    if(!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))
+    {
+    	SetLastError(ERROR_INVALID_HANDLE);
+        return NULL;
+    }
+
+    hGdiObj = GdiFixUpHandle(hGdiObj);
+	if (!GdiIsHandleValid(hGdiObj))
+	{
+		return NULL;
+	}
+
+    UINT uType = GDI_HANDLE_GET_TYPE(hGdiObj);
+
+    switch (uType)
+    {
+        case GDI_OBJECT_TYPE_PALETTE:
+            SetLastError(ERROR_INVALID_FUNCTION);
+            return NULL;
+
+      	case GDI_OBJECT_TYPE_REGION:
+            return (HGDIOBJ)ExtSelectClipRgn(hDC, hGdiObj, RGN_COPY);
+
+        case GDI_OBJECT_TYPE_BITMAP:
+            return NtGdiSelectBitmap(hDC, hGdiObj);
+
+        case GDI_OBJECT_TYPE_BRUSH:
+            return NtGdiSelectBrush(hDC, hGdiObj);
+
+        case GDI_OBJECT_TYPE_PEN:
+        case GDI_OBJECT_TYPE_EXTPEN:
+            return NtGdiSelectPen(hDC, hGdiObj);
+
+        case GDI_OBJECT_TYPE_FONT:
+            return NtGdiSelectFont(hDC, hGdiObj);
+
+    }
+
+    return NULL;
+}
+
+
+




More information about the Ros-diffs mailing list