diff --git a/bin/app/Makefile b/bin/app/Makefile index 39384a843..d0e44e737 100644 --- a/bin/app/Makefile +++ b/bin/app/Makefile @@ -22,7 +22,7 @@ DEBUG_FEATURES = --features=enable-filelog,enable-plugins #DEV_FEATURES = --features=enable-filelog,enable-netdebug,emulate-android #DEV_FEATURES = --features=enable-filelog,enable-netdebug,enable-plugins -DEV_FEATURES = --features=schema-test-scroll-layer,enable-netdebug +DEV_FEATURES = --features=schema-app,enable-netdebug default: build-release ./darkfi-app diff --git a/bin/app/src/app/node.rs b/bin/app/src/app/node.rs index ce34566ff..aae7fbc53 100644 --- a/bin/app/src/app/node.rs +++ b/bin/app/src/app/node.rs @@ -110,6 +110,9 @@ pub fn create_button(name: &str) -> SceneNode { let prop = Property::new("priority", PropertyType::Uint32, PropertySubType::Null); node.add_property(prop).unwrap(); + let prop = Property::new("debug", PropertyType::Bool, PropertySubType::Null); + node.add_property(prop).unwrap(); + node.add_signal("click", "Button clicked event", vec![]).unwrap(); node diff --git a/bin/app/src/app/schema/chat.rs b/bin/app/src/app/schema/chat.rs index b9baf0637..73d7913e8 100644 --- a/bin/app/src/app/schema/chat.rs +++ b/bin/app/src/app/schema/chat.rs @@ -343,7 +343,7 @@ pub async fn make( }); layer_node.push_task(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; layer_node.link(node); // Create shortcut to go back as well @@ -982,7 +982,7 @@ pub async fn make( }); layer_node.push_task(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; layer_node.link(node); // Create shortcut to send as well @@ -1086,7 +1086,7 @@ pub async fn make( }); layer_node.push_task(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; layer_node.link(node); // Commands help hint @@ -1133,7 +1133,7 @@ pub async fn make( }); layer_node.push_task(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; cmd_layer_node.link(node); // Create the actionbar bg diff --git a/bin/app/src/app/schema/menu/contact.rs b/bin/app/src/app/schema/menu/contact.rs index 8cbcb0777..11882cbd8 100644 --- a/bin/app/src/app/schema/menu/contact.rs +++ b/bin/app/src/app/schema/menu/contact.rs @@ -203,7 +203,7 @@ pub async fn make( }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; layer_node.link(node); let node = create_singleline_edit("nick_edit"); @@ -614,7 +614,7 @@ pub async fn make( }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; editlayer_node.link(node); // Create the done button @@ -641,7 +641,7 @@ pub async fn make( }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; editlayer_node.link(node); layer_node diff --git a/bin/app/src/app/schema/menu/mod.rs b/bin/app/src/app/schema/menu/mod.rs index 8dd74dc6a..1cefd76c0 100644 --- a/bin/app/src/app/schema/menu/mod.rs +++ b/bin/app/src/app/schema/menu/mod.rs @@ -256,6 +256,9 @@ pub async fn make(app: &App, content: SceneNodePtr, i18n_fish: &I18nBabelFish) { prop.set_expr(atom, Role::App, 1, code).unwrap(); prop.set_f32(atom, Role::App, 2, 100.).unwrap(); prop.set_f32(atom, Role::App, 3, 100.).unwrap(); + // Uncomment this to see the button outline + //node.set_property_bool(atom, Role::App, "debug", true).unwrap(); + node.set_property_u32(atom, Role::App, "z_index", 1).unwrap(); let (slot, recvr) = Slot::new("write_clicked"); node.register("click", slot).unwrap(); @@ -271,7 +274,7 @@ pub async fn make(app: &App, content: SceneNodePtr, i18n_fish: &I18nBabelFish) { }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; mainlayer_node.link(node); // Make buttons for cancel and done @@ -483,7 +486,7 @@ pub async fn make(app: &App, content: SceneNodePtr, i18n_fish: &I18nBabelFish) { }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; editlayer_node.link(node); // Create the done button @@ -512,6 +515,6 @@ pub async fn make(app: &App, content: SceneNodePtr, i18n_fish: &I18nBabelFish) { }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; editlayer_node.link(node); } diff --git a/bin/app/src/app/schema/mod.rs b/bin/app/src/app/schema/mod.rs index 86a07740e..fde71a91d 100644 --- a/bin/app/src/app/schema/mod.rs +++ b/bin/app/src/app/schema/mod.rs @@ -473,7 +473,7 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { }); app.tasks.lock().unwrap().push(reconnect_task); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; netlayer_node.link(node); // Navbar Settings Button @@ -563,7 +563,7 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; settingslayer_node.link(node); */ diff --git a/bin/app/src/app/schema/settings.rs b/bin/app/src/app/schema/settings.rs index c95ed5f1d..e60072356 100644 --- a/bin/app/src/app/schema/settings.rs +++ b/bin/app/src/app/schema/settings.rs @@ -259,7 +259,7 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; layer_node.link(node.clone()); // Label: "SETTINGS" title @@ -1358,7 +1358,7 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { }); app.tasks.lock().unwrap().push(listen_click); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; setting_layer_node.link(node.clone()); } } @@ -1404,7 +1404,7 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { prop.set_f32(atom, Role::App, 3, SETTING_LABEL_LINESPACE).unwrap(); node.set_property_u32(atom, Role::App, "z_index", 3).unwrap(); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; setting_layer_node.link(node.clone()); // Handle confirm button click @@ -1457,7 +1457,7 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { prop.set_f32(atom, Role::App, 3, SETTING_LABEL_LINESPACE).unwrap(); node.set_property_u32(atom, Role::App, "z_index", 3).unwrap(); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; setting_layer_node.link(node.clone()); // Handle reset button click diff --git a/bin/app/src/app/schema/test.rs b/bin/app/src/app/schema/test.rs index 1ea10de29..33227c3f6 100644 --- a/bin/app/src/app/schema/test.rs +++ b/bin/app/src/app/schema/test.rs @@ -177,7 +177,7 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) { //let slot_click = Slot { name: "button_clicked".to_string(), notify: sender }; //node.register("click", slot_click).unwrap(); - let node = node.setup(Button::new).await; + let node = node.setup(|me| Button::new(me, app.renderer.clone())).await; layer_node.link(node); // Create another mesh diff --git a/bin/app/src/ui/button.rs b/bin/app/src/ui/button.rs index e9eaa6026..3b298f979 100644 --- a/bin/app/src/ui/button.rs +++ b/bin/app/src/ui/button.rs @@ -18,6 +18,7 @@ use async_trait::async_trait; use miniquad::{MouseButton, TouchPhase}; +use rand::{rngs::OsRng, Rng}; use std::sync::{ atomic::{AtomicBool, Ordering}, Arc, @@ -25,7 +26,8 @@ use std::sync::{ use tracing::instrument; use crate::{ - gfx::{Point, Rectangle}, + gfx::{gfxtag, DrawCall, DrawInstruction, DrawMesh, Point, Rectangle, RenderApi, Renderer}, + mesh::MeshBuilder, prop::{PropertyAtomicGuard, PropertyBool, PropertyRect, PropertyUint32, Role}, scene::{Pimpl, SceneNodeWeak}, }; @@ -39,26 +41,36 @@ pub type ButtonPtr = Arc