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:
Didier Roche 2018-02-09 14:02:21 +01:00 committed by Florian Müllner
parent ed8e89bc19
commit 3f756dc608
2 changed files with 19 additions and 8 deletions

View File

@ -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) {

View File

@ -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);
}, },