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
b85270e3
Commit
b85270e3
authored
Jun 19, 2012
by
Dan Kegel
Committed by
Alexandre Julliard
Jun 20, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Add test for SelectClipRgn in metafiles, make it pass.
parent
cc373eef
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
125 additions
and
6 deletions
+125
-6
graphics.c
dlls/gdi32/mfdrv/graphics.c
+3
-3
metafile.c
dlls/gdi32/tests/metafile.c
+122
-3
No files found.
dlls/gdi32/mfdrv/graphics.c
View file @
b85270e3
...
...
@@ -321,9 +321,9 @@ static INT16 MFDRV_CreateRegion(PHYSDEV dev, HRGN hrgn)
mr
->
rdParm
[
0
]
=
0
;
mr
->
rdParm
[
1
]
=
6
;
mr
->
rdParm
[
2
]
=
0x
1234
;
mr
->
rdParm
[
2
]
=
0x
2f6
;
mr
->
rdParm
[
3
]
=
0
;
mr
->
rdParm
[
4
]
=
(
Param
-
mr
->
rdParm
)
*
sizeof
(
WORD
);
mr
->
rdParm
[
4
]
=
(
Param
-
&
mr
->
rdFunction
)
*
sizeof
(
WORD
);
mr
->
rdParm
[
5
]
=
Bands
;
mr
->
rdParm
[
6
]
=
MaxBands
;
mr
->
rdParm
[
7
]
=
rgndata
->
rdh
.
rcBound
.
left
;
...
...
@@ -413,7 +413,7 @@ INT MFDRV_ExtSelectClipRgn( PHYSDEV dev, HRGN hrgn, INT mode )
if
(
!
hrgn
)
return
NULLREGION
;
iRgn
=
MFDRV_CreateRegion
(
dev
,
hrgn
);
if
(
iRgn
==
-
1
)
return
ERROR
;
ret
=
MFDRV_MetaParam1
(
dev
,
META_SELECT
CLIPREGION
,
iRgn
)
?
NULLREGION
:
ERROR
;
ret
=
MFDRV_MetaParam1
(
dev
,
META_SELECT
OBJECT
,
iRgn
)
?
NULLREGION
:
ERROR
;
MFDRV_MetaParam1
(
dev
,
META_DELETEOBJECT
,
iRgn
);
MFDRV_RemoveHandle
(
dev
,
iRgn
);
return
ret
;
...
...
dlls/gdi32/tests/metafile.c
View file @
b85270e3
...
...
@@ -2492,6 +2492,124 @@ todo_wine
DeleteDC
(
hdc
);
}
static
const
unsigned
char
MF_CLIP_BITS
[]
=
{
/* METAHEADER */
0x01
,
0x00
,
/* mtType */
0x09
,
0x00
,
/* mtHeaderSize */
0x00
,
0x03
,
/* mtVersion */
0x32
,
0x00
,
0x00
,
0x00
,
/* mtSize */
0x01
,
0x00
,
/* mtNoObjects */
0x14
,
0x00
,
0x00
,
0x00
,
/* mtMaxRecord (size in words of longest record) */
0x00
,
0x00
,
/* reserved */
/* METARECORD for CreateRectRgn(0x11, 0x22, 0x33, 0x44) */
0x14
,
0x00
,
0x00
,
0x00
,
/* rdSize in words */
0xff
,
0x06
,
/* META_CREATEREGION */
0x00
,
0x00
,
0x06
,
0x00
,
0xf6
,
0x02
,
0x00
,
0x00
,
0x24
,
0x00
,
0x01
,
0x00
,
0x02
,
0x00
,
0x11
,
0x00
,
0x22
,
0x00
,
0x33
,
0x00
,
0x44
,
0x00
,
0x02
,
0x00
,
0x22
,
0x00
,
0x44
,
0x00
,
0x11
,
0x00
,
0x33
,
0x00
,
0x02
,
0x00
,
/* METARECORD for SelectObject */
0x04
,
0x00
,
0x00
,
0x00
,
0x2d
,
0x01
,
/* META_SELECTOBJECT (not META_SELECTCLIPREGION?!) */
0x00
,
0x00
,
/* METARECORD */
0x04
,
0x00
,
0x00
,
0x00
,
0xf0
,
0x01
,
/* META_DELETEOBJECT */
0x00
,
0x00
,
/* METARECORD for MoveTo(1,0x30) */
0x05
,
0x00
,
0x00
,
0x00
,
/* rdSize in words */
0x14
,
0x02
,
/* META_MOVETO */
0x30
,
0x00
,
/* y */
0x01
,
0x00
,
/* x */
/* METARECORD for LineTo(0x20, 0x30) */
0x05
,
0x00
,
0x00
,
0x00
,
/* rdSize in words */
0x13
,
0x02
,
/* META_LINETO */
0x30
,
0x00
,
/* y */
0x20
,
0x00
,
/* x */
/* EOF */
0x03
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
};
static
int
clip_mf_enum_proc_seen_selectclipregion
;
static
int
clip_mf_enum_proc_seen_selectobject
;
static
int
CALLBACK
clip_mf_enum_proc
(
HDC
hdc
,
HANDLETABLE
*
handle_table
,
METARECORD
*
mr
,
int
n_objs
,
LPARAM
param
)
{
switch
(
mr
->
rdFunction
)
{
case
META_SELECTCLIPREGION
:
clip_mf_enum_proc_seen_selectclipregion
++
;
break
;
case
META_SELECTOBJECT
:
clip_mf_enum_proc_seen_selectobject
++
;
break
;
}
return
1
;
}
static
void
test_mf_clipping
(
void
)
{
/* left top right bottom */
static
RECT
rc_clip
=
{
0x11
,
0x22
,
0x33
,
0x44
};
HWND
hwnd
;
HDC
hdc
;
HMETAFILE
hmf
;
HRGN
hrgn
;
INT
ret
;
SetLastError
(
0xdeadbeef
);
hdc
=
CreateMetaFileA
(
NULL
);
ok
(
hdc
!=
0
,
"CreateMetaFileA error %d
\n
"
,
GetLastError
());
hrgn
=
CreateRectRgn
(
rc_clip
.
left
,
rc_clip
.
top
,
rc_clip
.
right
,
rc_clip
.
bottom
);
ret
=
SelectClipRgn
(
hdc
,
hrgn
);
/* Seems like it should be SIMPLEREGION, but windows returns NULLREGION? */
ok
(
ret
==
NULLREGION
,
"expected NULLREGION, got %d
\n
"
,
ret
);
/* Draw a line that starts off left of the clip region and ends inside it */
MoveToEx
(
hdc
,
0x1
,
0x30
,
NULL
);
LineTo
(
hdc
,
0x20
,
0x30
);
SetLastError
(
0xdeadbeef
);
hmf
=
CloseMetaFile
(
hdc
);
ok
(
hmf
!=
0
,
"CloseMetaFile error %d
\n
"
,
GetLastError
());
if
(
compare_mf_bits
(
hmf
,
MF_CLIP_BITS
,
sizeof
(
MF_CLIP_BITS
),
"mf_clipping"
)
!=
0
)
{
dump_mf_bits
(
hmf
,
"mf_clipping"
);
}
DeleteObject
(
hrgn
);
hwnd
=
CreateWindowExA
(
0
,
"static"
,
NULL
,
WS_POPUP
|
WS_VISIBLE
,
0
,
0
,
200
,
200
,
0
,
0
,
0
,
NULL
);
ok
(
hwnd
!=
0
,
"CreateWindowExA error %d
\n
"
,
GetLastError
());
hdc
=
GetDC
(
hwnd
);
ret
=
EnumMetaFile
(
hdc
,
hmf
,
clip_mf_enum_proc
,
(
LPARAM
)
&
rc_clip
);
ok
(
ret
,
"EnumMetaFile error %d
\n
"
,
GetLastError
());
/* Oddly, windows doesn't seem to use META_SELECTCLIPREGION */
ok
(
clip_mf_enum_proc_seen_selectclipregion
==
0
,
"expected 0 selectclipregion, saw %d
\n
"
,
clip_mf_enum_proc_seen_selectclipregion
);
ok
(
clip_mf_enum_proc_seen_selectobject
==
1
,
"expected 1 selectobject, saw %d
\n
"
,
clip_mf_enum_proc_seen_selectobject
);
DeleteMetaFile
(
hmf
);
ReleaseDC
(
hwnd
,
hdc
);
DestroyWindow
(
hwnd
);
}
static
INT
CALLBACK
EmfEnumProc
(
HDC
hdc
,
HANDLETABLE
*
lpHTable
,
const
ENHMETARECORD
*
lpEMFR
,
INT
nObj
,
LPARAM
lpData
)
{
LPMETAFILEPICT
lpMFP
=
(
LPMETAFILEPICT
)
lpData
;
...
...
@@ -3205,6 +3323,9 @@ START_TEST(metafile)
test_SaveDC
();
test_emf_BitBlt
();
test_emf_DCBrush
();
test_emf_ExtTextOut_on_path
();
test_emf_clipping
();
test_emf_polybezier
();
/* For win-format metafiles (mfdrv) */
test_mf_SaveDC
();
...
...
@@ -3215,9 +3336,7 @@ START_TEST(metafile)
test_CopyMetaFile
();
test_SetMetaFileBits
();
test_mf_ExtTextOut_on_path
();
test_emf_ExtTextOut_on_path
();
test_emf_clipping
();
test_emf_polybezier
();
test_mf_clipping
();
/* For metafile conversions */
test_mf_conversions
();
...
...
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