barLevel: Support maxValue higher than 1
Ensure that both barLevel and slider can support a higher maxValue than 1 and computes various positions based on it. It defaults to 1 if not set. https://bugzilla.gnome.org/show_bug.cgi?id=790280.
This commit is contained in:
parent
ed8e89bc19
commit
3f756dc608
@ -14,7 +14,8 @@ var BarLevel = new Lang.Class({
|
|||||||
if (isNaN(value))
|
if (isNaN(value))
|
||||||
// Avoid spreading NaNs around
|
// Avoid spreading NaNs around
|
||||||
throw TypeError('The bar level value must be a number');
|
throw TypeError('The bar level value must be a number');
|
||||||
this._value = Math.max(Math.min(value, 1), 0);
|
this._maxValue = 1;
|
||||||
|
this._value = Math.max(Math.min(value, this._maxValue), 0);
|
||||||
this._barLevelWidth = 0;
|
this._barLevelWidth = 0;
|
||||||
|
|
||||||
if (params == undefined)
|
if (params == undefined)
|
||||||
@ -44,7 +45,15 @@ var BarLevel = new Lang.Class({
|
|||||||
if (isNaN(value))
|
if (isNaN(value))
|
||||||
throw TypeError('The bar level value must be a number');
|
throw TypeError('The bar level value must be a number');
|
||||||
|
|
||||||
this._value = Math.max(Math.min(value, 1), 0);
|
this._value = Math.max(Math.min(value, this._maxValue), 0);
|
||||||
|
this.actor.queue_repaint();
|
||||||
|
},
|
||||||
|
|
||||||
|
setMaximumValue(value) {
|
||||||
|
if (isNaN(value))
|
||||||
|
throw TypeError('The bar level max value must be a number');
|
||||||
|
|
||||||
|
this._maxValue = Math.max(value, 1);
|
||||||
this.actor.queue_repaint();
|
this.actor.queue_repaint();
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -72,7 +81,9 @@ var BarLevel = new Lang.Class({
|
|||||||
|
|
||||||
const TAU = Math.PI * 2;
|
const TAU = Math.PI * 2;
|
||||||
|
|
||||||
let endX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * this._value;
|
let endX = 0;
|
||||||
|
if (this._maxValue > 0)
|
||||||
|
endX = barLevelBorderRadius + (width - 2 * barLevelBorderRadius) * this._value / this._maxValue;
|
||||||
|
|
||||||
/* background bar */
|
/* background bar */
|
||||||
cr.arc(width - barLevelBorderRadius - barLevelBorderWidth, height / 2, barLevelBorderRadius, TAU * 3 / 4, TAU * 1 / 4);
|
cr.arc(width - barLevelBorderRadius - barLevelBorderWidth, height / 2, barLevelBorderRadius, TAU * 3 / 4, TAU * 1 / 4);
|
||||||
@ -118,7 +129,7 @@ var BarLevel = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_getMaximumValue(actor) {
|
_getMaximumValue(actor) {
|
||||||
return 1;
|
return this._maxValue;
|
||||||
},
|
},
|
||||||
|
|
||||||
_setCurrentValue(actor, value) {
|
_setCurrentValue(actor, value) {
|
||||||
|
@ -51,7 +51,7 @@ var Slider = new Lang.Class({
|
|||||||
|
|
||||||
const TAU = Math.PI * 2;
|
const TAU = Math.PI * 2;
|
||||||
|
|
||||||
let handleX = handleRadius + (width - 2 * handleRadius) * this._value;
|
let handleX = handleRadius + (width - 2 * handleRadius) * this._value / this._maxValue;
|
||||||
let handleY = height / 2;
|
let handleY = height / 2;
|
||||||
|
|
||||||
let color = themeNode.get_foreground_color();
|
let color = themeNode.get_foreground_color();
|
||||||
@ -159,7 +159,7 @@ var Slider = new Lang.Class({
|
|||||||
delta = -dy * SLIDER_SCROLL_STEP;
|
delta = -dy * SLIDER_SCROLL_STEP;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._value = Math.min(Math.max(0, this._value + delta), 1);
|
this._value = Math.min(Math.max(0, this._value + delta), this._maxValue);
|
||||||
|
|
||||||
this.actor.queue_repaint();
|
this.actor.queue_repaint();
|
||||||
this.emit('value-changed', this._value);
|
this.emit('value-changed', this._value);
|
||||||
@ -181,7 +181,7 @@ var Slider = new Lang.Class({
|
|||||||
let key = event.get_key_symbol();
|
let key = event.get_key_symbol();
|
||||||
if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
|
if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
|
||||||
let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
|
let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
|
||||||
this._value = Math.max(0, Math.min(this._value + delta, 1));
|
this._value = Math.max(0, Math.min(this._value + delta, this._maxValue));
|
||||||
this.actor.queue_repaint();
|
this.actor.queue_repaint();
|
||||||
this.emit('drag-begin');
|
this.emit('drag-begin');
|
||||||
this.emit('value-changed', this._value);
|
this.emit('value-changed', this._value);
|
||||||
@ -207,7 +207,7 @@ var Slider = new Lang.Class({
|
|||||||
newvalue = 1;
|
newvalue = 1;
|
||||||
else
|
else
|
||||||
newvalue = (relX - handleRadius) / (width - 2 * handleRadius);
|
newvalue = (relX - handleRadius) / (width - 2 * handleRadius);
|
||||||
this._value = newvalue;
|
this._value = newvalue * this._maxValue;
|
||||||
this.actor.queue_repaint();
|
this.actor.queue_repaint();
|
||||||
this.emit('value-changed', this._value);
|
this.emit('value-changed', this._value);
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user