dot/.local/share/gnome-shell/extensions/floatingDock@sun.wxg@gmail.com/indicator.js

67 lines
1.7 KiB
JavaScript

const { Clutter, GObject, St } = imports.gi;
var Dash = GObject.registerClass(
class Dash extends St.Widget {
_init() {
super._init({ style_class: 'app-running-dash',
x_expand: true,
y_expand: true,
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.END,
});
this._value = 0;
}
set value(value) {
this._value = value > 4 ? 4 : value;
if (this._value > 0)
this.show();
else
this.hide();
}
});
var Dot = GObject.registerClass({
}, class Dot extends St.DrawingArea {
_init(iconSize) {
super._init({ style_class: 'app-running-dot',
x_expand: true,
y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
this._value = 0;
this._size = iconSize;
this.set_size(iconSize, iconSize);
}
set value(value) {
this._value = value > 4 ? 4 : value;
this.queue_repaint();
}
vfunc_repaint() {
if (!this._value)
return;
let cr = this.get_context();
let themeNode = this.get_theme_node();
let color = themeNode.get_foreground_color();
Clutter.cairo_set_source_color(cr, color);
let size = this._size * 0.15;
let radius = size / 2 - 1;
let x = size / 2;
let y = 0;
let step = this._size / (this._value + 1)
for (let i = 1; i <= this._value; i++) {
cr.arc(x, y + step * i, radius, 0, 2 * Math.PI);
cr.fillPreserve();
cr.stroke();
}
}
});