summaryrefslogtreecommitdiff
path: root/src/cairo-analysis-surface-private.h
AgeCommit message (Collapse)AuthorFilesLines
2009-07-23Remove clip handling from generic surface layer.Chris Wilson1-4/+2
Handling clip as part of the surface state, as opposed to being part of the operation state, is cumbersome and a hindrance to providing true proxy surface support. For example, the clip must be copied from the surface onto the fallback image, but this was forgotten causing undue hassle in each backend. Another example is the contortion the meta surface endures to ensure the clip is correctly recorded. By contrast passing the clip along with the operation is quite simple and enables us to write generic handlers for providing surface wrappers. (And in the future, we should be able to write more esoteric wrappers, e.g. automatic 2x FSAA, trivially.) In brief, instead of the surface automatically applying the clip before calling the backend, the backend can call into a generic helper to apply clipping. For raster surfaces, clip regions are handled automatically as part of the composite interface. For vector surfaces, a clip helper is introduced to replay and callback into an intersect_clip_path() function as necessary. Whilst this is not primarily a performance related change (the change should just move the computation of the clip from the moment it is applied by the user to the moment it is required by the backend), it is important to track any potential regression: ppc: Speedups ======== image-rgba evolution-20090607-0 1026085.22 0.18% -> 672972.07 0.77%: 1.52x speedup ▌ image-rgba evolution-20090618-0 680579.98 0.12% -> 573237.66 0.16%: 1.19x speedup ▎ image-rgba swfdec-fill-rate-4xaa-0 460296.92 0.36% -> 407464.63 0.42%: 1.13x speedup ▏ image-rgba swfdec-fill-rate-2xaa-0 128431.95 0.47% -> 115051.86 0.42%: 1.12x speedup ▏ Slowdowns ========= image-rgba firefox-periodic-table-0 56837.61 0.78% -> 66055.17 3.20%: 1.09x slowdown ▏
2008-09-26[analysis] Merge two analysis status codes.Chris Wilson1-0/+3
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-05-09Add CAIRO_INTERNAL_SURFACE_TYPE_NULL and cairo_nul_surface_create()Behdad Esfahbod1-0/+4
It creates a surface that does nothing. This can be used with cairo-analysis-surface, to compute bounds of cairo drawings without doing any actual drawings.
2008-05-09[cairo-analysis-surface] Add _cairo_analysis_surface_[gs]et_ctm()Behdad Esfahbod1-0/+8
The functionality was there. Just add getter/setter for the ctm.
2007-09-23Add Encapsulated PostScript supportAdrian Johnson1-3/+7
The analysis surface will calculated the tight bounding box for each page. A new paginated-surface backend function set_bounding_box() has been added for passing the page bounding box to the target surface at the end of the analysis phase. The changes to the PS file when EPS is enabled are: - Add EPS header - Use tight bounding box instead of page size - Use save/restore to ensure PS interpreter is left in the same state
2007-08-21PS: Add finer-grained image fallback supportAdrian Johnson1-0/+3
The analysis surface now keeps track of two regions: supported operations, and unsupported operations. If the target surface returns CAIRO_INT_STATUS_FLATTEN_TRANSPARENCY, the analysis surface will check if any previous operation intersects with this operation. If there is nothing previously drawn under the operation, the status is changed to supported. The meta surface has two new functions: _cairo_meta_surface_replay_region() _cairo_meta_surface_replay_and_create_regions() During the analysis stage, the paginated surface replays the meta surface using _cairo_meta_surface_replay_and_create_regions(). The return status from each analyzed operation is saved in the meta surface. The _cairo_meta_surface_replay_region() function allows only operations from either the supported or unsupported region to be replayed. This allows the paginated surface to replay only the supported operations before emitting a fallback image for each rectangle in the unsupported region.
2007-07-18[fixpt] Create cairo_region wrapper around pixman_region16_tVladimir Vukicevic1-2/+2
Insulate region-using code from implementation details; at some point we'll want to switch to using 32-bit regions.
2007-06-11[misc] Blow away last remaining $Id$ directives in sourcesVladimir Vukicevic1-2/+1
2006-02-27cairo_analysis_surface: Rename region_[un]supported() to get_[un]supported().Carl Worth1-2/+2
2006-02-27Rename cairo_analyze_surface_t to cairo_analysis_surface_t.Carl Worth1-0/+55