'use strict';
const Rac = require('../Rac');
const utils = require('../util/utils');
/**
* Stroke weight and [color]{@link Rac.Color} for drawing.
*
* Can be used as `stroke.apply()` to apply the stroke settings globally, or
* as the parameter of `drawable.draw(stroke)` to apply the stroke only for
* that `draw`.
*
* The instance applies the stroke color and weight settings in the
* following combinations:
* + when `color = null` and `weight = null`: a *no-stroke* setting is
* applied
* + when `color` is set and `weight = null`: only the stroke color is
* applied, stroke weight is not modified
* + when `weight` is set and `color = null`: only the stroke weight is
* applied, stroke color is not modified
* + when both `color` and `weight` are set: both stroke color and weight
* are applied
*
* @alias Rac.Stroke
*/
class Stroke {
/**
* Creates a new `Stroke` instance.
*
* @param {Rac} rac - Instance to use for drawing and creating other objects
* @param {?number} weight - The weight of the stroke, or `null` to skip weight
* @param {?Rac.Color} color - A `Color` for the stroke, or `null` to skip color
*/
constructor(rac, weight, color = null) {
utils.assertExists(rac);
weight !== null && utils.assertNumber(weight);
color !== null && utils.assertType(Rac.Color, color);
this.rac = rac
this.color = color;
this.weight = weight;
}
withWeight(newWeight) {
return new Stroke(this.rac, newWeight, this.color,);
}
withAlpha(newAlpha) {
if (this.color === null) {
return new Stroke(this.rac, this.weight, null);
}
let newColor = this.color.withAlpha(newAlpha);
return new Stroke(this.rac, this.weight, newColor);
}
styleWithFill(someFill) {
let fill = Rac.Fill.from(this.rac, someFill);
return new Rac.Style(this.rac, this, fill);
}
} // class Stroke
module.exports = Stroke;