Commit Graph

105 Commits

Author SHA1 Message Date
Zhiyi Zhang 04b4d0f380 gdi32: Partially implement HALFTONE stretch mode.
COLORONCOLOR(STRETCH_DELETESCANS) was used in place of HALFTONE. COLORONCOLOR mode may delete rows
of pixels without trying to preserve information so it will cause Wine to render poorly when the
destination rectangle is small.

According to tests, HALFTONE mode uses box filter when doing integer downscaling and nearest
neighbor interpolation when doing upscaling in both horizontally and vertically. In other cases,
HALFTONE mode uses a lanczos3 like algorithm to interpolate pixels. There are also other heuristics
involved. For example, shrinking a 2x2 image to 1x1 may not use box filter depending on image data.
Since this algorithm is undocumented, it's difficult to reverse engineer the original algorithm and
produce identical results. Instead, this patch uses a naive implementation of bilinear interpolation
to implement HALFTONE mode and it produces good quality images.

For 8-bit and lower color depth images, nulldrv_StretchBlt should resize the images first and then
converts color depth.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46375
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-06-15 20:43:55 +02:00
Zebediah Figura beb70a79e1 user32: Implement stretching of cursor and icon objects in CopyImage().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-05-24 11:42:37 +02:00
Zebediah Figura db2b266c57 user32: Handle monochrome icons in CreateIcon() and CreateCursor() instead of CreateIconIndirect().
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-05-24 11:42:37 +02:00
Mathew Hodson a8dee2a23f user32/tests: Don't report cursor handle since it always changes.
Signed-off-by: Mathew Hodson <mathew.hodson@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-04-06 21:21:42 +02:00
Francois Gouget a909baeb4e tests: Report all errors when failing to wait for a child process.
Report the line number where the test failed to wait for the child so
one can identify which child process did not behave as expected.
Also wait_child_process() is meant for the general case so report
all non-crash error cases as test failures so they are accounted for.
Omit the "winetest_" prefix to match the other Wine test functions and
so the underlying winetest_wait_child_process() function can be wrapped
with the usual line-capturing macros.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48651
Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-03-17 10:51:44 +01:00
Rémi Bernon b636f9cd5e user32/tests: Fix some format-overflow warnings.
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-02-12 16:54:03 +01:00
Paul Gofman ade89071f0 user32/tests: Handle results on Win10 in test_Image_StretchMode().
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-01-07 22:26:08 +01:00
Paul Gofman bfe1ea26dd user32: Select more appropriate stretch mode for colored images interpolation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46375
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-02-05 17:29:57 +01:00
Paul Gofman fd68a9833e user32/tests: Add tests for stretch mode in LoadImage().
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-01-09 09:58:16 -06:00
Paul Gofman 9cd885f441 user32/tests: Factor out compare_bitmap_bits() function.
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-01-09 09:58:16 -06:00
Paul Gofman 75165d0da5 user32/tests: Add test for 16 bit image stretch mode in CopyImage().
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-01-09 09:58:16 -06:00
Paul Gofman 5c8444093a user32/tests: Add test for 8 bit image stretch mode in CopyImage().
Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-01-09 09:58:16 -06:00
Paul Gofman 1bf418f0ff user32/tests: Add some tests for implicit stretch mode in CopyImage().
The values of the colored test result suggest that halftone filter is
used for shrinking: each pixel of output 2x2 image has the color value
averaged over 4 pixels from input 4x4 image.

