mirror of
https://github.com/slint-ui/slint.git
synced 2025-07-24 13:35:00 +00:00
Renderer feature refactor
This commit is contained in:
parent
f2af8317a2
commit
3a807e46c1
36 changed files with 250 additions and 202 deletions
2
.github/workflows/embedded_build.yaml
vendored
2
.github/workflows/embedded_build.yaml
vendored
|
@ -63,7 +63,7 @@ jobs:
|
|||
- name: Enable Skia build
|
||||
if: matrix.target != 'riscv64gc-unknown-linux-gnu'
|
||||
run: |
|
||||
echo "EXTRA_ARGS=--features slint/renderer-winit-skia" >> $GITHUB_ENV
|
||||
echo "EXTRA_ARGS=--features slint/renderer-skia" >> $GITHUB_ENV
|
||||
- uses: baptiste0928/cargo-install@v2
|
||||
with:
|
||||
crate: cross
|
||||
|
|
|
@ -28,6 +28,7 @@ All notable changes to this project are documented in this file.
|
|||
- Added `ReverseModel` and `ModelExt::reverse`
|
||||
- Added `fn set_visible(&self, _visible: bool)` to the `slint::platform::WindowAdapter` trait.
|
||||
- Added ways to create a `SoftwareRenderer` without a `MinimalSoftwareWindow`
|
||||
- The features `renderer-winit-*` were renamed to `renderer-*`
|
||||
|
||||
### C++
|
||||
|
||||
|
@ -35,6 +36,7 @@ All notable changes to this project are documented in this file.
|
|||
- Added `ReverseModel`
|
||||
- Added functions in Window to dispatch pointer events
|
||||
- The `slint_interpreter.h` file was renamed `slint-interpreter.h`, a deprecated header was added
|
||||
- The features `SLINT_FEATURE_RENDERER_WINIT_*` were renamed to `SLINT_FEATURE_RENDERER_*`
|
||||
|
||||
## [1.1.1] - 2023-07-10
|
||||
|
||||
|
|
|
@ -78,6 +78,22 @@ if (MSVC)
|
|||
target_compile_options(Slint INTERFACE /bigobj)
|
||||
endif()
|
||||
|
||||
# Compat options
|
||||
function(define_renderer_winit_compat_option renderer)
|
||||
string(TOUPPER "${renderer}" cmake_option)
|
||||
string(REPLACE "-" "_" cmake_option "${cmake_option}")
|
||||
cmake_dependent_option("SLINT_FEATURE_RENDERER_WINIT_${cmake_option}" "Compat option equivalent to SLINT_FEATURE_RENDERER_${cmake_option}" OFF SLINT_FEATURE_STD OFF)
|
||||
if(SLINT_FEATURE_RENDERER_WINIT_${cmake_option})
|
||||
set("SLINT_FEATURE_RENDERER_${cmake_option}" ON PARENT_SCOPE)
|
||||
message("SLINT_FEATURE_RENDERER_WINIT_${cmake_option} is deprecated, use SLINT_FEATURE_RENDERER_${cmake_option} instead")
|
||||
endif()
|
||||
endfunction()
|
||||
define_renderer_winit_compat_option(femtovg)
|
||||
define_renderer_winit_compat_option(skia)
|
||||
define_renderer_winit_compat_option(skia-opengl)
|
||||
define_renderer_winit_compat_option(skia-vulkan)
|
||||
define_renderer_winit_compat_option(software)
|
||||
|
||||
function(define_cargo_feature cargo-feature description default)
|
||||
# turn foo-bar into SLINT_FEATURE_FOO_BAR
|
||||
string(TOUPPER "${cargo-feature}" cmake_option)
|
||||
|
@ -119,11 +135,11 @@ define_cargo_dependent_feature(backend-winit "Enable support for the winit crate
|
|||
define_cargo_dependent_feature(backend-winit-x11 "Enable support for the winit create to interact only with the X11 windowing system on Unix. Enable this option and turn off SLINT_FEATURE_BACKEND_WINIT for a smaller build with just X11 support on Unix." OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(backend-winit-wayland "Enable support for the winit create to interact only with the wayland windowing system on Unix. Enable this option and turn off SLINT_FEATURE_BACKEND_WINIT for a smaller build with just wayland support." OFF SLINT_FEATURE_STD)
|
||||
|
||||
define_cargo_dependent_feature(renderer-winit-femtovg "Enable support for the OpenGL ES 2.0 based FemtoVG rendering engine." ON SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-winit-skia "Enable support for the Skia based rendering engine." OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-winit-skia-opengl "Enable support for the Skia based rendering engine with its OpenGL backend." OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-winit-skia-vulkan "Enable support for the Skia based rendering engine with its Vulkan backend." OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-winit-software "Enable support for the software renderer with the winit backend" OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-femtovg "Enable support for the OpenGL ES 2.0 based FemtoVG rendering engine." ON SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-skia "Enable support for the Skia based rendering engine." OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-skia-opengl "Enable support for the Skia based rendering engine with its OpenGL backend." OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(renderer-skia-vulkan "Enable support for the Skia based rendering engine with its Vulkan backend." OFF SLINT_FEATURE_STD)
|
||||
define_cargo_feature(renderer-software "Enable support for the software renderer" OFF)
|
||||
|
||||
define_cargo_dependent_feature(backend-qt "Enable Qt based rendering backend" ON SLINT_FEATURE_STD)
|
||||
|
||||
|
@ -131,26 +147,6 @@ define_cargo_feature(experimental "Enable experimental features (no compatibilit
|
|||
define_cargo_dependent_feature(gettext "Enable support of translations using gettext" OFF SLINT_FEATURE_STD)
|
||||
define_cargo_dependent_feature(accessibility "Enable integration with operating system provided accessibility APIs" ON SLINT_FEATURE_STD)
|
||||
|
||||
# Compat options
|
||||
option(SLINT_FEATURE_BACKEND_GL_ALL "This feature is an alias for SLINT_FEATURE_BACKEND_WINIT and SLINT_FEATURE_RENDERER_WINIT_FEMTOVG." OFF)
|
||||
option(SLINT_FEATURE_BACKEND_GL_X11 "This feature is an alias for SLINT_FEATURE_BACKEND_WINIT_X11 and SLINT_FEATURE_RENDERER_WINIT_FEMTOVG." OFF)
|
||||
option(SLINT_FEATURE_BACKEND_GL_WAYLAND "This feature is an alias for SLINT_FEATURE_BACKEND_WINIT_WAYLAND and SLINT_FEATURE_RENDERER_WINIT_FEMTOVG." OFF)
|
||||
|
||||
if(SLINT_FEATURE_BACKEND_GL_ALL)
|
||||
set(SLINT_FEATURE_BACKEND_WINIT ON)
|
||||
set(SLINT_FEATURE_RENDERER_WINIT_FEMTOVG ON)
|
||||
endif()
|
||||
|
||||
if(SLINT_FEATURE_BACKEND_GL_X11)
|
||||
set(SLINT_FEATURE_BACKEND_WINIT_X11 ON)
|
||||
set(SLINT_FEATURE_RENDERER_WINIT_FEMTOVG ON)
|
||||
endif()
|
||||
|
||||
if(SLINT_FEATURE_BACKEND_GL_WAYLAND)
|
||||
set(SLINT_FEATURE_BACKEND_WINIT_WAYLAND ON)
|
||||
set(SLINT_FEATURE_RENDERER_WINIT_FEMTOVG ON)
|
||||
endif()
|
||||
|
||||
if (NOT SLINT_FEATURE_STD)
|
||||
list(APPEND features i-slint-core/libm i-slint-core/unsafe-single-threaded)
|
||||
|
||||
|
|
|
@ -30,11 +30,11 @@ backend-qt = ["i-slint-backend-selector/i-slint-backend-qt", "std"]
|
|||
backend-winit = ["i-slint-backend-selector/backend-winit", "std"]
|
||||
backend-winit-x11 = ["i-slint-backend-selector/backend-winit-x11", "std"]
|
||||
backend-winit-wayland = ["i-slint-backend-selector/backend-winit-wayland", "std"]
|
||||
renderer-winit-femtovg = ["i-slint-backend-selector/renderer-winit-femtovg"]
|
||||
renderer-winit-skia = ["i-slint-backend-selector/renderer-winit-skia"]
|
||||
renderer-winit-skia-opengl = ["i-slint-backend-selector/renderer-winit-skia-opengl"]
|
||||
renderer-winit-skia-vulkan = ["i-slint-backend-selector/renderer-winit-skia-vulkan"]
|
||||
renderer-winit-software = ["i-slint-backend-selector/renderer-winit-software"]
|
||||
renderer-femtovg = ["i-slint-backend-selector/renderer-femtovg"]
|
||||
renderer-skia = ["i-slint-backend-selector/renderer-skia"]
|
||||
renderer-skia-opengl = ["i-slint-backend-selector/renderer-skia-opengl"]
|
||||
renderer-skia-vulkan = ["i-slint-backend-selector/renderer-skia-vulkan"]
|
||||
renderer-software = ["i-slint-backend-selector/renderer-software"]
|
||||
gettext = ["i-slint-core/gettext-rs"]
|
||||
accessibility = ["i-slint-backend-selector/accessibility"]
|
||||
|
||||
|
@ -43,14 +43,14 @@ experimental-skia = ["i-slint-renderer-skia", "raw-window-handle", "experimental
|
|||
|
||||
std = ["image", "i-slint-core/default", "i-slint-backend-selector"]
|
||||
|
||||
default = ["std", "backend-winit", "renderer-winit-femtovg", "backend-qt", "experimental"]
|
||||
default = ["std", "backend-winit", "renderer-femtovg", "backend-qt", "experimental"]
|
||||
|
||||
[dependencies]
|
||||
i-slint-backend-selector = { version = "=1.2.0", path="../../internal/backends/selector", optional = true }
|
||||
i-slint-backend-testing = { version = "=1.2.0", path="../../internal/backends/testing", optional = true }
|
||||
i-slint-renderer-skia = { version = "=1.2.0", path="../../internal/renderers/skia", optional = true, features = ["x11", "wayland"] }
|
||||
i-slint-core = { version = "=1.2.0", path="../../internal/core", default-features = false, features = ["ffi"] }
|
||||
slint-interpreter = { version = "=1.2.0", path="../../internal/interpreter", default-features = false, features = ["ffi", "compat-1-0"], optional = true }
|
||||
slint-interpreter = { version = "=1.2.0", path="../../internal/interpreter", default-features = false, features = ["ffi", "compat-1-2"], optional = true }
|
||||
raw-window-handle = { version = "0.5", optional = true }
|
||||
# Enable image-rs' default features to make all image formats to C++ users
|
||||
image = { version = "0.24.0", optional = true }
|
||||
|
|
|
@ -26,6 +26,7 @@ fn main() -> Result<(), anyhow::Error> {
|
|||
experimental: std::env::var("CARGO_FEATURE_EXPERIMENTAL").is_ok(),
|
||||
backend_qt: std::env::var("CARGO_FEATURE_BACKEND_QT").is_ok(),
|
||||
std: std::env::var("CARGO_FEATURE_STD").is_ok(),
|
||||
renderer_software: std::env::var("CARGO_FEATURE_RENDERER_SOFTWARE").is_ok(),
|
||||
};
|
||||
|
||||
let dependencies = cbindgen::gen_all(&root_dir, &output_dir, enabled_features)?;
|
||||
|
|
|
@ -725,6 +725,7 @@ pub struct EnabledFeatures {
|
|||
pub experimental: bool,
|
||||
pub backend_qt: bool,
|
||||
pub std: bool,
|
||||
pub renderer_software: bool,
|
||||
}
|
||||
|
||||
impl EnabledFeatures {
|
||||
|
@ -743,6 +744,9 @@ impl EnabledFeatures {
|
|||
if self.std {
|
||||
defines += "#define SLINT_FEATURE_STD\n";
|
||||
}
|
||||
if self.renderer_software {
|
||||
defines += "#define SLINT_FEATURE_RENDERER_SOFTWARE\n";
|
||||
}
|
||||
defines
|
||||
}
|
||||
}
|
||||
|
|
|
@ -229,6 +229,7 @@ inline void set_platform(std::unique_ptr<Platform> platform)
|
|||
});
|
||||
}
|
||||
|
||||
# ifdef SLINT_FEATURE_RENDERER_SOFTWARE
|
||||
/// Represents a region on the screen, used for partial rendering.
|
||||
///
|
||||
/// The region may be composed of multiple sub-regions.
|
||||
|
@ -358,6 +359,7 @@ public:
|
|||
return PhysicalRegion { r };
|
||||
}
|
||||
};
|
||||
# endif
|
||||
|
||||
/// An opaque, low-level window handle that internalizes everything necessary to exchange messages
|
||||
/// with the windowing system. This includes the connection to the display server, if necessary.
|
||||
|
|
|
@ -5,10 +5,9 @@ use alloc::boxed::Box;
|
|||
use alloc::rc::Rc;
|
||||
use core::ffi::c_void;
|
||||
use i_slint_core::api::{PhysicalSize, Window};
|
||||
use i_slint_core::graphics::{IntRect, IntSize, Rgb8Pixel};
|
||||
use i_slint_core::graphics::IntSize;
|
||||
use i_slint_core::platform::{Platform, PlatformError};
|
||||
use i_slint_core::renderer::Renderer;
|
||||
use i_slint_core::software_renderer::{RepaintBufferType, Rgb565Pixel, SoftwareRenderer};
|
||||
use i_slint_core::window::ffi::WindowAdapterRcOpaque;
|
||||
use i_slint_core::window::WindowAdapter;
|
||||
|
||||
|
@ -246,10 +245,16 @@ pub unsafe extern "C" fn slint_platform_task_run(event: PlatformTaskOpaque) {
|
|||
f();
|
||||
}
|
||||
|
||||
type SoftwareRendererOpaque = *const c_void;
|
||||
#[cfg(feature = "renderer-software")]
|
||||
mod software_renderer {
|
||||
use super::*;
|
||||
type SoftwareRendererOpaque = *const c_void;
|
||||
use i_slint_core::software_renderer::{RepaintBufferType, Rgb565Pixel, SoftwareRenderer};
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_new(buffer_age: u32) -> SoftwareRendererOpaque {
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_new(
|
||||
buffer_age: u32,
|
||||
) -> SoftwareRendererOpaque {
|
||||
let repaint_buffer_type = match buffer_age {
|
||||
0 => RepaintBufferType::NewBuffer,
|
||||
1 => RepaintBufferType::ReusedBuffer,
|
||||
|
@ -258,50 +263,54 @@ pub unsafe extern "C" fn slint_software_renderer_new(buffer_age: u32) -> Softwar
|
|||
};
|
||||
Box::into_raw(Box::new(SoftwareRenderer::new_with_repaint_buffer_type(repaint_buffer_type)))
|
||||
as SoftwareRendererOpaque
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_drop(r: SoftwareRendererOpaque) {
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_drop(r: SoftwareRendererOpaque) {
|
||||
drop(Box::from_raw(r as *mut SoftwareRenderer));
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_render_rgb8(
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_render_rgb8(
|
||||
r: SoftwareRendererOpaque,
|
||||
buffer: *mut Rgb8Pixel,
|
||||
buffer_len: usize,
|
||||
pixel_stride: usize,
|
||||
) -> IntRect {
|
||||
) -> IntRect {
|
||||
let buffer = core::slice::from_raw_parts_mut(buffer, buffer_len);
|
||||
let renderer = &*(r as *const SoftwareRenderer);
|
||||
let r = renderer.render(buffer, pixel_stride);
|
||||
let (orig, size) = (r.bounding_box_origin(), r.bounding_box_size());
|
||||
i_slint_core::graphics::euclid::rect(orig.x, orig.y, size.width as i32, size.height as i32)
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_render_rgb565(
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_render_rgb565(
|
||||
r: SoftwareRendererOpaque,
|
||||
buffer: *mut u16,
|
||||
buffer_len: usize,
|
||||
pixel_stride: usize,
|
||||
) -> IntRect {
|
||||
) -> IntRect {
|
||||
let buffer = core::slice::from_raw_parts_mut(buffer as *mut Rgb565Pixel, buffer_len);
|
||||
let renderer = &*(r as *const SoftwareRenderer);
|
||||
let r = renderer.render(buffer, pixel_stride);
|
||||
let (orig, size) = (r.bounding_box_origin(), r.bounding_box_size());
|
||||
i_slint_core::graphics::euclid::rect(orig.x, orig.y, size.width as i32, size.height as i32)
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_handle(r: SoftwareRendererOpaque) -> RendererPtr {
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn slint_software_renderer_handle(
|
||||
r: SoftwareRendererOpaque,
|
||||
) -> RendererPtr {
|
||||
let r = (r as *const SoftwareRenderer) as *const dyn Renderer;
|
||||
core::mem::transmute(r)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(all(feature = "i-slint-renderer-skia", feature = "raw-window-handle"))]
|
||||
pub mod skia {
|
||||
use super::*;
|
||||
use i_slint_core::graphics::{IntRect, IntSize, Rgb8Pixel};
|
||||
use raw_window_handle::{RawDisplayHandle, RawWindowHandle};
|
||||
|
||||
struct CppRawHandle(RawWindowHandle, RawDisplayHandle);
|
||||
|
|
|
@ -22,18 +22,20 @@ path = "lib.rs"
|
|||
default = [
|
||||
"std",
|
||||
"backend-winit",
|
||||
"renderer-winit-femtovg",
|
||||
"renderer-femtovg",
|
||||
"renderer-software",
|
||||
"backend-qt",
|
||||
"accessibility",
|
||||
"compat-1-0",
|
||||
"compat-1-2",
|
||||
]
|
||||
|
||||
## Mandatory feature:
|
||||
## This feature is required to keep the compatibility with Slint 1.0
|
||||
## This feature is required to keep the compatibility with Slint 1.2
|
||||
## Newer patch version may put current functionality behind a new feature
|
||||
## that would be enabled by default only if this feature was added.
|
||||
## [More info in this blog post](https://slint.dev/blog/rust-adding-default-cargo-feature.html)
|
||||
"compat-1-0" = []
|
||||
"compat-1-2" = []
|
||||
"compat-1-0" = ["compat-1-2", "renderer-software"]
|
||||
|
||||
## Enable use of the Rust standard library.
|
||||
std = ["i-slint-core/std"]
|
||||
|
@ -55,7 +57,7 @@ libm = ["i-slint-core/libm"]
|
|||
log = ["dep:log"]
|
||||
|
||||
## This feature enables the software renderer to pick up fonts from the operating system for text rendering.
|
||||
software-renderer-systemfonts = ["i-slint-core/software-renderer-systemfonts"]
|
||||
software-renderer-systemfonts = ["renderer-software", "i-slint-core/software-renderer-systemfonts"]
|
||||
|
||||
## Slint uses internally some `thread_local` state.
|
||||
##
|
||||
|
@ -83,7 +85,7 @@ accessibility = ["i-slint-backend-selector/accessibility"]
|
|||
#! with [`platform::set_platform()`].
|
||||
#!
|
||||
#! If you enable the Winit backend, you need to also include a renderer.
|
||||
#! `renderer-winit-femtovg` is the only stable renderer, the other ones are experimental
|
||||
#! `renderer-femtovg` is the only stable renderer, the other ones are experimental
|
||||
#!
|
||||
#! It is also possible to select the backend and renderer at runtime when several
|
||||
#! are enabled, using the `SLINT_BACKEND` environment variable.
|
||||
|
@ -117,23 +119,27 @@ backend-winit-x11 = ["i-slint-backend-selector/backend-winit-x11", "std"]
|
|||
## with support for the Wayland window system on Unix.
|
||||
backend-winit-wayland = ["i-slint-backend-selector/backend-winit-wayland", "std"]
|
||||
|
||||
## Make the winit backend capable of rendering using the [femtovg](https://crates.io/crates/femtovg) crate.
|
||||
## Must be used in combination with `backend-winit`, `backend-winit-x11`, or `backend-winit-wayland`.
|
||||
renderer-winit-femtovg = ["i-slint-backend-selector/renderer-winit-femtovg", "std"]
|
||||
# deprecated aliases
|
||||
renderer-winit-femtovg = ["renderer-femtovg"]
|
||||
renderer-winit-skia = ["renderer-skia"]
|
||||
renderer-winit-skia-opengl= ["renderer-skia-opengl"]
|
||||
renderer-winit-skia-vulkan= ["renderer-skia-vulkan"]
|
||||
renderer-winit-software = ["renderer-software"]
|
||||
|
||||
## Make the winit backend capable of rendering using [Skia](https://skia.org/).
|
||||
## Must be used in combination with `backend-winit`, `backend-winit-x11`, or `backend-winit-wayland`.
|
||||
renderer-winit-skia = ["i-slint-backend-selector/renderer-winit-skia", "std"]
|
||||
## Render using the [femtovg](https://crates.io/crates/femtovg) crate.
|
||||
renderer-femtovg = ["i-slint-backend-selector/renderer-femtovg", "std"]
|
||||
|
||||
## Same as `renderer-winit-skia`, but Skia will always use OpenGL.
|
||||
renderer-winit-skia-opengl = ["i-slint-backend-selector/renderer-winit-skia-opengl", "std"]
|
||||
## Render using [Skia](https://skia.org/).
|
||||
renderer-skia = ["i-slint-backend-selector/renderer-skia", "std"]
|
||||
|
||||
## Same as `renderer-winit-skia`, but Skia will always use Vulkan.
|
||||
renderer-winit-skia-vulkan = ["i-slint-backend-selector/renderer-winit-skia-vulkan", "std"]
|
||||
## Same as `renderer-skia`, but Skia will always use OpenGL.
|
||||
renderer-skia-opengl = ["i-slint-backend-selector/renderer-skia-opengl", "std"]
|
||||
|
||||
## Make the winit backend capable of rendering using the software renderer.
|
||||
## Must be used in combination with `backend-winit`, `backend-winit-x11`, or `backend-winit-wayland`.
|
||||
renderer-winit-software = ["i-slint-backend-selector/renderer-winit-software"]
|
||||
## Same as `renderer-skia`, but Skia will always use Vulkan.
|
||||
renderer-skia-vulkan = ["i-slint-backend-selector/renderer-skia-vulkan", "std"]
|
||||
|
||||
## Render using the software renderer.
|
||||
renderer-software = ["i-slint-backend-selector/renderer-software", "i-slint-core/software-renderer"]
|
||||
|
||||
[dependencies]
|
||||
i-slint-core = { version = "=1.2.0", path = "../../../internal/core", default-features = false }
|
||||
|
@ -163,4 +169,4 @@ rustdoc-args = [
|
|||
"--html-in-header",
|
||||
"docs/resources/slint-docs-highlight.html",
|
||||
]
|
||||
features = ["document-features", "log", "gettext"]
|
||||
features = ["document-features", "log", "gettext", "renderer-software", "renderer-femtovg"]
|
||||
|
|
|
@ -259,9 +259,9 @@ See the [documentation of the `Global` trait](Global) for an example.
|
|||
|
||||
extern crate alloc;
|
||||
|
||||
#[cfg(not(feature = "compat-1-0"))]
|
||||
#[cfg(not(feature = "compat-1-2"))]
|
||||
compile_error!(
|
||||
"The feature `compat-1-0` must be enabled to ensure \
|
||||
"The feature `compat-1-2` must be enabled to ensure \
|
||||
forward compatibility with future version of this crate"
|
||||
);
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ Start by adding a dependency to the `slint` and the `slint-build` crates to your
|
|||
Start with the `slint` crate like this:
|
||||
|
||||
```sh
|
||||
cargo add slint@1.1.0 --no-default-features --features "compat-1-0 unsafe-single-threaded libm"
|
||||
cargo add slint@1.1.0 --no-default-features --features "compat-1-2 unsafe-single-threaded libm"
|
||||
```
|
||||
|
||||
The default features of the `slint` crate are tailored towards hosted environments and includes the "std" feature. In bare metal environments,
|
||||
|
@ -36,7 +36,7 @@ you need to disable the default features.
|
|||
|
||||
In the snippet above, three features are selected:
|
||||
|
||||
* `compat-1-0`: We select this feature when disabling the default features. For a detailed explanation see our blog post ["Adding default cargo features without breaking Semantic Versioning"](https://slint.dev/blog/rust-adding-default-cargo-feature.html).
|
||||
* `compat-1-2`: We select this feature when disabling the default features. For a detailed explanation see our blog post ["Adding default cargo features without breaking Semantic Versioning"](https://slint.dev/blog/rust-adding-default-cargo-feature.html).
|
||||
* `unsafe-single-threaded`: Slint internally uses Rust's [`thread_local!`](https://doc.rust-lang.org/std/macro.thread_local.html) macro to store global data.
|
||||
This macro is only available in the Rust Standard Library (std), but not in bare metal environments. As a fallback, the `unsafe-single-threaded`
|
||||
feature changes Slint to use unsafe static for storage. This way, you guarantee to use Slint API only from a single thread, and not from interrupt handlers.
|
||||
|
@ -68,7 +68,7 @@ edition = "2021"
|
|||
[dependencies.slint]
|
||||
version = "1.1.0"
|
||||
default-features = false
|
||||
features = ["compat-1-0", "unsafe-single-threaded", "libm"]
|
||||
features = ["compat-1-2", "unsafe-single-threaded", "libm"]
|
||||
[build-dependencies]
|
||||
slint-build = "1.1.0"
|
||||
```
|
||||
|
|
|
@ -19,7 +19,7 @@ crate-type = ["cdylib"]
|
|||
highlight = ["slint-interpreter/highlight"]
|
||||
|
||||
[dependencies]
|
||||
slint-interpreter = { path = "../../internal/interpreter", default-features = false, features = ["std", "backend-winit", "renderer-winit-femtovg", "compat-1-0"] }
|
||||
slint-interpreter = { path = "../../internal/interpreter", default-features = false, features = ["std", "backend-winit", "renderer-femtovg", "compat-1-2"] }
|
||||
send_wrapper = { workspace = true }
|
||||
|
||||
vtable = { version = "0.1.6", path="../../helper_crates/vtable" }
|
||||
|
|
|
@ -37,7 +37,7 @@ COPY . /slint
|
|||
WORKDIR /slint
|
||||
RUN mkdir demos \
|
||||
&& for demo in printerdemo slide_puzzle gallery opengl_underlay carousel todo energy-monitor; do \
|
||||
cargo build --release --target $RUST_TOOLCHAIN_ARCH --features slint/renderer-winit-skia -p $demo; \
|
||||
cargo build --release --target $RUST_TOOLCHAIN_ARCH --features slint/renderer-skia -p $demo; \
|
||||
cp target/$RUST_TOOLCHAIN_ARCH/release/$demo ./demos/; \
|
||||
done
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ path = "main.rs"
|
|||
name = "carousel"
|
||||
|
||||
[dependencies]
|
||||
slint = { path = "../../../api/rs/slint", default-features = false, features = ["compat-1-0"] }
|
||||
slint = { path = "../../../api/rs/slint", default-features = false, features = ["compat-1-2"] }
|
||||
mcu-board-support = { path = "../../mcu-board-support", optional = true }
|
||||
|
||||
[build-dependencies]
|
||||
|
@ -23,7 +23,7 @@ slint-build = { path = "../../../api/rs/build" }
|
|||
|
||||
[features]
|
||||
default = ["slint/default"]
|
||||
simulator = ["mcu-board-support", "slint/renderer-winit-software", "slint/backend-winit", "slint/std"]
|
||||
simulator = ["mcu-board-support", "slint/renderer-software", "slint/backend-winit", "slint/std"]
|
||||
|
||||
|
||||
# Remove the `#wasm#` to uncomment the wasm build.
|
||||
|
|
|
@ -15,7 +15,7 @@ path = "src/main.rs"
|
|||
name = "energy-monitor"
|
||||
|
||||
[dependencies]
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["compat-1-0"] }
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["compat-1-2"] }
|
||||
mcu-board-support = { path = "../mcu-board-support", optional = true }
|
||||
chrono = { version = "0.4.23", optional = true, default-features = false, features = ["clock", "std", "wasmbind"] }
|
||||
weer_api = { version = "0.1", optional = true }
|
||||
|
@ -27,7 +27,7 @@ slint-build = { path = "../../api/rs/build" }
|
|||
|
||||
[features]
|
||||
default = ["slint/default", "network", "chrono"]
|
||||
simulator = ["mcu-board-support", "slint/renderer-winit-software", "slint/backend-winit", "slint/std"]
|
||||
simulator = ["mcu-board-support", "slint/renderer-software", "slint/backend-winit", "slint/std"]
|
||||
network = ["dep:weer_api", "tokio", "futures"]
|
||||
|
||||
# Remove the `#wasm#` to uncomment the wasm build.
|
||||
|
|
|
@ -23,7 +23,7 @@ esp32-s2-kaluga-1 = ["slint/unsafe-single-threaded", "esp32s2-hal", "embedded-ha
|
|||
esp32-s3-box = ["slint/unsafe-single-threaded", "esp32s3-hal", "embedded-hal", "xtensa-lx-rt/esp32s3", "esp-alloc", "esp-println/esp32s3", "esp-backtrace/esp32s3", "display-interface", "display-interface-spi", "mipidsi", "embedded-graphics-core", "slint/libm", "tt21100"]
|
||||
|
||||
[dependencies]
|
||||
slint = { version = "=1.2.0", path = "../../api/rs/slint", default-features = false, features = ["compat-1-0"] }
|
||||
slint = { version = "=1.2.0", path = "../../api/rs/slint", default-features = false, features = ["compat-1-2", "renderer-software"] }
|
||||
i-slint-core-macros = { version = "=1.2.0", path = "../../internal/core-macros" }
|
||||
|
||||
derive_more = "0.99.5"
|
||||
|
|
|
@ -15,11 +15,11 @@ path = "main.rs"
|
|||
name = "printerdemo_mcu"
|
||||
|
||||
[features]
|
||||
simulator = ["slint/renderer-winit-software", "slint/backend-winit", "slint/std"]
|
||||
simulator = ["slint/renderer-software", "slint/backend-winit", "slint/std"]
|
||||
default = ["simulator"]
|
||||
|
||||
[dependencies]
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["compat-1-0"] }
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["compat-1-2"] }
|
||||
mcu-board-support = { path = "../mcu-board-support" }
|
||||
|
||||
[build-dependencies]
|
||||
|
|
|
@ -18,7 +18,8 @@ uefi = "0.20.0"
|
|||
uefi-services = "0.17.0"
|
||||
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = [
|
||||
"compat-1-0",
|
||||
"compat-1-2",
|
||||
"renderer-software",
|
||||
"libm",
|
||||
"log",
|
||||
"unsafe-single-threaded",
|
||||
|
|
|
@ -19,11 +19,11 @@ backend-winit = ["backend-winit-x11", "backend-winit-wayland"]
|
|||
backend-winit-x11 = ["i-slint-backend-winit/x11"]
|
||||
backend-winit-wayland = ["i-slint-backend-winit/wayland"]
|
||||
|
||||
renderer-winit-femtovg = ["i-slint-backend-winit/renderer-winit-femtovg"]
|
||||
renderer-winit-skia = ["i-slint-backend-winit/renderer-winit-skia"]
|
||||
renderer-winit-skia-opengl = ["i-slint-backend-winit/renderer-winit-skia-opengl"]
|
||||
renderer-winit-skia-vulkan = ["i-slint-backend-winit/renderer-winit-skia-vulkan"]
|
||||
renderer-winit-software = ["i-slint-backend-winit/renderer-winit-software"]
|
||||
renderer-femtovg = ["i-slint-backend-winit?/renderer-femtovg"]
|
||||
renderer-skia = ["i-slint-backend-winit?/renderer-skia"]
|
||||
renderer-skia-opengl = ["i-slint-backend-winit?/renderer-skia-opengl"]
|
||||
renderer-skia-vulkan = ["i-slint-backend-winit?/renderer-skia-vulkan"]
|
||||
renderer-software = ["i-slint-backend-winit?/renderer-software"]
|
||||
|
||||
rtti = ["i-slint-core/rtti", "i-slint-backend-qt?/rtti"]
|
||||
accessibility = ["i-slint-backend-winit?/accessibility"]
|
||||
|
|
|
@ -21,11 +21,11 @@ path = "lib.rs"
|
|||
[features]
|
||||
wayland = ["winit/wayland", "winit/wayland-csd-adwaita", "glutin/wayland", "glutin-winit/wayland", "copypasta/wayland", "i-slint-renderer-skia?/wayland"]
|
||||
x11 = ["winit/x11", "glutin/x11", "glutin/glx", "glutin-winit/x11", "glutin-winit/glx", "copypasta/x11", "i-slint-renderer-skia?/x11"]
|
||||
renderer-winit-femtovg = ["i-slint-renderer-femtovg"]
|
||||
renderer-winit-skia = ["i-slint-renderer-skia"]
|
||||
renderer-winit-skia-opengl = ["renderer-winit-skia", "i-slint-renderer-skia/opengl"]
|
||||
renderer-winit-skia-vulkan = ["renderer-winit-skia", "i-slint-renderer-skia/vulkan"]
|
||||
renderer-winit-software = ["softbuffer", "imgref", "rgb", "i-slint-core/software-renderer-systemfonts"]
|
||||
renderer-femtovg = ["i-slint-renderer-femtovg"]
|
||||
renderer-skia = ["i-slint-renderer-skia"]
|
||||
renderer-skia-opengl = ["renderer-skia", "i-slint-renderer-skia/opengl"]
|
||||
renderer-skia-vulkan = ["renderer-skia", "i-slint-renderer-skia/vulkan"]
|
||||
renderer-software = ["softbuffer", "imgref", "rgb", "i-slint-core/software-renderer-systemfonts"]
|
||||
accessibility = ["accesskit", "accesskit_winit"]
|
||||
default = []
|
||||
|
||||
|
@ -80,7 +80,7 @@ cocoa = { version = "0.24.0" }
|
|||
cfg_aliases = "0.1.0"
|
||||
|
||||
[dev-dependencies]
|
||||
slint = { path = "../../../api/rs/slint", default-features = false, features = ["std", "compat-1-0", "backend-winit", "renderer-winit-software"] }
|
||||
slint = { path = "../../../api/rs/slint", default-features = false, features = ["std", "compat-1-2", "backend-winit", "renderer-software"] }
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
features = ["wayland", "renderer-winit-software"]
|
||||
features = ["wayland", "renderer-software"]
|
||||
|
|
|
@ -6,7 +6,7 @@ use cfg_aliases::cfg_aliases;
|
|||
fn main() {
|
||||
// Setup cfg aliases
|
||||
cfg_aliases! {
|
||||
enable_skia_renderer: { any(feature = "renderer-winit-skia", feature = "renderer-winit-skia-opengl", feature = "renderer-winit-skia-vulkan")},
|
||||
enable_skia_renderer: { any(feature = "renderer-skia", feature = "renderer-skia-opengl", feature = "renderer-skia-vulkan")},
|
||||
enable_accesskit: { all(feature = "accessibility", not(target_arch = "wasm32")) },
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,12 +38,12 @@ mod renderer {
|
|||
fn as_core_renderer(&self) -> &dyn i_slint_core::renderer::Renderer;
|
||||
}
|
||||
|
||||
#[cfg(feature = "renderer-winit-femtovg")]
|
||||
#[cfg(feature = "renderer-femtovg")]
|
||||
pub(crate) mod femtovg;
|
||||
#[cfg(enable_skia_renderer)]
|
||||
pub(crate) mod skia;
|
||||
|
||||
#[cfg(feature = "renderer-winit-software")]
|
||||
#[cfg(feature = "renderer-software")]
|
||||
pub(crate) mod sw;
|
||||
}
|
||||
|
||||
|
@ -69,38 +69,38 @@ fn window_factory_fn<R: WinitCompatibleRenderer + 'static>(
|
|||
}
|
||||
|
||||
cfg_if::cfg_if! {
|
||||
if #[cfg(feature = "renderer-winit-femtovg")] {
|
||||
if #[cfg(feature = "renderer-femtovg")] {
|
||||
type DefaultRenderer = renderer::femtovg::GlutinFemtoVGRenderer;
|
||||
const DEFAULT_RENDERER_NAME: &str = "FemtoVG";
|
||||
} else if #[cfg(enable_skia_renderer)] {
|
||||
type DefaultRenderer = renderer::skia::SkiaRenderer;
|
||||
const DEFAULT_RENDERER_NAME: &'static str = "Skia";
|
||||
} else if #[cfg(feature = "renderer-winit-software")] {
|
||||
} else if #[cfg(feature = "renderer-software")] {
|
||||
type DefaultRenderer = renderer::sw::WinitSoftwareRenderer;
|
||||
const DEFAULT_RENDERER_NAME: &'static str = "Software";
|
||||
} else {
|
||||
compile_error!("Please select a feature to build with the winit backend: `renderer-winit-femtovg`, `renderer-winit-skia`, `renderer-winit-skia-opengl`, `renderer-winit-skia-vulkan` or `renderer-winit-software`");
|
||||
compile_error!("Please select a feature to build with the winit backend: `renderer-femtovg`, `renderer-skia`, `renderer-skia-opengl`, `renderer-skia-vulkan` or `renderer-software`");
|
||||
}
|
||||
}
|
||||
|
||||
fn try_create_window_with_fallback_renderer() -> Option<Rc<dyn WindowAdapter>> {
|
||||
#[cfg(any(
|
||||
feature = "renderer-winit-skia",
|
||||
feature = "renderer-winit-skia-opengl",
|
||||
feature = "renderer-winit-skia-vulkan"
|
||||
feature = "renderer-skia",
|
||||
feature = "renderer-skia-opengl",
|
||||
feature = "renderer-skia-vulkan"
|
||||
))]
|
||||
{
|
||||
if let Ok(window) = window_factory_fn::<renderer::skia::SkiaRenderer>() {
|
||||
return Some(window);
|
||||
}
|
||||
}
|
||||
#[cfg(any(feature = "renderer-winit-femtovg"))]
|
||||
#[cfg(any(feature = "renderer-femtovg"))]
|
||||
{
|
||||
if let Ok(window) = window_factory_fn::<renderer::femtovg::GlutinFemtoVGRenderer>() {
|
||||
return Some(window);
|
||||
}
|
||||
}
|
||||
#[cfg(any(feature = "renderer-winit-software"))]
|
||||
#[cfg(any(feature = "renderer-software"))]
|
||||
{
|
||||
if let Ok(window) = window_factory_fn::<renderer::sw::WinitSoftwareRenderer>() {
|
||||
return Some(window);
|
||||
|
@ -148,13 +148,13 @@ impl Backend {
|
|||
/// If the renderer name is `None` or the name is not recognized, the default renderer is selected.
|
||||
pub fn new_with_renderer_by_name(renderer_name: Option<&str>) -> Self {
|
||||
let window_factory_fn = match renderer_name {
|
||||
#[cfg(feature = "renderer-winit-femtovg")]
|
||||
#[cfg(feature = "renderer-femtovg")]
|
||||
Some("gl") | Some("femtovg") => {
|
||||
window_factory_fn::<renderer::femtovg::GlutinFemtoVGRenderer>
|
||||
}
|
||||
#[cfg(enable_skia_renderer)]
|
||||
Some("skia") => window_factory_fn::<renderer::skia::SkiaRenderer>,
|
||||
#[cfg(feature = "renderer-winit-software")]
|
||||
#[cfg(feature = "renderer-software")]
|
||||
Some("sw") | Some("software") => {
|
||||
window_factory_fn::<renderer::sw::WinitSoftwareRenderer>
|
||||
}
|
||||
|
|
|
@ -31,7 +31,8 @@ unsafe-single-threaded = []
|
|||
|
||||
unicode = ["unicode-script", "unicode-linebreak"]
|
||||
|
||||
software-renderer-systemfonts = ["shared-fontdb", "rustybuzz", "fontdue"]
|
||||
software-renderer-systemfonts = ["shared-fontdb", "rustybuzz", "fontdue", "software-renderer"]
|
||||
software-renderer = []
|
||||
|
||||
image-decoders = ["image", "clru"]
|
||||
svg = ["dep:resvg", "shared-fontdb"]
|
||||
|
@ -96,7 +97,7 @@ rustybuzz = { version = "0.7.0", optional = true }
|
|||
fontdue = { version = "0.7.1", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["std", "compat-1-0"] }
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["std", "compat-1-2"] }
|
||||
i-slint-backend-testing = { path="../backends/testing" }
|
||||
rustybuzz = "0.7.0"
|
||||
ttf-parser = "0.18.0"
|
||||
|
|
|
@ -37,6 +37,7 @@ pub mod properties;
|
|||
pub mod renderer;
|
||||
pub mod sharedvector;
|
||||
pub mod slice;
|
||||
#[cfg(feature = "software-renderer")]
|
||||
pub mod software_renderer;
|
||||
pub mod string;
|
||||
pub mod tests;
|
||||
|
|
|
@ -10,6 +10,7 @@ The backend is the abstraction for crates that need to do the actual drawing and
|
|||
pub use crate::api::PlatformError;
|
||||
use crate::api::{LogicalPosition, LogicalSize};
|
||||
pub use crate::renderer::Renderer;
|
||||
#[cfg(feature = "software-renderer")]
|
||||
pub use crate::software_renderer;
|
||||
#[cfg(all(not(feature = "std"), feature = "unsafe-single-threaded"))]
|
||||
use crate::unsafe_single_threaded::{thread_local, OnceCell};
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-1.1 OR LicenseRef-Slint-commercial
|
||||
|
||||
//! This module contains the [`SoftwareRenderer`] and related types.
|
||||
//!
|
||||
//! It is only enabled when the `renderer-software` Slint feature is enabled.
|
||||
|
||||
#![warn(missing_docs)]
|
||||
|
||||
|
@ -375,7 +377,7 @@ impl RendererSealed for SoftwareRenderer {
|
|||
paragraph.byte_offset_for_position((pos.x_length(), pos.y_length())),
|
||||
)
|
||||
}
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
fonts::Font::VectorFont(vf) => {
|
||||
let layout = fonts::text_layout_for_font(&vf, &font_request, scale_factor);
|
||||
|
||||
|
@ -430,7 +432,7 @@ impl RendererSealed for SoftwareRenderer {
|
|||
|
||||
(paragraph.cursor_pos_for_byte_offset(byte_offset), pf.height())
|
||||
}
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
fonts::Font::VectorFont(vf) => {
|
||||
let layout = fonts::text_layout_for_font(&vf, &font_request, scale_factor);
|
||||
|
||||
|
@ -484,7 +486,7 @@ impl RendererSealed for SoftwareRenderer {
|
|||
fonts::register_bitmap_font(font_data);
|
||||
}
|
||||
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
fn register_font_from_memory(
|
||||
&self,
|
||||
data: &'static [u8],
|
||||
|
@ -492,7 +494,7 @@ impl RendererSealed for SoftwareRenderer {
|
|||
self::fonts::systemfonts::register_font_from_memory(data)
|
||||
}
|
||||
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
fn register_font_from_path(
|
||||
&self,
|
||||
path: &std::path::Path,
|
||||
|
@ -1767,7 +1769,7 @@ impl<'a, T: ProcessScene> crate::item_rendering::ItemRenderer for SceneBuilder<'
|
|||
|
||||
self.draw_text_paragraph(¶graph, physical_clip, offset, color, None);
|
||||
}
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
fonts::Font::VectorFont(vf) => {
|
||||
let layout = fonts::text_layout_for_font(&vf, &font_request, self.scale_factor);
|
||||
|
||||
|
@ -1846,7 +1848,7 @@ impl<'a, T: ProcessScene> crate::item_rendering::ItemRenderer for SceneBuilder<'
|
|||
(paragraph.cursor_pos_for_byte_offset(cursor_offset), pf.height())
|
||||
})
|
||||
}
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
fonts::Font::VectorFont(vf) => {
|
||||
let paragraph = TextParagraphLayout {
|
||||
string: &text_visual_representation.text,
|
||||
|
|
|
@ -46,16 +46,16 @@ pub trait GlyphRenderer {
|
|||
pub(super) const DEFAULT_FONT_SIZE: LogicalLength = LogicalLength::new(12 as Coord);
|
||||
|
||||
mod pixelfont;
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
pub mod vectorfont;
|
||||
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
pub mod systemfonts;
|
||||
|
||||
#[derive(derive_more::From)]
|
||||
pub enum Font {
|
||||
PixelFont(pixelfont::PixelFont),
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
VectorFont(vectorfont::VectorFont),
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ pub fn match_font(request: &FontRequest, scale_factor: ScaleFactor) -> Font {
|
|||
let font = match bitmap_font {
|
||||
Some(bitmap_font) => bitmap_font,
|
||||
None => {
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
if let Some(vectorfont) = systemfonts::match_font(request, scale_factor) {
|
||||
return vectorfont.into();
|
||||
}
|
||||
|
@ -99,9 +99,12 @@ pub fn match_font(request: &FontRequest, scale_factor: ScaleFactor) -> Font {
|
|||
}) {
|
||||
fallback_bitmap_font
|
||||
} else {
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(
|
||||
feature = "software-renderer-systemfonts",
|
||||
not(target_arch = "wasm32")
|
||||
))]
|
||||
return systemfonts::fallbackfont(request, scale_factor).into();
|
||||
#[cfg(not(feature = "software-renderer-systemfonts"))]
|
||||
#[cfg(any(not(feature = "software-renderer-systemfonts"), target_arch = "wasm32"))]
|
||||
panic!("No font fallback found. The software renderer requires enabling the `EmbedForSoftwareRenderer` option when compiling slint files.")
|
||||
}
|
||||
}
|
||||
|
@ -153,7 +156,7 @@ pub fn text_size(
|
|||
max_width.map(|max_width| (max_width.cast() * scale_factor).cast()),
|
||||
)
|
||||
}
|
||||
#[cfg(feature = "software-renderer-systemfonts")]
|
||||
#[cfg(all(feature = "software-renderer-systemfonts", not(target_arch = "wasm32")))]
|
||||
Font::VectorFont(vf) => {
|
||||
let layout = text_layout_for_font(&vf, &font_request, scale_factor);
|
||||
layout.text_size(
|
||||
|
|
|
@ -19,13 +19,14 @@ path = "lib.rs"
|
|||
|
||||
[features]
|
||||
|
||||
default = ["std", "backend-winit", "renderer-winit-femtovg", "backend-qt", "accessibility", "compat-1-0"]
|
||||
default = ["std", "backend-winit", "renderer-femtovg", "backend-qt", "accessibility", "compat-1-2"]
|
||||
|
||||
## Mandatory feature:
|
||||
## This feature is required to keep the compatibility with Slint 1.0
|
||||
## This feature is required to keep the compatibility with Slint 1.2
|
||||
## Newer patch version may put current functionality behind a new feature
|
||||
## that would be enabled by default only if this feature was added
|
||||
"compat-1-0" = []
|
||||
"compat-1-2" = []
|
||||
"compat-1-0" = ["compat-1-2"]
|
||||
|
||||
## enable the [`print_diagnostics`] function to show diagnostic in the console output
|
||||
display-diagnostics = ["i-slint-compiler/display-diagnostics"]
|
||||
|
@ -64,22 +65,27 @@ backend-winit-x11 = ["i-slint-backend-selector/backend-winit-x11", "std"]
|
|||
backend-winit-wayland = ["i-slint-backend-selector/backend-winit-wayland", "std"]
|
||||
|
||||
## Make the winit backend capable of rendering using the [femtovg](https://crates.io/crates/femtovg) crate.
|
||||
## Must be used in combination with `backend-winit`, `backend-winit-x11`, or `backend-winit-wayland`.
|
||||
renderer-winit-femtovg = ["i-slint-backend-selector/renderer-winit-femtovg", "std"]
|
||||
renderer-femtovg = ["i-slint-backend-selector/renderer-femtovg", "std"]
|
||||
|
||||
## Make the winit backend capable of rendering using [Skia](https://skia.org/).
|
||||
## Must be used in combination with `backend-winit`, `backend-winit-x11`, or `backend-winit-wayland`.
|
||||
renderer-winit-skia = ["i-slint-backend-selector/renderer-winit-skia", "std"]
|
||||
renderer-skia = ["i-slint-backend-selector/renderer-skia", "std"]
|
||||
|
||||
## Same as `renderer-winit-skia`, but Skia will always use OpenGL.
|
||||
renderer-winit-skia-opengl = ["i-slint-backend-selector/renderer-winit-skia-opengl", "std"]
|
||||
## Same as `renderer-skia`, but Skia will always use OpenGL.
|
||||
renderer-skia-opengl = ["i-slint-backend-selector/renderer-skia-opengl", "std"]
|
||||
|
||||
## Same as `renderer-winit-skia`, but Skia will always use Vulkan.
|
||||
renderer-winit-skia-vulkan = ["i-slint-backend-selector/renderer-winit-skia-vulkan", "std"]
|
||||
## Same as `renderer-skia`, but Skia will always use Vulkan.
|
||||
renderer-skia-vulkan = ["i-slint-backend-selector/renderer-skia-vulkan", "std"]
|
||||
|
||||
## Make the winit backend capable of rendering using the software renderer.
|
||||
## Must be used in combination with `backend-winit`, `backend-winit-x11`, or `backend-winit-wayland`.
|
||||
renderer-winit-software = ["i-slint-backend-selector/renderer-winit-software"]
|
||||
renderer-software = ["i-slint-backend-selector/renderer-software"]
|
||||
|
||||
# deprecated aliases
|
||||
renderer-winit-femtovg = ["renderer-femtovg"]
|
||||
renderer-winit-skia = ["renderer-skia"]
|
||||
renderer-winit-skia-opengl= ["renderer-skia-opengl"]
|
||||
renderer-winit-skia-vulkan= ["renderer-skia-vulkan"]
|
||||
renderer-winit-software = ["renderer-software"]
|
||||
|
||||
## Enable integration with operating system provided accessibility APIs (default: enabled)
|
||||
##
|
||||
|
|
|
@ -67,9 +67,9 @@ instance.run().unwrap();
|
|||
#![warn(missing_docs)]
|
||||
#![doc(html_logo_url = "https://slint.dev/logo/slint-logo-square-light.svg")]
|
||||
|
||||
#[cfg(not(feature = "compat-1-0"))]
|
||||
#[cfg(not(feature = "compat-1-2"))]
|
||||
compile_error!(
|
||||
"The feature `compat-1-0` must be enabled to ensure \
|
||||
"The feature `compat-1-2` must be enabled to ensure \
|
||||
forward compatibility with future version of this crate"
|
||||
);
|
||||
|
||||
|
|
|
@ -11,11 +11,11 @@ sleep 15
|
|||
cargo publish --manifest-path api/rs/macros/Cargo.toml
|
||||
cargo publish --manifest-path internal/renderers/skia/Cargo.toml
|
||||
cargo publish --manifest-path internal/renderers/femtovg/Cargo.toml
|
||||
cargo publish --manifest-path internal/backends/winit/Cargo.toml --features x11,renderer-winit-femtovg
|
||||
cargo publish --manifest-path internal/backends/winit/Cargo.toml --features x11,renderer-femtovg
|
||||
cargo publish --manifest-path api/rs/build/Cargo.toml
|
||||
cargo publish --manifest-path internal/backends/qt/Cargo.toml
|
||||
sleep 30
|
||||
cargo publish --manifest-path internal/backends/selector/Cargo.toml --features backend-winit-x11,renderer-winit-femtovg
|
||||
cargo publish --manifest-path internal/backends/selector/Cargo.toml --features backend-winit-x11,renderer-femtovg
|
||||
sleep 30
|
||||
cargo publish --manifest-path internal/interpreter/Cargo.toml
|
||||
cargo publish --manifest-path api/rs/slint/Cargo.toml
|
||||
|
|
|
@ -14,7 +14,7 @@ path = "main.rs"
|
|||
name = "test-driver-interpreter"
|
||||
|
||||
[dev-dependencies]
|
||||
slint-interpreter = { path = "../../../internal/interpreter", default-features = false, features = ["display-diagnostics", "compat-1-0"] }
|
||||
slint-interpreter = { path = "../../../internal/interpreter", default-features = false, features = ["display-diagnostics", "compat-1-2"] }
|
||||
i-slint-backend-testing = { path = "../../../internal/backends/testing" }
|
||||
|
||||
itertools = "0.11"
|
||||
|
|
|
@ -17,9 +17,9 @@ name = "test-driver-rust"
|
|||
build-time = ["i-slint-compiler", "spin_on"]
|
||||
|
||||
[dependencies]
|
||||
slint = { path = "../../../api/rs/slint", default-features = false, features = ["std", "compat-1-0"] }
|
||||
slint = { path = "../../../api/rs/slint", default-features = false, features = ["std", "compat-1-2"] }
|
||||
i-slint-backend-testing = { path = "../../../internal/backends/testing" }
|
||||
slint-interpreter = { path = "../../../internal/interpreter", default-features = false, features = ["std", "compat-1-0"] }
|
||||
slint-interpreter = { path = "../../../internal/interpreter", default-features = false, features = ["std", "compat-1-2"] }
|
||||
spin_on = "0.1"
|
||||
|
||||
[build-dependencies]
|
||||
|
|
|
@ -14,7 +14,7 @@ path = "main.rs"
|
|||
name = "test-driver-screenshot"
|
||||
|
||||
[dependencies]
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["std", "compat-1-0"] }
|
||||
slint = { path = "../../api/rs/slint", default-features = false, features = ["std", "compat-1-2"] }
|
||||
i-slint-core = { version = "=1.2.0", path = "../../internal/core" }
|
||||
i-slint-backend-testing = { path = "../../internal/backends/testing" }
|
||||
image = { version = "0.24.0", default-features = false, features = ["png", "jpeg"] }
|
||||
|
|
|
@ -33,22 +33,28 @@ name = "slint_lsp_wasm"
|
|||
|
||||
[features]
|
||||
backend-qt = ["slint-interpreter/backend-qt", "preview"]
|
||||
eventloop-qt = ["backend-qt"]
|
||||
renderer-winit-qt = ["backend-qt"]
|
||||
|
||||
backend-winit = ["slint-interpreter/backend-winit", "preview"]
|
||||
backend-winit-x11 = ["slint-interpreter/backend-winit-x11", "preview"]
|
||||
backend-winit-wayland = ["slint-interpreter/backend-winit-wayland", "preview"]
|
||||
|
||||
renderer-winit-femtovg = ["slint-interpreter/renderer-winit-femtovg", "preview"]
|
||||
renderer-winit-skia = ["slint-interpreter/renderer-winit-skia", "preview"]
|
||||
renderer-winit-skia-opengl = ["slint-interpreter/renderer-winit-skia-opengl", "preview"]
|
||||
renderer-winit-skia-vulkan = ["slint-interpreter/renderer-winit-skia-vulkan", "preview"]
|
||||
renderer-femtovg = ["slint-interpreter/renderer-femtovg", "preview"]
|
||||
renderer-skia = ["slint-interpreter/renderer-skia", "preview"]
|
||||
renderer-skia-opengl = ["slint-interpreter/renderer-skia-opengl", "preview"]
|
||||
renderer-skia-vulkan = ["slint-interpreter/renderer-skia-vulkan", "preview"]
|
||||
renderer-software = ["slint-interpreter/renderer-software", "preview"]
|
||||
|
||||
# Compat
|
||||
backend-gl-all = ["backend-winit", "renderer-winit-femtovg"]
|
||||
backend-gl-wayland = ["backend-winit-wayland", "renderer-winit-femtovg"]
|
||||
backend-gl-x11 = ["backend-winit-x11", "renderer-winit-femtovg"]
|
||||
backend-gl-all = ["backend-winit", "renderer-femtovg"]
|
||||
backend-gl-wayland = ["backend-winit-wayland", "renderer-femtovg"]
|
||||
backend-gl-x11 = ["backend-winit-x11", "renderer-femtovg"]
|
||||
eventloop-qt = ["backend-qt"]
|
||||
renderer-winit-qt = ["backend-qt"]
|
||||
renderer-winit-femtovg = ["renderer-femtovg"]
|
||||
renderer-winit-skia = ["renderer-skia"]
|
||||
renderer-winit-skia-opengl= ["renderer-skia-opengl"]
|
||||
renderer-winit-skia-vulkan= ["renderer-skia-vulkan"]
|
||||
renderer-winit-software = ["renderer-software"]
|
||||
|
||||
## Enable the built-in preview, that will popup in a native window
|
||||
preview = ["slint-interpreter", "dep:i-slint-core", "dep:i-slint-backend-selector", "dep:image", "preview-lense", "preview-api"]
|
||||
|
@ -59,7 +65,7 @@ preview-lense = []
|
|||
## Open a notification channel so that the LSP can communicate with the preview (when the preview is handled by the client)
|
||||
preview-api = []
|
||||
|
||||
default = ["backend-qt", "backend-winit", "renderer-winit-femtovg", "preview"]
|
||||
default = ["backend-qt", "backend-winit", "renderer-femtovg", "preview"]
|
||||
|
||||
[dependencies]
|
||||
i-slint-compiler = { version = "=1.2.0", path = "../../internal/compiler"}
|
||||
|
@ -73,7 +79,7 @@ rowan = "0.15.5"
|
|||
|
||||
# for the preview
|
||||
i-slint-core = { version = "=1.2.0", path = "../../internal/core", optional = true }
|
||||
slint-interpreter = { version = "=1.2.0", path = "../../internal/interpreter", default-features = false, features = ["compat-1-0", "highlight"], optional = true }
|
||||
slint-interpreter = { version = "=1.2.0", path = "../../internal/interpreter", default-features = false, features = ["compat-1-2", "highlight"], optional = true }
|
||||
i-slint-backend-selector = { version = "=1.2.0", path="../../internal/backends/selector", optional = true }
|
||||
# Enable image-rs' default features to make all image formats available for the preview
|
||||
image = { version = "0.24.0", optional = true }
|
||||
|
|
|
@ -15,18 +15,29 @@ keywords = ["viewer", "gui", "ui", "toolkit"]
|
|||
|
||||
[features]
|
||||
backend-qt = ["slint-interpreter/backend-qt"]
|
||||
eventloop-qt = ["backend-qt"]
|
||||
renderer-winit-qt = ["backend-qt"]
|
||||
|
||||
backend-winit = ["slint-interpreter/backend-winit"]
|
||||
backend-winit-wayland = ["slint-interpreter/backend-winit-wayland"]
|
||||
backend-winit-x11 = ["slint-interpreter/backend-winit-x11"]
|
||||
backend-winit-wayland = ["slint-interpreter/backend-winit-wayland"]
|
||||
|
||||
renderer-femtovg = ["slint-interpreter/renderer-femtovg"]
|
||||
renderer-skia = ["slint-interpreter/renderer-skia"]
|
||||
renderer-skia-opengl = ["slint-interpreter/renderer-skia-opengl"]
|
||||
renderer-skia-vulkan = ["slint-interpreter/renderer-skia-vulkan"]
|
||||
renderer-software = ["slint-interpreter/renderer-software"]
|
||||
|
||||
# Compat
|
||||
backend-gl-all = ["backend-winit", "renderer-femtovg"]
|
||||
backend-gl-wayland = ["backend-winit-wayland", "renderer-femtovg"]
|
||||
backend-gl-x11 = ["backend-winit-x11", "renderer-femtovg"]
|
||||
eventloop-qt = ["backend-qt"]
|
||||
renderer-winit-qt = ["backend-qt"]
|
||||
renderer-winit-femtovg = ["renderer-femtovg"]
|
||||
renderer-winit-skia = ["renderer-skia"]
|
||||
renderer-winit-skia-opengl= ["renderer-skia-opengl"]
|
||||
renderer-winit-skia-vulkan= ["renderer-skia-vulkan"]
|
||||
renderer-winit-software = ["renderer-software"]
|
||||
|
||||
renderer-winit-software = ["slint-interpreter/renderer-winit-software"]
|
||||
renderer-winit-femtovg = ["slint-interpreter/renderer-winit-femtovg"]
|
||||
renderer-winit-skia = ["slint-interpreter/renderer-winit-skia"]
|
||||
renderer-winit-skia-opengl = ["slint-interpreter/renderer-winit-skia-opengl"]
|
||||
renderer-winit-skia-vulkan = ["slint-interpreter/renderer-winit-skia-vulkan"]
|
||||
|
||||
## Enable the translations using [gettext](https://www.gnu.org/software/gettext/gettext)
|
||||
##
|
||||
|
@ -35,17 +46,12 @@ renderer-winit-skia-vulkan = ["slint-interpreter/renderer-winit-skia-vulkan"]
|
|||
## so that the viewer can find the translation
|
||||
gettext = ["i-slint-core/gettext-rs"]
|
||||
|
||||
# Compat
|
||||
backend-gl-all = ["backend-winit", "renderer-winit-femtovg"]
|
||||
backend-gl-wayland = ["backend-winit-wayland", "renderer-winit-femtovg"]
|
||||
backend-gl-x11 = ["backend-winit-x11", "renderer-winit-femtovg"]
|
||||
|
||||
default = ["backend-qt", "backend-winit", "renderer-winit-femtovg"]
|
||||
default = ["backend-qt", "backend-winit", "renderer-femtovg"]
|
||||
|
||||
[dependencies]
|
||||
i-slint-compiler = { version = "=1.2.0", path = "../../internal/compiler" }
|
||||
i-slint-core = { version = "=1.2.0", path="../../internal/core" }
|
||||
slint-interpreter = { version = "=1.2.0", path = "../../internal/interpreter", default-features = false, features = ["display-diagnostics", "compat-1-0"] }
|
||||
slint-interpreter = { version = "=1.2.0", path = "../../internal/interpreter", default-features = false, features = ["display-diagnostics", "compat-1-2"] }
|
||||
i-slint-backend-selector = { version = "=1.2.0", path="../../internal/backends/selector" }
|
||||
|
||||
vtable = { version = "0.1.6", path="../../helper_crates/vtable" }
|
||||
|
|
|
@ -92,6 +92,7 @@ pub fn generate(show_warnings: bool) -> Result<(), Box<dyn std::error::Error>> {
|
|||
experimental: false,
|
||||
backend_qt: false,
|
||||
std: true,
|
||||
renderer_software: true,
|
||||
};
|
||||
cbindgen::gen_all(&root, &generated_headers_dir, enabled_features)?;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue