Commit graph

287 commits

Author SHA1 Message Date
Olivier Goffart
43caf257f6 janitor: feature cleanup (std is mandatory for the interpreter)
also no need to add default for our internal features, that's counter
productive
2023-10-27 10:08:42 +02:00
Olivier Goffart
c578a45c49 Preview: highlight the layouts in red 2023-10-24 15:49:12 +02: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
J-P Nurmi
c5248c005e Allow specifying paths for @library imports 2023-10-20 16:47:00 +02:00
Tobias Hunger
df544fe1c9 interpreter: Introduce internal feature
... and use it to hide internal functionality so users will notice that
they depend on fucntionality we do not provide any guarantees for.

Make the lsp and viewer request the internal feature when building the
interpreter.
2023-10-20 15:34:49 +02:00
Tobias Hunger
d6ec7f23a1 Change component factory API
... to avoid winit panicing on us when embedding some item tree.
2023-10-20 15:34:49 +02:00
Tobias Hunger
6cd68e84a7 interpreter: Fix highlighting
Clean the highlight pass so that it is in the same form as the paths
stored in the interpreter. Otherwise they do not match and highlighting
will fail.
2023-10-19 15:01:46 +02:00
Tobias Hunger
b12575a4c4 janitor: Go over our spell checking setup
* Extend the cspell word list
* Remove those extensions from individual source files
* white-list licenses and such as we should not meddle with those
* Fix spelling
2023-10-16 09:01:51 +02:00
Olivier Goffart
c0a12d05d5 interpreter: fix default style selection
The interpreter knows whether we have Qt or not, but its logic was not
adapted to the recent change of default.
2023-10-13 18:42:34 +02:00
Tobias Hunger
283ef4b461 compiler: Implement resource URL remapping
This is used in slintpad to map relative image URLs to their real
download locations.

This has the side-effect of removing the service worker.

Fixes: #2905
2023-10-12 21:41:26 +02:00
Olivier Goffart
762c21890c Compiler: be more granular for checking for explicit layout constraint
Layout code generates a lot of code and it may be beneficial not to
generate constraints if there is no constraints in that direction

Before the change:

cargo run -p slint-compiler -- examples/printerdemo_mcu/ui/printerdemo.slint -f rust | rustfmt | wc
  40014   86643 2010535
cargo run -p slint-compiler -- examples/gallery/gallery.slint -f rust | rustfmt | wc
  105715  229009 5434115

After this change:

cargo run -p slint-compiler -- examples/printerdemo_mcu/ui/printerdemo.slint -f rust | rustfmt | wc
  38873   83654 1925830
cargo run -p slint-compiler -- examples/gallery/gallery.slint -f rust | rustfmt | wc
  103817  224874 5316553

No measurable changes in compilation time.
2023-10-12 12:55:00 +02:00
Olivier Goffart
091dd0a7b9 Rename dynamic_component to dynamic_item_tree 2023-10-09 11:01:56 +02:00
Olivier Goffart
a5488d6285 Rename RepeatedComponent -> RepeatedItemTree
And some more cleanups
2023-10-09 11:01:56 +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
Olivier Goffart
9323d64479 Interpreter: fix crash when clicking on a item causes it to be destroyed
What happens is that the item is destroyed and removed from the layout
when clicking. But the send exit event still query the geometry if the
ItemRc which points to position in the layout cache that is not valid.

The Rust and C++ generator already check for the vailidity of the index
and return 0 if it's too large.

Fixes #3589
2023-10-02 16:50:29 +02:00
Guiguiprim
05cdf88871
Add spacing-horizontal and spacing-vertical to layout (#3532) 2023-09-28 13:49:28 +02:00
Tobias Hunger
85e1c6020b janitor: Use workspace dependnecies for the slint crates
This moves most of the version information we need to update into one
place.

Note that the workplace dependency features are in *addition* to any
feature set when using the workspace dependency. So we have all
workspace dependencies defined with `no-default-features = true`.
2023-09-25 16:34:16 +02:00
Tobias Hunger
d6695c55cb Janitor: Use cargo workspace package data more 2023-09-25 16:34:16 +02:00
Olivier Goffart
819ed07077 Adapt the highlight to the new geometry 2023-09-13 16:08:37 +02:00
Olivier Goffart
e0fd9a6105 WIP: Add item_geometry to the ComponentVTable
(unused yet)
2023-09-13 16:08:37 +02:00
Olivier Goffart
2a8ebb9752 Flickable: don't make the viewport special
Instead: add the viewport propety directly in the Flickable

Simplifies the compiler's code generation a bit
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
tronical
b8b9db4e42 Bump version number to 1.3.0 2023-09-05 15:46:36 +02:00
Olivier Goffart
8f16b519a2 use #repr(uX) instead of repr(C) for fieldless enums
Otherwise the ABI may differ between the C++ and the Rust
2023-08-31 10:22:03 +02:00
Olivier Goffart
fde561a56a Some improvements to Window visibility
- From C++, always call the Window::show() and hide() function instead
   of going through set_visible directly as it doesn't set the size of
   the WindowItem
 - show() should also call resize on the renderer
 - remove the is_visible in the WindowAdapterInternal as it is no longer
   needed
2023-08-30 13:05:35 +02:00
Simon Hausmann
3ea9c6249f Document how SetPropertyError::WrongType can be produced when assigning structs
Closes #3210
2023-08-24 13:25:43 +02:00
Tobias Hunger
09d3eaf00a Update license symlinks
run `cargo xtask check_reuse_compliance --fix-symlinks`
2023-08-16 11:46:15 +02:00
Florian Blasius
94ba420c01
napi: Added global support to ComponentInstance (#3246)
* napi: Added global support to ComponentInstance

* code review feedback.

* Update api/napi/__test__/globals.spec.ts

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>

* Update api/napi/__test__/globals.spec.ts

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>

* Update api/napi/__test__/globals.spec.ts

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>

* Update api/napi/__test__/globals.spec.ts

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>

* Update api/napi/__test__/globals.spec.ts

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>

* Update api/napi/__test__/globals.spec.ts

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>

* Code review feedback

* Code review feedback

---------

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>
2023-08-09 16:04:08 +02:00
darknight
37488f015d Refactoring: define macro rules to group builtin structs
apply new macro for struct declaration, type register,
doc generation, cpp header generation, struct-value conversion.
2023-08-03 11:01:18 +02:00
Florian Blasius
d3bfdf7e7f Added test for LangType to ValueType conversion 2023-08-01 12:24:32 +02:00
Florian Blasius
b3b6126f4b Added missing brush type to ValueType from LangType. 2023-08-01 12:24:32 +02:00
Simon Hausmann
7ff7c2f875 Fix let-else formatting
Nightly now supports it and thus `cargo +nightly fmt` yields a
difference.
2023-07-28 13:43:21 +02:00
Simon Hausmann
5c9eed62f1 Add a new backend that supports rendering fullscreen with Vulkan
This doesn't require a windowing system, just Linux and Vulkan drivers
that supports the display extensions.

It's called linuxkms as soon this will go beyond Vulkan and also support
EGL and perhaps dumb buffers for software rendering.
2023-07-28 13:40:37 +02:00
Olivier Goffart
3a807e46c1
Renderer feature refactor 2023-07-27 19:11:24 +02:00
Olivier Goffart
627deb1e9f interpreter: Hide the ComponentFactory from the public API
(also re-order the types in the docs of api/rs/slint/lib.rs to make the
non-literal types appart)
2023-07-27 12:04:16 +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
de96455dda No more panic when the interpreter runs into an ComponentContainer
... in one of the components it manages.
2023-07-27 12:04:16 +02:00
Tobias Hunger
9de515b768 Implement embedding in rust 2023-07-27 12:04:16 +02:00
Tobias Hunger
5db78b6dd2 Implement LLR code lowering for ComponentContainer 2023-07-27 12:04:16 +02:00
Tobias Hunger
d47d52bf52 ItemVTable::init(...): Take an ItemRc so that the itan can know where in the Item Tree it is located 2023-07-27 12:04:16 +02:00
Tobias Hunger
a866c6cf57 Implement embed_component in the interpreter 2023-07-27 12:04:16 +02:00
Tobias Hunger
74ef877f70 Add embed_component to ComponentVTable 2023-07-27 12:04:16 +02:00
Tobias Hunger
05e9ce078a Add a simplistic ComponentContainer element
It just registers the type, nothing more.
2023-07-27 12:04:16 +02:00
Tobias Hunger
2840886d28 Add component-factory type to Slint language
Add a type "component-factory" to the Slint language.
2023-07-27 12:04:16 +02:00
Simon Hausmann
af97435463 Replace show()/hide() in the WindowAdapter with set_visible(bool)
This makes for a smaller interface.
2023-07-26 13:53:45 +02:00
ogoffart
aebaa7d6c9 Bump version number to 1.2.0 2023-07-25 10:44:53 +00:00
Olivier Goffart
da55f4591a Silence nightly warning
```
warning: private item shadows public glob re-export
  --> internal/interpreter/api.rs:9:37
   |
9  | use i_slint_core::{Brush, PathData, SharedString, SharedVector};
   |                                     ^^^^^^^^^^^^
   |
note: the name `SharedString` in the type namespace is supposed to be publicly re-exported here
  --> internal/interpreter/api.rs:19:9
   |
19 | pub use i_slint_core::api::*;
   |         ^^^^^^^^^^^^^^^^^^^^
note: but the private item here shadows it
  --> internal/interpreter/api.rs:9:37
   |
9  | use i_slint_core::{Brush, PathData, SharedString, SharedVector};
   |                                     ^^^^^^^^^^^^
   = note: `#[warn(hidden_glob_reexports)]` on by default
```
2023-07-24 12:20:03 +02:00
Guiguiprim
ef8ddaaa1d
Add native support for min/max 2023-07-21 16:26:41 +02:00
Simon Hausmann
667d071ec0 doc: Minor expansion on the properties() docs in the interpreter 2023-07-17 15:52:42 +02:00