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