update gio version#4
Open
inkeliz wants to merge 71 commits into
Open
Conversation
Stack.Layout and Flex.Layout caused a lot of heap allocations / escapes. The reason was that scratch space for dims and call and was inside Stack/FlexChild. child.call.Add(gtx.Ops) confused the go escape analysis and caused the entired children slice to escape to the heap, including all widgets in it. This caused a lot of heap allocations. Now the scratch space is separate from children, and for cases len(children) <= 32, we will allocate the scratch space on the stack. For cases len(children) > 32, only the scratch space gets allocated from the heap, during append. Signed-off-by: vsariola <5684185+vsariola@users.noreply.github.com>
Signed-off-by: Marc <marc.leroy@samantree.com> Signed-off-by: Elias Naur <mail@eliasnaur.com>
The Windows Pointer API (https://learn.microsoft.com/en-us/windows/win32/api/_inputmsg/) was used to allow the detection of events when interacting with touch screens. This also opens the gates for supporting other types of input devices (e.g. pens and touchpads). Mouse events are now part of the pointer events (primary events trigger WM_POINTER<DOWN|UP>, whereas secondary ones vanilla WM_POINTERUPDATE, and cancellations WM_POINTERCAPTURECHANGED). A fourth and fifth button (usually found in modern mice) has also been added for completeness, though their integration in other OS-es shall be the objective of future patches. Signed-off-by: Marc <marc.leroy@samantree.com> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Currently build fails as go.mod uses go 1.23.8 which doesn't have strings.SplitSeq. Note: strings.SplitSeq was introduced in go 1.24. Signed-off-by: Miles Alan <m@milesalan.com>
Fixes: https://todo.sr.ht/~eliasnaur/gio/654 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu> Signed-off-by: Elias Naur <mail@eliasnaur.com>
The normal vector size and direction depend on the input point and the sign of the unit value provided. Fixes: https://todo.sr.ht/~eliasnaur/gio/576 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
There are two max window size settings on macOS, `contentMaxSize` and `maxFullScreenContentSize`. Set the latter to avoid a window being resized larger than its maximum in full screen mode. Signed-off-by: Elias Naur <mail@eliasnaur.com>
According to @kkeybbs, pressing the maximize button on Windows only resizes the window up to its maximum bounds. That means we can leave the button available, and only hide it when the window has a fixed size. Signed-off-by: Elias Naur <mail@eliasnaur.com>
Fixes: https://todo.sr.ht/~eliasnaur/gio/656 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Cancel events affect the entire gesture and as such all active pointers. References: https://todo.sr.ht/~eliasnaur/gio/657 Signed-off-by: Elias Naur <mail@eliasnaur.com>
This is a breaking change, users that need the old behavior can implement it using the existing API. Fixes: https://todo.sr.ht/~eliasnaur/gio/511 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Avoids unnecessary eglMakeCurrent and thread locking calls to enhance performance. Fixes: https://todo.sr.ht/~eliasnaur/gio/658 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Reduces ambiguity by introducing AffineId() for representing identity transformation matrices. References: https://todo.sr.ht/~eliasnaur/gio/655 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
References: https://todo.sr.ht/~eliasnaur/gio/655 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
References: https://todo.sr.ht/~eliasnaur/gio/655 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
After moving the pen, the next action should update the bounds for the start position. References: https://todo.sr.ht/~eliasnaur/gio/451 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Fixes: https://todo.sr.ht/~eliasnaur/gio/534 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Fixes the edge case where a zero point would be normalized to NaN. Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
This fixes the cases where the unit length matches the hypotenuse. Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu>
Fixes the 1px overlap of curve quads. Without this patch the rendered quads were skewed vertically and were 2 pixels shorter in height. The NorthWest pixels were moved to the SouthWest instead of NorthWest and the SouthEast pixels were moved to the NorthEast instead of SouthEast. References: https://todo.sr.ht/~eliasnaur/gio/339 Signed-off-by: Walter Werner SCHNEIDER <contact@schnwalter.eu> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Using cgo.Handle allows us to pass a reference to a Go function through the GCD API for running main thread code, saving a goroutine and a channel. Signed-off-by: Elias Naur <mail@eliasnaur.com>
Inspired by the discussion at golang.org/issue/70089, this change makes our particular NSApplicationDelegate implementation optional. Signed-off-by: Elias Naur <mail@eliasnaur.com>
1. When selecting multiple lines of text, the rendered selection area does not include the last character of the first line. 2. When selecting a specific line (other than the last line) in multiline text, the last character of that line cannot be selected. Signed-off-by: CoyAce <AkeyCoy@gmail.com>
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
Our go.mod says 1.24, so a go1.18 conditional is redundant. Signed-off-by: Elias Naur <mail@eliasnaur.com>
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
Floating windows are rendered above all other non-floating windows. Apple Documentation: https://developer.apple.com/documentation/appkit/nswindow/level-swift.struct Signed-off-by: Thomas Banks <thomas@tombanks.me>
Signed-off-by: Elias Naur <mail@eliasnaur.com>
Signed-off-by: inkeliz <inkeliz@inkeliz.com>
References: https://lists.sr.ht/~eliasnaur/gio/%3CCAMAFT9Uyh_JWrkQQt+AmekJWFBqhZPsP_3ZxC1fUNB+=VGGorw@mail.gmail.com%3E Signed-off-by: CoyAce <akeycoy@gmail.com> Signed-off-by: Elias Naur <mail@eliasnaur.com>
UIScene notifications are the correct way to track window focus on iOS 13.0+, because the Key Window API is scene-level on iOS 13.0+, but we need to maintain support for iOS 12 and earlier. Implementation strategy: - iOS 13.0+: Use UIScene notifications (DidActivate/WillDeactivate) - iOS 12 and earlier: Keep existing UIWindow notifications as fallback - Add runtime version checks to select the appropriate API Key changes in os_ios.m: - Add @available(iOS 13.0, *) checks - Register both notification types with conditional logic - Ensure proper cleanup of observers when moving between windows See: https://developer.apple.com/documentation/uikit/uiscene?language=objc Fixes: https://lists.sr.ht/~eliasnaur/gio/%3CCAMAFT9Uyh_JWrkQQt+AmekJWFBqhZPsP_3ZxC1fUNB+=VGGorw@mail.gmail.com%3E Signed-off-by: CoyAce <akeycoy@gmail.com> Signed-off-by: Elias Naur <mail@eliasnaur.com>
…stroyed Config.Focused represents window interaction focus, which should only change when the window gains or loses user interaction capability. The focus state is already correctly handled in: - onResume → focused = true (window gains interaction focus) - onPause → focused = false (window loses interaction focus) Therefore, sending additional ConfigEvent in onStop and onSurfaceDestroyed is redundant because: - onStop is always preceded by onPause - onSurfaceDestroyed is a low-level surface event unrelated to focus This cleanup aligns the Android implementation with the correct semantic that Config.Focused = window interaction focus, not view focus or surface state. Signed-off-by: CoyAce <akeycoy@gmail.com>
Previously, the Shortcut key was hardcoded as ModCtrl. That patches tries to identify the OS and change the key. Fixes: https://todo.sr.ht/~eliasnaur/gio/624 Signed-off-by: Lucas Rodrigues <inkeliz@inkeliz.com> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Fix several issues in the IME implementation - Typing after an editor regains focus will not add text at the begging of the Editor. - On Safari iOS, selecting a keyboard suggestion no longer duplicates the text. - Replacing selected text now occurs at the correct position. This patch change how "input" event is handled, instead of consider all events the same. Signed-off-by: Lucas Rodrigues <inkeliz@inkeliz.com>
Previously, using SVG fonts will cause Gio to render invisible
"characters".
Now, some fonts (like Noto Sans Emoji) will be rendered
based on "Outline". Gio don't support SVG fonts, but now
it will show the outline ("black-and-white") alternative.
Signed-off-by: Lucas Rodrigues <inkeliz@inkeliz.com>
Signed-off-by: Elias Naur <mail@eliasnaur.com>
Click and Hover both stored the first PointerID they observed in their internal pid field and only updated it when not currently hovered/entered. Once the gesture became hovered, any later event under a different PointerID was effectively ignored: Click.Press fell through 'c.pid != e.PointerID' and was silently dropped, and Hover could never reset entered when the matching Leave arrived under a new ID. The Windows backend enables EnableMouseInPointer (app/os_windows.go), under which Windows reassigns the same physical mouse's PointerID across focus changes, window leave/re-enter, and similar events. Once a widget had been hovered, every subsequent press on it failed to register, including widget.Editor's internal clicker that positions the caret on press. Multi-line editors silently refused to move the caret on click after the window had received any focus event. Always take the latest PointerID on Hover.Enter and Click.Press. The Press/Release handshake still works because Press now records the press's own PointerID and Release continues to gate on 'c.pid != e.PointerID' so an unrelated pointer's release can't end the press tracking. Signed-off-by: Eugene <eugenebosyakov@gmail.com>
Fixes: https://todo.sr.ht/~eliasnaur/gio/681 Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
Scroll events arrived at pointerQueue.Push and went through pointerOf + deliverEnterLeaveEvents + deliverEvent like Move/Press/Release. The side effect: every scroll created or updated a state.pointers entry, populated p.entered with whatever handlers sat under the wheel position, and overwrote state.cursor based on hit-test at the scroll position. When the platform layer reports scroll with a different PointerID than mouse-move events for the same physical mouse — which the Windows backend does (scrollEvent omits PointerID, defaulting to 0, while pointerUpdate forwards Windows' assigned ID) — the scroll spawns a phantom state.pointers entry. Subsequent moves go to the mouse's "real" entry, so the phantom never receives Leave events, its entered set never empties, and the cleanup at the end of Push keeps it alive. pointerQueue.Frame then runs hit-test for it every frame at the user's last scroll position, threading state.cursor through it after the live pointer's resolution and clobbering it with whatever's under the scroll position. The wheel is positional but isn't a pointer. Treating it as one is the bug. Hit-test inline at the scroll position to find delivery targets, dispatch via deliverEvent (which already handles filter matching, scroll axis clamping, and area-local position), and return without creating or updating a state.pointers entry. Add a router-level test that fails without the fix: a Move sets the cursor over a CursorPointer region, a subsequent Scroll over a CursorText region, and the test asserts the cursor is still CursorPointer. Pre-fix the scroll's deliverEnterLeaveEvents overwrites state.cursor with CursorText. Signed-off-by: Eugene <eugenebosyakov@gmail.com>
typesetting introduced a cache field that needs to be properly initialized. Use constructor to avoid the issue. Signed-off-by: Egon Elbre <egonelbre@gmail.com>
This way their cache can be shared. Signed-off-by: Egon Elbre <egonelbre@gmail.com>
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
loadEGL used sync.Once incorrectly: the error returned by loadDLLs was assigned to a local variable inside loadEGL, so on the second call Do would not run and the function would return nil even though the DLLs were never loaded. This caused a nil pointer dereference when callers proceeded to use _eglGetDisplay and other uninitialized function pointers. Fix by replacing the sync.Once with sync.OnceValue, which correctly caches the return value of loadDLLs across all calls. Signed-off-by: Kevin Yuan <farproc@gmail.com>
DefWindowProc handles WM_WINDOWPOSCHANGED by sending WM_SIZE and WM_MOVE messages, which would lead us to handle resizes twice. Per MSDN, the WM_SIZE handler is made redundant by handling WM_WINDOWPOSCHANGED: https://learn.microsoft.com/en-us/windows/win32/winmsg/wm-windowposchanged Signed-off-by: Kevin Yuan <farproc@gmail.com> Signed-off-by: Elias Naur <mail@eliasnaur.com>
Decorations buttons already use widget.Clickable and draw press ink, but they don't draw a hover/focus background. This makes custom window decorations appear unresponsive when the pointer is over minimize, maximize, or close buttons. Register each button's system action over its clickable area and draw the same hovered background used by other material buttons. This also lets platforms query the button action from the material decorations hit area. Signed-off-by: qiannian <qianniancn@gmail.com>
Keep custom move areas mapped to HTCAPTION even when the window is maximized so custom title bars preserve the standard Windows behavior where double-click restores the window. Signed-off-by: Elias Naur <mail@eliasnaur.com>
Allow platform backends to send pointer.Leave directly. The router delivers it to entered handlers so hover state is cleared normally. Signed-off-by: Elias Naur <mail@eliasnaur.com>
Mark WM_IME_STARTCOMPOSITION as handled after positioning the IME composition and candidate windows. Passing the message on to DefWindowProc can let Windows create its default composition window, which shows the first composing character below Gio's caret. Fixes: https://todo.sr.ht/~eliasnaur/gio/687 Signed-off-by: qiannian <qianniancn@gmail.com>
Track IME composition range updates as key.CompositionEvent and route them to the focused editor. Draw a thin underline under the current composition range using the editor text material. Keep the composition range in imeState so it is reset with the rest of the editor input method state, and normalize it in input.Router before forwarding CompositionEvent. Signed-off-by: qiannian <qianniancn@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.