Commit graph

7539 commits

Author SHA1 Message Date
George Matsumura
1bb048af24 cogl: Support raster sources
This adds supporte for raster sources using the same method that
is used to support radial gradient and mesh sources.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:58 -06:00
George Matsumura
8f0f371b87 cogl: Use less memory during recording surface replaying
Many of the tests in the test suite do many replays of different
small parts of a single surface. When combined with the cogl backend's
journaling mechanism, this consumes very large amounts of memory, as
the entire surface is allocated for each replay. This changes this
behaviour so that only the portion of the surface that will be used
is allocated.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
641ea48b66 cogl: Support more unbounded operators
Due to recent changes, all unbounded Porter-Duff compositing operators
can be properly supported in addition to IN.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
e2e494b9ff cogl: Fix rectangle filling conditions
Prior to this change, the context functions were using the accelerated
rectangle-filling path even if there was a preexisting rectangular path,
producing incorrect results.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
bb02ea2b4f cogl: Correct usage of clip boxes
This changes the interpretation of multiple boxes in the clip from
using the intersection of the multiple boxes to using the union of
the multiple boxes, which corrects many results in the test suite.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
7319feb642 cogl: Support CAIRO_EXTEND_NONE correctly
Prior to this change, CAIRO_EXTEND_NONE was handled the same way as
CAIRO_EXTEND_PAD, which produced incorrect results in many tests.
This fixes such behaviour by created a per-source and per-mask clip
that is applied so that areas outside the bounds of the source or
mask textures are not sampled during drawing.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
98eaa778b7 cogl: Support combinations of mask and source patterns correctly
Prior to this change, the set of template pipelines did not
properly apply to the full combination of mask and source patterns,
which could be either textures or solids.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
97a98d9145 cogl: Fix aliased vertex buffer offset
This fixes a bug in which the texture coordinate attributes were
being read from the wrong location in the mapped buffer, due to a
typo in the original code.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
3e810fe2d1 cogl: Fix handling of translated pattern matrices
Due to how cairo matrix math works, the x0 and y0 elements of the
texture matrix were not being normalized, leading to incorrect
results in several tests.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
1dce0112ef cogl: Trailing whitespace fix
Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
fc8e68b37a cogl: Fix crash when specifying only mask surface
Cogl enters into an infinite recursion if a texture is specified
for layer 1 of a pipeline but no texture is specified for layer 0.
This works around the bug by setting the mask texture on layer 0
if there is no source texture.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
75d843208c cogl: Move context, device, and surface members to most fitting places
The buffer stack was moved from the surface to the device, as
mapped buffers are shared across all surfaces using the device
and more than one surface may be doing so. Stemming from this, if
a surface tries to map a buffer without first unmapping one that
has been mapped by another surface, it will trigger an error.

The parent backend functions were moved from the device to the
context, as it is possible that the context creation function could
be passed a non-cogl device. Prior to this change, many of the
subsurface tests segfaulted.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
a3233bc5df cogl: Handle recording surface sources properly
Previously, if an unbounded recording surface was given as the
source, the program triggered an assertion failure in the recording
surface code, as acquire_source_image cannot be used on the surface
in this case. This adds a new path to deal with such an unbounded
source surface.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
97c766f8fe cogl: Convert int to fixed-point in rectangle painting fallback
Previously, the rectangle fallback path in surface_paint was
incorrectly passing and int to a function that required a
fixed-point number.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
ceffa65fb0 cogl: Account for new representations of framebuffer types
With the new cogl API, casting the framebuffer into offscreen
and onscreen types with the provided macros is a deprecated
behavior.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
1ada7c9aa6 cogl: Fix push_group and pop_group context functions
Before this change, there was the possibility of context functions
only meant for the cogl surface backend being used on a non-cogl
surface.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
d1dec1b384 cogl: Fix passing wrong type to _cairo_cogl_clip_push_box
Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
bda0f90d6e cogl: Correct behavior of boilerplate surface finishing functions
Without this, a buffer-swapping function only usable on onscreen
framebuffers would have been used on offscreen framebuffers.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
78b00a3213 cogl: Handle framebuffer formats better in case contents are unknown
Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
fd6de9820e cogl: Accommodate new context functions
In order to satisfy the runtime check that accounts for new
API functions that modify the transformation matrix, the new
functions for translation from backend to user coordinates must
be accounted for.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
7135ca2091 cogl: Futher changes to match new cogl-experimental public API
These are more changes required to match the new backwards-incompatible
API of cogl-experimental.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
George Matsumura
418ad9db62 cogl: Update to match changed cogl-experimental public API
This is the first part of updates to match the backwards-incompatible
changes that have been made in the cogl-experimental public API
since this backend last worked.

