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
778faedb
Commit
778faedb
authored
Jul 15, 2016
by
Huw Davies
Committed by
Alexandre Julliard
Jul 15, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gdi32: Copy 1-bpp pixels one byte at a time.
Signed-off-by:
Huw Davies
<
huw@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
3a4dd04b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
292 additions
and
38 deletions
+292
-38
primitives.c
dlls/gdi32/dibdrv/primitives.c
+265
-23
dib.c
dlls/gdi32/tests/dib.c
+27
-15
No files found.
dlls/gdi32/dibdrv/primitives.c
View file @
778faedb
...
...
@@ -106,6 +106,7 @@ static inline BYTE *get_pixel_ptr_1(const dib_info *dib, int x, int y)
static
const
BYTE
pixel_masks_4
[
2
]
=
{
0xf0
,
0x0f
};
static
const
BYTE
pixel_masks_1
[
8
]
=
{
0x80
,
0x40
,
0x20
,
0x10
,
0x08
,
0x04
,
0x02
,
0x01
};
static
const
BYTE
edge_masks_1
[
8
]
=
{
0xff
,
0x7f
,
0x3f
,
0x1f
,
0x0f
,
0x07
,
0x03
,
0x01
};
static
inline
void
do_rop_32
(
DWORD
*
ptr
,
DWORD
and
,
DWORD
xor
)
{
...
...
@@ -226,33 +227,275 @@ static inline void do_rop_codes_line_rev_4(BYTE *dst, int dst_x, const BYTE *src
}
}
/**************************************************
* get_src_byte_1
*
* Return a byte representing 8 pixels of src data
* that is aligned with the dst.
*
* off is the number of bits that src is ahead of dst
* measured from the start. If off is +ve then we need to
* grab data from src[0] and src[1]. If off is -ve we use
* last (which is equivalent to src[-1]) and src[0]. For
* the first call in a line the last component will not be
* needed so it's safe for the caller to zero-init it.
*
* S |.....xxx|xxxxxxxx
* D |..xxxxxx|xxxxxxxx off = +3
*
* S |..xxxxxx|xxxxxxxx
* D |.....xxx|xxxxxxxx off = -3
*/
static
inline
BYTE
get_src_byte_1
(
const
BYTE
*
src
,
int
off
,
BYTE
*
last
)
{
BYTE
src_val
;
if
(
off
==
0
)
src_val
=
src
[
0
];
else
if
(
off
>
0
)
src_val
=
(
src
[
0
]
<<
off
)
|
(
src
[
1
]
>>
(
8
-
off
));
else
{
src_val
=
(
*
last
<<
(
8
+
off
))
|
(
src
[
0
]
>>
-
off
);
*
last
=
src
[
0
];
}
return
src_val
;
}
static
inline
void
do_rop_codes_line_1
(
BYTE
*
dst
,
int
dst_x
,
const
BYTE
*
src
,
int
src_x
,
struct
rop_codes
*
codes
,
int
len
)
struct
rop_codes
*
codes
,
int
len
,
int
rop2
)
{
BYTE
src_val
,
last_src
=
0
;
int
off
=
(
src_x
&
7
)
-
(
dst_x
&
7
),
i
,
full_bytes
;
int
dst_end
=
dst_x
+
len
;
BYTE
mask
;
src
+=
src_x
/
8
;
dst
+=
dst_x
/
8
;
/* Handle special case of all of dst in one byte. */
if
((
dst_x
&
~
7
)
==
((
dst_end
-
1
)
&
~
7
))
{
if
(
off
==
0
)
src_val
=
src
[
0
];
else
if
(
off
>
0
)
{
src_val
=
src
[
0
]
<<
off
;
if
((
dst_end
&
7
)
+
off
>
8
)
src_val
|=
(
src
[
1
]
>>
(
8
-
off
));
}
else
src_val
=
src
[
0
]
>>
-
off
;
mask
=
edge_masks_1
[
dst_x
&
7
];
if
(
dst_end
&
7
)
mask
&=
~
edge_masks_1
[
dst_end
&
7
];
do_rop_codes_mask_8
(
dst
,
src_val
,
codes
,
mask
);
return
;
}
if
(
dst_x
&
7
)
{
src_val
=
get_src_byte_1
(
src
,
off
,
&
last_src
);
mask
=
edge_masks_1
[
dst_x
&
7
];
do_rop_codes_mask_8
(
dst
,
src_val
,
codes
,
mask
);
src
++
;
dst
++
;
}
full_bytes
=
(
dst_end
-
((
dst_x
+
7
)
&
~
7
))
/
8
;
if
(
off
==
0
)
{
if
(
rop2
==
R2_COPYPEN
)
{
memmove
(
dst
,
src
,
full_bytes
);
src
+=
full_bytes
;
dst
+=
full_bytes
;
}
else
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
++
,
dst
++
)
do_rop_codes_8
(
dst
,
src
[
0
],
codes
);
}
}
else
if
(
off
>
0
)
{
if
(
rop2
==
R2_COPYPEN
)
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
++
,
dst
++
)
dst
[
0
]
=
(
src
[
0
]
<<
off
)
|
(
src
[
1
]
>>
(
8
-
off
));
}
else
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
++
,
dst
++
)
do_rop_codes_8
(
dst
,
(
src
[
0
]
<<
off
)
|
(
src
[
1
]
>>
(
8
-
off
)),
codes
);
}
}
else
{
if
(
rop2
==
R2_COPYPEN
)
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
++
,
dst
++
)
{
src_val
=
(
last_src
<<
(
8
+
off
))
|
(
src
[
0
]
>>
-
off
);
last_src
=
src
[
0
];
dst
[
0
]
=
src_val
;
}
}
else
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
++
,
dst
++
)
{
src_val
=
(
last_src
<<
(
8
+
off
))
|
(
src
[
0
]
>>
-
off
);
last_src
=
src
[
0
];
do_rop_codes_8
(
dst
,
src_val
,
codes
);
}
}
}
if
(
dst_end
&
7
)
{
if
(
off
>
0
&&
(
dst_end
&
7
)
+
off
<=
8
)
/* Don't read src[1] if everything's in src[0]. */
src_val
=
src
[
0
]
<<
off
;
else
if
(
off
<
0
&&
(
dst_end
&
7
)
+
off
<=
0
)
/* Don't read src[0] if everything's in last_src. */
src_val
=
last_src
<<
(
8
+
off
);
else
src_val
=
get_src_byte_1
(
src
,
off
,
&
last_src
);
mask
=
~
edge_masks_1
[
dst_end
&
7
];
do_rop_codes_mask_8
(
dst
,
src_val
,
codes
,
mask
);
}
}
/**************************************************
* get_src_byte_rev_1
*
* Return a byte representing 8 pixels of src data
* that is aligned with the dst.
*
* off is the number of bits that src is ahead of dst
* measured from the end. If off is +ve then we need to
* grab data from src[0] and last (which is equivalent to src[1]).
* If off is -ve we use src[-1]) and src[0]. For the first call
* in a line the last component wil not be needed so it is safe
* for the caller to zero-init it.
*
* S xxxxxxxx|xxxxxx..|
* D xxxxxxxx|xxx.....| off = +3
*
* S xxxxxxxx|xxx.....|
* D xxxxxxxx|xxxxxx..| off = -3
*/
static
inline
BYTE
get_src_byte_rev_1
(
const
BYTE
*
src
,
int
off
,
BYTE
*
last
)
{
BYTE
src_val
;
for
(
src
+=
src_x
/
8
,
dst
+=
dst_x
/
8
;
len
>
0
;
len
--
,
dst_x
++
,
src_x
++
)
if
(
off
==
0
)
src_val
=
src
[
0
];
else
if
(
off
>
0
)
{
src_val
=
*
src
&
pixel_masks_1
[
src_x
&
7
]
?
0xff
:
0
;
do_rop_codes_mask_8
(
dst
,
src_val
,
codes
,
pixel_masks_1
[
dst_x
&
7
]
);
if
((
src_x
&
7
)
==
7
)
src
++
;
if
((
dst_x
&
7
)
==
7
)
dst
++
;
src_val
=
(
src
[
0
]
<<
off
)
|
(
*
last
>>
(
8
-
off
));
*
last
=
*
src
;
}
else
src_val
=
(
src
[
-
1
]
<<
(
8
+
off
))
|
(
src
[
0
]
>>
-
off
);
return
src_val
;
}
static
inline
void
do_rop_codes_line_rev_1
(
BYTE
*
dst
,
int
dst_x
,
const
BYTE
*
src
,
int
src_x
,
struct
rop_codes
*
codes
,
int
len
)
struct
rop_codes
*
codes
,
int
len
,
int
rop2
)
{
BYTE
src_val
;
BYTE
src_val
,
last_src
=
0
;
int
src_end
=
src_x
+
len
,
dst_end
=
dst_x
+
len
;
int
off
=
((
src_end
-
1
)
&
7
)
-
((
dst_end
-
1
)
&
7
),
i
,
full_bytes
;
BYTE
mask
;
src_x
+=
len
-
1
;
dst_x
+=
len
-
1
;
for
(
src
+=
src_x
/
8
,
dst
+=
dst_x
/
8
;
len
>
0
;
len
--
,
dst_x
--
,
src_x
--
)
/* Handle special case of all of dst in one byte. */
if
((
dst_x
&
~
7
)
==
((
dst_end
-
1
)
&
~
7
))
{
do_rop_codes_line_1
(
dst
,
dst_x
,
src
,
src_x
,
codes
,
len
,
rop2
);
return
;
}
src
+=
(
src_end
-
1
)
/
8
;
dst
+=
(
dst_end
-
1
)
/
8
;
if
(
dst_end
&
7
)
{
src_val
=
*
src
&
pixel_masks_1
[
src_x
&
7
]
?
0xff
:
0
;
do_rop_codes_mask_8
(
dst
,
src_val
,
codes
,
pixel_masks_1
[
dst_x
&
7
]
);
if
((
src_x
&
7
)
==
0
)
src
--
;
if
((
dst_x
&
7
)
==
0
)
dst
--
;
src_val
=
get_src_byte_rev_1
(
src
,
off
,
&
last_src
);
mask
=
~
edge_masks_1
[
dst_end
&
7
];
do_rop_codes_mask_8
(
dst
,
src_val
,
codes
,
mask
);
src
--
;
dst
--
;
}
full_bytes
=
(
dst_end
-
((
dst_x
+
7
)
&
~
7
))
/
8
;
if
(
off
==
0
)
{
if
(
rop2
==
R2_COPYPEN
)
{
memmove
(
dst
,
src
,
full_bytes
);
src
-=
full_bytes
;
dst
-=
full_bytes
;
}
else
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
--
,
dst
--
)
do_rop_codes_8
(
dst
,
src
[
0
],
codes
);
}
}
else
if
(
off
>
0
)
{
if
(
rop2
==
R2_COPYPEN
)
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
--
,
dst
--
)
{
src_val
=
(
src
[
0
]
<<
off
)
|
(
last_src
>>
(
8
-
off
));
last_src
=
src
[
0
];
dst
[
0
]
=
src_val
;
}
}
else
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
--
,
dst
--
)
{
src_val
=
(
src
[
0
]
<<
off
)
|
(
last_src
>>
(
8
-
off
));
last_src
=
src
[
0
];
do_rop_codes_8
(
dst
,
src_val
,
codes
);
}
}
}
else
{
if
(
rop2
==
R2_COPYPEN
)
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
--
,
dst
--
)
dst
[
0
]
=
(
src
[
-
1
]
<<
(
8
+
off
))
|
(
src
[
0
]
>>
-
off
);
}
else
{
for
(
i
=
0
;
i
<
full_bytes
;
i
++
,
src
--
,
dst
--
)
do_rop_codes_8
(
dst
,
(
src
[
-
1
]
<<
(
8
+
off
))
|
(
src
[
0
]
>>
-
off
),
codes
);
}
}
if
(
dst_x
&
7
)
{
if
(
off
<
0
&&
(
dst_x
&
7
)
+
off
>=
0
)
/* Don't read src[-1] if everything's in src[0]. */
src_val
=
src
[
0
]
>>
-
off
;
else
if
(
off
>
0
&&
(
dst_x
&
7
)
+
off
>=
8
)
/* Don't read src[0] if everything's in last_src. */
src_val
=
last_src
>>
(
8
-
off
);
else
src_val
=
get_src_byte_rev_1
(
src
,
off
,
&
last_src
);
mask
=
edge_masks_1
[
dst_x
&
7
];
do_rop_codes_mask_8
(
dst
,
src_val
,
codes
,
mask
);
}
}
...
...
@@ -526,7 +769,6 @@ static void solid_rects_1(const dib_info *dib, int num, const RECT *rc, DWORD an
int
x
,
y
,
i
;
BYTE
byte_and
=
(
and
&
1
)
?
0xff
:
0
;
BYTE
byte_xor
=
(
xor
&
1
)
?
0xff
:
0
;
static
const
BYTE
masks
[
8
]
=
{
0xff
,
0x7f
,
0x3f
,
0x1f
,
0x0f
,
0x07
,
0x03
,
0x01
};
for
(
i
=
0
;
i
<
num
;
i
++
,
rc
++
)
{
...
...
@@ -539,7 +781,7 @@ static void solid_rects_1(const dib_info *dib, int num, const RECT *rc, DWORD an
if
((
left
&
~
7
)
==
(
right
&
~
7
))
/* Special case for lines that start and end in the same byte */
{
BYTE
mask
=
masks
[
left
&
7
]
&
~
masks
[
right
&
7
];
BYTE
mask
=
edge_masks_1
[
left
&
7
]
&
~
edge_masks_1
[
right
&
7
];
for
(
y
=
rc
->
top
;
y
<
rc
->
bottom
;
y
++
,
start
+=
dib
->
stride
)
{
...
...
@@ -553,14 +795,14 @@ static void solid_rects_1(const dib_info *dib, int num, const RECT *rc, DWORD an
ptr
=
start
;
if
(
left
&
7
)
do_rop_8
(
ptr
++
,
byte_and
|
~
masks
[
left
&
7
],
byte_xor
&
masks
[
left
&
7
]);
do_rop_8
(
ptr
++
,
byte_and
|
~
edge_masks_1
[
left
&
7
],
byte_xor
&
edge_masks_1
[
left
&
7
]);
for
(
x
=
(
left
+
7
)
&
~
7
;
x
<
(
right
&
~
7
);
x
+=
8
)
do_rop_8
(
ptr
++
,
byte_and
,
byte_xor
);
if
(
right
&
7
)
/* this is inverted wrt start mask */
do_rop_8
(
ptr
,
byte_and
|
masks
[
right
&
7
],
byte_xor
&
~
masks
[
right
&
7
]);
do_rop_8
(
ptr
,
byte_and
|
edge_masks_1
[
right
&
7
],
byte_xor
&
~
edge_masks_1
[
right
&
7
]);
}
}
else
...
...
@@ -572,12 +814,12 @@ static void solid_rects_1(const dib_info *dib, int num, const RECT *rc, DWORD an
ptr
=
start
;
if
(
left
&
7
)
do_rop_8
(
ptr
++
,
~
masks
[
left
&
7
],
byte_xor
&
masks
[
left
&
7
]);
do_rop_8
(
ptr
++
,
~
edge_masks_1
[
left
&
7
],
byte_xor
&
edge_masks_1
[
left
&
7
]);
memset
(
ptr
,
byte_xor
,
byte_len
);
if
(
right
&
7
)
do_rop_8
(
ptr
+
byte_len
,
masks
[
right
&
7
],
byte_xor
&
~
masks
[
right
&
7
]);
do_rop_8
(
ptr
+
byte_len
,
edge_masks_1
[
right
&
7
],
byte_xor
&
~
edge_masks_1
[
right
&
7
]);
}
}
}
...
...
@@ -1585,9 +1827,9 @@ static void copy_rect_1(const dib_info *dst, const RECT *rc,
for
(
y
=
rc
->
top
;
y
<
rc
->
bottom
;
y
++
,
dst_start
+=
dst_stride
,
src_start
+=
src_stride
)
{
if
(
overlap
&
OVERLAP_RIGHT
)
do_rop_codes_line_rev_1
(
dst_start
,
left
&
7
,
src_start
,
org_x
&
7
,
&
codes
,
right
-
left
);
do_rop_codes_line_rev_1
(
dst_start
,
left
&
7
,
src_start
,
org_x
&
7
,
&
codes
,
right
-
left
,
rop2
);
else
do_rop_codes_line_1
(
dst_start
,
left
&
7
,
src_start
,
org_x
&
7
,
&
codes
,
right
-
left
);
do_rop_codes_line_1
(
dst_start
,
left
&
7
,
src_start
,
org_x
&
7
,
&
codes
,
right
-
left
,
rop2
);
}
}
...
...
dlls/gdi32/tests/dib.c
View file @
778faedb
...
...
@@ -116,7 +116,7 @@ static const char *sha1_graphics_a8r8g8b8[] =
"94645300d6eb51020a7ef8261dee2941cd51b5df"
,
"c56f5bdc9cac4f0bc81c33295d9aed8eaf4cb1f2"
,
"21cdfde38ac7edbb241ec83d82f31286e90c4629"
,
"
1fd2f4dcb62f8522171872e43fd4a35041d68100
"
,
"
0e6fc62522b0d6d2019f826ac0b586b91bd0d4fe
"
,
"68c18db6abfda626cab12d198298d4c39264bfbc"
,
"6b59ae6c20749020ad43175e05110dc33b6a59b5"
,
"39c31de73aafcfcadf0bf414da4495be9de54417"
,
...
...
@@ -189,7 +189,7 @@ static const char *sha1_graphics_a8r8g8b8_bitfields[] =
"94645300d6eb51020a7ef8261dee2941cd51b5df"
,
"c56f5bdc9cac4f0bc81c33295d9aed8eaf4cb1f2"
,
"21cdfde38ac7edbb241ec83d82f31286e90c4629"
,
"
1fd2f4dcb62f8522171872e43fd4a35041d68100
"
,
"
0e6fc62522b0d6d2019f826ac0b586b91bd0d4fe
"
,
"68c18db6abfda626cab12d198298d4c39264bfbc"
,
"6b59ae6c20749020ad43175e05110dc33b6a59b5"
,
"39c31de73aafcfcadf0bf414da4495be9de54417"
,
...
...
@@ -262,7 +262,7 @@ static const char *sha1_graphics_a8b8g8r8[] =
"19b32a0daa91201725b5e13820c343d0a84ff698"
,
"abca6a80a99b05722d2d87ce2a8b94ef1ae549e1"
,
"2ba70994d0b4ce87fdf6fbc33ada11252178061e"
,
"
7b4e1d47a03e2cec236d8fb6e2ae89d8ed078f79
"
,
"
9b81ccc2d956d1de019085f971ba19435fe5feae
"
,
"075c4cb50e2cf96ab5d132c9f7bb1c1deb4735bd"
,
"8566c1110ab5cb8f754787b47923c8bff38f790c"
,
"89e90d6159d59886bbbf0c40a7cd01293c3cfda3"
,
...
...
@@ -335,7 +335,7 @@ static const char *sha1_graphics_r10g10b10[] =
"5f629ab51719dd0ca5a67d880eb2631f5b598a7b"
,
"1ceb85697f649a62b1753438daa14944af7f450c"
,
"98ce4dbc04eb48fa0f96ef813db5b4dfa1b2dd39"
,
"
3addb9ccd8f56fc0825f61b1b5af67d3297f4ded
"
,
"
1cb0c7d9d89cdbce7b47d19ef0365bb6b2adc831
"
,
"f00bac7e18827cfb264fae2e8a0da17b9db18d52"
,
"63c1c6c63e82f3b8bd977a1381b248e05321394d"
,
"ada202d2f526f6995f83412479891c1764b66e5a"
,
...
...
@@ -408,7 +408,7 @@ static const char *sha1_graphics_r6g6b6[] =
"3d27002f4fe3c943468b7e3ef6985962c41ac8dc"
,
"3231c4d87faefb7ec5bd377613969c05b70343fc"
,
"00394e438e9edde978e88602c9ad2a572e965bf6"
,
"
e760be69cb37c7be35d5968d7a294e1fd49d4f66
"
,
"
c0c41390270ba082ee8211576fee39c676813c42
"
,
"996fb708ddc4b94eb8d1585bd83a5c8a1e2633ba"
,
"caa39eb482e8fc2e00f1c6737735c023ac9363ef"
,
"c1250ff2b67e6d2a8baccc5c93f8f5ad933c5c4f"
,
...
...
@@ -481,7 +481,7 @@ static const char *sha1_graphics_24[] =
"b0a959745b2db1d9f449e68e4479a4f36301879c"
,
"63f764b9bd2f4876ab1ee0f3c0eb55b5a7de5212"
,
"e171f6ec77bca91d6b8559911bce296c0bac469e"
,
"
9725669042ef68acb408404d196496d10340bb5
a"
,
"
33bb75c12f083d799d287fe9caddedbb3892e6f
a"
,
"26e7e1c300ba0c5aaaef03eeb71d529f6def9289"
,
"b1f602d2a74095cc0115ae2ae07b642498e6c0fc"
,
"03d5eb8e3a6662e6dc183f88ee2f285065fc9c51"
,
...
...
@@ -553,7 +553,7 @@ static const char *sha1_graphics_r5g5b5[] =
"a8d6a5285a927ba3a3be34b06a06c70a20d4c1b3"
,
"e428d213ad02651287894f093413949dcb369208"
,
"7df915bedcc5951a1b6f828490f7dbb93212e835"
,
"
645dc251d205139282b17eb7bece1055fff3bcd0
"
,
"
8720478d904a84c24071e97c731c1ba7882b131e
"
,
"76215275593631f5900aad3616d725733dc39493"
,
"81655a550703849a616d4a16504bb9c6f999285f"
,
"573d65665d20f00d36d9782ae2b89772140524ab"
,
...
...
@@ -630,7 +630,7 @@ static const char *sha1_graphics_r4g4b4[] =
"957a86fbe8a96dd068db65e4e624a52bcc84af46"
,
"13b0f240054dc57ba0e2dfde74048496304a2c7f"
,
"51ef267eb9c15487c9430f505e8a6c929eb2170c"
,
"
1b593d8e031d3b37fecf6f1df5a8f96c8e8bfef8
"
,
"
60c0752f592c6426a2f4a71173b44c5c086f4f2a
"
,
"9dd123938b0a02601d8d458ecbd6535ddefea724"
,
"815a1e4fc7f3a00c2990c150e87eba0b13f66811"
,
"75ae8c80af4356a1a5eebde6608fbc31e8a95372"
,
...
...
@@ -702,7 +702,7 @@ static const char *sha1_graphics_8_color[] =
"3b7488731da48635d86be551ab7c8c0f91c78219"
,
"4fd49cb49853ef950fd0b7e2e35718a71c8374c7"
,
"e15a355fc09bfd22267917898e2266168ff410e3"
,
"
b9688566bddf18586787c00e68724e51e97dfb7
2"
,
"
7a9c326a56a94621377a7258be70ba50042ca9a
2"
,
"5e38e03310f1c66f2052af2a745d8c60515707c5"
,
"f994fb5019bf4c1a96eccf89af599eae0aa6b412"
,
"3a71ad6fef147067641e49a5f69b2454e3a5010d"
,
...
...
@@ -784,7 +784,7 @@ static const char *sha1_graphics_8_grayscale[] =
"24caede65b40815a60b83c4edfa06bdc542388cd"
,
"650a51bedd1af92469d2950eb95220db35f95c6e"
,
"3f43aa11e6fccb747cc13224583fb2f951fee08c"
,
"
04cea9753b575ecce8e55357eddfcec10ddfbbea
"
,
"
b83f78ae85df87fc7af565db276c60c102274f20
"
,
"6b6f4b97f05e015eb37a5f6aff637235feacd030"
,
"1bd06e4e11929e5e91c3c9f20def639b20e731e8"
,
"d63a6086547e90d2ba84aaebfeae24f3ba0c04f1"
,
...
...
@@ -863,7 +863,7 @@ static const char *sha1_graphics_8[] =
"ea39ac62ca2f815a1d029340c6465994b6f03cb0"
,
"9a603513cd81acf70cf8b27b0d544e7f672e9d40"
,
"f4a334e69535de74ee5ed54be93a75120a66e54a"
,
"
559fd1d15447745527c61fe43a94c6708bff3e39
"
,
"
f751a55fb738b63b6fd7c229c33ef92605d0c9c1
"
,
"995f77f2f53398399f09d1365cb4dfd105764e5c"
,
"61907a6685bba93077da40cfb28cf2ab74552fd2"
,
"122015e5e17c1c317c6e51c0e207826b606a4077"
,
...
...
@@ -939,7 +939,7 @@ static const char *sha1_graphics_4[] =
"b672afbeeafb44194a821f0def81a8892872937e"
,
"db0124045882b598feea192186cf7eb7a0387866"
,
"602d91471378fe24a2d0248bd8a92b624f099fea"
,
"
e772873b87a0f55ea51a3da323f64bf8814c6703
"
,
"
c93a86adfe58dc2d461f2ed962883d6b90888848
"
,
"21aa1ff238a2d78efed1aa658ac8fe21b1e64daa"
,
"1a579cd280422131c35e907a023ee0e80749b5a4"
,
"bbf027f506cbb80d359bf4892fcb75f816f2e446"
,
...
...
@@ -1011,7 +1011,7 @@ static const char *sha1_graphics_4_grayscale[] =
"9c0da52c4ceaa8fdfcff7351328dd520bb57e985"
,
"f8224430462f6a93f85ef33b8aa7299525990708"
,
"1cf93cecc942b41ab8fae21ea18418a6d64873e5"
,
"
d58b8760ef01c12e691651c932d683c66fde3654
"
,
"
71a1705ee14068ee8c6c6680c1bd99703fb6abd7
"
,
"94438c82b8812fe81a69d5d1429c5967cdbfed7a"
,
"764ea26f10fe11f7bdb538a26fc33d44b3a95d6d"
,
"94ad53c578f6034dfc5c666e363203cdfb00f2cc"
,
...
...
@@ -1101,7 +1101,7 @@ static const char *sha1_graphics_1[] =
"be36cda370650e6d5fb0570aeb8ced491d0c2b1c"
,
"4c34cb8e47f9ff4b4348aa2d40cce7cb54d65cb0"
,
"18f4497e43903e8df5b27da4ceebf62b15550a87"
,
"3
fa3570a2ebd38042b90f24bd3496233bca5a23d
"
,
"3
99e988c922b7fad1c8f6907541c5dda65e60408
"
,
"2fcd25c2d19a01fa631fd19135d9f28b26b86259"
,
"655cfadeb157233c804d42b58195569c8846e3c1"
,
"65c8811c609203fd424f5ed5f92ca2268a1dca54"
,
...
...
@@ -1175,7 +1175,7 @@ static const RECT graphics_bounds[] =
{
10
,
10
,
110
,
110
},
{
10
,
10
,
120
,
110
},
{
10
,
10
,
110
,
120
},
{
100
,
100
,
356
,
356
},
{
0
,
4
,
356
,
356
},
{
100
,
100
,
356
,
356
},
{
50
,
50
,
306
,
306
},
{
100
,
100
,
356
,
356
},
...
...
@@ -2181,6 +2181,18 @@ static void draw_graphics(HDC hdc, const BITMAPINFO *bmi, BYTE *bits)
}
BitBlt
(
hdc
,
100
,
100
,
256
,
256
,
src_dc
,
0
,
0
,
SRCCOPY
);
/* Interesting cases for 1-bpp dst */
BitBlt
(
hdc
,
1
,
4
,
2
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
1
,
8
,
16
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
1
,
12
,
15
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
0
,
16
,
8
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
0
,
20
,
9
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
7
,
24
,
1
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
7
,
28
,
2
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
7
,
32
,
9
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
BitBlt
(
hdc
,
7
,
36
,
10
,
2
,
src_dc
,
0
,
0
,
SRCCOPY
);
if
(
bmi
->
bmiHeader
.
biBitCount
==
8
)
/* broken on NT4 */
compare_hash_broken_todo
(
hdc
,
bmi
,
bits
,
"BitBlt src 32-bpp SRCCOPY"
,
1
,
FALSE
);
else
...
...
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