Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 5312461

Browse filesBrowse files
committed
Document a bit the cairo fast path.
1 parent 52ed746 commit 5312461
Copy full SHA for 5312461

File tree

Expand file treeCollapse file tree

1 file changed

+12
-2
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+12
-2
lines changed

‎lib/matplotlib/backends/backend_cairo.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backends/backend_cairo.py
+12-2Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,22 +125,31 @@ def _convert_paths_slow(ctx, paths, transforms, clip=None):
125125

126126

127127
def _convert_paths_fast(ctx, paths, transforms, clip=None):
128+
# We directly convert to the internal representation used by cairo, for
129+
# which ABI compatibility is guaranteed. The layout is for each item is
130+
# --CODE(4)-- -LENGTH(4)- ---------PAD(8)---------
131+
# ----------X(8)---------- ----------Y(8)----------
132+
# with the size in bytes in parentheses, and (X, Y) repeated as many times
133+
# as there are points for the current code.
128134
ffi = cairo.ffi
129135
cleaneds = [path.cleaned(transform=transform, clip=clip)
130136
for path, transform in zip(paths, transforms)]
131137
vertices = np.concatenate([cleaned.vertices for cleaned in cleaneds])
132138
codes = np.concatenate([cleaned.codes for cleaned in cleaneds])
133139

134-
# TODO: Implement Bezier degree elevation formula. Note that the "slow"
135-
# implementation is, in fact, also incorrect...
140+
# TODO: Implement Bezier degree elevation formula. For now, fall back to
141+
# the "slow" implementation, though note that that implementation is, in
142+
# fact, also incorrect...
136143
if np.any(codes == Path.CURVE3):
137144
raise NotImplementedError("Quadratic Bezier curves are not supported")
145+
138146
# Remove unused vertices and convert to cairo codes. Note that unlike
139147
# cairo_close_path, we do not explicitly insert an extraneous MOVE_TO after
140148
# CLOSE_PATH, so our resulting buffer may be smaller.
141149
vertices = vertices[(codes != Path.STOP) & (codes != Path.CLOSEPOLY)]
142150
codes = codes[codes != Path.STOP]
143151
codes = _MPL_TO_CAIRO_PATH_TYPE[codes]
152+
144153
# Where are the headers of each cairo portions?
145154
cairo_type_sizes = _CAIRO_PATH_TYPE_SIZES[codes]
146155
cairo_type_positions = np.insert(np.cumsum(cairo_type_sizes), 0, 0)
@@ -303,6 +312,7 @@ def _draw_paths():
303312
return
304313
gc_vars, rgb_fc = reuse_key
305314
gc = copy.copy(gc0)
315+
# We actually need to call the setters to reset the internal state.
306316
vars(gc).update(gc_vars)
307317
for k, v in gc_vars.items():
308318
try:

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.