Commit graph

57 commits

Author SHA1 Message Date
Olivier Goffart
c71b58e556 Fix rust nightly warnings about unused import in tests 2024-02-28 11:19:26 +01:00
Olivier Goffart
7b2ff89f1c Fix nightly warnings
eg:
```
warning: the item `Box` is imported redundantly
```
2024-02-21 10:52:04 +01:00
Olivier Goffart
49b89f03f5 Fix C++ no_std build
(ammend previous commit)
2024-02-14 10:52:24 +01:00
Olivier Goffart
dab4ea44cd Fix C++ compilation with nightly rust
```
error: casting references to a bigger memory layout than the backing allocation is undefined behavior, even if the reference is unused
    --> internal/core/item_tree.rs:1035:32
     |
1035 |             Pin::new_unchecked(&*(&**component as *const Dyn as *const u8)),
     |                                ^^^^-----------^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     |                                    |
     |                                    backing allocation comes from here
     |
     = note: casting from `vtable::Dyn` (0 bytes) to `u8` (1 bytes)
     = note: `#[deny(invalid_reference_casting)]` on by default
```
2024-02-14 10:15:07 +01:00
Tobias Hunger
5e257e2654 LSP: Fix highlighting of top-level item 2023-11-03 22:14:20 +01:00
Tobias Hunger
87c65ec536 core: Add some small helpers to ItemRc
So that it becomes a bit easier to work on with things that should not
cross certain component boundaries (like `ComponentContainer`)
2023-11-03 22:14:20 +01:00
Olivier Goffart
5bf2c7192b Fix panic with very large ListView
In `ItemRc::find_sibling` we currently do:
 1. get the range
 2. check that the next index is within the range
 3. call `get_subtree`

The problem is that get_subtree itselg will call 'ensure_updated' which
will do the relayout of the ListView and may get a different range of
element.

So don't query the range before and just have get_subtree to return an
empty ItemWeak if we are out of the actual range.

Couldn't really find a way to make a test since this is called from
the accessibility code which is hard to test as is

For #3700
2023-10-21 14:03:39 +02:00
Olivier Goffart
852b4d906d Rename ComponentVTable to ItemTreeVTable
and their related name.
Also move the component module in the item_Tree module
register_component -> register_item_tree
ComponentItemTree -> ItemTreeNodeArray

For #3323

Rationale from that issue:

Right now, we use the term `component` in the Slint language and in the compiler to be a a tree of elements that can be used as an element in a .slint file.

The term is also currently used in the runtime as a tree of runtime Items that are allocated together. (declared in ComponentVTable)

But there are no 1 to 1 mapping between a `component` in the slint language, and a runtime Component.
(for example, the items behind a `if` or `for` or `PopupMenu` are in a different runtime component. And `component` declared in Slint are often inlined)

So we should rename the internal runtime `Component` to  `ItemTree`

The currently public `slint::ComponentHandle` wraps the "root" of the ItemTree, but that's ok because it is generated from a .slint `component`,  so it doesn't change name
2023-10-09 11:01:56 +02:00
Guilhem Vallat
c82ef57c26 fix item_tree test compilation 2023-09-13 16:08:37 +02:00
Olivier Goffart
083023866d Use the item_geometry from ComponentVTable 2023-09-13 16:08:37 +02:00
Simon Hausmann
3652f58a3f Change item indices from usize to u32
So that the compiler and run-time can never disagree on the
number of bytes the item index can use.
2023-09-12 08:53:58 +02:00
Tobias Hunger
baa4eb1ea3 Get rid of the window when building an embedded component
... now that we can get the WindowAdapter from the parent component when
we embed it.
2023-07-27 12:04:16 +02:00
Tobias Hunger
a362b7a1ae Add window_adapter to ComponentVTable
Make it duplicate as `maybe_window_adapter` with a boolean `do_create`
parameter.
2023-07-27 12:04:16 +02:00
Tobias Hunger
74ef877f70 Add embed_component to ComponentVTable 2023-07-27 12:04:16 +02:00
Aurindam Jana
5a4a7fee63
Update royalty free license to 1.1 (#2994) 2023-07-10 10:12:11 +02:00
Guilhem Vallat
555e191ab4 remove clippy::needless_borrow warnings 2023-06-30 12:28:13 +02:00
Guilhem Vallat
d27e0a4852 micro-optim ItemRc::component() returns a ref instead of cloning 2023-06-29 12:38:54 +02:00
Tobias Hunger
e02c360000 Clippy polish 2023-06-28 14:22:30 +02:00
Olivier Goffart
11dea135f7 Domain: slint-ui.com -> slint.dev 2023-06-16 10:55:08 +02:00
Aurindam Jana
039e54a5de
Add royalty free license to files except examples and docs (#2888) 2023-06-15 11:20:50 +02:00
Tobias Hunger
3ac01c3f07 clippy: Fix clippy warnings 2023-03-09 09:35:29 +01:00
Olivier Goffart
39aebc1f4e Use the std::ops::Range as range in the repeater
And fix the preview highlight to use that
2022-11-17 12:23:23 +01:00
Olivier Goffart
0d39e6f721 Make use of ItemRc::map_to_window 2022-11-17 12:23:23 +01:00
Simon Hausmann
c11b4305c1 Change Item::geometry() to return a LogicalRect 2022-10-13 17:02:18 +02:00
Simon Hausmann
8cba0622f5 Initial input method support for the winit backend and the FemtoVG/Skia renderers
Known caveats:

- winit doesn't forward mouse events to the IME, so clicking
  with the mouse while composing results in funny effects such
  as the pre-edit text following the cursor.
- With FemtoVG there's no text decoration support, thus no underlining
  of the preedit area.
2022-10-07 11:16:36 +02:00
Simon Hausmann
9d421de47d Remove remaining uses of LogicalRect::from_untyped 2022-09-30 13:00:37 +02:00
Simon Hausmann
cc8ff56d98 Remove more uses of LogicalRect::from_untyped() 2022-09-30 13:00:37 +02:00
Olivier Goffart
f91eac320d Refactor the mouse handling
Just make a single recursive function, it is easier to read than using
the visitor helper with a post and pre visit.

Also remove that function that visits with a post and pre visit as it is
no longer used
2022-09-16 08:45:46 +02:00
Simon Hausmann
fa956aca2d janitor: Fix nightly doc warnings about unused parentheses 2022-08-05 09:25:31 +02:00
Simon Hausmann
a5cd0a7173 Simplify window item interaction in the core library
Simlify the borrow_pin / downcast_pin dance a little by using VRcMapped.
2022-07-22 23:09:08 +02:00
Olivier Goffart
dfc87e7c33 Janitor: cleanup a function
no need to have two separate function for clipping items
2022-06-18 22:31:38 +02:00
Tobias Hunger
07ad20a09c
Basic Slint accessibility support (#1294)
Implement basic accessibility (a11y) support, using the Qt backend.

_This should get us started, but accessibility support is an additional way to interact with UIs that is very different from the "graphical way" most users will interact with the UI. No single PR will "make a toolkit accessibility", this needs to be an ongoing effort!_

Parts of this PR:

* Add functions to access a11y-related properties to Component
* Add helper functions to Item struct 
* Handle accessible- properties in the compiler
* Add documentation, add description, enforce some basic rules
* Make the Text element accessible by default
* Don't optimize away accessibility property in the LLR
* Ensure that accessibility property are marked as used
* Add some accessibility properties to the native style widgets
* Support for bool and integer `accessible` properties
* Implement basic support for accessibility
* Make basic widgets accessible by default
* Make slider focus-able and interactable with keyboard
* Tell a11y layer about value changes
* Generate QAccessible constants using bindgen
* Don't expose the `accessible` properties when using the MCU backend: There is no backend to make use of them
* Handle focus change based on keyboard focus of the window
* Report accessible widgets at correct positions
* Allow for (virtual) focus delegation at the a11y level
* Calculate value step size dynamically
* Make sure to not send notifications to a11y backend about dead objects
2022-06-08 20:42:10 +02:00
Tobias Hunger
55249c90de janitor: fix redundant clones 2022-05-22 11:59:00 +02:00
Tobias Hunger
186e7c0ff2
Fix focus of next item with empty components (#1247)
Handle empty components in the item tree when looking for the next item
to focus.
2022-05-09 12:46:10 +02:00
Olivier Goffart
2a55daff32 Focus: fix looping in repeater when the repeater ends with a repeater 2022-04-29 17:27:59 +02:00
Olivier Goffart
36313e8182 Fix focus navigation involving repeater at the end of the chain
The parent_node function doesn't reset its argument if it is already
set while calling the function
2022-04-29 16:35:46 +02:00
Olivier Goffart
da82ecf29e janitor: Remove outdated comment 2022-04-26 08:10:35 +02:00
Tobias Hunger
ddc21cb8e5
Make ItemRc::parent_item(...) return an Option<ItemRc> (#1189) 2022-04-22 14:27:34 +02:00
Tobias Hunger
a9bb0065b0 Fix forward focus movement with nested components
This used to pick the wrong node, which was then detected as a
focus loop, which in turn prevented the window from moving focus
forward.
2022-04-22 12:05:32 +02:00
Tobias Hunger
3404a20135 Split up tests to get a better overview over issues 2022-04-22 12:05:32 +02:00
Tobias Hunger
4611c33470 Add test case for nested component focus traversal 2022-04-22 12:05:32 +02:00
Tobias Hunger
416aa42d90 Component: Replace parent_item to parent_node
Remove the `parent_item` function. After the recent changes that did not
return an item anymore and since the item tree is exposed, this function
was only used to find the repeater a component was created by.

So replace the old function with a new one that only returns the parent
node in the parent component.

This saves a few lines of generated code that is not used anymore.

Co-authored-by: Simon Hausmann <hausmann@gmail.com>
2022-04-20 14:29:18 +02:00
Simon Hausmann
1b656ecb0d Clean up optimization to skip layers for opacity elements 2022-04-13 17:38:56 +02:00
Olivier Goffart
1b91158b46 corelib: allow to use i32 for coordinate instead of f32 2022-04-11 17:46:50 +02:00
Olivier Goffart
17fd446905 Get rid of a call to unsafe in the test 2022-04-07 16:59:38 +02:00
Olivier Goffart
0429e11cf7 Refactor: Move ItemRc and ItemWeak to item_tree.rs
Keep items.rs for the implementation of items, and move the logic
that helprs navigating the tree to the item_tree.rs module
2022-04-07 16:59:38 +02:00
Tobias Hunger
18ea9d302b Add test for default focus chain implementation 2022-04-05 16:34:16 +02:00
Tobias Hunger
f85812135c Add some basic tests for ComponentItemTree walking 2022-04-05 16:34:16 +02:00
Tobias Hunger
03e6f104be Make ComponentItemTree::new take a ComponentRefPin 2022-03-28 14:13:36 +02:00
Tobias Hunger
c1bb22bd00 Add helper struct to work with the ItemTree reported by the Component
Just a bit of convenience code to walk the ItemTree.
2022-03-28 14:13:36 +02:00