mirror of
https://github.com/slint-ui/slint.git
synced 2025-09-28 04:45:13 +00:00
Rename WindowRotation to RenderingRotation in the software renderer (#4181)
Same term as we're going to use in the linuxkms backend.
This commit is contained in:
parent
3b51c8e30a
commit
95044c3a09
6 changed files with 62 additions and 56 deletions
|
@ -27,6 +27,6 @@ void slint_esp_init(slint::PhysicalSize size, esp_lcd_panel_handle_t panel,
|
||||||
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2 = {}
|
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2 = {}
|
||||||
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
||||||
,
|
,
|
||||||
slint::platform::SoftwareRenderer::WindowRotation rotation = {}
|
slint::platform::SoftwareRenderer::RenderingRotation rotation = {}
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
|
@ -21,7 +21,7 @@ struct EspPlatform : public slint::platform::Platform
|
||||||
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2 = {}
|
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2 = {}
|
||||||
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
||||||
,
|
,
|
||||||
slint::platform::SoftwareRenderer::WindowRotation rotation = {}
|
slint::platform::SoftwareRenderer::RenderingRotation rotation = {}
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
: size(size),
|
: size(size),
|
||||||
|
@ -50,7 +50,7 @@ private:
|
||||||
std::span<slint::platform::Rgb565Pixel> buffer1;
|
std::span<slint::platform::Rgb565Pixel> buffer1;
|
||||||
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2;
|
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2;
|
||||||
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
||||||
slint::platform::SoftwareRenderer::WindowRotation rotation;
|
slint::platform::SoftwareRenderer::RenderingRotation rotation;
|
||||||
#endif
|
#endif
|
||||||
class EspWindowAdapter *m_window = nullptr;
|
class EspWindowAdapter *m_window = nullptr;
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ std::unique_ptr<slint::platform::WindowAdapter> EspPlatform::create_window_adapt
|
||||||
auto window = std::make_unique<EspWindowAdapter>(buffer_type, size);
|
auto window = std::make_unique<EspWindowAdapter>(buffer_type, size);
|
||||||
m_window = window.get();
|
m_window = window.get();
|
||||||
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
||||||
m_window->m_renderer.set_window_rotation(rotation);
|
m_window->m_renderer.set_rendering_rotation(rotation);
|
||||||
#endif
|
#endif
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
@ -203,8 +203,10 @@ void EspPlatform::run_event_loop()
|
||||||
if (std::exchange(m_window->needs_redraw, false)) {
|
if (std::exchange(m_window->needs_redraw, false)) {
|
||||||
auto rotated = false
|
auto rotated = false
|
||||||
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
||||||
|| rotation == slint::platform::SoftwareRenderer::WindowRotation::Rotate90
|
|| rotation
|
||||||
|| rotation == slint::platform::SoftwareRenderer::WindowRotation::Rotate270
|
== slint::platform::SoftwareRenderer::RenderingRotation::Rotate90
|
||||||
|
|| rotation
|
||||||
|
== slint::platform::SoftwareRenderer::RenderingRotation::Rotate270
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
auto region =
|
auto region =
|
||||||
|
@ -283,7 +285,7 @@ void slint_esp_init(slint::PhysicalSize size, esp_lcd_panel_handle_t panel,
|
||||||
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2
|
std::optional<std::span<slint::platform::Rgb565Pixel>> buffer2
|
||||||
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
#ifdef SLINT_FEATURE_EXPERIMENTAL
|
||||||
,
|
,
|
||||||
slint::platform::SoftwareRenderer::WindowRotation rotation
|
slint::platform::SoftwareRenderer::RenderingRotation rotation
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
|
@ -608,8 +608,8 @@ public:
|
||||||
|
|
||||||
# ifdef SLINT_FEATURE_EXPERIMENTAL
|
# ifdef SLINT_FEATURE_EXPERIMENTAL
|
||||||
/// This enum describes the rotation that is applied to the buffer when rendering.
|
/// This enum describes the rotation that is applied to the buffer when rendering.
|
||||||
/// To be used in set_window_rotation()
|
/// To be used in set_rendering_rotation()
|
||||||
enum class WindowRotation {
|
enum class RenderingRotation {
|
||||||
/// No rotation
|
/// No rotation
|
||||||
NoRotation = 0,
|
NoRotation = 0,
|
||||||
/// Rotate 90° to the left
|
/// Rotate 90° to the left
|
||||||
|
@ -623,10 +623,10 @@ public:
|
||||||
/// Set how the window need to be rotated in the buffer.
|
/// Set how the window need to be rotated in the buffer.
|
||||||
///
|
///
|
||||||
/// This is typically used to implement screen rotation in software
|
/// This is typically used to implement screen rotation in software
|
||||||
void set_window_rotation(WindowRotation rotation)
|
void set_rendering_rotation(RenderingRotation rotation)
|
||||||
{
|
{
|
||||||
cbindgen_private::slint_software_renderer_set_window_rotation(inner,
|
cbindgen_private::slint_software_renderer_set_rendering_rotation(
|
||||||
static_cast<int>(rotation));
|
inner, static_cast<int>(rotation));
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
};
|
};
|
||||||
|
|
|
@ -387,17 +387,17 @@ mod software_renderer {
|
||||||
|
|
||||||
#[cfg(feature = "experimental")]
|
#[cfg(feature = "experimental")]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn slint_software_renderer_set_window_rotation(
|
pub unsafe extern "C" fn slint_software_renderer_set_rendering_rotation(
|
||||||
r: SoftwareRendererOpaque,
|
r: SoftwareRendererOpaque,
|
||||||
rotation: i32,
|
rotation: i32,
|
||||||
) {
|
) {
|
||||||
use i_slint_core::software_renderer::WindowRotation;
|
use i_slint_core::software_renderer::RenderingRotation;
|
||||||
let renderer = &*(r as *const SoftwareRenderer);
|
let renderer = &*(r as *const SoftwareRenderer);
|
||||||
renderer.set_window_rotation(match rotation {
|
renderer.set_rendering_rotation(match rotation {
|
||||||
90 => WindowRotation::Rotate90,
|
90 => RenderingRotation::Rotate90,
|
||||||
180 => WindowRotation::Rotate180,
|
180 => RenderingRotation::Rotate180,
|
||||||
270 => WindowRotation::Rotate270,
|
270 => RenderingRotation::Rotate270,
|
||||||
_ => WindowRotation::NoRotation,
|
_ => RenderingRotation::NoRotation,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,10 +68,10 @@ mod internal {
|
||||||
use super::*;
|
use super::*;
|
||||||
/// This enum describes the rotation that should be applied to the contents rendered by the software renderer.
|
/// This enum describes the rotation that should be applied to the contents rendered by the software renderer.
|
||||||
///
|
///
|
||||||
/// Argument to be passed in [`SoftwareRenderer::set_window_rotation`].
|
/// Argument to be passed in [`SoftwareRenderer::set_rendering_rotation`].
|
||||||
#[non_exhaustive]
|
#[non_exhaustive]
|
||||||
#[derive(Default, Copy, Clone, Eq, PartialEq, Debug)]
|
#[derive(Default, Copy, Clone, Eq, PartialEq, Debug)]
|
||||||
pub enum WindowRotation {
|
pub enum RenderingRotation {
|
||||||
/// No rotation
|
/// No rotation
|
||||||
#[default]
|
#[default]
|
||||||
NoRotation,
|
NoRotation,
|
||||||
|
@ -85,11 +85,11 @@ mod internal {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "software-renderer-rotation")]
|
#[cfg(feature = "software-renderer-rotation")]
|
||||||
pub use internal::WindowRotation;
|
pub use internal::RenderingRotation;
|
||||||
#[cfg(not(feature = "software-renderer-rotation"))]
|
#[cfg(not(feature = "software-renderer-rotation"))]
|
||||||
use internal::WindowRotation;
|
use internal::RenderingRotation;
|
||||||
|
|
||||||
impl WindowRotation {
|
impl RenderingRotation {
|
||||||
fn is_transpose(self) -> bool {
|
fn is_transpose(self) -> bool {
|
||||||
matches!(self, Self::Rotate90 | Self::Rotate270)
|
matches!(self, Self::Rotate90 | Self::Rotate270)
|
||||||
}
|
}
|
||||||
|
@ -102,17 +102,17 @@ impl WindowRotation {
|
||||||
/// Angle of the rotation in degrees
|
/// Angle of the rotation in degrees
|
||||||
fn angle(self) -> f32 {
|
fn angle(self) -> f32 {
|
||||||
match self {
|
match self {
|
||||||
WindowRotation::NoRotation => 0.,
|
RenderingRotation::NoRotation => 0.,
|
||||||
WindowRotation::Rotate90 => 90.,
|
RenderingRotation::Rotate90 => 90.,
|
||||||
WindowRotation::Rotate180 => 180.,
|
RenderingRotation::Rotate180 => 180.,
|
||||||
WindowRotation::Rotate270 => 270.,
|
RenderingRotation::Rotate270 => 270.,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
struct RotationInfo {
|
struct RotationInfo {
|
||||||
orientation: WindowRotation,
|
orientation: RenderingRotation,
|
||||||
screen_size: PhysicalSize,
|
screen_size: PhysicalSize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ pub struct SoftwareRenderer {
|
||||||
/// Only used if repaint_buffer_type == RepaintBufferType::SwappedBuffers
|
/// Only used if repaint_buffer_type == RepaintBufferType::SwappedBuffers
|
||||||
prev_frame_dirty: Cell<DirtyRegion>,
|
prev_frame_dirty: Cell<DirtyRegion>,
|
||||||
maybe_window_adapter: RefCell<Option<Weak<dyn crate::window::WindowAdapter>>>,
|
maybe_window_adapter: RefCell<Option<Weak<dyn crate::window::WindowAdapter>>>,
|
||||||
rotation: Cell<WindowRotation>,
|
rotation: Cell<RenderingRotation>,
|
||||||
rendering_metrics_collector: Option<Rc<RenderingMetricsCollector>>,
|
rendering_metrics_collector: Option<Rc<RenderingMetricsCollector>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,13 +278,13 @@ impl SoftwareRenderer {
|
||||||
#[cfg(feature = "software-renderer-rotation")]
|
#[cfg(feature = "software-renderer-rotation")]
|
||||||
// This API is under a feature flag because it is experimental for now.
|
// This API is under a feature flag because it is experimental for now.
|
||||||
// It should be a property of the Window instead (set via dispatch_event?)
|
// It should be a property of the Window instead (set via dispatch_event?)
|
||||||
pub fn set_window_rotation(&self, rotation: WindowRotation) {
|
pub fn set_rendering_rotation(&self, rotation: RenderingRotation) {
|
||||||
self.rotation.set(rotation)
|
self.rotation.set(rotation)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the current rotation. See [`Self::set_window_rotation()`]
|
/// Return the current rotation. See [`Self::set_rendering_rotation()`]
|
||||||
#[cfg(feature = "software-renderer-rotation")]
|
#[cfg(feature = "software-renderer-rotation")]
|
||||||
pub fn window_rotation(&self) -> WindowRotation {
|
pub fn rendering_rotation(&self) -> RenderingRotation {
|
||||||
self.rotation.get()
|
self.rotation.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -989,7 +989,7 @@ struct SceneTexture<'a> {
|
||||||
/// The alpha of this color is ignored. (it is supposed to be mixed in `Self::alpha`)
|
/// The alpha of this color is ignored. (it is supposed to be mixed in `Self::alpha`)
|
||||||
color: Color,
|
color: Color,
|
||||||
alpha: u8,
|
alpha: u8,
|
||||||
rotation: WindowRotation,
|
rotation: RenderingRotation,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum SharedBufferData {
|
enum SharedBufferData {
|
||||||
|
@ -1012,7 +1012,7 @@ struct SharedBufferCommand {
|
||||||
source_rect: PhysicalRect,
|
source_rect: PhysicalRect,
|
||||||
colorize: Color,
|
colorize: Color,
|
||||||
alpha: u8,
|
alpha: u8,
|
||||||
rotation: WindowRotation,
|
rotation: RenderingRotation,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SharedBufferCommand {
|
impl SharedBufferCommand {
|
||||||
|
@ -1305,7 +1305,7 @@ impl<'a, T: ProcessScene> SceneBuilder<'a, T> {
|
||||||
scale_factor: ScaleFactor,
|
scale_factor: ScaleFactor,
|
||||||
window: &'a WindowInner,
|
window: &'a WindowInner,
|
||||||
processor: T,
|
processor: T,
|
||||||
orientation: WindowRotation,
|
orientation: RenderingRotation,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
processor,
|
processor,
|
||||||
|
|
|
@ -15,7 +15,7 @@ use i_slint_core::{
|
||||||
item_rendering::DirtyRegion,
|
item_rendering::DirtyRegion,
|
||||||
platform::PlatformError,
|
platform::PlatformError,
|
||||||
renderer::RendererSealed,
|
renderer::RendererSealed,
|
||||||
software_renderer::{LineBufferProvider, MinimalSoftwareWindow, WindowRotation},
|
software_renderer::{LineBufferProvider, MinimalSoftwareWindow, RenderingRotation},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct SwrTestingBackend {
|
pub struct SwrTestingBackend {
|
||||||
|
@ -58,14 +58,14 @@ pub fn image_buffer(path: &str) -> Result<SharedPixelBuffer<Rgb8Pixel>, image::I
|
||||||
|
|
||||||
pub fn screenshot(
|
pub fn screenshot(
|
||||||
window: Rc<MinimalSoftwareWindow>,
|
window: Rc<MinimalSoftwareWindow>,
|
||||||
rotated: WindowRotation,
|
rotated: RenderingRotation,
|
||||||
) -> SharedPixelBuffer<Rgb8Pixel> {
|
) -> SharedPixelBuffer<Rgb8Pixel> {
|
||||||
let size = window.size();
|
let size = window.size();
|
||||||
let width = size.width;
|
let width = size.width;
|
||||||
let height = size.height;
|
let height = size.height;
|
||||||
|
|
||||||
let mut buffer = match rotated {
|
let mut buffer = match rotated {
|
||||||
WindowRotation::Rotate90 | WindowRotation::Rotate270 => {
|
RenderingRotation::Rotate90 | RenderingRotation::Rotate270 => {
|
||||||
SharedPixelBuffer::<Rgb8Pixel>::new(height, width)
|
SharedPixelBuffer::<Rgb8Pixel>::new(height, width)
|
||||||
}
|
}
|
||||||
_ => SharedPixelBuffer::<Rgb8Pixel>::new(width, height),
|
_ => SharedPixelBuffer::<Rgb8Pixel>::new(width, height),
|
||||||
|
@ -78,9 +78,9 @@ pub fn screenshot(
|
||||||
Point2D::new(0., 0.),
|
Point2D::new(0., 0.),
|
||||||
Point2D::new(width as f32, height as f32),
|
Point2D::new(width as f32, height as f32),
|
||||||
));
|
));
|
||||||
renderer.set_window_rotation(rotated);
|
renderer.set_rendering_rotation(rotated);
|
||||||
renderer.render(buffer.make_mut_slice(), width as usize);
|
renderer.render(buffer.make_mut_slice(), width as usize);
|
||||||
renderer.set_window_rotation(WindowRotation::NoRotation);
|
renderer.set_rendering_rotation(RenderingRotation::NoRotation);
|
||||||
});
|
});
|
||||||
|
|
||||||
buffer
|
buffer
|
||||||
|
@ -127,7 +127,7 @@ pub struct TestCaseOptions {
|
||||||
fn compare_images(
|
fn compare_images(
|
||||||
reference_path: &str,
|
reference_path: &str,
|
||||||
screenshot: &SharedPixelBuffer<Rgb8Pixel>,
|
screenshot: &SharedPixelBuffer<Rgb8Pixel>,
|
||||||
rotated: WindowRotation,
|
rotated: RenderingRotation,
|
||||||
options: &TestCaseOptions,
|
options: &TestCaseOptions,
|
||||||
) -> Result<(), String> {
|
) -> Result<(), String> {
|
||||||
let compare = || {
|
let compare = || {
|
||||||
|
@ -141,17 +141,20 @@ fn compare_images(
|
||||||
screenshot.size()
|
screenshot.size()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
if reference.as_bytes() == screenshot.as_bytes() && rotated != WindowRotation::NoRotation {
|
if reference.as_bytes() == screenshot.as_bytes() && rotated != RenderingRotation::NoRotation
|
||||||
|
{
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let idx = |x: u32, y: u32| -> u32 {
|
let idx = |x: u32, y: u32| -> u32 {
|
||||||
match rotated {
|
match rotated {
|
||||||
WindowRotation::Rotate90 => x * reference.width() + reference.width() - y - 1,
|
RenderingRotation::Rotate90 => x * reference.width() + reference.width() - y - 1,
|
||||||
WindowRotation::Rotate180 => {
|
RenderingRotation::Rotate180 => {
|
||||||
(reference.height() - y - 1) * reference.width() + reference.width() - x - 1
|
(reference.height() - y - 1) * reference.width() + reference.width() - x - 1
|
||||||
}
|
}
|
||||||
WindowRotation::Rotate270 => (reference.height() - x - 1) * reference.width() + y,
|
RenderingRotation::Rotate270 => {
|
||||||
|
(reference.height() - x - 1) * reference.width() + y
|
||||||
|
}
|
||||||
_ => y * reference.width() + x,
|
_ => y * reference.width() + x,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -164,7 +167,8 @@ fn compare_images(
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
let (failed_pixel_count, max_color_difference) = if rotated != WindowRotation::NoRotation {
|
let (failed_pixel_count, max_color_difference) = if rotated != RenderingRotation::NoRotation
|
||||||
|
{
|
||||||
let mut failure_count = 0usize;
|
let mut failure_count = 0usize;
|
||||||
let mut max_color_difference = 0.0f32;
|
let mut max_color_difference = 0.0f32;
|
||||||
for y in 0..screenshot.height() {
|
for y in 0..screenshot.height() {
|
||||||
|
@ -187,7 +191,7 @@ fn compare_images(
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
let percentage_different = failed_pixel_count * 100 / reference.as_slice().len();
|
let percentage_different = failed_pixel_count * 100 / reference.as_slice().len();
|
||||||
if rotated != WindowRotation::NoRotation
|
if rotated != RenderingRotation::NoRotation
|
||||||
&& (percentage_different <= 1 || max_color_difference < options.rotation_threshold)
|
&& (percentage_different <= 1 || max_color_difference < options.rotation_threshold)
|
||||||
{
|
{
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
@ -224,7 +228,7 @@ fn compare_images(
|
||||||
let result = compare();
|
let result = compare();
|
||||||
|
|
||||||
if result.is_err()
|
if result.is_err()
|
||||||
&& rotated == WindowRotation::NoRotation
|
&& rotated == RenderingRotation::NoRotation
|
||||||
&& std::env::var("SLINT_CREATE_SCREENSHOTS").map_or(false, |var| var == "1")
|
&& std::env::var("SLINT_CREATE_SCREENSHOTS").map_or(false, |var| var == "1")
|
||||||
{
|
{
|
||||||
eprintln!("saving rendered image as comparison to reference failed");
|
eprintln!("saving rendered image as comparison to reference failed");
|
||||||
|
@ -247,10 +251,10 @@ pub fn assert_with_render(
|
||||||
options: &TestCaseOptions,
|
options: &TestCaseOptions,
|
||||||
) {
|
) {
|
||||||
for rotation in [
|
for rotation in [
|
||||||
WindowRotation::NoRotation,
|
RenderingRotation::NoRotation,
|
||||||
WindowRotation::Rotate180,
|
RenderingRotation::Rotate180,
|
||||||
WindowRotation::Rotate90,
|
RenderingRotation::Rotate90,
|
||||||
WindowRotation::Rotate270,
|
RenderingRotation::Rotate270,
|
||||||
] {
|
] {
|
||||||
let rendering = screenshot(window.clone(), rotation);
|
let rendering = screenshot(window.clone(), rotation);
|
||||||
if let Err(reason) = compare_images(path, &rendering, rotation, options) {
|
if let Err(reason) = compare_images(path, &rendering, rotation, options) {
|
||||||
|
@ -268,7 +272,7 @@ pub fn assert_with_render_by_line(
|
||||||
let mut rendering = SharedPixelBuffer::<Rgb8Pixel>::new(s.width, s.height);
|
let mut rendering = SharedPixelBuffer::<Rgb8Pixel>::new(s.width, s.height);
|
||||||
|
|
||||||
screenshot_render_by_line(window.clone(), None, &mut rendering);
|
screenshot_render_by_line(window.clone(), None, &mut rendering);
|
||||||
if let Err(reason) = compare_images(path, &rendering, WindowRotation::NoRotation, options) {
|
if let Err(reason) = compare_images(path, &rendering, RenderingRotation::NoRotation, options) {
|
||||||
panic!("Image comparison failure for line-by-line rendering for {path}: {reason}");
|
panic!("Image comparison failure for line-by-line rendering for {path}: {reason}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +288,7 @@ pub fn assert_with_render_by_line(
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
screenshot_render_by_line(window, Some(region.cast()), &mut rendering);
|
screenshot_render_by_line(window, Some(region.cast()), &mut rendering);
|
||||||
if let Err(reason) = compare_images(path, &rendering, WindowRotation::NoRotation, options) {
|
if let Err(reason) = compare_images(path, &rendering, RenderingRotation::NoRotation, options) {
|
||||||
panic!("Partial rendering image comparison failure for line-by-line rendering for {path}: {reason}");
|
panic!("Partial rendering image comparison failure for line-by-line rendering for {path}: {reason}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,7 +320,7 @@ pub fn screenshot_render_by_line(
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn save_screenshot(path: &str, window: Rc<MinimalSoftwareWindow>) {
|
pub fn save_screenshot(path: &str, window: Rc<MinimalSoftwareWindow>) {
|
||||||
let buffer = screenshot(window.clone(), WindowRotation::NoRotation);
|
let buffer = screenshot(window.clone(), RenderingRotation::NoRotation);
|
||||||
image::save_buffer(
|
image::save_buffer(
|
||||||
path,
|
path,
|
||||||
buffer.as_bytes(),
|
buffer.as_bytes(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue