1# HG changeset patch 2# User Mats Palmgren <mats@mozilla.com> 3# Parent f3483af8ecf997453064201c49c48a682c7f3c29 4Bug 1377257 part 1 - Add cairo_scaled_font_get_hint_metrics to avoid malloc/free that is required to use cairo_scaled_font_get_font_options. r=jfkthame 5 6diff --git a/gfx/cairo/add-cairo_scaled_font_get_hint_metrics b/gfx/cairo/add-cairo_scaled_font_get_hint_metrics 7new file mode 100644 8--- /dev/null 9+++ b/gfx/cairo/add-cairo_scaled_font_get_hint_metrics 10@@ -0,0 +1,82 @@ 11+# HG changeset patch 12+# User Mats Palmgren <mats@mozilla.com> 13+# Parent f3483af8ecf997453064201c49c48a682c7f3c29 14+Bug 1377257 part 1 - Add cairo_scaled_font_get_hint_metrics to avoid malloc/free that is required to use cairo_scaled_font_get_font_options. r=jfkthame 15+ 16+diff --git a/gfx/cairo/cairo/src/cairo-rename.h b/gfx/cairo/cairo/src/cairo-rename.h 17+--- a/gfx/cairo/cairo/src/cairo-rename.h 18++++ b/gfx/cairo/cairo/src/cairo-rename.h 19+@@ -262,16 +262,17 @@ 20+ #define cairo_scale _moz_cairo_scale 21+ #define cairo_scaled_font_create _moz_cairo_scaled_font_create 22+ #define cairo_scaled_font_destroy _moz_cairo_scaled_font_destroy 23+ #define cairo_scaled_font_extents _moz_cairo_scaled_font_extents 24+ #define cairo_scaled_font_get_ctm _moz_cairo_scaled_font_get_ctm 25+ #define cairo_scaled_font_get_font_face _moz_cairo_scaled_font_get_font_face 26+ #define cairo_scaled_font_get_font_matrix _moz_cairo_scaled_font_get_font_matrix 27+ #define cairo_scaled_font_get_font_options _moz_cairo_scaled_font_get_font_options 28++#define cairo_scaled_font_get_hint_metrics _moz_cairo_scaled_font_get_hint_metrics 29+ #define cairo_scaled_font_get_reference_count _moz_cairo_scaled_font_get_reference_count 30+ #define cairo_scaled_font_get_scale_matrix _moz_cairo_scaled_font_get_scale_matrix 31+ #define cairo_scaled_font_get_type _moz_cairo_scaled_font_get_type 32+ #define cairo_scaled_font_get_user_data _moz_cairo_scaled_font_get_user_data 33+ #define cairo_scaled_font_glyph_extents _moz_cairo_scaled_font_glyph_extents 34+ #define cairo_scaled_font_reference _moz_cairo_scaled_font_reference 35+ #define cairo_scaled_font_set_user_data _moz_cairo_scaled_font_set_user_data 36+ #define cairo_scaled_font_status _moz_cairo_scaled_font_status 37+diff --git a/gfx/cairo/cairo/src/cairo-scaled-font.c b/gfx/cairo/cairo/src/cairo-scaled-font.c 38+--- a/gfx/cairo/cairo/src/cairo-scaled-font.c 39++++ b/gfx/cairo/cairo/src/cairo-scaled-font.c 40+@@ -2983,8 +2983,28 @@ cairo_scaled_font_get_font_options (cair 41+ if (scaled_font->status) { 42+ _cairo_font_options_init_default (options); 43+ return; 44+ } 45+ 46+ _cairo_font_options_init_copy (options, &scaled_font->options); 47+ } 48+ slim_hidden_def (cairo_scaled_font_get_font_options); 49++ 50++/** 51++ * cairo_scaled_font_get_hint_metrics: 52++ * @scaled_font: a #cairo_scaled_font_t 53++ * 54++ * Mozilla extension since the required malloc/free to use 55++ * cairo_scaled_font_get_font_options() above is too slow. 56++ **/ 57++cairo_public cairo_hint_metrics_t 58++cairo_scaled_font_get_hint_metrics (cairo_scaled_font_t *scaled_font) 59++{ 60++ cairo_font_options_t options; 61++ if (scaled_font->status) { 62++ _cairo_font_options_init_default (&options); 63++ } else { 64++ _cairo_font_options_init_copy (&options, &scaled_font->options); 65++ } 66++ return options.hint_metrics; 67++} 68++slim_hidden_def (cairo_scaled_font_get_hint_metrics); 69+diff --git a/gfx/cairo/cairo/src/cairo.h b/gfx/cairo/cairo/src/cairo.h 70+--- a/gfx/cairo/cairo/src/cairo.h 71++++ b/gfx/cairo/cairo/src/cairo.h 72+@@ -1493,16 +1493,21 @@ cairo_scaled_font_get_ctm (cairo_scaled_ 73+ cairo_public void 74+ cairo_scaled_font_get_scale_matrix (cairo_scaled_font_t *scaled_font, 75+ cairo_matrix_t *scale_matrix); 76+ 77+ cairo_public void 78+ cairo_scaled_font_get_font_options (cairo_scaled_font_t *scaled_font, 79+ cairo_font_options_t *options); 80+ 81++/* mozilla extension, see https://bugzilla.mozilla.org/show_bug.cgi?id=1377257 */ 82++cairo_public cairo_hint_metrics_t 83++cairo_scaled_font_get_hint_metrics (cairo_scaled_font_t *scaled_font); 84++ 85++ 86+ 87+ /* Toy fonts */ 88+ 89+ cairo_public cairo_font_face_t * 90+ cairo_toy_font_face_create (const char *family, 91+ cairo_font_slant_t slant, 92+ cairo_font_weight_t weight); 93+ 94diff --git a/gfx/cairo/cairo/src/cairo-rename.h b/gfx/cairo/cairo/src/cairo-rename.h 95--- a/gfx/cairo/cairo/src/cairo-rename.h 96+++ b/gfx/cairo/cairo/src/cairo-rename.h 97@@ -262,16 +262,17 @@ 98 #define cairo_scale _moz_cairo_scale 99 #define cairo_scaled_font_create _moz_cairo_scaled_font_create 100 #define cairo_scaled_font_destroy _moz_cairo_scaled_font_destroy 101 #define cairo_scaled_font_extents _moz_cairo_scaled_font_extents 102 #define cairo_scaled_font_get_ctm _moz_cairo_scaled_font_get_ctm 103 #define cairo_scaled_font_get_font_face _moz_cairo_scaled_font_get_font_face 104 #define cairo_scaled_font_get_font_matrix _moz_cairo_scaled_font_get_font_matrix 105 #define cairo_scaled_font_get_font_options _moz_cairo_scaled_font_get_font_options 106+#define cairo_scaled_font_get_hint_metrics _moz_cairo_scaled_font_get_hint_metrics 107 #define cairo_scaled_font_get_reference_count _moz_cairo_scaled_font_get_reference_count 108 #define cairo_scaled_font_get_scale_matrix _moz_cairo_scaled_font_get_scale_matrix 109 #define cairo_scaled_font_get_type _moz_cairo_scaled_font_get_type 110 #define cairo_scaled_font_get_user_data _moz_cairo_scaled_font_get_user_data 111 #define cairo_scaled_font_glyph_extents _moz_cairo_scaled_font_glyph_extents 112 #define cairo_scaled_font_reference _moz_cairo_scaled_font_reference 113 #define cairo_scaled_font_set_user_data _moz_cairo_scaled_font_set_user_data 114 #define cairo_scaled_font_status _moz_cairo_scaled_font_status 115diff --git a/gfx/cairo/cairo/src/cairo-scaled-font.c b/gfx/cairo/cairo/src/cairo-scaled-font.c 116--- a/gfx/cairo/cairo/src/cairo-scaled-font.c 117+++ b/gfx/cairo/cairo/src/cairo-scaled-font.c 118@@ -2983,8 +2983,28 @@ cairo_scaled_font_get_font_options (cair 119 if (scaled_font->status) { 120 _cairo_font_options_init_default (options); 121 return; 122 } 123 124 _cairo_font_options_init_copy (options, &scaled_font->options); 125 } 126 slim_hidden_def (cairo_scaled_font_get_font_options); 127+ 128+/** 129+ * cairo_scaled_font_get_hint_metrics: 130+ * @scaled_font: a #cairo_scaled_font_t 131+ * 132+ * Mozilla extension since the required malloc/free to use 133+ * cairo_scaled_font_get_font_options() above is too slow. 134+ **/ 135+cairo_public cairo_hint_metrics_t 136+cairo_scaled_font_get_hint_metrics (cairo_scaled_font_t *scaled_font) 137+{ 138+ cairo_font_options_t options; 139+ if (scaled_font->status) { 140+ _cairo_font_options_init_default (&options); 141+ } else { 142+ _cairo_font_options_init_copy (&options, &scaled_font->options); 143+ } 144+ return options.hint_metrics; 145+} 146+slim_hidden_def (cairo_scaled_font_get_hint_metrics); 147diff --git a/gfx/cairo/cairo/src/cairo.h b/gfx/cairo/cairo/src/cairo.h 148--- a/gfx/cairo/cairo/src/cairo.h 149+++ b/gfx/cairo/cairo/src/cairo.h 150@@ -1493,16 +1493,19 @@ cairo_scaled_font_get_ctm (cairo_scaled_ 151 cairo_public void 152 cairo_scaled_font_get_scale_matrix (cairo_scaled_font_t *scaled_font, 153 cairo_matrix_t *scale_matrix); 154 155 cairo_public void 156 cairo_scaled_font_get_font_options (cairo_scaled_font_t *scaled_font, 157 cairo_font_options_t *options); 158 159+cairo_public cairo_hint_metrics_t 160+cairo_scaled_font_get_hint_metrics (cairo_scaled_font_t *scaled_font); 161+ 162 163 /* Toy fonts */ 164 165 cairo_public cairo_font_face_t * 166 cairo_toy_font_face_create (const char *family, 167 cairo_font_slant_t slant, 168 cairo_font_weight_t weight); 169 170