@@ -57,6 +57,10 @@ impl Raster<CPU> {
57
57
let RasterStorage :: Cpu ( cpu) = self . data else { unreachable ! ( ) } ;
58
58
cpu
59
59
}
60
+ pub fn is_empty ( & self ) -> bool {
61
+ let data = self . data ( ) ;
62
+ data. height == 0 || data. width == 0
63
+ }
60
64
}
61
65
impl Default for Raster < CPU > {
62
66
fn default ( ) -> Self {
@@ -93,6 +97,10 @@ impl Raster<GPU> {
93
97
let RasterStorage :: Gpu ( gpu) = & self . data else { unreachable ! ( ) } ;
94
98
gpu. clone ( )
95
99
}
100
+ pub fn is_empty ( & self ) -> bool {
101
+ let data = self . data ( ) ;
102
+ data. width ( ) == 0 || data. height ( ) == 0
103
+ }
96
104
}
97
105
#[ cfg( feature = "wgpu" ) ]
98
106
impl Deref for Raster < GPU > {
@@ -104,9 +112,23 @@ impl Deref for Raster<GPU> {
104
112
}
105
113
pub type RasterDataTable < Storage > = Instances < Raster < Storage > > ;
106
114
107
- impl < S : Storage > BoundingBox for RasterDataTable < S > {
115
+ // TODO: Make this not dupliated
116
+ impl BoundingBox for RasterDataTable < CPU > {
117
+ fn bounding_box ( & self , transform : DAffine2 , _include_stroke : bool ) -> Option < [ DVec2 ; 2 ] > {
118
+ self . instance_ref_iter ( )
119
+ . filter ( |instance| !instance. instance . is_empty ( ) ) // Eliminate empty images
120
+ . flat_map ( |instance| {
121
+ let transform = transform * * instance. transform ;
122
+ ( transform. matrix2 . determinant ( ) != 0. ) . then ( || ( transform * Quad :: from_box ( [ DVec2 :: ZERO , DVec2 :: ONE ] ) ) . bounding_box ( ) )
123
+ } )
124
+ . reduce ( Quad :: combine_bounds)
125
+ }
126
+ }
127
+
128
+ impl BoundingBox for RasterDataTable < GPU > {
108
129
fn bounding_box ( & self , transform : DAffine2 , _include_stroke : bool ) -> Option < [ DVec2 ; 2 ] > {
109
130
self . instance_ref_iter ( )
131
+ . filter ( |instance| !instance. instance . is_empty ( ) ) // Eliminate empty images
110
132
. flat_map ( |instance| {
111
133
let transform = transform * * instance. transform ;
112
134
( transform. matrix2 . determinant ( ) != 0. ) . then ( || ( transform * Quad :: from_box ( [ DVec2 :: ZERO , DVec2 :: ONE ] ) ) . bounding_box ( ) )
0 commit comments