From: Alex Henrie Subject: [PATCH v3] winspool: Add sRGB color profile Message-Id: <20200923040011.716830-1-alexhenrie24@gmail.com> Date: Tue, 22 Sep 2020 22:00:11 -0600 "This profile is made available by the International Color Consortium, and may be copied, distributed, embedded, made, used, and sold without restriction. Altered versions of this profile shall have the original identification and copyright information removed and shall not be misrepresented as the original profile." See http://www.color.org/srgbprofiles.xalter Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=37396 Signed-off-by: Alex Henrie --- I have tried to write this code in a way that will make it easy to add additional color files in the future. --- .../winspool.drv/sRGB_Color_Space_Profile.icm | Bin 0 -> 3024 bytes dlls/winspool.drv/winspool.rc | 3 ++ dlls/winspool.drv/wspool.c | 38 ++++++++++++++++++ dlls/winspool.drv/wspool.h | 2 + 4 files changed, 43 insertions(+) create mode 100644 dlls/winspool.drv/sRGB_Color_Space_Profile.icm diff --git a/dlls/winspool.drv/sRGB_Color_Space_Profile.icm b/dlls/winspool.drv/sRGB_Color_Space_Profile.icm new file mode 100644 index 0000000000000000000000000000000000000000..49afbfef10f22a1832590b68369d2f248ea553b9 GIT binary patch literal 3024 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 literal 0 HcmV?d00001 diff --git a/dlls/winspool.drv/winspool.rc b/dlls/winspool.drv/winspool.rc index 50772ce60bb..1b573be096e 100644 --- a/dlls/winspool.drv/winspool.rc +++ b/dlls/winspool.drv/winspool.rc @@ -47,6 +47,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL /* @makedep: generic.ppd */ 1 PPDFILE generic.ppd +/* @makedep: sRGB_Color_Space_Profile.icm */ +IDR_SRGB_ICM RCDATA sRGB_Color_Space_Profile.icm + #define WINE_FILENAME_STR "winspool.drv" #define WINE_FILEDESCRIPTION_STR "Wine core printer driver" diff --git a/dlls/winspool.drv/wspool.c b/dlls/winspool.drv/wspool.c index bbfb0fb0f42..baa7bfdb455 100644 --- a/dlls/winspool.drv/wspool.c +++ b/dlls/winspool.drv/wspool.c @@ -104,6 +104,43 @@ BOOL load_backend(void) return FALSE; } +static void create_color_profiles(void) +{ + static const WCHAR color_dir[] = {'\\','s','p','o','o','l', + '\\','d','r','i','v','e','r','s', + '\\','c','o','l','o','r','\\',0}; + static const WCHAR srgb_icm[] = {'s','R','G','B',' ', + 'C','o','l','o','r',' ', + 'S','p','a','c','e',' ', + 'P','r','o','f','i','l','e','.','i','c','m',0}; + WCHAR profile_path[MAX_PATH]; + HANDLE file; + HRSRC res; + DWORD size, written; + char *data; + BOOL ret; + + GetSystemDirectoryW(profile_path, ARRAY_SIZE(profile_path)); + lstrcatW(profile_path, color_dir); + lstrcatW(profile_path, srgb_icm); + + file = CreateFileW(profile_path, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); + if (file == INVALID_HANDLE_VALUE) + return; + + ret = ((res = FindResourceA(WINSPOOL_hInstance, MAKEINTRESOURCEA(IDR_SRGB_ICM), (const char *)RT_RCDATA)) && + (size = SizeofResource(WINSPOOL_hInstance, res)) && + (data = LoadResource(WINSPOOL_hInstance, res)) && + WriteFile(file, data, size, &written, NULL) && + written == size); + CloseHandle(file); + if (!ret) + { + ERR("Failed to create %s\n", wine_dbgstr_w(profile_path)); + DeleteFileW(profile_path); + } +} + /****************************************************************************** * DllMain * @@ -118,6 +155,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD reason, LPVOID lpReserved) WINSPOOL_hInstance = hInstance; DisableThreadLibraryCalls(hInstance); WINSPOOL_LoadSystemPrinters(); + create_color_profiles(); break; } case DLL_PROCESS_DETACH: diff --git a/dlls/winspool.drv/wspool.h b/dlls/winspool.drv/wspool.h index 06c28231330..a229b1ffe88 100644 --- a/dlls/winspool.drv/wspool.h +++ b/dlls/winspool.drv/wspool.h @@ -33,5 +33,7 @@ extern void WINSPOOL_LoadSystemPrinters(void) DECLSPEC_HIDDEN; #define IDS_FILE_EXISTS 11 #define IDS_CANNOT_OPEN 12 +#define IDR_SRGB_ICM 2 + #define FILENAME_DIALOG 100 #define EDITBOX 201 -- 2.28.0