Signed-off-by: Paul Gofman <gofmanp@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-12-31 10:30:30 +01:00
Francois Gouget 1d52a6e1b6 user32/tests: Make test_LoadImage_working_directory_run() static.
Signed-off-by: Francois Gouget <fgouget@free.fr>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-12-10 10:05:51 +01:00
Fabian Maurer 400dd1596a user32: LoadImage should not only search in the working directory.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46186
Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-11-30 20:39:03 +01:00
Michael Stefaniuc 1694ab087a user32/tests: Use the available ARRAY_SIZE() macro.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-06-28 18:27:20 +02:00
Michael Stefaniuc e186f3ec26 user32/tests: Don't undefine ARRAY_SIZE().
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-06-27 22:03:36 +02:00
Michael Stefaniuc 7b5668a6e7 include: Make ARRAY_SIZE() available in wine/test.h.
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-05-25 12:09:17 +02:00
Bernhard Übelacker 9256017adf user32: Validate DIB offset in CURSORICON_GetFileEntry.
Signed-off-by: Bernhard Übelacker <bernhardu@mailbox.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-01-30 10:41:56 +01:00
Nikolay Sivov 0a953f117a user32/tests: Release window DCs consistently.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-12-14 09:58:30 +01:00
Huw Davies b981d18a55 user32/tests: BITMAPCOREINFO icons are no longer supported on Win 8.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-09-19 23:14:14 +09:00
Huw Davies 512c8f9444 user32/tests: Add space for the mask data to prevent failures on Win 8 and 10.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-09-16 23:25:02 +09:00
Nikolay Sivov 59ee884bdf user32/tests: Fix a leak when creating test icons (Valgrind).
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-06-01 00:21:49 +09:00
Jacek Caban 912d7474c0 user32/tests: Added PrivateExtractIcons test.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-02 18:33:49 +09:00
Jacek Caban 5aaa8e25ad user32/tests: Moved creating .ico file into a helper function.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-02 18:33:14 +09:00
Mark Jansen e1f1a60f87 user32: Correctly determine bit count for BITMAPCOREINFO in is_dib_monochrome.
Signed-off-by: Mark Jansen <learn0more@gmail.com>
Signed-off-by: Thomas Faber <thomas.faber@reactos.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-03-28 18:41:00 +09:00
Thomas Faber 6ad5cfbebd user32: Handle BITMAPCOREINFO when loading icons.
Signed-off-by: Thomas Faber <thomas.faber@reactos.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-03-28 18:40:59 +09:00
Thomas Faber 6e4b649862 user32/tests: Test loading monochrome icons.
Signed-off-by: Thomas Faber <thomas.faber@reactos.org>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-03-28 18:40:59 +09:00
Piotr Caban 888ffb1134 user32: Test GetIconInfo on other process cursor. 2015-07-30 23:48:39 +02:00
Bruno Jesus d90d2ab558 user32/tests: Fix a memory leak (valgrind). 2014-06-11 16:09:42 +02:00
Frédéric Delanoy b242d9cee3 user32/tests: Constify some arrays. 2014-05-12 10:48:33 +02:00
Frédéric Delanoy bb2be17327 user32/tests: Use BOOL type where appropriate. 2013-11-05 11:16:00 +01:00
Dmitry Timoshkov 7603700169 user32/tests: Fix cursor and icon tests compilation with __WINESRC__ defined. 2013-10-23 17:01:46 +02:00
Alexandre Julliard 8ab65c222e user32: Draw the mask with SRCCOPY in DrawIcon when the image isn't being drawn. 2012-02-08 11:00:51 -06:00
Alexandre Julliard 3bbb208f8e user32/tests: Add tests for small sizes of cursor bitmaps. 2011-11-16 18:08:12 +01:00
Francois Gouget 3de330db54 tests: Remove unneeded assert.h includes. 2011-09-27 10:59:56 +02:00
Alexandre Julliard 8d50342858 user32/tests: Allow an approximate color match for the cursor contents. 2011-09-08 23:52:02 +02:00
Thomas Faber 37f12af5c8 user32/tests: Fix build with MSVC. 2011-08-24 12:14:47 +02:00
Frédéric Delanoy 760faf01a9 tests: Assorted spelling fixes. 2011-08-04 18:27:37 +02:00
Alexandre Julliard e705f29fd5 user32/tests: Fix the GetCursorFrameInfo parameter types. 2011-03-17 13:06:50 +01:00
Erich Hoover 274e5db7e7 user32: Add support for sequence-based animated cursors. 2011-03-17 13:06:49 +01:00
Erich Hoover 28e9b99728 user32: Add support for retrieving individual animated frames. 2011-03-17 13:06:49 +01:00
Francois Gouget 4f7fc170a7 user32/tests: Use NULL instead of casting 0. 2011-03-16 14:14:23 +01:00
Austin Lund 5d0783bc0d user32/tests: Output error information in cursoricon tests. 2011-03-16 14:14:23 +01:00
Erich Hoover 3e35caa7b2 user32: Add preliminary support for reading and storing multi-rate animated cursor data. 2011-03-10 15:24:34 +01:00
Erich Hoover 86a9f20aa2 user32: Fix GetCursorFrameInfo when passed the proper number of steps. 2011-03-10 15:23:34 +01:00
Erich Hoover e776f3ccf7 user32: Implement semi-stub of GetCursorFrameInfo. 2011-03-07 15:10:22 +01:00
Erich Hoover 7b0ab606e2 user32: Permit loading animated cursors with CreateIconFromResource(Ex). 2011-03-07 15:10:01 +01:00
Wolfram Sang ce5763b88c user32: Make DIB_GetBitmapInfo checks stricter. 2011-02-28 13:15:01 +01:00
Wolfram Sang 25923d2f16 user32/tests: Modify proper fields instead of magic offsets. 2011-02-28 13:14:55 +01:00