Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def _check_status(self):
_check_status(cairo.cairo_pattern_status(self._pointer))
def _UNSAFE_cairocffi_context_to_pycairo(ctx):
import cairocffi
capi = get_capi()
ptr = ctx._pointer
cairocffi.cairo.cairo_reference(ptr)
ptr = int(cairocffi.ffi.cast('uintptr_t', ptr))
_ctx = capi.Context_FromContext(ptr, capi.Context_Type, None)
return _ctx
For example, if you want to make a pattern appear twice as large
as it does by default the correct code to use is::
pattern.set_matrix(Matrix(xx=0.5, yy=0.5))
Meanwhile, using values of 2 rather than 0.5 in the code above
would cause the pattern to appear at half of its default size.
Also, please note the discussion of the user-space locking semantics
of :meth:`Context.set_source`.
:param matrix: A :class:`Matrix` to be copied into the pattern.
"""
cairo.cairo_pattern_set_matrix(self._pointer, matrix._pointer)
self._check_status()
"""Returns whether the surface supports sophisticated
:meth:`Context.show_text_glyphs` operations.
That is, whether it actually uses the text and cluster data
provided to a :meth:`Context.show_text_glyphs` call.
.. note::
Even if this method returns :obj:`False`,
:meth:`Context.show_text_glyphs` operation targeted at surface
will still succeed.
It just will act like a :meth:`Context.show_glyphs` operation.
Users can use this method to avoid computing UTF-8 text
and cluster mapping if the target surface does not use it.
"""
return bool(cairo.cairo_surface_has_show_text_glyphs(self._pointer))
indicate the amount by which the current point would be advanced
by :meth:`show_glyphs`.
:param glyphs:
A list of glyphs, as returned by :meth:`text_to_glyphs`.
Each glyph is a ``(glyph_id, x, y)`` tuple
of an integer and two floats.
:returns:
A ``(x_bearing, y_bearing, width, height, x_advance, y_advance)``
tuple of floats.
See :meth:`Context.text_extents` for details.
"""
glyphs = ffi.new('cairo_glyph_t[]', glyphs)
extents = ffi.new('cairo_text_extents_t *')
cairo.cairo_scaled_font_glyph_extents(
self._pointer, glyphs, len(glyphs), extents)
self._check_status()
return (
extents.x_bearing, extents.y_bearing,
extents.width, extents.height,
extents.x_advance, extents.y_advance)
def _from_pointer(pointer, incref):
"""Wrap an existing :c:type:`cairo_scaled_font_t *` cdata pointer.
:type incref: bool
:param incref:
Whether increase the :ref:`reference count ` now.
:return: A new :class:`ScaledFont` instance.
"""
if pointer == ffi.NULL:
raise ValueError('Null pointer')
if incref:
cairo.cairo_scaled_font_reference(pointer)
self = object.__new__(ScaledFont)
ScaledFont._init_pointer(self, pointer)
return self
def get_scale_matrix(self):
"""Copies the scaled font’s scaled matrix.
The scale matrix is product of the font matrix
and the ctm associated with the scaled font,
and hence is the matrix mapping from font space to device space.
:returns: A new :class:`Matrix` object.
"""
matrix = Matrix()
cairo.cairo_scaled_font_get_scale_matrix(
self._pointer, matrix._pointer)
self._check_status()
return matrix
from cairocffi import ImageSurface
stride = ImageSurface.format_stride_for_width(format, width)
data = bytearray(stride * height)
surface = ImageSurface(format, width, height, data, stride)
:param format: A :ref:`FORMAT` string.
:param width: The desired width of the surface, in pixels.
:type format: str
:type width: int
:returns:
The appropriate stride to use given the desired format and width,
or -1 if either the format is invalid or the width too large.
"""
return cairo.cairo_format_stride_for_width(format, width)
for details about which MIME types it can handle.
Caution: the associated MIME data will be discarded
if you draw on the surface afterwards.
Use this method with care.
:param mime_type: The MIME type of the image data.
:type mime_type: ASCII string
:param data: The image data to attach to the surface.
:type data: bytes
*New in cairo 1.10.*
"""
mime_type = ffi.new('char[]', mime_type.encode('utf8'))
if data is None:
_check_status(cairo.cairo_surface_set_mime_data(
self._pointer, mime_type, ffi.NULL, 0, ffi.NULL, ffi.NULL))
else:
# TODO: avoid making a copy here if possible.
length = len(data)
data = ffi.new('unsigned char[]', data)
keep_alive = KeepAlive(data, mime_type)
_check_status(cairo.cairo_surface_set_mime_data(
self._pointer, mime_type, data, length,
*keep_alive.closure))
keep_alive.save() # Only on success