Quellcode durchsuchen

wallet: draw a rather attractive looking box with a lush gradient

rsx vor 2 Jahren
Ursprung
Commit
5777c0ffe6
3 geänderte Dateien mit 50 neuen und 6 gelöschten Zeilen
  1. 42 0
      bin/darkwallet/gui/__init__.py
  2. 2 1
      bin/darkwallet/gui/gfx.py
  3. 6 5
      bin/darkwallet/src/gfx.rs

+ 42 - 0
bin/darkwallet/gui/__init__.py

@@ -36,10 +36,52 @@ class App(EventLoop):
             settings.ui_scale *= 0.99
             print(settings.ui_scale)
 
+def draw_box():
+    from pydrk import SceneNodeType, PropertyType, vertex, face
+
+    mesh_id = api.add_node("box", SceneNodeType.RENDER_MESH)
+    api.add_property(mesh_id, "verts", PropertyType.BUFFER)
+    api.add_property(mesh_id, "faces", PropertyType.BUFFER)
+
+    # Lets add a poly - must be counterclockwise
+    x, y = 0.25, 0.25
+    w, h = 0.5, 0.5
+    vert1 = vertex(x,     y,     1, 1, 1, 1, 0, 0)
+    vert2 = vertex(x + w, y,     1, 1, 1, 1, 1, 0)
+    vert3 = vertex(x,     y + h, 1, 1, 1, 1, 0, 1)
+    vert4 = vertex(x + w, y + h, 1, 1, 1, 1, 1, 1)
+    api.set_property_buffer(mesh_id, "verts", vert1 + vert2 + vert3 + vert4)
+    api.set_property_buffer(mesh_id, "faces", face(0, 2, 1) + face(1, 2, 3))
+
+    link_node(mesh_id, "/window/chatbox_layer/outline")
+
+    # Second mesh
+    w = get_property("/window/chatbox_layer", "rect_w")
+    h = get_property("/window/chatbox_layer", "rect_h")
+    # in pixels
+    border_size = 5
+    bx, by = 5/w, 5/h
+
+    mesh_id = api.add_node("inner_box", SceneNodeType.RENDER_MESH)
+    api.add_property(mesh_id, "verts", PropertyType.BUFFER)
+    api.add_property(mesh_id, "faces", PropertyType.BUFFER)
+
+    x, y = 0.25 + bx, 0.25 + by
+    w, h = 0.50 - 2*bx, 0.50 - 2*by
+    vert1 = vertex(x,     y,     0, 0, 0, 1, 0, 0)
+    vert2 = vertex(x + w, y,     0, 0, 0, 1, 1, 0)
+    vert3 = vertex(x,     y + h, 0, 0, 0, 1, 0, 1)
+    vert4 = vertex(x + w, y + h, 0.3, 0.3, 0.3, 1, 1, 1)
+    api.set_property_buffer(mesh_id, "verts", vert1 + vert2 + vert3 + vert4)
+    api.set_property_buffer(mesh_id, "faces", face(0, 2, 1) + face(1, 2, 3))
+
+    link_node(mesh_id, "/window/chatbox_layer/outline")
+
 def main():
     garbage_collect()
 
     app = App()
+    draw_box()
     print_tree()
     app.run()
 

+ 2 - 1
bin/darkwallet/gui/gfx.py

@@ -40,6 +40,7 @@ class Layer:
         obj_id = api.add_node(name, SceneNodeType.RENDER_OBJECT)
         add_property_f32(obj_id, "x")
         add_property_f32(obj_id, "y")
-        add_property_f32(obj_id, "scale", 1.0)
+        add_property_f32(obj_id, "scale_x", 1.0)
+        add_property_f32(obj_id, "scale_y", 1.0)
         link_node(obj_id, self.id)
 

+ 6 - 5
bin/darkwallet/src/gfx.rs

@@ -394,11 +394,12 @@ impl Stage {
     }
 }
 
-fn get_obj_props(obj: &SceneNode) -> Result<(f32, f32, f32)> {
+fn get_obj_props(obj: &SceneNode) -> Result<(f32, f32, f32, f32)> {
     let x = obj.get_property_f32("x")?;
     let y = obj.get_property_f32("y")?;
-    let scale = obj.get_property_f32("scale")?;
-    Ok((x, y, scale))
+    let scale_x = obj.get_property_f32("scale_x")?;
+    let scale_y = obj.get_property_f32("scale_y")?;
+    Ok((x, y, scale_x, scale_y))
 }
 
 fn get_text_props(render_text: &SceneNode) -> Result<(String, f32, [f32; 4])> {
@@ -528,13 +529,13 @@ impl EventHandler for Stage {
             self.ctx.apply_scissor_rect(rect_x as i32, rect_y as i32, rect_w as i32, rect_h as i32);
 
             'outer: for obj in layer.iter_children(&scene_graph, SceneNodeType::RenderObject) {
-                let Ok((x, y, scale)) = get_obj_props(obj) else {
+                let Ok((x, y, scale_x, scale_y)) = get_obj_props(obj) else {
                     error!("obj '{}':{} has a property error", obj.name, obj.id);
                     continue
                 };
 
                 let model = glam::Mat4::from_translation(glam::Vec3::new(x, y, 0.)) *
-                    glam::Mat4::from_scale(glam::Vec3::new(scale, scale, 1.));
+                    glam::Mat4::from_scale(glam::Vec3::new(scale_x, scale_y, 1.));
 
                 let texture = 'texture: {
                     let Some(texture_node) =