35 lines
1.5 KiB
JavaScript
35 lines
1.5 KiB
JavaScript
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||
|
|
||
|
const Cairo = imports.cairo;
|
||
|
const Lang = imports.lang;
|
||
|
const St = imports.gi.St;
|
||
|
|
||
|
const HorizontalSeparator = new Lang.Class({
|
||
|
Name: 'HorizontalSeparator',
|
||
|
|
||
|
_init: function (params) {
|
||
|
this.actor = new St.DrawingArea(params);
|
||
|
this.actor.connect('repaint', Lang.bind(this, this._onRepaint));
|
||
|
},
|
||
|
|
||
|
_onRepaint: function(area) {
|
||
|
let cr = area.get_context();
|
||
|
let themeNode = area.get_theme_node();
|
||
|
let [width, height] = area.get_surface_size();
|
||
|
let margin = themeNode.get_length('-margin-horizontal');
|
||
|
let gradientHeight = themeNode.get_length('-gradient-height');
|
||
|
let startColor = themeNode.get_color('-gradient-start');
|
||
|
let endColor = themeNode.get_color('-gradient-end');
|
||
|
|
||
|
let gradientWidth = (width - margin * 2);
|
||
|
let gradientOffset = (height - gradientHeight) / 2;
|
||
|
let pattern = new Cairo.LinearGradient(margin, gradientOffset, width - margin, gradientOffset + gradientHeight);
|
||
|
pattern.addColorStopRGBA(0, startColor.red / 255, startColor.green / 255, startColor.blue / 255, startColor.alpha / 255);
|
||
|
pattern.addColorStopRGBA(0.5, endColor.red / 255, endColor.green / 255, endColor.blue / 255, endColor.alpha / 255);
|
||
|
pattern.addColorStopRGBA(1, startColor.red / 255, startColor.green / 255, startColor.blue / 255, startColor.alpha / 255);
|
||
|
cr.setSource(pattern);
|
||
|
cr.rectangle(margin, gradientOffset, gradientWidth, gradientHeight);
|
||
|
cr.fill();
|
||
|
}
|
||
|
});
|