mirror of
https://github.com/slint-ui/slint.git
synced 2025-12-23 09:19:32 +00:00
Split the software renderer in its own crate: i-slint-renderer-software (#10229)
The goal is to be able to enable feature conditionally with `i-slint-renderer-software/?...` NOTE: this change the implementation of `SceneBuilder::platform_text_fill_brush/platform_text_stroke_brush` It was warning about `non_exhaustive_omitted_patterns`. And it changed it to always return the brush color so gradient gets converted to plain color instead of None. This is the behavior with the non-parley renderer
This commit is contained in:
parent
590c9b7864
commit
5c69db596a
38 changed files with 363 additions and 289 deletions
|
|
@ -41,14 +41,19 @@ renderer-femtovg-wgpu = ["i-slint-backend-selector/renderer-femtovg-wgpu"]
|
|||
renderer-skia = ["i-slint-backend-selector/renderer-skia", "i-slint-renderer-skia", "raw-window-handle"]
|
||||
renderer-skia-opengl = ["i-slint-backend-selector/renderer-skia-opengl", "renderer-skia"]
|
||||
renderer-skia-vulkan = ["i-slint-backend-selector/renderer-skia-vulkan", "renderer-skia"]
|
||||
renderer-software = ["i-slint-backend-selector/renderer-software"]
|
||||
renderer-software = ["i-slint-backend-selector/renderer-software", "dep:i-slint-renderer-software"]
|
||||
gettext = ["i-slint-core/gettext-rs"]
|
||||
accessibility = ["i-slint-backend-selector/accessibility"]
|
||||
system-testing = ["i-slint-backend-selector/system-testing"]
|
||||
|
||||
std = ["i-slint-core/default", "i-slint-core/image-default-formats", "i-slint-backend-selector"]
|
||||
std = [
|
||||
"i-slint-core/default",
|
||||
"i-slint-core/image-default-formats",
|
||||
"i-slint-backend-selector",
|
||||
"i-slint-renderer-software?/std",
|
||||
]
|
||||
freestanding = ["i-slint-core/libm", "i-slint-core/unsafe-single-threaded"]
|
||||
experimental = ["i-slint-core/experimental"]
|
||||
experimental = ["i-slint-renderer-software?/experimental"]
|
||||
|
||||
default = ["std", "backend-winit", "renderer-femtovg", "backend-qt"]
|
||||
|
||||
|
|
@ -56,6 +61,7 @@ default = ["std", "backend-winit", "renderer-femtovg", "backend-qt"]
|
|||
i-slint-backend-selector = { workspace = true, optional = true }
|
||||
i-slint-backend-testing = { workspace = true, optional = true, features = ["ffi"] }
|
||||
i-slint-renderer-skia = { workspace = true, features = ["default", "x11", "wayland"], optional = true }
|
||||
i-slint-renderer-software = { workspace = true, optional = true }
|
||||
i-slint-core = { workspace = true, features = ["ffi"] }
|
||||
slint-interpreter = { workspace = true, features = ["ffi", "compat-1-2"], optional = true }
|
||||
raw-window-handle = { version = "0.6", optional = true }
|
||||
|
|
|
|||
|
|
@ -341,7 +341,6 @@ fn gen_corelib(
|
|||
"Rect",
|
||||
"SortOrder",
|
||||
"BitmapFont",
|
||||
"PhysicalRegion",
|
||||
]
|
||||
.iter()
|
||||
.chain(items.iter())
|
||||
|
|
@ -496,10 +495,12 @@ fn gen_corelib(
|
|||
"SharedPixelBuffer",
|
||||
"SharedImageBuffer",
|
||||
"StaticTextures",
|
||||
"BorrowedOpenGLTextureOrigin"
|
||||
"BorrowedOpenGLTextureOrigin",
|
||||
"PhysicalRegion",
|
||||
"PHYSICAL_REGION_MAX_SIZE",
|
||||
],
|
||||
"slint_image_internal.h",
|
||||
"#include \"slint_color.h\"\nnamespace slint::cbindgen_private { struct ParsedSVG{}; struct HTMLImage{}; using namespace vtable; namespace types{ struct NineSliceImage{}; } }",
|
||||
"#include \"slint_color.h\"\nnamespace slint::cbindgen_private { struct ParsedSVG{}; struct HTMLImage{}; struct PhysicalPx; using namespace vtable; namespace types{ struct NineSliceImage{}; } }",
|
||||
),
|
||||
(
|
||||
vec!["Color", "slint_color_brighter", "slint_color_darker",
|
||||
|
|
@ -582,6 +583,7 @@ fn gen_corelib(
|
|||
"ConicGradientBrush",
|
||||
"slint_conic_gradient_normalize_stops",
|
||||
"slint_conic_gradient_apply_rotation",
|
||||
"PHYSICAL_REGION_MAX_SIZE",
|
||||
]
|
||||
.into_iter()
|
||||
.chain(config.export.exclude.iter().map(|s| s.as_str()))
|
||||
|
|
@ -622,6 +624,7 @@ fn gen_corelib(
|
|||
.with_src(crate_dir.join("input.rs"))
|
||||
.with_src(crate_dir.join("item_rendering.rs"))
|
||||
.with_src(crate_dir.join("window.rs"))
|
||||
.with_src(crate_dir.join("../renderers/software/lib.rs"))
|
||||
.with_include("slint_enums_internal.h")
|
||||
.generate()
|
||||
.with_context(|| format!("Unable to generate bindings for {internal_header}"))?
|
||||
|
|
@ -881,6 +884,7 @@ namespace slint::cbindgen_private {
|
|||
using slint::cbindgen_private::types::TexturePixelFormat;
|
||||
struct DrawTextureArgs;
|
||||
struct DrawRectangleArgs;
|
||||
using types::PhysicalRegion;
|
||||
}
|
||||
",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -602,7 +602,7 @@ public:
|
|||
auto rectangles() const
|
||||
{
|
||||
SharedVector<cbindgen_private::IntRect> rectangles;
|
||||
slint_software_renderer_region_to_rects(&inner, &rectangles);
|
||||
cbindgen_private::slint_software_renderer_region_to_rects(&inner, &rectangles);
|
||||
# if __cpp_lib_ranges >= 202110L // DR20 P2415R2
|
||||
using std::ranges::owning_view;
|
||||
# else
|
||||
|
|
|
|||
|
|
@ -359,12 +359,12 @@ mod software_renderer {
|
|||
type SoftwareRendererOpaque = *const c_void;
|
||||
use i_slint_core::SharedVector;
|
||||
use i_slint_core::graphics::{IntRect, Rgb8Pixel};
|
||||
use i_slint_core::software_renderer::{
|
||||
use i_slint_renderer_software::{
|
||||
PhysicalRegion, RepaintBufferType, Rgb565Pixel, SoftwareRenderer,
|
||||
};
|
||||
|
||||
#[cfg(feature = "experimental")]
|
||||
use i_slint_core::software_renderer::{TargetPixelBuffer, TexturePixelFormat};
|
||||
use i_slint_renderer_software::{TargetPixelBuffer, TexturePixelFormat};
|
||||
|
||||
#[cfg(feature = "experimental")]
|
||||
type CppTargetPixelBufferUserData = *mut c_void;
|
||||
|
|
@ -398,8 +398,8 @@ mod software_renderer {
|
|||
pub tiling_gap_y: u32,
|
||||
}
|
||||
#[cfg(feature = "experimental")]
|
||||
impl From<&i_slint_core::software_renderer::DrawTextureArgs> for DrawTextureArgs {
|
||||
fn from(from: &i_slint_core::software_renderer::DrawTextureArgs) -> Self {
|
||||
impl From<&i_slint_renderer_software::DrawTextureArgs> for DrawTextureArgs {
|
||||
fn from(from: &i_slint_renderer_software::DrawTextureArgs) -> Self {
|
||||
let source = from.source();
|
||||
Self {
|
||||
image_data: source.data.as_ptr(),
|
||||
|
|
@ -448,8 +448,8 @@ mod software_renderer {
|
|||
pub rotation: i32,
|
||||
}
|
||||
#[cfg(feature = "experimental")]
|
||||
impl From<&i_slint_core::software_renderer::DrawRectangleArgs> for DrawRectangleArgs {
|
||||
fn from(from: &i_slint_core::software_renderer::DrawRectangleArgs) -> Self {
|
||||
impl From<&i_slint_renderer_software::DrawRectangleArgs> for DrawRectangleArgs {
|
||||
fn from(from: &i_slint_renderer_software::DrawRectangleArgs) -> Self {
|
||||
Self {
|
||||
x: from.x,
|
||||
y: from.y,
|
||||
|
|
@ -494,7 +494,7 @@ mod software_renderer {
|
|||
}
|
||||
|
||||
#[cfg(feature = "experimental")]
|
||||
impl<TargetPixel: i_slint_core::software_renderer::TargetPixel> TargetPixelBuffer
|
||||
impl<TargetPixel: i_slint_renderer_software::TargetPixel> TargetPixelBuffer
|
||||
for CppTargetPixelBuffer<TargetPixel>
|
||||
{
|
||||
type TargetPixel = TargetPixel;
|
||||
|
|
@ -524,7 +524,7 @@ mod software_renderer {
|
|||
/// Draw a rectangle specified by the DrawRectangleArgs. That rectangle must be clipped to the given region
|
||||
fn draw_rectangle(
|
||||
&mut self,
|
||||
args: &i_slint_core::software_renderer::DrawRectangleArgs,
|
||||
args: &i_slint_renderer_software::DrawRectangleArgs,
|
||||
clip: &PhysicalRegion,
|
||||
) -> bool {
|
||||
let args = args.into();
|
||||
|
|
@ -533,7 +533,7 @@ mod software_renderer {
|
|||
|
||||
fn draw_texture(
|
||||
&mut self,
|
||||
texture: &i_slint_core::software_renderer::DrawTextureArgs,
|
||||
texture: &i_slint_renderer_software::DrawTextureArgs,
|
||||
clip: &PhysicalRegion,
|
||||
) -> bool {
|
||||
let texture = texture.into();
|
||||
|
|
@ -620,8 +620,8 @@ mod software_renderer {
|
|||
user_data: *mut core::ffi::c_void,
|
||||
}
|
||||
|
||||
impl<TargetPixel: i_slint_core::software_renderer::TargetPixel>
|
||||
i_slint_core::software_renderer::LineBufferProvider for LineByLineProcessor<TargetPixel>
|
||||
impl<TargetPixel: i_slint_renderer_software::TargetPixel>
|
||||
i_slint_renderer_software::LineBufferProvider for LineByLineProcessor<TargetPixel>
|
||||
{
|
||||
type TargetPixel = TargetPixel;
|
||||
fn process_line(
|
||||
|
|
@ -710,7 +710,7 @@ mod software_renderer {
|
|||
r: SoftwareRendererOpaque,
|
||||
rotation: i32,
|
||||
) {
|
||||
use i_slint_core::software_renderer::RenderingRotation;
|
||||
use i_slint_renderer_software::RenderingRotation;
|
||||
let renderer = unsafe { &*(r as *const SoftwareRenderer) };
|
||||
renderer.set_rendering_rotation(match rotation {
|
||||
90 => RenderingRotation::Rotate90,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue