Commit graph

388 commits

Author SHA1 Message Date
Adrian Johnson
b7a9e1d4ac Embed full font name in PDF TrueType and CFF fonts
if the full font name was available in the font.
2009-01-22 23:12:14 +11:00
Adrian Johnson
6f2db9a4b0 Use PS font name in CFF and TrueType PDF font subsets
James Cloos found that the font name in embedded fonts should be the
PostScript font name (nameID=6 in the name table).

http://lists.cairographics.org/archives/cairo/2008-December/015919.html
2009-01-22 23:12:14 +11:00
Adrian Johnson
1deb1e4510 PDF: Include subset tag in font name
PDF requires font names of subsetted fonts to be preprended with
"XXXXXX+" where XXXXXX is a sequence of 6 uppercase letters unique the
font and the set of glyphs in the subset.
2009-01-22 23:12:14 +11:00
Chris Wilson
ce0b136a44 Query the backend to see if we can repaint the solid pattern.
If we are dithering on the Xlib backend we can not simply repaint the
surface used for a solid pattern and must recreate it from scratch.
However, for ordinary XRender usage we do not want to have to pay that
price - so query the backend to see if we can reuse the surface.
2008-12-18 12:06:45 +00:00
M Joonas Pihlaja
4a9b274eeb [cairo-spans] Add a check/create_span_renderer backend methods.
A surface will have the chance to use span rendering at cairo_fill()
time by creating a renderer for a specific combination of
pattern/dst/op before the path is scan converted.  The protocol is to
first call check_span_renderer() to see if the surface wants to render
with spans and then later call create_span_renderer() to create the
renderer for real once the extents of the path are known.

No backends have an implementation yet.
2008-12-06 14:04:36 +02:00
Chris Wilson
e6963a5bfe Mark allocation failures as unlikely.
Use the gcc likelihood annotation to indicate that allocation failures are
extremely unlikely.
2008-11-29 11:20:34 +00:00
Chris Wilson
d1801c23fa Mark if(status) as being unlikely.
The error paths should be hit very rarely during normal operation, so mark
them as being unlikely so gcc may emit better code.
2008-11-29 11:20:33 +00:00
Chris Wilson
ca80b8c652 [pdf] Add a default case to silence the compiler.
The foolish compiler was emitting a warning about a potential
uninitialized variable even though the switch was fully populated.
2008-11-25 10:25:24 +00:00
Adrian Johnson
1892907e24 PDF: Disable PDF 1.5 features when version 1.4 is selected
JPEG 2000 image embedding and ActualText marked content are
PDF 1.5 features.
2008-11-24 22:27:09 +10:30
Adrian Johnson
c4a57385fa PDF: Add cairo_pdf_surface_restrict_to_version API
Now that we are using PDF 1.5 features, add an api to select between
version 1.4 or 1.5.
2008-11-24 22:27:09 +10:30
Adrian Johnson
d85e836911 PDF: Add newline to end of binary streams
PDF requires white space before the "endstream"
2008-11-24 22:27:09 +10:30
Adrian Johnson
7fdb712cba PDF: Add JPEG2000 image embedding
Requires increasing the PDF version to 1.5.
2008-11-23 21:05:41 +10:30
Adrian Johnson
5de1e4de93 Move cairo-jpeg-info.c to cairo-image-info.c
Other image formats will be added to the same file.
2008-11-23 18:33:58 +10:30
Chris Wilson
282d774427 [mime-type] Request the mime-data for the source surface, not ourselves!
Fixup a typo I introduced that caused us to request the jpeg data for the
destination surface and not the source.
2008-11-04 13:03:24 +00:00
Chris Wilson
8fc3d0ffeb [mime-data] Allow embedding of arbitrary mime-types.
Use the surface user-data array allow to store an arbitrary set of
alternate image representations keyed by an interned string (which
ensures that it has a unique key in the user-visible namespace).

Update the API to mirror that of cairo_surface_set_user_data() [i.e.
return a status indicator] and switch internal users of the mime-data to
the public functions.
2008-11-03 11:24:12 +00:00
Chris Wilson
afef83a1fa Compile tidy.
Fix a few minor compiler warnings.
2008-11-03 11:24:11 +00:00
Chris Wilson
f77723fc88 [pdf] Missing status check.
Check that stream was successfully opened before attempting to write to
it.
2008-11-03 11:24:11 +00:00
Adrian Johnson
3707178fa4 PDF: Implement JPEG image embedding 2008-11-02 20:12:29 +10:30
Adrian Johnson
e639b53671 PDF: meta-surface patterns with EXTEND_PAD are unsupported
We have to use fallback images for this.
2008-11-02 20:12:29 +10:30
Adrian Johnson
6c92edd9a3 PDF: Implement EXTEND_PAD for image patterns
Images with EXTEND_PAD are painted into a new image the size of the
operation extents. The new image is then embedded in the PDF file with
the pattern matrix adjusted to ensure the image origin is in the
correct location.
2008-11-02 20:12:29 +10:30
Adrian Johnson
d146cb4056 PDF: Store the operation extents in each pattern
The extents will be used by EXTEND_PAD patterns as well as any other
pattern that can benefit from knowing the extents of the operation it
will be used with.
2008-11-02 20:12:29 +10:30
Adrian Johnson
d682d275b9 Add an extents argument to the high level surface backend functions
Add a "cairo_rectangle_int_t *extents" argument to to the following
backend functions:
  paint
  mask,
  stroke
  fill
  show_glyphs
  show_text_glyphs

