lockscreen.js 4.7 KB

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