Commit graph

13085 commits

Author SHA1 Message Date
Emmanuele Bassi
d3a35678a2 Merge branch 'recording-surface-finish-internal-helper' into 'master'
recording surface: Implement finish via reset

Closes #928

See merge request cairo/cairo!649
2026-03-03 13:59:07 +00:00
Luca Bacci
1adaf1e7c5 recording surface: Implement finish via reset
Rather than the other way round.

Fixes #928
2026-03-02 18:51:00 +01:00
Emmanuele Bassi
4fb80a9aef Merge branch 'test-fixes' into 'master'
Fix test runner on Windows and run tests in CI

Closes #887

See merge request cairo/cairo!609
2026-03-02 10:26:54 +00:00
Emmanuele Bassi
7cd2141f09 Merge branch 'dwrite' into 'master'
DWrite: Add support for COLRv1 fonts

Closes #903

See merge request cairo/cairo!625
2026-03-02 10:08:30 +00:00
Behdad Esfahbod
2a45892663 Merge branch 'rectangle-box-negative-extents' into 'master'
[matrix] Handle bounding-box extents overflow during transformation

See merge request cairo/cairo!645
2026-02-08 19:44:55 +00:00
Behdad Esfahbod
f0674b4c98 [rectanble Handle overflow in _cairo_box_from_doubles 2026-02-07 13:01:49 -07:00
Uli Schlachter
6b9e6dd0b3 Merge branch 'work/fix-leak-in-_cairo_pdf_surface_finish' into 'master'
_cairo_pdf_surface_finish: Fix leak in error conditions

See merge request cairo/cairo!644
2026-01-27 16:00:15 +00:00
Albert Astals Cid
b94bf30f03 _cairo_pdf_surface_finish: Fix leak in error conditions
Make sure surface->object_stream.stream is cleaned up even if things
failed

In poppler oss-fuzz tests we are getting this leak reported

Direct leak of 64 byte(s) in 1 object(s) allocated from:
	    #0 0x5747417eabd9 in __interceptor_calloc /src/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:74:3
	    #1 0x574742706f5b in _cairo_memory_stream_create cairo/src/cairo-output-stream.c:741:14
	    #2 0x5747426757b8 in _cairo_pdf_surface_open_object_stream cairo/src/cairo-pdf-surface.c:2307:34
	    #3 0x57474266b880 in _cairo_pdf_surface_finish cairo/src/cairo-pdf-surface.c:2700:14
	    #4 0x57474261afc6 in _cairo_surface_finish cairo/src/cairo-surface.c:1043:11
	    #5 0x57474261afc6 in cairo_surface_finish cairo/src/cairo-surface.c:1092:5
	    #6 0x57474270808a in _cairo_paginated_surface_finish cairo/src/cairo-paginated-surface.c:215:2
	    #7 0x5747426175c2 in _cairo_surface_finish cairo/src/cairo-surface.c:1043:11
	    #8 0x5747426175c2 in cairo_surface_destroy cairo/src/cairo-surface.c:978:2

This fixes it.

_cairo_pdf_surface_finish was succeeding past
_cairo_pdf_surface_open_object_stream that allocates surface->object_stream.stream,
failing when calling _cairo_pdf_surface_emit_font_subsets
and that memory was never freed
2026-01-24 11:37:50 +01:00
Luca Bacci
2050326dcc CI/MSVC: Exclude <builddir>/test/srcdir symlink from the artifacts
Otherwise latest GitLab fails with:

 > ERROR: Uploading artifacts as "archive" to coordinator... error
 >   error=couldn't execute POST against https://gitlab.freedesktop.org/api/v4/jobs/[...]/artifacts?artifact_format=zip[...]:
 >   Post "https://gitlab.freedesktop.org/api/v4/jobs/[...]/artifacts?artifact_format=zip[...]":
 >   read build/test/srcdir: Incorrect function. id=[...] token=[...]
2026-01-08 15:32:30 +01:00
Luca Bacci
1fdf7051d0 CI/MSVC: Build less
Avoid building subproject tests
2026-01-08 15:32:30 +01:00
Luca Bacci
30fdc7f338 CI: Do not store .git directory in artifacts
Otherwise gitlab-runner prints a few warnings:

 > Uploading artifacts...
 > WARNING: Part of .git directory is on the list of files to archive
 > WARNING: This may introduce unexpected problems
2026-01-08 15:32:30 +01:00
Luca Bacci
ce3a3e2d27 CI: Run tests on Windows 2026-01-08 15:32:30 +01:00
Luca Bacci
08dcac510b Tests/create-regions: skip if needed features are missing 2026-01-08 15:32:30 +01:00
Luca Bacci
15cb2d7acf Tests/font-variations: Cleanup resources in all cases
Otherwise the test runner detects leaks
2026-01-08 15:32:30 +01:00
Luca Bacci
1293ec674d Tests/pdf-operator-text: Check if pdf target is enabled
The same is done in pdf-mime-data.c
2026-01-08 15:32:30 +01:00
Luca Bacci
83e5d95ec2 Boilerplate/Win32: Switch to a DIB section
Thw Win32 boilerplate worked by creating an offscreen window
and creating a cairo surface that targets the client HDC.
However GDI clips the client HDC to the visible region of the
window, and that region is empty. In the end, every GDI drawing
operation turned into a no-op.

Rather than targeting HWNDs, it's much better to create a bitmap
(DIB Section) and draw via a memory HDC.

https://learn.microsoft.com/en-us/windows/win32/gdi/window-regions
https://devblogs.microsoft.com/oldnewthing/20030829-00/?p=42743
https://devblogs.microsoft.com/oldnewthing/20030902-00/?p=42693
2026-01-08 15:32:24 +01:00
Luca Bacci
2c354599a5 Boilerplate: Use backward slashes for system / popen commands on Windows
Both system() and popen() invoke the shell. Which shell is
invoked depends on the COMSPEC environment variable, but
usually it's CMD.exe.

CMD.exe doesn't quite like paths with forward slashes in its
command-line. Most of the times, the forward slash is mistaken
for a command line switch (the start of an option). For example:

  cmd /c "dir C:\Windows" works
  cmd /c "dir C:/Windows" doesn't work
2026-01-08 15:27:09 +01:00
Luca Bacci
626b3ab2f2 Boilerplate: Open pipe in binary mode on Windows
Open the pipe in binary mode on Windows to get the expected
byte counts. Note that the 'b' mode for popen is not portable
and so is used only on Windows:

> The behavior of popen() is specified for values of mode of "r",
> "w", "re", and "we". Other modes such as "rb" and "wb" might be
> supported by specific implementations, but these would not be
> portable features.

https://pubs.opengroup.org/onlinepubs/9799919799/functions/popen.html
2026-01-08 15:24:05 +01:00
Luca Bacci
652456af2d Meson: Use mklink to create the <builddir>/test/srcdir link on Windows
Create the directory symlink '<builddir>/test/srcdir' -> '<sourcedir>'
as done on UNIX with coreutils.
2026-01-08 15:23:33 +01:00
Uli Schlachter
200a02286b Merge branch 'patch-1' into 'master'
Add missing mutex cleanup in _cairo_recording_surface_finish

Closes #922

See merge request cairo/cairo!643
2025-12-20 06:29:18 +00:00
Alvin Wong
5833de29f3 Add missing mutex cleanup in _cairo_recording_surface_finish 2025-12-17 16:35:49 +00:00
Uli Schlachter
04656d7450 Merge branch 'tests-misc-fixes' into 'master'
Tests: Misc enhancements

See merge request cairo/cairo!634
2025-07-17 18:38:49 +00:00
Tim-Philipp Müller
6955595c60 Merge branch 'ci-macos-arm64' into 'master'
ci: add macOS arm64

See merge request cairo/cairo!498
2025-07-16 17:31:44 +00:00
Luca Bacci
a9e3eaccb8 CI: Add coverage-column-triangles to Quartz ignores
Fails with the following log:

Testing coverage-column-triangles with quartz target (dev offset 0 scale: 1)
963 pixels differ (with maximum difference of 9) from reference image
963 pixels differ (with maximum difference of 9) from reference image
OUTPUT: output/coverage-column-triangles.quartz.argb32.out.png
REFERENCE: ../../test/reference/coverage-column-triangles.ref.png
DIFFERENCE: output/coverage-column-triangles.quartz.argb32.diff.png
TEST: coverage-column-triangles TARGET: quartz FORMAT: argb32 OFFSET: 0 SCALE: 1 SIMILAR: 0 RESULT: FAIL
(...)
2025-07-16 11:52:45 +02:00
Luca Bacci
2e0713971f Update Quartz reference images 2025-07-16 11:52:45 +02:00
Tim-Philipp Müller
d371015d45 ci: add macOS arm64 2025-07-16 11:52:41 +02:00
Luca Bacci
355e421640 CI: Avoid running duplicated tests
...also simplifies .gitlab-ci.yml a bit
2025-07-15 14:28:27 +02:00
Luca Bacci
2b7ab8b895 Remove leftover scripts from the autotools build 2025-07-15 14:28:18 +02:00
Luca Bacci
471f8410a5 make-constructors.py: Sort tests list
This way cairo-test-suite works on sorted data
2025-07-15 14:27:15 +02:00
Emmanuele Bassi
8e9b856488 Merge branch 'win2k' into 'master'
win32: Fix MSVC build with dwrite disabled

See merge request cairo/cairo!618
2025-07-14 22:39:41 +00:00
Benjamin Gilbert
7a780896a1 win32: Fix MSVC build with dwrite disabled
We now require at least Windows Vista.  When dwrite is disabled, declare
WINVER accordingly so we get the defines we no longer carry ourselves.
The default dwrite-enabled path already has a new-enough WINVER.

Fixes: d0ee67a142 ("Win32: Remove unused code and defines for old toolchains")
2025-07-14 12:17:27 -07:00
Emmanuele Bassi
a4d5a24d60 Merge branch 'fix-msc-ver-compare' into 'master'
Check if _MSC_VER macro is defined

See merge request cairo/cairo!611
2025-07-14 14:42:26 +00:00
Emmanuele Bassi
6ac5348308 The GDI coordinate system is inverted compared to cairo's here, so the
delta-y value needs to be negated, otherwise glyph runs with non-zero 
y-advances will shift in the wrong direction.

See mozilla bug https://bugzilla.mozilla.org/show_bug.cgi?id=1962816 and
earlier https://bugzilla.mozilla.org/show_bug.cgi?id=454098 where this was
first discovered & fixed, but unfortunately was not upstreamed at that 
time.
2025-07-14 14:41:40 +00:00
Jonathan Kew
503505666f Fix sign of delta-y for ExtTextOutW 2025-07-14 14:41:40 +00:00
Luca Bacci
1aaa23aefb DWrite: Add support for COLRv1 fonts
Fixes https://gitlab.freedesktop.org/cairo/cairo/-/issues/903
2025-07-14 16:34:07 +02:00
Luca Bacci
457ab827c9 Add definition for IDWriteFactory8 2025-07-14 16:34:06 +02:00
Luca Bacci
2a306f8e5f Always include dwrite-extra.hpp 2025-07-14 16:34:05 +02:00
Luca Bacci
53c3702686 dwrite-extra.hpp: Fix check for mingw-w64 workaround 2025-07-14 16:34:04 +02:00
Luca Bacci
02763155e8 dwrite-extra.hpp: Rework a bit 2025-07-14 16:34:03 +02:00
Luca Bacci
27411659d8 Rename dwrite / d2d1 polyfill headers to .hpp extension
They are only usable from C++ now
2025-07-14 16:34:02 +02:00
Luca Bacci
6ec91df76e Check which ID2D1DeviceContext subclasses are defined in d2d1_3.h
...and make d2d1-extra.h provide the missing definitions
2025-07-14 16:34:01 +02:00
Luca Bacci
6c75de11ab Meson: Simplify check for D2D, DWrite, WIC a bit 2025-07-14 16:34:00 +02:00
Luca Bacci
bd930bc98d Meson: Do not check for d2d1.h, dwrite.h, wincodec.h
If the import libraries are found, we can assume that headers are present
as well. All three headers were introduced many years ago in the Windows
SDK and mingw-w64 headers.
2025-07-14 16:34:00 +02:00
Luca Bacci
306396ff53 Add definitions for ID2D1DeviceContext7 in d2d1-extra.h
We're going to make use of ID2D1DeviceContext7::DrawPaintGlyphRun()
for COLRv1 fonts.
2025-07-14 16:33:59 +02:00
Luca Bacci
b1bc5a73f6 DWrite: don't set component-alpha for A8 mask
It was just a copy-paste leftover. Component-alpha makes sense
only for color images.
2025-07-14 16:33:59 +02:00
Luca Bacci
7f82b13fbf Fix typo 2025-07-14 16:33:58 +02:00
Luca Bacci
c7a3e6c519 Check if _MSC_VER macro is defined
Original patch from MSYS2:
https://github.com/msys2/MINGW-packages/blob/36dd8e0bdf/mingw-w64-cairo/0030-ucrt-clang-fixes.patch
2025-07-14 15:53:52 +02:00
Luca Bacci
b9bab3defb Readme: Remove leftover mention of Windows 2000
We support Windows Vista or newer
2025-07-14 15:52:40 +02:00
Uli Schlachter
2f21b3874c Merge branch 'fix-clipping-crash' into 'master'
Fix a crash in the clipping code

See merge request cairo/cairo!622
2025-07-14 13:01:46 +00:00
Uli Schlachter
55cb75c4df Merge branch 'winsdk_26100_fix' into 'master'
Add check for clang to cairo attribute handling code

See merge request cairo/cairo!612
2025-07-05 09:02:29 +00:00