This will be used to pass the extents of each operation computed by
the analysis surface to the backend. This is required for implementing
EXTEND_PAD.
2008-11-02 20:12:22 +10:30
Adrian Johnson
05fce5bced PS/PDF: Set image Interpolation flag
If the filter mode is anything other than DEFAILT, FAST or NEAREST set the
Interpolate flag in the image dictionary so that a smoothing filter is
applied when rasterising the vector file.

As we have no control over the implementation of the Interpolate filter
(the PS/PDF specifications leave it undefined) we need to capture the
output of poppler/GS and update our reference images. (For a couple of
tests, the filtering is irrelevant so for those we set the filter to
NEAREST.)

Note that GhostScript's Interpolate filter does not work on rotated images
(and a variety of other transformations) so several of the PS reference
images have use nearest-neighbour sampling instead of a bilinear filter.
2008-10-30 21:24:54 +00:00
Chris Wilson
2836be6f75 Cleanup 'status && status != UNSUPPORTED'
Replace instances of 'status && status != UNSUPPORTED' with the more
readable _cairo_status_is_error().
2008-10-30 17:52:12 +00:00
Chris Wilson
7944601864 [pattern] Avoid needless copying of patterns.
Only copy the pattern if we need to modify it, e.g. preserve a copy in a
snapshot or a soft-mask, or to modify the matrix. Otherwise we can
continue to use the original pattern and mark it as const in order to
generate compiler warnings if we do attempt to write to it.
2008-10-30 17:52:05 +00:00
Adrian Johnson
5e4a1cb0b8 Don't add a notdef glyph to Type 3 font subsets
This allows user-fonts to use glyph 0 when embedding in PS/PDF.
According to ISO32000 Type 3 fonts do not require a notdef glyph.
2008-10-22 22:00:31 +10:30
Chris Wilson
1db8949f2b Ensure that the scaled font is frozen for the lifetime of the scaled glyph.
After discussing the scaled font locking with Behdad, it transpired that it
is not sufficient for a font to be locked for the lifetime of a scaled glyph,
but that the scaled font's glyph cache must be frozen for the glyph'
lifetime.  If the cache is not frozen, then there is a possibility that the
glyph may be evicted before the reference goes out of scope i.e. the glyph
becomes invalid whilst we are trying to use it.

Since the freezing of the cache is the stronger barrier, we remove the
locking/unlocking of the mutex from the backends and instead move the
mutex acquisition into the freeze/thaw routines. Then update the rule on
acquiring glyphs to enforce that the cache is frozen and review the usage
of freeze/thaw by all the backends to ensure that the cache is frozen for
the lifetime of the glyph.
2008-10-22 00:53:55 +01:00
Chris Wilson
71e4f7e3a1 Add API documentation for NULL filenames and write_funcs.
Mention in the API docs that you can pass a NULL filename to
cairo_(pdf|ps|svg)_surface_create in order to construct a queryable
surface without generating any temporary files. Similarly when passing a
NULL write_func to cairo_pdf_surface_create_for_stream et al.
2008-10-20 23:54:57 +01:00
Chris Wilson
1f9f9d936b [pdf] Acquire scaled_font mutex for show_text_glyphs().
We need to be holding the scaled font mutex over a call to draw text
glyphs from within an smask group.
2008-10-19 09:36:51 +01:00
Chris Wilson
565c02a37e [svg] Use finer-grained fallbacks for SVG 1.2
The use of fine-grained fallbacks requires the native support of the
SOURCE operator applied to an image on the target surface. SVG 1.2
introduces the "comp-op:src" mode fulfilling this criteria - so we can
enable fine-grained fallbacks for 1.2+.

