mirror of
https://github.com/reactos/wine.git
synced 2024-11-24 20:30:01 +00:00
gdi32: Move GetICMProfile to the driver.
This commit is contained in:
parent
459b92a009
commit
81e9b43fb2
@ -116,6 +116,7 @@ static struct graphics_driver *create_driver( HMODULE module )
|
||||
GET_FUNC(GetDIBits);
|
||||
GET_FUNC(GetDeviceCaps);
|
||||
GET_FUNC(GetDeviceGammaRamp);
|
||||
GET_FUNC(GetICMProfile);
|
||||
GET_FUNC(GetNearestColor);
|
||||
GET_FUNC(GetPixel);
|
||||
GET_FUNC(GetPixelFormat);
|
||||
|
@ -75,6 +75,7 @@ static const DC_FUNCTIONS EMFDRV_Funcs =
|
||||
NULL, /* pGetDIBits */
|
||||
EMFDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
||||
NULL, /* pGetDeviceGammaRamp */
|
||||
NULL, /* pGetICMProfile */
|
||||
NULL, /* pGetNearestColor */
|
||||
NULL, /* pGetPixel */
|
||||
NULL, /* pGetPixelFormat */
|
||||
|
@ -140,6 +140,7 @@ typedef struct tagDC_FUNCS
|
||||
INT (*pGetDIBits)(PHYSDEV,HBITMAP,UINT,UINT,LPVOID,BITMAPINFO*,UINT);
|
||||
INT (*pGetDeviceCaps)(PHYSDEV,INT);
|
||||
BOOL (*pGetDeviceGammaRamp)(PHYSDEV,LPVOID);
|
||||
BOOL (*pGetICMProfile)(PHYSDEV,LPDWORD,LPWSTR);
|
||||
COLORREF (*pGetNearestColor)(PHYSDEV,COLORREF);
|
||||
COLORREF (*pGetPixel)(PHYSDEV,INT,INT);
|
||||
INT (*pGetPixelFormat)(PHYSDEV);
|
||||
|
@ -30,6 +30,8 @@
|
||||
#include "winnls.h"
|
||||
#include "winreg.h"
|
||||
|
||||
#include "gdi_private.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
#include "wine/unicode.h"
|
||||
|
||||
@ -97,51 +99,18 @@ BOOL WINAPI GetICMProfileA(HDC hdc, LPDWORD size, LPSTR filename)
|
||||
*/
|
||||
BOOL WINAPI GetICMProfileW(HDC hdc, LPDWORD size, LPWSTR filename)
|
||||
{
|
||||
HKEY hkey;
|
||||
DWORD required;
|
||||
WCHAR profile[MAX_PATH], fullname[MAX_PATH];
|
||||
static const WCHAR path[] =
|
||||
{'\\','s','p','o','o','l','\\','d','r','i','v','e','r','s',
|
||||
'\\','c','o','l','o','r','\\',0};
|
||||
static const WCHAR srgb[] =
|
||||
{'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};
|
||||
static const WCHAR mntr[] =
|
||||
{'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
|
||||
'W','i','n','d','o','w','s',' ','N','T','\\','C','u','r','r','e','n','t',
|
||||
'V','e','r','s','i','o','n','\\','I','C','M','\\','m','n','t','r',0};
|
||||
BOOL ret = FALSE;
|
||||
DC *dc = get_dc_ptr(hdc);
|
||||
|
||||
TRACE("%p, %p, %p\n", hdc, size, filename);
|
||||
|
||||
if (!hdc || !size) return FALSE;
|
||||
|
||||
strcpyW(profile, srgb);
|
||||
if (!RegCreateKeyExW(HKEY_LOCAL_MACHINE, mntr, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL))
|
||||
if (dc)
|
||||
{
|
||||
DWORD size = sizeof(profile) / sizeof(WCHAR);
|
||||
/* FIXME handle multiple values */
|
||||
RegEnumValueW(hkey, 0, profile, &size, NULL, NULL, NULL, NULL);
|
||||
RegCloseKey(hkey);
|
||||
if (dc->funcs->pGetICMProfile)
|
||||
ret = dc->funcs->pGetICMProfile(dc->physDev, size, filename);
|
||||
release_dc_ptr(dc);
|
||||
}
|
||||
GetSystemDirectoryW(fullname, MAX_PATH);
|
||||
strcatW(fullname, path);
|
||||
strcatW(fullname, profile);
|
||||
|
||||
required = strlenW(fullname) + 1;
|
||||
if (*size < required)
|
||||
{
|
||||
*size = required;
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
return FALSE;
|
||||
}
|
||||
if (filename)
|
||||
{
|
||||
strcpyW(filename, fullname);
|
||||
if (GetFileAttributesW(filename) == INVALID_FILE_ATTRIBUTES)
|
||||
WARN("color profile not found\n");
|
||||
}
|
||||
*size = required;
|
||||
return TRUE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -75,6 +75,7 @@ static const DC_FUNCTIONS MFDRV_Funcs =
|
||||
NULL, /* pGetDIBits */
|
||||
MFDRV_GetDeviceCaps, /* pGetDeviceCaps */
|
||||
NULL, /* pGetDeviceGammaRamp */
|
||||
NULL, /* pGetICMProfile */
|
||||
NULL, /* pGetNearestColor */
|
||||
NULL, /* pGetPixel */
|
||||
NULL, /* pGetPixelFormat */
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <math.h>
|
||||
#ifdef HAVE_FLOAT_H
|
||||
# include <float.h>
|
||||
@ -35,9 +36,14 @@
|
||||
#endif
|
||||
#include <string.h>
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "winreg.h"
|
||||
|
||||
#include "x11drv.h"
|
||||
#include "x11font.h"
|
||||
#include "wine/debug.h"
|
||||
#include "wine/unicode.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(graphics);
|
||||
|
||||
@ -1374,3 +1380,54 @@ DWORD X11DRV_SetDCOrg( X11DRV_PDEVICE *physDev, INT x, INT y )
|
||||
physDev->dc_rect.top = y - physDev->drawable_rect.top;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* GetICMProfile (X11DRV.@)
|
||||
*/
|
||||
BOOL X11DRV_GetICMProfile( X11DRV_PDEVICE *physDev, LPDWORD size, LPWSTR filename )
|
||||
{
|
||||
static const WCHAR path[] =
|
||||
{'\\','s','p','o','o','l','\\','d','r','i','v','e','r','s',
|
||||
'\\','c','o','l','o','r','\\',0};
|
||||
static const WCHAR srgb[] =
|
||||
{'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};
|
||||
static const WCHAR mntr[] =
|
||||
{'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
|
||||
'W','i','n','d','o','w','s',' ','N','T','\\','C','u','r','r','e','n','t',
|
||||
'V','e','r','s','i','o','n','\\','I','C','M','\\','m','n','t','r',0};
|
||||
|
||||
HKEY hkey;
|
||||
DWORD required;
|
||||
WCHAR profile[MAX_PATH], fullname[MAX_PATH];
|
||||
|
||||
if (!size) return FALSE;
|
||||
|
||||
strcpyW( profile, srgb );
|
||||
if (!RegCreateKeyExW( HKEY_LOCAL_MACHINE, mntr, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL ))
|
||||
{
|
||||
DWORD len = sizeof(profile)/sizeof(WCHAR);
|
||||
/* FIXME handle multiple values */
|
||||
RegEnumValueW( hkey, 0, profile, &len, NULL, NULL, NULL, NULL );
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
GetSystemDirectoryW( fullname, MAX_PATH );
|
||||
strcatW( fullname, path );
|
||||
strcatW( fullname, profile );
|
||||
|
||||
required = strlenW( fullname ) + 1;
|
||||
if (*size < required)
|
||||
{
|
||||
*size = required;
|
||||
SetLastError( ERROR_INSUFFICIENT_BUFFER );
|
||||
return FALSE;
|
||||
}
|
||||
if (filename)
|
||||
{
|
||||
strcpyW( filename, fullname );
|
||||
if (GetFileAttributesW( filename ) == INVALID_FILE_ATTRIBUTES)
|
||||
WARN( "color profile not found\n" );
|
||||
}
|
||||
*size = required;
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
@ cdecl GetDIBits(ptr long long long ptr ptr long) X11DRV_GetDIBits
|
||||
@ cdecl GetDeviceCaps(ptr long) X11DRV_GetDeviceCaps
|
||||
@ cdecl GetDeviceGammaRamp(ptr ptr) X11DRV_GetDeviceGammaRamp
|
||||
@ cdecl GetICMProfile(ptr ptr ptr) X11DRV_GetICMProfile
|
||||
@ cdecl GetNearestColor(ptr long) X11DRV_GetNearestColor
|
||||
@ cdecl GetPixel(ptr long long) X11DRV_GetPixel
|
||||
@ cdecl GetPixelFormat(ptr) X11DRV_GetPixelFormat
|
||||
|
Loading…
Reference in New Issue
Block a user