Window.createSimilarImageSurface

cairo.surface.Surface createSimilarImageSurface(cairo.types.Format format, int width, int height, int scale)

Create a new image surface that is efficient to draw on the given window.

Initially the surface contents are all 0 (transparent if contents have transparency, black otherwise.)

The width and height of the new surface are not affected by the scaling factor of the window, or by the scale argument; they are the size of the surface in device pixels. If you wish to create an image surface capable of holding the contents of window you can use:

int scale = gdk_window_get_scale_factor (window);
 int width = gdk_window_get_width (window) * scale;
 int height = gdk_window_get_height (window) * scale;

 // format is set elsewhere
 cairo_surface_t *surface =
   gdk_window_create_similar_image_surface (window,
                                            format,
                                            width, height,
                                            scale);

Note that unlike [cairo.surface.Surface.createSimilarImage], the new surface's device scale is set to scale, or to the scale factor of window if scale is 0.

Parameters

formatthe format for the new surface
widthwidth of the new surface
heightheight of the new surface
scalethe scale of the new surface, or 0 to use same as window

Returns

a pointer to the newly allocated surface. The caller

owns the surface and should call [cairo.surface.Surface.destroy] when done with it.

This function always returns a valid pointer, but it will return a pointer to a “nil” surface if other is already in an error state or any other error occurs.