UNPKG

@ant-design/pro-layout

Version:
148 lines (128 loc) 5.72 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); require("antd/es/config-provider/style"); var _configProvider = _interopRequireDefault(require("antd/es/config-provider")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); /** * 返回当前显示设备的物理像素分辨率与CSS像素分辨率之比 * * @param context * @see api 有些废弃了,其实类型 CanvasRenderingContext2D */ var getPixelRatio = function getPixelRatio(context) { if (!context) { return 1; } var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / backingStore; }; var WaterMark = function WaterMark(props) { var children = props.children, style = props.style, className = props.className, markStyle = props.markStyle, markClassName = props.markClassName, _props$zIndex = props.zIndex, zIndex = _props$zIndex === void 0 ? 9 : _props$zIndex, _props$gapX = props.gapX, gapX = _props$gapX === void 0 ? 212 : _props$gapX, _props$gapY = props.gapY, gapY = _props$gapY === void 0 ? 222 : _props$gapY, _props$width = props.width, width = _props$width === void 0 ? 120 : _props$width, _props$height = props.height, height = _props$height === void 0 ? 64 : _props$height, _props$rotate = props.rotate, rotate = _props$rotate === void 0 ? -22 : _props$rotate, image = props.image, content = props.content, offsetLeft = props.offsetLeft, offsetTop = props.offsetTop, _props$fontStyle = props.fontStyle, fontStyle = _props$fontStyle === void 0 ? 'normal' : _props$fontStyle, _props$fontWeight = props.fontWeight, fontWeight = _props$fontWeight === void 0 ? 'normal' : _props$fontWeight, _props$fontColor = props.fontColor, fontColor = _props$fontColor === void 0 ? 'rgba(0,0,0,.15)' : _props$fontColor, _props$fontSize = props.fontSize, fontSize = _props$fontSize === void 0 ? 16 : _props$fontSize, _props$fontFamily = props.fontFamily, fontFamily = _props$fontFamily === void 0 ? 'sans-serif' : _props$fontFamily, customizePrefixCls = props.prefixCls; var _useContext = (0, _react.useContext)(_configProvider.default.ConfigContext), getPrefixCls = _useContext.getPrefixCls; var prefixCls = getPrefixCls('pro-layout-watermark', customizePrefixCls); var wrapperCls = (0, _classnames.default)("".concat(prefixCls, "-wrapper"), className); var waterMakrCls = (0, _classnames.default)(prefixCls, markClassName); var _useState = (0, _react.useState)(''), _useState2 = (0, _slicedToArray2.default)(_useState, 2), base64Url = _useState2[0], setBase64Url = _useState2[1]; (0, _react.useEffect)(function () { var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); var ratio = getPixelRatio(ctx); var canvasWidth = "".concat((gapX + width) * ratio, "px"); var canvasHeight = "".concat((gapY + height) * ratio, "px"); var canvasOffsetLeft = offsetLeft || gapX / 2; var canvasOffsetTop = offsetTop || gapY / 2; canvas.setAttribute('width', canvasWidth); canvas.setAttribute('height', canvasHeight); if (ctx) { // 旋转字符 rotate ctx.translate(canvasOffsetLeft * ratio, canvasOffsetTop * ratio); ctx.rotate(Math.PI / 180 * Number(rotate)); var markWidth = width * ratio; var markHeight = height * ratio; if (image) { var img = new Image(); img.crossOrigin = 'anonymous'; img.referrerPolicy = 'no-referrer'; img.src = image; img.onload = function () { ctx.drawImage(img, 0, 0, markWidth, markHeight); setBase64Url(canvas.toDataURL()); }; } else if (content) { var markSize = Number(fontSize) * ratio; ctx.font = "".concat(fontStyle, " normal ").concat(fontWeight, " ").concat(markSize, "px/").concat(markHeight, "px ").concat(fontFamily); ctx.fillStyle = fontColor; ctx.fillText(content, 0, 0); setBase64Url(canvas.toDataURL()); } } else { // eslint-disable-next-line no-console console.error('当前环境不支持Canvas'); } }, [gapX, gapY, offsetLeft, offsetTop, rotate, fontStyle, fontWeight, width, height, fontFamily, fontColor, image, content, fontSize]); return /*#__PURE__*/_react.default.createElement("div", { style: (0, _objectSpread2.default)({ position: 'relative' }, style), className: wrapperCls }, children, /*#__PURE__*/_react.default.createElement("div", { className: waterMakrCls, style: (0, _objectSpread2.default)({ zIndex: zIndex, position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', backgroundSize: "".concat(gapX + width, "px"), pointerEvents: 'none', backgroundRepeat: 'repeat', backgroundImage: "url('".concat(base64Url, "')") }, markStyle) })); }; var _default = WaterMark; exports.default = _default;