]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve Haiku font size fallback
authorPo Lu <luangruo@yahoo.com>
Sun, 1 Jan 2023 11:01:53 +0000 (11:01 +0000)
committerPo Lu <luangruo@yahoo.com>
Sun, 1 Jan 2023 11:03:16 +0000 (11:03 +0000)
* src/haikufont.c (haikufont_open): If pixel_size is zero, don't
use a font parameter that doesn't exist.

src/haikufont.c

index 4599ca40c4711be6660d0eba6ab2d58d115be951..a025dec58bb509751696a68c09a4d59cc1db7226 100644 (file)
@@ -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);