Replace unrendered frame with a frame counter

Piotr Osiewicz created

Move facepile to the left hand side

Change summary

Cargo.lock                                    |  1 +
crates/call2/Cargo.toml                       |  1 +
crates/call2/src/call2.rs                     |  4 ----
crates/call2/src/room.rs                      |  2 --
crates/call2/src/shared_screen.rs             | 20 +++++++++++++-------
crates/collab_ui2/src/collab_titlebar_item.rs |  1 +
6 files changed, 16 insertions(+), 13 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -1206,6 +1206,7 @@ dependencies = [
  "serde_json",
  "settings2",
  "smallvec",
+ "ui2",
  "util",
  "workspace2",
 ]

crates/call2/Cargo.toml 🔗

@@ -31,6 +31,7 @@ media = { path = "../media" }
 project = { package = "project2", path = "../project2" }
 settings = { package = "settings2", path = "../settings2" }
 util = { path = "../util" }
+ui = {package = "ui2", path = "../ui2"}
 workspace = {package = "workspace2", path = "../workspace2"}
 async-trait.workspace = true
 anyhow.workspace = true

crates/call2/src/call2.rs 🔗

@@ -592,13 +592,9 @@ impl CallHandler for Call {
         cx: &mut ViewContext<Workspace>,
     ) -> Option<Box<dyn ItemHandle>> {
         let (call, _) = self.active_call.as_ref()?;
-        dbg!("A");
         let room = call.read(cx).room()?.read(cx);
-        dbg!("B");
         let participant = room.remote_participant_for_peer_id(peer_id)?;
-        dbg!("C");
         let track = participant.video_tracks.values().next()?.clone();
-        dbg!("D");
         let user = participant.user.clone();
         for item in pane.read(cx).items_of_type::<SharedScreen>() {
             if item.read(cx).peer_id == peer_id {

crates/call2/src/room.rs 🔗

@@ -1342,8 +1342,6 @@ impl Room {
                 let display = displays
                     .first()
                     .ok_or_else(|| anyhow!("no display found"))?;
-                dbg!("Been there");
-                dbg!(displays.len());
                 let track = LocalVideoTrack::screen_share_for_display(&display);
                 this.upgrade()
                     .ok_or_else(|| anyhow!("room was dropped"))?

crates/call2/src/shared_screen.rs 🔗

@@ -3,8 +3,8 @@ use anyhow::Result;
 use client::{proto::PeerId, User};
 use futures::StreamExt;
 use gpui::{
-    div, img, AppContext, Div, Element, EventEmitter, FocusHandle, FocusableView, ImageData,
-    ParentElement, Render, SharedString, Task, View, ViewContext, VisualContext, WindowContext,
+    div, AppContext, Div, Element, EventEmitter, FocusHandle, FocusableView, ParentElement, Render,
+    SharedString, Task, View, ViewContext, VisualContext, WindowContext,
 };
 use std::sync::{Arc, Weak};
 use workspace::{item::Item, ItemNavHistory, WorkspaceId};
@@ -16,6 +16,8 @@ pub enum Event {
 pub struct SharedScreen {
     track: Weak<RemoteVideoTrack>,
     frame: Option<Frame>,
+    // temporary addition just to render something interactive.
+    current_frame_id: usize,
     pub peer_id: PeerId,
     user: Arc<User>,
     nav_history: Option<ItemNavHistory>,
@@ -49,6 +51,7 @@ impl SharedScreen {
                 Ok(())
             }),
             focus: cx.focus_handle(),
+            current_frame_id: 0,
         }
     }
 }
@@ -65,11 +68,14 @@ impl Render for SharedScreen {
     type Element = Div;
     fn render(&mut self, _: &mut ViewContext<Self>) -> Self::Element {
         let frame = self.frame.clone();
-        div().children(frame.map(|frame| {
-            img().data(Arc::new(ImageData::new(image::ImageBuffer::new(
-                frame.width() as u32,
-                frame.height() as u32,
-            ))))
+        let frame_id = self.current_frame_id;
+        self.current_frame_id = self.current_frame_id.wrapping_add(1);
+        div().children(frame.map(|_| {
+            ui::Label::new(frame_id.to_string()).color(ui::Color::Error)
+            // img().data(Arc::new(ImageData::new(image::ImageBuffer::new(
+            //     frame.width() as u32,
+            //     frame.height() as u32,
+            // ))))
         }))
     }
 }