PrawnOS-nonfree/resources/InstallResources/extensions/window-corner-preview@fabiomereu.it/popupSliderMenuItem.js
gdallasdye 93192fa511
Revived Gnome Support (#162)
* Add gnome, stable and unstable mesa packages,

* Install unstable mesa and stable gnome packages
2020-05-26 16:43:15 -07:00

71 lines
2.4 KiB
JavaScript

"use strict";
// Global modules
const Lang = imports.lang;
const St = imports.gi.St;
const Slider = imports.ui.slider;
const PopupMenu = imports.ui.popupMenu;
// Internal modules
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Bundle = Me.imports.bundle;
// Utilities
const normalizeRange = Bundle.normalizeRange;
const deNormalizeRange = Bundle.deNormalizeRange;
var PopupSliderMenuItem = new Lang.Class({
Name: "WindowCornerPreview.PopupSliderMenuItem",
Extends: PopupMenu.PopupBaseMenuItem,
_init: function(text, value, min, max, step, params) {
this.min = (min !== undefined ? min : 0.0);
this.max = (max !== undefined ? max : 1.0);
this.defaultValue = (value !== undefined ? value : (this.max + this.min) / 2.0);
// *** KNOWN ISSUE: Scrolling may get stucked if step value > 1.0 (and |min-max| is a low value)
// due to const SLIDER_SCROLL_STEP = 0.02 on js/ui/slider.js ***
this.step = step;
params = params || {};
params.activate = false;
this.parent(params);
this.label = new St.Label({
text: text || ""
});
// Setting text to false allow a little bit extra space on the left
if (text !== false) this.actor.add_child(this.label);
this.actor.label_actor = this.label;
this.slider = new Slider.Slider(0.0);
this.value = this.defaultValue;
// PopupSliderMenuItem emits its own value-change event which provides a normalized value
this.slider.connect("value-changed", Lang.bind(this, function(x) {
let normalValue = this.value;
// Force the slider to set position on a stepped value (if necessary)
if (this.step !== undefined) this.value = normalValue;
// Don't through any event if step rounded it to the same value
if (normalValue !== this._lastValue) this.emit("value-changed", normalValue);
this._lastValue = normalValue;
}));
this.actor.add(this.slider.actor, {
expand: true,
align: St.Align.END
});
},
get value() {
return deNormalizeRange(this.slider.value, this.min, this.max, this.step);
},
set value(newValue) {
this._lastValue = normalizeRange(newValue, this.min, this.max, this.step);
this.slider.setValue(this._lastValue);
}
});