static void link_shader_core_2_0 (GLuint *program, GLuint vert, GLuint frag) { GLint gl_status; *program = glCreateProgram (); glAttachShader (*program, vert); glAttachShader (*program, frag); glLinkProgram (*program); glGetProgramiv (*program, GL_LINK_STATUS, &gl_status); if (gl_status == GL_FALSE) { GLint log_size; glGetProgramiv (*program, GL_INFO_LOG_LENGTH, &log_size); if (0 < log_size) { char *log = _cairo_malloc (log_size); GLint chars; log[log_size - 1] = '\0'; glGetProgramInfoLog (*program, log_size, &chars, log); printf ("OpenGL shader link failed:\n%s\n", log); free (log); } else { printf ("OpenGL shader link failed.\n"); } ASSERT_NOT_REACHED; } }
static void link_shader_arb (GLuint *program, GLuint vert, GLuint frag) { GLint gl_status; *program = glCreateProgramObjectARB (); glAttachObjectARB (*program, vert); glAttachObjectARB (*program, frag); glLinkProgramARB (*program); glGetObjectParameterivARB (*program, GL_OBJECT_LINK_STATUS_ARB, &gl_status); if (gl_status == GL_FALSE) { GLint log_size; glGetObjectParameterivARB (*program, GL_OBJECT_INFO_LOG_LENGTH_ARB, &log_size); if (0 < log_size) { char *log = _cairo_malloc (log_size); GLint chars; log[log_size - 1] = '\0'; glGetInfoLogARB (*program, log_size, &chars, log); printf ("OpenGL shader link failed:\n%s\n", log); free (log); } else { printf ("OpenGL shader link failed.\n"); } ASSERT_NOT_REACHED; } }
static cairo_sub_font_glyph_t * _cairo_sub_font_glyph_create (unsigned long scaled_font_glyph_index, unsigned int subset_id, unsigned int subset_glyph_index, double x_advance, double y_advance, int latin_character, uint32_t unicode, char *utf8, int utf8_len) { cairo_sub_font_glyph_t *sub_font_glyph; sub_font_glyph = _cairo_malloc (sizeof (cairo_sub_font_glyph_t)); if (unlikely (sub_font_glyph == NULL)) { _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); return NULL; } _cairo_sub_font_glyph_init_key (sub_font_glyph, scaled_font_glyph_index); sub_font_glyph->subset_id = subset_id; sub_font_glyph->subset_glyph_index = subset_glyph_index; sub_font_glyph->x_advance = x_advance; sub_font_glyph->y_advance = y_advance; sub_font_glyph->is_latin = (latin_character >= 0); sub_font_glyph->latin_character = latin_character; sub_font_glyph->is_mapped = FALSE; sub_font_glyph->unicode = unicode; sub_font_glyph->utf8 = utf8; sub_font_glyph->utf8_len = utf8_len; return sub_font_glyph; }
void _cairo_win32_debug_dump_hrgn (HRGN rgn, char *header) { RGNDATA *rd; unsigned int z; if (header) fprintf (stderr, "%s\n", header); if (rgn == NULL) { fprintf (stderr, " NULL\n"); } z = GetRegionData(rgn, 0, NULL); rd = (RGNDATA*) _cairo_malloc (z); z = GetRegionData(rgn, z, rd); fprintf (stderr, " %ld rects, bounds: %ld %ld %ld %ld\n", rd->rdh.nCount, rd->rdh.rcBound.left, rd->rdh.rcBound.top, rd->rdh.rcBound.right - rd->rdh.rcBound.left, rd->rdh.rcBound.bottom - rd->rdh.rcBound.top); for (z = 0; z < rd->rdh.nCount; z++) { RECT r = ((RECT*)rd->Buffer)[z]; fprintf (stderr, " [%d]: [%ld %ld %ld %ld]\n", z, r.left, r.top, r.right - r.left, r.bottom - r.top); } free(rd); fflush (stderr); }
static void compile_shader (cairo_gl_context_t *ctx, GLuint *shader, GLenum type, const char *source) { cairo_gl_dispatch_t *dispatch = &ctx->dispatch; GLint success, log_size, num_chars; char *log; *shader = dispatch->CreateShader (type); dispatch->ShaderSource (*shader, 1, &source, 0); dispatch->CompileShader (*shader); dispatch->GetShaderiv (*shader, GL_COMPILE_STATUS, &success); if (success) return; dispatch->GetShaderiv (*shader, GL_INFO_LOG_LENGTH, &log_size); if (log_size < 0) { printf ("OpenGL shader compilation failed.\n"); ASSERT_NOT_REACHED; return; } log = _cairo_malloc (log_size + 1); dispatch->GetShaderInfoLog (*shader, log_size, &num_chars, log); log[num_chars] = '\0'; printf ("OpenGL shader compilation failed. Shader:\n%s\n", source); printf ("OpenGL compilation log:\n%s\n", log); free (log); ASSERT_NOT_REACHED; }
static float * i965_glyphs_accumulate_rectangle (i965_glyphs_t *glyphs) { float *vertices; uint32_t size; size = glyphs->shader.device->rectangle_size; if (unlikely (glyphs->vbo_offset + size > I965_VERTEX_SIZE)) { struct i965_vbo *vbo; vbo = _cairo_malloc (sizeof (struct i965_vbo)); if (unlikely (vbo == NULL)) { /* throw error! */ } glyphs->tail->next = vbo; glyphs->tail = vbo; vbo->next = NULL; vbo->bo = intel_bo_create (&glyphs->shader.device->intel, I965_VERTEX_SIZE, I965_VERTEX_SIZE, FALSE, I915_TILING_NONE, 0); vbo->count = 0; glyphs->vbo_offset = 0; glyphs->vbo_base = intel_bo_map (&glyphs->shader.device->intel, vbo->bo); } vertices = glyphs->vbo_base + glyphs->vbo_offset; glyphs->vbo_offset += size; glyphs->tail->count += 3; return vertices; }
/* OpenGL Core 2.0 API. */ static void compile_shader_core_2_0 (cairo_gl_context_t *ctx, GLuint *shader, GLenum type, const char *text) { const char* strings[1] = { text }; GLint gl_status; cairo_gl_dispatch_t *dispatch = &ctx->dispatch; *shader = dispatch->CreateShader (type); dispatch->ShaderSource (*shader, 1, strings, 0); dispatch->CompileShader (*shader); dispatch->GetShaderiv (*shader, GL_COMPILE_STATUS, &gl_status); if (gl_status == GL_FALSE) { GLint log_size; dispatch->GetShaderiv (*shader, GL_INFO_LOG_LENGTH, &log_size); if (0 < log_size) { char *log = _cairo_malloc (log_size); GLint chars; log[log_size - 1] = '\0'; dispatch->GetShaderInfoLog (*shader, log_size, &chars, log); printf ("OpenGL shader compilation failed. Shader:\n" "%s\n" "OpenGL compilation log:\n" "%s\n", text, log); free (log); } else { printf ("OpenGL shader compilation failed.\n"); } ASSERT_NOT_REACHED; } }
cairo_drm_device_t * _cairo_drm_radeon_device_create (int fd, dev_t dev, int vendor_id, int chip_id) { radeon_device_t *device; uint64_t gart_size, vram_size; cairo_status_t status; if (! radeon_info (fd, &gart_size, &vram_size)) return NULL; device = _cairo_malloc (sizeof (radeon_device_t)); if (device == NULL) return _cairo_drm_device_create_in_error (CAIRO_STATUS_NO_MEMORY); status = radeon_device_init (device, fd); if (unlikely (status)) { free (device); return _cairo_drm_device_create_in_error (status); } device->base.surface.create = radeon_surface_create; device->base.surface.create_for_name = radeon_surface_create_for_name; device->base.surface.create_from_cacheable_image = NULL; device->base.surface.flink = _cairo_drm_surface_flink; device->base.surface.enable_scan_out = NULL; device->base.device.flush = NULL; device->base.device.throttle = NULL; device->base.device.destroy = radeon_device_destroy; device->vram_limit = vram_size; device->gart_limit = gart_size; return _cairo_drm_device_init (&device->base, fd, dev, vendor_id, chip_id, MAX_SIZE); }
/* ARB_shader_objects / ARB_vertex_shader / ARB_fragment_shader extensions API. */ static void compile_shader_arb (GLuint *shader, GLenum type, const char *text) { const char* strings[1] = { text }; GLint gl_status; *shader = glCreateShaderObjectARB (type); glShaderSourceARB (*shader, 1, strings, 0); glCompileShaderARB (*shader); glGetObjectParameterivARB (*shader, GL_OBJECT_COMPILE_STATUS_ARB, &gl_status); if (gl_status == GL_FALSE) { GLint log_size; glGetObjectParameterivARB (*shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &log_size); if (0 < log_size) { char *log = _cairo_malloc (log_size); GLint chars; log[log_size - 1] = '\0'; glGetInfoLogARB (*shader, log_size, &chars, log); printf ("OpenGL shader compilation failed. Shader:\n" "%s\n" "OpenGL compilation log:\n" "%s\n", text, log); free (log); } else { printf ("OpenGL shader compilation failed.\n"); } ASSERT_NOT_REACHED; } }
static cairo_surface_t * radeon_surface_create_internal (cairo_drm_device_t *device, cairo_format_t format, int width, int height) { radeon_surface_t *surface; cairo_status_t status; surface = _cairo_malloc (sizeof (radeon_surface_t)); if (unlikely (surface == NULL)) return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); radeon_surface_init (surface, device, format, width, height); if (width && height) { surface->base.stride = cairo_format_stride_for_width (surface->base.format, width); surface->base.bo = radeon_bo_create (to_radeon_device (&device->base), surface->base.stride * height, RADEON_GEM_DOMAIN_GTT); if (unlikely (surface->base.bo == NULL)) { status = _cairo_drm_surface_finish (&surface->base); free (surface); return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } } return &surface->base.base; }
static cairo_status_t _cairo_sub_font_create (cairo_scaled_font_subsets_t *parent, cairo_scaled_font_t *scaled_font, unsigned int font_id, int max_glyphs_per_subset, cairo_bool_t is_scaled, cairo_bool_t is_composite, cairo_sub_font_t **sub_font_out) { cairo_sub_font_t *sub_font; int i; sub_font = _cairo_malloc (sizeof (cairo_sub_font_t)); if (unlikely (sub_font == NULL)) return _cairo_error (CAIRO_STATUS_NO_MEMORY); sub_font->is_scaled = is_scaled; sub_font->is_composite = is_composite; sub_font->is_user = _cairo_font_face_is_user (scaled_font->font_face); sub_font->reserve_notdef = !sub_font->is_user; _cairo_sub_font_init_key (sub_font, scaled_font); sub_font->parent = parent; sub_font->scaled_font = scaled_font; sub_font->font_id = font_id; sub_font->use_latin_subset = parent->use_latin_subset; /* latin subsets of Type 3 and CID CFF fonts are not supported */ if (sub_font->is_user || sub_font->is_scaled || _cairo_cff_scaled_font_is_cid_cff (scaled_font) ) { sub_font->use_latin_subset = FALSE; } if (sub_font->use_latin_subset) sub_font->current_subset = 1; /* reserve subset 0 for latin glyphs */ else sub_font->current_subset = 0; sub_font->num_glyphs_in_current_subset = 0; sub_font->num_glyphs_in_latin_subset = 0; sub_font->max_glyphs_per_subset = max_glyphs_per_subset; for (i = 0; i < 256; i++) sub_font->latin_char_map[i] = FALSE; sub_font->sub_font_glyphs = _cairo_hash_table_create (NULL); if (unlikely (sub_font->sub_font_glyphs == NULL)) { free (sub_font); return _cairo_error (CAIRO_STATUS_NO_MEMORY); } sub_font->next = NULL; *sub_font_out = sub_font; return CAIRO_STATUS_SUCCESS; }
static cairo_status_t create_string_entry (char *s, cairo_string_entry_t **entry) { *entry = _cairo_malloc (sizeof (cairo_string_entry_t)); if (unlikely (*entry == NULL)) return _cairo_error (CAIRO_STATUS_NO_MEMORY); _cairo_string_init_key (*entry, s); return CAIRO_STATUS_SUCCESS; }
static struct _pool_chunk * _pool_chunk_create(struct pool *pool, size_t size) { struct _pool_chunk *p; p = _cairo_malloc (size + sizeof(struct _pool_chunk)); if (unlikely (NULL == p)) longjmp (*pool->jmp, _cairo_error (CAIRO_STATUS_NO_MEMORY)); return _pool_chunk_init(p, pool->current, size); }
static void link_shader_program (cairo_gl_context_t *ctx, GLuint *program, GLuint vert, GLuint frag) { cairo_gl_dispatch_t *dispatch = &ctx->dispatch; GLint success, log_size, num_chars; char *log; *program = dispatch->CreateProgram (); dispatch->AttachShader (*program, vert); dispatch->AttachShader (*program, frag); dispatch->BindAttribLocation (*program, CAIRO_GL_VERTEX_ATTRIB_INDEX, "Vertex"); dispatch->BindAttribLocation (*program, CAIRO_GL_COLOR_ATTRIB_INDEX, "Color"); dispatch->BindAttribLocation (*program, CAIRO_GL_COVERAGE_ATTRIB_INDEX, "Coverage"); dispatch->BindAttribLocation (*program, CAIRO_GL_TEXCOORD0_ATTRIB_INDEX, "MultiTexCoord0"); dispatch->BindAttribLocation (*program, CAIRO_GL_TEXCOORD1_ATTRIB_INDEX, "MultiTexCoord1"); dispatch->BindAttribLocation (*program, CAIRO_GL_START_COORD0_ATTRIB_INDEX, "StartCoords0"); dispatch->BindAttribLocation (*program, CAIRO_GL_START_COORD1_ATTRIB_INDEX, "StartCoords1"); dispatch->BindAttribLocation (*program, CAIRO_GL_STOP_COORD0_ATTRIB_INDEX, "StopCoords0"); dispatch->BindAttribLocation (*program, CAIRO_GL_STOP_COORD1_ATTRIB_INDEX, "StopCoords1"); dispatch->LinkProgram (*program); dispatch->GetProgramiv (*program, GL_LINK_STATUS, &success); if (success) return; dispatch->GetProgramiv (*program, GL_INFO_LOG_LENGTH, &log_size); if (log_size < 0) { printf ("OpenGL shader link failed.\n"); ASSERT_NOT_REACHED; return; } log = _cairo_malloc (log_size + 1); dispatch->GetProgramInfoLog (*program, log_size, &num_chars, log); log[num_chars] = '\0'; printf ("OpenGL shader link failed:\n%s\n", log); free (log); ASSERT_NOT_REACHED; }
/** * cairo_region_create_rectangles: * @rects: an array of @count rectangles * @count: number of rectangles * * Allocates a new region object containing the union of all given @rects. * * Return value: A newly allocated #cairo_region_t. Free with * cairo_region_destroy(). This function always returns a * valid pointer; if memory cannot be allocated, then a special * error object is returned where all operations on the object do nothing. * You can check for this with cairo_region_status(). * * Since: 1.10 **/ cairo_region_t * cairo_region_create_rectangles (const cairo_rectangle_int_t *rects, int count) { pixman_box32_t stack_pboxes[CAIRO_STACK_ARRAY_LENGTH (pixman_box32_t)]; pixman_box32_t *pboxes = stack_pboxes; cairo_region_t *region; int i; region = _cairo_malloc (sizeof (cairo_region_t)); if (unlikely (region == NULL)) return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); CAIRO_REFERENCE_COUNT_INIT (®ion->ref_count, 1); region->status = CAIRO_STATUS_SUCCESS; if (count == 1) { pixman_region32_init_rect (®ion->rgn, rects->x, rects->y, rects->width, rects->height); return region; } if (count > ARRAY_LENGTH (stack_pboxes)) { pboxes = _cairo_malloc_ab (count, sizeof (pixman_box32_t)); if (unlikely (pboxes == NULL)) { free (region); return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } } for (i = 0; i < count; i++) { pboxes[i].x1 = rects[i].x; pboxes[i].y1 = rects[i].y; pboxes[i].x2 = rects[i].x + rects[i].width; pboxes[i].y2 = rects[i].y + rects[i].height; } i = pixman_region32_init_rects (®ion->rgn, pboxes, count); if (pboxes != stack_pboxes) free (pboxes); if (unlikely (i == 0)) { free (region); return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } return region; }
/** * cairo_region_create: * * Allocates a new empty region object. * * Return value: A newly allocated #cairo_region_t. Free with * cairo_region_destroy(). This function always returns a * valid pointer; if memory cannot be allocated, then a special * error object is returned where all operations on the object do nothing. * You can check for this with cairo_region_status(). * * Since: 1.10 **/ cairo_region_t * cairo_region_create (void) { cairo_region_t *region; region = _cairo_malloc (sizeof (cairo_region_t)); if (region == NULL) return (cairo_region_t *) &_cairo_region_nil; region->status = CAIRO_STATUS_SUCCESS; pixman_region32_init (®ion->rgn); return region; }
/** * cairo_region_create: * * Allocates a new empty region object. * * Return value: A newly allocated #cairo_region_t. Free with * cairo_region_destroy(). This function always returns a * valid pointer; if memory cannot be allocated, then a special * error object is returned where all operations on the object do nothing. * You can check for this with cairo_region_status(). * * Since: 1.10 **/ cairo_region_t * cairo_region_create (void) { cairo_region_t *region; region = _cairo_malloc (sizeof (cairo_region_t)); if (region == NULL) return (cairo_region_t *) &_cairo_region_nil; region->status = CAIRO_STATUS_SUCCESS; CAIRO_REFERENCE_COUNT_INIT (®ion->ref_count, 1); pixman_region32_init (®ion->rgn); return region; }
static cairo_status_t _cairo_sub_font_glyph_lookup_unicode (cairo_scaled_font_t *scaled_font, unsigned long scaled_font_glyph_index, uint32_t *unicode_out, char **utf8_out, int *utf8_len_out) { uint32_t unicode; char buf[8]; int len; cairo_status_t status; /* Do a reverse lookup on the glyph index. unicode is -1 if the * index could not be mapped to a unicode character. */ unicode = -1; status = _cairo_truetype_index_to_ucs4 (scaled_font, scaled_font_glyph_index, &unicode); if (_cairo_status_is_error (status)) return status; if (unicode == (uint32_t)-1 && scaled_font->backend->index_to_ucs4) { status = scaled_font->backend->index_to_ucs4 (scaled_font, scaled_font_glyph_index, &unicode); if (unlikely (status)) return status; } *unicode_out = unicode; *utf8_out = NULL; *utf8_len_out = 0; if (unicode != (uint32_t) -1) { len = _cairo_ucs4_to_utf8 (unicode, buf); if (len > 0) { *utf8_out = _cairo_malloc (len + 1); if (unlikely (*utf8_out == NULL)) return _cairo_error (CAIRO_STATUS_NO_MEMORY); memcpy (*utf8_out, buf, len); (*utf8_out)[len] = 0; *utf8_len_out = len; } } return CAIRO_STATUS_SUCCESS; }
/** * cairo_region_create_rectangle: * @rectangle: a #cairo_rectangle_int_t * * Allocates a new region object containing @rectangle. * * Return value: A newly allocated #cairo_region_t. Free with * cairo_region_destroy(). This function always returns a * valid pointer; if memory cannot be allocated, then a special * error object is returned where all operations on the object do nothing. * You can check for this with cairo_region_status(). * * Since: 1.10 **/ cairo_region_t * cairo_region_create_rectangle (const cairo_rectangle_int_t *rectangle) { cairo_region_t *region; region = _cairo_malloc (sizeof (cairo_region_t)); if (region == NULL) return (cairo_region_t *) &_cairo_region_nil; region->status = CAIRO_STATUS_SUCCESS; pixman_region32_init_rect (®ion->rgn, rectangle->x, rectangle->y, rectangle->width, rectangle->height); return region; }
static cairo_surface_t * attach_proxy (cairo_surface_t *source, cairo_surface_t *target) { struct proxy *proxy; proxy = _cairo_malloc (sizeof (*proxy)); if (unlikely (proxy == NULL)) return _cairo_surface_create_in_error (CAIRO_STATUS_NO_MEMORY); _cairo_surface_init (&proxy->base, &proxy_backend, NULL, target->content, target->is_vector); proxy->target = target; _cairo_surface_attach_snapshot (source, &proxy->base, NULL); return &proxy->base; }
static cairo_surface_t * radeon_surface_create_for_name (cairo_drm_device_t *device, unsigned int name, cairo_format_t format, int width, int height, int stride) { radeon_surface_t *surface; cairo_status_t status; switch (format) { default: case CAIRO_FORMAT_INVALID: case CAIRO_FORMAT_A1: case CAIRO_FORMAT_RGB16_565: return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_FORMAT)); case CAIRO_FORMAT_ARGB32: case CAIRO_FORMAT_RGB24: case CAIRO_FORMAT_A8: break; } if (stride < cairo_format_stride_for_width (format, width)) return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_INVALID_STRIDE)); surface = _cairo_malloc (sizeof (radeon_surface_t)); if (unlikely (surface == NULL)) return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); radeon_surface_init (surface, device, format, width, height); if (width && height) { surface->base.stride = stride; surface->base.bo = radeon_bo_create_for_name (to_radeon_device (&device->base), name); if (unlikely (surface->base.bo == NULL)) { status = _cairo_drm_surface_finish (&surface->base); free (surface); return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } } return &surface->base.base; }
/** * cairo_region_create_rectangle: * @rectangle: a #cairo_rectangle_int_t * * Allocates a new region object containing @rectangle. * * Return value: A newly allocated #cairo_region_t. Free with * cairo_region_destroy(). This function always returns a * valid pointer; if memory cannot be allocated, then a special * error object is returned where all operations on the object do nothing. * You can check for this with cairo_region_status(). * * Since: 1.10 **/ cairo_region_t * cairo_region_create_rectangle (const cairo_rectangle_int_t *rectangle) { cairo_region_t *region; region = _cairo_malloc (sizeof (cairo_region_t)); if (unlikely (region == NULL)) return (cairo_region_t *) &_cairo_region_nil; region->status = CAIRO_STATUS_SUCCESS; CAIRO_REFERENCE_COUNT_INIT (®ion->ref_count, 1); pixman_region32_init_rect (®ion->rgn, rectangle->x, rectangle->y, rectangle->width, rectangle->height); return region; }
cairo_surface_t * _cairo_null_surface_create (cairo_content_t content) { cairo_surface_t *surface; surface = _cairo_malloc (sizeof (cairo_surface_t)); if (unlikely (surface == NULL)) { return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } _cairo_surface_init (surface, &cairo_null_surface_backend, NULL, /* device */ content, TRUE); /* is_vector */ return surface; }
static cairo_skia_surface_t * _cairo_skia_surface_create_internal (SkBitmap::Config config, bool opaque, unsigned char *data, int width, int height, int stride) { cairo_skia_surface_t *surface; pixman_image_t *pixman_image; pixman_format_code_t pixman_format; SkColorType colorType; surface = (cairo_skia_surface_t *) _cairo_malloc (sizeof (cairo_skia_surface_t)); if (unlikely (surface == NULL)) return (cairo_skia_surface_t *) _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); pixman_format = sk_config_to_pixman_format_code (config, opaque); pixman_image = pixman_image_create_bits (pixman_format, width, height, (uint32_t *) data, stride); if (unlikely (pixman_image == NULL)) { free (surface); return (cairo_skia_surface_t *) _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } _cairo_surface_init (&surface->image.base, &cairo_skia_surface_backend, NULL, /* device */ _cairo_content_from_pixman_format (pixman_format)); _cairo_image_surface_init (&surface->image, pixman_image, pixman_format); surface->bitmap = new SkBitmap; colorType = SkBitmapConfigToColorType(config); surface->bitmap->setAlphaType (opaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); surface->bitmap->setInfo (SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType), surface->image.stride); surface->bitmap->setPixels (surface->image.data); surface->image.base.is_clear = data == NULL; return surface; }
cairo_region_t * _cairo_region_create_from_boxes (const cairo_box_t *boxes, int count) { cairo_region_t *region; region = _cairo_malloc (sizeof (cairo_region_t)); if (unlikely (region == NULL)) return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); CAIRO_REFERENCE_COUNT_INIT (®ion->ref_count, 1); region->status = CAIRO_STATUS_SUCCESS; if (! pixman_region32_init_rects (®ion->rgn, (pixman_box32_t *)boxes, count)) { free (region); return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } return region; }
static void link_shader_core_2_0 (cairo_gl_context_t *ctx, GLuint *program, GLuint vert, GLuint frag) { GLint gl_status; cairo_gl_dispatch_t *dispatch = &ctx->dispatch; *program = dispatch->CreateProgram (); dispatch->AttachShader (*program, vert); dispatch->AttachShader (*program, frag); dispatch->BindAttribLocation (*program, CAIRO_GL_VERTEX_ATTRIB_INDEX, "Vertex"); dispatch->BindAttribLocation (*program, CAIRO_GL_COLOR_ATTRIB_INDEX, "Color"); dispatch->BindAttribLocation (*program, CAIRO_GL_TEXCOORD0_ATTRIB_INDEX, "MultiTexCoord0"); dispatch->BindAttribLocation (*program, CAIRO_GL_TEXCOORD1_ATTRIB_INDEX, "MultiTexCoord1"); dispatch->LinkProgram (*program); dispatch->GetProgramiv (*program, GL_LINK_STATUS, &gl_status); if (gl_status == GL_FALSE) { GLint log_size; dispatch->GetProgramiv (*program, GL_INFO_LOG_LENGTH, &log_size); if (0 < log_size) { char *log = _cairo_malloc (log_size); GLint chars; log[log_size - 1] = '\0'; dispatch->GetProgramInfoLog (*program, log_size, &chars, log); printf ("OpenGL shader link failed:\n%s\n", log); free (log); } else { printf ("OpenGL shader link failed.\n"); } ASSERT_NOT_REACHED; } }
cairo_t * _cairo_default_context_create (void *target) { cairo_default_context_t *cr; cairo_status_t status; cr = _freed_pool_get (&context_pool); if (unlikely (cr == NULL)) { cr = _cairo_malloc (sizeof (cairo_default_context_t)); if (unlikely (cr == NULL)) return _cairo_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); } status = _cairo_default_context_init (cr, target); if (unlikely (status)) { _freed_pool_put (&context_pool, cr); return _cairo_create_in_error (status); } return &cr->base; }
cairo_path_t * _cairo_path_create_in_error (cairo_status_t status) { cairo_path_t *path; /* special case NO_MEMORY so as to avoid allocations */ if (status == CAIRO_STATUS_NO_MEMORY) return (cairo_path_t*) &_cairo_path_nil; path = _cairo_malloc (sizeof (cairo_path_t)); if (unlikely (path == NULL)) { _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); return (cairo_path_t*) &_cairo_path_nil; } path->num_data = 0; path->data = NULL; path->status = status; return path; }
cairo_surface_t * _cairo_analysis_surface_create (cairo_surface_t *target) { cairo_analysis_surface_t *surface; cairo_status_t status; status = target->status; if (unlikely (status)) return _cairo_surface_create_in_error (status); surface = _cairo_malloc (sizeof (cairo_analysis_surface_t)); if (unlikely (surface == NULL)) return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY)); /* I believe the content type here is truly arbitrary. I'm quite * sure nothing will ever use this value. */ _cairo_surface_init (&surface->base, &cairo_analysis_surface_backend, NULL, /* device */ CAIRO_CONTENT_COLOR_ALPHA, target->is_vector); cairo_matrix_init_identity (&surface->ctm); surface->has_ctm = FALSE; surface->target = cairo_surface_reference (target); surface->first_op = TRUE; surface->has_supported = FALSE; surface->has_unsupported = FALSE; _cairo_region_init (&surface->supported_region); _cairo_region_init (&surface->fallback_region); surface->page_bbox.p1.x = 0; surface->page_bbox.p1.y = 0; surface->page_bbox.p2.x = 0; surface->page_bbox.p2.y = 0; return &surface->base; }
static cairo_path_t * _cairo_path_create_internal (cairo_path_fixed_t *path_fixed, cairo_t *cr, cairo_bool_t flatten) { cairo_path_t *path; path = _cairo_malloc (sizeof (cairo_path_t)); if (unlikely (path == NULL)) { _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); return (cairo_path_t*) &_cairo_path_nil; } path->num_data = _cairo_path_count (path, path_fixed, cairo_get_tolerance (cr), flatten); if (path->num_data < 0) { free (path); return (cairo_path_t*) &_cairo_path_nil; } if (path->num_data) { path->data = _cairo_malloc_ab (path->num_data, sizeof (cairo_path_data_t)); if (unlikely (path->data == NULL)) { free (path); _cairo_error_throw (CAIRO_STATUS_NO_MEMORY); return (cairo_path_t*) &_cairo_path_nil; } path->status = _cairo_path_populate (path, path_fixed, cr, flatten); } else { path->data = NULL; path->status = CAIRO_STATUS_SUCCESS; } return path; }