Signed-off-by: George Matsumura <gmmatsumura01@bvsd.org>
2020-08-25 02:30:57 -06:00
Mathieu Duponchelle
596a82f2d1 Add meson build definitions
Co-Authored by:
Nirbheek Chauhan <nirbheek@centricular.com>
lb90 <luca.bacci982@gmail.com>
Tim-Philipp Müller <tim@centricular.com>
2020-07-31 12:21:50 +01:00
Mathieu Duponchelle
a75f8df957 Fix build on Windows with recent versions of MSVC
- vsnprintf and snprintf are available since vs2015
- define ISREG if not provided
- guard unistd.h include with HAVE_UNISTD_H
- isnan() is available after vs2010
2020-07-31 01:21:01 +01:00
Uli Schlachter
91b5761acd Merge branch 'master' of gitlab.freedesktop.org:sgerwk/cairo 2020-07-20 18:42:01 +02:00
Uli Schlachter
b55e491d67 Merge branch 'invalid-free-crash' of gitlab.freedesktop.org:psychon/cairo 2020-07-20 18:33:46 +02:00
Mathieu Duponchelle
c4fd00c2c4 script-surface: Fix unitialized variable compiler warning
gcc doesn't warn about this because status is potentially
initialized in a loop.
2020-07-18 19:43:43 +00:00
Mathieu Duponchelle
bfa00bc3d7 cairo-qt-surface: fix arguments of _cairo_surface_init()
This is broken since b1192beac7 (2015!)
2020-07-18 19:43:43 +00:00
Uli Schlachter
aee96d175d Initialize mutexes in _cairo_ft_unscaled_font_map_lock()
This function is reachable via cairo_ft_font_face_create_for_ft_face()
-> _cairo_ft_unscaled_font_create_from_face() ->
_cairo_ft_unscaled_font_create_internal() ->
_cairo_ft_unscaled_font_map_lock(). Thus, it could happen that nothing
initialized mutexes before this code runs.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2020-02-27 17:01:07 +00:00
Uli Schlachter
0ae4e6a855 Merge branch 'ft-leak' of gitlab.freedesktop.org:carlosgc/cairo 2020-02-14 16:58:15 +01:00
Uli Schlachter
d66baf8ecd Merge branch 'fix-xml-unclosed-scaled-font-element' of gitlab.freedesktop.org:mpsuzuki/cairo 2020-02-12 17:44:18 +01:00
luzpaz
2982adec76 Fix documentation typo in src/cairo-surface.c 2019-12-20 11:10:19 +00:00
sgerwk
1a6a26be56 a surface may also be checked for status after finishing 2019-10-14 12:25:43 +02:00
Heiko Lewin
f93fc72c0c Delete fill_rectangles_shader on device finish 2019-10-12 07:45:29 +00:00
Jan Alexander Steffens (heftig)
d0dccb92c5
image compositor: Remove the right glyph from pixman's cache
We need to use the index including the phase. Otherwise we leave glyphs
in the cache that cause problems later as indices are reused.
2019-10-05 14:07:28 +02:00
Matthias Clasen
52a7c79fd4 Fix vertical subpixel positioning
We need to apply the Y subpixel phase negated,
since we flip the Y axis later.
2019-07-26 17:29:17 -04:00
Matthias Clasen
aa263f881f Fix a thinko in composite_color_glyphs
We can't just move around the contents of the
passed-in string, we need to make a copy. This
was showing up as memory corruption in pango.

See https://gitlab.gnome.org/GNOME/pango/issues/346
2019-07-18 14:38:47 -07:00
Matthias Clasen
e4a79db010 xlib compositor: Support subpixel positioning
As for the image compository, support a 4x4
subpixel grid.
2019-07-18 14:38:47 -07:00
Matthias Clasen
ea9329215d image compositor: Support subpixel positioning
Support subpixel positioning with a 4x4 subpixel grid.

When compositing glyphs in the image compositor,
we store the subpixel phases in the high bits of the
glyph index. The _cairo_scaled_glyph_index() macro
has been updated to discard these bits. By storing
the phases in the glyph index, the glyph cache just
keeps working. When loading a glyph, the Freetype
font backend shifts the outline according to the
phases.
2019-07-18 14:38:47 -07:00
Florian Müllner
bab53d91a8 ft-font: Fix color font support
FT_PIXEL_MODE_BGRA is an enum member, not a define, so it always appears
as 0 in the preprocessor conditions added in commit c0ed8ce1a1.

