mirror of
https://github.com/reactos/reactos.git
synced 2024-12-31 19:42:51 +00:00
[MSCMS]
* Sync with Wine 1.7.1. CORE-7469 svn path=/trunk/; revision=60294
This commit is contained in:
parent
20a1d1968d
commit
9c4a2e68c0
9 changed files with 233 additions and 318 deletions
|
@ -11,12 +11,11 @@ list(APPEND SOURCE
|
|||
profile.c
|
||||
stub.c
|
||||
transform.c
|
||||
version.rc
|
||||
${CMAKE_CURRENT_BINARY_DIR}/mscms_stubs.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/mscms.def)
|
||||
|
||||
add_library(mscms SHARED ${SOURCE})
|
||||
add_library(mscms SHARED ${SOURCE} version.rc)
|
||||
set_module_type(mscms win32dll)
|
||||
target_link_libraries(mscms wine)
|
||||
add_importlibs(mscms msvcrt advapi32 kernel32 ntdll)
|
||||
add_importlibs(mscms advapi32 msvcrt kernel32 ntdll)
|
||||
add_cd_file(TARGET mscms DESTINATION reactos/system32 FOR all)
|
||||
|
|
|
@ -31,17 +31,17 @@
|
|||
|
||||
//#include "mscms_priv.h"
|
||||
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
|
||||
static CRITICAL_SECTION MSCMS_handle_cs;
|
||||
static CRITICAL_SECTION_DEBUG MSCMS_handle_cs_debug =
|
||||
static CRITICAL_SECTION mscms_handle_cs;
|
||||
static CRITICAL_SECTION_DEBUG mscms_handle_cs_debug =
|
||||
{
|
||||
0, 0, &MSCMS_handle_cs,
|
||||
{ &MSCMS_handle_cs_debug.ProcessLocksList,
|
||||
&MSCMS_handle_cs_debug.ProcessLocksList },
|
||||
0, 0, { (DWORD_PTR)(__FILE__ ": MSCMS_handle_cs") }
|
||||
0, 0, &mscms_handle_cs,
|
||||
{ &mscms_handle_cs_debug.ProcessLocksList,
|
||||
&mscms_handle_cs_debug.ProcessLocksList },
|
||||
0, 0, { (DWORD_PTR)(__FILE__ ": mscms_handle_cs") }
|
||||
};
|
||||
static CRITICAL_SECTION MSCMS_handle_cs = { &MSCMS_handle_cs_debug, -1, 0, 0, 0, 0 };
|
||||
static CRITICAL_SECTION mscms_handle_cs = { &mscms_handle_cs_debug, -1, 0, 0, 0, 0 };
|
||||
|
||||
static struct profile *profiletable;
|
||||
static struct transform *transformtable;
|
||||
|
@ -61,19 +61,19 @@ void free_handle_tables( void )
|
|||
transformtable = NULL;
|
||||
num_transform_handles = 0;
|
||||
|
||||
DeleteCriticalSection( &MSCMS_handle_cs );
|
||||
DeleteCriticalSection( &mscms_handle_cs );
|
||||
}
|
||||
|
||||
struct profile *grab_profile( HPROFILE handle )
|
||||
{
|
||||
DWORD_PTR index;
|
||||
|
||||
EnterCriticalSection( &MSCMS_handle_cs );
|
||||
EnterCriticalSection( &mscms_handle_cs );
|
||||
|
||||
index = (DWORD_PTR)handle - 1;
|
||||
if (index > num_profile_handles)
|
||||
{
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return NULL;
|
||||
}
|
||||
return &profiletable[index];
|
||||
|
@ -81,19 +81,19 @@ struct profile *grab_profile( HPROFILE handle )
|
|||
|
||||
void release_profile( struct profile *profile )
|
||||
{
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
}
|
||||
|
||||
struct transform *grab_transform( HTRANSFORM handle )
|
||||
{
|
||||
DWORD_PTR index;
|
||||
|
||||
EnterCriticalSection( &MSCMS_handle_cs );
|
||||
EnterCriticalSection( &mscms_handle_cs );
|
||||
|
||||
index = (DWORD_PTR)handle - 1;
|
||||
if (index > num_transform_handles)
|
||||
{
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return NULL;
|
||||
}
|
||||
return &transformtable[index];
|
||||
|
@ -101,7 +101,7 @@ struct transform *grab_transform( HTRANSFORM handle )
|
|||
|
||||
void release_transform( struct transform *transform )
|
||||
{
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
}
|
||||
|
||||
static HPROFILE alloc_profile_handle( void )
|
||||
|
@ -112,7 +112,7 @@ static HPROFILE alloc_profile_handle( void )
|
|||
|
||||
for (index = 0; index < num_profile_handles; index++)
|
||||
{
|
||||
if (!profiletable[index].iccprofile) return (HPROFILE)(index + 1);
|
||||
if (!profiletable[index].data) return (HPROFILE)(index + 1);
|
||||
}
|
||||
if (!profiletable)
|
||||
{
|
||||
|
@ -135,14 +135,14 @@ HPROFILE create_profile( struct profile *profile )
|
|||
{
|
||||
HPROFILE handle;
|
||||
|
||||
EnterCriticalSection( &MSCMS_handle_cs );
|
||||
EnterCriticalSection( &mscms_handle_cs );
|
||||
|
||||
if ((handle = alloc_profile_handle()))
|
||||
{
|
||||
DWORD_PTR index = (DWORD_PTR)handle - 1;
|
||||
memcpy( &profiletable[index], profile, sizeof(struct profile) );
|
||||
profiletable[index] = *profile;
|
||||
}
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
@ -151,12 +151,12 @@ BOOL close_profile( HPROFILE handle )
|
|||
DWORD_PTR index;
|
||||
struct profile *profile;
|
||||
|
||||
EnterCriticalSection( &MSCMS_handle_cs );
|
||||
EnterCriticalSection( &mscms_handle_cs );
|
||||
|
||||
index = (DWORD_PTR)handle - 1;
|
||||
if (index > num_profile_handles)
|
||||
{
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return FALSE;
|
||||
}
|
||||
profile = &profiletable[index];
|
||||
|
@ -165,11 +165,11 @@ BOOL close_profile( HPROFILE handle )
|
|||
{
|
||||
if (profile->access & PROFILE_READWRITE)
|
||||
{
|
||||
DWORD written, size = MSCMS_get_profile_size( profile->iccprofile );
|
||||
DWORD written;
|
||||
|
||||
if (SetFilePointer( profile->file, 0, NULL, FILE_BEGIN ) ||
|
||||
!WriteFile( profile->file, profile->iccprofile, size, &written, NULL ) ||
|
||||
written != size)
|
||||
!WriteFile( profile->file, profile->data, profile->size, &written, NULL ) ||
|
||||
written != profile->size)
|
||||
{
|
||||
ERR( "Unable to write color profile\n" );
|
||||
}
|
||||
|
@ -177,11 +177,11 @@ BOOL close_profile( HPROFILE handle )
|
|||
CloseHandle( profile->file );
|
||||
}
|
||||
cmsCloseProfile( profile->cmsprofile );
|
||||
HeapFree( GetProcessHeap(), 0, profile->iccprofile );
|
||||
HeapFree( GetProcessHeap(), 0, profile->data );
|
||||
|
||||
memset( profile, 0, sizeof(struct profile) );
|
||||
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -216,14 +216,14 @@ HTRANSFORM create_transform( struct transform *transform )
|
|||
{
|
||||
HTRANSFORM handle;
|
||||
|
||||
EnterCriticalSection( &MSCMS_handle_cs );
|
||||
EnterCriticalSection( &mscms_handle_cs );
|
||||
|
||||
if ((handle = alloc_transform_handle()))
|
||||
{
|
||||
DWORD_PTR index = (DWORD_PTR)handle - 1;
|
||||
memcpy( &transformtable[index], transform, sizeof(struct transform) );
|
||||
transformtable[index] = *transform;
|
||||
}
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return handle;
|
||||
}
|
||||
|
||||
|
@ -232,12 +232,12 @@ BOOL close_transform( HTRANSFORM handle )
|
|||
DWORD_PTR index;
|
||||
struct transform *transform;
|
||||
|
||||
EnterCriticalSection( &MSCMS_handle_cs );
|
||||
EnterCriticalSection( &mscms_handle_cs );
|
||||
|
||||
index = (DWORD_PTR)handle - 1;
|
||||
if (index > num_transform_handles)
|
||||
{
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return FALSE;
|
||||
}
|
||||
transform = &transformtable[index];
|
||||
|
@ -245,8 +245,8 @@ BOOL close_transform( HTRANSFORM handle )
|
|||
cmsDeleteTransform( transform->cmstransform );
|
||||
memset( transform, 0, sizeof(struct transform) );
|
||||
|
||||
LeaveCriticalSection( &MSCMS_handle_cs );
|
||||
LeaveCriticalSection( &mscms_handle_cs );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
|
|
|
@ -31,75 +31,90 @@
|
|||
|
||||
//#include "mscms_priv.h"
|
||||
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
|
||||
static inline void MSCMS_adjust_endianness32( ULONG *ptr )
|
||||
static inline void adjust_endianness32( ULONG *ptr )
|
||||
{
|
||||
#ifndef WORDS_BIGENDIAN
|
||||
*ptr = RtlUlongByteSwap(*ptr);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MSCMS_get_profile_header( const icProfile *iccprofile, PROFILEHEADER *header )
|
||||
void get_profile_header( const struct profile *profile, PROFILEHEADER *header )
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
memcpy( header, iccprofile, sizeof(PROFILEHEADER) );
|
||||
memcpy( header, profile->data, sizeof(PROFILEHEADER) );
|
||||
|
||||
/* ICC format is big-endian, swap bytes if necessary */
|
||||
for (i = 0; i < sizeof(PROFILEHEADER) / sizeof(ULONG); i++)
|
||||
MSCMS_adjust_endianness32( (ULONG *)header + i );
|
||||
adjust_endianness32( (ULONG *)header + i );
|
||||
}
|
||||
|
||||
void MSCMS_set_profile_header( icProfile *iccprofile, const PROFILEHEADER *header )
|
||||
void set_profile_header( const struct profile *profile, const PROFILEHEADER *header )
|
||||
{
|
||||
unsigned int i;
|
||||
icHeader *iccheader = (icHeader *)iccprofile;
|
||||
|
||||
memcpy( iccheader, header, sizeof(icHeader) );
|
||||
memcpy( profile->data, header, sizeof(PROFILEHEADER) );
|
||||
|
||||
/* ICC format is big-endian, swap bytes if necessary */
|
||||
for (i = 0; i < sizeof(icHeader) / sizeof(ULONG); i++)
|
||||
MSCMS_adjust_endianness32( (ULONG *)iccheader + i );
|
||||
for (i = 0; i < sizeof(PROFILEHEADER) / sizeof(ULONG); i++)
|
||||
adjust_endianness32( (ULONG *)profile->data + i );
|
||||
}
|
||||
|
||||
DWORD MSCMS_get_tag_count( const icProfile *iccprofile )
|
||||
static BOOL get_adjusted_tag( const struct profile *profile, TAGTYPE type, cmsTagEntry *tag )
|
||||
{
|
||||
ULONG count = iccprofile->count;
|
||||
DWORD i, num_tags = *(DWORD *)(profile->data + sizeof(cmsICCHeader));
|
||||
cmsTagEntry *entry;
|
||||
ULONG sig;
|
||||
|
||||
MSCMS_adjust_endianness32( &count );
|
||||
return count;
|
||||
adjust_endianness32( &num_tags );
|
||||
for (i = 0; i < num_tags; i++)
|
||||
{
|
||||
entry = (cmsTagEntry *)(profile->data + sizeof(cmsICCHeader) + sizeof(DWORD) + i * sizeof(*tag));
|
||||
sig = entry->sig;
|
||||
adjust_endianness32( &sig );
|
||||
if (sig == type)
|
||||
{
|
||||
tag->sig = sig;
|
||||
tag->offset = entry->offset;
|
||||
tag->size = entry->size;
|
||||
adjust_endianness32( &tag->offset );
|
||||
adjust_endianness32( &tag->size );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void MSCMS_get_tag_by_index( icProfile *iccprofile, DWORD index, icTag *tag )
|
||||
BOOL get_tag_data( const struct profile *profile, TAGTYPE type, DWORD offset, void *buffer, DWORD *len )
|
||||
{
|
||||
icTag *tmp = (icTag *)((char *)iccprofile->data + index * sizeof(icTag));
|
||||
cmsTagEntry tag;
|
||||
|
||||
tag->sig = tmp->sig;
|
||||
tag->offset = tmp->offset;
|
||||
tag->size = tmp->size;
|
||||
if (!get_adjusted_tag( profile, type, &tag )) return FALSE;
|
||||
|
||||
MSCMS_adjust_endianness32( &tag->sig );
|
||||
MSCMS_adjust_endianness32( &tag->offset );
|
||||
MSCMS_adjust_endianness32( &tag->size );
|
||||
if (!buffer) offset = 0;
|
||||
if (offset > tag.size) return FALSE;
|
||||
if (*len < tag.size - offset || !buffer)
|
||||
{
|
||||
*len = tag.size - offset;
|
||||
return FALSE;
|
||||
}
|
||||
memcpy( buffer, profile->data + tag.offset + offset, tag.size - offset );
|
||||
*len = tag.size - offset;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void MSCMS_get_tag_data( const icProfile *iccprofile, const icTag *tag, DWORD offset, void *buffer )
|
||||
BOOL set_tag_data( const struct profile *profile, TAGTYPE type, DWORD offset, const void *buffer, DWORD *len )
|
||||
{
|
||||
memcpy( buffer, (const char *)iccprofile + tag->offset + offset, tag->size - offset );
|
||||
cmsTagEntry tag;
|
||||
|
||||
if (!get_adjusted_tag( profile, type, &tag )) return FALSE;
|
||||
|
||||
if (offset > tag.size) return FALSE;
|
||||
*len = min( tag.size - offset, *len );
|
||||
memcpy( profile->data + tag.offset + offset, buffer, *len );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void MSCMS_set_tag_data( icProfile *iccprofile, const icTag *tag, DWORD offset, const void *buffer )
|
||||
{
|
||||
memcpy( (char *)iccprofile + tag->offset + offset, buffer, tag->size - offset );
|
||||
}
|
||||
|
||||
DWORD MSCMS_get_profile_size( const icProfile *iccprofile )
|
||||
{
|
||||
DWORD size = ((const icHeader *)iccprofile)->size;
|
||||
|
||||
MSCMS_adjust_endianness32( &size );
|
||||
return size;
|
||||
}
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
|
|
|
@ -36,20 +36,10 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
|
||||
|
||||
#ifdef HAVE_LCMS
|
||||
static int lcms_error_handler( int error, const char *text )
|
||||
#ifdef HAVE_LCMS2
|
||||
static void lcms_error_handler(cmsContext ctx, cmsUInt32Number error, const char *text)
|
||||
{
|
||||
switch (error)
|
||||
{
|
||||
case LCMS_ERRC_WARNING:
|
||||
case LCMS_ERRC_RECOVERABLE:
|
||||
case LCMS_ERRC_ABORTED:
|
||||
WARN("%d %s\n", error, debugstr_a(text));
|
||||
return 1;
|
||||
default:
|
||||
ERR("unknown error %d %s\n", error, debugstr_a(text));
|
||||
return 0;
|
||||
}
|
||||
TRACE("%u %s\n", error, debugstr_a(text));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -61,12 +51,13 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
|
|||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
DisableThreadLibraryCalls( hinst );
|
||||
#ifdef HAVE_LCMS
|
||||
cmsSetErrorHandler( lcms_error_handler );
|
||||
#ifdef HAVE_LCMS2
|
||||
cmsSetLogErrorHandler( lcms_error_handler );
|
||||
#endif
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
#ifdef HAVE_LCMS
|
||||
if (reserved) break;
|
||||
#ifdef HAVE_LCMS2
|
||||
free_handle_tables();
|
||||
#endif
|
||||
break;
|
||||
|
|
|
@ -18,54 +18,8 @@
|
|||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#ifdef HAVE_LCMS
|
||||
|
||||
/* These basic Windows types are defined in lcms.h when compiling on
|
||||
* a non-Windows platform (why?), so they would normally not conflict
|
||||
* with anything included earlier. But since we are building Wine they
|
||||
* most certainly will have been defined before we include lcms.h.
|
||||
* The preprocessor comes to the rescue.
|
||||
*/
|
||||
|
||||
#define BYTE LCMS_BYTE
|
||||
#define LPBYTE LCMS_LPBYTE
|
||||
#define WORD LCMS_WORD
|
||||
#define LPWORD LCMS_LPWORD
|
||||
#define DWORD LCMS_DWORD
|
||||
#define LPDWORD LCMS_LPDWORD
|
||||
#define BOOL LCMS_BOOL
|
||||
#define LPSTR LCMS_LPSTR
|
||||
#define LPVOID LCMS_LPVOID
|
||||
|
||||
#undef cdecl
|
||||
#undef FAR
|
||||
|
||||
#undef ZeroMemory
|
||||
#undef CopyMemory
|
||||
|
||||
#undef LOWORD
|
||||
#undef HIWORD
|
||||
#undef MAX_PATH
|
||||
|
||||
#ifdef HAVE_LCMS_LCMS_H
|
||||
#include <lcms/lcms.h>
|
||||
#else
|
||||
#include <lcms.h>
|
||||
#endif
|
||||
|
||||
/* Funny thing is lcms.h defines DWORD as an 'unsigned long' whereas Wine
|
||||
* defines it as an 'unsigned int'. To avoid compiler warnings we use a
|
||||
* preprocessor define for DWORD and LPDWORD to get back Wine's original
|
||||
* (typedef) definitions.
|
||||
*/
|
||||
|
||||
#undef BOOL
|
||||
#undef DWORD
|
||||
#undef LPDWORD
|
||||
|
||||
#define BOOL BOOL
|
||||
#define DWORD DWORD
|
||||
#define LPDWORD LPDWORD
|
||||
#ifdef HAVE_LCMS2
|
||||
#include <lcms2.h>
|
||||
|
||||
/* A simple structure to tie together a pointer to an icc profile, an lcms
|
||||
* color profile handle and a Windows file handle. If the profile is memory
|
||||
|
@ -76,9 +30,10 @@
|
|||
|
||||
struct profile
|
||||
{
|
||||
HANDLE file;
|
||||
DWORD access;
|
||||
icProfile *iccprofile;
|
||||
HANDLE file;
|
||||
DWORD access;
|
||||
char *data;
|
||||
DWORD size;
|
||||
cmsHPROFILE cmsprofile;
|
||||
};
|
||||
|
||||
|
@ -101,14 +56,11 @@ void release_transform( struct transform * ) DECLSPEC_HIDDEN;
|
|||
|
||||
extern void free_handle_tables( void ) DECLSPEC_HIDDEN;
|
||||
|
||||
extern DWORD MSCMS_get_tag_count( const icProfile *iccprofile ) DECLSPEC_HIDDEN;
|
||||
extern void MSCMS_get_tag_by_index( icProfile *iccprofile, DWORD index, icTag *tag ) DECLSPEC_HIDDEN;
|
||||
extern void MSCMS_get_tag_data( const icProfile *iccprofile, const icTag *tag, DWORD offset, void *buffer ) DECLSPEC_HIDDEN;
|
||||
extern void MSCMS_set_tag_data( icProfile *iccprofile, const icTag *tag, DWORD offset, const void *buffer ) DECLSPEC_HIDDEN;
|
||||
extern void MSCMS_get_profile_header( const icProfile *iccprofile, PROFILEHEADER *header ) DECLSPEC_HIDDEN;
|
||||
extern void MSCMS_set_profile_header( icProfile *iccprofile, const PROFILEHEADER *header ) DECLSPEC_HIDDEN;
|
||||
extern DWORD MSCMS_get_profile_size( const icProfile *iccprofile ) DECLSPEC_HIDDEN;
|
||||
extern BOOL get_tag_data( const struct profile *, TAGTYPE, DWORD, void *, DWORD * ) DECLSPEC_HIDDEN;
|
||||
extern BOOL set_tag_data( const struct profile *, TAGTYPE, DWORD, const void *, DWORD * ) DECLSPEC_HIDDEN;
|
||||
extern void get_profile_header( const struct profile *, PROFILEHEADER * ) DECLSPEC_HIDDEN;
|
||||
extern void set_profile_header( const struct profile *, const PROFILEHEADER * ) DECLSPEC_HIDDEN;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
|
||||
extern const char *MSCMS_dbgstr_tag(DWORD) DECLSPEC_HIDDEN;
|
||||
extern const char *dbgstr_tag(DWORD) DECLSPEC_HIDDEN;
|
||||
|
|
|
@ -37,17 +37,15 @@
|
|||
|
||||
//#include "mscms_priv.h"
|
||||
|
||||
#define IS_SEPARATOR(ch) ((ch) == '\\' || (ch) == '/')
|
||||
|
||||
static void MSCMS_basename( LPCWSTR path, LPWSTR name )
|
||||
static void basename( LPCWSTR path, LPWSTR name )
|
||||
{
|
||||
INT i = lstrlenW( path );
|
||||
|
||||
while (i > 0 && !IS_SEPARATOR(path[i - 1])) i--;
|
||||
while (i > 0 && path[i - 1] != '\\' && path[i - 1] != '/') i--;
|
||||
lstrcpyW( name, &path[i] );
|
||||
}
|
||||
|
||||
static inline LPWSTR MSCMS_strdupW( LPCSTR str )
|
||||
static inline LPWSTR strdupW( LPCSTR str )
|
||||
{
|
||||
LPWSTR ret = NULL;
|
||||
if (str)
|
||||
|
@ -59,7 +57,7 @@ static inline LPWSTR MSCMS_strdupW( LPCSTR str )
|
|||
return ret;
|
||||
}
|
||||
|
||||
const char *MSCMS_dbgstr_tag( DWORD tag )
|
||||
const char *dbgstr_tag( DWORD tag )
|
||||
{
|
||||
return wine_dbg_sprintf( "'%c%c%c%c'",
|
||||
(char)(tag >> 24), (char)(tag >> 16), (char)(tag >> 8), (char)(tag) );
|
||||
|
@ -138,7 +136,7 @@ static BOOL set_profile_device_key( PCWSTR file, const BYTE *value, DWORD size )
|
|||
}
|
||||
RegCreateKeyExW( HKEY_LOCAL_MACHINE, icmW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &icm_key, NULL );
|
||||
|
||||
MSCMS_basename( file, basenameW );
|
||||
basename( file, basenameW );
|
||||
sprintfW( classW, fmtW, (header.phClass >> 24) & 0xff, (header.phClass >> 16) & 0xff,
|
||||
(header.phClass >> 8) & 0xff, header.phClass & 0xff );
|
||||
|
||||
|
@ -339,10 +337,8 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
PVOID buffer, PBOOL ref )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
DWORD i, count;
|
||||
icTag tag;
|
||||
|
||||
TRACE( "( %p, 0x%08x, %d, %p, %p, %p )\n", handle, type, offset, size, buffer, ref );
|
||||
|
||||
|
@ -353,30 +349,17 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
count = MSCMS_get_tag_count( profile->iccprofile );
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
if (!get_tag_data( profile, type, offset, buffer, size ))
|
||||
{
|
||||
MSCMS_get_tag_by_index( profile->iccprofile, i, &tag );
|
||||
|
||||
if (tag.sig == type)
|
||||
{
|
||||
if ((tag.size - offset) > *size || !buffer)
|
||||
{
|
||||
*size = (tag.size - offset);
|
||||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
MSCMS_get_tag_data( profile->iccprofile, &tag, offset, buffer );
|
||||
|
||||
*ref = FALSE; /* FIXME: calculate properly */
|
||||
release_profile( profile );
|
||||
return TRUE;
|
||||
}
|
||||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
ret = get_tag_data( profile, type, offset, buffer, size );
|
||||
*ref = cmsTagLinkedTo( profile->cmsprofile, type ) != 0;
|
||||
release_profile( profile );
|
||||
return ret;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -401,10 +384,10 @@ BOOL WINAPI GetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE type )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
DWORD count;
|
||||
icTag tag;
|
||||
cmsInt32Number num_tags;
|
||||
cmsTagSignature sig;
|
||||
|
||||
TRACE( "( %p, %d, %p )\n", handle, index, type );
|
||||
|
||||
|
@ -415,19 +398,20 @@ BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE ty
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
count = MSCMS_get_tag_count( profile->iccprofile );
|
||||
if (index > count || index < 1)
|
||||
num_tags = cmsGetTagCount( profile->cmsprofile );
|
||||
if (num_tags < 0 || index > num_tags || index < 1)
|
||||
{
|
||||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
MSCMS_get_tag_by_index( profile->iccprofile, index - 1, &tag );
|
||||
*type = tag.sig;
|
||||
|
||||
if ((sig = cmsGetTagSignature( profile->cmsprofile, index - 1 )))
|
||||
{
|
||||
*type = sig;
|
||||
ret = TRUE;
|
||||
}
|
||||
release_profile( profile );
|
||||
ret = TRUE;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -452,7 +436,7 @@ BOOL WINAPI GetColorProfileElementTag( HPROFILE handle, DWORD index, PTAGTYPE ty
|
|||
BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD size )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
PROFILEHEADER header;
|
||||
|
||||
|
@ -465,7 +449,7 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
MSCMS_get_profile_header( profile->iccprofile, &header );
|
||||
get_profile_header( profile, &header );
|
||||
|
||||
if (!buffer || header.phSize > *size)
|
||||
{
|
||||
|
@ -475,13 +459,13 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
|
|||
}
|
||||
|
||||
/* No endian conversion needed */
|
||||
memcpy( buffer, profile->iccprofile, header.phSize );
|
||||
*size = header.phSize;
|
||||
memcpy( buffer, profile->data, profile->size );
|
||||
*size = profile->size;
|
||||
|
||||
release_profile( profile );
|
||||
ret = TRUE;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -503,7 +487,7 @@ BOOL WINAPI GetColorProfileFromHandle( HPROFILE handle, PBYTE buffer, PDWORD siz
|
|||
*/
|
||||
BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
|
||||
{
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
|
||||
TRACE( "( %p, %p )\n", handle, header );
|
||||
|
@ -515,14 +499,13 @@ BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
MSCMS_get_profile_header( profile->iccprofile, header );
|
||||
|
||||
get_profile_header( profile, header );
|
||||
release_profile( profile );
|
||||
return TRUE;
|
||||
|
||||
#else
|
||||
return FALSE;
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
@ -542,8 +525,9 @@ BOOL WINAPI GetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
|
|||
BOOL WINAPI GetCountColorProfileElements( HPROFILE handle, PDWORD count )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
cmsInt32Number num_tags;
|
||||
|
||||
TRACE( "( %p, %p )\n", handle, count );
|
||||
|
||||
|
@ -554,12 +538,14 @@ BOOL WINAPI GetCountColorProfileElements( HPROFILE handle, PDWORD count )
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
*count = MSCMS_get_tag_count( profile->iccprofile );
|
||||
|
||||
if ((num_tags = cmsGetTagCount( profile->cmsprofile )) >= 0)
|
||||
{
|
||||
*count = num_tags;
|
||||
ret = TRUE;
|
||||
}
|
||||
release_profile( profile );
|
||||
ret = TRUE;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -684,7 +670,7 @@ BOOL WINAPI GetStandardColorSpaceProfileW( PCWSTR machine, DWORD id, PWSTR profi
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL MSCMS_header_from_file( LPCWSTR file, PPROFILEHEADER header )
|
||||
static BOOL header_from_file( LPCWSTR file, PPROFILEHEADER header )
|
||||
{
|
||||
BOOL ret;
|
||||
PROFILE profile;
|
||||
|
@ -726,7 +712,7 @@ static BOOL MSCMS_header_from_file( LPCWSTR file, PPROFILEHEADER header )
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
|
||||
static BOOL match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
|
||||
{
|
||||
if (rec->dwFields & ET_DEVICENAME)
|
||||
{
|
||||
|
@ -747,36 +733,36 @@ static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
|
|||
}
|
||||
if (rec->dwFields & ET_DEVICECLASS)
|
||||
{
|
||||
FIXME( "ET_DEVICECLASS: %s\n", MSCMS_dbgstr_tag(rec->dwMediaType) );
|
||||
FIXME( "ET_DEVICECLASS: %s\n", dbgstr_tag(rec->dwMediaType) );
|
||||
}
|
||||
if (rec->dwFields & ET_CMMTYPE)
|
||||
{
|
||||
TRACE( "ET_CMMTYPE: %s\n", MSCMS_dbgstr_tag(rec->dwCMMType) );
|
||||
TRACE( "ET_CMMTYPE: %s\n", dbgstr_tag(rec->dwCMMType) );
|
||||
if (rec->dwCMMType != hdr->phCMMType) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_CLASS)
|
||||
{
|
||||
TRACE( "ET_CLASS: %s\n", MSCMS_dbgstr_tag(rec->dwClass) );
|
||||
TRACE( "ET_CLASS: %s\n", dbgstr_tag(rec->dwClass) );
|
||||
if (rec->dwClass != hdr->phClass) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_DATACOLORSPACE)
|
||||
{
|
||||
TRACE( "ET_DATACOLORSPACE: %s\n", MSCMS_dbgstr_tag(rec->dwDataColorSpace) );
|
||||
TRACE( "ET_DATACOLORSPACE: %s\n", dbgstr_tag(rec->dwDataColorSpace) );
|
||||
if (rec->dwDataColorSpace != hdr->phDataColorSpace) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_CONNECTIONSPACE)
|
||||
{
|
||||
TRACE( "ET_CONNECTIONSPACE: %s\n", MSCMS_dbgstr_tag(rec->dwConnectionSpace) );
|
||||
TRACE( "ET_CONNECTIONSPACE: %s\n", dbgstr_tag(rec->dwConnectionSpace) );
|
||||
if (rec->dwConnectionSpace != hdr->phConnectionSpace) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_SIGNATURE)
|
||||
{
|
||||
TRACE( "ET_SIGNATURE: %s\n", MSCMS_dbgstr_tag(rec->dwSignature) );
|
||||
TRACE( "ET_SIGNATURE: %s\n", dbgstr_tag(rec->dwSignature) );
|
||||
if (rec->dwSignature != hdr->phSignature) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_PLATFORM)
|
||||
{
|
||||
TRACE( "ET_PLATFORM: %s\n", MSCMS_dbgstr_tag(rec->dwPlatform) );
|
||||
TRACE( "ET_PLATFORM: %s\n", dbgstr_tag(rec->dwPlatform) );
|
||||
if (rec->dwPlatform != hdr->phPlatform) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_PROFILEFLAGS)
|
||||
|
@ -786,12 +772,12 @@ static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
|
|||
}
|
||||
if (rec->dwFields & ET_MANUFACTURER)
|
||||
{
|
||||
TRACE( "ET_MANUFACTURER: %s\n", MSCMS_dbgstr_tag(rec->dwManufacturer) );
|
||||
TRACE( "ET_MANUFACTURER: %s\n", dbgstr_tag(rec->dwManufacturer) );
|
||||
if (rec->dwManufacturer != hdr->phManufacturer) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_MODEL)
|
||||
{
|
||||
TRACE( "ET_MODEL: %s\n", MSCMS_dbgstr_tag(rec->dwModel) );
|
||||
TRACE( "ET_MODEL: %s\n", dbgstr_tag(rec->dwModel) );
|
||||
if (rec->dwModel != hdr->phModel) return FALSE;
|
||||
}
|
||||
if (rec->dwFields & ET_ATTRIBUTES)
|
||||
|
@ -808,7 +794,7 @@ static BOOL MSCMS_match_profile( PENUMTYPEW rec, PPROFILEHEADER hdr )
|
|||
}
|
||||
if (rec->dwFields & ET_CREATOR)
|
||||
{
|
||||
TRACE( "ET_CREATOR: %s\n", MSCMS_dbgstr_tag(rec->dwCreator) );
|
||||
TRACE( "ET_CREATOR: %s\n", dbgstr_tag(rec->dwCreator) );
|
||||
if (rec->dwCreator != hdr->phCreator) return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -857,17 +843,17 @@ BOOL WINAPI EnumColorProfilesA( PCSTR machine, PENUMTYPEA record, PBYTE buffer,
|
|||
memcpy( &recordW, record, sizeof(ENUMTYPEA) );
|
||||
if (record->pDeviceName)
|
||||
{
|
||||
deviceW = MSCMS_strdupW( record->pDeviceName );
|
||||
deviceW = strdupW( record->pDeviceName );
|
||||
if (!(recordW.pDeviceName = deviceW)) goto exit;
|
||||
}
|
||||
|
||||
fileW = MSCMS_strdupW( data.cFileName );
|
||||
fileW = strdupW( data.cFileName );
|
||||
if (!fileW) goto exit;
|
||||
|
||||
ret = MSCMS_header_from_file( fileW, &header );
|
||||
ret = header_from_file( fileW, &header );
|
||||
if (ret)
|
||||
{
|
||||
match = MSCMS_match_profile( &recordW, &header );
|
||||
match = match_profile( &recordW, &header );
|
||||
if (match)
|
||||
{
|
||||
len = sizeof(char) * (lstrlenA( data.cFileName ) + 1);
|
||||
|
@ -888,17 +874,17 @@ BOOL WINAPI EnumColorProfilesA( PCSTR machine, PENUMTYPEA record, PBYTE buffer,
|
|||
|
||||
while (FindNextFileA( find, &data ))
|
||||
{
|
||||
fileW = MSCMS_strdupW( data.cFileName );
|
||||
fileW = strdupW( data.cFileName );
|
||||
if (!fileW) goto exit;
|
||||
|
||||
ret = MSCMS_header_from_file( fileW, &header );
|
||||
ret = header_from_file( fileW, &header );
|
||||
if (!ret)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, fileW );
|
||||
continue;
|
||||
}
|
||||
|
||||
match = MSCMS_match_profile( &recordW, &header );
|
||||
match = match_profile( &recordW, &header );
|
||||
if (match)
|
||||
{
|
||||
char **tmp = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||
|
@ -1001,10 +987,10 @@ BOOL WINAPI EnumColorProfilesW( PCWSTR machine, PENUMTYPEW record, PBYTE buffer,
|
|||
profiles = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR *) + 1 );
|
||||
if (!profiles) goto exit;
|
||||
|
||||
ret = MSCMS_header_from_file( data.cFileName, &header );
|
||||
ret = header_from_file( data.cFileName, &header );
|
||||
if (ret)
|
||||
{
|
||||
match = MSCMS_match_profile( record, &header );
|
||||
match = match_profile( record, &header );
|
||||
if (match)
|
||||
{
|
||||
len = sizeof(WCHAR) * (lstrlenW( data.cFileName ) + 1);
|
||||
|
@ -1023,10 +1009,10 @@ BOOL WINAPI EnumColorProfilesW( PCWSTR machine, PENUMTYPEW record, PBYTE buffer,
|
|||
|
||||
while (FindNextFileW( find, &data ))
|
||||
{
|
||||
ret = MSCMS_header_from_file( data.cFileName, &header );
|
||||
ret = header_from_file( data.cFileName, &header );
|
||||
if (!ret) continue;
|
||||
|
||||
match = MSCMS_match_profile( record, &header );
|
||||
match = match_profile( record, &header );
|
||||
if (match)
|
||||
{
|
||||
WCHAR **tmp = HeapReAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
|
||||
|
@ -1129,7 +1115,7 @@ BOOL WINAPI InstallColorProfileW( PCWSTR machine, PCWSTR profile )
|
|||
|
||||
if (!GetColorDirectoryW( machine, dest, &size )) return FALSE;
|
||||
|
||||
MSCMS_basename( profile, base );
|
||||
basename( profile, base );
|
||||
|
||||
lstrcatW( dest, slash );
|
||||
lstrcatW( dest, base );
|
||||
|
@ -1158,10 +1144,8 @@ BOOL WINAPI InstallColorProfileW( PCWSTR machine, PCWSTR profile )
|
|||
BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL present )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
DWORD i, count;
|
||||
icTag tag;
|
||||
|
||||
TRACE( "( %p, 0x%08x, %p )\n", handle, type, present );
|
||||
|
||||
|
@ -1172,21 +1156,11 @@ BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL prese
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
count = MSCMS_get_tag_count( profile->iccprofile );
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
MSCMS_get_tag_by_index( profile->iccprofile, i, &tag );
|
||||
|
||||
if (tag.sig == type)
|
||||
{
|
||||
*present = ret = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
*present = cmsIsTag( profile->cmsprofile, type );
|
||||
release_profile( profile );
|
||||
ret = TRUE;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1207,7 +1181,7 @@ BOOL WINAPI IsColorProfileTagPresent( HPROFILE handle, TAGTYPE type, PBOOL prese
|
|||
BOOL WINAPI IsColorProfileValid( HPROFILE handle, PBOOL valid )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
|
||||
TRACE( "( %p, %p )\n", handle, valid );
|
||||
|
@ -1219,10 +1193,10 @@ BOOL WINAPI IsColorProfileValid( HPROFILE handle, PBOOL valid )
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
if (profile->iccprofile) ret = *valid = TRUE;
|
||||
if (profile->data) ret = *valid = TRUE;
|
||||
release_profile( profile );
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1247,10 +1221,8 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
PVOID buffer )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
DWORD i, count;
|
||||
icTag tag;
|
||||
|
||||
TRACE( "( %p, 0x%08x, %d, %p, %p )\n", handle, type, offset, size, buffer );
|
||||
|
||||
|
@ -1261,28 +1233,11 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
count = MSCMS_get_tag_count( profile->iccprofile );
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
MSCMS_get_tag_by_index( profile->iccprofile, i, &tag );
|
||||
|
||||
if (tag.sig == type)
|
||||
{
|
||||
if (offset > tag.size)
|
||||
{
|
||||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
MSCMS_set_tag_data( profile->iccprofile, &tag, offset, buffer );
|
||||
|
||||
release_profile( profile );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
ret = set_tag_data( profile, type, offset, buffer, size );
|
||||
release_profile( profile );
|
||||
return ret;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1301,7 +1256,7 @@ BOOL WINAPI SetColorProfileElement( HPROFILE handle, TAGTYPE type, DWORD offset,
|
|||
*/
|
||||
BOOL WINAPI SetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
|
||||
{
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct profile *profile = grab_profile( handle );
|
||||
|
||||
TRACE( "( %p, %p )\n", handle, header );
|
||||
|
@ -1313,14 +1268,13 @@ BOOL WINAPI SetColorProfileHeader( HPROFILE handle, PPROFILEHEADER header )
|
|||
release_profile( profile );
|
||||
return FALSE;
|
||||
}
|
||||
MSCMS_set_profile_header( profile->iccprofile, header );
|
||||
|
||||
set_profile_header( profile, header );
|
||||
release_profile( profile );
|
||||
return TRUE;
|
||||
|
||||
#else
|
||||
return FALSE;
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
@ -1441,10 +1395,11 @@ HPROFILE WINAPI OpenColorProfileA( PPROFILE profile, DWORD access, DWORD sharing
|
|||
*/
|
||||
HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing, DWORD creation )
|
||||
{
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
cmsHPROFILE cmsprofile = NULL;
|
||||
icProfile *iccprofile = NULL;
|
||||
char *data = NULL;
|
||||
HANDLE handle = INVALID_HANDLE_VALUE;
|
||||
DWORD size;
|
||||
|
||||
TRACE( "( %p, 0x%08x, 0x%08x, 0x%08x )\n", profile, access, sharing, creation );
|
||||
|
||||
|
@ -1454,14 +1409,15 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
|
|||
{
|
||||
/* FIXME: access flags not implemented for memory based profiles */
|
||||
|
||||
if (!(iccprofile = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL;
|
||||
memcpy( iccprofile, profile->pProfileData, profile->cbDataSize );
|
||||
if (!(data = HeapAlloc( GetProcessHeap(), 0, profile->cbDataSize ))) return NULL;
|
||||
memcpy( data, profile->pProfileData, profile->cbDataSize );
|
||||
|
||||
cmsprofile = cmsOpenProfileFromMem( iccprofile, profile->cbDataSize );
|
||||
cmsprofile = cmsOpenProfileFromMem( data, profile->cbDataSize );
|
||||
size = profile->cbDataSize;
|
||||
}
|
||||
else if (profile->dwType == PROFILE_FILENAME)
|
||||
{
|
||||
DWORD size, read, flags = 0;
|
||||
DWORD read, flags = 0;
|
||||
|
||||
TRACE( "profile file: %s\n", debugstr_w( profile->pProfileData ) );
|
||||
|
||||
|
@ -1494,32 +1450,27 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
|
|||
WARN( "Unable to open color profile %u\n", GetLastError() );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((size = GetFileSize( handle, NULL )) == INVALID_FILE_SIZE)
|
||||
{
|
||||
ERR( "Unable to retrieve size of color profile\n" );
|
||||
CloseHandle( handle );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
iccprofile = HeapAlloc( GetProcessHeap(), 0, size );
|
||||
if (!iccprofile)
|
||||
if (!(data = HeapAlloc( GetProcessHeap(), 0, size )))
|
||||
{
|
||||
ERR( "Unable to allocate memory for color profile\n" );
|
||||
CloseHandle( handle );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!ReadFile( handle, iccprofile, size, &read, NULL ) || read != size)
|
||||
if (!ReadFile( handle, data, size, &read, NULL ) || read != size)
|
||||
{
|
||||
ERR( "Unable to read color profile\n" );
|
||||
|
||||
CloseHandle( handle );
|
||||
HeapFree( GetProcessHeap(), 0, iccprofile );
|
||||
HeapFree( GetProcessHeap(), 0, data );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cmsprofile = cmsOpenProfileFromMem( iccprofile, size );
|
||||
cmsprofile = cmsOpenProfileFromMem( data, size );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1530,16 +1481,21 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
|
|||
if (cmsprofile)
|
||||
{
|
||||
struct profile profile;
|
||||
HPROFILE hprof;
|
||||
|
||||
profile.file = handle;
|
||||
profile.access = access;
|
||||
profile.iccprofile = iccprofile;
|
||||
profile.file = handle;
|
||||
profile.access = access;
|
||||
profile.data = data;
|
||||
profile.size = size;
|
||||
profile.cmsprofile = cmsprofile;
|
||||
|
||||
return create_profile( &profile );
|
||||
if ((hprof = create_profile( &profile ))) return hprof;
|
||||
HeapFree( GetProcessHeap(), 0, data );
|
||||
cmsCloseProfile( cmsprofile );
|
||||
}
|
||||
CloseHandle( handle );
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1558,11 +1514,11 @@ HPROFILE WINAPI OpenColorProfileW( PPROFILE profile, DWORD access, DWORD sharing
|
|||
BOOL WINAPI CloseColorProfile( HPROFILE profile )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
|
||||
TRACE( "( %p )\n", profile );
|
||||
ret = close_profile( profile );
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -139,21 +139,21 @@ BOOL WINAPI GetPS2ColorSpaceArray( HPROFILE profile, DWORD intent, DWORD type, P
|
|||
|
||||
BOOL WINAPI RegisterCMMA( PCSTR machine, DWORD id, PCSTR dll )
|
||||
{
|
||||
FIXME( "( %p, %s, %p ) stub\n", machine, MSCMS_dbgstr_tag(id), dll );
|
||||
FIXME( "( %p, %s, %p ) stub\n", machine, dbgstr_tag(id), dll );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WINAPI RegisterCMMW( PCWSTR machine, DWORD id, PCWSTR dll )
|
||||
{
|
||||
FIXME( "( %p, %s, %p ) stub\n", machine, MSCMS_dbgstr_tag(id), dll );
|
||||
FIXME( "( %p, %s, %p ) stub\n", machine, dbgstr_tag(id), dll );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WINAPI SelectCMM( DWORD id )
|
||||
{
|
||||
FIXME( "(%s) stub\n", MSCMS_dbgstr_tag(id) );
|
||||
FIXME( "(%s) stub\n", dbgstr_tag(id) );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -192,14 +192,14 @@ BOOL WINAPI SpoolerCopyFileEvent( LPWSTR printer, LPWSTR key, DWORD event )
|
|||
|
||||
BOOL WINAPI UnregisterCMMA( PCSTR machine, DWORD id )
|
||||
{
|
||||
FIXME( "( %p, %s ) stub\n", machine, MSCMS_dbgstr_tag(id) );
|
||||
FIXME( "( %p, %s ) stub\n", machine, dbgstr_tag(id) );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WINAPI UnregisterCMMW( PCWSTR machine, DWORD id )
|
||||
{
|
||||
FIXME( "( %p, %s ) stub\n", machine, MSCMS_dbgstr_tag(id) );
|
||||
FIXME( "( %p, %s ) stub\n", machine, dbgstr_tag(id) );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -36,14 +36,14 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
|
||||
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
|
||||
static DWORD from_profile( HPROFILE profile )
|
||||
{
|
||||
PROFILEHEADER header;
|
||||
|
||||
GetColorProfileHeader( profile, &header );
|
||||
TRACE( "color space: 0x%08x %s\n", header.phDataColorSpace, MSCMS_dbgstr_tag( header.phDataColorSpace ) );
|
||||
TRACE( "color space: 0x%08x %s\n", header.phDataColorSpace, dbgstr_tag( header.phDataColorSpace ) );
|
||||
|
||||
switch (header.phDataColorSpace)
|
||||
{
|
||||
|
@ -68,6 +68,8 @@ static DWORD from_bmformat( BMFORMAT format )
|
|||
case BM_RGBTRIPLETS: return TYPE_RGB_8;
|
||||
case BM_BGRTRIPLETS: return TYPE_BGR_8;
|
||||
case BM_GRAY: return TYPE_GRAY_8;
|
||||
case BM_xRGBQUADS: return TYPE_ARGB_8;
|
||||
case BM_xBGRQUADS: return TYPE_ABGR_8;
|
||||
default:
|
||||
if (quietfixme == 0)
|
||||
{
|
||||
|
@ -96,7 +98,7 @@ static DWORD from_type( COLORTYPE type )
|
|||
}
|
||||
}
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
|
||||
/******************************************************************************
|
||||
* CreateColorTransformA [MSCMS.@]
|
||||
|
@ -141,7 +143,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
|
|||
HPROFILE target, DWORD flags )
|
||||
{
|
||||
HTRANSFORM ret = NULL;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct transform transform;
|
||||
struct profile *dst, *tgt = NULL;
|
||||
cmsHPROFILE cmsinput, cmsoutput, cmstarget = NULL;
|
||||
|
@ -160,7 +162,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
|
|||
intent = space->lcsIntent > 3 ? INTENT_PERCEPTUAL : space->lcsIntent;
|
||||
|
||||
TRACE( "lcsIntent: %x\n", space->lcsIntent );
|
||||
TRACE( "lcsCSType: %s\n", MSCMS_dbgstr_tag( space->lcsCSType ) );
|
||||
TRACE( "lcsCSType: %s\n", dbgstr_tag( space->lcsCSType ) );
|
||||
TRACE( "lcsFilename: %s\n", debugstr_w( space->lcsFilename ) );
|
||||
|
||||
in_format = TYPE_RGB_16;
|
||||
|
@ -181,7 +183,7 @@ HTRANSFORM WINAPI CreateColorTransformW( LPLOGCOLORSPACEW space, HPROFILE dest,
|
|||
if (tgt) release_profile( tgt );
|
||||
release_profile( dst );
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -205,7 +207,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
|
|||
PDWORD intents, DWORD nintents, DWORD flags, DWORD cmm )
|
||||
{
|
||||
HTRANSFORM ret = NULL;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
cmsHPROFILE *cmsprofiles, cmsconvert = NULL;
|
||||
struct transform transform;
|
||||
struct profile *profile0, *profile1;
|
||||
|
@ -237,7 +239,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
|
|||
{
|
||||
/* insert a conversion profile for pairings that lcms doesn't handle */
|
||||
if (out_format == TYPE_RGB_16) cmsconvert = cmsCreate_sRGBProfile();
|
||||
if (out_format == TYPE_Lab_16) cmsconvert = cmsCreateLabProfile( NULL );
|
||||
if (out_format == TYPE_Lab_16) cmsconvert = cmsCreateLab2Profile( NULL );
|
||||
}
|
||||
|
||||
cmsprofiles = HeapAlloc( GetProcessHeap(), 0, (nprofiles + 1) * sizeof(cmsHPROFILE) );
|
||||
|
@ -263,7 +265,7 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
|
|||
release_profile( profile0 );
|
||||
release_profile( profile1 );
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -282,13 +284,13 @@ HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE profiles, DWORD nprofil
|
|||
BOOL WINAPI DeleteColorTransform( HTRANSFORM handle )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
|
||||
TRACE( "( %p )\n", handle );
|
||||
|
||||
ret = close_transform( handle );
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -319,7 +321,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
|
|||
DWORD outputstride, PBMCALLBACKFN callback, ULONG data )
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
struct transform *transform = grab_transform( handle );
|
||||
|
||||
TRACE( "( %p, %p, 0x%08x, 0x%08x, 0x%08x, 0x%08x, %p, 0x%08x, 0x%08x, %p, 0x%08x )\n",
|
||||
|
@ -333,7 +335,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
|
|||
release_transform( transform );
|
||||
ret = TRUE;
|
||||
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -357,7 +359,7 @@ BOOL WINAPI TranslateBitmapBits( HTRANSFORM handle, PVOID srcbits, BMFORMAT inpu
|
|||
BOOL WINAPI TranslateColors( HTRANSFORM handle, PCOLOR in, DWORD count,
|
||||
COLORTYPE input_type, PCOLOR out, COLORTYPE output_type )
|
||||
{
|
||||
#ifdef HAVE_LCMS
|
||||
#ifdef HAVE_LCMS2
|
||||
BOOL ret = TRUE;
|
||||
struct transform *transform = grab_transform( handle );
|
||||
cmsHTRANSFORM xfrm;
|
||||
|
@ -462,7 +464,7 @@ done:
|
|||
release_transform( transform );
|
||||
return ret;
|
||||
|
||||
#else /* HAVE_LCMS */
|
||||
#else /* HAVE_LCMS2 */
|
||||
return FALSE;
|
||||
#endif /* HAVE_LCMS */
|
||||
#endif /* HAVE_LCMS2 */
|
||||
}
|
||||
|
|
|
@ -108,7 +108,7 @@ reactos/dll/win32/mprapi # Synced to Wine-1.5.19
|
|||
reactos/dll/win32/msacm32 # Synced to Wine-1.7.1
|
||||
reactos/dll/win32/msadp32.acm # Synced to Wine-1.7.1
|
||||
reactos/dll/win32/mscat32 # Synced to Wine-1.7.1
|
||||
reactos/dll/win32/mscms # Synced to Wine-1.5.4
|
||||
reactos/dll/win32/mscms # Synced to Wine-1.7.1
|
||||
reactos/dll/win32/mscoree # Synced to Wine-1.5.4
|
||||
reactos/dll/win32/msctf # Synced to Wine-1.5.4
|
||||
reactos/dll/win32/msftedit # Synced to Wine-1.5.19
|
||||
|
|
Loading…
Reference in a new issue