11//! Demonstrates that both futures-signals and jonmo signals backends can be used together.
2- //!
3- //! This example shows two buttons side by side:
4- //! - Left button uses the deprecated futures-signals backend (existing code)
5- //! - Right button uses the new jonmo-based backend (code being migrated to)
6- //!
7- //! The UI root uses futures-signals, showing how users can incrementally migrate
8- //! from futures-signals to jonmo while keeping both working in tandem.
9- //!
10- //! Run with: `cargo run --example futures_signals_jonmo_compat --features futures_signals_ui`
112
123mod utils;
134use utils:: * ;
@@ -18,8 +9,8 @@ use bevy::{prelude::*, ui::Pressed};
189use haalka:: {
1910 futures_signals:: prelude:: * ,
2011 prelude:: {
21- Align as jAlign, Alignable as _, BuilderPassThrough , BuilderWrapper , Column as jColumn , Draggable , Dragged ,
22- El as jEl , Element as jElement, Hoverable , Hovered , LazyEntity , Pressable , SignalExt as _, signal,
12+ Align as jAlign, Alignable as _, BuilderPassThrough , BuilderWrapper , Draggable , El as jEl ,
13+ Element as jElement, Hoverable , Hovered , LazyEntity , Pressable , SignalExt as _, signal,
2314 } ,
2415} ;
2516
@@ -56,7 +47,6 @@ fn futures_signals_button() -> impl Element {
5647 node. height = Val :: Px ( 65. ) ;
5748 node. border = UiRect :: all ( Val :: Px ( 5.0 ) ) ;
5849 } )
59- . cursor ( CursorIcon :: System ( SystemCursorIcon :: Pointer ) )
6050 . align_content ( Align :: center ( ) )
6151 . border_color_signal (
6252 pressed_hovered
@@ -95,17 +85,18 @@ fn futures_signals_button() -> impl Element {
9585 font_size : 25.0 ,
9686 ..default ( )
9787 } )
88+ . text_shadow ( TextShadow :: default ( ) )
9889 . text_color ( TextColor ( Color :: srgb ( 0.9 , 0.9 , 0.9 ) ) )
9990 . text_signal (
10091 pressed_hovered
10192 . signal ( )
10293 . map ( |( pressed, hovered) | {
10394 if pressed {
104- "FS Press"
95+ "Press"
10596 } else if hovered {
106- "FS Hover"
97+ "Hover"
10798 } else {
108- "FuturesSignals "
99+ "futures-signals "
109100 }
110101 } )
111102 . map ( Text :: new) ,
@@ -119,29 +110,27 @@ fn jonmo_button() -> impl jElement {
119110 let pressed = signal:: from_entity ( lazy_entity. clone ( ) )
120111 . has_component :: < Pressed > ( )
121112 . dedupe ( ) ;
122- let dragged = jonmo:: signal:: from_entity ( lazy_entity. clone ( ) )
123- . has_component :: < Dragged > ( )
124- . dedupe ( ) ;
125- let hovered = jonmo:: signal:: from_entity ( lazy_entity. clone ( ) )
113+ let hovered = signal:: from_entity ( lazy_entity. clone ( ) )
126114 . has_component :: < Hovered > ( )
127115 . dedupe ( ) ;
128- let pressed_hovered = jonmo :: signal:: zip!( jonmo :: signal :: any! ( pressed, dragged ) , hovered) . dedupe ( ) ;
116+ let pressed_hovered = signal:: zip!( pressed, hovered) . dedupe ( ) ;
129117
130118 jEl :: < Node > :: new ( )
131119 . with_node ( |mut node| {
132120 node. width = Val :: Px ( 150.0 ) ;
133121 node. height = Val :: Px ( 65. ) ;
134122 node. border = UiRect :: all ( Val :: Px ( 5.0 ) ) ;
135123 } )
136- . insert ( ( Pickable :: default ( ) , Hoverable , Pressable , Draggable , BorderRadius :: MAX ) )
124+ . insert ( ( Pickable :: default ( ) , Hoverable , Pressable , Draggable ) )
137125 . align_content ( jAlign:: center ( ) )
126+ . border_radius ( BorderRadius :: MAX )
138127 . lazy_entity ( lazy_entity)
139128 . border_color_signal (
140129 pressed_hovered
141130 . clone ( )
142131 . map_in ( |( pressed, hovered) | {
143132 if pressed {
144- bevy:: color:: palettes:: basic:: BLUE . into ( )
133+ bevy:: color:: palettes:: basic:: RED . into ( )
145134 } else if hovered {
146135 Color :: WHITE
147136 } else {
@@ -169,19 +158,20 @@ fn jonmo_button() -> impl jElement {
169158 . child (
170159 jEl :: < Text > :: new ( )
171160 . text_font ( TextFont {
172- font_size : 25 .0,
161+ font_size : 33 .0,
173162 ..default ( )
174163 } )
164+ . text_shadow ( TextShadow :: default ( ) )
175165 . text_color ( TextColor ( Color :: srgb ( 0.9 , 0.9 , 0.9 ) ) )
176166 . text_signal (
177167 pressed_hovered
178168 . map_in ( |( pressed, hovered) | {
179169 if pressed {
180- "Jonmo Press"
170+ "Press"
181171 } else if hovered {
182- "Jonmo Hover"
172+ "Hover"
183173 } else {
184- "Jonmo "
174+ "jonmo "
185175 }
186176 } )
187177 . map_in ( Text :: new)
@@ -208,28 +198,11 @@ fn ui_root() -> impl Element {
208198 . with_node ( |mut node| {
209199 node. column_gap = Val :: Px ( 50. ) ;
210200 } )
211- . item (
212- Column :: < Node > :: new ( )
213- . with_node ( |mut node| {
214- node. row_gap = Val :: Px ( 10. ) ;
215- } )
216- . align ( Align :: center ( ) )
217- . item ( El :: < Text > :: new ( ) . text ( Text :: new ( "futures-signals\n (deprecated)" ) ) )
218- . item ( futures_signals_button ( ) ) ,
219- )
220- . item (
221- Column :: < Node > :: new ( )
222- . with_node ( |mut node| {
223- node. row_gap = Val :: Px ( 10. ) ;
224- } )
225- . align ( Align :: center ( ) )
226- . item ( El :: < Text > :: new ( ) . text ( Text :: new ( "jonmo\n (recommended)" ) ) )
227- . item ( El :: < Node > :: new ( ) . update_raw_el ( |raw_el| {
228- raw_el. on_spawn ( |world, entity| {
229- // use jonmo_compat::JonmoBW as _;
230- let _ = jonmo_button ( ) . into_builder ( ) . spawn_on_entity ( world, entity) ;
231- } )
232- } ) ) ,
233- ) ,
201+ . item ( futures_signals_button ( ) )
202+ . item ( El :: < Node > :: new ( ) . update_raw_el ( |raw_el| {
203+ raw_el. on_spawn ( |world, entity| {
204+ jonmo_button ( ) . into_builder ( ) . spawn_on_entity ( world, entity) . unwrap ( ) ;
205+ } )
206+ } ) ) ,
234207 )
235208}
0 commit comments