1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-28 02:30:05 +00:00
Commit graph

1210 commits

Author SHA1 Message Date
reuk
659de5842f
Direct2D: Fix flickery resizing when using an internal resizer
Resizing using window manager functionality (e.g. clicking and dragging
in the non-client area) will send WM_SIZING to the window, which in turn
will enable continuous repainting in the D2D renderer until the resize
operation ends.

Continuous repainting is required in order for the window to display
correctly during the resize. Without continuous repainting, some frames
may not be completely painted, and may display with black areas,
producing a flickery effect.

When a resize is controlled entirely by the client, e.g. using the
corner resizer in the AudioPluginDemo standalone, WM_SIZING is never
posted. Instead, we assume that if the window has captured the cursor
during a setBounds call then it is probably resizing. We enable
continuous repainting in this case, and stop repainting once the window
releases the mouse.

An alternative appropach would be to add some kind of start/stop resize
API to ComponentPeer. I'm currently reluctant to do that because the
ComponentPeer API is already so large.
2024-05-31 11:43:30 +01:00
reuk
66a29f9762
GlyphArrangement: Avoid divide-by-zero in addFittedText 2024-05-31 11:43:29 +01:00
Matt Gonzalez
00c958ff3e
DirectWrite: Rework custom font collection loader
Removes redundant memory copies and sorts out issues with ownership of the font data
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
Matt Gonzalez
99adac2871
Direct2D: Skip invalid path elements when converting a Path to a Geometry 2024-05-28 16:08:55 +01:00
Matt Gonzalez
77f6eb00ff
Direct2D: Reset pending clip list after setting device space origin
https://forum.juce.com/t/the-juce-8-preview-branch-is-available-now/60950/144?u=matt
2024-05-28 16:08:55 +01:00
Matt Gonzalez
dfb21da572
Direct2D: Use axis-aligned clip layer when possible in clipToImageAlpha 2024-05-28 16:08:55 +01:00
Matt Gonzalez
6ca54e8c97
Direct2D: Add debug check for axis-aligned clip layers
This is similar to the check performed by the D2D debug layer that will still work with the debug layer disabled.
2024-05-28 16:08:55 +01:00
reuk
2ca5fdf18d
Direct2D: Avoid continuous repainting when moving but not resizing windows 2024-05-28 11:28:51 +01:00
Oliver James
44a750df40 Unicode: Ignore punctuation when resolving implicit characters
This commit implements fix for an issue where mixed punctuation can be rendered in the wrong order.

A regression test has been added to catch this in the future.
2024-05-23 12:54:13 +01:00
Oliver James
0b60559905 Unicode: Perform major refactor
This commit encapsulates the following:
* Removal of public Unicode classes.
* Move to new 'blob' generated data format.
* Fix issue where numerical characters would be assigned incorrect bidirectional levels, resulting in them rendering in the wrong order.
* Adds a unit test for the number ordering issue.
* Refactor of Bidirectional and Line breaking algorithms.
2024-05-23 12:54:13 +01: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
5b2f9d4019
GraphicsContext: Avoid attempting to paint empty rectangles in all renderers 2024-05-20 12:49:56 +01:00
reuk
06137fb7f5
Direct2D: Slightly shrink excluded clip regions in order to draw transformed opaque components without border artefacts 2024-05-20 12:49:55 +01:00
reuk
e11b8f5ccb
CoreGraphics: Slightly shrink excluded clip regions in order to draw transformed opaque components without border artefacts
Previously, drawing an opaque, scaled component with CoreGraphics could
lead to visible artefacts around the edge of the component.

When drawing the parent of an opaque component, the area covered by the
opaque component is excluded from the clip region. If the clip region is
non-integral when transformed into device space, anti-aliasing will be
applied on the edges of the clip region. Similarly, when drawing the
opaque component itself, anti-aliasing will be applied at the edges of
the component. When the two drawings are superimposed, the foreground
anti-aliased pixels will be blended with the background anti-aliased
pixels, leading to a noticeable border around the component. Ideally,
only the foreground anti-aliasing should be applied, and the background
should not be anti-aliased around its edges.
2024-05-20 12:49:55 +01:00
reuk
bd2aea9676
AffineTransform: Add isOnlyTranslationOrScale() helper 2024-05-20 12:49:55 +01:00
reuk
0444e3d69c
EdgeTable: Avoid reinterpret_cast in multiplyLevels 2024-05-20 12:49:55 +01:00
reuk
ce0fe3dc1e
EdgeTable: Keep better track of buffer memory ranges
Occasionally, on Linux, Address Sanitizer can complain about a memory
region overlap in the arguments to memcpy, originating in
EdgeTable::intersectWithEdgeTableLine. I haven't been able to reproduce
this personally.

The final memcpy call in this function requires there to be
"srcNum1 * 2" valid entries after the current "src1" ptr, and none of
those entries may overlap with the area starting at "temp".

On inspection, I think that the memory region being read is too large.
At the point of the call, src1 will point to a LineItem::level, not
LineItem::x, so there will actually be (srcNum1 * 2 - 1) valid items
following it.

All this pointer arithmetic is very difficult to understand. In an
effort to make this function slightly more understandable, I've switched
to using Spans to delineate lines of the table, which makes it easier to
keep track of the size of each line.
2024-05-20 12:49:55 +01:00
reuk
417d97b36e
EdgeTable: Implement using vector to simplify special member functions 2024-05-20 12:49:54 +01:00
reuk
5d2b1b7aa7
UnicodeData: Remove unnecessary pack pragmas 2024-05-20 12:48:11 +01:00
Anthony Nicholls
b9a1bfbc22 Formatting: Fix line endings in inl file 2024-05-10 14:30:44 +01:00
Matt Gonzalez
dfa94981e4 D2D: Pass the clearImage flag to the BitmapData backup image
https://forum.juce.com/t/the-juce-8-preview-branch-is-available-now/60950/123
2024-05-10 11:55:28 +01:00
reuk
c4652ef7bc
ColourGradient: Fix assertion in ColourGradient::remove 2024-05-08 17:53:52 +01:00
reuk
c728d8509d
Point: Disable rotatedAroundOrigin for non-floating-point types
This function cant't give useful results for integer points.
2024-05-08 17:53:52 +01:00
reuk
a0c9a42dbf
Point: Avoid data-loss warning in Point::getDotProduct 2024-05-08 17:53:52 +01:00
reuk
0f0095091b
Line: Avoid data loss warning in Line::findNearestPointTo 2024-05-08 17:53:52 +01:00
reuk
5ff13aa6b1
PixelFormats: Avoid data-loss warning when tweening PixelAlpha values 2024-05-08 17:53:52 +01:00
reuk
c25a1fe233
AffineTransform: Add basic test for fromTargetPoints 2024-05-08 17:53:52 +01:00
reuk
44a04370a9
Parallelogram: Fix implementations of isEmpty and operator-=
Previously, isEmpty sometimes incorrectly returned true for non-empty
parallelograms.

operator-= called itself, leading to infinite recursion.
2024-05-08 17:53:51 +01:00
reuk
f333875386
D2D: Fix formatting 2024-04-29 16:08:24 +01:00
reuk
590e22f320
D2D: Add faster two-pass blur implementation 2024-04-29 16:08:24 +01:00
reuk
427fec6433
Image: Add slightly faster alternative to gaussian blur for drop shadows 2024-04-29 16:08:24 +01:00
reuk
acae73e980
RenderingHelpers: DRY implementation of fillRectWithColour 2024-04-29 16:08:24 +01:00
reuk
7991c91fb2
D2D: Move null checks 2024-04-29 16:08:24 +01:00
reuk
248a400b88
D2D: Use currently-selected colour when replace-clearing NativeImage 2024-04-29 16:08:23 +01:00
reuk
793af50964
D2D: Fix typo which caused window to repaint continuously after resize 2024-04-29 16:08:23 +01:00
reuk
bfccf7f81c
D2D: Fix intersection test for Line 2024-04-29 16:08:23 +01:00
reuk
203e99c57d
D2D: Update Direct2DGraphicsContext::getPhysicalPixelScaleFactor to include context transform for consistency with other renderer backends 2024-04-29 16:08:23 +01:00
reuk
c2d86693ff
D2D: Avoid calling setPhysicalPixelScaleFactor 2024-04-29 16:08:23 +01:00
reuk
e005a41d6b
D2D: Remove unnecessary scaling in HwndPimpl::setSize 2024-04-29 16:08:23 +01:00
reuk
238edf6437
D2D: Remove unused function 2024-04-29 16:08:23 +01:00
reuk
49dec0a32a
D2D: Apply physical scale factor inside startFrame 2024-04-29 16:08:23 +01:00
reuk
122b75909e
D2D: Avoid setting DPI when resizing context, as it is already set per-frame 2024-04-29 16:08:23 +01:00
reuk
83ba2cba5d
D2D: Tidy up in typeface implementation 2024-04-29 16:08:22 +01:00