Update test/fine-grained-fallbacks to exercise this pathway in SVG 1.2 -
as SVG natively supported all the current operations within that test.
This reveals yet another librsvg bug in handling SVG 1.2.
2008-10-08 12:43:35 +01:00
Chris Wilson
681424cbaf [analysis] Merge two analysis status codes.
Since there is an implicit precedence in the ranking of the analysis
return codes, provide a function to centralize the logic within the
analysis surface and isolate the backends from the complexity.
2008-09-26 13:42:28 +01:00
Chris Wilson
ba18d57339 [pdf] Propagate status
Check and return a few forgotten error codes from static functions.
2008-09-26 13:42:28 +01:00
Chris Wilson
31ff6c863f [pdf] Explicitly order the sequence of checks when analyzing masks
There is an implicit precedence when analyzing patterns for
compatibilty, in order of descending precedence:
  fatal error
  unsupported
  needs image fallback
  needs meta-surface analysis
  success.

So wehen we have two patterns, we need to check both analysis statuses
simulataneously, in order to correctly report the combined status.
2008-09-25 02:09:44 -07:00
Chris Wilson
dfe9f7093f Revert "[pdf] Tweak the mask analysis to avoid an assertion failure."
This reverts commit c9ec82f3a8, which
notably caused regresions in the mask and clip-operator tests.

Obviously I'm not smart enough to fix bugs. Since the computer found the
assertion failure, I need to train the computer to fix the bugs as well.
2008-09-24 22:37:08 +01:00
Chris Wilson
c9ec82f3a8 [pdf] Tweak the mask analysis to avoid an assertion failure.
Both the source and mask need to be analyzed and checked for an
UNSUPPORTED operation before determining the best course of action.
As before this is simply decided based on the requirements of the
source.
2008-09-24 15:05:23 +01:00
Behdad Esfahbod
1fe7088a11 [show_text_glyphs] Replace the bool backward with cairo_text_cluster_flags
Chris rightfully complained that having a boolean function argument is
new in cairo_show_text_glyphs, and indeed avoiding them has been one
of the API design criteria for cairo.  Trying to come up with alternatives,
Owen suggested using a flag type which nicely solves the problem AND
future-proofs such a complex API.

Please welcome _flags_t APIs to cairo.h
2008-09-18 00:26:07 -04:00
Chris Wilson
60ab0f79f8 [pdf] Kill a compiler warning.
Older versions of gcc complain about the use of a guard variable, and warn
that solid_color may be used uninitialized. As it happens the guard
variable is redundant and we can just use solid_color directly.
2008-09-16 02:08:47 +01:00
Adrian Johnson
1cf1b723c7 Return correct status 2008-09-11 18:36:55 +09:30
Adrian Johnson
15dd80c894 Don't overwrite previous status 2008-09-11 18:26:04 +09:30
Adrian Johnson
b56075ee51 Enable show_glyphs inside of in user-font glyphs 2008-09-11 08:41:39 +09:30
Adrian Johnson
c3663324fd Add _cairo_type3_glyph_surface_analyze_glyph()
This function emits the glyph to a null stream with the side effect
that other glyphs referenced by this user-font glyph will be added to
the font subsets.
2008-09-11 08:38:39 +09:30
Adrian Johnson
6772efcdf6 Put user fonts in a separate subset 2008-09-11 08:37:02 +09:30
Chris Wilson
e955b7399e Check that lvalue of BITSWAP8() is a uint8_t.
The bit-swapping macro uses the full register for intermediate storage so
we need to be careful to only read the low byte when using the result.

[Only the use in ps-surface.c was incorrect, I just converted the other
unsigned chars to uint8_t for consistency.]
2008-09-01 15:36:34 +01:00
Chris Wilson
56c5f9954a [pdf] Propagate error from open_stream() failure.
Check status return for _cairo_pdf_surface_open_stream().
2008-08-17 14:51:48 +01:00
Chris Wilson
311464ad50 [pdf] Propagate status return.
Check status return from type3_glyph_surface_emit_glyph().
2008-08-17 14:50:35 +01:00
Chris Wilson
b14c6ac685 [pdf] dead code elimination.
Value stored to 'matrix' is never read.
2008-08-17 14:49:02 +01:00
Behdad Esfahbod
4bb7388b65 Remove unnecessary checks for CAIRO_STATUS_INVALID_STRING
We check that all input text is valid UTF-8.  Not sure why the code
was being lenient to invalid strings.
2008-08-08 03:01:14 -04:00
Chris Wilson
2dfee9986c [pdf] Fixup a couple of inverted tests.
Check for NULL returns from malloc, instead of reporting errors and
leaking on success.
2008-08-06 10:51:34 +01:00
Adrian Johnson
837bf73f08 Add PDF operators function to reset any remembered state 2008-07-08 22:00:15 +09:30
Adrian Johnson
9b302fac63 PDF: Oops - turn compression back on 2008-07-08 21:51:41 +09:30