Commit Graph

2458 Commits

Author SHA1 Message Date
Elias Naur eeb2febfea gpu: minimize FBO resizes in current renderer
References: https://todo.sr.ht/~eliasnaur/gio/375
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-11 20:34:49 +01:00
Elias Naur 7785310e9d gpu/internal/vulkan,internal/vk: allocate descriptor sets in batches
We know exactly the configuration and number of sets in each pool, so
we may as well allocate them al up front.

References: https://todo.sr.ht/~eliasnaur/gio/375
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-11 20:34:49 +01:00
Elias Naur e8aa881d40 gpu/internal/vulkan: [Vulkan] replace Device/QueueWaitIdle with fences
vkDeviceWaitIdle and vkQueueWaitIdle are expensive; a vkFence is cheaper
and the usual way to ensure a previous frame has completed before starting
another.

References: https://todo.sr.ht/~eliasnaur/gio/375
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-11 20:34:49 +01:00
Elias Naur c244b7c349 gpu/internal/vulkan: resize descriptor set pool correctly
Before this change, the resized descriptor set pool would never
increase, defeating the purpose of re-using pools.

References: https://todo.sr.ht/~eliasnaur/gio/375
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-11 20:34:49 +01:00
Elias Naur b48b1270a3 app: [Android] re-introduce Choreographer for frame pacing
According to #375, change b86928ceec
increased frame pacing jitter. This change effectively reverts it
by re-introducing Choreographer for pacing.

References: https://todo.sr.ht/~eliasnaur/gio/375
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-11 20:34:49 +01:00
Elias Naur f19b16fecc gpu,app: don't call time.Now when not profiling
runtime.nanotime1 shows up in profiles on Android, so avoid calling
time.Now when we can.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-11 20:34:49 +01:00
Elias Naur 317635b176 .builds: disable Vulkan on FreeBSD
Running GPU tests on freeBSD currently fails with

vulkan: vkCreateGraphicsPipelines: error -8

Disable Vulkan by removing the vulkan-loader package.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-11 20:34:49 +01:00
Elias Naur 083d407b47 app: [macOS] ensure only one redraw request is in flight at any time
After 34f10d9cbb, the display link callback
will never block. However, if the main thread is blocked for another reason,
say a bug in the user program, callback requests will pile up as blocked
goroutines.

This change ensures that a redraw request is queued only if no other request
is pending.

References: https://todo.sr.ht/~eliasnaur/gio/370
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-10 10:25:08 +01:00
Chris Waldon cf787a1a8c widget/material: make clickable respect constraints
This change makes material.Clickable propagate the constraints it is
invoked with to the widget being made clickable. Without this, the
internal use of layout.Stack resets the minimum constraints to zero.
This has the confusing effect of breaking a working layout when you
decide to wrap one element in a Clickable, which I think is sufficiently
surprising that we should eliminate the footgun.

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
2022-03-10 08:42:43 +01:00
Elias Naur 9b2bdf6c0c cmd/gogio: bump Android target SDK to 31
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-08 10:49:32 +01:00
Elias Naur 3e18a310af io/router: replace cursor stack with area field
There's no need to track cursors separately from areas.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-07 13:19:38 +01:00
Elias Naur 99bb542960 io/router: always choose the topmost cursor among candidates
Fixes: https://todo.sr.ht/~eliasnaur/gio/373
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-07 13:05:59 +01:00
Elias Naur 68544111c1 io/router: ensure root pointer area in deferred calls
Fixes: https://todo.sr.ht/~eliasnaur/gio/372
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-07 12:08:08 +01:00
Inkeliz b82427d412 app: [windows] fix maximized window size
Previously, the window size is equal to the screen size. That doesn't
consider the size of the taskbar, causing the height be bigger than the
real height. Now, the maximized have the same behavior of windowed,
since both of them must include decorations and taskbar.

