diff options
| author | YAMAMOTO Mitsuharu | 2019-04-19 09:54:59 +0900 |
|---|---|---|
| committer | YAMAMOTO Mitsuharu | 2019-04-19 09:54:59 +0900 |
| commit | 0a453ee7e4452a8848a71272efa14550fc7d95eb (patch) | |
| tree | 43f3e19beddd92ebb19907b464e6ae5325c6c00b /src | |
| parent | 23a82cba12380b0905670c34395dc460a4bc9984 (diff) | |
| download | emacs-0a453ee7e4452a8848a71272efa14550fc7d95eb.tar.gz emacs-0a453ee7e4452a8848a71272efa14550fc7d95eb.zip | |
* src/ftcrfont.c (ftcrfont_open): Avoid returning while blocking input.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ftcrfont.c | 52 |
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 | |||
| 117 | ftcrfont_open (struct frame *f, Lisp_Object entity, int pixel_size) | 117 | ftcrfont_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; |