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
Gabriel Ivăncescu
d4dc8fd2c2
gdi32: Move the loop through each clipped rectangle to the primitive blend funcs.
...
This is to prepare so we don't recalculate the lookup cache map for color
tables on every clipped rect (which is expensive).
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2021-04-16 22:39:46 +02:00
Alexandre Julliard
60ef5b0182
gdi32: Move OSMesa support to the Unix library.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-11-05 10:41:12 +01:00
Piotr Caban
2370e7b9a1
gdi32: Share font_gamma_ramp structure between all DCs.
...
Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2020-09-24 16:41:24 +02:00
Alexandre Julliard
4a902de213
gdi32: Make GDI driver functions cdecl.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2019-07-06 21:47:58 +02:00
Byeongsik Jeon
649dd1292d
gdi32: Support the gamma correction for the subpixel rendering.
...
Signed-off-by: Byeongsik Jeon <bsjeon@hanmail.net>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-10-22 22:36:43 +02:00
Alexandre Julliard
737a113c10
gdi32: Add a helper function to retrieve the DIB rectangle.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2018-04-04 15:43:52 +02:00
Alexandre Julliard
97a9db43d2
gdi32: Pass the brush origin explicitly to the brush backend functions.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-08-28 09:08:41 +02:00
Huw Davies
46e6ee48f3
gdi32: Add a helper to fill rectangles with a given pixel.
...
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2017-07-24 18:58:30 +02:00
Huw Davies
d8e353f99f
gdi32: Pass a DC pointer to get_pixel_color().
...
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-07-28 21:38:09 +09:00
Huw Davies
a8044bebe8
gdi32: Add a mask_rect primitive for use when the src is 1bpp.
...
This essentially combines the format conversion with a copy_rect.
It cannot be used when stretching, since stretching of 1bpp is
slightly special. Similarly, it cannot be used if the dst is also
1bpp (hence there is no mask_rect_1) or if the rop involves the brush.
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-07-14 17:52:35 +09:00
Alexandre Julliard
b5cf73edd9
gdi32: Implement FillPath, StrokeAndFillPath and StrokePath in the DIB driver.
...
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-06-17 00:09:20 +09:00
Andrey Gusev
9a80284e1a
gdi32: Fix a typo in a pointer name in primitive_funcs.
...
Signed-off-by: Andrey Gusev <andrey.goosev@gmail.com>
Signed-off-by: Huw Davies <huw@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-19 23:42:23 +09:00
Francois Gouget
166e7c7381
gdi32: Make make_rgb_colorref() static.
2012-12-07 12:35:29 +01:00
Alexandre Julliard
2d3385eec9
gdi32: Avoid computing grayscale glyph intensities when not needed.
2012-11-30 19:12:17 +01:00
Alexandre Julliard
6050a025bb
gdi32: Add a font glyph cache in the DIB engine.
2012-11-28 12:22:40 +01:00
Alexandre Julliard
9cdb0e1ca6
gdi32: Disable anti-aliasing when necessary in the various drivers.
2012-11-02 16:41:26 +01:00
Huw Davies
9247328371
gdi32: Implement sub-pixel glyph smoothing.
2012-10-30 18:09:00 +01:00
Alexandre Julliard
96e80c2623
gdi32: Move DescribePixelFormat and SetPixelFormat to the WGL driver.
2012-07-30 22:12:13 +02:00
Alexandre Julliard
6714f16c74
gdi32: Clip solid pen regions to the DIB rectangle to avoid overflows.
2012-07-30 17:13:36 +02:00
Alexandre Julliard
35eef16ba7
gdi32: Support OpenGL in bitmaps through libOSMesa.
2012-07-27 17:05:16 +02:00
Alexandre Julliard
7c9d35e575
gdi32: PatBlt needs to bypass the brush for ROPs that don't make use of it.
2012-07-19 15:42:31 +02:00
Alexandre Julliard
1416d0e6f1
gdi32: Remove the bitmap parameter from the Get/PutImage entry points.
2012-05-29 21:05:52 +02:00
Alexandre Julliard
139aeba3ef
gdi32: Implement dithering of solid brushes when drawing to DDBs.
2012-05-23 20:24:03 +02:00
Alexandre Julliard
664442ab84
gdi32: Don't store the default color table in dib_info objects.
2012-05-23 17:22:17 +02:00
Alexandre Julliard
9968f3083a
gdi32: Use the default color table when mapping colors in bitmaps that don't have one.
2012-05-23 17:22:07 +02:00
Alexandre Julliard
b8e4cd81ab
gdi32: Simplify creation of hatch masks and avoid endianness issues.
2012-05-23 17:22:03 +02:00
Alexandre Julliard
b708b40105
gdi32: Pass a rop_mask_bits object to the pattern_rects primitive.
2012-05-22 21:52:44 +02:00
Alexandre Julliard
524aef660e
gdi32: Use a rop_mask_bits object to store the brush bits.
2012-05-22 21:47:30 +02:00
Alexandre Julliard
3c2502a8c7
gdi32: Add support for dithering pattern brushes when painting to monochrome bitmaps.
2012-05-22 17:43:52 +02:00
Alexandre Julliard
6a19d9f252
gdi32: Support drawing to a visible rectangle smaller than the whole bitmap in the DIB engine.
2012-05-01 14:28:39 +02:00
Alexandre Julliard
3ea711dd7c
gdi32: Store the bounds rectangle as a pointer in the DIB driver.
2012-04-27 12:49:20 +02:00
Alexandre Julliard
34457aa4c3
gdi32: Add bounds tracking to all the DIB engine entry points.
2012-04-16 17:49:22 +02:00
Alexandre Julliard
568afc210e
gdi32: Move the pen/brush_region helpers to graphics.c and avoid redundant clipping.
2012-04-13 13:36:23 +02:00
Huw Davies
ff4045b110
gdi32: Use separate x and y parameters in the get_pixel primitive.
2012-01-18 16:27:39 +01:00
Alexandre Julliard
bf718448f3
gdi32: Add a stub for the ExtFloodFill entry point.
2012-01-06 19:24:11 +01:00
Alexandre Julliard
ff31a448b3
gdi32: Implement Arc, ArcTo, Chord, and Pie, using line segments for now.
2012-01-06 19:24:02 +01:00
Alexandre Julliard
5ff285629e
gdi32: Implement Ellipse and RoundRect, using line segments for now.
2012-01-06 19:22:12 +01:00
Alexandre Julliard
d858041a19
gdi32: Get rid of the pen deferring support, all pen styles are implemented now.
2012-01-04 16:53:17 +01:00
Alexandre Julliard
488bf107a9
gdi32: Implement brushed pens.
2011-12-30 11:04:35 +01:00
Alexandre Julliard
4e03247427
gdi32: Define a structure to make the brush state independent from the physdev.
2011-12-30 11:04:33 +01:00
Alexandre Julliard
cc9836bda0
gdi32: Pass a brush_pattern structure to the SelectPen entry point for brushed pens.
2011-12-30 11:04:29 +01:00
Alexandre Julliard
f85bb35280
gdi32: Pass a brush_pattern structure to the SelectBrush entry point.
2011-12-30 11:04:26 +01:00
Alexandre Julliard
c1c8c92875
gdi32: Add helpers to paint a region with the brush or pen.
2011-12-29 10:10:45 +01:00
Alexandre Julliard
579afe5cc6
gdi32: Implement PolyPolygon in the DIB driver.
2011-12-29 09:57:58 +01:00
Alexandre Julliard
64ed56366c
gdi32: Use a region to render geometric and wide pens in PolyPolyline.
2011-12-29 00:02:24 +01:00
Alexandre Julliard
0429d9181f
gdi32: Add support for updating a region from the pen backend functions instead of painting directly.
2011-12-28 23:02:10 +01:00
Alexandre Julliard
881f635ce9
gdi32: Extended pens are always transparent.
2011-12-28 16:33:31 +01:00
Alexandre Julliard
9b8d920cb7
gdi32: Pass the clip region to the brush_rect helper and add a similar helper for pens.
2011-12-28 11:28:21 +01:00
Alexandre Julliard
18c20964e1
gdi32: Add support for PS_INSIDEFRAME pens when drawing rectangles.
2011-12-28 11:17:41 +01:00