mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-25 19:29:49 +00:00
Rename height to z-index
This commit is contained in:
parent
dfe2fd0386
commit
2b4fd53202
3 changed files with 25 additions and 24 deletions
|
@ -16,7 +16,7 @@ pub struct Overlay {
|
||||||
fit_mode: OverlayFitMode,
|
fit_mode: OverlayFitMode,
|
||||||
position_mode: OverlayPositionMode,
|
position_mode: OverlayPositionMode,
|
||||||
hoverable: bool,
|
hoverable: bool,
|
||||||
height: Option<usize>,
|
z_index: Option<usize>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
|
@ -83,7 +83,7 @@ impl Overlay {
|
||||||
fit_mode: OverlayFitMode::None,
|
fit_mode: OverlayFitMode::None,
|
||||||
position_mode: OverlayPositionMode::Window,
|
position_mode: OverlayPositionMode::Window,
|
||||||
hoverable: false,
|
hoverable: false,
|
||||||
height: None,
|
z_index: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,8 +112,8 @@ impl Overlay {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_height(mut self, height: usize) -> Self {
|
pub fn with_z_index(mut self, z_index: usize) -> Self {
|
||||||
self.height = Some(height);
|
self.z_index = Some(z_index);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -211,7 +211,7 @@ impl Element for Overlay {
|
||||||
OverlayFitMode::None => {}
|
OverlayFitMode::None => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
cx.paint_stacking_context(None, self.height, |cx| {
|
cx.paint_stacking_context(None, self.z_index, |cx| {
|
||||||
if self.hoverable {
|
if self.hoverable {
|
||||||
enum OverlayHoverCapture {}
|
enum OverlayHoverCapture {}
|
||||||
// Block hovers in lower stacking contexts
|
// Block hovers in lower stacking contexts
|
||||||
|
|
|
@ -360,14 +360,14 @@ impl Presenter {
|
||||||
for mut mouse_event in mouse_events {
|
for mut mouse_event in mouse_events {
|
||||||
let mut valid_regions = Vec::new();
|
let mut valid_regions = Vec::new();
|
||||||
|
|
||||||
// GPUI elements are arranged by height but sibling elements can register overlapping
|
// GPUI elements are arranged by z_index but sibling elements can register overlapping
|
||||||
// mouse regions. As such, hover events are only fired on overlapping elements which
|
// mouse regions. As such, hover events are only fired on overlapping elements which
|
||||||
// are at the same height as the topmost element which overlaps with the mouse.
|
// are at the same z-index as the topmost element which overlaps with the mouse.
|
||||||
match &mouse_event {
|
match &mouse_event {
|
||||||
MouseEvent::Hover(_) => {
|
MouseEvent::Hover(_) => {
|
||||||
let mut top_most_height = None;
|
let mut highest_z_index = None;
|
||||||
let mouse_position = self.mouse_position.clone();
|
let mouse_position = self.mouse_position.clone();
|
||||||
for (region, height) in self.mouse_regions.iter().rev() {
|
for (region, z_index) in self.mouse_regions.iter().rev() {
|
||||||
// Allow mouse regions to appear transparent to hovers
|
// Allow mouse regions to appear transparent to hovers
|
||||||
if !region.hoverable {
|
if !region.hoverable {
|
||||||
continue;
|
continue;
|
||||||
|
@ -375,15 +375,15 @@ impl Presenter {
|
||||||
|
|
||||||
let contains_mouse = region.bounds.contains_point(mouse_position);
|
let contains_mouse = region.bounds.contains_point(mouse_position);
|
||||||
|
|
||||||
if contains_mouse && top_most_height.is_none() {
|
if contains_mouse && highest_z_index.is_none() {
|
||||||
top_most_height = Some(height);
|
highest_z_index = Some(z_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This unwrap relies on short circuiting boolean expressions
|
// This unwrap relies on short circuiting boolean expressions
|
||||||
// The right side of the && is only executed when contains_mouse
|
// The right side of the && is only executed when contains_mouse
|
||||||
// is true, and we know above that when contains_mouse is true
|
// is true, and we know above that when contains_mouse is true
|
||||||
// top_most_height is set
|
// highest_z_index is set.
|
||||||
if contains_mouse && height == top_most_height.unwrap() {
|
if contains_mouse && z_index == highest_z_index.unwrap() {
|
||||||
//Ensure that hover entrance events aren't sent twice
|
//Ensure that hover entrance events aren't sent twice
|
||||||
if self.hovered_region_ids.insert(region.id()) {
|
if self.hovered_region_ids.insert(region.id()) {
|
||||||
valid_regions.push(region.clone());
|
valid_regions.push(region.clone());
|
||||||
|
@ -712,12 +712,12 @@ impl<'a> PaintContext<'a> {
|
||||||
pub fn paint_stacking_context<F>(
|
pub fn paint_stacking_context<F>(
|
||||||
&mut self,
|
&mut self,
|
||||||
clip_bounds: Option<RectF>,
|
clip_bounds: Option<RectF>,
|
||||||
height: Option<usize>,
|
z_index: Option<usize>,
|
||||||
f: F,
|
f: F,
|
||||||
) where
|
) where
|
||||||
F: FnOnce(&mut Self),
|
F: FnOnce(&mut Self),
|
||||||
{
|
{
|
||||||
self.scene.push_stacking_context(clip_bounds, height);
|
self.scene.push_stacking_context(clip_bounds, z_index);
|
||||||
f(self);
|
f(self);
|
||||||
self.scene.pop_stacking_context();
|
self.scene.pop_stacking_context();
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ pub struct Scene {
|
||||||
struct StackingContext {
|
struct StackingContext {
|
||||||
layers: Vec<Layer>,
|
layers: Vec<Layer>,
|
||||||
active_layer_stack: Vec<usize>,
|
active_layer_stack: Vec<usize>,
|
||||||
height: usize,
|
z_index: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
@ -205,7 +205,7 @@ impl Scene {
|
||||||
.layers
|
.layers
|
||||||
.iter()
|
.iter()
|
||||||
.flat_map(|layer| &layer.mouse_regions)
|
.flat_map(|layer| &layer.mouse_regions)
|
||||||
.map(|region| (region.clone(), context.height))
|
.map(|region| (region.clone(), context.z_index))
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
@ -213,7 +213,7 @@ impl Scene {
|
||||||
|
|
||||||
impl SceneBuilder {
|
impl SceneBuilder {
|
||||||
pub fn new(scale_factor: f32) -> Self {
|
pub fn new(scale_factor: f32) -> Self {
|
||||||
let stacking_context = StackingContext::new(0, None);
|
let stacking_context = StackingContext::new(None, 0);
|
||||||
SceneBuilder {
|
SceneBuilder {
|
||||||
scale_factor,
|
scale_factor,
|
||||||
stacking_contexts: vec![stacking_context],
|
stacking_contexts: vec![stacking_context],
|
||||||
|
@ -224,7 +224,8 @@ impl SceneBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build(mut self) -> Scene {
|
pub fn build(mut self) -> Scene {
|
||||||
self.stacking_contexts.sort_by_key(|context| context.height);
|
self.stacking_contexts
|
||||||
|
.sort_by_key(|context| context.z_index);
|
||||||
Scene {
|
Scene {
|
||||||
scale_factor: self.scale_factor,
|
scale_factor: self.scale_factor,
|
||||||
stacking_contexts: self.stacking_contexts,
|
stacking_contexts: self.stacking_contexts,
|
||||||
|
@ -235,12 +236,12 @@ impl SceneBuilder {
|
||||||
self.scale_factor
|
self.scale_factor
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn push_stacking_context(&mut self, clip_bounds: Option<RectF>, height: Option<usize>) {
|
pub fn push_stacking_context(&mut self, clip_bounds: Option<RectF>, z_index: Option<usize>) {
|
||||||
let height = height.unwrap_or_else(|| self.active_stacking_context().height + 1);
|
let z_index = z_index.unwrap_or_else(|| self.active_stacking_context().z_index + 1);
|
||||||
self.active_stacking_context_stack
|
self.active_stacking_context_stack
|
||||||
.push(self.stacking_contexts.len());
|
.push(self.stacking_contexts.len());
|
||||||
self.stacking_contexts
|
self.stacking_contexts
|
||||||
.push(StackingContext::new(height, clip_bounds))
|
.push(StackingContext::new(clip_bounds, z_index))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pop_stacking_context(&mut self) {
|
pub fn pop_stacking_context(&mut self) {
|
||||||
|
@ -332,11 +333,11 @@ impl SceneBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StackingContext {
|
impl StackingContext {
|
||||||
fn new(height: usize, clip_bounds: Option<RectF>) -> Self {
|
fn new(clip_bounds: Option<RectF>, z_index: usize) -> Self {
|
||||||
Self {
|
Self {
|
||||||
layers: vec![Layer::new(clip_bounds)],
|
layers: vec![Layer::new(clip_bounds)],
|
||||||
active_layer_stack: vec![0],
|
active_layer_stack: vec![0],
|
||||||
height,
|
z_index,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue