Browse Source

app: add schema test-edit

darkfi 1 week ago
parent
commit
c0089d658c

+ 1 - 0
bin/app/Cargo.toml

@@ -84,6 +84,7 @@ enable-plugins = ["enable-plugin-darkirc", "enable-plugin-fud", "enable-plugin-d
 schema-app = []
 # Dev schema for testing
 schema-test = []
+schema-test-edit = []
 schema-test-scroll-layer = []
 
 [patch.crates-io]

+ 1 - 1
bin/app/Makefile

@@ -29,7 +29,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-app,enable-netdebug,enable-plugin-darkirc
+DEV_FEATURES = --features=schema-test-edit,enable-netdebug
 
 default: build-release
 	./darkfi-app

+ 3 - 0
bin/app/src/app/mod.rs

@@ -123,6 +123,9 @@ impl App {
         #[cfg(feature = "schema-test")]
         schema::test::make(&self, window.clone(), &i18n_fish).await;
 
+        #[cfg(feature = "schema-test-edit")]
+        schema::test_edit::make(&self, window.clone(), &i18n_fish).await;
+
         #[cfg(feature = "schema-test-scroll-layer")]
         schema::test_scroll_layer::make(&self, window.clone(), &i18n_fish).await;
 

+ 1 - 0
bin/app/src/app/schema/mod.rs

@@ -41,6 +41,7 @@ pub mod menu;
 use menu::{channel::Channel, contact::Contact};
 //mod settings;
 pub mod test;
+pub mod test_edit;
 pub mod test_scroll_layer;
 mod wallet;
 

+ 165 - 0
bin/app/src/app/schema/test_edit.rs

@@ -0,0 +1,165 @@
+/* This file is part of DarkFi (https://dark.fi)
+ *
+ * Copyright (C) 2020-2026 Dyne.org foundation
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#![allow(unused_imports, unused_variables, dead_code)]
+
+use crate::{
+    app::{
+        node::{
+            create_chatview, create_layer, create_multiline_edit, create_text,
+            create_vector_art, create_video,
+        },
+        App,
+    },
+    expr::{self, Compiler},
+    mesh::COLOR_PURPLE,
+    prop::{PropertyAtomicGuard, PropertyFloat32, PropertyStr, Role},
+    scene::SceneNodePtr,
+    ui::{BaseEdit, BaseEditType, ChatView, Layer, Text, VectorArt, VectorShape, Video},
+    util::i18n::I18nBabelFish,
+};
+
+#[allow(dead_code)]
+pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) {
+    let atom = &mut PropertyAtomicGuard::none();
+
+    let window_scale = PropertyFloat32::wrap(
+        &app.sg_root.lookup_node("/window").unwrap(),
+        Role::Internal,
+        "scale",
+        0,
+    )
+    .unwrap();
+
+    let renderer = &app.renderer;
+    let ex = &app.ex;
+    let cc = Compiler::new();
+
+    // Create a layer called view
+    let layer_node = create_layer("view");
+    let prop = layer_node.get_property("rect").unwrap();
+    prop.set_f32(atom, Role::App, 0, 0.).unwrap();
+    prop.set_f32(atom, Role::App, 1, 0.).unwrap();
+    prop.set_expr(atom, Role::App, 2, expr::load_var("w")).unwrap();
+    prop.set_expr(atom, Role::App, 3, expr::load_var("h")).unwrap();
+    layer_node.set_property_bool(atom, Role::App, "is_visible", true).unwrap();
+    let layer_node = layer_node.setup(|me| Layer::new(me, app.renderer.clone())).await;
+    window.link(layer_node.clone());
+
+    // Create a bg mesh
+    let node = create_vector_art("bg");
+    let prop = node.get_property("rect").unwrap();
+    prop.set_f32(atom, Role::App, 0, 0.).unwrap();
+    prop.set_f32(atom, Role::App, 1, 0.).unwrap();
+    prop.set_expr(atom, Role::App, 2, expr::load_var("w")).unwrap();
+    prop.set_expr(atom, Role::App, 3, expr::load_var("h")).unwrap();
+    node.set_property_u32(atom, Role::App, "z_index", 0).unwrap();
+
+    let mut shape = VectorShape::new();
+    shape.add_filled_box(
+        expr::const_f32(0.),
+        expr::const_f32(0.),
+        expr::load_var("w"),
+        expr::load_var("h"),
+        [0., 0., 0., 1.],
+    );
+    let node = node.setup(|me| VectorArt::new(me, shape, app.renderer.clone())).await;
+    layer_node.link(node);
+
+    // Text edit
+    let node = create_multiline_edit("editz");
+    node.set_property_bool(atom, Role::App, "is_active", true).unwrap();
+    node.set_property_bool(atom, Role::App, "is_focused", false).unwrap();
+
+    let prop = node.get_property("height_range").unwrap();
+    prop.set_f32(atom, Role::App, 0, 160.).unwrap();
+    prop.set_f32(atom, Role::App, 1, 500.).unwrap();
+
+    let prop = node.get_property("rect").unwrap();
+    prop.set_f32(atom, Role::App, 0, 100.).unwrap();
+    prop.set_f32(atom, Role::App, 1, 100.).unwrap();
+    let code = cc.compile("parent_w - 100").unwrap();
+    prop.set_expr(atom, Role::App, 2, code).unwrap();
+    prop.set_f32(atom, Role::App, 3, 140.).unwrap();
+
+    let prop = node.get_property("padding").unwrap();
+    prop.set_f32(atom, Role::App, 0, 40. * 0.4).unwrap();
+    prop.set_f32(atom, Role::App, 1, 0.).unwrap();
+    prop.set_f32(atom, Role::App, 2, 40. / 2.).unwrap();
+    prop.set_f32(atom, Role::App, 3, 0.).unwrap();
+
+    node.set_property_f32(atom, Role::App, "baseline", 40.).unwrap();
+    node.set_property_f32(atom, Role::App, "font_size", 50.).unwrap();
+    //node.set_property_str(atom, Role::App, "text", "hello king!😁🍆jelly 🍆1234").unwrap();
+    let prop = node.get_property("text_color").unwrap();
+    prop.set_f32(atom, Role::App, 0, 1.).unwrap();
+    prop.set_f32(atom, Role::App, 1, 1.).unwrap();
+    prop.set_f32(atom, Role::App, 2, 1.).unwrap();
+    prop.set_f32(atom, Role::App, 3, 1.).unwrap();
+    let prop = node.get_property("text_hi_color").unwrap();
+    prop.set_f32(atom, Role::App, 0, 0.44).unwrap();
+    prop.set_f32(atom, Role::App, 1, 0.96).unwrap();
+    prop.set_f32(atom, Role::App, 2, 1.).unwrap();
+    prop.set_f32(atom, Role::App, 3, 1.).unwrap();
+    let prop = node.get_property("text_cmd_color").unwrap();
+    prop.set_f32(atom, Role::App, 0, 0.64).unwrap();
+    prop.set_f32(atom, Role::App, 1, 1.).unwrap();
+    prop.set_f32(atom, Role::App, 2, 0.83).unwrap();
+    prop.set_f32(atom, Role::App, 3, 1.).unwrap();
+    let prop = node.get_property("cursor_color").unwrap();
+    prop.set_f32(atom, Role::App, 0, 0.816).unwrap();
+    prop.set_f32(atom, Role::App, 1, 0.627).unwrap();
+    prop.set_f32(atom, Role::App, 2, 1.).unwrap();
+    prop.set_f32(atom, Role::App, 3, 1.).unwrap();
+    node.set_property_f32(atom, Role::App, "cursor_ascent", 50.).unwrap();
+    node.set_property_f32(atom, Role::App, "cursor_descent", 20.).unwrap();
+    node.set_property_f32(atom, Role::App, "select_ascent", 50.).unwrap();
+    node.set_property_f32(atom, Role::App, "select_descent", 20.).unwrap();
+    node.set_property_f32(atom, Role::App, "handle_descent", 10.).unwrap();
+    node.set_property_f32(atom, Role::App, "action_padding", 32.).unwrap();
+    node.set_property_f32(atom, Role::App, "action_spacing", 8.).unwrap();
+    let prop = node.get_property("hi_bg_color").unwrap();
+    prop.set_f32(atom, Role::App, 0, 0.).unwrap();
+    prop.set_f32(atom, Role::App, 1, 0.27).unwrap();
+    prop.set_f32(atom, Role::App, 2, 0.22).unwrap();
+    prop.set_f32(atom, Role::App, 3, 1.).unwrap();
+    let prop = node.get_property("cmd_bg_color").unwrap();
+    prop.set_f32(atom, Role::App, 0, 0.).unwrap();
+    prop.set_f32(atom, Role::App, 1, 0.30).unwrap();
+    prop.set_f32(atom, Role::App, 2, 0.25).unwrap();
+    prop.set_f32(atom, Role::App, 3, 1.).unwrap();
+    node.set_property_u32(atom, Role::App, "z_index", 6).unwrap();
+    node.set_property_u32(atom, Role::App, "priority", 3).unwrap();
+
+    let editz_text = PropertyStr::wrap(&node, Role::App, "text", 0).unwrap();
+    let editz_select_text = node.get_property("select_text").unwrap();
+
+    let node = node
+        .setup(|me| {
+            BaseEdit::new(
+                me,
+                window_scale.clone(),
+                renderer.clone(),
+                BaseEditType::MultiLine,
+                ex.clone(),
+            )
+        })
+        .await;
+    let chatedit_node = node.clone();
+    layer_node.link(node);
+}

+ 1 - 1
bin/app/src/ui/edit/mod.rs

@@ -93,7 +93,7 @@ const ENABLE_DEBUG: bool = true;
 macro_rules! ed {
     ($($arg:tt)*) => {
         if ENABLE_DEBUG {
-            debug!(target: "ui::edit", $($arg)*);
+            d!($($arg)*);
         }
     };
 }