Explorar el Código

app: always center background video

darkfi hace 9 meses
padre
commit
6cf6d53714
Se han modificado 3 ficheros con 43 adiciones y 55 borrados
  1. 0 4
      bin/app/gui/print_tree.py
  2. 40 21
      bin/app/src/app/schema/mod.rs
  3. 3 30
      bin/app/src/mesh.rs

+ 0 - 4
bin/app/gui/print_tree.py

@@ -43,10 +43,6 @@ def print_node_info(parent_path, depth, indent):
                 child_type = "font"
             case SceneNodeType.CHAT_VIEW:
                 child_type = "chat_view"
-            case SceneNodeType.EDIT_BOX:
-                child_type = "edit_box"
-            case SceneNodeType.CHAT_EDIT:
-                child_type = "chat_edit"
             case SceneNodeType.BUTTON:
                 child_type = "button"
             case SceneNodeType.SETTING_ROOT:

+ 40 - 21
bin/app/src/app/schema/mod.rs

@@ -17,6 +17,7 @@
  */
 
 use darkfi_serial::Encodable;
+use indoc::indoc;
 use sled_overlay::sled;
 use std::fs::File;
 
@@ -81,7 +82,7 @@ mod desktop_paths {
     use std::path::PathBuf;
 
     //pub const BG_PATH: &str = "assets/bg.png";
-    pub const VID_PATH: &str = "assets/forest6/forest_02cjpg{frame}.qoi";
+    pub const VID_PATH: &str = "assets/forest8/forest_02cjpg{frame}.qoi";
 
     pub fn get_chatdb_path() -> PathBuf {
         dirs::data_local_dir().unwrap().join("darkfi/app/chatdb")
@@ -245,32 +246,50 @@ pub async fn make(app: &App, window: SceneNodePtr, i18n_fish: &I18nBabelFish) {
         prop.set_expr(atom, Role::App, 3, expr::load_var("h")).unwrap();
 
         // Image aspect ratio
-        //let R = 1.78;
-        let r = 1.555;
+        let r = 1.78;
         cc.add_const_f32("R", r);
 
         let prop = node.get_property("uv").unwrap();
-        prop.set_f32(atom, Role::App, 0, 0.).unwrap();
-        prop.set_f32(atom, Role::App, 1, 0.).unwrap();
         #[rustfmt::skip]
-    let code = cc.compile("
-        r = w / h;
-        if r < R {
-            r / R
-        } else {
-            1
-        }
-    ").unwrap();
+        let code = cc.compile(indoc! {"
+            r = w / h;
+            # r < R means screen narrower than image
+            if r < R {
+                0.5 - (r / (2 * R))
+            } else {
+                0
+            }
+        "}).unwrap();
+        prop.set_expr(atom, Role::App, 0, code).unwrap();
+        #[rustfmt::skip]
+        let code = cc.compile(indoc! {"
+            r = w / h;
+            if r < R {
+                0
+            } else {
+                0.5 - (R / (2 * r))
+            }
+        "}).unwrap();
+        prop.set_expr(atom, Role::App, 1, code).unwrap();
+        #[rustfmt::skip]
+        let code = cc.compile(indoc! {"
+            r = w / h;
+            if r < R {
+                r / R
+            } else {
+                1
+            }
+        "}).unwrap();
         prop.set_expr(atom, Role::App, 2, code).unwrap();
         #[rustfmt::skip]
-    let code = cc.compile("
-        r = w / h;
-        if r < R {
-            1
-        } else {
-            R / r
-        }
-    ").unwrap();
+        let code = cc.compile(indoc! {"
+            r = w / h;
+            if r < R {
+                1
+            } else {
+                R / r
+            }
+        "}).unwrap();
         prop.set_expr(atom, Role::App, 3, code).unwrap();
 
         //node.set_property_str(atom, Role::App, "path", BG_PATH).unwrap();

+ 3 - 30
bin/app/src/mesh.rs

@@ -68,17 +68,15 @@ impl MeshInfo {
     }
 }
 
-// TODO: remove clipper => simplify impl
 pub struct MeshBuilder {
     pub verts: Vec<Vertex>,
     pub indices: Vec<u16>,
-    clipper: Option<Rectangle>,
     tag: DebugTag,
 }
 
 impl MeshBuilder {
     pub fn new(tag: DebugTag) -> Self {
-        Self { verts: vec![], indices: vec![], clipper: None, tag }
+        Self { verts: vec![], indices: vec![], tag }
     }
 
     pub fn append(&mut self, mut verts: Vec<Vertex>, indices: Vec<u16>) {
@@ -88,37 +86,12 @@ impl MeshBuilder {
     }
 
     pub fn draw_box(&mut self, obj: &Rectangle, color: Color, uv: &Rectangle) {
-        let clipped = match &self.clipper {
-            Some(clipper) => {
-                let Some(clipped) = clipper.clip(&obj) else { return };
-                clipped
-            }
-            None => obj.clone(),
-        };
-
-        let (x1, y1) = clipped.pos().unpack();
-        let (x2, y2) = clipped.corner().unpack();
+        let (x1, y1) = obj.pos().unpack();
+        let (x2, y2) = obj.corner().unpack();
 
         let (u1, v1) = uv.pos().unpack();
         let (u2, v2) = uv.corner().unpack();
 
-        // Interpolate UV coords
-
-        let i = (clipped.x - obj.x) / obj.w;
-        let clip_u1 = u1 + i * (u2 - u1);
-
-        let i = (clipped.rhs() - obj.x) / obj.w;
-        let clip_u2 = u1 + i * (u2 - u1);
-
-        let i = (clipped.y - obj.y) / obj.h;
-        let clip_v1 = v1 + i * (v2 - v1);
-
-        let i = (clipped.bhs() - obj.y) / obj.h;
-        let clip_v2 = v1 + i * (v2 - v1);
-
-        let (u1, u2) = (clip_u1, clip_u2);
-        let (v1, v2) = (clip_v1, clip_v2);
-
         let verts = vec![
             // top left
             Vertex { pos: [x1, y1], color, uv: [u1, v1] },