]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix some problems with Haiku font display
authorPo Lu <luangruo@yahoo.com>
Sun, 9 Jan 2022 03:24:44 +0000 (03:24 +0000)
committerPo Lu <luangruo@yahoo.com>
Sun, 9 Jan 2022 03:24:44 +0000 (03:24 +0000)
* src/haiku_font_support.cc (BFont_char_bounds): Fix rounding
errors.
(BFont_open_pattern): Set size before setting family and style.

src/haiku_font_support.cc

index 6ea10b2e47c2362e1d93627f96761b5f79d85ad8..e6d21c28fe585838d46284f0a0dde7f13b48e2e2 100644 (file)
@@ -159,9 +159,9 @@ BFont_char_bounds (void *font, const char *mb_str, int *advance,
 
   ft->GetEdges (mb_str, 1, &edge_info);
   ft->GetEscapements (mb_str, 1, &escapement);
-  *advance = std::ceil (escapement * size);
-  *lb =  std::ceil (edge_info.left * size);
-  *rb = *advance + std::ceil (edge_info.right * size);
+  *advance = std::lrint (escapement * size);
+  *lb =  std::lrint (edge_info.left * size);
+  *rb = *advance + std::lrint (edge_info.right * size);
 }
 
 /* The same, but for a variable amount of chars.  */
@@ -534,14 +534,15 @@ BFont_open_pattern (struct haiku_font_pattern *pat, void **font, float size)
       font_family_style_matches_p (name, NULL, flags, pat, 1))
     {
       BFont *ft = new BFont;
+      ft->SetSize (size);
+      ft->SetEncoding (B_UNICODE_UTF8);
+      ft->SetSpacing (B_BITMAP_SPACING);
+
       if (ft->SetFamilyAndStyle (name, NULL) != B_OK)
        {
          delete ft;
          return 1;
        }
-      ft->SetSize (size);
-      ft->SetEncoding (B_UNICODE_UTF8);
-      ft->SetSpacing (B_BITMAP_SPACING);
       *font = (void *) ft;
       return 0;
     }
@@ -553,14 +554,15 @@ BFont_open_pattern (struct haiku_font_pattern *pat, void **font, float size)
              font_family_style_matches_p (name, (char *) &sname, flags, pat))
            {
              BFont *ft = new BFont;
+             ft->SetSize (size);
+             ft->SetEncoding (B_UNICODE_UTF8);
+             ft->SetSpacing (B_BITMAP_SPACING);
+
              if (ft->SetFamilyAndStyle (name, sname) != B_OK)
                {
                  delete ft;
                  return 1;
                }
-             ft->SetSize (size);
-             ft->SetEncoding (B_UNICODE_UTF8);
-             ft->SetSpacing (B_BITMAP_SPACING);
              *font = (void *) ft;
              return 0;
            }