forked from Shinonome/dots-hyprland
notifications: swipe down to expand
This commit is contained in:
@@ -127,7 +127,7 @@ export default ({
|
|||||||
const display = Gdk.Display.get_default();
|
const display = Gdk.Display.get_default();
|
||||||
const notifTextPreview = Revealer({
|
const notifTextPreview = Revealer({
|
||||||
transition: 'slide_down',
|
transition: 'slide_down',
|
||||||
transitionDuration: 300,
|
transitionDuration: 120,
|
||||||
revealChild: true,
|
revealChild: true,
|
||||||
child: Label({
|
child: Label({
|
||||||
xalign: 0,
|
xalign: 0,
|
||||||
@@ -142,7 +142,7 @@ export default ({
|
|||||||
});
|
});
|
||||||
const notifTextExpanded = Revealer({
|
const notifTextExpanded = Revealer({
|
||||||
transition: 'slide_up',
|
transition: 'slide_up',
|
||||||
transitionDuration: 300,
|
transitionDuration: 120,
|
||||||
revealChild: false,
|
revealChild: false,
|
||||||
child: Label({
|
child: Label({
|
||||||
xalign: 0,
|
xalign: 0,
|
||||||
@@ -242,10 +242,13 @@ export default ({
|
|||||||
// Gesture stuff
|
// Gesture stuff
|
||||||
|
|
||||||
const gesture = Gtk.GestureDrag.new(widget);
|
const gesture = Gtk.GestureDrag.new(widget);
|
||||||
var initialDir = 0;
|
var initDirX = 0;
|
||||||
|
var initDirVertical = -1; // -1: unset, 0: horizontal, 1: vertical
|
||||||
|
var expanded = false;
|
||||||
// in px
|
// in px
|
||||||
const startMargin = 0;
|
const startMargin = 0;
|
||||||
const dragThreshold = 100;
|
const MOVE_THRESHOLD = 10;
|
||||||
|
const DRAG_CONFIRM_THRESHOLD = 100;
|
||||||
// in rem
|
// in rem
|
||||||
const maxOffset = 10.227;
|
const maxOffset = 10.227;
|
||||||
const endMargin = 20.455;
|
const endMargin = 20.455;
|
||||||
@@ -276,35 +279,54 @@ export default ({
|
|||||||
children: [notificationContent],
|
children: [notificationContent],
|
||||||
setup: (self) => self
|
setup: (self) => self
|
||||||
.hook(gesture, self => {
|
.hook(gesture, self => {
|
||||||
var offset = gesture.get_offset()[1];
|
var offset_x = gesture.get_offset()[1];
|
||||||
if (initialDir == 0 && offset != 0)
|
var offset_y = gesture.get_offset()[2];
|
||||||
initialDir = (offset > 0 ? 1 : -1)
|
if (initDirVertical == -1) {
|
||||||
|
if (Math.abs(offset_y) > MOVE_THRESHOLD)
|
||||||
|
initDirVertical = 1;
|
||||||
|
if (initDirX == 0 && Math.abs(offset_x) > MOVE_THRESHOLD) {
|
||||||
|
initDirVertical = 0;
|
||||||
|
initDirX = (offset_x > 0 ? 1 : -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (offset > 0) {
|
if (initDirVertical == 0 && offset_x > MOVE_THRESHOLD) {
|
||||||
if (initialDir < 0)
|
if (initDirX < 0)
|
||||||
self.setCss(`margin-left: 0px; margin-right: 0px;`);
|
self.setCss(`margin-left: 0px; margin-right: 0px;`);
|
||||||
else
|
else
|
||||||
self.setCss(`
|
self.setCss(`
|
||||||
margin-left: ${Number(offset + startMargin)}px;
|
margin-left: ${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
|
||||||
margin-right: -${Number(offset + startMargin)}px;
|
margin-right: -${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
|
||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
else if (offset < 0) {
|
else if (initDirVertical == 0 && offset_x < -MOVE_THRESHOLD) {
|
||||||
if (initialDir > 0)
|
if (initDirX > 0)
|
||||||
self.setCss(`margin-left: 0px; margin-right: 0px;`);
|
self.setCss(`margin-left: 0px; margin-right: 0px;`);
|
||||||
else {
|
else {
|
||||||
offset = Math.abs(offset);
|
offset_x = Math.abs(offset_x);
|
||||||
self.setCss(`
|
self.setCss(`
|
||||||
margin-right: ${Number(offset + startMargin)}px;
|
margin-right: ${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
|
||||||
margin-left: -${Number(offset + startMargin)}px;
|
margin-left: -${Number(offset_x + startMargin - MOVE_THRESHOLD)}px;
|
||||||
`);
|
`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wholeThing._dragging = Math.abs(offset) > 10;
|
wholeThing._dragging = Math.abs(offset_x) > 10;
|
||||||
|
|
||||||
if (widget.window)
|
if (widget.window)
|
||||||
widget.window.set_cursor(Gdk.Cursor.new_from_name(display, 'grabbing'));
|
widget.window.set_cursor(Gdk.Cursor.new_from_name(display, 'grabbing'));
|
||||||
|
|
||||||
|
if (initDirVertical == 1 && offset_y > MOVE_THRESHOLD && !expanded) {
|
||||||
|
notifTextPreview.revealChild = false;
|
||||||
|
notifTextExpanded.revealChild = true;
|
||||||
|
expanded = true;
|
||||||
|
}
|
||||||
|
else if (initDirVertical == 1 && offset_y < -MOVE_THRESHOLD && expanded) {
|
||||||
|
notifTextPreview.revealChild = true;
|
||||||
|
notifTextExpanded.revealChild = false;
|
||||||
|
expanded = false;
|
||||||
|
}
|
||||||
|
|
||||||
}, 'drag-update')
|
}, 'drag-update')
|
||||||
.hook(gesture, self => {
|
.hook(gesture, self => {
|
||||||
if (!self._ready) {
|
if (!self._ready) {
|
||||||
@@ -312,10 +334,10 @@ export default ({
|
|||||||
self._ready = true;
|
self._ready = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const offset = gesture.get_offset()[1];
|
const offset_h = gesture.get_offset()[1];
|
||||||
|
|
||||||
if (Math.abs(offset) > dragThreshold && offset * initialDir > 0) {
|
if (Math.abs(offset_h) > DRAG_CONFIRM_THRESHOLD && offset_h * initDirX > 0) {
|
||||||
if (offset > 0) {
|
if (offset_h > 0) {
|
||||||
self.setCss(rightAnim1);
|
self.setCss(rightAnim1);
|
||||||
widget.sensitive = false;
|
widget.sensitive = false;
|
||||||
}
|
}
|
||||||
@@ -342,7 +364,8 @@ export default ({
|
|||||||
|
|
||||||
wholeThing._dragging = false;
|
wholeThing._dragging = false;
|
||||||
}
|
}
|
||||||
initialDir = 0;
|
initDirX = 0;
|
||||||
|
initDirVertical = -1;
|
||||||
}, 'drag-end')
|
}, 'drag-end')
|
||||||
,
|
,
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user