Commit graph

11459 commits

Author SHA1 Message Date
Adrian Johnson
132794f683 svg: recording_surface is needed even if not emitted 2017-10-16 20:18:49 +10:30
Adrian Johnson
27990e3910 fix unused function warnings 2017-10-16 20:18:49 +10:30
Adrian Johnson
fc929d7005 ft: prevent unused var warning when freetype < 2.8 2017-10-16 19:42:16 +10:30
Adrian Johnson
1d58e0f818 svg2png: remove unused headers 2017-10-15 19:42:08 +10:30
Mikhail Fludkov
90104809b0 Surround initialisations with atomic critical section
Fixes the race condition when one thread uses cairo_mask_compositor_t
pointer returned by _cairo_image_mask_compositor_get, while another one
started but has not finished it's initialisation yet

Usage:
static cairo_atomic_once_t once = CAIRO_ATOMIC_ONCE_INIT;
if (_cairo_atomic_init_once_enter(&once)) {
    /* Initialization code */
    _cairo_atomic_init_once_leave(&once);
}

https://bugs.freedesktop.org/show_bug.cgi?id=103037
2017-10-15 18:51:04 +10:30
Adrian Johnson
79e0e25e44 svg: source surface hash table does not need to hold the source 2017-10-15 07:57:54 +10:30
Adrian Johnson
965ba86bbf svg: use hash table instead of user_data to track emitted surfaces
Setting a key on the source surface->user_data prevents the surface
from being reused to create another svg file.

The hash table also supports CAIRO_MIME_TYPE_UNIQUE_ID.

https://lists.cairographics.org/archives/cairo/2017-October/028406.html
2017-10-14 20:53:01 +10:30
Adrian Johnson
bb10bd1013 truetype: limit font name to 127 chars
Some broken fonts have long strings of garbage in the font name

https://bugs.freedesktop.org/show_bug.cgi?id=103249
2017-10-13 19:50:24 +10:30
Adrian Johnson
202a9ed64e output-stream: allow %s strings larger than 512 chars
https://bugs.freedesktop.org/show_bug.cgi?id=103249
2017-10-13 19:33:30 +10:30
Bryce Harrington
d5b634da61 Factor out the ISFINITE() macro 2017-10-11 19:13:46 -07:00
Adrian Johnson
5a9dba9929 svg: fix painting an unbounded recording surface
https://lists.cairographics.org/archives/cairo/2017-October/028395.html
2017-10-05 20:50:19 +10:30
Adrian Johnson
bec8c7508e Prevent curved strokes in small ctms from being culled from vector surfaces
The combination of both curved strokes and ignoring the ctm in the thin
line check caused some fill-strokes in this test case to be culled.

Modify the thin line check to take the ctm into account and increase
the minimum width to 1 point to prevent curved lines such as tiny dots
from being culled.

https://bugs.freedesktop.org/show_bug.cgi?id=103071
2017-10-03 22:27:25 +10:30
Adrian Johnson
dccbed7d78 truetype: clarify glyph count variables
- move num_glyphs_in_face to base struct as it is the number in the font
- move num_glyphs to the subset variables as it is the num glyphs in the subset
- move widths to subset variables as it uses the subset id as the array index
2017-09-22 20:25:59 +09:30
Adrian Johnson
52cbf42b74 truetype: reserve space in subset arrays for .notdef
Subset array sizes are allocated based on the number of glyphs in the
font. In this bug the fonts did not contain the mandatory .notdef
glyph, hence the subset arrays were not large enough.

https://bugs.freedesktop.org/show_bug.cgi?id=102922
2017-09-22 20:10:10 +09:30
Adrian Johnson
e773dd744e factor out ascii to double code in cff-subset into _cairo_strtod 2017-09-22 18:17:25 +09:30
Aleksander Morgado
871c518121 build: fix minor typo in autogen.sh
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=102452
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2017-09-20 11:44:29 -07:00
Adrian Johnson
1220e3c6b8 replace _BSD_SOURCE with _DEFAULT_SOURCE
fixes the warning:

warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
2017-09-16 10:04:57 +09:30
Adrian Johnson
117a3c27d4 build: use _WIN32 instead of windows.h to check for windows build
ifdef _WIN32 is the recommended way to check for a windows build [1]
and avoids identifying cygwin as windows.

based on the patch at [2]

[1] https://lists.gnu.org/archive/html/autoconf/2012-02/msg00008.html
[2] https://lists.gnu.org/archive/html/autoconf/2012-02/msg00009.html
2017-09-16 10:04:57 +09:30
Bryce Harrington
8ff3019f51 gl: Add support for OpenGL ES 3.0
This improves the OpenGL ES support to extend it to version 3.0.
A number of new features are available in glesv3 including creation of
multi-sampled renderbuffers.  These renderbuffers can be blitted to
single sample textures (but not the other way around).  Other features
such as PBO for image uploading, are left as followon work.

For this preliminary implementation, glesv3 backends always create
renderbuffers, which can be set as single sample or multisample.  The
renderbuffer's content is blitted to the texture only when used as a
source or a mask.

Images uploaded to a texture stay there until the surface is used as a
rendering target, at which point its painted to the renderbuffer.

This patch is heavily based off of Henry Song's initial GLESv3 patch
6f7f3795 from his cairogles fork of Cairo, and incorporates subsequent
fixes and pertinent refactorings from his trunk and review feedback from
Uli.

This implements the *functional* support for glesv3, excluding the
various optimization work to utilize its features.  Rendering and
performance should not be expected to improve notably from pure glesv2.
As the GL backend for Cairo remains "experimental", these changes should
likewise be considered as such.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2017-09-13 15:18:04 -07:00
Bryce Harrington
d1f941d7ee gl: Make _cairo_gl_ensure_framebuffer a private shared routine
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2017-09-13 15:17:55 -07:00
Bryce Harrington
4b164bc898 gl: Convert images to rgba or a8 formats when uploading with GLESv2
The GLESv2 backend supports only GL_RGBA and GL_ALPHA as supported
texture formats.  So, make _cairo_gl_get_image_format_and_type_gles2
force conversion of other image formats to either of these two as
appropriate when uploading images.

Patch originally from Henry Song <henry.song@samsung.com>

Bryce Harrington <bryce@osg.samsung.com>

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2017-09-13 15:17:55 -07:00
Behdad Esfahbod
99427c3f4f Handle SOURCE and CLEAR operators when painting color glyphs
In cairo, most operators are composited this way:

  ((src IN mask) OP dst) LERP_clip dst

but SOURCE and CLEAR operators are composited this way:

  (src OP dst) LERP_(clip IN mask) dst

(why is this not specified anywhere in the docs or source tree?)

With color glyphs, we were not special-casing SOURCE and CLEAR.
We do now.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=102661
2017-09-12 01:35:15 -04:00
Behdad Esfahbod
7f6b57a238 Fix undefined-behavior with integer math
As reported to me:

"A calculation on signed integers has undefined behaviour if the result is not
representable in the type. In this case, it's trying to negate int_min, aka
-2^31 but the range of an int is [-2^31, 2^31-1] so it doesn't fit. Instead,
cast to unsigned which has 2's complement wrap-around arithmetic which is what
this particular function expects."
2017-09-11 22:00:00 -07:00
Bryce Harrington
1af18610ba glesv2: Fix regression in gles version detection
Revert the _cairo_gl_get_flavor() portion of the change from commit
eb523200.  This caused GLES to be enabled only if the hardware reported
version 2 exactly; if the hardware supported version 2 and 3 then no ES
support would be enabled.
2017-09-11 19:56:06 -07:00
Adrian Johnson
c29db4f0de Remove unused variable 2017-09-02 16:11:43 +09:30
Adrian Johnson
b646f755f3 RELEASING: use correct branch name 2017-09-02 07:37:36 +09:30
Bryce Harrington
934e42fa5e Bump version for new development tree, 1.15.9 2017-08-29 10:18:14 -07:00
Bryce Harrington
112f0fc73b 1.15.8 release
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2017-08-29 10:01:02 -07:00
Adrian Johnson
609261bcbc pdf: use explicit dest instead of named dest when 'internal' attribute is set 2017-08-29 21:43:07 +09:30
Adrian Johnson
12b875aef3 pdf: use link attributes instead of dest name for cairo_pdf_surface_add_outline
In PDF outline targets are specified the same way as link targets so
there is no need to restrict the target to dest names.
2017-08-26 16:32:48 +09:30
Adrian Johnson
df37baf789 pdf: fix link positions
Converting the link position from cairo to pdf coordinates requires
the page height. Since the link may point to a different page, build
an array of the height of each page and use the target page height for
the conversion.

Don't default to a [0,0] position if "pos" is not specified. PDF
allows a null destination position to be specified which means don't
change the position if the page is already displayed or show top left
if switching to a different page. This is more useful default
particularly for external files where the coordinates (which must be
in PDF coordinates as we don't know the page height) of the top left
corner may not be known.
2017-08-26 16:26:12 +09:30
Adrian Johnson
74c6e3ae1d pdf: don't write logical structure if it only contains links 2017-08-22 21:25:22 +09:30
Doran Moppert
63f14d4a8f image: Check for negative len in fill/blit functions
Applies the same fix as 5c82d91 to other potential negative len cases.

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2017-08-21 17:08:47 -07:00
Alexander Täschner
5f90f0a706 win32: Initialize mutexes for static builds for win32
For static win32 builds the mutexes are not initialized (for dynamic
builds it's done when the DLL is loaded). Therefore, add initialization
to the create surface calls.

Cc: Uli Schlachter <psychon@znc.in>
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2017-08-21 16:35:27 -07:00
Guillermo Rodriguez
339fe9a768 Remove redundant check.
Spotted by David Kastrup <dak@gnu.org>.

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2017-08-21 16:29:10 -07:00
Guillermo Rodriguez
5ac7b3652d script: Fix misleading indentation warning.
Spotted by David Kastrup <dak@gnu.org>.

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2017-08-21 16:05:16 -07:00
Bryce Harrington
a5ac8fe203 image: Disambiguate 0. in doxygen
Doxygen is interpreting the leading 0. as starting an ordered list, and
misformatting the HTML documentation.

Issue reported by Артур Галямов.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2017-08-21 14:39:24 -07:00
Adrian Johnson
4c12e2aec3 pdf: Don't emit /PageLabel dict when no labels defined 2017-08-21 21:23:45 +09:30
Adrian Johnson
e3857c133f pdf: link tags do not need to be leaf nodes in the document structure 2017-08-20 20:09:02 +09:30
Adrian Johnson
bb4ab5a8be tests: fix bug in pdf-tagged-text that was introduced in 4790a36 2017-08-19 10:52:18 +09:30
Behdad Esfahbod
f3515954e0 [ft] Fix color font loading on big-endian systems
Untested, but the logic is correct: FreeType's BGRA type is always
laid out in that order in memory.  Cairo's ARGB32 is endianness-
dependent.  On little-endian systems the two are the same.  On big-endian
we need to flip.
2017-08-08 22:04:55 -07:00
Behdad Esfahbod
495cb9a0a7 Fix uninitialized status! 2017-07-29 17:40:34 +01:00
Behdad Esfahbod
7a1e378466 Fix color font support infinite-loop with empty glyphs
Ouch! But it all works now! Only took five years to merge this feature.
Thanks Matthias Clasen for working out a real patch from my initial
sketch.
2017-07-29 16:20:21 +01:00
Matthias Clasen
5e3350e4d1 Simplify things a bit
Do away with the separate check for color glyphs - we can just
do the filtering, and if there are no color glyphs, it is a
no-op. As long as we only do this for fonts with color glyphs,
it should be fine.

Reduce repetition in composite_color_glyphs by breaking out
some helper functions.
2017-07-29 12:30:50 +01:00
Matthias Clasen
db14d6d707 Render color glyphs as source, not as mask
Use paint instead of show_glyphs for color glyphs. To avoid
overhead, we only check for color glyphs if the font is known
to contain any. Paint clusters containing only color glyphs
and rewrite the inputs to remove the handled clusters and
glyphs.
2017-07-29 12:30:50 +01:00
Matthias Clasen
6a8a25cc47 Implement has_color_glyphs for freetype
This information is available from the FT_Face using the
FT_HAS_COLOR macro. We cache the value in the unscaled_font
object as soon as we have an FT_Face.
2017-07-29 12:30:50 +01:00
Matthias Clasen
6622845653 Expose 'has color glyphs' as a scaled font property
This information will be used in subsequent commits to quickly
decide that we won't try to handle glpyhs as masks. Implementing
the new has_color_glyphs vfunc is optional - only backends that
support color glyphs need to implement it.
2017-07-29 12:30:50 +01:00
Matthias Clasen
52b17c7242 Support loading color glyphs with freetype
Use the FT_LOAD_COLOR flag to instruct freetype to load embedded
PNGs without converting them to grayscale. We always load both
the color and regular surface when we are loading surfaces.
2017-07-29 12:30:50 +01:00
Matthias Clasen
0d8859c66f Add support for color glyphs to cairo_scaled_glyph_t
With this, glyphs can have either a surface that is expected
to be used as mask, or a color_surface that should be used
as source, or both.

This will be used to support colored emoji glyphs that are
stored as PNG images in OpenType fonts.
2017-07-29 12:30:50 +01:00
Bryce Harrington
0fadb2c56d cairo-docs: whitespace cleanup 2017-07-28 17:03:00 -07:00