mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 20:27:45 +00:00
LibGfx: Improve tie-breaking in Typeface::get_font
Add two new members to Font::AllowInexactMatch: Larger and Smaller. This allows callers of FontDatabase::get to specify if they want to prefer a larger or smaller font in the event of a tie.
This commit is contained in:
parent
1915e603c9
commit
0e05614710
2 changed files with 11 additions and 3 deletions
|
@ -148,6 +148,8 @@ public:
|
||||||
enum class AllowInexactSizeMatch {
|
enum class AllowInexactSizeMatch {
|
||||||
No,
|
No,
|
||||||
Yes,
|
Yes,
|
||||||
|
Larger,
|
||||||
|
Smaller,
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual NonnullRefPtr<Font> clone() const = 0;
|
virtual NonnullRefPtr<Font> clone() const = 0;
|
||||||
|
|
|
@ -73,16 +73,22 @@ RefPtr<Font> Typeface::get_font(float point_size, Font::AllowInexactSizeMatch al
|
||||||
for (auto font : m_bitmap_fonts) {
|
for (auto font : m_bitmap_fonts) {
|
||||||
if (font->presentation_size() == size)
|
if (font->presentation_size() == size)
|
||||||
return font;
|
return font;
|
||||||
if (allow_inexact_size_match == Font::AllowInexactSizeMatch::Yes) {
|
if (allow_inexact_size_match != Font::AllowInexactSizeMatch::No) {
|
||||||
int delta = static_cast<int>(font->presentation_size()) - static_cast<int>(size);
|
int delta = static_cast<int>(font->presentation_size()) - static_cast<int>(size);
|
||||||
if (abs(delta) < best_delta) {
|
if (abs(delta) == best_delta) {
|
||||||
|
if (allow_inexact_size_match == Font::AllowInexactSizeMatch::Larger && delta > 0) {
|
||||||
|
best_match = font;
|
||||||
|
} else if (allow_inexact_size_match == Font::AllowInexactSizeMatch::Smaller && delta < 0) {
|
||||||
|
best_match = font;
|
||||||
|
}
|
||||||
|
} else if (abs(delta) < best_delta) {
|
||||||
best_match = font;
|
best_match = font;
|
||||||
best_delta = abs(delta);
|
best_delta = abs(delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allow_inexact_size_match == Font::AllowInexactSizeMatch::Yes && best_match)
|
if (allow_inexact_size_match != Font::AllowInexactSizeMatch::No && best_match)
|
||||||
return best_match;
|
return best_match;
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue