1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-08 04:20:09 +00:00
Commit graph

220 commits

Author SHA1 Message Date
attila
4828bd886d Fix assertion during Font fallback
Since 4122427748 assertions are guarding
the FontOptions::withName, withStyle and withTypeface member functions.

Since then the only way to replace an existing typeface without hitting
these assertions is to clear all three fields before calling
withTypeface, which then sets all three values. It is always legal to
just clear an existing Typeface and rely on the name and style fields.
2024-06-20 08:45:17 +00:00
reuk
308619fb5f
TextLayout: Fix unused variable warning 2024-06-19 15:06:23 +01:00
Tom Poole
05b036272a Fix some Doxygen docstrings 2024-06-12 09:35:32 +01:00
reuk
4122427748
FontOptions: Add some assertions to warn about misuse 2024-06-11 11:34:04 +01:00
reuk
d69dee0f5b
Font: Return correct result from getStringWidth after setting size in points
Previously, code such as the following would return a smaller string
width for larger tracking values:

    juce::Font f { juce::FontOptions{}.withPointHeight (16.0f) };
    const auto g = f.withExtraKerningFactor (1.0f);

    const auto a = f.getStringWidth ("foobar");
    const auto b = g.getStringWidth ("foobar");

With this change applied, the width 'b' is greater than the width 'a',
as expected.
2024-06-11 11:34:04 +01:00
attila
17611f74ca Minor code cleanup 2024-06-10 17:51:26 +02:00
attila
c2b461026b Fix shaping for text that uses a single CR for line breaking 2024-06-10 17:51:26 +02:00
reuk
66a29f9762
GlyphArrangement: Avoid divide-by-zero in addFittedText 2024-05-31 11:43:29 +01:00
attila
51955453ef Remove TextLayout::createNativeLayout() 2024-05-30 12:21:35 +01:00
Oliver James
38f299a054 TextLayout: Respect the ReadingDirection parameter of AttributedString 2024-05-30 12:21:35 +01:00
Oliver James
03e79f8f12 TextLayout: Use new shaping engine
By utilising ShapedText in the TextLayout implementation.
2024-05-29 15:11:57 +02:00
attila
30daa356ca ShapedText::Detail: Add getSimpleShapedText() 2024-05-29 15:11:57 +02:00
attila
d794fac44c SimpleShapedText: Fix line break behaviour with text trailing whitespaces
This fixes an issue with the text wrapping logic for text chunks ending
in a whitespace.

When trying to fit a text chunk, the logic works with two values: width
with trailing whitespace, and width without trailing whitespace.

When the trailingWhitespacesShouldFit option is false, the logic
checks if "withoutTrailingWhitespace" can still fit inside the remaining
width.

Prior to this fix, it then decremented the remaining width with
"withoutTrailingWhitespace", but it should have used
"withTrailingWhitespace" for the decrement operation, always, regardless
of the value of the withTrailingWhitespacesShouldFit option.

This mistake only caused an observable issue when multiple fonts were
used for the shaping operation, and a different font would be used
immediately after a whitespace falling at the end of a line.
2024-05-29 15:11:57 +02:00
attila
aee65c147e JustifiedText: Fix line spacing for multi-font text
Prior to this change, the spacing between line N and line N + 1 would be
lineHeight (N).

This resulted in incorrect spacing when using multiple fonts in a text.

This commit uses the correct spacing, which is
maxDescent (N) + maxAscent (N + 1). This is also the same rule that was
used by TextLayout prior to JUCE 8, and the rule that CoreText's
AttributedString features are using as a general rule.

Note: lineHeight (N) = maxAscent (N) + maxDescent (N).
2024-05-29 15:11:57 +02:00
reuk
6b89bb6f91
Font: Fix result of getDescent(), which was incorrect when font height was set in points 2024-05-20 12:49:56 +01:00
reuk
365e8a235d
Font: Remove unnecessary conversion from point-height to juce-height when using FontOptions 2024-05-20 12:49:56 +01:00
reuk
56d5445f8a
FontOptions: Make it easier to specify font sizes in points 2024-04-29 16:08:22 +01:00
reuk
c5a9e26960
Typeface: Add support for querying the default system UI typeface 2024-04-29 16:08:21 +01:00
attila
0d93e15d50 GlyphArrangement: Fix incorrect positioning with Justification::top 2024-04-19 16:55:09 +02:00
reuk
19061e6d17
Direct2D: Add initial support 2024-04-18 14:16:02 +01:00
attila
20afcb5bf3
GlyphArrangement: Use ShapedText 2024-04-18 14:16:01 +01:00
attila
d84bacb3bb
Add ShapedText
Co-authored-by: Oliver James <oli@juce.com>
2024-04-18 14:16:01 +01:00
attila
ade5461de3
Typeface: Add getGlyphBounds 2024-04-18 14:16:01 +01:00
reuk
1560f87111
LowLevelGraphicsContext: Replace glyph drawing functions with single drawGlyphs() 2024-04-18 14:16:01 +01:00
reuk
fa81badb30
Typeface: Add simple tests for typeface metrics 2024-04-18 14:16:00 +01:00
reuk
c2fce879c5
Font: Allow switching between legacy non-portable metrics, and new portable metrics 2024-04-18 14:16:00 +01:00
reuk
4f2c287f9b
Font: Deprecate old Font constructors 2024-04-18 14:16:00 +01:00
reuk
2ed9b84070
Font: Add new FontOptions type 2024-04-18 14:16:00 +01:00
reuk
d406d51ad0
TypefaceCache: Refactor to make more concise 2024-04-18 14:16:00 +01:00
reuk
b42fd71c9e
Typeface: Add API to determine colour technologies used by fonts 2024-04-18 14:15:59 +01:00
reuk
6c4c78baac
Typeface: Fix advances for Apple Color Emoji
The glyph spacing for this font does not scale linearly with the font
size; at smaller font sizes, the spacing is relatively larger.

Typeface::getStringWidth, Typeface::getGlyphPositions, and the
equivalent Font member functions now take the font size and horizontal
scale into account when computing advances on Apple platforms.
2024-04-18 14:15:59 +01:00
reuk
4e90ef831b
Typeface: Add support for rendering COLRv0 glyphs and png-based glyphs
This is sufficient for initial support of the system emoji fonts on each
platform:

- Noto Color Emoji on Linux and Android, png-based
- Apple Color Emoji on macOS and iOS, png-based
- Segoe UI Emoji on Windows 10 and 11, COLRv0-based
    - This font also provides COLRv1 support, at least on Windows 11,
      but JUCE will ignore that and use the COLRv0 data instead
2024-04-18 14:15:59 +01:00
reuk
c40da067cd
RenderingHelpers: Implement GlyphCache in terms of LruCache 2024-04-18 14:15:59 +01:00
reuk
a1b23c0248
Font: Add support for querying fallbacks 2024-04-18 14:15:58 +01:00
reuk
a6a336acb8
Typeface: Add support for querying system fallbacks 2024-04-17 14:41:01 +01:00
reuk
ce4f5377dd
Typeface: Switch to using harfbuzz for computing simple advances on all platforms 2024-04-17 14:41:01 +01:00
reuk
ec2d221b08
Font: Update return type of getOutlineForGlyph 2024-04-17 14:41:01 +01:00
reuk
0d2e34f34c
Typeface: Implement platform typefaces using Harfbuzz hb_font_t 2024-04-17 14:41:00 +01:00
reuk
080ac6e7e7
LruCache: Factor out of GlyphArrangementCache 2024-04-17 14:41:00 +01:00
reuk
b2422514db
juce_graphics: Add FunctionPointerDestructor utility 2024-04-17 14:41:00 +01:00
reuk
f491f126b7
Add Harfbuzz dependency 2024-04-17 14:41:00 +01:00
Tom Poole
94d98a2b10 Update licensing information 2024-04-16 11:39:35 +01:00
Tom Poole
6bf9bb9a2e Add final specifiers in implementation files 2023-10-10 16:12:38 +01:00
Tom Poole
4153d59e39 Formatting 2023-10-02 15:42:20 +01:00
Tom Poole
ff0cb4ad5b Use NullCheckedInvocation in more places 2023-10-02 13:40:10 +01:00
Tom Poole
7d45d498b9 Removed some superfluous consts from definitions 2023-09-20 16:31:10 +01:00
reuk
28414a6af8
Global: Avoid floating-point equality checks where possible 2023-04-04 19:55:11 +01:00
reuk
7c14c1fcd7
Use more concise stdlib type aliases 2022-09-26 18:03:47 +01:00
reuk
8b8ae10059
Build: Replace JUCE_NODISCARD with [[nodiscard]] 2022-09-12 16:14:57 +01:00
Tom Poole
2ec861d99e Update licensing banners to JUCE 7 2022-05-16 17:55:48 +01:00