diff options
| author | Po Lu | 2022-01-09 03:24:44 +0000 |
|---|---|---|
| committer | Po Lu | 2022-01-09 03:24:44 +0000 |
| commit | 8aad4cee326dff4c63b05eaf290c34a397067b93 (patch) | |
| tree | 5ba0c911529c54324251d31fb1cb7d5a6a6088eb /src | |
| parent | 92e4460911d23dd6889e9c02333e93882912e82a (diff) | |
| download | emacs-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.cc | 20 |
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 | } |