UNPKG

sketch-json-parse

Version:

sketch-json解析

91 lines (90 loc) 3.6 kB
"use strict"; 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()] }; } };