Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
rs-wayland-compositor
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki
Wiki externe
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Extraits de code
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Déploiement
Releases
Registre de paquets
Registre de conteneur
Registre de modèles
Opération
Environnements
Modules Terraform
Surveillance
Incidents
Analyse
Données d'analyse des chaînes de valeur
Analyse des contributeurs
Données d'analyse CI/CD
Données d'analyse du dépôt
Expériences du modèle
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
salixor
rs-wayland-compositor
Comparer les révisions
538a6017ce5bd9266276e2271ac678e99d346030 to c59beb7bb6c019b5c9d99f530653d53c4041cf10
Comparer les révisions
Les modifications sont affichées comme si la révision
source
était fusionnée avec la révision
cible
.
En savoir plus sur la comparaison des révisions.
Source
salixor/rs-wayland-compositor
Sélectionner le projet cible
No results found
c59beb7bb6c019b5c9d99f530653d53c4041cf10
Sélectionner une révision Git
Échanger
Cible
salixor/rs-wayland-compositor
Sélectionner le projet cible
salixor/rs-wayland-compositor
1 résultat
538a6017ce5bd9266276e2271ac678e99d346030
Sélectionner une révision Git
Afficher les modifications
Uniquement les modifications entrantes de la source
Inclure les modifications apportées à la cible depuis la création de la source
Comparer
Validations sur la source (2)
Constrain windows to the output they are in
· ca88f04a
salixor
a rédigé
1 year ago
ca88f04a
Handle anchoring a window to a side of the output
· c59beb7b
salixor
a rédigé
1 year ago
c59beb7b
Masquer les modifications d'espaces
En ligne
Côte à côte
Affichage de
2 fichiers modifiés
src/grabs/move_grab.rs
+44
-4
44 ajouts, 4 suppressions
src/grabs/move_grab.rs
src/handlers/xdg_shell.rs
+3
-4
3 ajouts, 4 suppressions
src/handlers/xdg_shell.rs
avec
47 ajouts
et
8 suppressions
src/grabs/move_grab.rs
Voir le fichier @
c59beb7b
...
...
@@ -3,9 +3,9 @@ use smithay::{
desktop
::
Window
,
input
::
pointer
::{
AxisFrame
,
ButtonEvent
,
GestureHoldBeginEvent
,
GestureHoldEndEvent
,
GesturePinchBeginEvent
,
GesturePinchEndEvent
,
GesturePinchUpdateEvent
,
GestureSwipeBeginEvent
,
GestureSwipeEndEvent
,
GestureSwipeUpdateEvent
,
GrabStartData
as
PointerGrabStartData
,
MotionEvent
,
PointerGrab
,
PointerInnerHandle
,
RelativeMotionEvent
,
GesturePinchEndEvent
,
GesturePinchUpdateEvent
,
GestureSwipeBeginEvent
,
GestureSwipeEndEvent
,
GestureSwipeUpdateEvent
,
GrabStartData
as
PointerGrabStartData
,
MotionEvent
,
PointerGrab
,
PointerInnerHandle
,
RelativeMotionEvent
,
},
reexports
::
wayland_server
::
protocol
::
wl_surface
::
WlSurface
,
utils
::{
Logical
,
Point
},
...
...
@@ -30,8 +30,21 @@ impl PointerGrab<Smallvil> for MoveSurfaceGrab {
let
delta
=
event
.location
-
self
.start_data.location
;
let
new_location
=
self
.initial_window_location
.to_f64
()
+
delta
;
let
wsize
=
data
.space
.element_geometry
(
&
self
.window
)
.unwrap
()
.size
;
let
window_outputs
=
data
.space
.outputs_for_element
(
&
self
.window
);
let
output
=
window_outputs
.first
()
.or_else
(||
data
.space
.outputs
()
.next
())
.expect
(
"No outputs?"
);
let
output_size
=
output
.current_mode
()
.unwrap
()
.size
;
let
x
=
(
new_location
.x
as
i32
)
.max
(
0
)
.min
(
output_size
.w
-
wsize
.w
);
let
y
=
(
new_location
.y
as
i32
)
.max
(
0
)
.min
(
output_size
.h
-
wsize
.h
);
data
.space
.map_element
(
self
.window
.clone
(),
new_location
.to_i32_round
(
),
true
);
.map_element
(
self
.window
.clone
(),
Point
::
from
((
x
,
y
)
),
true
);
}
fn
relative_motion
(
...
...
@@ -57,6 +70,33 @@ impl PointerGrab<Smallvil> for MoveSurfaceGrab {
const
BTN_LEFT
:
u32
=
0x110
;
if
!
handle
.current_pressed
()
.contains
(
&
BTN_LEFT
)
{
let
window_outputs
=
data
.space
.outputs_for_element
(
&
self
.window
);
let
output
=
window_outputs
.first
()
.or_else
(||
data
.space
.outputs
()
.next
())
.expect
(
"No outputs?"
);
let
output_size
=
output
.current_mode
()
.unwrap
()
.size
;
let
current_location
=
handle
.current_location
();
let
is_anchor_left_side
=
current_location
.x
<=
15.0
;
let
is_anchor_right_side
=
current_location
.x
>=
(
output_size
.w
-
15
)
.into
();
if
is_anchor_left_side
||
is_anchor_right_side
{
let
new_location
=
Point
::
from
((
is_anchor_right_side
.then
(||
output_size
.w
/
2
)
.unwrap_or
(
0
),
0
,
));
data
.space
.map_element
(
self
.window
.clone
(),
new_location
,
true
);
let
xdg
=
self
.window
.toplevel
();
xdg
.with_pending_state
(|
state
|
{
state
.size
=
Some
((
output_size
.w
/
2
,
output_size
.h
)
.into
());
});
xdg
.send_pending_configure
();
}
// No more buttons are pressed, release the grab.
handle
.unset_grab
(
data
,
event
.serial
,
event
.time
,
true
);
}
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
src/handlers/xdg_shell.rs
Voir le fichier @
c59beb7b
...
...
@@ -14,7 +14,7 @@ use smithay::{
Resource
,
},
},
utils
::{
Rectangle
,
Serial
},
utils
::{
Point
,
Rectangle
,
Serial
},
wayland
::{
compositor
::
with_states
,
shell
::
xdg
::{
...
...
@@ -104,11 +104,10 @@ impl XdgShellHandler for Smallvil {
let
ratio
=
(
pointer_pos
.x
-
win_geometry
.loc.x
as
f64
)
/
(
win_geometry
.size.w
as
f64
);
initial_window_location
=
(
initial_window_location
=
Point
::
from
(
(
(
pointer_pos
.x
-
ratio
*
target_size
.w
as
f64
)
as
i32
,
(
pointer_pos
.y
as
i32
),
)
.into
();
));
}
let
grab
=
MoveSurfaceGrab
{
...
...
Ce diff est replié.
Cliquez pour l'agrandir.