UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

55 lines (54 loc) 2.07 kB
import { normalizeToArray, makeInner } from "../../util/model.mjs"; var innerColor = makeInner(); var innerDecal = makeInner(); var PaletteMixin = function() { function PaletteMixin2() { } PaletteMixin2.prototype.getColorFromPalette = function(name, scope, requestNum) { var defaultPalette = normalizeToArray(this.get("color", true)); var layeredPalette = this.get("colorLayer", true); return getFromPalette(this, innerColor, defaultPalette, layeredPalette, name, scope, requestNum); }; PaletteMixin2.prototype.clearColorPalette = function() { clearPalette(this, innerColor); }; return PaletteMixin2; }(); function getDecalFromPalette(ecModel, name, scope, requestNum) { var defaultDecals = normalizeToArray(ecModel.get(["aria", "decal", "decals"])); return getFromPalette(ecModel, innerDecal, defaultDecals, null, name, scope, requestNum); } function getNearestPalette(palettes, requestColorNum) { var paletteNum = palettes.length; for (var i = 0; i < paletteNum; i++) { if (palettes[i].length > requestColorNum) { return palettes[i]; } } return palettes[paletteNum - 1]; } function getFromPalette(that, inner, defaultPalette, layeredPalette, name, scope, requestNum) { scope = scope || that; var scopeFields = inner(scope); var paletteIdx = scopeFields.paletteIdx || 0; var paletteNameMap = scopeFields.paletteNameMap = scopeFields.paletteNameMap || {}; if (paletteNameMap.hasOwnProperty(name)) { return paletteNameMap[name]; } var palette = requestNum == null || !layeredPalette ? defaultPalette : getNearestPalette(layeredPalette, requestNum); palette = palette || defaultPalette; if (!palette || !palette.length) { return; } var pickedPaletteItem = palette[paletteIdx]; if (name) { paletteNameMap[name] = pickedPaletteItem; } scopeFields.paletteIdx = (paletteIdx + 1) % palette.length; return pickedPaletteItem; } function clearPalette(that, inner) { inner(that).paletteIdx = 0; inner(that).paletteNameMap = {}; } export { PaletteMixin, getDecalFromPalette };