lockscreen.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import St from 'gi://St';
  2. import Shell from 'gi://Shell';
  3. import * as Main from 'resource:///org/gnome/shell/ui/main.js';
  4. import * as Background from 'resource:///org/gnome/shell/ui/background.js';
  5. import { UnlockDialog } from 'resource:///org/gnome/shell/ui/unlockDialog.js';
  6. let sigma;
  7. let brightness;
  8. let color;
  9. let noise;
  10. let lightness;
  11. const original_createBackground =
  12. UnlockDialog.prototype._createBackground;
  13. const original_updateBackgroundEffects =
  14. UnlockDialog.prototype._updateBackgroundEffects;
  15. export const LockscreenBlur = class LockscreenBlur {
  16. constructor(connections, settings, effects_manager) {
  17. this.connections = connections;
  18. this.settings = settings;
  19. this.effects_manager = effects_manager;
  20. this.enabled = false;
  21. }
  22. enable() {
  23. this._log("blurring lockscreen");
  24. brightness = this.settings.lockscreen.CUSTOMIZE
  25. ? this.settings.lockscreen.BRIGHTNESS
  26. : this.settings.BRIGHTNESS;
  27. sigma = this.settings.lockscreen.CUSTOMIZE
  28. ? this.settings.lockscreen.SIGMA
  29. : this.settings.SIGMA;
  30. color = this.settings.lockscreen.CUSTOMIZE
  31. ? this.settings.lockscreen.COLOR
  32. : this.settings.COLOR;
  33. noise = this.settings.lockscreen.CUSTOMIZE
  34. ? this.settings.lockscreen.NOISE_AMOUNT
  35. : this.settings.NOISE_AMOUNT;
  36. lightness = this.settings.lockscreen.CUSTOMIZE
  37. ? this.settings.lockscreen.NOISE_LIGHTNESS
  38. : this.settings.NOISE_LIGHTNESS;
  39. this.update_lockscreen();
  40. this.enabled = true;
  41. }
  42. update_lockscreen() {
  43. UnlockDialog.prototype._createBackground =
  44. this._createBackground;
  45. UnlockDialog.prototype._updateBackgroundEffects =
  46. this._updateBackgroundEffects;
  47. }
  48. _createBackground(monitorIndex) {
  49. let monitor = Main.layoutManager.monitors[monitorIndex];
  50. let widget = new St.Widget({
  51. style_class: "screen-shield-background",
  52. x: monitor.x,
  53. y: monitor.y,
  54. width: monitor.width,
  55. height: monitor.height,
  56. });
  57. let blur_effect = new Shell.BlurEffect({
  58. name: 'blur',
  59. radius: sigma * 2,
  60. brightness: brightness
  61. });
  62. // store the scale in the effect in order to retrieve later
  63. blur_effect.scale = monitor.geometry_scale;
  64. let color_effect = global.blur_my_shell._lockscreen_blur.effects_manager.new_color_effect({
  65. name: 'color',
  66. color: color
  67. }, this.settings);
  68. let noise_effect = global.blur_my_shell._lockscreen_blur.effects_manager.new_noise_effect({
  69. name: 'noise',
  70. noise: noise,
  71. lightness: lightness
  72. }, this.settings);
  73. widget.add_effect(color_effect);
  74. widget.add_effect(noise_effect);
  75. widget.add_effect(blur_effect);
  76. let bgManager = new Background.BackgroundManager({
  77. container: widget,
  78. monitorIndex,
  79. controlPosition: false,
  80. });
  81. this._bgManagers.push(bgManager);
  82. this._backgroundGroup.add_child(widget);
  83. }
  84. _updateBackgroundEffects() {
  85. for (const widget of this._backgroundGroup) {
  86. const color_effect = widget.get_effect('color');
  87. const noise_effect = widget.get_effect('noise');
  88. const blur_effect = widget.get_effect('blur');
  89. if (color_effect)
  90. color_effect.set({
  91. color: color
  92. });
  93. if (noise_effect) {
  94. noise_effect.set({
  95. noise: noise,
  96. lightness: lightness,
  97. });
  98. }
  99. if (blur_effect) {
  100. blur_effect.set({
  101. brightness: brightness,
  102. radius: sigma * 2 * blur_effect.scale,
  103. });
  104. }
  105. }
  106. }
  107. set_sigma(s) {
  108. sigma = s;
  109. this.update_lockscreen();
  110. }
  111. set_brightness(b) {
  112. brightness = b;
  113. this.update_lockscreen();
  114. }
  115. set_color(c) {
  116. color = c;
  117. this.update_lockscreen();
  118. }
  119. set_noise_amount(n) {
  120. noise = n;
  121. this.update_lockscreen();
  122. }
  123. set_noise_lightness(l) {
  124. lightness = l;
  125. this.update_lockscreen();
  126. }
  127. disable() {
  128. this._log("removing blur from lockscreen");
  129. UnlockDialog.prototype._createBackground =
  130. original_createBackground;
  131. UnlockDialog.prototype._updateBackgroundEffects =
  132. original_updateBackgroundEffects;
  133. this.connections.disconnect_all();
  134. this.enabled = false;
  135. }
  136. _log(str) {
  137. if (this.settings.DEBUG)
  138. console.log(`[Blur my Shell > lockscreen] ${str}`);
  139. }
  140. };