Commit graph

1945 commits

Author SHA1 Message Date
Olivier Goffart
b2645dff6c Wasm: use the winit spawn() api to run the event loop for the interpreter
This seems to solve the bug that the wasm interpreter (or slintpad) is
not working when compiled in release since the winit0.29 update
2023-10-30 14:17:10 +01:00
Olivier Goffart
0c529cd345 janitor: Some no-brainer deps update 2023-10-27 19:11:38 +02:00
Simon Hausmann
2310015315 janitor: Reformat JS types to match formatting of other files
(Just saved in VS code)
2023-10-27 16:42:54 +02:00
Simon Hausmann
ce0f8ddf7c janitor: reformat these files with vscode
This matches the existing formatting in the files present.
2023-10-27 16:41:06 +02:00
Simon Hausmann
80bb7af08c node: Fix typescript setup for tests
Share tsconfig.json so that ava runs the typescript compiler also on the tests.
Similary, the syntax check now also covers the tests.

Sadly, the exception that the Slint compiler throws is not type declared,
so we have to use any.
Similarly, the object share returned by loadFile() is unknown
in terms of properties, callbacks, etc.
2023-10-27 11:39:44 +02:00
Olivier Goffart
c51fb14a0e Improve the slint! macro with rust-analyzer with -
We currently use the debug representation of Span to know if they are
next touching eachother as there are no stable way currently.
But that doesn't work with rust analyzer as it doesn't have a
representation we can test.
Also Span::source_text is not implemented with rust analyzer.

So just default to identifier with `-` touching instead of not touching
as this happens more often.

One can still use `(foo)-(bar)` when one really need minus

CC #685
2023-10-26 13:13:03 +02:00
Florian Blasius
0045787e1c
node: api review adjustements part I (#3766)
* Update api/node/src/types/brush.rs

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update tests/cases/callbacks/handler_with_arg.slint

Co-authored-by: Olivier Goffart <olivier.goffart@slint.dev>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Olivier Goffart <olivier.goffart@slint.dev>
2023-10-26 10:02:49 +02:00
Simon Hausmann
25b380bcc8 Fix failing test-driver-nodejs based color tests
Same fix as parent commit
2023-10-25 16:16:27 +02:00
Simon Hausmann
4e80faa3b8 Fix tests not passing in debug mode
napi would assert when we extract an object from a reference twice:

```
thread '<unnamed>' panicked at /Users/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/napi-2.13.3/src/js_values/value_ref.rs:59:5:
assertion `left == right` failed: Ref count is not equal to 0 while dropping Ref, potential memory leak
  left: 1
 right: 0
stack backtrace:
```

Fix this by avoiding the use of Ref.
2023-10-25 16:16:27 +02:00
Simon Hausmann
2fc418251b node: remove workaround for font imports with relative paths
Commit a76c3ec789 fixes the underlying issue.
2023-10-25 15:04:55 +02:00
Simon Hausmann
192e04bea3 Fix broken doc link 2023-10-25 09:05:59 +02:00
Florian Blasius
bf77b064ab
Replace neon node port (#3744)
* Update api/node/README.md

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-24 15:07:59 +02:00
Olivier Goffart
78d273e599 Revert "Reduce the amount of re-creation of cells in repeaters when the model changes (#1954)"
This reverts commit 1162ebbb79.

Because otherwise if we keep the elements, their internal state is kept
and this causes bug #2598

Fixes #2598
2023-10-23 16:52:03 +02:00
Olivier Goffart
12cd8e71f1 WIP: some polish over the winit update to 0.29 2023-10-23 14:22:48 +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
Olivier Goffart
f4dd08783c janitor: C++: make the code more readable by having the type explicit 2023-10-19 18:09:14 +02:00
Olivier Goffart
172dcfa775 C++: fix crash when accessing empty model from Slint
Fixes #3704
2023-10-19 18:09:14 +02:00
Simon Hausmann
403bb6c716
napi: Catch typescript errors in the CI and in debug builds (#3703)
We use esbuild to transform index.ts into index.js, but we also need to
perform a type check. esbuild doesn't do that, this is left to the
typescript compiler. So let's run it with -noEmit as recommended by the
esbuild folks, in debug builds as well as in the CI (which doesn't do
debug builds).
2023-10-19 18:05:32 +02:00
Florian Blasius
f4eb46465b
napi documentation (#3689)
* napi documentation

* Add missing documentation
* Generate documentation with typedoc

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/index.ts

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/src/types/size.rs

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

* Update api/napi/cover.md

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

* Update api/napi/index.ts

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

* Update api/napi/index.ts

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

* Update api/napi/src/types/size.rs

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

* code review feedback.

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Code review feedback.

* Update api/napi/index.ts

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

* code review feedback.

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Update api/napi/cover.md

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

* Code review feedback.

* napi: added slint example to callback

* napi: added example to instantiating a component

* Update api/napi/src/interpreter/diagnostic.rs

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

* Update api/napi/src/interpreter/diagnostic.rs

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

* Update api/napi/src/interpreter/diagnostic.rs

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

* Update api/napi/src/interpreter/diagnostic.rs

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

* Update api/napi/src/interpreter/diagnostic.rs

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

* Update api/napi/src/types/brush.rs

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

* Update api/napi/src/types/image_data.rs

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

* napi: more code review stuff

---------

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>
2023-10-19 11:53:00 +02:00
Simon Hausmann
e0d1d4366d doc: In the type mapping, refer to the angle as "angle", not as "value" 2023-10-17 13:26:04 +02:00
Tobias Hunger
caee0b2f9d janitor: Fix a semi-random selection of clippy warnings
Nothing serious in there.
2023-10-16 13:44:37 +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
Florian Blasius
2324b35d12
napi test driver setup (#3635)
* Export interpreter stuff on private_api namespace

* Update api/napi/src/interpreter/value.rs

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update tests/driver/napi/build.rs

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

* Update tests/driver/napi/Cargo.toml

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


* Avoid unwanted prompt on Windows when running npm run build twice

Don't generate "napi.js" as then Windows will try to open it when running just "napi",
if nodejs registered .js as extension.

* Remove windows path workaround

It doesn't look like that it is needed.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>
Co-authored-by: Simon Hausmann <simon.hausmann@slint.dev>
2023-10-11 12:48:27 +02:00
Olivier Goffart
347b2d0fbf C++: Don't use optional::value
It is not available when targetting older macOs since it can throw an
exception that needs library support
2023-10-11 07:57:57 +02:00
Simon Hausmann
f5c3908b7e Fix build of Skia renderer in Yocto for armhf
As per commit 69feb7f0f40cc8dc4ca52777cf87a4c879d4b953 in meta-slint and
others, the Skia build is tricky because clang needs to be indirectly
and carefully instructed where gcc headers are located. In the Yocto
recipes, we go through lengths to set CLANGCC/CLANGXX correctly so that
the --target matches the triplet sub-directories in
recipe-sysroot/usr/lib and recipe-sysroot/usr/include/c++/$ver/ .

For aarch64 it's simple, there's usually just aarch64-$distro-linux, but
for example for armv7-$distro-linux-gnueabihf magic has to come
together: The gcc install dir is typically
recipe-sysroot/usr/lib/arm-$distro-linux-gnueabi (note the v7 and hf
absence). That means that's what --target needs to be when invoking
clang. But now the `hf` suffix is gone, which means clang relies on for
example -mfloat-abi=hard to avoid the use of gnu soft-float stubs. All
that's meticulously prepared in the Yocto recipe and placed for easy
consumption in CLANGCC/CLANGCXX environment variables. Therefore, when
those environment variables are set, don't overwrite them in
CORROSION_ENVIRONMENT_VARIABLES.when those environment variables are
set, don't overwrite them in CORROSION_ENVIRONMENT_VARIABLES.
2023-10-10 15:25:42 +02:00
Olivier Goffart
b88a3caacd swrenderer: Put the rotation feature behind a freature gate
We're not ready to make the API public as we want to have the API as
part of the Window rather than part of the renderer
2023-10-09 18:07:23 +02:00
Olivier Goffart
414a9e85e7 Expose swrenderer screen rotation to C++ and esp-idf 2023-10-09 18:07:23 +02:00
Florian Blasius
d425c13ff2
Added install script for napi (#3623) 2023-10-09 11:10:14 +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
4c0a435196 Implement TouchArea::scroll-event
Closes #1280
2023-10-07 07:59:53 +02:00
Olivier Goffart
22284000ec esp-idf: Wait for vsync before swapping frame buffers 2023-10-06 17:19:07 +02:00
Simon Hausmann
231dbd5695 Revert "Revert "Improve file type for SLINT_COMPILER cmake cache variable""
This reverts commit 292f487815.

Olivier had the brilliant idea of preceeding the path with a slash
on the Yocto side, so we can go back to the correct "type".
2023-10-06 14:56:28 +02:00
Simon Hausmann
292f487815 Revert "Improve file type for SLINT_COMPILER cmake cache variable"
This reverts commit 0773e51d92.

By the SLINT_COMPILER being a `FILEPATH`, cmake will convert any
relative path to an absolute path. That's not wanted for the Yocto
build, because there we pass
'$ENV{OECORE_NATIVE_SYSROOT}/usr/bin/slint-compiler', so that
the path is resolved dynamically against the environment variable that
the Yocto SDK sets.

CMake would convert this to an absolute path that points into the build
directory, i.e. it would be /home/blah/foo/\$ENV{...}
2023-10-06 13:05:30 +02:00
Florian Blasius
e34cd741a8
Create components from a slint file for napi (#3566)
* Get todo example running with napi.

* Code review fixes.

* Code review feedback.

* Code review fixes.

* docs fix

* Update api/napi/__test__/resources/error.slint

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Update api/napi/__test__/resources/test.slint

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* fix test

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-10-06 12:39:17 +02:00
Simon Hausmann
a982bdebe2 Fix cmake producing absolute DT_NEEDED paths in applications when linking against installed libslint_cpp on Linux
Commit 9b62b08ed6 fixed
https://github.com/slint-ui/slint/issues/1066 initially, but commit
1036c0d082 erroneously regressed this
again, because while Corrosion sets this property, it is only set on the
locally generated CMake target. We still need to propagate that also
into the installed CMake target, which this patch does.
2023-10-05 16:07:28 +02:00
Simon Hausmann
dbabb33c45 Fix build of dependencies that use pkg-config when building Slint in buildroot
When building with cmake, buildroot sets PKG_CONFIG_SYSROOT_DIR in its
toolchain file, and therefore it's only available at configure time but
not build time, which is when our dependencies need it.
2023-10-05 09:39:04 +02:00
Olivier Goffart
86968d6f80 Dependencies update 2023-10-02 20:27:25 +02:00
Simon Hausmann
0773e51d92 Improve file type for SLINT_COMPILER cmake cache variable
Use a FILEPATH to reflect that this is a path to a file and then the cmake configurator will
show a file dialog.
2023-10-02 13:15:20 +02:00
Olivier Goffart
d688f37ee8 Change alias to the native style depending on the platform
Fixes #3431
2023-09-29 17:05:10 +02:00
Simon Hausmann
87a548a972 Fix cross-compilation with a Yocto SDK
Since commit 7947f233f1a744f5ce9dfdf44372727d4fefb50b in Corrosion,
cmake will default to ${CMAKE_C_COMPILER} for linking a cdylib,
which means that C must be enabled as a language in the project.

Previously, it tried C, CXX, and Fortran and picked the first one.
2023-09-29 12:03:40 +02:00
Olivier Goffart
ea19c1e962 Remove the preview from the rust docs
rustdoc removes the `no-preview` tag, and we anyway do not have a
slint file to preview in the docs anymore
2023-09-29 10:40:45 +02:00
Simon Hausmann
c065a96acd Remove generated file 2023-09-29 09:12:44 +02:00
Florian Blasius
d43f5fe99a
Added window js wrapper for napi (#3544)
* Added window js wrapper for napi

* Remove position tests.

* Update api/napi/src/types/size.rs

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

* Code review fixes

---------

Co-authored-by: Simon Hausmann <simon.hausmann@slint-ui.com>
2023-09-29 08:29:36 +02:00
Florian Blasius
e051f0b514
Added Model implementation for napi (#3493) 2023-09-28 13:01:59 +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
da7023a073 Update version information to 1.3.0 2023-09-25 16:34:16 +02:00