diff options
author | Po Lu <luangruo@yahoo.com> | 2023-01-01 11:01:53 +0000 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2023-01-01 11:03:16 +0000 |
commit | 9596e683834a36060497903b47b870b338d88095 (patch) | |
tree | d8e40ee3b44a16d5f64dc2015489acc0b4603578 | |
parent | 0544f4d19de903ef56da1f5403f68cd0c7022d10 (diff) | |
download | emacs-9596e683834a36060497903b47b870b338d88095.tar.gz emacs-9596e683834a36060497903b47b870b338d88095.tar.bz2 emacs-9596e683834a36060497903b47b870b338d88095.zip |
Improve Haiku font size fallback
* src/haikufont.c (haikufont_open): If pixel_size is zero, don't
use a font parameter that doesn't exist.
-rw-r--r-- | src/haikufont.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/haikufont.c b/src/haikufont.c index 4599ca40c47..a025dec58bb 100644 --- a/src/haikufont.c +++ b/src/haikufont.c @@ -754,7 +754,7 @@ haikufont_encode_char (struct font *font, int c) } static Lisp_Object -haikufont_open (struct frame *f, Lisp_Object font_entity, int x) +haikufont_open (struct frame *f, Lisp_Object font_entity, int pixel_size) { struct haikufont_info *font_info; struct haiku_font_pattern ptn; @@ -765,11 +765,19 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, int x) int avg_width, height, space_width, ascent; int descent, underline_pos, underline_thickness; - if (x <= 0) + if (XFIXNUM (AREF (font_entity, FONT_SIZE_INDEX)) != 0) + pixel_size = XFIXNUM (AREF (font_entity, FONT_SIZE_INDEX)); + else if (pixel_size == 0) { - /* Get pixel size from frame instead. */ - tem = get_frame_param (f, Qfontsize); - x = NILP (tem) ? 0 : XFIXNAT (tem); + /* Try to resolve a suitable size for the font, if the font size + has not already been specified. First, if FRAME_FONT is set, + use its size. Otherwise, use 12, which is the default on + Haiku. */ + + if (FRAME_FONT (f)) + pixel_size = FRAME_FONT (f)->pixel_size; + else + pixel_size = 12; } extra = AREF (font_entity, FONT_EXTRA_INDEX); @@ -788,7 +796,8 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, int x) { block_input (); be_font = be_open_font_at_index (XFIXNUM (XCAR (indices)), - XFIXNUM (XCDR (indices)), x); + XFIXNUM (XCDR (indices)), + pixel_size); unblock_input (); if (!be_font) @@ -799,7 +808,7 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, int x) block_input (); haikufont_spec_or_entity_to_pattern (font_entity, 1, &ptn); - if (BFont_open_pattern (&ptn, &be_font, x)) + if (BFont_open_pattern (&ptn, &be_font, pixel_size)) { haikufont_done_with_query_pattern (&ptn); unblock_input (); @@ -813,7 +822,7 @@ haikufont_open (struct frame *f, Lisp_Object font_entity, int x) block_input (); font_object = font_make_object (VECSIZE (struct haikufont_info), - font_entity, x); + font_entity, pixel_size); ASET (font_object, FONT_TYPE_INDEX, Qhaiku); font_info = (struct haikufont_info *) XFONT_OBJECT (font_object); |