core: Implement hit_test_shape for MorphShape
This commit is contained in:
parent
4d26ebe9b4
commit
fe3bf5cb59
|
@ -61,7 +61,7 @@ impl<'gc> TDisplayObject<'gc> for MorphShape<'gc> {
|
||||||
if let Some(frame) = self.0.read().static_data.frames.get(&self.ratio()) {
|
if let Some(frame) = self.0.read().static_data.frames.get(&self.ratio()) {
|
||||||
context
|
context
|
||||||
.renderer
|
.renderer
|
||||||
.render_shape(frame.shape, context.transform_stack.transform());
|
.render_shape(frame.shape_handle, context.transform_stack.transform());
|
||||||
} else {
|
} else {
|
||||||
log::warn!("Missing ratio for morph shape");
|
log::warn!("Missing ratio for morph shape");
|
||||||
}
|
}
|
||||||
|
@ -77,6 +77,24 @@ impl<'gc> TDisplayObject<'gc> for MorphShape<'gc> {
|
||||||
BoundingBox::default()
|
BoundingBox::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn hit_test_shape(
|
||||||
|
&self,
|
||||||
|
_context: &mut UpdateContext<'_, 'gc, '_>,
|
||||||
|
point: (Twips, Twips),
|
||||||
|
) -> bool {
|
||||||
|
if self.world_bounds().contains(point) {
|
||||||
|
if let Some(frame) = self.0.read().static_data.frames.get(&self.ratio()) {
|
||||||
|
let local_matrix = self.global_to_local_matrix();
|
||||||
|
let point = local_matrix * point;
|
||||||
|
return crate::shape_utils::shape_hit_test(&frame.shape, point, &local_matrix);
|
||||||
|
} else {
|
||||||
|
log::warn!("Missing ratio for morph shape");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe impl<'gc> gc_arena::Collect for MorphShapeData<'gc> {
|
unsafe impl<'gc> gc_arena::Collect for MorphShapeData<'gc> {
|
||||||
|
@ -89,7 +107,8 @@ unsafe impl<'gc> gc_arena::Collect for MorphShapeData<'gc> {
|
||||||
|
|
||||||
/// A precalculated intermediate frame for a morph shape.
|
/// A precalculated intermediate frame for a morph shape.
|
||||||
struct Frame {
|
struct Frame {
|
||||||
shape: ShapeHandle,
|
shape_handle: ShapeHandle,
|
||||||
|
shape: swf::Shape,
|
||||||
bounds: BoundingBox,
|
bounds: BoundingBox,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -248,7 +267,8 @@ impl MorphShapeStatic {
|
||||||
};
|
};
|
||||||
|
|
||||||
let frame = Frame {
|
let frame = Frame {
|
||||||
shape: renderer.register_shape((&shape).into()),
|
shape_handle: renderer.register_shape((&shape).into()),
|
||||||
|
shape,
|
||||||
bounds: bounds.into(),
|
bounds: bounds.into(),
|
||||||
};
|
};
|
||||||
self.frames.insert(ratio, frame);
|
self.frames.insert(ratio, frame);
|
||||||
|
|
Loading…
Reference in New Issue