cairo_status_t _cairo_paginated_surface_set_size (cairo_surface_t *surface, int width, int height) { cairo_paginated_surface_t *paginated_surface; cairo_status_t status; cairo_rectangle_t recording_extents; assert (_cairo_surface_is_paginated (surface)); paginated_surface = (cairo_paginated_surface_t *) surface; recording_extents.x = 0; recording_extents.y = 0; recording_extents.width = width; recording_extents.height = height; cairo_surface_destroy (paginated_surface->recording_surface); paginated_surface->recording_surface = cairo_recording_surface_create (paginated_surface->content, &recording_extents); status = paginated_surface->recording_surface->status; if (unlikely (status)) return (cairo_status_t)_cairo_surface_set_error (surface, (cairo_int_status_t)status); return (cairo_status_t)CAIRO_STATUS_SUCCESS; }
cairo_surface_t * _cairo_paginated_surface_get_recording (cairo_surface_t *surface) { cairo_paginated_surface_t *paginated_surface; assert (_cairo_surface_is_paginated (surface)); paginated_surface = (cairo_paginated_surface_t *) surface; return paginated_surface->recording_surface; }
cairo_surface_t * _cairo_paginated_surface_get_target (cairo_surface_t *surface) { cairo_paginated_surface_t *paginated_surface; assert (_cairo_surface_is_paginated (surface)); paginated_surface = (cairo_paginated_surface_t *) surface; return paginated_surface->target; }
/** * cairo_win32_surface_get_dc: * @surface: a #cairo_surface_t * * Returns the HDC associated with this surface, or %NULL if none. * Also returns %NULL if the surface is not a win32 surface. * * A call to cairo_surface_flush() is required before using the HDC to * ensure that all pending drawing operations are finished and to * restore any temporary modification cairo has made to its state. A * call to cairo_surface_mark_dirty() is required after the state or * the content of the HDC has been modified. * * Return value: HDC or %NULL if no HDC available. * * Since: 1.2 **/ HDC cairo_win32_surface_get_dc (cairo_surface_t *surface) { if (surface->backend->type == CAIRO_SURFACE_TYPE_WIN32) return to_win32_surface(surface)->dc; if (_cairo_surface_is_paginated (surface)) { cairo_surface_t *target = _cairo_paginated_surface_get_target (surface); if (target->backend->type == CAIRO_SURFACE_TYPE_WIN32_PRINTING) return to_win32_surface(target)->dc; } return NULL; }
static cairo_surface_t * unwrap_surface (const cairo_pattern_t *pattern) { cairo_surface_t *surface; surface = ((const cairo_surface_pattern_t *) pattern)->surface; if (_cairo_surface_is_paginated (surface)) surface = _cairo_paginated_surface_get_recording (surface); if (_cairo_surface_is_snapshot (surface)) surface = _cairo_surface_snapshot_get_target (surface); if (_cairo_surface_is_observer (surface)) surface = _cairo_surface_observer_get_target (surface); return surface; }
cairo_status_t _cairo_paginated_surface_set_size (cairo_surface_t *surface, int width, int height) { cairo_paginated_surface_t *paginated_surface; cairo_status_t status; assert (_cairo_surface_is_paginated (surface)); paginated_surface = (cairo_paginated_surface_t *) surface; paginated_surface->width = width; paginated_surface->height = height; cairo_surface_destroy (paginated_surface->meta); paginated_surface->meta = _cairo_meta_surface_create (paginated_surface->content, width, height); status = cairo_surface_status (paginated_surface->meta); if (status) return _cairo_surface_set_error (surface, status); return CAIRO_STATUS_SUCCESS; }