aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYAMAMOTO Mitsuharu2019-04-19 09:54:59 +0900
committerYAMAMOTO Mitsuharu2019-04-19 09:54:59 +0900
commit0a453ee7e4452a8848a71272efa14550fc7d95eb (patch)
tree43f3e19beddd92ebb19907b464e6ae5325c6c00b
parent23a82cba12380b0905670c34395dc460a4bc9984 (diff)
downloademacs-0a453ee7e4452a8848a71272efa14550fc7d95eb.tar.gz
emacs-0a453ee7e4452a8848a71272efa14550fc7d95eb.zip
* src/ftcrfont.c (ftcrfont_open): Avoid returning while blocking input.
-rw-r--r--src/ftcrfont.c52
1 files changed, 25 insertions, 27 deletions
diff --git a/src/ftcrfont.c b/src/ftcrfont.c
index 18f9c2dd31b..5d81b39d81d 100644
--- a/src/ftcrfont.c
+++ b/src/ftcrfont.c
@@ -117,39 +117,37 @@ static Lisp_Object
117ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) 117ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size)
118{ 118{
119 Lisp_Object font_object; 119 Lisp_Object font_object;
120 struct font *font;
121 struct font_info *ftcrfont_info;
122 FT_Face ft_face;
123 FT_UInt size;
124 120
125 block_input (); 121 FT_UInt size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX));
126 size = XFIXNUM (AREF (entity, FONT_SIZE_INDEX));
127 if (size == 0) 122 if (size == 0)
128 size = pixel_size; 123 size = pixel_size;
129 font_object = font_build_object (VECSIZE (struct font_info), 124 font_object = font_build_object (VECSIZE (struct font_info),
130 Qftcr, entity, size); 125 Qftcr, entity, size);
126 block_input ();
131 font_object = ftfont_open2 (f, entity, pixel_size, font_object); 127 font_object = ftfont_open2 (f, entity, pixel_size, font_object);
132 if (NILP (font_object)) return Qnil; 128 if (FONT_OBJECT_P (font_object))
133 129 {
134 font = XFONT_OBJECT (font_object); 130 struct font *font = XFONT_OBJECT (font_object);
135 font->driver = &ftcrfont_driver; 131 struct font_info *ftcrfont_info = (struct font_info *) font;
136 ftcrfont_info = (struct font_info *) font; 132 FT_Face ft_face = ftcrfont_info->ft_size->face;
137 ft_face = ftcrfont_info->ft_size->face; 133
138 FT_New_Size (ft_face, &ftcrfont_info->ft_size_draw); 134 font->driver = &ftcrfont_driver;
139 FT_Activate_Size (ftcrfont_info->ft_size_draw); 135 FT_New_Size (ft_face, &ftcrfont_info->ft_size_draw);
140 FT_Set_Pixel_Sizes (ft_face, 0, font->pixel_size); 136 FT_Activate_Size (ftcrfont_info->ft_size_draw);
141 cairo_font_face_t *font_face = 137 FT_Set_Pixel_Sizes (ft_face, 0, font->pixel_size);
142 cairo_ft_font_face_create_for_ft_face (ft_face, 0); 138 cairo_font_face_t *font_face =
143 cairo_matrix_t font_matrix, ctm; 139 cairo_ft_font_face_create_for_ft_face (ft_face, 0);
144 cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size); 140 cairo_matrix_t font_matrix, ctm;
145 cairo_matrix_init_identity (&ctm); 141 cairo_matrix_init_scale (&font_matrix, pixel_size, pixel_size);
146 cairo_font_options_t *options = cairo_font_options_create (); 142 cairo_matrix_init_identity (&ctm);
147 ftcrfont_info->cr_scaled_font = 143 cairo_font_options_t *options = cairo_font_options_create ();
148 cairo_scaled_font_create (font_face, &font_matrix, &ctm, options); 144 ftcrfont_info->cr_scaled_font =
149 cairo_font_face_destroy (font_face); 145 cairo_scaled_font_create (font_face, &font_matrix, &ctm, options);
150 cairo_font_options_destroy (options); 146 cairo_font_face_destroy (font_face);
151 ftcrfont_info->metrics = NULL; 147 cairo_font_options_destroy (options);
152 ftcrfont_info->metrics_nrows = 0; 148 ftcrfont_info->metrics = NULL;
149 ftcrfont_info->metrics_nrows = 0;
150 }
153 unblock_input (); 151 unblock_input ();
154 152
155 return font_object; 153 return font_object;