There is an existing define for color font support, use that instead.
2019-05-30 17:38:59 +00:00
Antony Lee
dfe3aa6d88 Fix off-by-one bug in tor22-scan-converter.
This makes the implementation in tor22-scan-converter match the one in
tor-scan-converter.
2019-05-10 15:02:54 +00:00
suzuki toshiya
10760d29d1 xml: fix unclosed <scaled-font> element
a closing tag </scaled-font> has been missing,
mistakenly an opening tag <scaled-font> has been emitted.

See discussion in:
https://lists.cairographics.org/archives/cairo/2018-December/028822.html
https://lists.cairographics.org/archives/cairo/2019-January/028828.html
2019-04-08 03:06:06 +00:00
Bryce Harrington
2d1a137f3d Revert "clip-boxes: Drop too-early return"
This reverts commit cb871c6c69.

The original code is badly, but removing the early return leads to
crashes.  This code will need a lot more attention to get right, for now
at least go back to the original behavior.

Fixes: https://gitlab.freedesktop.org/cairo/cairo/issues/358#note_125270
2019-03-03 00:01:34 -08:00
Uli Schlachter
61cd11a390 steal boxes: Fix an invalif free() exposed by cb871c6c
Commits cb871c6c made the function _cairo_clip_reduce_to_boxes()
actually do something instead of being a no-op. This exposed a latent
bug in cairo that was so far just not hit due to luck.

The function _cairo_clip_steal_boxes() removes the boxes from a clip and
gives them to a cairo_boxes_t. _cairo_clip_unsteal_boxes() undoes this
operation. For efficiency reasons, cairo_clip_t contains an embedded
cairo_box_t that is used when the clip has only one box to avoid a
memory allocation. Thus, _cairo_clip_unsteal_boxes() must be called on
the same clip that was given to _cairo_clip_steal_boxes(), or otherwise
a clip could end up to the embedded box of another instance of
cairo_clip_t. This is exactly what was happening here.

For example, cairo-xcb can replace extents->clip with another clip via
the call chain _cairo_xcb_render_compositor_paint() (which is where
boxes are stolen) -> _clip_and_composite_boxes() ->
trim_extents_to_traps() ->
_cairo_composite_rectangles_intersect_mask_extents(). This function
replaced the clip with the result of _cairo_clip_reduce_for_composite()
and frees the old clip. At this point, the boxes that were stolen
previously become invalid / become a dangling pointer. The crash later
on is just one of the side effects of this.

This commit fixes this problem by treating embedded boxes specially in
_cairo_clip_steal_boxes() and _cairo_clip_unsteal_boxes(): The
cairo_boxes_t instance also has embedded boxes. An embedded box on the
clip is copied to these other embedded boxes. When unstealing, the
embedded box of the clip is used again. Thus, it does not matter anymore
that another instance of _cairo_clip_t is used for unstealing.

Fixes: https://gitlab.freedesktop.org/cairo/cairo/issues/358
Signed-off-by: Uli Schlachter <psychon@znc.in>
2019-02-12 17:46:12 +01:00
Bryce Harrington
4c5c48ebaa surface: Fix spelling fix 2019-02-01 09:11:46 -08:00
Bryce Harrington
0f6ca43f5e cairo: Fix Since number for new color formats 2019-02-01 08:15:42 -08:00
Adrian Johnson
2a21ed0293 tags: Don't ignore tag on empty pages
Issue 357
2019-02-01 19:47:00 +10:30
luz.paz
6d93bddbd6 Misc. typos
Found via `codespell -i 3 -w -I ../cairo-word-whitelist.txt -L tim,ned,uint`
Follow up of 12cb59be7d

Reviewed-by: Bryce Harrington <bryce@bryceharrington.org>
2019-01-31 17:37:15 -08:00
Bryce Harrington
cb871c6c69 clip-boxes: Drop too-early return
The indentation of this line suggests it is a typo.  In any case it
causes the function to unconditionally return immediately, thereby
shortcircuiting it entirely, which does not appear to be the intended
behavior.

Fixes: https://gitlab.com/cairo/cairo/issues/2
2019-01-31 17:24:05 -08:00
Adrian Johnson
ef8c379e0f scaled-subsets: always include glyphs maps to character 0
Issue 354
2019-01-16 20:46:42 +10:30