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
This commit is contained in:
Tobias Hunger 2023-10-13 19:23:09 +02:00 committed by Tobias Hunger
parent ef39adce30
commit b12575a4c4
84 changed files with 236 additions and 219 deletions

View file

@ -16,7 +16,7 @@ inputs:
required: false required: false
default: "no" default: "no"
old-ubuntu: old-ubuntu:
description: "This is running on an older verison of Ubuntu" description: "This is running on an older version of Ubuntu"
required: false required: false
default: "no" default: "no"
@ -34,7 +34,7 @@ runs:
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install libseat-dev libsystemd-dev sudo apt-get install libseat-dev libsystemd-dev
shell: bash shell: bash
- name: Install C++ compiler - name: Install C++ compiler
if: ${{ (runner.os == 'Linux') && (inputs.force-gcc-10 == 'true') }} if: ${{ (runner.os == 'Linux') && (inputs.force-gcc-10 == 'true') }}
run: | run: |

12
FAQ.md
View file

@ -3,7 +3,7 @@
# Frequently Asked Questions: <!-- omit in toc --> # Frequently Asked Questions: <!-- omit in toc -->
- [General](#general) - [General](#general)
- [Why does Slint use a domain specific langauage?](#why-does-slint-use-a-domain-specific-langauage) - [Why does Slint use a domain specific language?](#why-does-slint-use-a-domain-specific-language)
- [Will there be API bindings to integrate with my favorite programming language?](#will-there-be-api-bindings-to-integrate-with-my-favorite-programming-language) - [Will there be API bindings to integrate with my favorite programming language?](#will-there-be-api-bindings-to-integrate-with-my-favorite-programming-language)
- [Licensing](#licensing) - [Licensing](#licensing)
- [Royalty-free license](#royalty-free-license) - [Royalty-free license](#royalty-free-license)
@ -11,7 +11,7 @@
- [What obligations do I need to fulfil to use the Royalty-free license?](#what-obligations-do-i-need-to-fulfil-to-use-the-royalty-free-license) - [What obligations do I need to fulfil to use the Royalty-free license?](#what-obligations-do-i-need-to-fulfil-to-use-the-royalty-free-license)
- [Are there any limitations with the Royalty-free license?](#are-there-any-limitations-with-the-royalty-free-license) - [Are there any limitations with the Royalty-free license?](#are-there-any-limitations-with-the-royalty-free-license)
- [Scenario: What happens if my application is open-source (e.g. under MIT), forked by a different person and then redistributed?](#scenario-what-happens-if-my-application-is-open-source-eg-under-mit-forked-by-a-different-person-and-then-redistributed) - [Scenario: What happens if my application is open-source (e.g. under MIT), forked by a different person and then redistributed?](#scenario-what-happens-if-my-application-is-open-source-eg-under-mit-forked-by-a-different-person-and-then-redistributed)
- [How are modifications to Slint itself covered under this licence?](#how-are-modifications-to-slint-itself-covered-under-this-licence) - [How are modifications to Slint itself covered under this license?](#how-are-modifications-to-slint-itself-covered-under-this-license)
- [If Slint were to be taken over by a larger company or the current owners were to have a change of heart, can they revoke existing licenses?](#if-slint-were-to-be-taken-over-by-a-larger-company-or-the-current-owners-were-to-have-a-change-of-heart-can-they-revoke-existing-licenses) - [If Slint were to be taken over by a larger company or the current owners were to have a change of heart, can they revoke existing licenses?](#if-slint-were-to-be-taken-over-by-a-larger-company-or-the-current-owners-were-to-have-a-change-of-heart-can-they-revoke-existing-licenses)
- [GPLv3](#gplv3) - [GPLv3](#gplv3)
- [If I link my program with Slint GPLv3, does it mean that I have to license my program under the GPLv3, too?](#if-i-link-my-program-with-slint-gplv3-does-it-mean-that-i-have-to-license-my-program-under-the-gplv3-too) - [If I link my program with Slint GPLv3, does it mean that I have to license my program under the GPLv3, too?](#if-i-link-my-program-with-slint-gplv3-does-it-mean-that-i-have-to-license-my-program-under-the-gplv3-too)
@ -27,7 +27,7 @@
## General ## General
### Why does Slint use a domain specific langauage? ### Why does Slint use a domain specific language?
From our long experience of building UI toolkits, we have learnt that a domain From our long experience of building UI toolkits, we have learnt that a domain
specific, declarative language is best suited to describe UIs. The Slint language specific, declarative language is best suited to describe UIs. The Slint language
@ -73,12 +73,12 @@ There are 2 limitations:
1. You are not permitted to distribute or make Slint publicly available alone and without integration into an application. For this purpose you may use the Software under the GNU General Public License, version 3. 1. You are not permitted to distribute or make Slint publicly available alone and without integration into an application. For this purpose you may use the Software under the GNU General Public License, version 3.
2. You are not permitted the use Slint within Embedded Systems. An Embedded System is a computer system designed to perform a specific task within a larger mechanical or electrical system. For the purposes of this license, mobile phones are not considered to be Embedded Systems. 2. You are not permitted the use Slint within Embedded Systems. An Embedded System is a computer system designed to perform a specific task within a larger mechanical or electrical system. For the purposes of this license, mobile phones are not considered to be Embedded Systems.
#### Scenario: What happens if my application is open-source (e.g. under MIT), forked by a different person and then redistributed? #### Scenario: What happens if my application is open-source (e.g. under MIT), forked by a different person and then redistributed?
The license does not restrict users on how they license their application. In the above scenario, the user may choose to use MIT-license for their application, which can be forked by a different person and then redistributed. If the forked application also uses Slint, then the person forking the application can also use the Royalty-free license as long as the obligations are fulfilled. Alternatively, the person may use one of the other Slint license options such as commercial or GPLv3. The license does not restrict users on how they license their application. In the above scenario, the user may choose to use MIT-license for their application, which can be forked by a different person and then redistributed. If the forked application also uses Slint, then the person forking the application can also use the Royalty-free license as long as the obligations are fulfilled. Alternatively, the person may use one of the other Slint license options such as commercial or GPLv3.
#### How are modifications to Slint itself covered under this licence? #### How are modifications to Slint itself covered under this license?
The license does not restrict 'if' and 'how' the modifications to Slint should be distributed. Say for example, Alice uses Slint under this new license to develop application A and modifies Slint in some way. She may choose to release the modifications to Slint under any license of her choice including any of the open source licenses. Alternatively she may decide not to release the modifications. The license does not restrict 'if' and 'how' the modifications to Slint should be distributed. Say for example, Alice uses Slint under this new license to develop application A and modifies Slint in some way. She may choose to release the modifications to Slint under any license of her choice including any of the open source licenses. Alternatively she may decide not to release the modifications.
@ -120,7 +120,7 @@ Under GPLv3. While the different software modules can remain under any license c
Alice can add a note that Bob can distribute BobApp under a proprietary license if he either acquires a Slint proprietary license or removes the dependency to Slint. Alice can add a note that Bob can distribute BobApp under a proprietary license if he either acquires a Slint proprietary license or removes the dependency to Slint.
## Miscelleneous ## Miscellaneous
### Do you provide Support? ### Do you provide Support?

View file

@ -1,5 +1,5 @@
<!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT --> <!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT -->
<!-- cSpell: ignore ccmake dslint femtovg skia winit --> <!-- cSpell: ignore ccmake dslint femtovg -->
# Installing Or Building With CMake # Installing Or Building With CMake
@ -43,7 +43,7 @@ First you need to install the prerequisites:
* Install Rust by following the [Rust Getting Started Guide](https://www.rust-lang.org/learn/get-started). If you already * Install Rust by following the [Rust Getting Started Guide](https://www.rust-lang.org/learn/get-started). If you already
have Rust installed, make sure that it's at least version 1.60 or newer. You can check which version you have installed have Rust installed, make sure that it's at least version 1.60 or newer. You can check which version you have installed
by running `rustc --version`. Once this is done, you should have the ```rustc``` compiler and the ```cargo``` build system installed in your path. by running `rustc --version`. Once this is done, you should have the `rustc` compiler and the `cargo` build system installed in your path.
* **[cmake](https://cmake.org/download/)** (3.21 or newer) * **[cmake](https://cmake.org/download/)** (3.21 or newer)
* A C++ compiler that supports C++20 (e.g., **MSVC 2019 16.6** on Windows) * A C++ compiler that supports C++20 (e.g., **MSVC 2019 16.6** on Windows)

View file

@ -82,7 +82,7 @@ private:
/// ///
/// If the implementation of this bi-directional message passing protocol is incomplete, the user /// If the implementation of this bi-directional message passing protocol is incomplete, the user
/// may experience unexpected behavior, or the intention of the developer calling functions on the /// may experience unexpected behavior, or the intention of the developer calling functions on the
/// Window API may not be fullfilled. /// Window API may not be fulfilled.
/// ///
/// Your WindowAdapter subclass must hold a renderer (either a SoftwareRenderer or a SkiaRenderer). /// Your WindowAdapter subclass must hold a renderer (either a SoftwareRenderer or a SkiaRenderer).
/// In the renderer() method, you must return a reference to it. /// In the renderer() method, you must return a reference to it.

View file

@ -145,7 +145,7 @@ public:
/// ///
/// Safety: /// Safety:
/// ///
/// This function is unsafe because invalid texture ids may lead to undefind behavior in OpenGL /// This function is unsafe because invalid texture ids may lead to undefined behavior in OpenGL
/// drivers. A valid texture id is one that was created by the same OpenGL context that is /// drivers. A valid texture id is one that was created by the same OpenGL context that is
/// current during any of the invocations of the callback set on /// current during any of the invocations of the callback set on
/// [`Window::set_rendering_notifier()`]. OpenGL contexts between instances of [`slint::Window`] /// [`Window::set_rendering_notifier()`]. OpenGL contexts between instances of [`slint::Window`]

View file

@ -152,7 +152,7 @@ mod allocator {
if align <= core::mem::size_of::<usize>() { if align <= core::mem::size_of::<usize>() {
malloc(layout.size()) as *mut u8 malloc(layout.size()) as *mut u8
} else { } else {
// Ideally we'd use alligned_alloc, but that function caused heap corruption with esp-idf // Ideally we'd use aligned_alloc, but that function caused heap corruption with esp-idf
let ptr = malloc(layout.size() + align) as *mut u8; let ptr = malloc(layout.size() + align) as *mut u8;
let shift = align - (ptr as usize % align); let shift = align - (ptr as usize % align);
let ptr = ptr.add(shift); let ptr = ptr.add(shift);

View file

@ -181,7 +181,7 @@ struct CppPlatform {
window_factory: unsafe extern "C" fn(PlatformUserData, *mut WindowAdapterRcOpaque), window_factory: unsafe extern "C" fn(PlatformUserData, *mut WindowAdapterRcOpaque),
#[cfg(not(feature = "std"))] #[cfg(not(feature = "std"))]
duration_since_start: unsafe extern "C" fn(PlatformUserData) -> u64, duration_since_start: unsafe extern "C" fn(PlatformUserData) -> u64,
// silent the warning depite `Clipboard` is a `#[non_exhaustive]` enum from another crate. // silent the warning despite `Clipboard` is a `#[non_exhaustive]` enum from another crate.
#[allow(improper_ctypes_definitions)] #[allow(improper_ctypes_definitions)]
set_clipboard_text: unsafe extern "C" fn(PlatformUserData, &SharedString, Clipboard), set_clipboard_text: unsafe extern "C" fn(PlatformUserData, &SharedString, Clipboard),
#[allow(improper_ctypes_definitions)] #[allow(improper_ctypes_definitions)]

View file

@ -221,8 +221,8 @@ impl<Sink: Write> Write for CodeFormatter<Sink> {
fn formatter_test() { fn formatter_test() {
fn format_code(code: &str) -> String { fn format_code(code: &str) -> String {
let mut res = Vec::new(); let mut res = Vec::new();
let mut formater = CodeFormatter::new(&mut res); let mut formatter = CodeFormatter::new(&mut res);
formater.write_all(code.as_bytes()).unwrap(); formatter.write_all(code.as_bytes()).unwrap();
String::from_utf8(res).unwrap() String::from_utf8(res).unwrap()
} }

View file

@ -33,8 +33,7 @@
"uninit", "uninit",
"unmap", "unmap",
"unsync", "unsync",
"vsync", "vsync"
"winit"
], ],
"ignoreRegExpList": [ "ignoreRegExpList": [
"/#\\[cfg\\b.+\\]/", "/#\\[cfg\\b.+\\]/",
@ -61,60 +60,89 @@
} }
], ],
"words": [ "words": [
"aarch",
"accesskit",
"antialiasing",
"armv",
"Bezier", "Bezier",
"cbindgen", "cbindgen",
"cmake", "cmake",
"colspan", "colspan",
"combobox",
"datastructures", "datastructures",
"dealloc", "dealloc",
"flickable", "flickable",
"focusable", // common term in UI (css, dom, toolkits) "focusable", // common term in UI (css, dom, toolkits)
"fullscreen",
"gles",
"Goffart", "Goffart",
"gradians", "gradians",
"grayscale",
"groupbox",
"Hausmann", "Hausmann",
"Helvetica", "Helvetica",
"inout",
"layouting", // This would be worth renaming in the ItemVTable to layout_info "layouting", // This would be worth renaming in the ItemVTable to layout_info
"linebreak", "linebreak",
"lineedit",
"listview", "listview",
"lvalue", "lvalue",
"microcontroller", "microcontroller",
"microcontrollers", "microcontrollers",
"MSVC", "MSVC",
"napi",
"ogoffart", "ogoffart",
"opengl", "opengl",
"opengles",
"pixmap", "pixmap",
"riscv",
"rowspan", "rowspan",
"rustc", "rustc",
"rvalue", "rvalue",
"scrollview",
"SDK", "SDK",
"sixtyfps", "sixtyfps",
"skia",
"slint", "slint",
"slintpad", "slintpad",
"SPDX", "spdx",
"spinbox",
"streetsidesoftware", "streetsidesoftware",
"struct", "struct",
"structs", "structs",
"tableview",
"tabwidget", "tabwidget",
"testcase", "testcase",
"textedit", "textedit",
"tmpobj", "tmpobj",
"toolchain", "toolchain",
"toolkit",
"touchpad",
"tronical", "tronical",
"typeloader",
"uefi",
"uncompiled", "uncompiled",
"unerase",
"unmapping", // present participle of unmap "unmapping", // present participle of unmap
"untracked", "untracked",
"viewbox", "viewbox",
"vtable", "vtable",
"vulkan",
"wasm", "wasm",
"webassembly", "webassembly",
"windowrc", // use in slint_windowrc_foo FFI functions "windowrc", // use in slint_windowrc_foo FFI functions
"xtask" "winit",
"xtask",
"xtensa"
], ],
"ignorePaths": [ "ignorePaths": [
"api/cpp/docs/conf.py", "api/cpp/docs/conf.py",
"Cargo.toml", "Cargo.toml",
"CHANGELOG.md", "CHANGELOG.md",
"cspell.json", "cspell.json",
"LICENSES",
"examples/*/lang/**",
"internal/backends/qt/QtThirdPartySoftware_Listing.txt",
".github/workflows/*.yaml" ".github/workflows/*.yaml"
], ],
"ignoreRegExpList": [ "ignoreRegExpList": [

View file

@ -1,8 +1,9 @@
<!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT --> <!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT -->
## `StandardTableView` ## `StandardTableView`
The `StandardTableView` represents a table of data with columns and rows. Cells The `StandardTableView` represents a table of data with columns and rows. Cells
are organised in a model where each row is a model of are organized in a model where each row is a model of
\[[`StandardListViewItem`](../builtins/structs.md#standardlistviewitem)\]. \[[`StandardListViewItem`](../builtins/structs.md#standardlistviewitem)\].
### Properties ### Properties
@ -23,7 +24,7 @@ Same as [`ListView`](#listview), and in addition:
### Functions ### Functions
- **`set-current-row(int)`: Sets the current row by index and brings it into view. - **`set-current-row(int)`**: Sets the current row by index and brings it into view.
### Example ### Example

View file

@ -1,4 +1,5 @@
<!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT --> <!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT -->
## `Switch` ## `Switch`
A `Switch` is a representation of a physical switch that allows users to turn things on or off. Consider using a `CheckBox` instead if you want the user to select or deselect values, for example in a list with multiple options. A `Switch` is a representation of a physical switch that allows users to turn things on or off. Consider using a `CheckBox` instead if you want the user to select or deselect values, for example in a list with multiple options.
@ -7,7 +8,7 @@ A `Switch` is a representation of a physical switch that allows users to turn th
- **`checked`**: (_inout_ _bool_): Whether the switch is checked or not (default: false). - **`checked`**: (_inout_ _bool_): Whether the switch is checked or not (default: false).
- **`enabled`**: (_in_ _bool_): Defaults to true. When false, the switch can't be pressed (default: true). - **`enabled`**: (_in_ _bool_): Defaults to true. When false, the switch can't be pressed (default: true).
- **`has-focus`**: (_out_ _bool_): Set to true when the switch has keyboard focue (default: false). - **`has-focus`**: (_out_ _bool_): Set to true when the switch has keyboard focus (default: false).
- **`text`** (_in_ _string_): The text written next to the switch. - **`text`** (_in_ _string_): The text written next to the switch.
### Callbacks ### Callbacks

View file

@ -1,4 +1,5 @@
<!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT --> <!-- Copyright © SixtyFPS GmbH <info@slint.dev> ; SPDX-License-Identifier: MIT -->
## Introduction ## Introduction
This document will outline the process of triaging GitHub issues and provide an explanation of GitHub labels. This document will outline the process of triaging GitHub issues and provide an explanation of GitHub labels.
@ -6,7 +7,7 @@ This document will outline the process of triaging GitHub issues and provide an
## GitHub Labels ## GitHub Labels
Labels that start with `a:` are area labels. Labels that start with `a:` are area labels.
Area labels help categorise issues based on their scope. Each issue should ideally have at least one area label. Area labels help categorize issues based on their scope. Each issue should ideally have at least one area label.
The description of the area label ends with a code that indicates the maintainer or backup maintainer of that area. The description of the area label ends with a code that indicates the maintainer or backup maintainer of that area.
For example, if a label description ends with `(mX,bY)`, it means person X is the maintainer, and person Y is the backup maintainer for that area. For example, if a label description ends with `(mX,bY)`, it means person X is the maintainer, and person Y is the backup maintainer for that area.
@ -57,7 +58,7 @@ Filter for all the issues not assigned to an area:
curl -H 'Accept: application/vnd.github.v3+json' "https://api.github.com/repos/slint-ui/slint/labels?per_page=100&page=1" | jq -r '.[].name' | grep "^a:" | sed 's/^\(.*\)$/-label:\\\"\1\\\"/' | xargs echo curl -H 'Accept: application/vnd.github.v3+json' "https://api.github.com/repos/slint-ui/slint/labels?per_page=100&page=1" | jq -r '.[].name' | grep "^a:" | sed 's/^\(.*\)$/-label:\\\"\1\\\"/' | xargs echo
``` ```
Filter of all issues for which X is a maintainer (replace the X in `"mX"` with the right letter name, or `bX` for the backup) Filter of all issues for which X is a maintainer (replace the X in `"mX"` with the right letter name, or `bX` for the backup)
```sh ```sh
curl -H 'Accept: application/vnd.github.v3+json' "https://api.github.com/repos/slint-ui/slint/labels?per_page=100&page=1" | jq -r '.[] | select(.description | contains("mX")) | .name' | awk '{printf "\"%s\",", $0}' | sed 's/^\(.*\),$/label:\1\n/' curl -H 'Accept: application/vnd.github.v3+json' "https://api.github.com/repos/slint-ui/slint/labels?per_page=100&page=1" | jq -r '.[] | select(.description | contains("mX")) | .name' | awk '{printf "\"%s\",", $0}' | sed 's/^\(.*\),$/label:\1\n/'

View file

@ -3,7 +3,7 @@
// This file is the entry point for the vscode extension (not the browser one) // This file is the entry point for the vscode extension (not the browser one)
// cSpell: ignore aarch armv codespaces gnueabihf vsix // cSpell: ignore codespaces gnueabihf vsix
import * as path from "path"; import * as path from "path";
import { existsSync } from "fs"; import { existsSync } from "fs";

View file

@ -1,8 +1,6 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore winit
import { Uri, TextDocumentShowOptions } from "vscode"; import { Uri, TextDocumentShowOptions } from "vscode";
import * as vscode from "vscode"; import * as vscode from "vscode";
import { BaseLanguageClient } from "vscode-languageclient"; import { BaseLanguageClient } from "vscode-languageclient";
@ -245,7 +243,7 @@ function getPreviewHtml(slint_wasm_preview_url: Uri): string {
try { try {
slint.run_event_loop(); slint.run_event_loop();
} catch (e) { } catch (e) {
// ignore winit event loop exception // ignore event loop exception
} }
current_instance = (async () => { current_instance = (async () => {
let new_instance = await component.create("slint_canvas"); let new_instance = await component.create("slint_canvas");

View file

@ -15,7 +15,7 @@ component TempConv inherits Window {
} }
} }
Text { Text {
text: "°Celcius = "; text: "°Celsius = ";
vertical-alignment: center; vertical-alignment: center;
} }
f := LineEdit { f := LineEdit {

View file

@ -1,3 +1,3 @@
SPDX-FileCopyrightText: 2021 Goole Noto Font <https://github.com/googlefonts/noto-emoji> SPDX-FileCopyrightText: 2021 Google Noto Font <https://github.com/googlefonts/noto-emoji>
SPDX-License-Identifier: OFL-1.1 SPDX-License-Identifier: OFL-1.1

View file

@ -25,10 +25,10 @@ export component KioskOverlay {
i-text := Text { i-text := Text {
x: parent.width - self.width - 5px; x: parent.width - self.width - 5px;
y: 5px; y: 5px;
font-size: Theme.typo.desciption.size; font-size: Theme.typo.description.size;
font-weight: Theme.typo.desciption.weight; font-weight: Theme.typo.description.weight;
text: "Kiosk"; text: "Kiosk";
color: Theme.palette.limon-green; color: Theme.palette.lemon-green;
opacity: 0.5; opacity: 0.5;
} }
} }

View file

@ -9,10 +9,10 @@ import { IconButton, CheckBox, RadioButton, Switch, ScrollView, Item, ItemGroupB
export global SettingsAdapter { export global SettingsAdapter {
callback check-radio-option(int /* index */); callback check-radio-option(int /* index */);
// fuctions // functions
in-out property <bool> fuction-one-checked: true; in-out property <bool> function-one-checked: true;
in-out property <bool> kiosk-mode-checked; in-out property <bool> kiosk-mode-checked;
in-out property <bool> fuction-three-checked; in-out property <bool> function-three-checked;
// radio options // radio options
in-out property <bool> radio-option-one-checked: true; in-out property <bool> radio-option-one-checked: true;
@ -39,10 +39,10 @@ export component Settings inherits Page {
callback close(); callback close();
callback check-radio-option <=> SettingsAdapter.check-radio-option; callback check-radio-option <=> SettingsAdapter.check-radio-option;
// fuctions // functions
in-out property <bool> fuction-one-checked <=> SettingsAdapter.fuction-one-checked; in-out property <bool> function-one-checked <=> SettingsAdapter.function-one-checked;
in-out property <bool> kiosk-mode-checked <=> SettingsAdapter.kiosk-mode-checked; in-out property <bool> kiosk-mode-checked <=> SettingsAdapter.kiosk-mode-checked;
in-out property <bool> fuction-three-checked <=> SettingsAdapter.fuction-three-checked; in-out property <bool> function-three-checked <=> SettingsAdapter.function-three-checked;
// radio options // radio options
in-out property <bool> radio-option-one-checked <=> SettingsAdapter.radio-option-one-checked; in-out property <bool> radio-option-one-checked <=> SettingsAdapter.radio-option-one-checked;
@ -75,7 +75,7 @@ export component Settings inherits Page {
text: "Function One"; text: "Function One";
i-function-one-check-box := CheckBox { i-function-one-check-box := CheckBox {
checked <=> root.fuction-one-checked; checked <=> root.function-one-checked;
} }
clicked => { clicked => {
@ -181,12 +181,12 @@ export component Settings inherits Page {
Item { Item {
text: "Function Three"; text: "Function Three";
i-fuction-three := Switch { i-function-three := Switch {
checked <=> root.fuction-three-checked; checked <=> root.function-three-checked;
} }
clicked => { clicked => {
i-fuction-three.clicked(); i-function-three.clicked();
} }
} }
} }

View file

@ -7,8 +7,8 @@ export struct Palette {
pure-black: brush, pure-black: brush,
dark-deep-blue: brush, dark-deep-blue: brush,
shark-gray: brush, shark-gray: brush,
limon-green: brush, lemon-green: brush,
limon-green-op10: brush, lemon-green-op10: brush,
white: brush, white: brush,
dimmer: brush, dimmer: brush,
@ -24,7 +24,7 @@ export struct Palette {
slint-blue-800: brush, slint-blue-800: brush,
slint-blue-900: brush, slint-blue-900: brush,
// limon green // lime green
lime-green-50: brush, lime-green-50: brush,
lime-green-100: brush, lime-green-100: brush,
lime-green-200: brush, lime-green-200: brush,
@ -37,9 +37,9 @@ export struct Palette {
lime-green-900: brush, lime-green-900: brush,
// gradients // gradients
limon-green-gradient: brush, lemon-green-gradient: brush,
limon-green-light-gradient: brush, lemon-green-light-gradient: brush,
limon-green-radial-gradient: brush, lemon-green-radial-gradient: brush,
slint-blue-gradient: brush, slint-blue-gradient: brush,
heliotrope-gradient: brush, heliotrope-gradient: brush,
dark-left-gradient: brush, dark-left-gradient: brush,
@ -79,8 +79,8 @@ export struct Typo {
header-item: Font, header-item: Font,
header-item-light: Font, header-item-light: Font,
value: Font, value: Font,
desciption: Font, description: Font,
desciption-light: Font, description-light: Font,
value-big: Font, value-big: Font,
} }
@ -91,8 +91,8 @@ export global Theme {
pure-black: #000000, pure-black: #000000,
dark-deep-blue: #040708, dark-deep-blue: #040708,
shark-gray: #2C2F36, shark-gray: #2C2F36,
limon-green: #DEFB3A, lemon-green: #DEFB3A,
limon-green-op10: #defb3a1a, lemon-green-op10: #defb3a1a,
white: #FFFFFF, white: #FFFFFF,
dimmer: #0000007b, dimmer: #0000007b,
@ -108,7 +108,7 @@ export global Theme {
slint-blue-800: #0019F2, slint-blue-800: #0019F2,
slint-blue-900: #000AEF, slint-blue-900: #000AEF,
// limon gren // lime green
lime-green-50: #FBFFE6, lime-green-50: #FBFFE6,
lime-green-100: #F4FDC0, lime-green-100: #F4FDC0,
lime-green-200: #EBFC93, lime-green-200: #EBFC93,
@ -121,9 +121,9 @@ export global Theme {
lime-green-900: #D9D9D9, lime-green-900: #D9D9D9,
// gradients // gradients
limon-green-gradient: @linear-gradient(135deg, #defb3a75 0%, #defb3a00 100%), lemon-green-gradient: @linear-gradient(135deg, #defb3a75 0%, #defb3a00 100%),
limon-green-light-gradient: @linear-gradient(135deg, #DEFB3A 0%, #defb3a33 100%), lemon-green-light-gradient: @linear-gradient(135deg, #DEFB3A 0%, #defb3a33 100%),
limon-green-radial-gradient: @radial-gradient(circle, #DEFB3A20 0%, #DEFB3A00 100%), lemon-green-radial-gradient: @radial-gradient(circle, #DEFB3A20 0%, #DEFB3A00 100%),
slint-blue-gradient: @linear-gradient(135deg, #6c4bff76 0%, #6C4BFF00 100%), slint-blue-gradient: @linear-gradient(135deg, #6c4bff76 0%, #6C4BFF00 100%),
heliotrope-gradient: @linear-gradient(180deg, #896fff 0%, #39316B 100%), heliotrope-gradient: @linear-gradient(180deg, #896fff 0%, #39316B 100%),
dark-left-gradient: @linear-gradient(90deg, #040708 0%, #04070875 50%, #04070800 100%), dark-left-gradient: @linear-gradient(90deg, #040708 0%, #04070875 50%, #04070800 100%),
@ -176,11 +176,11 @@ export global Theme {
size: 26px, size: 26px,
weight: 500 weight: 500
}, },
desciption: { description: {
size: 14px, size: 14px,
weight: 400 weight: 400
}, },
desciption-light: { description-light: {
size: 14px, size: 14px,
weight: 200 weight: 200
}, },
@ -189,4 +189,4 @@ export global Theme {
weight: 200 weight: 200
}, },
}; };
} }

View file

@ -24,8 +24,8 @@ component ValueLabel {
vertical-stretch: 0; vertical-stretch: 0;
horizontal-alignment: right; horizontal-alignment: right;
text: root.text; text: root.text;
font-size: Theme.typo.desciption-light.size; font-size: Theme.typo.description-light.size;
font-weight: Theme.typo.desciption-light.weight; font-weight: Theme.typo.description-light.weight;
} }
Text { Text {
@ -33,14 +33,14 @@ component ValueLabel {
vertical-stretch: 0; vertical-stretch: 0;
horizontal-alignment: left; horizontal-alignment: left;
text: "°"; text: "°";
font-size: Theme.typo.desciption-light.size; font-size: Theme.typo.description-light.size;
font-weight: Theme.typo.desciption-light.weight; font-weight: Theme.typo.description-light.weight;
} }
} }
} }
component BarTile { component BarTile {
in property <string> title <=> i-tiitle.text; in property <string> title <=> i-title.text;
in property <image> icon <=> i-icon.source; in property <image> icon <=> i-icon.source;
in property <int> max; in property <int> max;
in property <int> min; in property <int> min;
@ -54,12 +54,12 @@ component BarTile {
VerticalLayout { VerticalLayout {
spacing: 7px; spacing: 7px;
i-tiitle := Text { i-title := Text {
color: Theme.palette.white; color: Theme.palette.white;
vertical-stretch: 0; vertical-stretch: 0;
horizontal-alignment: center; horizontal-alignment: center;
font-size: Theme.typo.desciption.size; font-size: Theme.typo.description.size;
font-weight: Theme.typo.desciption.weight; font-weight: Theme.typo.description.weight;
} }
i-icon := Image { i-icon := Image {
@ -88,7 +88,7 @@ component BarTile {
min_width: 12px; min_width: 12px;
border-radius: 6px; border-radius: 6px;
background: Theme.palette.limon-green-light-gradient; background: Theme.palette.lemon-green-light-gradient;
} }
} }
} }
@ -138,4 +138,4 @@ export component BarTiles {
] ]
} }
} }
} }

View file

@ -36,8 +36,8 @@ export component CheckBox {
states [ states [
checked when checked : { checked when checked : {
i-container.border-width: 0; i-container.border-width: 0;
i-container.background: Theme.palette.limon-green; i-container.background: Theme.palette.lemon-green;
i-check-icon.opacity: 1.0; i-check-icon.opacity: 1.0;
} }
] ]
} }

View file

@ -31,7 +31,7 @@ export component IconButton {
opacity: 0.25; opacity: 0.25;
} }
pressed when i-touch-area.pressed : { pressed when i-touch-area.pressed : {
i-icon.colorize: Theme.palette.limon-green; i-icon.colorize: Theme.palette.lemon-green;
} }
] ]
} }

View file

@ -31,8 +31,8 @@ export component Item {
i-text := Text { i-text := Text {
horizontal-stretch: 1; horizontal-stretch: 1;
color: Theme.palette.white; color: Theme.palette.white;
font-size: Theme.typo.desciption.size; font-size: Theme.typo.description.size;
font-weight: Theme.typo.desciption.weight; font-weight: Theme.typo.description.weight;
vertical-alignment: center; vertical-alignment: center;
} }
@ -71,4 +71,4 @@ export component ItemGroupBox {
} }
} }
} }
} }

View file

@ -31,8 +31,8 @@ component ListViewItem {
i-text := Text { i-text := Text {
horizontal-stretch: 1; horizontal-stretch: 1;
color: Theme.palette.white; color: Theme.palette.white;
font-size: Theme.typo.desciption.size; font-size: Theme.typo.description.size;
font-weight: Theme.typo.desciption.weight; font-weight: Theme.typo.description.weight;
vertical-alignment: center; vertical-alignment: center;
} }
@ -40,7 +40,7 @@ component ListViewItem {
horizontal-stretch: 0; horizontal-stretch: 0;
visible: false; visible: false;
source: Images.check; source: Images.check;
colorize: Theme.palette.limon-green; colorize: Theme.palette.lemon-green;
} }
} }
@ -52,7 +52,7 @@ component ListViewItem {
states [ states [
selected when selected : { selected when selected : {
i-container.border-color: Theme.palette.limon-green; i-container.border-color: Theme.palette.lemon-green;
i-icon.visible: true; i-icon.visible: true;
} }
] ]
@ -88,4 +88,4 @@ export component ListView {
selected-index = index; selected-index = index;
selection-changed(index); selection-changed(index);
} }
} }

View file

@ -26,7 +26,7 @@ export component Navigation {
TouchArea { TouchArea {
clicked => { clicked => {
toogle-show-navigation(); toggle-show-navigation();
root.clicked(); root.clicked();
} }
} }
@ -93,7 +93,7 @@ export component Navigation {
} }
} }
function toogle-show-navigation() { function toggle-show-navigation() {
show-navigation = !self.show-navigation; show-navigation = !self.show-navigation;
} }
@ -108,4 +108,4 @@ export component Navigation {
public function hide() { public function hide() {
show-navigation = false; show-navigation = false;
} }
} }

View file

@ -31,8 +31,8 @@ export component RadioButton {
states [ states [
checked when checked : { checked when checked : {
i-container.border-color: Theme.palette.limon-green; i-container.border-color: Theme.palette.lemon-green;
i-indicator.background: Theme.palette.limon-green; i-indicator.background: Theme.palette.lemon-green;
} }
] ]
} }

View file

@ -45,10 +45,10 @@ export component Switch {
states [ states [
checked when checked : { checked when checked : {
i-container.background: Theme.palette.limon-green-op10; i-container.background: Theme.palette.lemon-green-op10;
i-container.border-color: Theme.palette.limon-green; i-container.border-color: Theme.palette.lemon-green;
i-indicator.background: Theme.palette.limon-green; i-indicator.background: Theme.palette.lemon-green;
i-indicator.x: i-container.width - i-indicator.width - 2 * i-container.border-width; i-indicator.x: i-container.width - i-indicator.width - 2 * i-container.border-width;
} }
] ]
} }

View file

@ -48,11 +48,11 @@ component Tab {
animate opacity { duration: Theme.durations.medium; } animate opacity { duration: Theme.durations.medium; }
} }
i-inidator := Rectangle { i-initiator := Rectangle {
width: 0; width: 0;
y: 0; y: 0;
height: 1px; height: 1px;
background: Theme.palette.limon-green; background: Theme.palette.lemon-green;
visible: selected; visible: selected;
animate width { duration: Theme.durations.medium; } animate width { duration: Theme.durations.medium; }
@ -62,8 +62,8 @@ component Tab {
states [ states [
selected when selected : { selected when selected : {
i-inidator.width: root.width; i-initiator.width: root.width;
i-title.color: Theme.palette.limon-green; i-title.color: Theme.palette.lemon-green;
i-gradient.opacity: 1.0; i-gradient.opacity: 1.0;
} }
] ]
@ -102,4 +102,4 @@ export component TabWidget {
} }
} }
} }
} }

View file

@ -27,7 +27,7 @@ export component Tile {
x: (parent.width - self.width) / 2; x: (parent.width - self.width) / 2;
min-width: 52px; min-width: 52px;
height: 43px; height: 43px;
colorize: Theme.palette.limon-green; colorize: Theme.palette.lemon-green;
image-fit: contain; image-fit: contain;
} }
@ -42,16 +42,16 @@ export component Tile {
i-text := Text { i-text := Text {
horizontal-alignment: center; horizontal-alignment: center;
color: Theme.palette.white; color: Theme.palette.white;
font-size: Theme.typo.desciption.size; font-size: Theme.typo.description.size;
font-weight: Theme.typo.desciption.weight; font-weight: Theme.typo.description.weight;
} }
i-sub-text := Text { i-sub-text := Text {
horizontal-alignment: center; horizontal-alignment: center;
color: Theme.palette.limon-green; color: Theme.palette.lemon-green;
font-size: Theme.typo.desciption-light.size; font-size: Theme.typo.description-light.size;
font-weight: Theme.typo.desciption-light.weight; font-weight: Theme.typo.description-light.weight;
} }
} }
} }
} }

View file

@ -17,7 +17,7 @@ component ValueDelegate {
Rectangle { Rectangle {
min_width: 1px; min_width: 1px;
background: alternative-colors ? Theme.palette.slint-blue-300 : Theme.palette.limon-green; background: alternative-colors ? Theme.palette.slint-blue-300 : Theme.palette.lemon-green;
horizontal-stretch: 0; horizontal-stretch: 0;
} }
@ -26,7 +26,7 @@ component ValueDelegate {
horizontal-stretch: 1; horizontal-stretch: 1;
i-title := Text { i-title := Text {
color: alternative-colors ? Theme.palette.slint-blue-300 : Theme.palette.limon-green; color: alternative-colors ? Theme.palette.slint-blue-300 : Theme.palette.lemon-green;
font-size: Theme.typo.label.size; font-size: Theme.typo.label.size;
font-weight: Theme.typo.label.weight; font-weight: Theme.typo.label.weight;
} }
@ -46,7 +46,7 @@ component ValueDelegate {
i-unit := Text { i-unit := Text {
y: Theme.spaces.small; y: Theme.spaces.small;
vertical-alignment: center; vertical-alignment: center;
color: alternative-colors ? Theme.palette.slint-blue-300 : Theme.palette.limon-green; color: alternative-colors ? Theme.palette.slint-blue-300 : Theme.palette.lemon-green;
font-size: Theme.typo.label-light.size; font-size: Theme.typo.label-light.size;
font-weight: Theme.typo.label-light.weight; font-weight: Theme.typo.label-light.weight;
} }
@ -85,7 +85,7 @@ export component ValueDisplay {
width: 100%; width: 100%;
height: 100%; height: 100%;
border-radius: 4px; border-radius: 4px;
background: alternative-colors ? Theme.palette.slint-blue-gradient : Theme.palette.limon-green-gradient; background: alternative-colors ? Theme.palette.slint-blue-gradient : Theme.palette.lemon-green-gradient;
} }
if(model.length > 0 && !vertical) : HorizontalLayout { if(model.length > 0 && !vertical) : HorizontalLayout {
@ -116,4 +116,4 @@ export component ValueDisplay {
active: root.active; active: root.active;
} }
} }
} }

View file

@ -7,7 +7,7 @@ import { Page } from "page.slint";
export component AboutPage inherits Page { export component AboutPage inherits Page {
title: "About"; title: "About";
description: "Are you curious now? Check out the docs and gettings start from the Github repository and the website https://slint.dev and try it yourself."; description: "Are you curious now? Check out the docs and getting starteds from the Github repository and the website https://slint.dev and try it yourself.";
AboutSlint {} AboutSlint {}
} }

View file

@ -9,7 +9,7 @@ use std::rc::Rc;
slint::include_modules!(); slint::include_modules!();
/// Returns the current time formated as a string /// Returns the current time formatted as a string
fn current_time() -> slint::SharedString { fn current_time() -> slint::SharedString {
#[cfg(not(target_arch = "wasm32"))] #[cfg(not(target_arch = "wasm32"))]
return chrono::Local::now().format("%H:%M:%S %d/%m/%Y").to_string().into(); return chrono::Local::now().format("%H:%M:%S %d/%m/%Y").to_string().into();

View file

@ -62,7 +62,7 @@ export component MainWindow inherits Window {
title: "Slint printer demo"; title: "Slint printer demo";
background: white; background: white;
/// Note that this property is overwriten in the .cpp and .rs code. /// Note that this property is overwritten in the .cpp and .rs code.
/// The data is only in this file so it looks good in the viewer /// The data is only in this file so it looks good in the viewer
in-out property <[InkLevel]> ink-levels: [ in-out property <[InkLevel]> ink-levels: [
{color: #0ff, level: 60%}, {color: #0ff, level: 60%},
@ -158,7 +158,7 @@ export component MainWindow inherits Window {
} }
invisible when root.active-page > 0 && root.active-page != idx + 1 : { invisible when root.active-page > 0 && root.active-page != idx + 1 : {
color: transparent; color: transparent;
// FIXME: should probaby hide the entire item under with z-ordering // FIXME: should probably hide the entire item under with z-ordering
img.y: 1000000000px; img.y: 1000000000px;
text.color: #0000; text.color: #0000;
} }

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore combobox groupbox lineedit listviewitem scrollview spinbox stylemetrics // cSpell: ignore listviewitem stylemetrics
fn main() { fn main() {
println!("cargo:rerun-if-env-changed=SLINT_NO_QT"); println!("cargo:rerun-if-env-changed=SLINT_NO_QT");

View file

@ -5,7 +5,7 @@
```sh ```sh
bindgen /usr/include/qt/QtCore/qnamespace.h --whitelist-type Qt::Key --whitelist-type Qt::KeyboardModifier --whitelist-type Qt::AlignmentFlag --whitelist-type Qt::TextFlag --whitelist-type Qt::FillRule --whitelist-type Qt::CursorShape -o internal/backends/qt/key_generated.rs -- -I /usr/include/qt -xc++ bindgen /usr/include/qt/QtCore/qnamespace.h --whitelist-type Qt::Key --whitelist-type Qt::KeyboardModifier --whitelist-type Qt::AlignmentFlag --whitelist-type Qt::TextFlag --whitelist-type Qt::FillRule --whitelist-type Qt::CursorShape -o internal/backends/qt/key_generated.rs -- -I /usr/include/qt -xc++
``` ```
then add licence header and this doc then add license header and this doc
*/ */
#![allow(unused)] #![allow(unused)]
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]

View file

@ -219,7 +219,7 @@ cpp! {{
// For our hacks to work, we need to have some invisible parent widget. // For our hacks to work, we need to have some invisible parent widget.
static QWidget globalParent; static QWidget globalParent;
ptr->setParent(&globalParent); ptr->setParent(&globalParent);
// Let Qt thinks the widget is visible even if it isn't so update() from animation is forwared // Let Qt thinks the widget is visible even if it isn't so update() from animation is forwarded
ptr->setAttribute(Qt::WA_WState_Visible, true); ptr->setAttribute(Qt::WA_WState_Visible, true);
// Hack so update() send a UpdateLater event // Hack so update() send a UpdateLater event
ptr->setAttribute(Qt::WA_WState_InPaintEvent, true); ptr->setAttribute(Qt::WA_WState_InPaintEvent, true);

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore antialiasing frameless qbrush qpointf qreal qwidgetsize svgz // cSpell: ignore frameless qbrush qpointf qreal qwidgetsize svgz
use cpp::*; use cpp::*;
use euclid::approxeq::ApproxEq; use euclid::approxeq::ApproxEq;

View file

@ -131,7 +131,7 @@ pub const HAS_NATIVE_STYLE: bool = false;
#[doc(hidden)] #[doc(hidden)]
pub mod native_widgets {} pub mod native_widgets {}
#[doc = concat!("This struct implements the Slint Platform trait. Use this in conjuction with [`slint::platform::set_platform`](https://slint.dev/releases/", env!("CARGO_PKG_VERSION"), "/docs/rust/slint/platform/fn.set_platform.html) to initialize.")] #[doc = concat!("This struct implements the Slint Platform trait. Use this in conjunction with [`slint::platform::set_platform`](https://slint.dev/releases/", env!("CARGO_PKG_VERSION"), "/docs/rust/slint/platform/fn.set_platform.html) to initialize.")]
/// Slint to use winit for all windowing system interaction. /// Slint to use winit for all windowing system interaction.
/// ///
/// ```rust,no_run /// ```rust,no_run

View file

@ -3,7 +3,7 @@
//! This module contains all enums exposed in the .slint language. //! This module contains all enums exposed in the .slint language.
// cSpell: ignore combobox evenodd grabbable horizontalbox horizontallayout nesw spinbox standardbutton standardtableview verticalbox verticallayout // cSpell: ignore evenodd grabbable horizontalbox horizontallayout nesw standardbutton standardtableview verticalbox verticallayout
/// Call a macro with every enum exposed in the .slint language /// Call a macro with every enum exposed in the .slint language
/// ///

View file

@ -63,7 +63,7 @@ pub enum Type {
name: Option<String>, name: Option<String>,
/// When declared in .slint, this is the node of the declaration. /// When declared in .slint, this is the node of the declaration.
node: Option<syntax_nodes::ObjectType>, node: Option<syntax_nodes::ObjectType>,
/// deriven /// derived
rust_attributes: Option<Vec<String>>, rust_attributes: Option<Vec<String>>,
}, },
Enumeration(Rc<Enumeration>), Enumeration(Rc<Enumeration>),

View file

@ -11,7 +11,7 @@ pub mod lower_expression;
pub mod lower_to_item_tree; pub mod lower_to_item_tree;
pub mod pretty_print; pub mod pretty_print;
/// The optimisation passes over the LLR /// The optimization passes over the LLR
pub mod optim_passes { pub mod optim_passes {
pub mod count_property_use; pub mod count_property_use;
mod inline_expressions; mod inline_expressions;

View file

@ -152,7 +152,7 @@ fn analyze_element(
if binding.borrow().analysis.is_some() { if binding.borrow().analysis.is_some() {
continue; continue;
} }
analyse_binding( analyze_binding(
&PropertyPath::from(NamedReference::new(elem, name)), &PropertyPath::from(NamedReference::new(elem, name)),
context, context,
reverse_aliases, reverse_aliases,
@ -194,7 +194,7 @@ fn analyze_element(
#[derive(Copy, Clone, dm::BitAnd, dm::BitOr, dm::BitAndAssign, dm::BitOrAssign)] #[derive(Copy, Clone, dm::BitAnd, dm::BitOr, dm::BitAndAssign, dm::BitOrAssign)]
struct DependsOnExternal(bool); struct DependsOnExternal(bool);
fn analyse_binding( fn analyze_binding(
current: &PropertyPath, current: &PropertyPath,
context: &mut AnalysisContext, context: &mut AnalysisContext,
reverse_aliases: &ReverseAliases, reverse_aliases: &ReverseAliases,
@ -342,7 +342,7 @@ fn process_property(
loop { loop {
let element = prop.prop.element(); let element = prop.prop.element();
if element.borrow().bindings.contains_key(prop.prop.name()) { if element.borrow().bindings.contains_key(prop.prop.name()) {
analyse_binding(&prop, context, reverse_aliases, diag); analyze_binding(&prop, context, reverse_aliases, diag);
} }
let next = if let ElementType::Component(base) = &element.borrow().base_type { let next = if let ElementType::Component(base) = &element.borrow().base_type {
if element.borrow().property_declarations.contains_key(prop.prop.name()) { if element.borrow().property_declarations.contains_key(prop.prop.name()) {

View file

@ -1210,7 +1210,7 @@ impl Expression {
fields: elem_fields, fields: elem_fields,
name: elem_name, name: elem_name,
node: elem_node, node: elem_node,
rust_attributes: deriven, rust_attributes: derived,
}, },
) => { ) => {
for (elem_name, elem_ty) in elem_fields.into_iter() { for (elem_name, elem_ty) in elem_fields.into_iter() {
@ -1232,7 +1232,7 @@ impl Expression {
name: result_name.or(elem_name), name: result_name.or(elem_name),
fields: result_fields, fields: result_fields,
node: result_node.or(elem_node), node: result_node.or(elem_node),
rust_attributes: rust_attributes.or(deriven), rust_attributes: rust_attributes.or(derived),
} }
} }
(Type::Array(lhs), Type::Array(rhs)) => Type::Array( (Type::Array(lhs), Type::Array(rhs)) => Type::Array(

View file

@ -26,7 +26,7 @@ export Test := Rectangle {
// ^error{The binding for the property 'd' is part of a binding loop} // ^error{The binding for the property 'd' is part of a binding loop}
property <int> e: root.b; property <int> e: root.b;
// ^error{The binding for the property 'e' is part of a binding loop} // ^error{The binding for the property 'e' is part of a binding loop}
property <int> w: root.a + root.b; // This id not part of a loopµ property <int> w: root.a + root.b; // This id not part of a loop
property<bool> cond: xx.x == 0; property<bool> cond: xx.x == 0;
// ^error{The binding for the property 'cond' is part of a binding loop} // ^error{The binding for the property 'cond' is part of a binding loop}

View file

@ -9,7 +9,7 @@ export SuperSimple := Rectangle {
background: blue + 3 background: blue + 3
x: 45phx; x: 45phx;
// ^error{Syntax error: expected ';'} // ^error{Syntax error: expected ';'}
// FIXME: would be nice if the smeicolon error was on the previous line // FIXME: would be nice if the semicolon error was on the previous line
} }
there was already parse error in this scope, so no more there was already parse error in this scope, so no more
@ -29,5 +29,3 @@ struct F {};
export {F}; export {F};
// ^error{Extra semicolon. Remove this semicolon} // ^error{Extra semicolon. Remove this semicolon}

View file

@ -2,7 +2,7 @@
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
export Unused := Rectangle { export Unused := Rectangle {
// FIXME: looks like binding loop is not diagnozed in exports if the properties are not used // FIXME: looks like binding loop is not diagnosed in exports if the properties are not used
property <int> a1: a2; property <int> a1: a2;
property <int> a2: a1; property <int> a2: a1;
} }

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore combobox spinbox standardbutton // cSpell: ignore standardbutton
import { LineEditInner, AboutSlint } from "../common/common.slint"; import { LineEditInner, AboutSlint } from "../common/common.slint";
import { StandardButton } from "../common/standardbutton.slint"; import { StandardButton } from "../common/standardbutton.slint";
@ -46,4 +46,3 @@ export { TextEdit }
export { StyleMetrics, ScrollView, Button, StandardButton, AboutSlint } export { StyleMetrics, ScrollView, Button, StandardButton, AboutSlint }
export * from "tableview.slint"; export * from "tableview.slint";

View file

@ -52,7 +52,7 @@ export global Palette {
out property <brush> popup-border: dark-color-scheme ? #525252 :#0000000A; out property <brush> popup-border: dark-color-scheme ? #525252 :#0000000A;
out property <brush> decent-border: dark-color-scheme ? #ffffff14 : #00000014; out property <brush> decent-border: dark-color-scheme ? #ffffff14 : #00000014;
out property <brush> surface-thumb: dark-color-scheme ? #cacaca : #ffffff; out property <brush> surface-thumb: dark-color-scheme ? #cacaca : #ffffff;
out property <brush> separater: dark-color-scheme ? #000000 : #d9d9d9; out property <brush> separator: dark-color-scheme ? #000000 : #d9d9d9;
// FIXME: dark color // FIXME: dark color
out property <brush> dimmer: @linear-gradient(180deg, #FFFFFFFF 100%, #FFFFFF00 0%); out property <brush> dimmer: @linear-gradient(180deg, #FFFFFFFF 100%, #FFFFFF00 0%);
@ -69,4 +69,4 @@ export global Icons {
out property <image> left: @image-url("_left.svg"); out property <image> left: @image-url("_left.svg");
out property <image> right: @image-url("_right.svg"); out property <image> right: @image-url("_right.svg");
out property <image> up: @image-url("_up.svg"); out property <image> up: @image-url("_up.svg");
} }

View file

@ -103,7 +103,7 @@ export component TabBarImpl {
Rectangle { Rectangle {
y: parent.height - self.height; y: parent.height - self.height;
background: Palette.separater; background: Palette.separator;
width: 100%; width: 100%;
height: 1px; height: 1px;
} }
@ -143,4 +143,4 @@ export component TabBarImpl {
} }
} }
export component TabWidget inherits TabWidget {} export component TabWidget inherits TabWidget {}

View file

@ -5,7 +5,7 @@ import { Typography, Palette } from "styling.slint";
import { ScrollBar } from "scrollview.slint"; import { ScrollBar } from "scrollview.slint";
import { FocusBorder } from "components.slint"; import { FocusBorder } from "components.slint";
// FIXME: After authide of scrollbars is implemented, remove and use `ScrollView` from `scrollview.slint` // FIXME: After auto-hiding of scrollbars is implemented, remove and use `ScrollView` from `scrollview.slint`
component ScrollView { component ScrollView {
in property <bool> enabled: true; in property <bool> enabled: true;
out property <length> visible-width <=> i-flickable.width; out property <length> visible-width <=> i-flickable.width;
@ -163,4 +163,4 @@ export component TextEdit {
i-background.background: Palette.surface; i-background.background: Palette.surface;
} }
] ]
} }

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore combobox spinbox standardbutton // cSpell: ignore standardbutton
import { LineEditInner, AboutSlint } from "../common/common.slint"; import { LineEditInner, AboutSlint } from "../common/common.slint";
import { StandardButton } from "../common/standardbutton.slint"; import { StandardButton } from "../common/standardbutton.slint";
@ -46,4 +46,3 @@ export { TextEdit }
export { StyleMetrics, ScrollView, Button, StandardButton, AboutSlint } export { StyleMetrics, ScrollView, Button, StandardButton, AboutSlint }
export * from "tableview.slint"; export * from "tableview.slint";

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore combobox spinbox standardbutton // cSpell: ignore standardbutton
import { LineEditInner, TextEdit, AboutSlint } from "../common/common.slint"; import { LineEditInner, TextEdit, AboutSlint } from "../common/common.slint";
import { StandardButton } from "../common/standardbutton.slint"; import { StandardButton } from "../common/standardbutton.slint";

View file

@ -1,8 +1,6 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore combobox spinbox
import { LineEditInner, TextEdit, AboutSlint } from "../common/common.slint"; import { LineEditInner, TextEdit, AboutSlint } from "../common/common.slint";
import { StyleMetrics, ScrollView } from "std-widgets-impl.slint"; import { StyleMetrics, ScrollView } from "std-widgets-impl.slint";
import { StandardTableView } from "tableview.slint"; import { StandardTableView } from "tableview.slint";

View file

@ -625,7 +625,7 @@ impl Image {
/// ///
/// # Safety /// # Safety
/// ///
/// This function is unsafe because invalid texture ids may lead to undefind behavior in OpenGL /// This function is unsafe because invalid texture ids may lead to undefined behavior in OpenGL
/// drivers. A valid texture id is one that was created by the same OpenGL context that is /// drivers. A valid texture id is one that was created by the same OpenGL context that is
/// current during any of the invocations of the callback set on [`Window::set_rendering_notifier()`](crate::api::Window::set_rendering_notifier). /// current during any of the invocations of the callback set on [`Window::set_rendering_notifier()`](crate::api::Window::set_rendering_notifier).
/// OpenGL contexts between instances of [`slint::Window`](crate::api::Window) are not sharing resources. Consequently /// OpenGL contexts between instances of [`slint::Window`](crate::api::Window) are not sharing resources. Consequently
@ -735,7 +735,7 @@ impl BorrowedOpenGLTextureBuilder {
/// ///
/// # Safety /// # Safety
/// ///
/// This function is unsafe because invalid texture ids may lead to undefind behavior in OpenGL /// This function is unsafe because invalid texture ids may lead to undefined behavior in OpenGL
/// drivers. A valid texture id is one that was created by the same OpenGL context that is /// drivers. A valid texture id is one that was created by the same OpenGL context that is
/// current during any of the invocations of the callback set on [`Window::set_rendering_notifier()`](crate::api::Window::set_rendering_notifier). /// current during any of the invocations of the callback set on [`Window::set_rendering_notifier()`](crate::api::Window::set_rendering_notifier).
/// OpenGL contexts between instances of [`slint::Window`](crate::api::Window) are not sharing resources. Consequently /// OpenGL contexts between instances of [`slint::Window`](crate::api::Window) are not sharing resources. Consequently

View file

@ -165,7 +165,7 @@ where
M: Model<Data = T>, M: Model<Data = T>,
{ {
/// Creates a new MapModel based on the given `wrapped_model` and `map_function`. /// Creates a new MapModel based on the given `wrapped_model` and `map_function`.
/// Alternativly you can use [`ModelExt::map`] on your Model. /// Alternatively you can use [`ModelExt::map`] on your Model.
pub fn new(wrapped_model: M, map_function: F) -> Self { pub fn new(wrapped_model: M, map_function: F) -> Self {
Self { wrapped_model, map_function } Self { wrapped_model, map_function }
} }
@ -372,7 +372,7 @@ where
F: Fn(&M::Data) -> bool + 'static, F: Fn(&M::Data) -> bool + 'static,
{ {
/// Creates a new FilterModel based on the given `wrapped_model` and filtered by `filter_function`. /// Creates a new FilterModel based on the given `wrapped_model` and filtered by `filter_function`.
/// Alternativly you can use [`ModelExt::filter`] on your Model. /// Alternatively you can use [`ModelExt::filter`] on your Model.
pub fn new(wrapped_model: M, filter_function: F) -> Self { pub fn new(wrapped_model: M, filter_function: F) -> Self {
let filter_model_inner = FilterModelInner { let filter_model_inner = FilterModelInner {
wrapped_model, wrapped_model,
@ -746,7 +746,7 @@ where
F: FnMut(&M::Data, &M::Data) -> core::cmp::Ordering + 'static, F: FnMut(&M::Data, &M::Data) -> core::cmp::Ordering + 'static,
{ {
/// Creates a new SortModel based on the given `wrapped_model` and sorted by `sort_function`. /// Creates a new SortModel based on the given `wrapped_model` and sorted by `sort_function`.
/// Alternativly you can use [`ModelExt::sort_by`] on your Model. /// Alternatively you can use [`ModelExt::sort_by`] on your Model.
pub fn new(wrapped_model: M, sort_function: F) -> Self pub fn new(wrapped_model: M, sort_function: F) -> Self
where where
F: FnMut(&M::Data, &M::Data) -> core::cmp::Ordering + 'static, F: FnMut(&M::Data, &M::Data) -> core::cmp::Ordering + 'static,
@ -773,7 +773,7 @@ where
M::Data: core::cmp::Ord, M::Data: core::cmp::Ord,
{ {
/// Creates a new SortModel based on the given `wrapped_model` and sorted in ascending order. /// Creates a new SortModel based on the given `wrapped_model` and sorted in ascending order.
/// Alternativly you can use [`ModelExt::sort`] on your Model. /// Alternatively you can use [`ModelExt::sort`] on your Model.
pub fn new_ascending(wrapped_model: M) -> Self pub fn new_ascending(wrapped_model: M) -> Self
where where
M::Data: core::cmp::Ord, M::Data: core::cmp::Ord,
@ -1058,7 +1058,7 @@ where
M: Model + 'static, M: Model + 'static,
{ {
/// Creates a new ReverseModel based on the given `wrapped_model`. /// Creates a new ReverseModel based on the given `wrapped_model`.
/// Alternativly you can use [`ModelExt::reverse`] on your Model. /// Alternatively you can use [`ModelExt::reverse`] on your Model.
pub fn new(wrapped_model: M) -> Self { pub fn new(wrapped_model: M) -> Self {
let inner = ReverseModelInner { wrapped_model, notify: Default::default() }; let inner = ReverseModelInner { wrapped_model, notify: Default::default() };
let container = Box::pin(ModelChangeListenerContainer::new(inner)); let container = Box::pin(ModelChangeListenerContainer::new(inner));

View file

@ -180,7 +180,7 @@ pub fn set_platform(platform: Box<dyn Platform + 'static>) -> Result<(), SetPlat
} }
/// Call this function to update and potentially activate any pending timers, as well /// Call this function to update and potentially activate any pending timers, as well
/// as advance the state of any active animtaions. /// as advance the state of any active animations.
/// ///
/// This function should be called before rendering or processing input event, at the /// This function should be called before rendering or processing input event, at the
/// beginning of each event loop iteration. /// beginning of each event loop iteration.

View file

@ -67,7 +67,7 @@ pub trait RendererSealed {
/// Mark a given region as dirty regardless whether the items actually are dirty. /// Mark a given region as dirty regardless whether the items actually are dirty.
/// ///
/// Example: when a PopupWindow disapear, the region under the popup needs to be redrawn /// Example: when a PopupWindow disappears, the region under the popup needs to be redrawn
fn mark_dirty_region(&self, _region: crate::item_rendering::DirtyRegion) {} fn mark_dirty_region(&self, _region: crate::item_rendering::DirtyRegion) {}
#[cfg(feature = "std")] // FIXME: just because of the Error #[cfg(feature = "std")] // FIXME: just because of the Error

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
#![allow(clippy::identity_op)] // We use x + 0 a lot here for symetry #![allow(clippy::identity_op)] // We use x + 0 a lot here for symmetry
//! This is the module for the functions that are drawing the pixels //! This is the module for the functions that are drawing the pixels
//! on the line buffer //! on the line buffer

View file

@ -103,7 +103,7 @@ impl<'a, Length: Clone + Default + core::ops::AddAssign + Zero + Copy> Iterator
fragment.glyph_range = Range { start, end: last_glyph_cluster.glyph_range.end }; fragment.glyph_range = Range { start, end: last_glyph_cluster.glyph_range.end };
// Make sure that adjacent fragments are adjanced in their byte range: // Make sure that adjacent fragments are advanced in their byte range:
// this assertion should hold: fragment.byte_range.end + fragment.trailing_whitespace_bytes == next_fragment.byte_range.start // this assertion should hold: fragment.byte_range.end + fragment.trailing_whitespace_bytes == next_fragment.byte_range.start
// That means characters causing mandatory breaks need to be included. // That means characters causing mandatory breaks need to be included.
if fragment.trailing_mandatory_break { if fragment.trailing_mandatory_break {

View file

@ -29,8 +29,8 @@ pub struct Glyph<Length> {
/// ///
/// Functionality wise it provides the ability to convert a string into a set of glyphs, /// Functionality wise it provides the ability to convert a string into a set of glyphs,
/// each of which has basic metric fields as well as an offset back into the original string. /// each of which has basic metric fields as well as an offset back into the original string.
/// Typically this is implemented by using a general text shaper, which performans an M:N mapping /// Typically this is implemented by using a general text shaper, which performs an M:N mapping
/// from unicode characters to glyphs, via glyph substitions and script specific rules. In addition /// from unicode characters to glyphs, via glyph substitutions and script specific rules. In addition
/// the glyphs may be positioned for the required appearance (such as stacked diacritics). /// the glyphs may be positioned for the required appearance (such as stacked diacritics).
/// ///
/// Finally, for convenience the TextShaper also provides a single glyph_for_char function, for example /// Finally, for convenience the TextShaper also provides a single glyph_for_char function, for example

View file

@ -64,7 +64,7 @@ fn input_as_key_event(input: KeyInputEvent, modifiers: KeyboardModifiers) -> Key
/// ///
/// If the implementation of this bi-directional message passing protocol is incomplete, the user may /// If the implementation of this bi-directional message passing protocol is incomplete, the user may
/// experience unexpected behavior, or the intention of the developer calling functions on the [`crate::Window`](struct.Window.html) /// experience unexpected behavior, or the intention of the developer calling functions on the [`crate::Window`](struct.Window.html)
/// API may not be fullfilled. /// API may not be fulfilled.
/// ///
/// Your implementation must hold a renderer, such as [`crate::software_renderer::SoftwareRenderer`]. /// Your implementation must hold a renderer, such as [`crate::software_renderer::SoftwareRenderer`].
/// In the [`Self::renderer()`] function, you must return a reference to it. /// In the [`Self::renderer()`] function, you must return a reference to it.

View file

@ -1,8 +1,6 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore unerase
use crate::{api::Value, dynamic_type, eval}; use crate::{api::Value, dynamic_type, eval};
use core::convert::TryInto; use core::convert::TryInto;

View file

@ -3,8 +3,6 @@
//! This module contains the code for the highlight of some elements //! This module contains the code for the highlight of some elements
// cSpell: ignore unerase
use crate::dynamic_item_tree::{DynamicComponentVRc, ErasedItemTreeBox, ItemTreeBox}; use crate::dynamic_item_tree::{DynamicComponentVRc, ErasedItemTreeBox, ItemTreeBox};
use crate::Value; use crate::Value;
use i_slint_compiler::diagnostics::{SourceFile, Spanned}; use i_slint_compiler::diagnostics::{SourceFile, Spanned};

View file

@ -100,7 +100,7 @@ impl Texture {
ImageInner::HTMLImage(html_image) => { ImageInner::HTMLImage(html_image) => {
if html_image.size().is_some() { if html_image.size().is_some() {
// Anecdotal evidence suggests that HTMLImageElement converts to a texture with // Anecdotal evidence suggests that HTMLImageElement converts to a texture with
// pre-multipled alpha. It's possible that this is not generally applicable, but it // pre-multiplied alpha. It's possible that this is not generally applicable, but it
// is the case for SVGs. // is the case for SVGs.
let image_flags = if html_image.is_svg() { let image_flags = if html_image.is_svg() {
if let Some(target_size) = target_size_for_scalable_source { if let Some(target_size) = target_size_for_scalable_source {

View file

@ -287,7 +287,7 @@ impl SwapChain {
} }
/// This surface renders into the given window using Direct 3D. The provided display /// This surface renders into the given window using Direct 3D. The provided display
/// arugment is ignored, as it has no meaning on Windows. /// argument is ignored, as it has no meaning on Windows.
pub struct D3DSurface { pub struct D3DSurface {
swap_chain: RefCell<SwapChain>, swap_chain: RefCell<SwapChain>,
} }

View file

@ -14,7 +14,7 @@ fi
git checkout $modified_files git checkout $modified_files
# The version number is a shorterned time stamp of the last commit # The version number is a shortend time stamp of the last commit
nightly_version=`git log -1 --format=%cd --date="format:%Y.%-m.%-d%H"` nightly_version=`git log -1 --format=%cd --date="format:%Y.%-m.%-d%H"`
last_commit=`git log -1 --format=%H` last_commit=`git log -1 --format=%H`
@ -43,4 +43,4 @@ cat > CHANGELOG.md <<EOT
This nightly build was created from commit $last_commit This nightly build was created from commit $last_commit
EOT EOT
echo "package.json, REAMDE.md, etc. have been modified. You can package the extension now. Run git checkout afterwards to undo the modifications done by this script." echo "package.json, README.md, etc. have been modified. You can package the extension now. Run git checkout afterwards to undo the modifications done by this script."

View file

@ -19,31 +19,31 @@ TestCase := Rectangle {
```cpp ```cpp
auto handle = TestCase::create(); auto handle = TestCase::create();
const TestCase &instance = *handle; const TestCase &instance = *handle;
int callback_3_emited = 0; int callback_3_emitted = 0;
instance.on_test_callback3([&]{ callback_3_emited++; }); instance.on_test_callback3([&]{ callback_3_emitted++; });
instance.set_callback_emission_count(0); instance.set_callback_emission_count(0);
assert_eq(instance.get_callback_emission_count(), 0); assert_eq(instance.get_callback_emission_count(), 0);
instance.invoke_test_callback(); instance.invoke_test_callback();
assert_eq(instance.get_callback_emission_count(), 1); assert_eq(instance.get_callback_emission_count(), 1);
instance.invoke_test_callback(); instance.invoke_test_callback();
assert_eq(instance.get_callback_emission_count(), 2); assert_eq(instance.get_callback_emission_count(), 2);
assert_eq(callback_3_emited, 0); assert_eq(callback_3_emitted, 0);
instance.invoke_test_callback2(); instance.invoke_test_callback2();
assert_eq(instance.get_callback_emission_count(), 88); assert_eq(instance.get_callback_emission_count(), 88);
assert_eq(callback_3_emited, 1); assert_eq(callback_3_emitted, 1);
``` ```
```rust ```rust
let instance = TestCase::new().unwrap(); let instance = TestCase::new().unwrap();
let callback_3_emited = std::rc::Rc::new(std::cell::Cell::new(0)); let callback_3_emitted = std::rc::Rc::new(std::cell::Cell::new(0));
// test that mutable variables can be captured // test that mutable variables can be captured
let mut _mutable_var = String::from("1"); let mut _mutable_var = String::from("1");
instance.on_test_callback3({ instance.on_test_callback3({
let callback_3_emited = callback_3_emited.clone(); let callback_3_emitted = callback_3_emitted.clone();
move || { move || {
callback_3_emited.set(callback_3_emited.get() + 1); callback_3_emitted.set(callback_3_emitted.get() + 1);
_mutable_var.push_str(&callback_3_emited.get().to_string()); _mutable_var.push_str(&callback_3_emitted.get().to_string());
} }
}); });
instance.set_callback_emission_count(0); instance.set_callback_emission_count(0);
@ -52,16 +52,16 @@ instance.invoke_test_callback();
assert_eq!(instance.get_callback_emission_count(), 1); assert_eq!(instance.get_callback_emission_count(), 1);
instance.invoke_test_callback(); instance.invoke_test_callback();
assert_eq!(instance.get_callback_emission_count(), 2); assert_eq!(instance.get_callback_emission_count(), 2);
assert_eq!(callback_3_emited.get(), 0); assert_eq!(callback_3_emitted.get(), 0);
instance.invoke_test_callback2(); instance.invoke_test_callback2();
assert_eq!(instance.get_callback_emission_count(), 88); assert_eq!(instance.get_callback_emission_count(), 88);
assert_eq!(callback_3_emited.get(), 1); assert_eq!(callback_3_emitted.get(), 1);
``` ```
```js ```js
var callback_3_emited = 0; var callback_3_emitted = 0;
var instance = new slint.TestCase({ var instance = new slint.TestCase({
test_callback3: function() { callback_3_emited++; } test_callback3: function() { callback_3_emitted++; }
}); });
instance.callback_emission_count = 0; instance.callback_emission_count = 0;
assert.equal(instance.callback_emission_count, 0); assert.equal(instance.callback_emission_count, 0);
@ -71,9 +71,9 @@ let x = instance.test_callback;
assert.equal(instance.callback_emission_count, 1); assert.equal(instance.callback_emission_count, 1);
x() x()
assert.equal(instance.callback_emission_count, 2); assert.equal(instance.callback_emission_count, 2);
assert.equal(callback_3_emited, 0); assert.equal(callback_3_emitted, 0);
instance.test_callback2(); instance.test_callback2();
assert.equal(instance.callback_emission_count, 88); assert.equal(instance.callback_emission_count, 88);
assert.equal(callback_3_emited, 1); assert.equal(callback_3_emitted, 1);
``` ```
*/ */

View file

@ -15,51 +15,51 @@ TestCase := Rectangle {
```cpp ```cpp
auto handle = TestCase::create(); auto handle = TestCase::create();
const TestCase &instance = *handle; const TestCase &instance = *handle;
int callback_3_emited = 0; int callback_3_emitted = 0;
std::string callback_3_string_value; std::string callback_3_string_value;
int callback_3_int_value = 0; int callback_3_int_value = 0;
instance.on_test_callback3([&](int a, auto b) { instance.on_test_callback3([&](int a, auto b) {
callback_3_int_value = a; callback_3_int_value = a;
callback_3_string_value = b; callback_3_string_value = b;
callback_3_emited ++; callback_3_emitted ++;
}); });
instance.set_callback_emission_count(0); instance.set_callback_emission_count(0);
assert_eq(instance.get_callback_emission_count(), 0); assert_eq(instance.get_callback_emission_count(), 0);
instance.invoke_test_callback(42); instance.invoke_test_callback(42);
assert_eq(instance.get_callback_emission_count(), 1); assert_eq(instance.get_callback_emission_count(), 1);
assert_eq(callback_3_emited, 0); assert_eq(callback_3_emitted, 0);
instance.invoke_test_callback2("hello"); instance.invoke_test_callback2("hello");
assert_eq(instance.get_callback_emission_count(), 88); assert_eq(instance.get_callback_emission_count(), 88);
assert_eq(callback_3_emited, 1); assert_eq(callback_3_emitted, 1);
assert_eq(callback_3_int_value, 55); assert_eq(callback_3_int_value, 55);
assert_eq(callback_3_string_value, "hello"); assert_eq(callback_3_string_value, "hello");
``` ```
```rust ```rust
let instance = TestCase::new().unwrap(); let instance = TestCase::new().unwrap();
let callback_3_emited = std::rc::Rc::new(std::cell::RefCell::new((0, String::new()))); let callback_3_emitted = std::rc::Rc::new(std::cell::RefCell::new((0, String::new())));
instance.on_test_callback3({ instance.on_test_callback3({
let callback_3_emited = callback_3_emited.clone(); let callback_3_emitted = callback_3_emitted.clone();
move |a, b| *callback_3_emited.borrow_mut() = (a, b.into()) move |a, b| *callback_3_emitted.borrow_mut() = (a, b.into())
}); });
instance.set_callback_emission_count(0); instance.set_callback_emission_count(0);
assert_eq!(instance.get_callback_emission_count(), 0); assert_eq!(instance.get_callback_emission_count(), 0);
instance.invoke_test_callback(42); instance.invoke_test_callback(42);
assert_eq!(instance.get_callback_emission_count(), 1); assert_eq!(instance.get_callback_emission_count(), 1);
assert_eq!(*callback_3_emited.borrow(), (0, "".into())); assert_eq!(*callback_3_emitted.borrow(), (0, "".into()));
instance.invoke_test_callback2("hello".into()); instance.invoke_test_callback2("hello".into());
assert_eq!(instance.get_callback_emission_count(), 88); assert_eq!(instance.get_callback_emission_count(), 88);
assert_eq!(*callback_3_emited.borrow(), (55, "hello".into())); assert_eq!(*callback_3_emitted.borrow(), (55, "hello".into()));
``` ```
```js ```js
var callback_3_emited = 0; var callback_3_emitted = 0;
var callback_3_string_value; var callback_3_string_value;
var callback_3_int_value; var callback_3_int_value;
var instance = new slint.TestCase({ var instance = new slint.TestCase({
test_callback3: function(a, b) { test_callback3: function(a, b) {
callback_3_emited++; callback_3_emitted++;
callback_3_string_value = b; callback_3_string_value = b;
callback_3_int_value = a; callback_3_int_value = a;
} }
@ -70,7 +70,7 @@ instance.test_callback(42);
assert.equal(instance.callback_emission_count, 1); assert.equal(instance.callback_emission_count, 1);
instance.test_callback2("hello"); instance.test_callback2("hello");
assert.equal(instance.callback_emission_count, 88); assert.equal(instance.callback_emission_count, 88);
assert.equal(callback_3_emited, 1); assert.equal(callback_3_emitted, 1);
assert.equal(callback_3_string_value, "hello"); assert.equal(callback_3_string_value, "hello");
assert.equal(callback_3_int_value, 55); assert.equal(callback_3_int_value, 55);
instance.callback_emission_count = 0; instance.callback_emission_count = 0;
@ -86,11 +86,11 @@ assert.equal(instance.callback_emission_count, 0);
/// also test setHandler /// also test setHandler
instance.test_callback2.setHandler(function(a) { instance.test_callback2.setHandler(function(a) {
callback_3_emited += 100; callback_3_emitted += 100;
callback_3_string_value = a; callback_3_string_value = a;
}); });
instance.test_callback2("salùt") instance.test_callback2("salùt")
assert.equal(callback_3_emited, 101); assert.equal(callback_3_emitted, 101);
assert.equal(callback_3_string_value, "salùt"); assert.equal(callback_3_string_value, "salùt");
assert.equal(callback_3_int_value, 55); // same as before assert.equal(callback_3_int_value, 55); // same as before

View file

@ -9,7 +9,7 @@
// is manually created, the other two come out of a repeater. // is manually created, the other two come out of a repeater.
// Additionally, there are three green rectangles at the bottom placed diagonally // Additionally, there are three green rectangles at the bottom placed diagonally
// using equal spacing and manual calcuation, using a repeater. // using equal spacing and manual calculation, using a repeater.
BlueRect := Rectangle { BlueRect := Rectangle {
background: blue; background: blue;

View file

@ -38,7 +38,7 @@ TestCase := Rectangle {
} }
// MaybeClip must be inlined when "clip" is set, but not when it isn't. Test that we can have // MaybeClip must be inlined when "clip" is set, but not when it isn't. Test that we can have
// a combinaison of inlined and non inlined item // a combination of inlined and non inlined item
MaybeClip { x: 5000px; } MaybeClip { x: 5000px; }
test_rect := Rectangle { clip: true; } test_rect := Rectangle { clip: true; }

View file

@ -29,7 +29,7 @@ export TestCase := Rectangle {
} }
} }
// There should be 5 rectangle: so 100 devided by 5 is 20. // There should be 5 rectangle: so 100 divided by 5 is 20.
/* /*
```cpp ```cpp

View file

@ -56,7 +56,7 @@ export TestCase := Window {
} }
} }
// There should be 4 rectangle: so 100 devided by 4 is 25. // There should be 4 rectangle: so 100 divided by 4 is 25.
// when cond is false, there is 3, so 33.3 pixel per rectangle // when cond is false, there is 3, so 33.3 pixel per rectangle
/* /*

View file

@ -40,7 +40,7 @@ assert_eq!(instance.get_hello(), 40);
assert_eq!(instance.get_binding_dep(), 100); assert_eq!(instance.get_binding_dep(), 100);
assert_eq!(instance.get_unset_property(), 0); assert_eq!(instance.get_unset_property(), 0);
slint_testing::send_mouse_click(&instance, 5., 5.); slint_testing::send_mouse_click(&instance, 5., 5.);
// no time has ellapsed yet // no time has elapsed yet
assert_eq!(instance.get_hello(), 40); assert_eq!(instance.get_hello(), 40);
assert_eq!(instance.get_binding_dep(), 100); assert_eq!(instance.get_binding_dep(), 100);
assert_eq!(instance.get_unset_property(), 0); assert_eq!(instance.get_unset_property(), 0);
@ -74,7 +74,7 @@ assert_eq(instance.get_hello(), 40);
assert_eq(instance.get_binding_dep(), 100); assert_eq(instance.get_binding_dep(), 100);
assert_eq(instance.get_unset_property(), 0); assert_eq(instance.get_unset_property(), 0);
slint_testing::send_mouse_click(&instance, 5., 5.); slint_testing::send_mouse_click(&instance, 5., 5.);
// no time has ellapsed yet // no time has elapsed yet
assert_eq(instance.get_hello(), 40); assert_eq(instance.get_hello(), 40);
assert_eq(instance.get_binding_dep(), 100); assert_eq(instance.get_binding_dep(), 100);
assert_eq(instance.get_unset_property(), 0); assert_eq(instance.get_unset_property(), 0);
@ -104,7 +104,7 @@ assert.equal(instance.hello, 40);
assert.equal(instance.binding_dep, 100); assert.equal(instance.binding_dep, 100);
assert.equal(instance.unset_property, 0); assert.equal(instance.unset_property, 0);
slintlib.private_api.send_mouse_click(instance, 5., 5.); slintlib.private_api.send_mouse_click(instance, 5., 5.);
// no time has ellapsed yet // no time has elapsed yet
assert.equal(instance.hello, 40); assert.equal(instance.hello, 40);
assert.equal(instance.binding_dep, 100); assert.equal(instance.binding_dep, 100);
assert.equal(instance.unset_property, 0); assert.equal(instance.unset_property, 0);

View file

@ -32,7 +32,7 @@ assert_eq!(instance.get_hello(), 40);
assert_eq!(instance.get_binding_dep(), 100); assert_eq!(instance.get_binding_dep(), 100);
instance.set_condition(false); instance.set_condition(false);
instance.set_hello(60); instance.set_hello(60);
// no time has ellapsed yet // no time has elapsed yet
assert_eq!(instance.get_hello(), 40); assert_eq!(instance.get_hello(), 40);
assert_eq!(instance.get_binding_dep(), 100); assert_eq!(instance.get_binding_dep(), 100);
@ -69,7 +69,7 @@ assert_eq(instance.get_hello(), 40);
assert_eq(instance.get_binding_dep(), 100); assert_eq(instance.get_binding_dep(), 100);
instance.set_condition(false); instance.set_condition(false);
instance.set_hello(60); instance.set_hello(60);
// no time has ellapsed yet // no time has elapsed yet
assert_eq(instance.get_hello(), 40); assert_eq(instance.get_hello(), 40);
assert_eq(instance.get_binding_dep(), 100); assert_eq(instance.get_binding_dep(), 100);
@ -103,7 +103,7 @@ assert.equal(instance.hello, 40);
assert.equal(instance.binding_dep, 100); assert.equal(instance.binding_dep, 100);
instance.condition = false; instance.condition = false;
instance.hello = 60; instance.hello = 60;
// no time has ellapsed yet // no time has elapsed yet
assert.equal(instance.hello, 40); assert.equal(instance.hello, 40);
assert.equal(instance.binding_dep, 100); assert.equal(instance.binding_dep, 100);

View file

@ -4,7 +4,7 @@
// Verify that two repeaters (if and for) are placed correctly in the item tree // Verify that two repeaters (if and for) are placed correctly in the item tree
// and matched in the dyn_visit closure. // and matched in the dyn_visit closure.
// The two repeaters ended up being swapped and sub-component's repeater was // The two repeaters ended up being swapped and sub-component's repeater was
// visisted when the Text's child's repeater should have been, resulting in // visited when the Text's child's repeater should have been, resulting in
// wrong rendering order. This is tested by clicking into the left half and // wrong rendering order. This is tested by clicking into the left half and
// verifying that it did not hit the sub-component's repeater. // verifying that it did not hit the sub-component's repeater.

View file

@ -4,7 +4,7 @@
// Verify that two repeaters (if and for) are placed correctly in the item tree // Verify that two repeaters (if and for) are placed correctly in the item tree
// and matched in the dyn_visit closure. // and matched in the dyn_visit closure.
// The two repeaters ended up being swapped and sub-component's repeater was // The two repeaters ended up being swapped and sub-component's repeater was
// visisted when the Text's child's repeater should have been, resulting in // visited when the Text's child's repeater should have been, resulting in
// wrong rendering order. This is tested by clicking into the left half and // wrong rendering order. This is tested by clicking into the left half and
// verifying that it did not hit the sub-component's repeater. // verifying that it did not hit the sub-component's repeater.

View file

@ -5,7 +5,7 @@ Test := Rectangle {
// allow declaring brush properties and assigning colors // allow declaring brush properties and assigning colors
property<brush> color_brush: blue; property<brush> color_brush: blue;
// allow to use brighter and darker on a brush // allow to use brighter and darker on a brush
property<brush> ligher: true ? color_brush.brighter(50%) : color_brush.darker(50%); property<brush> lighter: true ? color_brush.brighter(50%) : color_brush.darker(50%);
// allow to use `transparentize` // allow to use `transparentize`
property<brush> seethru: color_brush.transparentize(30%); property<brush> seethru: color_brush.transparentize(30%);
@ -20,7 +20,7 @@ Test := Rectangle {
property <color> r2_col: r2.background; property <color> r2_col: r2.background;
property <brush> conditional: false ? Colors.white : true ? r2.background : Colors.green; property <brush> conditional: false ? Colors.white : true ? r2.background : Colors.green;
test_circl := Rectangle { test_circle := Rectangle {
background: @radial_gradient(circle, #abc, #123 10%, #fed); background: @radial_gradient(circle, #abc, #123 10%, #fed);
property <color> colo: background; property <color> colo: background;
property <bool> test: colo == #abc property <bool> test: colo == #abc
@ -28,8 +28,8 @@ Test := Rectangle {
&& background != colo; && background != colo;
} }
property<bool> test: ligher == Colors.blue.brighter(50%) && r2_col == Colors.red.darker(50%) && conditional == r2.background && conditional != r2_col property<bool> test: lighter == Colors.blue.brighter(50%) && r2_col == Colors.red.darker(50%) && conditional == r2.background && conditional != r2_col
&& test_circl.test && seethru == color_brush.with_alpha(70%) && (#abc2).transparentize(-100%) == #abc4; && test_circle.test && seethru == color_brush.with_alpha(70%) && (#abc2).transparentize(-100%) == #abc4;
} }
/* /*

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// Test that structs work if they are only referrenced by callbacks // Test that structs work if they are only referenced by callbacks
struct Foo1 { member: int, } struct Foo1 { member: int, }
struct Foo2 { a: Foo1 } struct Foo2 { a: Foo1 }

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// Right now, this test is only testing rust keyword, but it should be expaneded to JS and C++ keywords // Right now, this test is only testing rust keyword, but it should be expanded to JS and C++ keywords
export struct mod := { export struct mod := {
loop: string, loop: string,

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// ROTATION_THRESHOLD=150 - because gradiants are very impresise in rotation // ROTATION_THRESHOLD=150 - because gradients are very imprecise in rotation
export component TestCase inherits Window { export component TestCase inherits Window {
width: 64px; width: 64px;

View file

@ -329,7 +329,7 @@ fn handle_paint(p: &Paint, rc: &mut Ctx, arg: &str) -> Result<bool, Box<dyn std:
let mut has_something = false; let mut has_something = false;
if !p.gradientStops.is_empty() { if !p.gradientStops.is_empty() {
if p.r#type != "GRADIENT_LINEAR" { if p.r#type != "GRADIENT_LINEAR" {
eprintln!("Warning: unsuported Paint type {:?}", p.r#type); eprintln!("Warning: unsupported paint type {:?}", p.r#type);
return Ok(false); return Ok(false);
} }
let p1 = *p let p1 = *p

View file

@ -6,7 +6,7 @@
use lsp_types::notification::Notification; use lsp_types::notification::Notification;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
/// Taken from rust-analizer /// Taken from rust-analyzer
pub enum ServerStatusNotification {} pub enum ServerStatusNotification {}
impl Notification for ServerStatusNotification { impl Notification for ServerStatusNotification {

View file

@ -1,8 +1,6 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore winit
import { FilterProxyReader } from "./proxy"; import { FilterProxyReader } from "./proxy";
import { import {
CloseAction, CloseAction,

View file

@ -1,7 +1,7 @@
// Copyright © SixtyFPS GmbH <info@slint.dev> // Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
// cSpell: ignore bindgen lumino winit // cSpell: ignore bindgen lumino
import { Message } from "@lumino/messaging"; import { Message } from "@lumino/messaging";
import { Widget } from "@lumino/widgets"; import { Widget } from "@lumino/widgets";