Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
K
Kayak UI 0.11
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Microhacks
Bevy Forks
Kayak UI 0.11
Commits
f03ab3da
Commit
f03ab3da
authored
3 years ago
by
MrGVSV
Browse files
Options
Downloads
Patches
Plain Diff
OnEvent now takes KayakContextRef
parent
25dbfc81
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
kayak_core/src/event_dispatcher.rs
+3
-5
3 additions, 5 deletions
kayak_core/src/event_dispatcher.rs
kayak_core/src/on_event.rs
+4
-4
4 additions, 4 deletions
kayak_core/src/on_event.rs
kayak_core/src/widget.rs
+4
-4
4 additions, 4 deletions
kayak_core/src/widget.rs
with
11 additions
and
13 deletions
kayak_core/src/event_dispatcher.rs
+
3
−
5
View file @
f03ab3da
...
@@ -4,10 +4,7 @@ use crate::cursor::CursorEvent;
...
@@ -4,10 +4,7 @@ use crate::cursor::CursorEvent;
use
crate
::
layout_cache
::
Rect
;
use
crate
::
layout_cache
::
Rect
;
use
crate
::
render_command
::
RenderCommand
;
use
crate
::
render_command
::
RenderCommand
;
use
crate
::
widget_manager
::
WidgetManager
;
use
crate
::
widget_manager
::
WidgetManager
;
use
crate
::{
use
crate
::{
BoxedWidget
,
Event
,
EventType
,
Index
,
InputEvent
,
InputEventCategory
,
KayakContext
,
KeyCode
,
KeyboardEvent
,
KeyboardModifiers
,
PointerEvents
,
KayakContextRef
};
BoxedWidget
,
Event
,
EventType
,
Index
,
InputEvent
,
InputEventCategory
,
KayakContext
,
KeyCode
,
KeyboardEvent
,
KeyboardModifiers
,
PointerEvents
,
};
use
std
::
collections
::{
HashMap
,
HashSet
};
use
std
::
collections
::{
HashMap
,
HashSet
};
type
EventMap
=
HashMap
<
Index
,
HashSet
<
EventType
>>
;
type
EventMap
=
HashMap
<
Index
,
HashSet
<
EventType
>>
;
...
@@ -183,7 +180,8 @@ impl EventDispatcher {
...
@@ -183,7 +180,8 @@ impl EventDispatcher {
// --- Call Event --- //
// --- Call Event --- //
let
mut
target_widget
=
context
.widget_manager
.take
(
index
);
let
mut
target_widget
=
context
.widget_manager
.take
(
index
);
target_widget
.on_event
(
context
,
&
mut
node_event
);
let
mut
ctx
=
KayakContextRef
::
new
(
context
,
Some
(
index
));
target_widget
.on_event
(
&
mut
ctx
,
&
mut
node_event
);
context
.widget_manager
.repossess
(
target_widget
);
context
.widget_manager
.repossess
(
target_widget
);
event
.default_prevented
|
=
node_event
.default_prevented
;
event
.default_prevented
|
=
node_event
.default_prevented
;
...
...
This diff is collapsed.
Click to expand it.
kayak_core/src/on_event.rs
+
4
−
4
View file @
f03ab3da
use
crate
::{
Event
,
KayakContext
};
use
crate
::{
Event
,
KayakContext
Ref
};
use
std
::
fmt
::{
Debug
,
Formatter
};
use
std
::
fmt
::{
Debug
,
Formatter
};
use
std
::
sync
::{
Arc
,
RwLock
};
use
std
::
sync
::{
Arc
,
RwLock
};
/// A container for a function that handles events
/// A container for a function that handles events
#[derive(Clone)]
#[derive(Clone)]
pub
struct
OnEvent
(
Arc
<
RwLock
<
dyn
FnMut
(
&
mut
KayakContext
,
&
mut
Event
)
+
Send
+
Sync
+
'static
>>
);
pub
struct
OnEvent
(
Arc
<
RwLock
<
dyn
FnMut
(
&
mut
KayakContext
Ref
,
&
mut
Event
)
+
Send
+
Sync
+
'static
>>
);
impl
OnEvent
{
impl
OnEvent
{
/// Create a new event handler
/// Create a new event handler
...
@@ -12,14 +12,14 @@ impl OnEvent {
...
@@ -12,14 +12,14 @@ impl OnEvent {
/// The handler should be a closure that takes the following arguments:
/// The handler should be a closure that takes the following arguments:
/// 1. The current context
/// 1. The current context
/// 2. The event
/// 2. The event
pub
fn
new
<
F
:
FnMut
(
&
mut
KayakContext
,
&
mut
Event
)
+
Send
+
Sync
+
'static
>
(
f
:
F
)
->
OnEvent
{
pub
fn
new
<
F
:
FnMut
(
&
mut
KayakContext
Ref
,
&
mut
Event
)
+
Send
+
Sync
+
'static
>
(
f
:
F
)
->
OnEvent
{
OnEvent
(
Arc
::
new
(
RwLock
::
new
(
f
)))
OnEvent
(
Arc
::
new
(
RwLock
::
new
(
f
)))
}
}
/// Call the event handler
/// Call the event handler
///
///
/// Returns true if the handler was successfully invoked.
/// Returns true if the handler was successfully invoked.
pub
fn
try_call
(
&
self
,
context
:
&
mut
KayakContext
,
event
:
&
mut
Event
)
->
bool
{
pub
fn
try_call
(
&
self
,
context
:
&
mut
KayakContext
Ref
,
event
:
&
mut
Event
)
->
bool
{
if
let
Ok
(
mut
on_event
)
=
self
.0
.write
()
{
if
let
Ok
(
mut
on_event
)
=
self
.0
.write
()
{
on_event
(
context
,
event
);
on_event
(
context
,
event
);
true
true
...
...
This diff is collapsed.
Click to expand it.
kayak_core/src/widget.rs
+
4
−
4
View file @
f03ab3da
...
@@ -2,7 +2,7 @@ use as_any::AsAny;
...
@@ -2,7 +2,7 @@ use as_any::AsAny;
use
std
::
any
::
Any
;
use
std
::
any
::
Any
;
use
crate
::{
use
crate
::{
context
::
KayakContext
,
context_ref
::
KayakContextRef
,
styles
::
Style
,
Children
,
Event
,
Index
,
context_ref
::
KayakContextRef
,
styles
::
Style
,
Children
,
Event
,
Index
,
OnEvent
,
OnEvent
,
};
};
...
@@ -26,7 +26,7 @@ pub trait BaseWidget: SealedWidget + std::fmt::Debug + Send + Sync {
...
@@ -26,7 +26,7 @@ pub trait BaseWidget: SealedWidget + std::fmt::Debug + Send + Sync {
fn
get_props_mut
(
&
mut
self
)
->
&
mut
dyn
WidgetProps
;
fn
get_props_mut
(
&
mut
self
)
->
&
mut
dyn
WidgetProps
;
fn
render
(
&
mut
self
,
context
:
&
mut
KayakContextRef
);
fn
render
(
&
mut
self
,
context
:
&
mut
KayakContextRef
);
fn
get_name
(
&
self
)
->
&
'static
str
;
fn
get_name
(
&
self
)
->
&
'static
str
;
fn
on_event
(
&
mut
self
,
context
:
&
mut
KayakContext
,
event
:
&
mut
Event
);
fn
on_event
(
&
mut
self
,
context
:
&
mut
KayakContext
Ref
,
event
:
&
mut
Event
);
}
}
pub
trait
Widget
:
std
::
fmt
::
Debug
+
Clone
+
Default
+
PartialEq
+
AsAny
+
Send
+
Sync
{
pub
trait
Widget
:
std
::
fmt
::
Debug
+
Clone
+
Default
+
PartialEq
+
AsAny
+
Send
+
Sync
{
...
@@ -65,7 +65,7 @@ pub trait Widget: std::fmt::Debug + Clone + Default + PartialEq + AsAny + Send +
...
@@ -65,7 +65,7 @@ pub trait Widget: std::fmt::Debug + Clone + Default + PartialEq + AsAny + Send +
}
}
/// Send an event to this widget
/// Send an event to this widget
fn
on_event
(
&
mut
self
,
context
:
&
mut
KayakContext
,
event
:
&
mut
Event
)
{
fn
on_event
(
&
mut
self
,
context
:
&
mut
KayakContext
Ref
,
event
:
&
mut
Event
)
{
if
let
Some
(
on_event
)
=
self
.get_props
()
.get_on_event
()
{
if
let
Some
(
on_event
)
=
self
.get_props
()
.get_on_event
()
{
on_event
.try_call
(
context
,
event
);
on_event
.try_call
(
context
,
event
);
}
}
...
@@ -117,7 +117,7 @@ where
...
@@ -117,7 +117,7 @@ where
Widget
::
get_name
(
self
)
Widget
::
get_name
(
self
)
}
}
fn
on_event
(
&
mut
self
,
context
:
&
mut
KayakContext
,
event
:
&
mut
Event
)
{
fn
on_event
(
&
mut
self
,
context
:
&
mut
KayakContext
Ref
,
event
:
&
mut
Event
)
{
Widget
::
on_event
(
self
,
context
,
event
);
Widget
::
on_event
(
self
,
context
,
event
);
}
}
}
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment