Commit Graph
100 Commits
Author SHA1 Message Date
Nathan Sobo 00c3afd330 Add documentation to GPUI (#3980)
🍐d with @conrad @mikayla-maki on covering some of the surface area.

Release Notes:

- N/A
2024-01-09 12:10:53 -07:00
Nathan SoboandConrad 42cbd103fb Even more docs
Co-authored-by: Conrad <conrad@zed.dev>
2024-01-09 12:02:12 -07:00
Nathan SoboandConrad 458c672a72 Add more API docs
Co-Authored-By: Conrad <conrad@zed.dev>
2024-01-09 11:16:56 -07:00
59f41acb82 Add a bunch of docs
Co-Authored-By: Conrad <conrad@zed.dev>
Co-Authored-By: Mikayla <mikayla@zed.dev>
2024-01-09 11:02:57 -07:00
Nathan Sobo 3d1f522566 Fix the alignment of the assistant (#3925)
![CleanShot 2024-01-05 at 17 30
11@2x](https://github.com/zed-industries/zed/assets/1789/b70226d0-bc07-4ce3-b45d-c25aace998c2)

Release Notes:

- Fixed the alignment of the assistant headers and text
- Increased the left padding on the assistant.
2024-01-05 17:51:44 -07:00
Nathan Sobo aaada7d508 Implement From<Rgba> for Fill 2024-01-05 17:33:22 -07:00
Nathan Sobo 436a281756 Align the assistant message headers with the editable message content
Since the message headers are buttons, we need to shift them relatively to
compensate for the fact that the background is only visible when hovered.
I'm ok with the background not being aligned so long as the unhovered text is.
2024-01-05 17:23:10 -07:00
Nathan Sobo 5f8417249c Return impl IntoElement in Render and RenderOnce traits (#3839)
- Returning `IntoElement` because it's more universal than `Element` and
allows us to easily return components.
- Using `impl IntoElement` in `RenderOnce` for consistency, which
requires `Component` to allocate an `AnyElement`. We use a bump
allocated arena anyway for these, and my benchmark doesn't show an
impact.


![frame-time-histogram](https://github.com/zed-industries/zed/assets/1789/d3889cca-9ebc-4d72-aa68-34a5be3bad3c)

In this histogram, frames-0 is this PR, frames-1 is main.

Release Notes:

- N/A
2024-01-03 10:37:26 -07:00
Nathan Sobo cb6652e7bf Clippy fixes for gpui2 (#3826)
It's not quite complete, but we gotta start somewhere.
Release Notes:

- N/A
2024-01-02 11:38:25 -07:00
Nathan Sobo c636731fd9 Add some docs 2024-01-02 11:30:58 -07:00
Nathan Sobo 30624b9899 Fix anti-aliasing artifacts in GPUI 2 borders (#3818)
Previously, we changed borders to be drawn after content, so they are no
longer part of the same quads as the background. In our change, we gave
the background quad a transparent black border and the border quads
transparent black backgrounds. However, this caused the other channels
to blend toward that black color before becoming fully transparent,
causing them to become darker.

In this PR, I source the "placeholder" color by duplicating the values
for the other channels and only adjust the alpha down to zero.

Release Notes:

- N/A
2024-01-02 10:32:23 -07:00
Nathan Sobo 68e7d99219 Return impl IntoElement from RenderOnce::render
This makes it a bit more approachable to implement.

This required converting the state of Component to AnyElement, which
costs an allocation. I'm hoping this will be ok performance-wise now
that AnyElements use bump allocation, but I need to benchmark still.
2024-01-02 10:27:09 -07:00
Nathan Sobo 1b5c8b2b4a Return impl IntoElement from Render::render trait 2024-01-02 10:09:05 -07:00
Nathan Sobo 6b14f2fd08 Rename build_view to new_view and build_model to new_model (#3823)
The word "new" is shorter and blends in with `new` constructors that are
common in Rust. Been meaning to do this for a while.

Release Notes:

- N/A
2024-01-02 08:11:53 -07:00
Nathan Sobo 47071605a1 Merge remote-tracking branch 'origin/main' into new-view-new-model-rename 2024-01-01 17:42:12 -07:00
Nathan Sobo db1cf8f6e1 Rename build_view to new_view and build_model to new_model
The word "new" is shorter and blends in with `new` constructors that are common
in Rust. Been meaning to do this for a while.
2024-01-01 17:42:01 -07:00
Nathan Sobo 789db30c42 Clean up Element API and start on docs (#3821)
Getting some scaffold docs in place and making some naming adjustments
to improve consistency with Rust APIs and clarity.

- Render::Element -> Render::Output, and Render::Output is now only
required to be IntoElement instead of Element so we can return
components.
- RenderOnce::Element -> RenderOnce::Output
- Element::layout -> Render::request_layout - Clarify that this doesn't
actually *perform* layout, but simply requests

Release Notes:

- N/A
2024-01-01 17:41:12 -07:00
Nathan Sobo f836873764 Fix merge 2024-01-01 12:23:42 -07:00
Nathan Sobo bcf0e3fb05 Merge branch 'pre-merge' into clean-up-doc-elements 2024-01-01 12:21:33 -07:00
Nathan Sobo 81b03d379e Rearrange to hopefully make merging easier 2024-01-01 12:21:17 -07:00
Nathan Sobo c6ae885c5d Add more docs 2024-01-01 11:35:40 -07:00
Nathan Sobo 51d1d92d66 Attempt to return impl Element from render. 3 errors. 2024-01-01 14:23:02 +01:00
Nathan Sobo 83923fd6d5 Clean up Element API and start on docs 2023-12-31 08:33:40 -07:00
Nathan Sobo 21f0409e3b Fix anti-aliasing artifacts in borders
Previously, we changed borders to be drawn after content, so they are no longer
part of the same quads as the background. In our change, we gave the background
quad a transparent black border and the border quads transparent black
backgrounds. However, this caused the other channels to blend toward that black
color before becoming fully transparent, causing them to become darker.

In this PR, I source the "placeholder" color by duplicating the values for
the other channels and only adjust the alpha down to zero.
2023-12-29 08:49:01 -07:00
Nathan Sobo 4e9fb26102 Adjust terminal and popover colors to better match original styling (#3816)
This may have made something else worse, but overall brings us more into
harmony.

Release Notes:

- N/A
2023-12-29 08:44:26 -07:00
Nathan Sobo 02f7e681a7 Import elevated surface color from hover popover 2023-12-27 11:58:26 -07:00
Nathan Sobo a2b0f14dc1 Rename size to dimensions for consistency 2023-12-27 11:23:12 -07:00
Nathan Sobo ddd6f0806b Render cursor text with the terminal's background color 2023-12-27 11:08:43 -07:00
Nathan Sobo 5cfd4b06b9 Use correct terminal background color 2023-12-27 10:46:25 -07:00
Nathan Sobo e5ce5e8692 Clear pending keystrokes when an action is dispatched (#3750)
This prevents the `cmd-k` keystroke, which clears the terminal, from
staying around as a pending keystroke on the parent workspace.

Release Notes:

- N/A
2023-12-20 20:50:59 -07:00
Nathan Sobo 4680aad885 Correctly compute placeholder text for buffer search query editor (#3749)
Rather than relying on the focused element, instead explicitly pass the
focus handle for the query editor when determining the prev/next
bindings. Only compute these values once.

Release Notes:

- N/A
2023-12-20 20:48:31 -07:00
Nathan Sobo 5747c9b7a1 Clear pending keystrokes when an action is dispatched 2023-12-20 20:41:36 -07:00
Nathan Sobo c56e7cd124 Remove unused import 2023-12-20 19:53:57 -07:00
Nathan Sobo 4f6bef5b63 Improve interaction between clicking and dragging (#3737)
Once a drag starts, we won't fire click listeners or style any elements
as active.

- Don't fire click listeners or show active state once a drag is in
progress
- Don't show hover style when a drag is in progress
- Draw borders above content
- If borders are opaque, apply them to the content mask. This prevents
hovers from firing on content underneath the border, which was creating
issues where the drag handle was inside the border, so we'd flicker the
hover when the mouse moved out of the drag handle and into the 1px
border on the left dock.
- Add a `block_mouse` helper which causes transparent elements to paint
an "opaque" layer to prevent mouse events from falling through. We use
this for the drag handle as well to disable hover, click, etc on items
in the panel.

Release Notes:

- N/A
2023-12-20 19:31:06 -07:00
Nathan Sobo 87ae21feb3 Merge remote-tracking branch 'origin/main' into cancel-clicks-on-drag 2023-12-20 15:01:10 -07:00
Nathan Sobo d499cccebb Only compute placeholder text once 2023-12-20 14:47:56 -07:00
Nathan Sobo 9acb5825e6 Compute the query editor placeholder text with a focus handle
So we're not beholden to the current focus.
2023-12-20 13:00:52 -07:00
15f16f08d9 Move application of content mask and z-index into Interactivity::paint
This allows the content mask to correctly apply to bounds used in event handlers,
which prevents content under opaque borders from being hovered in overflow hidden
containers.

Co-Authored-By: Antonio <antonio@zed.dev>
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2023-12-20 11:43:45 -07:00
fffb30ac6d Add InteractiveElement::block_mouse which renders an "opaque" layer
Co-Authored-By: Antonio <antonio@zed.dev>
Co-Authored-By: Max Brunsfeld <max@zed.dev>
2023-12-20 11:02:47 -07:00
Nathan SoboandAntonio dc047437c6 Don't consider any element hovered when actively dragging
Co-Authored-By: Antonio <antonio@zed.dev>
2023-12-20 10:46:36 -07:00
Nathan SoboandAntonio 5b29c89e1c Clear pending click state when dragging
Once a drag starts, we won't fire click listeners or style any elements
as active.

Co-Authored-By: Antonio <antonio@zed.dev>
2023-12-20 08:55:18 -07:00
Nathan SoboandAntonio 12bb13b9fc Perform a bounds check when allocating in the arena
This ensures we don't invoke undefined behavior when overflowing.

Co-Authored-By: Antonio <antonio@zed.dev>
2023-12-20 08:20:00 -07:00
Nathan Sobo d058515b81 Use a different frame arena for each window (#3696)
This fixes a panic that was caused by sharing the same frame allocator
for different windows.

Release Notes:

- N/A
2023-12-18 11:49:59 -07:00
Nathan Sobo 3781626379 Merge branch 'main' into arena 2023-12-15 13:22:19 -07:00
Nathan Sobo ad8165ae79 Rename draw2 -> draw_and_update_state 2023-12-14 17:20:27 -07:00
Nathan Sobo f4a954db4f Merge remote-tracking branch 'origin/main' into perf-2 2023-12-14 17:15:44 -07:00
Nathan Sobo 02606d1fb9 Merge remote-tracking branch 'origin/main' into perf-2 2023-12-14 16:56:36 -07:00
Nathan Sobo d13a21c238 Don't move in paint 2023-12-14 15:15:18 -07:00
Nathan Sobo fb3382bcc5 Merge remote-tracking branch 'origin/main' into perf-2 2023-12-14 14:16:59 -07:00
Nathan Sobo 0dd6c50a20 Use FxHashMap for element state 2023-12-14 14:06:19 -07:00
Nathan Sobo 3d1dae9a06 Make z_indices bigger in StackingOrder 2023-12-14 11:37:48 -07:00
Nathan Sobo 0d30b698a4 Don't allocate interactive bounds 2023-12-14 11:28:52 -07:00
Nathan Sobo 1ae25f52a1 WIP 2023-12-14 10:31:45 -07:00
Nathan Sobo 6f17cf7337 WIP 2023-12-14 09:25:14 -07:00
Nathan Sobo c863227dc2 Log frame timings 2023-12-13 18:44:21 -07:00
Nathan Sobo 1e4a7e6ef1 Don't notify when drawing 2023-12-13 16:05:34 -07:00
Nathan Sobo 213ed2028c Get more of chat panel compiling, but lots of todos 2023-12-08 12:31:07 -08:00
Nathan Sobo d7473ad6e7 Document geometry module and replace zero method with default (#3515)
Nothing earth-shattering here, but all our geometry types are now fully
documented.

Release Notes:

- N/A
2023-12-06 12:52:41 -07:00
Nathan Sobo ac07e230fa Document geometry 2023-12-06 12:28:44 -07:00
Nathan Sobo d2fe9f8f9b Merge remote-tracking branch 'origin/main' into app-menus 2023-12-05 16:54:38 -07:00
Nathan Sobo c9dd6b879c Fix cmd-n in the project panel context menu and bind global workspace actions (#3491)
This PR binds the `workspace::NewFile` action only in the `Workspace`
context. It previously was bound globally, which caused us to hijack the
`cmd-n` binding when the context menu was visible in the project panel.
In the process, we also added some other global workspace actions and
move some other global bindings to be bound only on `Pane` and
`Workspace`.

Release Notes:

- N/A
2023-12-05 16:52:39 -07:00
Nathan SoboandMarshall 65bb05af4c Merge main
Co-Authored-By: Marshall <marshall@zed.dev>
2023-12-05 16:47:13 -07:00
Nathan SoboandMarshall 82534b6612 Get app menus basically working
- Everything is still disabled when there is no active window.

Co-Authored-By: Marshall <marshall@zed.dev>
2023-12-05 16:37:01 -07:00
79567d1c87 Add AppContext::dispatch_action and use it for app menu actions
Co-Authored-By: Marshall <marshall@zed.dev>
Co-Authored-By: Julia <julia@zed.dev>
2023-12-05 15:49:06 -07:00
Nathan Sobo 631e264e3c Start on app menus 2023-12-05 13:17:59 -07:00
Nathan Sobo dffe0ea058 Reintroduce menu-related platform callbacks 2023-12-05 09:23:24 -07:00
Nathan SoboandMax 0edd89a92f Bind CloseWindow and Open actions on workspace
Co-Authored-By: Max <max@zed.dev>
2023-12-01 16:17:48 -07:00
Nathan Sobo 6f7995c150 Enable workspace::Open global action 2023-12-01 16:08:57 -07:00
Nathan SoboandMax 379ba620b2 Move workspace bindings to workspace context
Without this, hitting cmd-n on the context menu in the project browser
invokes the workspace::NewFile action instead of the project::NewFile
action. We're considering changing the behavior so that bindings with no
context can only invoke global actions.

Co-Authored-By: Max <max@zed.dev>
2023-12-01 15:59:40 -07:00
Nathan Sobo c23f17ee0b Reorganize element-related traits 2023-11-22 11:19:43 -07:00
Nathan Sobo 33cd6f520a Clean compile with redesigned element traits 2023-11-18 21:51:47 -07:00
Nathan Sobo 0673606de8 WIP 2023-11-18 20:22:43 -07:00
Nathan Sobo adc355a1e6 Element refinement passing on ui2 2023-11-18 20:05:47 -07:00
Nathan Sobo be33f000e2 WIP: Lots of errors, starting on resurrecting derive Element 2023-11-18 00:27:40 -07:00
Nathan Sobo 23ffce9fbe WIP: Work toward eliminating Component trait
This refactor enhances the overall design by promoting reusable and composable UI component structures within the Zed project codebase.
2023-11-18 00:03:23 -07:00
Nathan Sobo 2515bbf990 Move self in Element::paint
Remove mutable state borrows in favor of state ownership in render processes to streamline element rendering.
2023-11-17 23:32:55 -07:00
Nathan Sobo 0069dd5ce6 WIP 2023-11-17 20:05:37 -07:00
Nathan Sobo c866c211b5 Make static str and SharedString implement Element 2023-11-17 13:48:01 -07:00
Nathan Sobo 2fb13cf1ca Separate WrappedLines from ShapedLines (#3350)
ShapedLines are never wrapped, whereas WrappedLines are optionally
wrapped if they are associated with a wrap width. Originally, when
rewriting GPUI, I tried to combine everything because wrapping is
inherently optional for the Text element, but we have a bunch of APIs
that don't make sense on a line that may wrap, so we need a distinct
type for that case.

This is a precursor to implementing clickable links in markdown. I
noticed multiple places where we were confused about whether or not the
line was wrapped so this felt important.

Release Notes:

- N/A
2023-11-16 23:20:35 -07:00
Nathan Sobo 9558da8681 Separate WrappedLines from ShapedLines
ShapedLines are never wrapped, whereas WrappedLines are optionally wrapped if
they are associated with a wrap width. I tried to combine everything because
wrapping is inherently optional for the Text element, but we have a bunch of
APIs that don't make sense on a line that may wrap, so we need a distinct type
for that case.
2023-11-16 23:10:51 -07:00
Nathan Sobo e5ada92b7b Remove initialize from the Element trait (#3338)
Initially, we imagined registering keyboard handlers in the initialize
phase so we would understand the relationships between focus handles
during the layout pass, which would allow us to assign assign `focus_in`
styles that impact layout.

However, we soon realized that many elements aren't created until paint
time anyway, such as within the uniform list. Since it's impossible to
know prior to paint whether an element contains the focused element, it
makes more sense to eliminate the `focus_in` styling helper.

Release Notes:

- N/A
2023-11-15 19:36:35 -07:00
Nathan Sobo 4f09633379 Remove focus_in styling helper 2023-11-15 14:17:49 -07:00
Nathan Sobo c6b374ebc9 Remove initialize method from Element trait 2023-11-15 14:11:19 -07:00
Nathan Sobo e37d7f5b0e Fix click events by notifying when we assign pending_mouse_down (#3329)
We need to notify when we set the pending mouse down so we attach the
mouse up event listener before the mouse button is released.

Release Notes:

- N/A
2023-11-14 19:55:23 -07:00
Nathan Sobo 32ad486a8e Document contexts 2023-11-14 19:52:51 -07:00
Nathan Sobo 00d8921ae9 Fix click events by notifying when we assign pending_mouse_down 2023-11-14 19:22:41 -07:00
Nathan SoboandJulia bef4df5df9 Return an id from Element::element_id instead of calling cx.with_element_id
Co-Authored-By: Julia <julia@zed.dev>
2023-11-14 16:05:28 -07:00
Nathan Sobo bb584cc7c4 WIP 2023-11-14 11:00:52 -07:00
Nathan Sobo e08f1690b3 Remove commented field 2023-11-14 09:33:28 -07:00
Nathan Sobo 6abaacc457 Fix formatting 2023-11-14 01:58:10 -07:00
Nathan Sobo 364e3e7de5 Merge remote-tracking branch 'origin/main' into element-types 2023-11-14 01:55:58 -07:00
Nathan Sobo c6e8a097a3 Rename back to div 2023-11-14 01:41:55 -07:00
Nathan Sobo be18c47912 Remove unnecessary with_element_id calls 2023-11-14 01:38:13 -07:00
Nathan Sobo a5306c2312 Remove div module 2023-11-14 01:25:10 -07:00
Nathan Sobo 80014a28ea No compile errors or warnings 2023-11-14 01:23:09 -07:00
Nathan Sobo 27fb381cca Checkpoint 2023-11-14 01:15:48 -07:00
Nathan Sobo ce30a689a0 Checkpoint 2023-11-13 23:15:45 -07:00
Nathan Sobo 9382a304c4 Checkpoint 2023-11-13 23:03:14 -07:00
Nathan Sobo 1668330764 Checkpoint 2023-11-13 22:51:44 -07:00
Nathan Sobo 4a3a1ad0c3 Checkpoint 2023-11-13 22:42:19 -07:00