mirror of
https://github.com/zed-industries/zed.git
synced 2024-09-20 02:47:34 +03:00
WIP
This commit is contained in:
parent
6f17cf7337
commit
1ae25f52a1
@ -17,7 +17,7 @@ impl RenderOnce for FacePile {
|
||||
let isnt_last = ix < player_count - 1;
|
||||
|
||||
div()
|
||||
.z_index((player_count - ix) as u32)
|
||||
.z_index((player_count - ix) as u8)
|
||||
.when(isnt_last, |div| div.neg_mr_1())
|
||||
.child(player)
|
||||
});
|
||||
|
@ -646,7 +646,10 @@ pub struct DivState {
|
||||
|
||||
impl DivState {
|
||||
pub fn is_active(&self) -> bool {
|
||||
self.interactive_state.pending_mouse_down.borrow().is_some()
|
||||
self.interactive_state
|
||||
.pending_mouse_down
|
||||
.as_ref()
|
||||
.map_or(false, |pending| pending.borrow().is_some())
|
||||
}
|
||||
}
|
||||
|
||||
@ -872,11 +875,17 @@ impl Interactivity {
|
||||
let drag_listener = self.drag_listener;
|
||||
|
||||
if !click_listeners.is_empty() || drag_listener.is_some() {
|
||||
let pending_mouse_down = element_state.pending_mouse_down.clone();
|
||||
let pending_mouse_down = element_state
|
||||
.pending_mouse_down
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
let mouse_down = pending_mouse_down.borrow().clone();
|
||||
if let Some(mouse_down) = mouse_down {
|
||||
if let Some(drag_listener) = drag_listener {
|
||||
let active_state = element_state.clicked_state.clone();
|
||||
let active_state = element_state
|
||||
.clicked_state
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
let interactive_bounds = interactive_bounds.clone();
|
||||
|
||||
cx.on_mouse_event(move |event: &MouseMoveEvent, phase, cx| {
|
||||
@ -929,8 +938,14 @@ impl Interactivity {
|
||||
}
|
||||
|
||||
if let Some(hover_listener) = self.hover_listener.take() {
|
||||
let was_hovered = element_state.hover_state.clone();
|
||||
let has_mouse_down = element_state.pending_mouse_down.clone();
|
||||
let was_hovered = element_state
|
||||
.hover_state
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
let has_mouse_down = element_state
|
||||
.pending_mouse_down
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
let interactive_bounds = interactive_bounds.clone();
|
||||
|
||||
cx.on_mouse_event(move |event: &MouseMoveEvent, phase, cx| {
|
||||
@ -951,8 +966,14 @@ impl Interactivity {
|
||||
}
|
||||
|
||||
if let Some(tooltip_builder) = self.tooltip_builder.take() {
|
||||
let active_tooltip = element_state.active_tooltip.clone();
|
||||
let pending_mouse_down = element_state.pending_mouse_down.clone();
|
||||
let active_tooltip = element_state
|
||||
.active_tooltip
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
let pending_mouse_down = element_state
|
||||
.pending_mouse_down
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
let interactive_bounds = interactive_bounds.clone();
|
||||
|
||||
cx.on_mouse_event(move |event: &MouseMoveEvent, phase, cx| {
|
||||
@ -994,19 +1015,30 @@ impl Interactivity {
|
||||
}
|
||||
});
|
||||
|
||||
let active_tooltip = element_state.active_tooltip.clone();
|
||||
let active_tooltip = element_state
|
||||
.active_tooltip
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
cx.on_mouse_event(move |_: &MouseDownEvent, _, _| {
|
||||
active_tooltip.borrow_mut().take();
|
||||
});
|
||||
|
||||
if let Some(active_tooltip) = element_state.active_tooltip.borrow().as_ref() {
|
||||
if let Some(active_tooltip) = element_state
|
||||
.active_tooltip
|
||||
.get_or_insert_with(Default::default)
|
||||
.borrow()
|
||||
.as_ref()
|
||||
{
|
||||
if active_tooltip.tooltip.is_some() {
|
||||
cx.active_tooltip = active_tooltip.tooltip.clone()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let active_state = element_state.clicked_state.clone();
|
||||
let active_state = element_state
|
||||
.clicked_state
|
||||
.get_or_insert_with(Default::default)
|
||||
.clone();
|
||||
if active_state.borrow().is_clicked() {
|
||||
cx.on_mouse_event(move |_: &MouseUpEvent, phase, cx| {
|
||||
if phase == DispatchPhase::Capture {
|
||||
@ -1180,7 +1212,10 @@ impl Interactivity {
|
||||
}
|
||||
}
|
||||
|
||||
let clicked_state = element_state.clicked_state.borrow();
|
||||
let clicked_state = element_state
|
||||
.clicked_state
|
||||
.get_or_insert_with(Default::default)
|
||||
.borrow();
|
||||
if clicked_state.group {
|
||||
if let Some(group) = self.group_active_style.as_ref() {
|
||||
style.refine(&group.style)
|
||||
@ -1235,11 +1270,11 @@ impl Default for Interactivity {
|
||||
#[derive(Default)]
|
||||
pub struct InteractiveElementState {
|
||||
pub focus_handle: Option<FocusHandle>,
|
||||
pub clicked_state: Rc<RefCell<ElementClickedState>>,
|
||||
pub hover_state: Rc<RefCell<bool>>,
|
||||
pub pending_mouse_down: Rc<RefCell<Option<MouseDownEvent>>>,
|
||||
pub clicked_state: Option<Rc<RefCell<ElementClickedState>>>,
|
||||
pub hover_state: Option<Rc<RefCell<bool>>>,
|
||||
pub pending_mouse_down: Option<Rc<RefCell<Option<MouseDownEvent>>>>,
|
||||
pub scroll_offset: Option<Rc<RefCell<Point<Pixels>>>>,
|
||||
pub active_tooltip: Rc<RefCell<Option<ActiveTooltip>>>,
|
||||
pub active_tooltip: Option<Rc<RefCell<Option<ActiveTooltip>>>>,
|
||||
}
|
||||
|
||||
pub struct ActiveTooltip {
|
||||
|
@ -107,7 +107,7 @@ pub struct Style {
|
||||
/// The mouse cursor style shown when the mouse pointer is over an element.
|
||||
pub mouse_cursor: Option<CursorStyle>,
|
||||
|
||||
pub z_index: Option<u32>,
|
||||
pub z_index: Option<u8>,
|
||||
}
|
||||
|
||||
impl Styled for StyleRefinement {
|
||||
|
@ -12,7 +12,7 @@ pub trait Styled: Sized {
|
||||
|
||||
gpui2_macros::style_helpers!();
|
||||
|
||||
fn z_index(mut self, z_index: u32) -> Self {
|
||||
fn z_index(mut self, z_index: u8) -> Self {
|
||||
self.style().z_index = Some(z_index);
|
||||
self
|
||||
}
|
||||
|
@ -38,28 +38,34 @@ use std::{
|
||||
};
|
||||
use util::ResultExt;
|
||||
|
||||
const ACTIVE_DRAG_Z_INDEX: u32 = 1;
|
||||
const ACTIVE_DRAG_Z_INDEX: u8 = 1;
|
||||
|
||||
/// A global stacking order, which is created by stacking successive z-index values.
|
||||
/// Each z-index will always be interpreted in the context of its parent z-index.
|
||||
#[derive(Deref, DerefMut, Ord, PartialOrd, Eq, PartialEq, Clone, Debug)]
|
||||
pub struct StackingOrder(pub(crate) Arc<Vec<u32>>);
|
||||
#[derive(Deref, DerefMut, Clone, Debug, Ord, PartialOrd, PartialEq, Eq)]
|
||||
pub struct StackingOrder {
|
||||
#[deref]
|
||||
#[deref_mut]
|
||||
z_indices: Arc<SmallVec<[u8; 8]>>,
|
||||
}
|
||||
|
||||
impl Default for StackingOrder {
|
||||
fn default() -> Self {
|
||||
StackingOrder(Arc::new(Vec::new()))
|
||||
StackingOrder {
|
||||
z_indices: Arc::new(SmallVec::new()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl StackingOrder {
|
||||
/// Pushes a new z-index onto the stacking order.
|
||||
pub fn push(&mut self, z_index: u32) {
|
||||
Arc::make_mut(&mut self.0).push(z_index);
|
||||
pub fn push(&mut self, z_index: u8) {
|
||||
Arc::make_mut(&mut self.z_indices).push(z_index);
|
||||
}
|
||||
|
||||
/// Pops the last z-index off the stacking order.
|
||||
pub fn pop(&mut self) {
|
||||
Arc::make_mut(&mut self.0).pop();
|
||||
Arc::make_mut(&mut self.z_indices).pop();
|
||||
}
|
||||
}
|
||||
|
||||
@ -905,7 +911,7 @@ impl<'a> WindowContext<'a> {
|
||||
|
||||
/// Called during painting to invoke the given closure in a new stacking context. The given
|
||||
/// z-index is interpreted relative to the previous call to `stack`.
|
||||
pub fn with_z_index<R>(&mut self, z_index: u32, f: impl FnOnce(&mut Self) -> R) -> R {
|
||||
pub fn with_z_index<R>(&mut self, z_index: u8, f: impl FnOnce(&mut Self) -> R) -> R {
|
||||
self.window.next_frame.z_index_stack.push(z_index);
|
||||
let result = f(self);
|
||||
self.window.next_frame.z_index_stack.pop();
|
||||
@ -2233,7 +2239,7 @@ impl<'a, V: 'static> ViewContext<'a, V> {
|
||||
&mut self.window_cx
|
||||
}
|
||||
|
||||
pub fn with_z_index<R>(&mut self, z_index: u32, f: impl FnOnce(&mut Self) -> R) -> R {
|
||||
pub fn with_z_index<R>(&mut self, z_index: u8, f: impl FnOnce(&mut Self) -> R) -> R {
|
||||
self.window.next_frame.z_index_stack.push(z_index);
|
||||
let result = f(self);
|
||||
self.window.next_frame.z_index_stack.pop();
|
||||
|
@ -78,7 +78,7 @@ impl Styles for Div {}
|
||||
|
||||
#[derive(IntoElement)]
|
||||
struct ZIndexExample {
|
||||
z_index: u32,
|
||||
z_index: u8,
|
||||
}
|
||||
|
||||
impl RenderOnce for ZIndexExample {
|
||||
@ -170,7 +170,7 @@ impl RenderOnce for ZIndexExample {
|
||||
}
|
||||
|
||||
impl ZIndexExample {
|
||||
pub fn new(z_index: u32) -> Self {
|
||||
pub fn new(z_index: u8) -> Self {
|
||||
Self { z_index }
|
||||
}
|
||||
}
|
||||
|
@ -20,14 +20,14 @@ pub enum ElevationIndex {
|
||||
}
|
||||
|
||||
impl ElevationIndex {
|
||||
pub fn z_index(self) -> u32 {
|
||||
pub fn z_index(self) -> u8 {
|
||||
match self {
|
||||
ElevationIndex::Background => 0,
|
||||
ElevationIndex::Surface => 100,
|
||||
ElevationIndex::ElevatedSurface => 200,
|
||||
ElevationIndex::Wash => 250,
|
||||
ElevationIndex::ModalSurface => 300,
|
||||
ElevationIndex::DraggedElement => 900,
|
||||
ElevationIndex::Surface => 42,
|
||||
ElevationIndex::ElevatedSurface => 84,
|
||||
ElevationIndex::Wash => 126,
|
||||
ElevationIndex::ModalSurface => 168,
|
||||
ElevationIndex::DraggedElement => 210,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -116,7 +116,7 @@ impl Render for ModalLayer {
|
||||
.size_full()
|
||||
.top_0()
|
||||
.left_0()
|
||||
.z_index(400)
|
||||
.z_index(169)
|
||||
.child(
|
||||
v_stack()
|
||||
.h(px(0.0))
|
||||
|
Loading…
Reference in New Issue
Block a user