shell: Add zoom UI
This commit is contained in:
parent
55e4dd7c0f
commit
f72d2b91f3
10 changed files with 1247 additions and 261 deletions
|
|
@ -21,6 +21,7 @@ use crate::{
|
|||
};
|
||||
|
||||
pub enum Stage<'a> {
|
||||
ZoomUI,
|
||||
SessionLock(Option<&'a LockSurface>),
|
||||
LayerPopup {
|
||||
layer: LayerSurface,
|
||||
|
|
@ -69,6 +70,10 @@ fn render_input_order_internal<R: 'static>(
|
|||
element_filter: ElementFilter,
|
||||
mut callback: impl FnMut(Stage) -> ControlFlow<Result<R, OutputNoMode>, ()>,
|
||||
) -> ControlFlow<Result<R, OutputNoMode>, ()> {
|
||||
if shell.zoom_state.is_some() {
|
||||
callback(Stage::ZoomUI)?;
|
||||
}
|
||||
|
||||
// Session Lock
|
||||
if let Some(session_lock) = &shell.session_lock {
|
||||
return callback(Stage::SessionLock(session_lock.surfaces.get(output)));
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ use crate::{
|
|||
shell::{
|
||||
element::{CosmicMapped, CosmicStack, CosmicWindow},
|
||||
layout::tiling::ResizeForkTarget,
|
||||
zoom::ZoomFocusTarget,
|
||||
CosmicSurface, SeatExt,
|
||||
},
|
||||
utils::prelude::*,
|
||||
|
|
@ -41,6 +42,7 @@ pub enum PointerFocusTarget {
|
|||
StackUI(CosmicStack),
|
||||
WindowUI(CosmicWindow),
|
||||
ResizeFork(ResizeForkTarget),
|
||||
ZoomUI(ZoomFocusTarget),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
|
|
@ -188,6 +190,7 @@ impl IsAlive for PointerFocusTarget {
|
|||
PointerFocusTarget::StackUI(e) => e.alive(),
|
||||
PointerFocusTarget::WindowUI(e) => e.alive(),
|
||||
PointerFocusTarget::ResizeFork(f) => f.alive(),
|
||||
PointerFocusTarget::ZoomUI(_) => true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -233,6 +236,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::StackUI(u) => PointerTarget::enter(u, seat, data, event),
|
||||
PointerFocusTarget::WindowUI(u) => PointerTarget::enter(u, seat, data, event),
|
||||
PointerFocusTarget::ResizeFork(f) => PointerTarget::enter(f, seat, data, event),
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::enter(e, seat, data, event),
|
||||
}
|
||||
}
|
||||
fn motion(&self, seat: &Seat<State>, data: &mut State, event: &PointerMotionEvent) {
|
||||
|
|
@ -262,6 +266,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::StackUI(u) => PointerTarget::motion(u, seat, data, event),
|
||||
PointerFocusTarget::WindowUI(u) => PointerTarget::motion(u, seat, data, event),
|
||||
PointerFocusTarget::ResizeFork(f) => PointerTarget::motion(f, seat, data, event),
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::motion(e, seat, data, event),
|
||||
}
|
||||
}
|
||||
fn relative_motion(&self, seat: &Seat<State>, data: &mut State, event: &RelativeMotionEvent) {
|
||||
|
|
@ -274,6 +279,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::relative_motion(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::relative_motion(e, seat, data, event),
|
||||
}
|
||||
}
|
||||
fn button(&self, seat: &Seat<State>, data: &mut State, event: &ButtonEvent) {
|
||||
|
|
@ -284,6 +290,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::StackUI(u) => PointerTarget::button(u, seat, data, event),
|
||||
PointerFocusTarget::WindowUI(u) => PointerTarget::button(u, seat, data, event),
|
||||
PointerFocusTarget::ResizeFork(f) => PointerTarget::button(f, seat, data, event),
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::button(e, seat, data, event),
|
||||
}
|
||||
}
|
||||
fn axis(&self, seat: &Seat<State>, data: &mut State, frame: AxisFrame) {
|
||||
|
|
@ -294,6 +301,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::StackUI(u) => PointerTarget::axis(u, seat, data, frame),
|
||||
PointerFocusTarget::WindowUI(u) => PointerTarget::axis(u, seat, data, frame),
|
||||
PointerFocusTarget::ResizeFork(f) => PointerTarget::axis(f, seat, data, frame),
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::axis(e, seat, data, frame),
|
||||
}
|
||||
}
|
||||
fn frame(&self, seat: &Seat<State>, data: &mut State) {
|
||||
|
|
@ -304,6 +312,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::StackUI(u) => PointerTarget::frame(u, seat, data),
|
||||
PointerFocusTarget::WindowUI(u) => PointerTarget::frame(u, seat, data),
|
||||
PointerFocusTarget::ResizeFork(f) => PointerTarget::frame(f, seat, data),
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::frame(e, seat, data),
|
||||
}
|
||||
}
|
||||
fn leave(&self, seat: &Seat<State>, data: &mut State, serial: Serial, time: u32) {
|
||||
|
|
@ -322,6 +331,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::StackUI(u) => PointerTarget::leave(u, seat, data, serial, time),
|
||||
PointerFocusTarget::WindowUI(u) => PointerTarget::leave(u, seat, data, serial, time),
|
||||
PointerFocusTarget::ResizeFork(f) => PointerTarget::leave(f, seat, data, serial, time),
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::leave(e, seat, data, serial, time),
|
||||
}
|
||||
}
|
||||
fn gesture_swipe_begin(
|
||||
|
|
@ -343,6 +353,9 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_swipe_begin(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => {
|
||||
PointerTarget::gesture_swipe_begin(e, seat, data, event)
|
||||
}
|
||||
}
|
||||
}
|
||||
fn gesture_swipe_update(
|
||||
|
|
@ -364,6 +377,9 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_swipe_update(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => {
|
||||
PointerTarget::gesture_swipe_update(e, seat, data, event)
|
||||
}
|
||||
}
|
||||
}
|
||||
fn gesture_swipe_end(
|
||||
|
|
@ -385,6 +401,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_swipe_end(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::gesture_swipe_end(e, seat, data, event),
|
||||
}
|
||||
}
|
||||
fn gesture_pinch_begin(
|
||||
|
|
@ -406,6 +423,9 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_pinch_begin(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => {
|
||||
PointerTarget::gesture_pinch_begin(e, seat, data, event)
|
||||
}
|
||||
}
|
||||
}
|
||||
fn gesture_pinch_update(
|
||||
|
|
@ -427,6 +447,9 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_pinch_update(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => {
|
||||
PointerTarget::gesture_pinch_update(e, seat, data, event)
|
||||
}
|
||||
}
|
||||
}
|
||||
fn gesture_pinch_end(
|
||||
|
|
@ -448,6 +471,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_pinch_end(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::gesture_pinch_end(e, seat, data, event),
|
||||
}
|
||||
}
|
||||
fn gesture_hold_begin(
|
||||
|
|
@ -469,6 +493,9 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_hold_begin(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => {
|
||||
PointerTarget::gesture_hold_begin(e, seat, data, event)
|
||||
}
|
||||
}
|
||||
}
|
||||
fn gesture_hold_end(&self, seat: &Seat<State>, data: &mut State, event: &GestureHoldEndEvent) {
|
||||
|
|
@ -483,6 +510,7 @@ impl PointerTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(f) => {
|
||||
PointerTarget::gesture_hold_end(f, seat, data, event)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(e) => PointerTarget::gesture_hold_end(e, seat, data, event),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -498,6 +526,7 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
}
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::down(stack, seat, data, event, seq),
|
||||
PointerFocusTarget::ResizeFork(fork) => TouchTarget::down(fork, seat, data, event, seq),
|
||||
PointerFocusTarget::ZoomUI(elem) => TouchTarget::down(elem, seat, data, event, seq),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -509,6 +538,7 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WindowUI(window) => TouchTarget::up(window, seat, data, event, seq),
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::up(stack, seat, data, event, seq),
|
||||
PointerFocusTarget::ResizeFork(fork) => TouchTarget::up(fork, seat, data, event, seq),
|
||||
PointerFocusTarget::ZoomUI(elem) => TouchTarget::up(elem, seat, data, event, seq),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -526,6 +556,7 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(fork) => {
|
||||
TouchTarget::motion(fork, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(elem) => TouchTarget::motion(elem, seat, data, event, seq),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -537,6 +568,7 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WindowUI(window) => TouchTarget::frame(window, seat, data, seq),
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::frame(stack, seat, data, seq),
|
||||
PointerFocusTarget::ResizeFork(fork) => TouchTarget::frame(fork, seat, data, seq),
|
||||
PointerFocusTarget::ZoomUI(elem) => TouchTarget::frame(elem, seat, data, seq),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -548,6 +580,7 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::WindowUI(window) => TouchTarget::cancel(window, seat, data, seq),
|
||||
PointerFocusTarget::StackUI(stack) => TouchTarget::cancel(stack, seat, data, seq),
|
||||
PointerFocusTarget::ResizeFork(fork) => TouchTarget::cancel(fork, seat, data, seq),
|
||||
PointerFocusTarget::ZoomUI(elem) => TouchTarget::cancel(elem, seat, data, seq),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -563,6 +596,7 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(fork) => {
|
||||
TouchTarget::shape(fork, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(elem) => TouchTarget::shape(elem, seat, data, event, seq),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -586,6 +620,9 @@ impl TouchTarget<State> for PointerFocusTarget {
|
|||
PointerFocusTarget::ResizeFork(fork) => {
|
||||
TouchTarget::orientation(fork, seat, data, event, seq)
|
||||
}
|
||||
PointerFocusTarget::ZoomUI(elem) => {
|
||||
TouchTarget::orientation(elem, seat, data, event, seq)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -734,7 +771,8 @@ impl WaylandFocus for PointerFocusTarget {
|
|||
PointerFocusTarget::WlSurface { surface, .. } => Cow::Borrowed(surface),
|
||||
PointerFocusTarget::ResizeFork(_)
|
||||
| PointerFocusTarget::StackUI(_)
|
||||
| PointerFocusTarget::WindowUI(_) => {
|
||||
| PointerFocusTarget::WindowUI(_)
|
||||
| PointerFocusTarget::ZoomUI(_) => {
|
||||
return None;
|
||||
}
|
||||
})
|
||||
|
|
@ -751,7 +789,7 @@ impl WaylandFocus for PointerFocusTarget {
|
|||
.wl_surface()
|
||||
.map(|s| s.id().same_client_as(object_id))
|
||||
.unwrap_or(false),
|
||||
PointerFocusTarget::ResizeFork(_) => false,
|
||||
PointerFocusTarget::ResizeFork(_) | PointerFocusTarget::ZoomUI(_) => false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue