Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
8e7e2c25
Commit
8e7e2c25
authored
Oct 03, 2007
by
Mikolaj Zalewski
Committed by
Alexandre Julliard
Oct 04, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
oleaut32: olepicture: Support loading Aldus Placable Metafiles.
parent
d8ea6c1f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
97 additions
and
2 deletions
+97
-2
olepicture.c
dlls/oleaut32/olepicture.c
+39
-1
olepicture.c
dlls/oleaut32/tests/olepicture.c
+58
-1
No files found.
dlls/oleaut32/olepicture.c
View file @
8e7e2c25
...
...
@@ -90,6 +90,20 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole);
#include "pshpack1.h"
/* Header for Aldus Placable Metafiles - a standard metafile follows */
typedef
struct
_APM_HEADER
{
DWORD
key
;
WORD
handle
;
SHORT
left
;
SHORT
top
;
SHORT
right
;
SHORT
bottom
;
WORD
inch
;
DWORD
reserved
;
WORD
checksum
;
}
APM_HEADER
;
typedef
struct
{
BYTE
bWidth
;
BYTE
bHeight
;
...
...
@@ -554,8 +568,10 @@ static HRESULT WINAPI OLEPictureImpl_get_hPal(IPicture *iface,
*
phandle
=
(
OLE_HANDLE
)
This
->
desc
.
u
.
bmp
.
hpal
;
hres
=
S_OK
;
break
;
case
PICTYPE_ICON
:
case
PICTYPE_METAFILE
:
hres
=
E_FAIL
;
break
;
case
PICTYPE_ICON
:
case
PICTYPE_ENHMETAFILE
:
default:
FIXME
(
"unimplemented for type %d. Returning 0 palette.
\n
"
,
...
...
@@ -1690,6 +1706,25 @@ static HRESULT OLEPictureImpl_LoadMetafile(OLEPictureImpl *This,
return
S_OK
;
}
static
HRESULT
OLEPictureImpl_LoadAPM
(
OLEPictureImpl
*
This
,
const
BYTE
*
data
,
ULONG
size
)
{
APM_HEADER
*
header
=
(
APM_HEADER
*
)
data
;
HRESULT
hr
;
if
(
size
<
sizeof
(
APM_HEADER
))
return
E_FAIL
;
if
(
header
->
key
!=
0x9ac6cdd7
)
return
E_FAIL
;
if
((
hr
=
OLEPictureImpl_LoadMetafile
(
This
,
data
+
sizeof
(
APM_HEADER
),
size
-
sizeof
(
*
header
)))
!=
S_OK
)
return
hr
;
This
->
himetricWidth
=
MulDiv
((
INT
)
header
->
right
-
header
->
left
,
2540
,
header
->
inch
);
This
->
himetricHeight
=
MulDiv
((
INT
)
header
->
bottom
-
header
->
top
,
2540
,
header
->
inch
);
return
S_OK
;
}
/************************************************************************
* OLEPictureImpl_IPersistStream_Load (IUnknown)
*
...
...
@@ -1848,6 +1883,9 @@ static HRESULT WINAPI OLEPictureImpl_Load(IPersistStream* iface,IStream*pStm) {
case
0x5089
:
/* PNG */
hr
=
OLEPictureImpl_LoadPNG
(
This
,
xbuf
,
xread
);
break
;
case
0xcdd7
:
/* APM */
hr
=
OLEPictureImpl_LoadAPM
(
This
,
xbuf
,
xread
);
break
;
case
0x0000
:
{
/* ICON , first word is dwReserved */
hr
=
OLEPictureImpl_LoadIcon
(
This
,
xbuf
,
xread
);
break
;
...
...
dlls/oleaut32/tests/olepicture.c
View file @
8e7e2c25
...
...
@@ -27,7 +27,7 @@
#define COBJMACROS
#include
<wine/test.h>
#include
"wine/test.h"
#include <windef.h>
#include <winbase.h>
#include <winuser.h>
...
...
@@ -40,6 +40,15 @@
#include <olectl.h>
#include <objidl.h>
#define expect_eq(expr, value, type, format) { type ret = (expr); ok((value) == ret, #expr " expected " format " got " format "\n", value, ret); }
#define ole_expect(expr, expect) { \
HRESULT r = expr; \
ok(r == (expect), #expr " returned %x, expected %s (%x)\n", r, #expect, expect); \
}
#define ole_check(expr) ole_expect(expr, S_OK);
static
HMODULE
hOleaut32
;
static
HRESULT
(
WINAPI
*
pOleLoadPicture
)(
LPSTREAM
,
LONG
,
BOOL
,
REFIID
,
LPVOID
*
);
...
...
@@ -103,6 +112,15 @@ static const unsigned char gif4pixel[42] = {
0x02
,
0x00
,
0x00
,
0x02
,
0x03
,
0x14
,
0x16
,
0x05
,
0x00
,
0x3b
};
/* APM with an empty metafile with some padding zeros - looks like under Window the
* metafile data should be at least 20 bytes */
static
const
unsigned
char
apmdata
[]
=
{
0xd7
,
0xcd
,
0xc6
,
0x9a
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xee
,
0x02
,
0xb1
,
0x03
,
0xa0
,
0x05
,
0x00
,
0x00
,
0x00
,
0x00
,
0xee
,
0x53
,
0x01
,
0x00
,
0x09
,
0x00
,
0x00
,
0x03
,
0x13
,
0x00
,
0x00
,
0x00
,
0x01
,
0x00
,
0x05
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x03
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
};
struct
NoStatStreamImpl
{
const
IStreamVtbl
*
lpVtbl
;
...
...
@@ -424,6 +442,44 @@ static void test_OleCreatePictureIndirect(void)
IPicture_Release
(
pict
);
}
static
void
test_apm
()
{
OLE_HANDLE
handle
;
LPSTREAM
stream
;
IPicture
*
pict
;
HGLOBAL
hglob
;
LPBYTE
*
data
;
LONG
cxy
;
BOOL
keep
;
short
type
;
hglob
=
GlobalAlloc
(
0
,
sizeof
(
apmdata
));
data
=
GlobalLock
(
hglob
);
memcpy
(
data
,
apmdata
,
sizeof
(
apmdata
));
ole_check
(
CreateStreamOnHGlobal
(
hglob
,
TRUE
,
&
stream
));
ole_check
(
OleLoadPictureEx
(
stream
,
sizeof
(
apmdata
),
TRUE
,
&
IID_IPicture
,
100
,
100
,
0
,
(
LPVOID
*
)
&
pict
));
ole_check
(
IPicture_get_Handle
(
pict
,
&
handle
));
ok
(
handle
!=
0
,
"handle is null
\n
"
);
ole_check
(
IPicture_get_Type
(
pict
,
&
type
));
expect_eq
(
type
,
PICTYPE_METAFILE
,
short
,
"%d"
);
ole_check
(
IPicture_get_Height
(
pict
,
&
cxy
));
expect_eq
(
cxy
,
1667
,
LONG
,
"%d"
);
ole_check
(
IPicture_get_Width
(
pict
,
&
cxy
));
expect_eq
(
cxy
,
1323
,
LONG
,
"%d"
);
ole_check
(
IPicture_get_KeepOriginalFormat
(
pict
,
&
keep
));
todo_wine
expect_eq
(
keep
,
FALSE
,
LONG
,
"%d"
);
ole_expect
(
IPicture_get_hPal
(
pict
,
&
handle
),
E_FAIL
);
IPicture_Release
(
pict
);
IStream_Release
(
stream
);
}
START_TEST
(
olepicture
)
{
hOleaut32
=
GetModuleHandleA
(
"oleaut32.dll"
);
...
...
@@ -444,6 +500,7 @@ START_TEST(olepicture)
if
(
0
)
test_pic
(
pngimage
,
sizeof
(
pngimage
));
test_empty_image
();
test_empty_image_2
();
test_apm
();
test_Invoke
();
test_OleCreatePictureIndirect
();
...
...
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