- Go away STDCALL, time has come for WINAPI and NTAPI
[reactos.git] / reactos / dll / win32 / gdi32 / objects / icm.c
1 #include "precomp.h"
2
3 #define NDEBUG
4 #include <debug.h>
5
6
7 HCOLORSPACE
8 FASTCALL
9 IntCreateColorSpaceW(
10 LPLOGCOLORSPACEW lplcpw,
11 BOOL Ascii
12 )
13 {
14 LOGCOLORSPACEEXW lcpeexw;
15
16 if ((lplcpw->lcsSignature != LCS_SIGNATURE) ||
17 (lplcpw->lcsVersion != 0x400) ||
18 (lplcpw->lcsSize != sizeof(LOGCOLORSPACEW)))
19 {
20 SetLastError(ERROR_INVALID_COLORSPACE);
21 return NULL;
22 }
23 RtlCopyMemory(&lcpeexw.lcsColorSpace, lplcpw, sizeof(LOGCOLORSPACEW));
24
25 return NtGdiCreateColorSpace(&lcpeexw);
26 }
27
28 /*
29 * @implemented
30 */
31 HCOLORSPACE
32 WINAPI
33 CreateColorSpaceW(
34 LPLOGCOLORSPACEW lplcpw
35 )
36 {
37 return IntCreateColorSpaceW(lplcpw, FALSE);
38 }
39
40
41 /*
42 * @implemented
43 */
44 HCOLORSPACE
45 WINAPI
46 CreateColorSpaceA(
47 LPLOGCOLORSPACEA lplcpa
48 )
49 {
50 LOGCOLORSPACEW lcpw;
51
52 if ((lplcpa->lcsSignature != LCS_SIGNATURE) ||
53 (lplcpa->lcsVersion != 0x400) ||
54 (lplcpa->lcsSize != sizeof(LOGCOLORSPACEA)))
55 {
56 SetLastError(ERROR_INVALID_COLORSPACE);
57 return NULL;
58 }
59
60 lcpw.lcsSignature = lplcpa->lcsSignature;
61 lcpw.lcsVersion = lplcpa->lcsVersion;
62 lcpw.lcsSize = sizeof(LOGCOLORSPACEW);
63 lcpw.lcsCSType = lplcpa->lcsCSType;
64 lcpw.lcsIntent = lplcpa->lcsIntent;
65 lcpw.lcsEndpoints = lplcpa->lcsEndpoints;
66 lcpw.lcsGammaRed = lplcpa->lcsGammaRed;
67 lcpw.lcsGammaGreen = lplcpa->lcsGammaGreen;
68 lcpw.lcsGammaBlue = lplcpa->lcsGammaBlue;
69
70 RtlMultiByteToUnicodeN( lcpw.lcsFilename,
71 MAX_PATH,
72 NULL,
73 lplcpa->lcsFilename,
74 strlen(lplcpa->lcsFilename) + 1);
75
76 return IntCreateColorSpaceW(&lcpw, FALSE);
77 }
78
79 /*
80 * @implemented
81 */
82 HCOLORSPACE
83 WINAPI
84 GetColorSpace(HDC hDC)
85 {
86 PDC_ATTR pDc_Attr;
87
88 if (!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))
89 {
90 SetLastError(ERROR_INVALID_HANDLE);
91 return NULL;
92 }
93 return pDc_Attr->hColorSpace;
94 }
95
96
97 /*
98 * @implemented
99 */
100 HCOLORSPACE
101 WINAPI
102 SetColorSpace(
103 HDC hDC,
104 HCOLORSPACE hCS
105 )
106 {
107 HCOLORSPACE rhCS = GetColorSpace(hDC);
108
109 if (GDI_HANDLE_GET_TYPE(hDC) == GDI_OBJECT_TYPE_DC)
110 {
111 if (NtGdiSetColorSpace(hDC, hCS)) return rhCS;
112 }
113 #if 0
114 if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_METADC)
115 {
116 PLDC pLDC = GdiGetLDC(hDC);
117 if ( !pLDC )
118 {
119 SetLastError(ERROR_INVALID_HANDLE);
120 return NULL;
121 }
122 if (pLDC->iType == LDC_EMFLDC)
123 {
124 return NULL;
125 }
126 }
127 #endif
128 return NULL;
129 }
130