@@ -4,9 +4,41 @@ use freya_engine::prelude::{
44} ;
55use freya_native_core:: NodeId ;
66use torin:: torin:: Torin ;
7- use winit:: window:: Window ;
7+ use winit:: {
8+ event_loop:: EventLoopProxy ,
9+ window:: Window ,
10+ } ;
11+
12+ use crate :: {
13+ dom:: FreyaDOM ,
14+ prelude:: {
15+ EventMessage ,
16+ PlatformEvent ,
17+ } ,
18+ } ;
19+
20+ #[ derive( Clone ) ]
21+ pub struct PluginHandle {
22+ pub proxy : EventLoopProxy < EventMessage > ,
23+ }
824
9- use crate :: dom:: FreyaDOM ;
25+ impl PluginHandle {
26+ pub fn new ( proxy : EventLoopProxy < EventMessage > ) -> Self {
27+ Self { proxy }
28+ }
29+
30+ /// Emit a [PlatformEvent]. Useful to simulate certain events.
31+ pub fn send_platform_event ( & self , event : PlatformEvent ) {
32+ self . proxy
33+ . send_event ( EventMessage :: PlatformEvent ( event) )
34+ . ok ( ) ;
35+ }
36+
37+ /// Emit a [EventMessage].
38+ pub fn send_event_loop_event ( & self , event : EventMessage ) {
39+ self . proxy . send_event ( event) . ok ( ) ;
40+ }
41+ }
1042
1143/// Manages all loaded plugins.
1244#[ derive( Default ) ]
@@ -19,9 +51,9 @@ impl PluginsManager {
1951 self . plugins . push ( Box :: new ( plugin) )
2052 }
2153
22- pub fn send ( & mut self , event : PluginEvent ) {
54+ pub fn send ( & mut self , event : PluginEvent , handle : PluginHandle ) {
2355 for plugin in & mut self . plugins {
24- plugin. on_event ( & event)
56+ plugin. on_event ( & event, handle . clone ( ) )
2557 }
2658 }
2759}
@@ -59,5 +91,5 @@ pub enum PluginEvent<'a> {
5991/// Skeleton for Freya plugins.
6092pub trait FreyaPlugin {
6193 /// React on events emitted by Freya.
62- fn on_event ( & mut self , event : & PluginEvent ) ;
94+ fn on_event ( & mut self , event : & PluginEvent , handle : PluginHandle ) ;
6395}
0 commit comments