From d514cc1787b89c90e4e9532484e9ee0a1bf3270f Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Tue, 21 Jul 2026 18:10:26 +0000 Subject: [PATCH 1/4] Update easy-cast --- crates/kas-core/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/kas-core/Cargo.toml b/crates/kas-core/Cargo.toml index eccde6b54..c6c41a7f6 100644 --- a/crates/kas-core/Cargo.toml +++ b/crates/kas-core/Cargo.toml @@ -115,7 +115,7 @@ ab_glyph = { version = "0.2.10", optional = true } swash = { version = "0.2.4", features = ["scale"] } linearize = { version = "0.1.5", features = ["derive"] } kas-text = "0.9.0" -easy-cast = "0.5.4" # used in doc links +easy-cast = "0.6.0" pulldown-cmark = { version = "0.13.0", optional = true } [dependencies.kas-macros] From 0afbd380863d094cba0788be7bdb356cf5fe8bfd Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Wed, 22 Jul 2026 08:17:56 +0000 Subject: [PATCH 2/4] Update impl-tools-lib --- crates/kas-macros/Cargo.toml | 4 ++-- crates/kas-macros/src/widget.rs | 3 ++- crates/kas-macros/src/widget_derive.rs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/kas-macros/Cargo.toml b/crates/kas-macros/Cargo.toml index fa1a8fbad..71b794ae6 100644 --- a/crates/kas-macros/Cargo.toml +++ b/crates/kas-macros/Cargo.toml @@ -32,10 +32,10 @@ quote = "1.0" proc-macro2 = { version = "1.0" } proc-macro-error3 = { version = "3.0", default-features = false } bitflags = "2.3.3" -impl-tools-lib = "0.12.0" +impl-tools-lib = "0.13.0" [dependencies.syn] -version = "2.0.22" +version = "3.0.2" # We need 'extra-traits' for equality testing # We need 'full' for parsing macros within macro arguments features = ["extra-traits", "full", "visit", "visit-mut"] diff --git a/crates/kas-macros/src/widget.rs b/crates/kas-macros/src/widget.rs index 85689bf5d..466c7a5a0 100644 --- a/crates/kas-macros/src/widget.rs +++ b/crates/kas-macros/src/widget.rs @@ -45,7 +45,7 @@ pub fn widget(attr_span: Span, scope: &mut Scope) -> Result<()> { let mut translation_span = None; let mut handle_scroll = false; for (index, impl_) in scope.impls.iter_mut().enumerate() { - if let Some((_, ref path, _)) = impl_.trait_ { + if let Some((ref path, _)) = impl_.trait_ { if *path == parse_quote! { ::kas::Widget } || *path == parse_quote! { kas::Widget } || *path == parse_quote! { Widget } @@ -287,6 +287,7 @@ pub fn widget(attr_span: Span, scope: &mut Scope) -> Result<()> { }); } field.ty = Type::Path(syn::TypePath { + attrs: vec![], qself: None, path: core_type.into(), }); diff --git a/crates/kas-macros/src/widget_derive.rs b/crates/kas-macros/src/widget_derive.rs index 012856916..16731cc4b 100644 --- a/crates/kas-macros/src/widget_derive.rs +++ b/crates/kas-macros/src/widget_derive.rs @@ -65,7 +65,7 @@ fn derive_widget(attr_span: Span, _: DeriveArgs, scope: &mut Scope) -> Result<() let mut widget_impl = None; for (index, impl_) in scope.impls.iter().enumerate() { - if let Some((_, ref path, _)) = impl_.trait_ { + if let Some((ref path, _)) = impl_.trait_ { if *path == parse_quote! { ::kas::Layout } || *path == parse_quote! { kas::Layout } || *path == parse_quote! { Layout } From 4193a7aed5235a9674b285eb092be5b74f761692 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Wed, 22 Jul 2026 08:20:16 +0000 Subject: [PATCH 3/4] Update wgpu to 30.0 --- crates/kas-wgpu/Cargo.toml | 2 +- crates/kas-wgpu/src/draw/atlases.rs | 5 ++++- crates/kas-wgpu/src/draw/common.rs | 5 ++++- crates/kas-wgpu/src/draw/flat_round.rs | 4 ++-- crates/kas-wgpu/src/draw/images.rs | 12 ++++++------ crates/kas-wgpu/src/draw/mod.rs | 2 +- crates/kas-wgpu/src/draw/round_2col.rs | 4 ++-- crates/kas-wgpu/src/draw/shaded_round.rs | 4 ++-- crates/kas-wgpu/src/draw/shaded_square.rs | 4 ++-- crates/kas-wgpu/src/options.rs | 1 + crates/kas-wgpu/src/surface.rs | 3 ++- examples/mandlebrot/mandlebrot.rs | 4 ++-- 12 files changed, 29 insertions(+), 21 deletions(-) diff --git a/crates/kas-wgpu/Cargo.toml b/crates/kas-wgpu/Cargo.toml index 1f78392a2..e01cf7919 100644 --- a/crates/kas-wgpu/Cargo.toml +++ b/crates/kas-wgpu/Cargo.toml @@ -38,7 +38,7 @@ package = "kas-core" path = "../kas-core" [dependencies.wgpu] -version = "29.0.0" +version = "30.0.0" default-features = false features = ["spirv"] diff --git a/crates/kas-wgpu/src/draw/atlases.rs b/crates/kas-wgpu/src/draw/atlases.rs index 9c53da84c..8c07c353b 100644 --- a/crates/kas-wgpu/src/draw/atlases.rs +++ b/crates/kas-wgpu/src/draw/atlases.rs @@ -363,7 +363,10 @@ impl Window { mapped_at_creation: true, }); - let mut view = buffer.slice(..byte_len.get()).get_mapped_range_mut(); + let mut view = buffer + .slice(..byte_len.get()) + .get_mapped_range_mut() + .unwrap(); copy_to_slice(&mut self.passes, &mut view); drop(view); diff --git a/crates/kas-wgpu/src/draw/common.rs b/crates/kas-wgpu/src/draw/common.rs index 8491f260a..23f5d6941 100644 --- a/crates/kas-wgpu/src/draw/common.rs +++ b/crates/kas-wgpu/src/draw/common.rs @@ -65,7 +65,10 @@ impl Window { mapped_at_creation: true, }); - let mut view = buffer.slice(..byte_len.get()).get_mapped_range_mut(); + let mut view = buffer + .slice(..byte_len.get()) + .get_mapped_range_mut() + .unwrap(); copy_to_slice(&mut self.passes, &mut view); drop(view); diff --git a/crates/kas-wgpu/src/draw/flat_round.rs b/crates/kas-wgpu/src/draw/flat_round.rs index 46f2313de..b71564016 100644 --- a/crates/kas-wgpu/src/draw/flat_round.rs +++ b/crates/kas-wgpu/src/draw/flat_round.rs @@ -69,7 +69,7 @@ impl Pipeline { module: &shaders.vert_flat_round, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &wgpu::vertex_attr_array![ @@ -79,7 +79,7 @@ impl Pipeline { 3 => Float32x2, 4 => Float32x2 ], - }], + })], }, primitive: wgpu::PrimitiveState { topology: wgpu::PrimitiveTopology::TriangleList, diff --git a/crates/kas-wgpu/src/draw/images.rs b/crates/kas-wgpu/src/draw/images.rs index 7bba3b6e4..2c3c04040 100644 --- a/crates/kas-wgpu/src/draw/images.rs +++ b/crates/kas-wgpu/src/draw/images.rs @@ -113,7 +113,7 @@ impl Images { module: &shaders.vert_image, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Instance, attributes: &wgpu::vertex_attr_array![ @@ -122,7 +122,7 @@ impl Images { 2 => Float32x2, 3 => Float32x2, ], - }], + })], }, wgpu::FragmentState { module: &shaders.frag_image, @@ -146,7 +146,7 @@ impl Images { module: &shaders.vert_glyph, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Instance, attributes: &wgpu::vertex_attr_array![ @@ -156,7 +156,7 @@ impl Images { 3 => Float32x2, 4 => Float32x4, ], - }], + })], }, wgpu::FragmentState { module: &shaders.frag_glyph, @@ -185,7 +185,7 @@ impl Images { module: &shaders.vert_glyph, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Instance, attributes: &wgpu::vertex_attr_array![ @@ -195,7 +195,7 @@ impl Images { 3 => Float32x2, 4 => Float32x4, ], - }], + })], }, wgpu::FragmentState { module: &shaders.frag_subpixel, diff --git a/crates/kas-wgpu/src/draw/mod.rs b/crates/kas-wgpu/src/draw/mod.rs index 3cdfb78e0..5bd4615ff 100644 --- a/crates/kas-wgpu/src/draw/mod.rs +++ b/crates/kas-wgpu/src/draw/mod.rs @@ -54,7 +54,7 @@ impl Default for ClipRegion { pub struct DrawPipe { pub(crate) adapter: wgpu::Adapter, pub(crate) device: wgpu::Device, - queue: wgpu::Queue, + pub(crate) queue: wgpu::Queue, staging_belt: wgpu::util::StagingBelt, bgl_common: wgpu::BindGroupLayout, light_norm_buf: wgpu::Buffer, diff --git a/crates/kas-wgpu/src/draw/round_2col.rs b/crates/kas-wgpu/src/draw/round_2col.rs index 376fe759b..8c821cb9c 100644 --- a/crates/kas-wgpu/src/draw/round_2col.rs +++ b/crates/kas-wgpu/src/draw/round_2col.rs @@ -58,7 +58,7 @@ impl Pipeline { module: &shaders.vert_round_2col, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &wgpu::vertex_attr_array![ @@ -67,7 +67,7 @@ impl Pipeline { 2 => Float32x4, 3 => Float32x2, ], - }], + })], }, primitive: wgpu::PrimitiveState { topology: wgpu::PrimitiveTopology::TriangleList, diff --git a/crates/kas-wgpu/src/draw/shaded_round.rs b/crates/kas-wgpu/src/draw/shaded_round.rs index 14e1bd31d..168e825e5 100644 --- a/crates/kas-wgpu/src/draw/shaded_round.rs +++ b/crates/kas-wgpu/src/draw/shaded_round.rs @@ -64,7 +64,7 @@ impl Pipeline { module: &shaders.vert_shaded_round, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &wgpu::vertex_attr_array![ @@ -74,7 +74,7 @@ impl Pipeline { 3 => Float32x2, 4 => Float32x2 ], - }], + })], }, primitive: wgpu::PrimitiveState { topology: wgpu::PrimitiveTopology::TriangleList, diff --git a/crates/kas-wgpu/src/draw/shaded_square.rs b/crates/kas-wgpu/src/draw/shaded_square.rs index 85b566ad3..6d9c59913 100644 --- a/crates/kas-wgpu/src/draw/shaded_square.rs +++ b/crates/kas-wgpu/src/draw/shaded_square.rs @@ -51,7 +51,7 @@ impl Pipeline { module: &shaders.vert_shaded_square, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &wgpu::vertex_attr_array![ @@ -59,7 +59,7 @@ impl Pipeline { 1 => Float32x4, 2 => Float32x2, ], - }], + })], }, primitive: wgpu::PrimitiveState { topology: wgpu::PrimitiveTopology::TriangleList, diff --git a/crates/kas-wgpu/src/options.rs b/crates/kas-wgpu/src/options.rs index 3ff010808..0e6eb22f3 100644 --- a/crates/kas-wgpu/src/options.rs +++ b/crates/kas-wgpu/src/options.rs @@ -116,6 +116,7 @@ impl Options { power_preference: self.power_preference, force_fallback_adapter: self.backends.is_empty(), compatible_surface: None, + apply_limit_buckets: false, } } diff --git a/crates/kas-wgpu/src/surface.rs b/crates/kas-wgpu/src/surface.rs index 4c4719904..54aabdf1b 100644 --- a/crates/kas-wgpu/src/surface.rs +++ b/crates/kas-wgpu/src/surface.rs @@ -82,6 +82,7 @@ impl WindowSurface for Surface { let sc_desc = wgpu::SurfaceConfiguration { usage: wgpu::TextureUsages::RENDER_ATTACHMENT, format: crate::draw::RENDER_TEX_FORMAT, + color_space: wgpu::SurfaceColorSpace::Srgb, width: size.0.cast(), height: size.1.cast(), present_mode, @@ -135,7 +136,7 @@ impl WindowSurface for Surface { shared.render(&mut self.draw, &view, clear_color); let pre_present = Instant::now(); - frame.present(); + shared.queue.present(frame); if !outdated { PresentResult::Success(pre_present) diff --git a/examples/mandlebrot/mandlebrot.rs b/examples/mandlebrot/mandlebrot.rs index 3613e6fea..7d374973d 100644 --- a/examples/mandlebrot/mandlebrot.rs +++ b/examples/mandlebrot/mandlebrot.rs @@ -132,11 +132,11 @@ impl CustomPipeBuilder for PipeBuilder { module: &shaders.vertex, entry_point: Some("main"), compilation_options: Default::default(), - buffers: &[wgpu::VertexBufferLayout { + buffers: &[Some(wgpu::VertexBufferLayout { array_stride: size_of::() as wgpu::BufferAddress, step_mode: wgpu::VertexStepMode::Vertex, attributes: &wgpu::vertex_attr_array![0 => Float32x3, 1 => Float32x2], - }], + })], }, primitive: wgpu::PrimitiveState { topology: wgpu::PrimitiveTopology::TriangleList, From 6dd69e8c0292df779e0cd848fad605cada59f19b Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Thu, 23 Jul 2026 06:12:39 +0000 Subject: [PATCH 4/4] Bump MSRV to 1.96.0 --- .github/workflows/test.yml | 2 +- CHANGELOG.md | 4 ++++ Cargo.toml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c29d1bab1..248e6d151 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -85,7 +85,7 @@ jobs: toolchain: [stable] include: - os: ubuntu-latest - toolchain: "1.92.0" + toolchain: "1.96.0" variant: MSRV - os: ubuntu-latest toolchain: beta diff --git a/CHANGELOG.md b/CHANGELOG.md index cc29cd43b..e53fbd2e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +- Bump MSRV to 1.96.0 (#705) + ## [0.17.1] — 2026-01-30 – 2026-02-03 ### Fixes diff --git a/Cargo.toml b/Cargo.toml index 92080d26f..cbbd299a9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Diggory Hardy "] edition = "2024" license = "Apache-2.0" repository = "https://github.com/kas-gui/kas" -rust-version = "1.92.0" +rust-version = "1.96.0" [package] name = "kas"