mirror of
https://github.com/slint-ui/slint.git
synced 2025-11-03 05:12:55 +00:00
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:
parent
ef39adce30
commit
b12575a4c4
84 changed files with 236 additions and 219 deletions
|
|
@ -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
12
FAQ.md
|
|
@ -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?
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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`]
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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)]
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
36
cspell.json
36
cspell.json
|
|
@ -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": [
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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/'
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ component TempConv inherits Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
text: "°Celcius = ";
|
text: "°Celsius = ";
|
||||||
vertical-alignment: center;
|
vertical-alignment: center;
|
||||||
}
|
}
|
||||||
f := LineEdit {
|
f := LineEdit {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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)]
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
///
|
///
|
||||||
|
|
|
||||||
|
|
@ -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>),
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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()) {
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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));
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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};
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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."
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
```
|
```
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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; }
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue