本文整理汇总了C++中cairo_surface_reference函数的典型用法代码示例。如果您正苦于以下问题:C++ cairo_surface_reference函数的具体用法?C++ cairo_surface_reference怎么用?C++ cairo_surface_reference使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cairo_surface_reference函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: draw_thread
static void *
draw_thread (void *arg)
{
const char *text = "Hello world. ";
thread_data_t *thread_data = arg;
cairo_surface_t *surface;
cairo_font_extents_t extents;
cairo_t *cr;
int i;
cr = cairo_create (thread_data->target);
cairo_surface_destroy (thread_data->target);
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_paint (cr);
cairo_set_source_rgb (cr, 0, 0, 0);
cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Serif",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, NUM_ITERATIONS);
cairo_font_extents (cr, &extents);
cairo_move_to (cr, 1, HEIGHT - extents.descent - 1);
for (i = 0; i < NUM_ITERATIONS; i++) {
char buf[2];
cairo_select_font_face (cr, CAIRO_TEST_FONT_FAMILY " Serif",
CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size (cr, i);
buf[0] = text[i%strlen(text)];
buf[1] = '\0';
cairo_show_text (cr, buf);
}
surface = cairo_surface_reference (cairo_get_target (cr));
cairo_destroy (cr);
return surface;
}
示例2: _cairo_qt_surface_acquire_source_image
static cairo_status_t
_cairo_qt_surface_acquire_source_image (void *abstract_surface,
cairo_image_surface_t **image_out,
void **image_extra)
{
cairo_qt_surface_t *qs = (cairo_qt_surface_t *) abstract_surface;
D(fprintf(stderr, "q[%p] acquire_source_image\n", abstract_surface));
*image_extra = NULL;
if (qs->image_equiv) {
*image_out = (cairo_image_surface_t*)
cairo_surface_reference (qs->image_equiv);
return CAIRO_STATUS_SUCCESS;
}
if (qs->pixmap) {
QImage *qimg = new QImage(qs->pixmap->toImage());
cairo_surface_t *image;
cairo_status_t status;
image = cairo_image_surface_create_for_data (qimg->bits(),
_cairo_format_from_qimage_format (qimg->format()),
qimg->width(), qimg->height(),
qimg->bytesPerLine());
status = _cairo_user_data_array_set_data (&image->user_data,
(const cairo_user_data_key_t *)&_qimg_destroy,
qimg,
_qimg_destroy);
if (status) {
cairo_surface_destroy (image);
return status;
}
*image_out = (cairo_image_surface_t *) image;
return CAIRO_STATUS_SUCCESS;
}
return _cairo_error (CAIRO_STATUS_NO_MEMORY);
}
示例3: _cairo_clip_init_copy
void
_cairo_clip_init_copy (cairo_clip_t *clip, cairo_clip_t *other)
{
clip->mode = other->mode;
clip->surface = cairo_surface_reference (other->surface);
clip->surface_rect = other->surface_rect;
clip->serial = other->serial;
if (other->region == NULL) {
clip->region = other->region;
} else {
clip->region = pixman_region_create ();
pixman_region_copy (clip->region, other->region);
}
clip->path = _cairo_clip_path_reference (other->path);
}
示例4: _cairo_surface_create_for_rectangle_int
cairo_surface_t *
_cairo_surface_create_for_rectangle_int (cairo_surface_t *target,
const cairo_rectangle_int_t *extents)
{
cairo_surface_subsurface_t *surface;
if (unlikely (target->status))
return _cairo_surface_create_in_error (target->status);
if (unlikely (target->finished))
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
assert (target->backend->type != CAIRO_SURFACE_TYPE_SUBSURFACE);
surface = malloc (sizeof (cairo_surface_subsurface_t));
if (unlikely (surface == NULL))
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
_cairo_surface_init (&surface->base,
&_cairo_surface_subsurface_backend,
NULL, /* device */
target->content,
target->is_vector);
surface->extents = *extents;
surface->extents.x *= target->device_transform.xx;
surface->extents.y *= target->device_transform.yy;
surface->extents.width *= target->device_transform.xx;
surface->extents.height *= target->device_transform.yy;
surface->extents.x += target->device_transform.x0;
surface->extents.y += target->device_transform.y0;
surface->target = cairo_surface_reference (target);
surface->base.type = surface->target->type;
surface->snapshot = NULL;
cairo_surface_set_device_scale (&surface->base,
target->device_transform.xx,
target->device_transform.yy);
return &surface->base;
}
示例5: _cairo_default_context_pop_group
static cairo_pattern_t *
_cairo_default_context_pop_group (void *abstract_cr)
{
cairo_default_context_t *cr = abstract_cr;
cairo_surface_t *group_surface;
cairo_pattern_t *group_pattern;
cairo_surface_t *parent_surface;
cairo_matrix_t group_matrix;
cairo_status_t status;
/* Verify that we are at the right nesting level */
if (unlikely (! _cairo_gstate_is_group (cr->gstate)))
return _cairo_pattern_create_in_error (CAIRO_STATUS_INVALID_POP_GROUP);
/* Get a reference to the active surface before restoring */
group_surface = _cairo_gstate_get_target (cr->gstate);
group_surface = cairo_surface_reference (group_surface);
status = _cairo_gstate_restore (&cr->gstate, &cr->gstate_freelist);
assert (status == CAIRO_STATUS_SUCCESS);
parent_surface = _cairo_gstate_get_target (cr->gstate);
group_pattern = cairo_pattern_create_for_surface (group_surface);
status = group_pattern->status;
if (unlikely (status))
goto done;
_cairo_gstate_get_matrix (cr->gstate, &group_matrix);
cairo_pattern_set_matrix (group_pattern, &group_matrix);
/* If we have a current path, we need to adjust it to compensate for
* the device offset just removed. */
_cairo_path_fixed_translate (cr->path,
_cairo_fixed_from_int (parent_surface->device_transform.x0 - group_surface->device_transform.x0),
_cairo_fixed_from_int (parent_surface->device_transform.y0 - group_surface->device_transform.y0));
done:
cairo_surface_destroy (group_surface);
return group_pattern;
}
示例6: set_surface
static void
set_surface(HippoCanvasImage *image,
cairo_surface_t *surface)
{
if (surface != image->surface) {
int old_width, old_height;
gboolean request_changed = FALSE;
#if 0
/* The FC5 version of Cairo doesn't have this API */
if (cairo_surface_get_type(surface) != CAIRO_SURFACE_TYPE_IMAGE) {
g_warning("Image canvas item only supports image surfaces");
return;
}
#endif
old_width = image->surface ? cairo_image_surface_get_width(image->surface) : 0;
old_height = image->surface ? cairo_image_surface_get_height(image->surface) : 0;
if (surface)
cairo_surface_reference(surface);
if (image->surface)
cairo_surface_destroy(image->surface);
image->surface = surface;
if (image->scale_width < 0) {
int width = image->surface ? cairo_image_surface_get_width(image->surface) : 0;
if (width != old_width)
request_changed = TRUE;
}
if (image->scale_height < 0) {
int height = image->surface ? cairo_image_surface_get_height(image->surface) : 0;
if (height != old_height)
request_changed = TRUE;
}
if (request_changed)
hippo_canvas_item_emit_request_changed(HIPPO_CANVAS_ITEM(image));
hippo_canvas_item_emit_paint_needed(HIPPO_CANVAS_ITEM(image), 0, 0, -1, -1);
g_object_notify(G_OBJECT(image), "image");
}
}
示例7: generate_reference
static void
generate_reference (double ppi_x, double ppi_y, const char *filename)
{
cairo_surface_t *surface, *target;
cairo_t *cr;
cairo_status_t status;
surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24,
SIZE*ppi_x/72, SIZE*ppi_y/72);
cr = cairo_create (surface);
cairo_surface_destroy (surface);
#if SET_TOLERANCE
cairo_set_tolerance (cr, 3.0);
#endif
cairo_save (cr); {
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_paint (cr);
} cairo_restore (cr);
cairo_scale (cr, ppi_x/72., ppi_y/72.);
draw (cr, SIZE, SIZE);
surface = cairo_surface_reference (cairo_get_target (cr));
cairo_destroy (cr);
target = cairo_image_surface_create (CAIRO_FORMAT_RGB24, SIZE, SIZE);
cr = cairo_create (target);
cairo_scale (cr, 72./ppi_x, 72./ppi_y);
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
status = cairo_surface_write_to_png (cairo_get_target (cr), filename);
cairo_destroy (cr);
if (status) {
fprintf (stderr, "Failed to generate reference image '%s': %s\n",
filename, cairo_status_to_string (status));
exit (1);
}
}
示例8: surface_create
/* For each of circle and fallback_circle we draw:
* - two overlapping
* - one isolated
* - one off the page
* - one overlapping the edge of the page.
*
* We also draw a circle and fallback_circle overlapping each other.
*
* Circles are drawn in green. An opaque color and CAIRO_OPERATOR_OVER
* is used to ensure they will be emitted as a vectors in PS/PDF.
*
* Fallback circles are drawn in red. CAIRO_OPERATOR_ADD is used to
* ensure they will be emitted as a fallback image in PS/PDF.
*
* In order to trigger a fallback for SVG, we need to use a surface with
* REFLECT.
*/
static cairo_surface_t *
surface_create (cairo_t *target)
{
cairo_surface_t *surface;
cairo_t *cr;
surface = cairo_surface_create_similar (cairo_get_target (target),
CAIRO_CONTENT_COLOR_ALPHA,
CIRCLE_SIZE, CIRCLE_SIZE);
cr = cairo_create (surface);
cairo_surface_destroy (surface);
cairo_set_source_rgb (cr, 1.0, 0.0, 0.0);
draw_circle (cr, CIRCLE_SIZE/2, CIRCLE_SIZE/2);
surface = cairo_surface_reference (cairo_get_target (cr));
cairo_destroy (cr);
return surface;
}
示例9: XOJ_CHECK_TYPE
Element* Image::clone()
{
XOJ_CHECK_TYPE(Image);
Image* img = new Image();
img->x = this->x;
img->y = this->y;
img->setColor(this->getColor());
img->width = this->width;
img->height = this->height;
img->data = (unsigned char*)g_malloc(this->dLen);
img->dLen = this->dLen;
memcpy(img->data, this->data, this->dLen);
img->image = cairo_surface_reference(this->image);
return img;
}
示例10: gjs_cairo_surface_construct
/**
* gjs_cairo_surface_construct:
* @context: the context
* @object: object to construct
* @surface: cairo_surface to attach to the object
*
* Constructs a surface wrapper giving an empty JSObject and a
* cairo surface. A reference to @surface will be taken.
*
* This is mainly used for subclasses where object is already created.
*/
void
gjs_cairo_surface_construct(JSContext *context,
JSObject *object,
cairo_surface_t *surface)
{
GjsCairoSurface *priv;
g_return_if_fail(context != NULL);
g_return_if_fail(object != NULL);
g_return_if_fail(surface != NULL);
priv = g_slice_new0(GjsCairoSurface);
g_assert(priv_from_js(context, object) == NULL);
JS_SetPrivate(context, object, priv);
priv->context = context;
priv->object = object;
priv->surface = cairo_surface_reference(surface);
}
示例11: display_get_pointer_surface
cairo_surface_t *
display_get_pointer_surface(struct display *display, int pointer,
int *width, int *height,
int *hotspot_x, int *hotspot_y)
{
cairo_surface_t *surface;
surface = display->pointer_surfaces[pointer];
#if HAVE_CAIRO_EGL
*width = cairo_gl_surface_get_width(surface);
*height = cairo_gl_surface_get_height(surface);
#else
*width = cairo_image_surface_get_width(surface);
*height = cairo_image_surface_get_height(surface);
#endif
*hotspot_x = pointer_images[pointer].hotspot_x;
*hotspot_y = pointer_images[pointer].hotspot_y;
return cairo_surface_reference(surface);
}
示例12: scale_data_new
static ScaleData *
scale_data_new (cairo_surface_t *image,
int new_width,
int new_height,
scale_filter_t quality,
GCancellable *cancellable)
{
ScaleData *scale_data;
scale_data = g_new0 (ScaleData, 1);
scale_data->original = cairo_surface_reference (image);
scale_data->new_width = new_width;
scale_data->new_height = new_height;
scale_data->quality = quality;
scale_data->scaled = NULL;
scale_data->task = gth_async_task_new (NULL, NULL, NULL, NULL, NULL);
gth_task_set_cancellable (scale_data->task, cancellable);
return scale_data;
}
示例13: clone_similar_surface
static cairo_surface_t *
clone_similar_surface (cairo_surface_t * target, cairo_surface_t *surface)
{
cairo_t *cr;
cairo_surface_t *similar;
similar = cairo_surface_create_similar (target,
cairo_surface_get_content (surface),
cairo_image_surface_get_width (surface),
cairo_image_surface_get_height (surface));
cr = cairo_create (similar);
cairo_surface_destroy (similar);
cairo_set_source_surface (cr, surface, 0, 0);
cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
cairo_paint (cr);
similar = cairo_surface_reference (cairo_get_target (cr));
cairo_destroy (cr);
return similar;
}
示例14: pixbuf_to_cairo_surface
static cairo_surface_t *
pixbuf_to_cairo_surface (GdkPixbuf *pixbuf)
{
cairo_surface_t *dummy_surface;
cairo_pattern_t *pattern;
cairo_surface_t *surface;
cairo_t *cr;
dummy_surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1, 1);
cr = cairo_create (dummy_surface);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
pattern = cairo_get_source (cr);
cairo_pattern_get_surface (pattern, &surface);
cairo_surface_reference (surface);
cairo_destroy (cr);
cairo_surface_destroy (dummy_surface);
return surface;
}
示例15: radeon_surface_acquire_source_image
static cairo_status_t
radeon_surface_acquire_source_image (void *abstract_surface,
cairo_image_surface_t **image_out,
void **image_extra)
{
radeon_surface_t *surface = abstract_surface;
cairo_surface_t *image;
cairo_status_t status;
/* XXX batch flush */
if (surface->base.fallback != NULL) {
image = surface->base.fallback;
goto DONE;
}
image = _cairo_surface_has_snapshot (&surface->base.base,
&_cairo_image_surface_backend);
if (image != NULL)
goto DONE;
if (surface->base.base.backend->flush != NULL) {
status = surface->base.base.backend->flush (surface);
if (unlikely (status))
return status;
}
image = radeon_bo_get_image (to_radeon_device (surface->base.base.device),
to_radeon_bo (surface->base.bo),
&surface->base);
status = image->status;
if (unlikely (status))
return status;
_cairo_surface_attach_snapshot (&surface->base.base, image, cairo_surface_destroy);
DONE:
*image_out = (cairo_image_surface_t *) cairo_surface_reference (image);
*image_extra = NULL;
return CAIRO_STATUS_SUCCESS;
}