Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
d9700b6a
Commit
d9700b6a
authored
Nov 17, 2009
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Reimplement the 16-bit metafile functions on top of the 32-bit ones.
parent
4990ca0e
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
45 additions
and
97 deletions
+45
-97
gdi_private.h
dlls/gdi32/gdi_private.h
+0
-3
metafile.c
dlls/gdi32/metafile.c
+3
-3
metafile16.c
dlls/gdi32/metafile16.c
+42
-91
No files found.
dlls/gdi32/gdi_private.h
View file @
d9700b6a
...
...
@@ -449,9 +449,6 @@ extern BOOL GDI_hdc_not_using_object(HGDIOBJ obj, HDC hdc) DECLSPEC_HIDDEN;
/* metafile.c */
extern
HMETAFILE
MF_Create_HMETAFILE
(
METAHEADER
*
mh
)
DECLSPEC_HIDDEN
;
extern
METAHEADER
*
MF_CreateMetaHeaderDisk
(
METAHEADER
*
mr
,
LPCVOID
filename
,
BOOL
unicode
)
DECLSPEC_HIDDEN
;
extern
METAHEADER
*
MF_ReadMetaFile
(
HANDLE
hfile
)
DECLSPEC_HIDDEN
;
extern
METAHEADER
*
MF_LoadDiskBasedMetaFile
(
METAHEADER
*
mh
)
DECLSPEC_HIDDEN
;
extern
BOOL
MF_PlayMetaFile
(
HDC
hdc
,
METAHEADER
*
mh
)
DECLSPEC_HIDDEN
;
/* path.c */
...
...
dlls/gdi32/metafile.c
View file @
d9700b6a
...
...
@@ -175,7 +175,7 @@ BOOL WINAPI DeleteMetaFile( HMETAFILE hmf )
* Returns a pointer to a memory based METAHEADER read in from file HFILE
*
*/
METAHEADER
*
MF_ReadMetaFile
(
HANDLE
hfile
)
static
METAHEADER
*
MF_ReadMetaFile
(
HANDLE
hfile
)
{
METAHEADER
*
mh
;
DWORD
BytesRead
,
size
;
...
...
@@ -266,7 +266,7 @@ HMETAFILE WINAPI GetMetaFileW( LPCWSTR lpFilename )
*
* Creates a new memory-based metafile from a disk-based one.
*/
METAHEADER
*
MF_LoadDiskBasedMetaFile
(
METAHEADER
*
mh
)
static
METAHEADER
*
MF_LoadDiskBasedMetaFile
(
METAHEADER
*
mh
)
{
METAHEADERDISK
*
mhd
;
HANDLE
hfile
;
...
...
@@ -384,7 +384,7 @@ HMETAFILE WINAPI CopyMetaFileA( HMETAFILE hSrcMetaFile, LPCSTR lpFilename )
*
* Helper for PlayMetaFile
*/
BOOL
MF_PlayMetaFile
(
HDC
hdc
,
METAHEADER
*
mh
)
static
BOOL
MF_PlayMetaFile
(
HDC
hdc
,
METAHEADER
*
mh
)
{
METARECORD
*
mr
;
...
...
dlls/gdi32/metafile16.c
View file @
d9700b6a
...
...
@@ -30,12 +30,15 @@
#include "wine/wingdi16.h"
#include "wownt32.h"
#include "winreg.h"
#include "winternl.h"
#include "gdi_private.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
metafile
);
#define METAFILE_MEMORY 1
#define METAFILE_DISK 2
#define MFHEADERSIZE (sizeof(METAHEADER))
#define MFVERSION 0x300
/******************************************************************
* MF_GetMetaHeader16
*
...
...
@@ -58,26 +61,38 @@ static BOOL16 MF_ReleaseMetaHeader16( HMETAFILE16 hmf )
}
/******************************************************************
* MF_Create_HMETATFILE16
*
* Creates a HMETAFILE16 object from a METAHEADER
* create_metafile16
*
*
HMETAFILE16s are Global memory handles
.
*
Create a 16-bit metafile from a 32-bit one. The 32-bit one is deleted
.
*/
static
HMETAFILE16
MF_Create_HMETAFILE16
(
METAHEADER
*
mh
)
static
HMETAFILE16
create_metafile16
(
HMETAFILE
hmf
)
{
HMETAFILE16
hmf
;
DWORD
size
=
mh
->
mtSize
*
sizeof
(
WORD
)
;
UINT
size
;
HMETAFILE16
hmf16
;
hmf
=
GlobalAlloc16
(
GMEM_MOVEABLE
,
size
);
if
(
hmf
)
if
(
!
hmf
)
return
0
;
size
=
GetMetaFileBitsEx
(
hmf
,
0
,
NULL
);
hmf16
=
GlobalAlloc16
(
GMEM_MOVEABLE
,
size
);
if
(
hmf16
)
{
METAHEADER
*
mh_dest
=
GlobalLock16
(
hmf
);
memcpy
(
mh_dest
,
mh
,
size
);
GlobalUnlock16
(
hmf
);
void
*
buffer
=
GlobalLock16
(
hmf16
);
GetMetaFileBitsEx
(
hmf
,
size
,
buffer
);
GlobalUnlock16
(
hmf16
);
}
HeapFree
(
GetProcessHeap
(),
0
,
mh
);
return
hmf
;
DeleteMetaFile
(
hmf
);
return
hmf16
;
}
/******************************************************************
* create_metafile32
*
* Create a 32-bit metafile from a 16-bit one.
*/
static
HMETAFILE
create_metafile32
(
HMETAFILE16
hmf16
)
{
METAHEADER
*
mh
=
MF_GetMetaHeader16
(
hmf16
);
if
(
!
mh
)
return
0
;
return
SetMetaFileBitsEx
(
mh
->
mtSize
*
2
,
(
BYTE
*
)
mh
);
}
/**********************************************************************
...
...
@@ -93,23 +108,7 @@ HDC16 WINAPI CreateMetaFile16( LPCSTR filename )
*/
HMETAFILE16
WINAPI
CloseMetaFile16
(
HDC16
hdc
)
{
HMETAFILE16
hmf16
=
0
;
HMETAFILE
hmf
=
CloseMetaFile
(
HDC_32
(
hdc
)
);
if
(
hmf
)
{
UINT
size
=
GetMetaFileBitsEx
(
hmf
,
0
,
NULL
);
hmf16
=
GlobalAlloc16
(
GMEM_MOVEABLE
,
size
);
if
(
hmf16
)
{
void
*
buffer
=
GlobalLock16
(
hmf16
);
GetMetaFileBitsEx
(
hmf
,
size
,
buffer
);
GlobalUnlock16
(
hmf16
);
}
DeleteMetaFile
(
hmf
);
}
return
hmf16
;
return
create_metafile16
(
CloseMetaFile
(
HDC_32
(
hdc
)
));
}
/******************************************************************
...
...
@@ -125,22 +124,7 @@ BOOL16 WINAPI DeleteMetaFile16( HMETAFILE16 hmf )
*/
HMETAFILE16
WINAPI
GetMetaFile16
(
LPCSTR
lpFilename
)
{
METAHEADER
*
mh
;
HANDLE
hFile
;
TRACE
(
"%s
\n
"
,
lpFilename
);
if
(
!
lpFilename
)
return
0
;
if
((
hFile
=
CreateFileA
(
lpFilename
,
GENERIC_READ
,
FILE_SHARE_READ
,
NULL
,
OPEN_EXISTING
,
0
,
0
))
==
INVALID_HANDLE_VALUE
)
return
0
;
mh
=
MF_ReadMetaFile
(
hFile
);
CloseHandle
(
hFile
);
if
(
!
mh
)
return
0
;
return
MF_Create_HMETAFILE16
(
mh
);
return
create_metafile16
(
GetMetaFileA
(
lpFilename
));
}
/******************************************************************
...
...
@@ -148,35 +132,10 @@ HMETAFILE16 WINAPI GetMetaFile16( LPCSTR lpFilename )
*/
HMETAFILE16
WINAPI
CopyMetaFile16
(
HMETAFILE16
hSrcMetaFile
,
LPCSTR
lpFilename
)
{
METAHEADER
*
mh
=
MF_GetMetaHeader16
(
hSrcMetaFile
);
METAHEADER
*
mh2
=
NULL
;
HANDLE
hFile
;
TRACE
(
"(%08x,%s)
\n
"
,
hSrcMetaFile
,
lpFilename
);
if
(
!
mh
)
return
0
;
if
(
mh
->
mtType
==
METAFILE_DISK
)
mh2
=
MF_LoadDiskBasedMetaFile
(
mh
);
else
{
mh2
=
HeapAlloc
(
GetProcessHeap
(),
0
,
mh
->
mtSize
*
2
);
memcpy
(
mh2
,
mh
,
mh
->
mtSize
*
2
);
}
MF_ReleaseMetaHeader16
(
hSrcMetaFile
);
if
(
lpFilename
)
{
/* disk based metafile */
DWORD
w
;
if
((
hFile
=
CreateFileA
(
lpFilename
,
GENERIC_WRITE
,
0
,
NULL
,
CREATE_ALWAYS
,
0
,
0
))
==
INVALID_HANDLE_VALUE
)
{
HeapFree
(
GetProcessHeap
(),
0
,
mh2
);
return
0
;
}
WriteFile
(
hFile
,
mh2
,
mh2
->
mtSize
*
2
,
&
w
,
NULL
);
CloseHandle
(
hFile
);
mh2
=
MF_CreateMetaHeaderDisk
(
mh2
,
lpFilename
,
FALSE
);
}
return
MF_Create_HMETAFILE16
(
mh2
);
HMETAFILE
hmf
=
create_metafile32
(
hSrcMetaFile
);
HMETAFILE
hmf2
=
CopyMetaFileA
(
hmf
,
lpFilename
);
DeleteMetaFile
(
hmf
);
return
create_metafile16
(
hmf2
);
}
/******************************************************************
...
...
@@ -212,12 +171,11 @@ BOOL16 WINAPI IsValidMetaFile16(HMETAFILE16 hmf)
* PlayMetaFile (GDI.123)
*
*/
BOOL16
WINAPI
PlayMetaFile16
(
HDC16
hdc
,
HMETAFILE16
hmf
)
BOOL16
WINAPI
PlayMetaFile16
(
HDC16
hdc
,
HMETAFILE16
hmf
16
)
{
BOOL16
ret
;
METAHEADER
*
mh
=
MF_GetMetaHeader16
(
hmf
);
ret
=
MF_PlayMetaFile
(
HDC_32
(
hdc
),
mh
);
MF_ReleaseMetaHeader16
(
hmf
);
HMETAFILE
hmf
=
create_metafile32
(
hmf16
);
BOOL
ret
=
PlayMetaFile
(
HDC_32
(
hdc
),
hmf
);
DeleteMetaFile
(
hmf
);
return
ret
;
}
...
...
@@ -241,16 +199,11 @@ BOOL16 WINAPI EnumMetaFile16( HDC16 hdc16, HMETAFILE16 hmf,
HBRUSH
hBrush
;
HFONT
hFont
;
WORD
args
[
8
];
BOOL16
result
=
TRUE
,
loaded
=
FALSE
;
BOOL16
result
=
TRUE
;
TRACE
(
"(%p, %04x, %p, %08lx)
\n
"
,
hdc
,
hmf
,
lpEnumFunc
,
lpData
);
if
(
!
mh
)
return
FALSE
;
if
(
mh
->
mtType
==
METAFILE_DISK
)
{
/* Create a memory-based copy */
mh
=
MF_LoadDiskBasedMetaFile
(
mh
);
if
(
!
mh
)
return
FALSE
;
loaded
=
TRUE
;
}
/* save the current pen, brush and font */
hPen
=
GetCurrentObject
(
hdc
,
OBJ_PEN
);
...
...
@@ -308,8 +261,6 @@ BOOL16 WINAPI EnumMetaFile16( HDC16 hdc16, HMETAFILE16 hmf,
/* free handle table */
GlobalFree16
(
hHT
);
if
(
loaded
)
HeapFree
(
GetProcessHeap
(),
0
,
mh
);
MF_ReleaseMetaHeader16
(
hmf
);
return
result
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment