iconGrid: Apply delay to easing state

Also following design suggestion, add a small delay to the icons
moving so as to give the impression that they're moving in order.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/603
This commit is contained in:
Georges Basile Stavracas Neto 2019-07-04 19:23:52 -03:00
parent ac3bc03f3f
commit 0bdcf2958f
No known key found for this signature in database
GPG Key ID: 886C17EE170D1385

View File

@ -40,6 +40,8 @@ const NUDGE_RETURN_DURATION = 300;
const NUDGE_FACTOR = 0.33; const NUDGE_FACTOR = 0.33;
const ICON_POSITION_DELAY = 25;
var DragLocation = { var DragLocation = {
DEFAULT: 0, DEFAULT: 0,
ON_ICON: 1, ON_ICON: 1,
@ -365,6 +367,7 @@ var IconGrid = GObject.registerClass({
let y = box.y1 + this.topPadding; let y = box.y1 + this.topPadding;
let columnIndex = 0; let columnIndex = 0;
let rowIndex = 0; let rowIndex = 0;
let nChanged = 0;
for (let i = 0; i < children.length; i++) { for (let i = 0; i < children.length; i++) {
let childBox = this._calculateChildBox(children[i], x, y, box); let childBox = this._calculateChildBox(children[i], x, y, box);
@ -375,8 +378,13 @@ var IconGrid = GObject.registerClass({
if (!animating) if (!animating)
children[i].opacity = 255; children[i].opacity = 255;
// Figure out how much delay to apply
if (!childBox.equal(children[i].get_allocation_box()))
nChanged++;
children[i].save_easing_state(); children[i].save_easing_state();
children[i].set_easing_mode(Clutter.AnimationMode.EASE_OUT_QUAD); children[i].set_easing_mode(Clutter.AnimationMode.EASE_OUT_QUAD);
children[i].set_easing_delay(ICON_POSITION_DELAY * nChanged);
children[i].allocate(childBox, flags); children[i].allocate(childBox, flags);
children[i].restore_easing_state(); children[i].restore_easing_state();
} }
@ -1099,12 +1107,18 @@ var PaginatedIconGrid = GObject.registerClass({
let x = box.x1 + leftEmptySpace + this.leftPadding; let x = box.x1 + leftEmptySpace + this.leftPadding;
let y = box.y1 + this.topPadding; let y = box.y1 + this.topPadding;
let columnIndex = 0; let columnIndex = 0;
let nChanged = 0;
for (let i = 0; i < children.length; i++) { for (let i = 0; i < children.length; i++) {
let childBox = this._calculateChildBox(children[i], x, y, box); let childBox = this._calculateChildBox(children[i], x, y, box);
// Figure out how much delay to apply
if (!childBox.equal(children[i].get_allocation_box()))
nChanged++;
children[i].save_easing_state(); children[i].save_easing_state();
children[i].set_easing_mode(Clutter.AnimationMode.EASE_OUT_QUAD); children[i].set_easing_mode(Clutter.AnimationMode.EASE_OUT_QUAD);
children[i].set_easing_delay(ICON_POSITION_DELAY * nChanged);
children[i].allocate(childBox, flags); children[i].allocate(childBox, flags);
children[i].restore_easing_state(); children[i].restore_easing_state();