Signed-off-by: Inkeliz <inkeliz@inkeliz.com>
2022-03-07 11:02:47 +01:00
Elias Naur 2b0898fc67 .builds: upgrade Android builds tools and SDK
Fixes the build.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-07 09:42:53 +01:00
Elias Naur c0c25b777b app: replace C-to-Go handle maps with cgo.Handle
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-02 18:27:30 +01:00
Elias Naur 95365d5878 app/internal/windows,app: [Windows] generalize windows.GetPointerLong
We're about to use it to store the Go window cgo.Handle.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-02 18:15:38 +01:00
Elias Naur b9e8a177f0 app: [iOS] disable fallback decorations
Before this change, the iOS backend would not report decoration
support at window creation.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-02 17:55:40 +01:00
Elias Naur fea2f888bb all: replace unsafe slice operations with unsafe.Slice
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-02 16:53:02 +01:00
Elias Naur af8ca96414 go.*: upgrade to Go 1.17
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-02 16:53:02 +01:00
Elias Naur 09309d330d .builds: upgrade to Go 1.17.7
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-02 16:53:02 +01:00
Elias Naur b0838bf697 app: [Android] avoid a null pointer exception at initialization
GioView.onCreateView may call methods on the imm field of GioView.
Make sure it is initialized before use.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-02 16:42:12 +01:00
Chris Waldon 9b69233924 widget: test caret coordinates
This commit adds a check that caret coordinates never exceed
the max constraints of the editor.

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
2022-03-01 20:51:22 +01:00
Elias Naur 1fa9dd0fd0 app: [macOS] redraw when window moves to a different monitor
The monitor may have a different backing store scale, yet the
system doesn't redraw automatically when that happens

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-01 19:50:12 +01:00
Elias Naur 34f10d9cbb Revert "app: [macOS] pace display link"
This reverts commit 11f39582b8 that
introduced pacing of display link callbacks. Blocking the display link
callback introduced deadlocks with code that updates the display link
display.

Not pacing the display link may introduce extra view invalidations,
but invalidates are consolidated by the system and won't result in
extra redraws.

Fixes: https://todo.sr.ht/~eliasnaur/gio/370
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-03-01 19:33:26 +01:00
Egon Elbre cdb288d1f9 app,io/pointer: [API] remove CursorNameOp and rename CursorName -> Cursor
It's now possible to directly user pointer.Cursor to add to the ops.

   pointer.CursorText.Add(gtx.Ops)

This is an API change. Use pointer.Cursor directly instead of CursorNameOp.

Signed-off-by: Egon Elbre <egonelbre@gmail.com>
2022-03-01 14:05:46 +01:00
Egon Elbre 4172566aad io/pointer: [API] make cursor name into a byte
Add most of the common cursors defined by different systems.

Normalize cursor names to match CSS.

This is API change: some cursor names have changed, and the
underlying type is no longer a string.

Signed-off-by: Egon Elbre <egonelbre@gmail.com>
2022-03-01 14:04:21 +01:00
Chris Waldon a401d7aaff widget: fix Editor.CaretCoords when scrolled
This commit fixes the position returned by Editor.CaretCoords
to account for the scroll position of the editor. Without this
change, the returned coordinates can easily overflow the boundaries
of the editor widget when it has been scrolled on either axis.

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
2022-03-01 10:25:38 +01:00
Elias Naur 79bfd3adbd widget: reset focused states when disabled
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-28 18:17:06 +01:00
Elias Naur 50e35c9c3f widget/material: add focus and hover indicators to Clickable
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-28 17:28:13 +01:00
Elias Naur f711e7eaa8 app: ensure Window.Invalidate redraws after delivering events
Events such as system.CommandEvent may result in Invalidate being
called. Ensure animation state is properly updated.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-28 17:28:13 +01:00
Elias Naur aaf457d6e1 widget: treat enter and space as clicks on release, not press
Matches the usual behaviour of GUI toolkits.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-28 17:28:13 +01:00
Elias Naur 21431975de app,io/router: map Androids' DPAD_CENTER to a click
Mapping it to key.NameReturn confuses widgets such as Editor that
treats clicks separate from return key presses.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-28 17:28:13 +01:00
Elias Naur 2bea9a3736 internal/f32color: add support for light widgets to Hovered
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-28 13:20:33 +01:00
Elias Naur b74c9f9603 internal/f32color: extract color mixing into separate function
Refactor to enable Hovered for light widgets.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-28 13:13:14 +01:00
Elias Naur 73eabb352d io/router,app: add support for directional focus moves
Implement support for up/down/right/left directional focus moves
and map Android directional pad keys to focus moves.

