aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-01-09 03:24:44 +0000
committerPo Lu2022-01-09 03:24:44 +0000
commit8aad4cee326dff4c63b05eaf290c34a397067b93 (patch)
tree5ba0c911529c54324251d31fb1cb7d5a6a6088eb /src
parent92e4460911d23dd6889e9c02333e93882912e82a (diff)
downloademacs-8aad4cee326dff4c63b05eaf290c34a397067b93.tar.gz
emacs-8aad4cee326dff4c63b05eaf290c34a397067b93.zip
Fix some problems with Haiku font display
* src/haiku_font_support.cc (BFont_char_bounds): Fix rounding errors. (BFont_open_pattern): Set size before setting family and style.
Diffstat (limited to 'src')
-rw-r--r--src/haiku_font_support.cc20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/haiku_font_support.cc b/src/haiku_font_support.cc
index 6ea10b2e47c..e6d21c28fe5 100644
--- a/src/haiku_font_support.cc
+++ b/src/haiku_font_support.cc
@@ -159,9 +159,9 @@ BFont_char_bounds (void *font, const char *mb_str, int *advance,
159 159
160 ft->GetEdges (mb_str, 1, &edge_info); 160 ft->GetEdges (mb_str, 1, &edge_info);
161 ft->GetEscapements (mb_str, 1, &escapement); 161 ft->GetEscapements (mb_str, 1, &escapement);
162 *advance = std::ceil (escapement * size); 162 *advance = std::lrint (escapement * size);
163 *lb = std::ceil (edge_info.left * size); 163 *lb = std::lrint (edge_info.left * size);
164 *rb = *advance + std::ceil (edge_info.right * size); 164 *rb = *advance + std::lrint (edge_info.right * size);
165} 165}
166 166
167/* The same, but for a variable amount of chars. */ 167/* 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)
534 font_family_style_matches_p (name, NULL, flags, pat, 1)) 534 font_family_style_matches_p (name, NULL, flags, pat, 1))
535 { 535 {
536 BFont *ft = new BFont; 536 BFont *ft = new BFont;
537 ft->SetSize (size);
538 ft->SetEncoding (B_UNICODE_UTF8);
539 ft->SetSpacing (B_BITMAP_SPACING);
540
537 if (ft->SetFamilyAndStyle (name, NULL) != B_OK) 541 if (ft->SetFamilyAndStyle (name, NULL) != B_OK)
538 { 542 {
539 delete ft; 543 delete ft;
540 return 1; 544 return 1;
541 } 545 }
542 ft->SetSize (size);
543 ft->SetEncoding (B_UNICODE_UTF8);
544 ft->SetSpacing (B_BITMAP_SPACING);
545 *font = (void *) ft; 546 *font = (void *) ft;
546 return 0; 547 return 0;
547 } 548 }
@@ -553,14 +554,15 @@ BFont_open_pattern (struct haiku_font_pattern *pat, void **font, float size)
553 font_family_style_matches_p (name, (char *) &sname, flags, pat)) 554 font_family_style_matches_p (name, (char *) &sname, flags, pat))
554 { 555 {
555 BFont *ft = new BFont; 556 BFont *ft = new BFont;
557 ft->SetSize (size);
558 ft->SetEncoding (B_UNICODE_UTF8);
559 ft->SetSpacing (B_BITMAP_SPACING);
560
556 if (ft->SetFamilyAndStyle (name, sname) != B_OK) 561 if (ft->SetFamilyAndStyle (name, sname) != B_OK)
557 { 562 {
558 delete ft; 563 delete ft;
559 return 1; 564 return 1;
560 } 565 }
561 ft->SetSize (size);
562 ft->SetEncoding (B_UNICODE_UTF8);
563 ft->SetSpacing (B_BITMAP_SPACING);
564 *font = (void *) ft; 566 *font = (void *) ft;
565 return 0; 567 return 0;
566 } 568 }