浏览代码

wip: more refactor

Jonathan Kelley 4 年之前
父节点
当前提交
c811a89
共有 3 个文件被更改,包括 40 次插入53 次删除
  1. 1 0
      packages/core/src/lib.rs
  2. 39 0
      packages/core/src/util.rs
  3. 0 53
      packages/core/src/virtual_dom.rs

+ 1 - 0
packages/core/src/lib.rs

@@ -43,6 +43,7 @@ pub(crate) mod innerlude {
     pub use crate::hooks::*;
     pub use crate::nodebuilder::*;
     pub use crate::nodes::*;
+    pub use crate::util::*;
     pub use crate::virtual_dom::*;
 
     pub type FC<P> = fn(Context<P>) -> VNode;

+ 39 - 0
packages/core/src/util.rs

@@ -1,5 +1,44 @@
+use std::{cell::RefCell, rc::Rc};
+
 use crate::innerlude::*;
 
+// We actually allocate the properties for components in their parent's properties
+// We then expose a handle to use those props for render in the form of "OpaqueComponent"
+pub type OpaqueComponent = dyn for<'b> Fn(&'b Scope) -> VNode<'b>;
+
+#[derive(PartialEq, Debug, Clone, Default)]
+pub struct EventQueue(pub Rc<RefCell<Vec<HeightMarker>>>);
+
+impl EventQueue {
+    pub fn new_channel(&self, height: u32, idx: ScopeIdx) -> Rc<dyn Fn()> {
+        let inner = self.clone();
+        let marker = HeightMarker { height, idx };
+        Rc::new(move || {
+            log::debug!("channel updated {:#?}", marker);
+            inner.0.as_ref().borrow_mut().push(marker)
+        })
+    }
+}
+
+/// A helper type that lets scopes be ordered by their height
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub struct HeightMarker {
+    pub idx: ScopeIdx,
+    pub height: u32,
+}
+
+impl Ord for HeightMarker {
+    fn cmp(&self, other: &Self) -> std::cmp::Ordering {
+        self.height.cmp(&other.height)
+    }
+}
+
+impl PartialOrd for HeightMarker {
+    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
+        Some(self.cmp(other))
+    }
+}
+
 pub struct DebugDom {
     counter: u64,
 }

+ 0 - 53
packages/core/src/virtual_dom.rs

@@ -586,56 +586,3 @@ impl Scope {
         &self.frames.cur_frame().head_node
     }
 }
-
-// ==================================================================================
-//                Supporting structs for the above abstractions
-// ==================================================================================
-
-// We actually allocate the properties for components in their parent's properties
-// We then expose a handle to use those props for render in the form of "OpaqueComponent"
-pub type OpaqueComponent = dyn for<'b> Fn(&'b Scope) -> VNode<'b>;
-
-#[derive(PartialEq, Debug, Clone, Default)]
-pub struct EventQueue(pub Rc<RefCell<Vec<HeightMarker>>>);
-
-impl EventQueue {
-    pub fn new_channel(&self, height: u32, idx: ScopeIdx) -> Rc<dyn Fn()> {
-        let inner = self.clone();
-        let marker = HeightMarker { height, idx };
-        Rc::new(move || {
-            log::debug!("channel updated {:#?}", marker);
-            inner.0.as_ref().borrow_mut().push(marker)
-        })
-    }
-}
-
-/// A helper type that lets scopes be ordered by their height
-#[derive(Debug, Clone, Copy, PartialEq, Eq)]
-pub struct HeightMarker {
-    pub idx: ScopeIdx,
-    pub height: u32,
-}
-
-impl Ord for HeightMarker {
-    fn cmp(&self, other: &Self) -> std::cmp::Ordering {
-        self.height.cmp(&other.height)
-    }
-}
-
-impl PartialOrd for HeightMarker {
-    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
-        Some(self.cmp(other))
-    }
-}
-
-#[derive(Debug, PartialEq, Hash)]
-pub struct ContextId {
-    // Which component is the scope in
-    original: ScopeIdx,
-
-    // What's the height of the scope
-    height: u32,
-
-    // Which scope is it (in order)
-    id: u32,
-}