/** * @module ol/style/Stroke */ /** * @typedef {Object} Options * @property {import("../color.js").Color|import("../colorlike.js").ColorLike} [color] A color, gradient or pattern. * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats. * Default null; if null, the Canvas/renderer default black will be used. * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`. * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`. * @property {Array} [lineDash] Line dash pattern. Default is `null` (no dash). * @property {number} [lineDashOffset=0] Line dash offset. * @property {number} [miterLimit=10] Miter limit. * @property {number} [width] Width. */ /** * @classdesc * Set stroke style for vector features. * Note that the defaults given are the Canvas defaults, which will be used if * option is not defined. The `get` functions return whatever was entered in * the options; they will not return the default. * @api */ class Stroke { /** * @param {Options} [options] Options. */ constructor(options) { options = options || {}; /** * @private * @type {import("../color.js").Color|import("../colorlike.js").ColorLike} */ this.color_ = options.color !== undefined ? options.color : null; /** * @private * @type {CanvasLineCap|undefined} */ this.lineCap_ = options.lineCap; /** * @private * @type {Array|null} */ this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null; /** * @private * @type {number|undefined} */ this.lineDashOffset_ = options.lineDashOffset; /** * @private * @type {CanvasLineJoin|undefined} */ this.lineJoin_ = options.lineJoin; /** * @private * @type {number|undefined} */ this.miterLimit_ = options.miterLimit; /** * @private * @type {number|undefined} */ this.width_ = options.width; } /** * Clones the style. * @return {Stroke} The cloned style. * @api */ clone() { const color = this.getColor(); return new Stroke({ color: Array.isArray(color) ? color.slice() : color || undefined, lineCap: this.getLineCap(), lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined, lineDashOffset: this.getLineDashOffset(), lineJoin: this.getLineJoin(), miterLimit: this.getMiterLimit(), width: this.getWidth(), }); } /** * Get the stroke color. * @return {import("../color.js").Color|import("../colorlike.js").ColorLike} Color. * @api */ getColor() { return this.color_; } /** * Get the line cap type for the stroke. * @return {CanvasLineCap|undefined} Line cap. * @api */ getLineCap() { return this.lineCap_; } /** * Get the line dash style for the stroke. * @return {Array|null} Line dash. * @api */ getLineDash() { return this.lineDash_; } /** * Get the line dash offset for the stroke. * @return {number|undefined} Line dash offset. * @api */ getLineDashOffset() { return this.lineDashOffset_; } /** * Get the line join type for the stroke. * @return {CanvasLineJoin|undefined} Line join. * @api */ getLineJoin() { return this.lineJoin_; } /** * Get the miter limit for the stroke. * @return {number|undefined} Miter limit. * @api */ getMiterLimit() { return this.miterLimit_; } /** * Get the stroke width. * @return {number|undefined} Width. * @api */ getWidth() { return this.width_; } /** * Set the color. * * @param {import("../color.js").Color|import("../colorlike.js").ColorLike} color Color. * @api */ setColor(color) { this.color_ = color; } /** * Set the line cap. * * @param {CanvasLineCap|undefined} lineCap Line cap. * @api */ setLineCap(lineCap) { this.lineCap_ = lineCap; } /** * Set the line dash. * * @param {Array|null} lineDash Line dash. * @api */ setLineDash(lineDash) { this.lineDash_ = lineDash; } /** * Set the line dash offset. * * @param {number|undefined} lineDashOffset Line dash offset. * @api */ setLineDashOffset(lineDashOffset) { this.lineDashOffset_ = lineDashOffset; } /** * Set the line join. * * @param {CanvasLineJoin|undefined} lineJoin Line join. * @api */ setLineJoin(lineJoin) { this.lineJoin_ = lineJoin; } /** * Set the miter limit. * * @param {number|undefined} miterLimit Miter limit. * @api */ setMiterLimit(miterLimit) { this.miterLimit_ = miterLimit; } /** * Set the width. * * @param {number|undefined} width Width. * @api */ setWidth(width) { this.width_ = width; } } export default Stroke;