Fixes: https://todo.sr.ht/~eliasnaur/gio/195
References: https://github.com/tailscale/tailscale/issues/1611
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-27 19:01:32 +01:00
Elias Naur 2e9df04a7b io/router: move focus on tab and shift+tab
Fixes: https://todo.sr.ht/~eliasnaur/gio/195
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-27 18:42:33 +01:00
Elias Naur cd2ade0583 widget,widget/material: make Clickable widgets focusable
This change adds focus and keyboard control to Clickable widgets.
They now consider a press of the enter or return key equivalent to
a click. To keep the change simple, the focus indication is the
same as the hover indication.

References: https://todo.sr.ht/~eliasnaur/gio/195
References: https://github.com/tailscale/tailscale/issues/1611
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-27 15:31:50 +01:00
Elias Naur eb48b45913 app: [Android] map numpad enter to key.NameReturn
Matches the other platforms by distinguishing NameReturn from NameEnter.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-27 15:31:50 +01:00
Elias Naur 8ff10a2068 widget: only ask for software keyboard once per click
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-26 17:27:51 +01:00
Chris Waldon a7afa4d6d1 widget: fix editor's io.Seeker implementation
For some reason, widget.Editor had a Seek method that ignored
the supplied offset and always seeked to offset zero. This
made it impossible to use it like any other io.Seeker. This
commit simply honors the requested offset.

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
2022-02-26 10:00:27 +01:00
Elias Naur 7f90f04c07 app: [macOS] pass key events to system before handling them
This change solves an issue where an editor key press such as
backspace would apply before the IME had a chance to process it.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-23 15:36:39 +01:00
Inkeliz 730e04630c io/pointer: rename cursors to match the JavaScript DOM
The names are a better match for layout.Direction.

Signed-off-by: Inkeliz <inkeliz@inkeliz.com>
2022-02-22 17:55:48 +01:00
Elias Naur 2e91edafbb app: [Wayland] always refresh frame pacing notification
Apparently, a Wayland server such as Sway and River may not issue
a frame pacing callback created before a top level configure event.
This change ensures the frame pacing callback is always refreshed
when animating, regardless of the reason for the frame.

Fixes: https://todo.sr.ht/~eliasnaur/gio/364
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-22 17:21:16 +01:00
Elias Naur 773a7e48a0 op/clip: don't panic when stroking empty path
Fixes: https://todo.sr.ht/~eliasnaur/gio/367
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-22 12:04:10 +01:00
Egon Elbre e9e00994cf app: [macos] add missing cursors
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
2022-02-22 10:39:17 +01:00
Egon Elbre b7a42da386 app: [windows] add missing cursors
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
2022-02-22 10:39:12 +01:00
Elias Naur bed5902476 widget: remove pointer area padding from Editor
Pointer padding was introduced in bfece0beba.
I don't remember why, and its commit message doesn't say. Regardless, adding
padding outside a widget's reported dimensions doesn't seem like a good idea
(see #365), and this change removes it.

Fixes: https://todo.sr.ht/~eliasnaur/gio/365
Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-02-19 12:15:48 +01:00
Pierre Curto 20d4bc21d5 app: remove defer op in window decorate
Fixes: https://todo.sr.ht/~eliasnaur/gio/361
Signed-off-by: Pierre Curto <pierre.curto@gmail.com>
2022-02-19 12:04:29 +01:00
Pierre Curto 42ea56ac44 widget: adjust Draggable.Pos to be relative
When dragging objects around an area, it is easier to
reason with the relative movement of the dragged item.

References: https://todo.sr.ht/~eliasnaur/gio/363
Signed-off-by: Pierre Curto <pierre.curto@gmail.com>
2022-02-19 12:03:10 +01:00