@ant-design/pro-layout
Version:
148 lines (128 loc) • 5.72 kB
JavaScript
"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;