sketch-json-parse
Version:
sketch-json解析
91 lines (90 loc) • 3.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../../common/utils");
/**
* 处理阴影
* box-shadow 只解析一层的情况
* 多个 shadow 的情况将导成图片, 每一层的 shadow 的模式都是 blendMode: 0 表示是正常的
*/
const getShadowStyle = (shadow, layer, type = '') => {
let { alpha, red, green, blue, swatchID } = shadow.color;
alpha = shadow.contextSettings.opacity * alpha;
const offY = !layer.hasScale && layer.isFlippedVertical ? -shadow.offsetY : shadow.offsetY;
const offX = !layer.hasScale && layer.isFlippedHorizontal ? -shadow.offsetX : shadow.offsetX;
return {
type,
blurRadius: (0, utils_1.precisionControl)(shadow.blurRadius),
spread: (0, utils_1.precisionControl)(shadow.spread),
offsetX: (0, utils_1.precisionControl)(offX),
offsetY: (0, utils_1.precisionControl)(offY),
color: (0, utils_1.transSketchColor)({ red, green, blue, alpha, swatchID }),
};
};
// 获取文本的 shadow 样式
const getTextShadowStyle = (shadow, layer) => {
let { alpha, red, green, blue, swatchID } = shadow.color;
alpha = shadow.contextSettings.opacity * alpha;
let offY = !layer.hasScale && layer.isFlippedVertical ? -shadow.offsetY : shadow.offsetY;
let offX = !layer.hasScale && layer.isFlippedHorizontal ? -shadow.offsetX : shadow.offsetX;
return {
blurRadius: (0, utils_1.precisionControl)(shadow.blurRadius),
spread: (0, utils_1.precisionControl)(shadow.spread),
offsetX: (0, utils_1.precisionControl)(offX),
offsetY: (0, utils_1.precisionControl)(offY),
color: (0, utils_1.transSketchColor)({ red, green, blue, alpha, swatchID }),
};
};
exports.default = (layer) => {
if (layer._class === 'text') {
let shadowStyleList = [];
// 处理文本外阴影
if (layer.style && layer.style.shadows) {
// 查找所有可用的阴影
let shadowList = [];
layer.style.shadows.map(item => {
if (item.isEnabled) {
shadowList.push(item);
}
});
for (let item of shadowList) {
let proStyle = getTextShadowStyle(item, layer);
shadowStyleList.push(proStyle);
}
return {
textShadow: shadowStyleList
};
}
}
else {
// 盒子阴影的设置
let shadowStyleList = [], innerShadowStyleList = [];
if (layer.style && layer.style.shadows) {
// 查找所有可用的阴影
let shadowList = [];
layer.style.shadows.map(item => {
if (item.isEnabled) {
shadowList.push(item);
}
});
for (let item of shadowList) {
let proStyle = getShadowStyle(item, layer);
shadowStyleList.push(proStyle);
}
}
if (layer.style && layer.style.innerShadows) {
let innerShadowList = [];
layer.style.innerShadows.map(item => {
if (item.isEnabled) {
innerShadowList.push(item);
}
});
for (let item of innerShadowList) {
let proStyle = getShadowStyle(item, layer, 'inset');
innerShadowStyleList.push(proStyle);
}
}
return {
boxShadow: [...shadowStyleList.reverse(), ...innerShadowStyleList.reverse()]
};
}
};