Refactor some image traits a bit
- Use `Size<u32>` were applicable. - Rename `TextureStore` to `image::Storage`. - Rename `TextureStoreEntry` to `image::storage::Entry`. - Wire up `viewport_dimensions` to `iced_glow` for `Svg`.
This commit is contained in:
parent
5575e6ea08
commit
8ce8d374b1
20 changed files with 164 additions and 127 deletions
|
|
@ -296,7 +296,7 @@ impl backend::Text for Backend {
|
|||
|
||||
#[cfg(feature = "image_rs")]
|
||||
impl backend::Image for Backend {
|
||||
fn dimensions(&self, handle: &iced_native::image::Handle) -> (u32, u32) {
|
||||
fn dimensions(&self, handle: &iced_native::image::Handle) -> Size<u32> {
|
||||
self.image_pipeline.dimensions(handle)
|
||||
}
|
||||
}
|
||||
|
|
@ -306,7 +306,7 @@ impl backend::Svg for Backend {
|
|||
fn viewport_dimensions(
|
||||
&self,
|
||||
handle: &iced_native::svg::Handle,
|
||||
) -> (u32, u32) {
|
||||
) -> Size<u32> {
|
||||
self.image_pipeline.viewport_dimensions(handle)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ use crate::Transformation;
|
|||
use atlas::Atlas;
|
||||
|
||||
use iced_graphics::layer;
|
||||
use iced_native::Rectangle;
|
||||
use iced_native::{Rectangle, Size};
|
||||
|
||||
use std::cell::RefCell;
|
||||
use std::mem;
|
||||
|
||||
|
|
@ -262,7 +263,7 @@ impl Pipeline {
|
|||
}
|
||||
|
||||
#[cfg(feature = "image_rs")]
|
||||
pub fn dimensions(&self, handle: &image::Handle) -> (u32, u32) {
|
||||
pub fn dimensions(&self, handle: &image::Handle) -> Size<u32> {
|
||||
let mut cache = self.raster_cache.borrow_mut();
|
||||
let memory = cache.load(handle);
|
||||
|
||||
|
|
@ -270,7 +271,7 @@ impl Pipeline {
|
|||
}
|
||||
|
||||
#[cfg(feature = "svg")]
|
||||
pub fn viewport_dimensions(&self, handle: &svg::Handle) -> (u32, u32) {
|
||||
pub fn viewport_dimensions(&self, handle: &svg::Handle) -> Size<u32> {
|
||||
let mut cache = self.vector_cache.borrow_mut();
|
||||
let svg = cache.load(handle);
|
||||
|
||||
|
|
@ -515,15 +516,18 @@ fn add_instances(
|
|||
add_instance(image_position, image_size, allocation, instances);
|
||||
}
|
||||
atlas::Entry::Fragmented { fragments, size } => {
|
||||
let scaling_x = image_size[0] / size.0 as f32;
|
||||
let scaling_y = image_size[1] / size.1 as f32;
|
||||
let scaling_x = image_size[0] / size.width as f32;
|
||||
let scaling_y = image_size[1] / size.height as f32;
|
||||
|
||||
for fragment in fragments {
|
||||
let allocation = &fragment.allocation;
|
||||
|
||||
let [x, y] = image_position;
|
||||
let (fragment_x, fragment_y) = fragment.position;
|
||||
let (fragment_width, fragment_height) = allocation.size();
|
||||
let Size {
|
||||
width: fragment_width,
|
||||
height: fragment_height,
|
||||
} = allocation.size();
|
||||
|
||||
let position = [
|
||||
x + fragment_x as f32 * scaling_x,
|
||||
|
|
@ -549,7 +553,7 @@ fn add_instance(
|
|||
instances: &mut Vec<Instance>,
|
||||
) {
|
||||
let (x, y) = allocation.position();
|
||||
let (width, height) = allocation.size();
|
||||
let Size { width, height } = allocation.size();
|
||||
let layer = allocation.layer();
|
||||
|
||||
let instance = Instance {
|
||||
|
|
|
|||
|
|
@ -4,9 +4,6 @@ mod allocation;
|
|||
mod allocator;
|
||||
mod layer;
|
||||
|
||||
use iced_graphics::image::TextureStore;
|
||||
use std::num::NonZeroU32;
|
||||
|
||||
pub use allocation::Allocation;
|
||||
pub use entry::Entry;
|
||||
pub use layer::Layer;
|
||||
|
|
@ -15,6 +12,11 @@ use allocator::Allocator;
|
|||
|
||||
pub const SIZE: u32 = 2048;
|
||||
|
||||
use iced_graphics::image;
|
||||
use iced_graphics::Size;
|
||||
|
||||
use std::num::NonZeroU32;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Atlas {
|
||||
texture: wgpu::Texture,
|
||||
|
|
@ -112,7 +114,7 @@ impl Atlas {
|
|||
}
|
||||
|
||||
return Some(Entry::Fragmented {
|
||||
size: (width, height),
|
||||
size: Size::new(width, height),
|
||||
fragments,
|
||||
});
|
||||
}
|
||||
|
|
@ -192,7 +194,7 @@ impl Atlas {
|
|||
encoder: &mut wgpu::CommandEncoder,
|
||||
) {
|
||||
let (x, y) = allocation.position();
|
||||
let (width, height) = allocation.size();
|
||||
let Size { width, height } = allocation.size();
|
||||
let layer = allocation.layer();
|
||||
|
||||
let extent = wgpu::Extent3d {
|
||||
|
|
@ -297,7 +299,7 @@ impl Atlas {
|
|||
}
|
||||
}
|
||||
|
||||
impl TextureStore for Atlas {
|
||||
impl image::Storage for Atlas {
|
||||
type Entry = Entry;
|
||||
type State<'a> = (&'a wgpu::Device, &'a mut wgpu::CommandEncoder);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
use crate::image::atlas::{self, allocator};
|
||||
|
||||
use iced_graphics::Size;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Allocation {
|
||||
Partial {
|
||||
|
|
@ -19,10 +21,10 @@ impl Allocation {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn size(&self) -> (u32, u32) {
|
||||
pub fn size(&self) -> Size<u32> {
|
||||
match self {
|
||||
Allocation::Partial { region, .. } => region.size(),
|
||||
Allocation::Full { .. } => (atlas::SIZE, atlas::SIZE),
|
||||
Allocation::Full { .. } => Size::new(atlas::SIZE, atlas::SIZE),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,10 +46,10 @@ impl Region {
|
|||
(rectangle.min.x as u32, rectangle.min.y as u32)
|
||||
}
|
||||
|
||||
pub fn size(&self) -> (u32, u32) {
|
||||
pub fn size(&self) -> iced_graphics::Size<u32> {
|
||||
let size = self.allocation.rectangle.size();
|
||||
|
||||
(size.width as u32, size.height as u32)
|
||||
iced_graphics::Size::new(size.width as u32, size.height as u32)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +1,19 @@
|
|||
use crate::image::atlas;
|
||||
use iced_graphics::image::TextureStoreEntry;
|
||||
|
||||
use iced_graphics::image;
|
||||
use iced_graphics::Size;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Entry {
|
||||
Contiguous(atlas::Allocation),
|
||||
Fragmented {
|
||||
size: (u32, u32),
|
||||
size: Size<u32>,
|
||||
fragments: Vec<Fragment>,
|
||||
},
|
||||
}
|
||||
|
||||
impl TextureStoreEntry for Entry {
|
||||
fn size(&self) -> (u32, u32) {
|
||||
impl image::storage::Entry for Entry {
|
||||
fn size(&self) -> Size<u32> {
|
||||
match self {
|
||||
Entry::Contiguous(allocation) => allocation.size(),
|
||||
Entry::Fragmented { size, .. } => *size,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue