mirror of
https://gitlab.com/thebiblelover7/dotfiles.git
synced 2025-12-13 19:53:49 +00:00
initial commit
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
/* exported init, cleanup, lock, unlock, get_animation_status, get_transparency_status, minimum_fade_in, update_transition_type */
|
||||
/* exported fade_in, fade_out, blank_fade_out */
|
||||
|
||||
const Mainloop = imports.mainloop;
|
||||
|
||||
const St = imports.gi.St;
|
||||
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
|
||||
const Settings = Me.imports.settings;
|
||||
const Theming = Me.imports.theming;
|
||||
|
||||
const Equations = imports.tweener.equations;
|
||||
|
||||
const CORNER_UPDATE_FREQUENCY = 30;
|
||||
|
||||
class TransparencyStatus {
|
||||
constructor() {
|
||||
this.transparent = false;
|
||||
this.blank = false;
|
||||
}
|
||||
|
||||
is_transparent() {
|
||||
return this.transparent;
|
||||
}
|
||||
|
||||
is_blank() {
|
||||
return this.blank;
|
||||
}
|
||||
|
||||
set_transparent(transparent) {
|
||||
this.transparent = transparent;
|
||||
}
|
||||
|
||||
set_blank(blank) {
|
||||
this.blank = blank;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Intialize.
|
||||
*
|
||||
*/
|
||||
function init() {
|
||||
/* Objects to track where the transparency is and where it's going. */
|
||||
this.status = new TransparencyStatus();
|
||||
|
||||
this.corner_timeout_id = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Freeup any held assets on disable.
|
||||
*
|
||||
*/
|
||||
function cleanup() {
|
||||
this.status = null;
|
||||
|
||||
this.corner_timeout_id = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current status of the panel's transparency.
|
||||
*
|
||||
* @returns {Object} Current transparency. @see TransparencyStatus
|
||||
*/
|
||||
function get_transparency_status() {
|
||||
return this.status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get any animation that the panel is currently doing.
|
||||
* DEPRECATED.
|
||||
*
|
||||
* @returns {Object} Current animation status. @see AnimationStatus
|
||||
*/
|
||||
function get_animation_status() {
|
||||
return { destination: null, action: null };
|
||||
}
|
||||
|
||||
/**
|
||||
* Fades the panel into the unmaximized (minimum) alpha. Used for closing the overview.
|
||||
*
|
||||
*/
|
||||
function minimum_fade_in() {
|
||||
/* The CSS backend doesn't need different starting/ending values */
|
||||
fade_out();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fades the panel into the nmaximized (maximum) alpha.
|
||||
*
|
||||
*/
|
||||
function fade_in() {
|
||||
if (!Settings.remove_panel_styling()) {
|
||||
Theming.reapply_panel_styling();
|
||||
Theming.reapply_panel_background_image();
|
||||
}
|
||||
|
||||
Theming.remove_panel_transparency();
|
||||
|
||||
if (Settings.enable_custom_background_color()) {
|
||||
Theming.set_maximized_background_color('custom');
|
||||
|
||||
Theming.remove_unmaximized_background_color();
|
||||
Theming.remove_unmaximized_background_color('custom');
|
||||
} else {
|
||||
Theming.set_maximized_background_color();
|
||||
|
||||
Theming.remove_unmaximized_background_color();
|
||||
Theming.remove_unmaximized_background_color('custom');
|
||||
}
|
||||
|
||||
if (!Settings.get_hide_corners()) {
|
||||
let speed = St.Settings.get().slow_down_factor * Settings.get_transition_speed();
|
||||
|
||||
let maximized = Settings.get_maximized_opacity();
|
||||
let unmaximized = !this.status.is_transparent() ? maximized : Settings.get_unmaximized_opacity();
|
||||
|
||||
this.status.set_transparent(false);
|
||||
this.status.set_blank(false);
|
||||
|
||||
let count = 0;
|
||||
|
||||
const id = this.corner_timeout_id = Mainloop.timeout_add(Math.floor(speed / CORNER_UPDATE_FREQUENCY), (function() {
|
||||
if (id === this.corner_timeout_id && !this.status.is_transparent()) {
|
||||
count++;
|
||||
|
||||
let alpha = Equations.linear(Math.floor(count * (speed / CORNER_UPDATE_FREQUENCY)), unmaximized, maximized - unmaximized, speed);
|
||||
|
||||
update_corner_alpha(alpha);
|
||||
|
||||
if (count > CORNER_UPDATE_FREQUENCY) {
|
||||
update_corner_alpha(maximized);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}).bind(this));
|
||||
} else {
|
||||
update_corner_alpha();
|
||||
}
|
||||
|
||||
this.status.set_transparent(false);
|
||||
this.status.set_blank(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fades the panel into the unmaximized (minimum) alpha.
|
||||
*
|
||||
*/
|
||||
function fade_out() {
|
||||
Theming.strip_panel_background_image();
|
||||
Theming.strip_panel_styling();
|
||||
|
||||
if (Settings.enable_custom_background_color()) {
|
||||
Theming.set_unmaximized_background_color('custom');
|
||||
|
||||
Theming.remove_maximized_background_color();
|
||||
Theming.remove_maximized_background_color('custom');
|
||||
} else {
|
||||
Theming.set_unmaximized_background_color();
|
||||
|
||||
Theming.remove_maximized_background_color();
|
||||
Theming.remove_maximized_background_color('custom');
|
||||
}
|
||||
|
||||
Theming.remove_panel_transparency();
|
||||
|
||||
// TODO: Figure out how to write the panel corners in pure CSS.
|
||||
if (!Settings.get_hide_corners()) {
|
||||
let speed = St.Settings.get().slow_down_factor * Settings.get_transition_speed();
|
||||
|
||||
let unmaximized = Settings.get_unmaximized_opacity();
|
||||
let maximized = this.status.is_transparent() ? unmaximized : Settings.get_maximized_opacity();
|
||||
|
||||
/* Keep the status up to date */
|
||||
this.status.set_transparent(true);
|
||||
this.status.set_blank(false);
|
||||
|
||||
let count = 0;
|
||||
|
||||
const id = this.corner_timeout_id = Mainloop.timeout_add(Math.floor(speed / CORNER_UPDATE_FREQUENCY), (function() {
|
||||
if (id === this.corner_timeout_id && this.status.is_transparent()) {
|
||||
count++;
|
||||
|
||||
let alpha = Equations.linear(Math.floor(count * (speed / CORNER_UPDATE_FREQUENCY)), maximized, unmaximized - maximized, speed);
|
||||
|
||||
update_corner_alpha(alpha);
|
||||
|
||||
if (count > CORNER_UPDATE_FREQUENCY) {
|
||||
update_corner_alpha(unmaximized);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}).bind(this));
|
||||
} else {
|
||||
update_corner_alpha();
|
||||
}
|
||||
|
||||
/* Keep the status up to date */
|
||||
this.status.set_transparent(true);
|
||||
this.status.set_blank(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fades the panel's alpha to 0. Used for opening the overview & displaying the screenShield.
|
||||
*
|
||||
*/
|
||||
function blank_fade_out() {
|
||||
this.status.set_transparent(true);
|
||||
this.status.set_blank(true);
|
||||
|
||||
/* Completely remove every possible background style... */
|
||||
Theming.remove_background_color();
|
||||
|
||||
Theming.strip_panel_background_image();
|
||||
Theming.strip_panel_styling();
|
||||
|
||||
Theming.apply_panel_transparency();
|
||||
|
||||
// TODO: These corners...
|
||||
if (!Settings.get_hide_corners()) {
|
||||
let speed = St.Settings.get().slow_down_factor * Settings.get_transition_speed();
|
||||
|
||||
let maximized = Settings.get_maximized_opacity();
|
||||
|
||||
let count = 0;
|
||||
|
||||
const id = this.corner_timeout_id = Mainloop.timeout_add(Math.floor(speed / CORNER_UPDATE_FREQUENCY), (function() {
|
||||
if (id === this.corner_timeout_id && this.status.is_transparent()) {
|
||||
count++;
|
||||
|
||||
let alpha = Equations.linear(Math.floor(count * (speed / CORNER_UPDATE_FREQUENCY)), maximized, -maximized, speed);
|
||||
|
||||
update_corner_alpha(alpha);
|
||||
|
||||
if (count > CORNER_UPDATE_FREQUENCY) {
|
||||
update_corner_alpha(0);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}).bind(this));
|
||||
} else {
|
||||
update_corner_alpha();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the alpha value of the corners' coloring. Slightly awkward overlap is unavoidable.
|
||||
*
|
||||
* @param {Number} alpha - Alpha value ranging from 0-255.
|
||||
*/
|
||||
function update_corner_alpha(alpha = null) {
|
||||
if (alpha === null) {
|
||||
if (Settings.get_hide_corners()) {
|
||||
alpha = 0;
|
||||
} else {
|
||||
alpha = this.status.is_transparent() ? Theming.get_unmaximized_opacity() : Theming.get_maximized_opacity();
|
||||
}
|
||||
}
|
||||
|
||||
Theming.set_corner_color({
|
||||
alpha: alpha
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user