static VALUE cr_options_equal (VALUE self, VALUE other) { if (!rb_cairo__is_kind_of (other, rb_cCairo_FontOptions)) return Qfalse; return CBOOL2RVAL (cairo_font_options_equal (_SELF (self), _SELF (other))); }
static int caml_cairo_font_options_compare(value v1, value v2) { cairo_font_options_t *fo1 = FONT_OPTIONS_VAL(v1); cairo_font_options_t *fo2 = FONT_OPTIONS_VAL(v2); /* fo1 == fo2 => cairo_font_options_equal(fo1, fo2) ; thus this remains a total order. */ if (cairo_font_options_equal(fo1, fo2)) return(0); else if (fo1 < fo2) return(-1); else return(1); }
int IoCairoFontOptions_compare(IoCairoFontOptions *self, IoCairoFontOptions *other) { cairo_font_options_t *options = OPTIONS(self); cairo_font_options_t *otherOptions = OPTIONS(other); if (!options && !otherOptions) return 1; if (!options || !otherOptions) return 0; return cairo_font_options_equal(options, otherOptions); }
static cairo_bool_t _cairo_scaled_font_keys_equal (void *abstract_key_a, void *abstract_key_b) { cairo_scaled_font_t *key_a = abstract_key_a; cairo_scaled_font_t *key_b = abstract_key_b; return (key_a->font_face == key_b->font_face && memcmp ((unsigned char *)(&key_a->font_matrix.xx), (unsigned char *)(&key_b->font_matrix.xx), sizeof(cairo_matrix_t)) == 0 && memcmp ((unsigned char *)(&key_a->ctm.xx), (unsigned char *)(&key_b->ctm.xx), sizeof(double) * 4) == 0 && cairo_font_options_equal (&key_a->options, &key_b->options)); }
static void ar_card_theme_preimage_set_font_options (ArCardTheme *card_theme, const cairo_font_options_t *font_options) { ArCardThemePreimage *theme = (ArCardThemePreimage *) card_theme; if (font_options && theme->font_options && cairo_font_options_equal (font_options, theme->font_options)) return; if (theme->font_options) { cairo_font_options_destroy (theme->font_options); } if (font_options) { theme->font_options = cairo_font_options_copy (font_options); } else { theme->font_options = NULL; } _ar_card_theme_preimage_clear_sized_theme_data (theme); _ar_card_theme_emit_changed (card_theme); }
cairo_status_t _cairo_surface_wrapper_show_text_glyphs (cairo_surface_wrapper_t *wrapper, cairo_operator_t op, const cairo_pattern_t *source, const char *utf8, int utf8_len, const cairo_glyph_t *glyphs, int num_glyphs, const cairo_text_cluster_t *clusters, int num_clusters, cairo_text_cluster_flags_t cluster_flags, cairo_scaled_font_t *scaled_font, const cairo_clip_t *clip) { cairo_status_t status; cairo_clip_t *dev_clip; cairo_glyph_t stack_glyphs [CAIRO_STACK_ARRAY_LENGTH(cairo_glyph_t)]; cairo_glyph_t *dev_glyphs = stack_glyphs; cairo_scaled_font_t *dev_scaled_font = scaled_font; cairo_pattern_union_t source_copy; cairo_font_options_t options; if (unlikely (wrapper->target->status)) return wrapper->target->status; dev_clip = _cairo_surface_wrapper_get_clip (wrapper, clip); if (_cairo_clip_is_all_clipped (dev_clip)) return CAIRO_INT_STATUS_NOTHING_TO_DO; cairo_surface_get_font_options (wrapper->target, &options); cairo_font_options_merge (&options, &scaled_font->options); if (wrapper->needs_transform) { cairo_matrix_t m; int i; _cairo_surface_wrapper_get_transform (wrapper, &m); if (! _cairo_matrix_is_translation (&wrapper->transform)) { cairo_matrix_t ctm; /* XXX No device-transform? A bug in the tangle of layers? */ _cairo_matrix_multiply (&ctm, &wrapper->transform, &scaled_font->ctm); dev_scaled_font = cairo_scaled_font_create (scaled_font->font_face, &scaled_font->font_matrix, &ctm, &options); } if (num_glyphs > ARRAY_LENGTH (stack_glyphs)) { dev_glyphs = _cairo_malloc_ab (num_glyphs, sizeof (cairo_glyph_t)); if (unlikely (dev_glyphs == NULL)) { status = _cairo_error (CAIRO_STATUS_NO_MEMORY); goto FINISH; } } for (i = 0; i < num_glyphs; i++) { dev_glyphs[i] = glyphs[i]; cairo_matrix_transform_point (&m, &dev_glyphs[i].x, &dev_glyphs[i].y); } status = cairo_matrix_invert (&m); assert (status == CAIRO_STATUS_SUCCESS); _copy_transformed_pattern (&source_copy.base, source, &m); source = &source_copy.base; } else { if (! cairo_font_options_equal (&options, &scaled_font->options)) { dev_scaled_font = cairo_scaled_font_create (scaled_font->font_face, &scaled_font->font_matrix, &scaled_font->ctm, &options); } /* show_text_glyphs is special because _cairo_surface_show_text_glyphs is allowed * to modify the glyph array that's passed in. We must always * copy the array before handing it to the backend. */ if (num_glyphs > ARRAY_LENGTH (stack_glyphs)) { dev_glyphs = _cairo_malloc_ab (num_glyphs, sizeof (cairo_glyph_t)); if (unlikely (dev_glyphs == NULL)) { status = _cairo_error (CAIRO_STATUS_NO_MEMORY); goto FINISH; } } memcpy (dev_glyphs, glyphs, sizeof (cairo_glyph_t) * num_glyphs); } status = _cairo_surface_show_text_glyphs (wrapper->target, op, source, utf8, utf8_len, dev_glyphs, num_glyphs, clusters, num_clusters, cluster_flags, dev_scaled_font, dev_clip); FINISH: _cairo_clip_destroy (dev_clip); if (dev_glyphs != stack_glyphs) free (dev_glyphs); if (dev_scaled_font != scaled_font) cairo_scaled_font_destroy (dev_scaled_font); return status; }
bool FontOptions::equal( const FontOptions *other ) { return static_cast<bool>( cairo_font_options_equal( mCairoFontOptions, const_cast<FontOptions *>( other )->getCairoFontOptions() ) != 0 ); }