summaryrefslogtreecommitdiff
path: root/src/cairo-analysis-surface-private.h
Commit message (Collapse)AuthorAgeFilesLines
* Fix shared use of recording surface with paginated targetsAdrian Johnson2023-01-151-1/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The problem is _cairo_recording_surface_replay_and_create_regions() stores the cairo_recording_region_type_t in the same structure as the recording commands. This does not work well when the recording surface is used as source by multiple surfaces Fix this by moving the cairo_recording_region_type_t into a separate struct cairo_recording_regions_array_t. This struct is stored in a list that allows multiple create regions results to be store in the surface. The new function _cairo_recording_surface_region_array_attach() is used to create a new cairo_recording_regions_array_t, attach it to the recording surface and return a unique region id. The _cairo_recording_surface_replay_and_create_regions() and _cairo_recording_surface_replay_region() functions use this region id to identify the cairo_recording_regions_array_t. To handle nested recording surfaces, when replaying a recording, the region id is passed to the target as an extra parameter in the surface pattern. The wrapper surface makes a temporary copy of the pattern to ensure the snapshot pattern in the recording surface is not modified. cairo_recording_regions_array_t has a reference count so the target can hold on to the cairo_recording_regions_array_t after the paginated surface has called _cairo_recording_surface_region_array_remove().
* Update FSF addressAndrea Canciani2010-04-271-1/+1
| | | | | | | | | | | I updated the Free Software Foundation address using the following script. for i in $(git grep Temple | cut -d: -f1 ) do sed -e 's/59 Temple Place[, -]* Suite 330, Boston, MA *02111-1307[, ]* USA/51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA/' -i "$i" done Fixes http://bugs.freedesktop.org/show_bug.cgi?id=21356
* Remove clip handling from generic surface layer.Chris Wilson2009-07-231-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 ▏
* [analysis] Merge two analysis status codes.Chris Wilson2008-09-261-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.
* Add CAIRO_INTERNAL_SURFACE_TYPE_NULL and cairo_nul_surface_create()Behdad Esfahbod2008-05-091-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.
* [cairo-analysis-surface] Add _cairo_analysis_surface_[gs]et_ctm()Behdad Esfahbod2008-05-091-0/+8
| | | | The functionality was there. Just add getter/setter for the ctm.
* Add Encapsulated PostScript supportAdrian Johnson2007-09-231-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
* PS: Add finer-grained image fallback supportAdrian Johnson2007-08-211-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.
* [fixpt] Create cairo_region wrapper around pixman_region16_tVladimir Vukicevic2007-07-181-2/+2
| | | | | Insulate region-using code from implementation details; at some point we'll want to switch to using 32-bit regions.
* [misc] Blow away last remaining $Id$ directives in sourcesVladimir Vukicevic2007-06-111-2/+1
|
* cairo_analysis_surface: Rename region_[un]supported() to get_[un]supported().Carl Worth2006-02-271-2/+2
|
* Rename cairo_analyze_surface_t to cairo_analysis_surface_t.Carl Worth2006-02-271-0/+55