{"version":3,"file":"z-capture.mjs","sources":["../../src/core/z.capture.ts"],"sourcesContent":["import html2canvas from \"html2canvas-pro\";\r\nimport {Option} from \"./option\";\r\n\r\n//‌保护对象属性‌：使用Symbol作为属性名可以隐藏对象的属性，使得在对象外部无法通过点语法访问这些属性，从而保护对象的私有属性‌\r\nconst selPen = Symbol(\"selPen\");\r\nconst selRect = Symbol(\"selRect\");\r\nconst clearCanvas = Symbol(\"clearCanvas\");\r\nconst closeCut = Symbol(\"closeCut\");\r\nconst saveCut = Symbol(\"saveCut\");\r\nconst intoShot = Symbol(\"intoShot\");\r\nconst drawImageMask = Symbol(\"drawImageMask\");\r\nconst drawCutImageShot = Symbol(\"drawCutImageShot\");\r\nconst drawOutShadow = Symbol(\"drawOutShadow\");\r\nconst restoreCanvasState = Symbol(\"restoreCanvasState\");\r\nconst cutHandleCanvasMouseMove = Symbol(\"cutHandleCanvasMouseMove\");\r\nconst drawFreeLine = Symbol(\"drawFreeLine\");\r\nconst cutHandleCanvasMouseUp = Symbol(\"cutHandleCanvasMouseUp\");\r\nconst drawScreenImg = Symbol(\"drawScreenImg\");\r\nconst cutHandleCanvasMouseDown = Symbol(\"cutHandleCanvasMouseDown\");\r\nconst isWithinCutShotArea = Symbol(\"isWithinCutShotArea\");\r\nconst drawFreeRect = Symbol(\"drawFreeRect\");\r\nconst rightCloseCut = Symbol(\"rightCloseCut\");\r\nconst correctionCoord = Symbol(\"correctionCoord\");\r\n\r\nconst defaultOption: Option = {\r\n    engine: 'html2canvas',\r\n    before: () => true,\r\n    start: () => void (0),\r\n    end: () => void (0),\r\n    save: (capImg: string) => {console.log(capImg)},\r\n    after: () => void (0),\r\n    error: (e) => {console.error(e)},\r\n}\r\n\r\nconst icons = {\r\n    pen: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M362.7 19.3L314.3 67.7 444.3 197.7l48.4-48.4c25-25 25-65.5 0-90.5L453.3 19.3c-25-25-65.5-25-90.5 0zm-71 71L58.6 323.5c-10.4 10.4-18 23.3-22.2 37.4L1 481.2C-1.5 489.7 .8 498.8 7 505s15.3 8.5 23.7 6.1l120.3-35.4c14.1-4.2 27-11.8 37.4-22.2L421.7 220.3 291.7 90.3z\"/></svg>',\r\n    rect: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path d=\"M0 448c0 17.7 14.3 32 32 32s32-14.3 32-32l0-336c0-8.8 7.2-16 16-16l336 0c17.7 0 32-14.3 32-32s-14.3-32-32-32L80 32C35.8 32 0 67.8 0 112L0 448zm160 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm-96 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zm192 0a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM416 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm0 32a32 32 0 1 0 0 64 32 32 0 1 0 0-64zm0-128a32 32 0 1 0 0-64 32 32 0 1 0 0 64z\"/></svg>',\r\n    eraser: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path d=\"M290.7 57.4L57.4 290.7c-25 25-25 65.5 0 90.5l80 80c12 12 28.3 18.7 45.3 18.7L288 480l9.4 0L512 480c17.7 0 32-14.3 32-32s-14.3-32-32-32l-124.1 0L518.6 285.3c25-25 25-65.5 0-90.5L381.3 57.4c-25-25-65.5-25-90.5 0zM297.4 416l-9.4 0-105.4 0-80-80L227.3 211.3 364.7 348.7 297.4 416z\"/></svg>',\r\n    cancel: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 384 512\"><path d=\"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"/></svg>',\r\n    save: '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path d=\"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\"/></svg>',\r\n};\r\n\r\nexport class ZCapture {\r\n    private option: Option = {};\r\n\r\n    //是否进入截图状态\r\n    private cutImageStatus = false;\r\n    //全屏截图\r\n    private cutScreenDataURL: any;\r\n    //截取后的图片\r\n    private cutShotDataURL: any;\r\n    private cutShotDataArray: Array<number> = new Array(4);\r\n\r\n    //绘制全屏canvas\r\n    private readonly captureWorkSpace: HTMLElement | undefined | null;\r\n    private readonly canvas: HTMLCanvasElement | undefined;\r\n    private readonly context: CanvasRenderingContext2D | null | undefined;\r\n\r\n    //截图操作工具栏\r\n    private readonly cutTool: HTMLElement | undefined;\r\n\r\n    /**\r\n     * 截图插件选择(默认使用：html2canvas)\r\n     * html2canvas：html转canvas方式实现截图\r\n     * mediaDevices：使用浏览器的录屏设备来实现截图\r\n     */\r\n    constructor() {\r\n        this.captureWorkSpace = window.document.getElementById(\"z-capture-workspace-0726\");\r\n        let first = false;\r\n        if (!this.captureWorkSpace) {\r\n            if ((window.top as any).z_capture) {\r\n                this.captureWorkSpace = (window.top as any).z_capture.captureWorkSpace;\r\n                this.cutTool = (window.top as any).z_capture.cutTool;\r\n                window.document.body.append(this.captureWorkSpace);\r\n            } else {\r\n                this.captureWorkSpace = window.document.createElement(\"div\");\r\n                this.captureWorkSpace.setAttribute(\"id\", \"z-capture-workspace-0726\");\r\n                this.captureWorkSpace.setAttribute(\"style\", \"z-index: 99999999999; width: 100vw; height: 100vh; position: fixed; top: 0; left: 0;\");\r\n                this.captureWorkSpace.innerHTML = `<canvas class=\"screenCanvas\" style=\"height: 100%;width: 100%\"></canvas>`;\r\n                window.document.body.append(this.captureWorkSpace);\r\n\r\n                this.cutTool = window.document.createElement(\"div\");\r\n                this.cutTool.setAttribute(\"class\", \"cut-tool\");\r\n                this.cutTool.setAttribute(\"style\", \"width: fit-content;position: absolute;background-color: white;display: flex;align-items: center;justify-content: space-around;\");\r\n                this.cutTool.innerHTML = `<style> \r\n                                               #z-capture-workspace-0726 button {width: 28px; height: 25px; border: none;vertical-align: bottom;cursor:pointer;background-color: white;fill: #767676;}\r\n                                               #z-capture-workspace-0726 button:hover {background-color: #f0f0f0;fill: #2196F3;}\r\n                                               #z-capture-workspace-0726 button svg{width: 100%; height: 100%;}\r\n                                           </style>\r\n                                           <div class=\"tool-left\">\r\n                                              <button data-btnType=\"t-pen-btn\" type=\"button\" title=\"自定义-画笔\">${icons.pen}</button>\r\n                                              <button data-btnType=\"t-rect-btn\" type=\"button\" title=\"矩形-画框\">${icons.rect}</button>\r\n                                              <button data-btnType=\"t-clear-btn\" type=\"button\" title=\"清空画布\">${icons.eraser}</button>\r\n                                           </div>\r\n                                           <span class=\"tool-fg\" style=\"display: inline-block;width: 1px;border-right: 1px solid #a9a3a3;height: 18px;margin: 0 8px;\"></span>\r\n                                           <div class=\"tool-right\">\r\n                                              <button data-btnType=\"t-cancel-btn\" type=\"button\" title=\"取消\">${icons.cancel}</button>\r\n                                              <button data-btnType=\"t-save-btn\" type=\"button\" title=\"保存\">${icons.save}</button>\r\n                                           </div>`;\r\n                first = true;\r\n            }\r\n        }\r\n        this.canvas = this.captureWorkSpace.getElementsByTagName(\"canvas\")?.[0];\r\n        this.context = this.canvas?.getContext(\"2d\");\r\n        this.cutTool = this.cutTool || this.captureWorkSpace.getElementsByClassName(\"cut-tool\")?.[0] as HTMLElement;\r\n\r\n        if (first) {\r\n            //截图编辑工具区域按钮\r\n            this.cutTool.addEventListener(\"click\", (e) => {\r\n                let target = e.target as HTMLElement;\r\n                if (target.tagName !== \"BUTTON\") {\r\n                    target = target.closest(\"button\") as HTMLElement;\r\n                }\r\n                if (target) {\r\n                    const btnType = target.getAttribute(\"data-btnType\");\r\n                    switch (btnType) {\r\n                        //画笔\r\n                        case \"t-pen-btn\":\r\n                            this[selPen]();\r\n                            (this.cutTool.querySelector(\"button[data-btnType='t-rect-btn']\") as HTMLElement).style.fill = \"#767676\";\r\n                            target.style.fill = \"#3355ff\";\r\n                            break;\r\n                        //画框\r\n                        case \"t-rect-btn\":\r\n                            this[selRect]();\r\n                            (this.cutTool.querySelector(\"button[data-btnType='t-pen-btn']\") as HTMLElement).style.fill = \"#767676\";\r\n                            target.style.fill = \"#3355ff\";\r\n                            break;\r\n                        //清空\r\n                        case \"t-clear-btn\":\r\n                            this[clearCanvas]();\r\n                            break;\r\n                        //取消\r\n                        case \"t-cancel-btn\":\r\n                            this[closeCut]();\r\n                            break;\r\n                        //保存\r\n                        case \"t-save-btn\":\r\n                            this[saveCut]();\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                }\r\n            });\r\n\r\n            this.canvas.addEventListener(\"mousedown\", (e) => {\r\n                this[cutHandleCanvasMouseDown](e);\r\n            });\r\n            this.canvas.addEventListener(\"mousemove\", (e) => {\r\n                this[cutHandleCanvasMouseMove](e);\r\n            });\r\n            this.canvas.addEventListener(\"mouseup\", (e) => {\r\n                this[cutHandleCanvasMouseUp](e);\r\n            });\r\n            this.canvas.addEventListener(\"contextmenu\", (e) => {\r\n                this[rightCloseCut](e);\r\n            });\r\n        }\r\n        this.cutTool.remove();\r\n    }\r\n\r\n    static capture(option?: Option) {\r\n        let z_capture = (window.top as any).z_capture;\r\n        if (!z_capture) {\r\n            z_capture = new ZCapture();\r\n            (window.top as any).z_capture = z_capture;\r\n        }\r\n        return z_capture.capture(option);\r\n    }\r\n\r\n\r\n    capture(option?: Option) {\r\n        this.option = Object.assign({}, defaultOption, (option || {}));\r\n        //全屏截图前事件\r\n        const before = this.option.before();\r\n        if (!before) {\r\n            return false;\r\n        }\r\n        if (this.option.engine === \"mediaDevices\") {\r\n            const video: HTMLVideoElement = document.createElement(\"video\");\r\n            const gdmOptions = {\r\n                video: {\r\n                    // 尽量使用显示器的最大分辨率\r\n                    width: {ideal: window.screen.width},\r\n                    height: {ideal: window.screen.height},\r\n                    frameRate: {ideal: 30} // 可根据需求调整帧率\r\n                },\r\n                preferCurrentTab: true\r\n            };\r\n            const mediaDevices = navigator.mediaDevices;\r\n\r\n            mediaDevices.getDisplayMedia(gdmOptions).then((captureStream: MediaStream) => {\r\n                // 截图开始事件\r\n                this.option.start();\r\n                video.srcObject = captureStream;\r\n                // 确保视频流加载完成\r\n                video.onloadedmetadata = () => {\r\n                    video.play().then(() => {\r\n                        if (this.canvas && this.context) {\r\n                            // 设置 canvas 宽高为视频分辨率的设备像素比版本\r\n                            const scale = window.devicePixelRatio || 1;\r\n                            const videoWidth = video.videoWidth * scale;\r\n                            const videoHeight = video.videoHeight * scale;\r\n\r\n                            this.canvas.width = videoWidth;\r\n                            this.canvas.height = videoHeight;\r\n\r\n                            // 绘制高分辨率的截图\r\n                            this.context.drawImage(video, 0, 0, videoWidth, videoHeight);\r\n                        }\r\n\r\n                        // 进入截图界面，初始化状态\r\n                        this[intoShot]();\r\n\r\n                        // 停止捕获的媒体流\r\n                        captureStream.getTracks().forEach((track: MediaStreamTrack) => track.stop());\r\n                        video.remove();\r\n                    });\r\n                };\r\n            }).catch((err: any) => {\r\n                // 异常处理\r\n                this.option.error(err);\r\n\r\n                if (err) {\r\n                    let e = err.toString() as string;\r\n                    if (~e.indexOf(\"NotAllowedError: Permission denied\")) {\r\n                        console.warn(\"用户取消共享屏幕，截屏失败\");\r\n                    } else {\r\n                        console.error(\"Error: \" + err);\r\n                    }\r\n                }\r\n                // 出现异常，关闭截图\r\n                this[closeCut]();\r\n            });\r\n        } else {\r\n            //截图开始事件\r\n            this.option.start();\r\n            //调整清晰度\r\n            html2canvas(document.body, {\r\n                backgroundColor: 'white',\r\n                useCORS: true, // 支持图片跨域\r\n                scale: window.devicePixelRatio || 1, // 设置为设备像素比，提升清晰度\r\n            }).then((canvas) => {\r\n                if (this.canvas && this.context) {\r\n                    // 获取原始 canvas 的尺寸\r\n                    const originalWidth = canvas.width;\r\n                    const originalHeight = canvas.height;\r\n\r\n                    // 设置目标 canvas 的尺寸与原始 canvas 一致\r\n                    this.canvas.width = originalWidth;\r\n                    this.canvas.height = originalHeight;\r\n\r\n                    // 清除目标 canvas\r\n                    this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n\r\n                    // 将高分辨率的 canvas 绘制到目标 canvas 上\r\n                    this.context.drawImage(canvas, 0, 0, originalWidth, originalHeight);\r\n                }\r\n                // 进入截图界面，初始化状态\r\n                this[intoShot]();\r\n            }).catch((error) => {\r\n                //异常\r\n                this.option.error(error);\r\n                console.error('html2canvas 生成图片失败:', error);\r\n            });\r\n\r\n\r\n        }\r\n    };\r\n\r\n    //进入截图界面，初始化状态\r\n    [intoShot]() {\r\n        this.cutImageStatus = true;\r\n\r\n        if (!window.document.getElementById(\"z-capture-workspace-0726\")) {\r\n            window.document.body.append(this.captureWorkSpace);\r\n        }\r\n\r\n        //鼠标按下状态\r\n        this.cutDown = false;\r\n        //隐藏截图工具栏状态\r\n        this.cutTool?.remove();\r\n        //待编辑保存状态\r\n        this.cutWaitStatus = false;\r\n        //图片编辑缓存状态\r\n        this.canvasState = undefined;\r\n\r\n        setTimeout(() => {\r\n            if (this.canvas) {\r\n                this.cutScreenDataURL = this.canvas.toDataURL('image/png');\r\n                this[drawImageMask](0, 0, this.canvas.width, this.canvas.height, this.MASK_OPACITY);\r\n\r\n                //截图完成\r\n                this.option.end(this.cutScreenDataURL);\r\n            }\r\n        }, 50);\r\n    }\r\n\r\n    MASK_OPACITY = 0.5;\r\n\r\n    [drawImageMask](x: number, y: number, width: number, height: number, opacity: number) {\r\n        if (this.context && this.cutImageStatus) {\r\n            this.context.fillStyle = `rgba(0,0,0,${opacity})`;\r\n            this.context.fillRect(x, y, width, height);\r\n        }\r\n\r\n    }\r\n\r\n    //绘制截图区域\r\n    [drawCutImageShot](width: number, height: number, startX: number, startY: number, rectWidth: number, rectHeight: number) {\r\n        //区域外部绘制\r\n        this[drawOutShadow](startX, startY, rectWidth, rectHeight);\r\n\r\n        //区域内部绘制\r\n        if (this.context) {\r\n            this.context.globalCompositeOperation = \"destination-over\";\r\n        }\r\n        this[drawScreenImg](width, height);\r\n    }\r\n\r\n    //绘制截图区域之外的阴影部分\r\n    [drawOutShadow](startX: number, startY: number, rectWidth: number, rectHeight: number) {\r\n        //新图形只绘制与原图像不重叠的部分，重叠部分透明\r\n        if (this.context) {\r\n            this.context.globalCompositeOperation = \"destination-out\";\r\n            this.context.fillStyle = \"rgb(0,0,0)\";\r\n            this.context.fillRect(startX, startY, rectWidth, rectHeight);\r\n        }\r\n    }\r\n\r\n    //绘制全屏截图\r\n    [drawScreenImg](width: number, height: number) {\r\n        const image = new Image();\r\n        image.src = this.cutScreenDataURL;\r\n        if (this.context) {\r\n            this.context.drawImage(image, 0, 0, width, height);\r\n        }\r\n        image.remove();\r\n    }\r\n\r\n    //鼠标按下开始坐标\r\n    private cutInitPos: Array<number> = new Array<number>(2);\r\n    //鼠标按下状态\r\n    private cutDown = false;\r\n    //待编辑保存状态\r\n    private cutWaitStatus = false;\r\n    //当前鼠标滑动状态 cut,line,rect\r\n    private cutMouseState = \"\";\r\n    //画布状态\r\n    private canvasState: undefined | ImageData;\r\n\r\n    //恢复画布状态\r\n    [restoreCanvasState]() {\r\n        if (this.canvasState && this.context) {\r\n            this.context.putImageData(this.canvasState, this.cutShotDataArray[0], this.cutShotDataArray[1]);\r\n        }\r\n    }\r\n\r\n    //校正坐标\r\n    [correctionCoord](old_x: number, old_y: number) {\r\n        // 获取 Canvas 元素的实际位置\r\n        const rect = this.canvas.getBoundingClientRect();\r\n\r\n        // 计算事件相对于 Canvas 的坐标\r\n        const scaleX = this.canvas.width / rect.width;\r\n        const scaleY = this.canvas.height / rect.height;\r\n\r\n        // 获取正确的绘制坐标\r\n        const x = (old_x - rect.left) * scaleX;\r\n        const y = (old_y - rect.top) * scaleY;\r\n        return [x, y];\r\n    }\r\n\r\n    //鼠标按下开始\r\n    [cutHandleCanvasMouseDown](event: MouseEvent) {\r\n        let [x, y] = this[correctionCoord](event.clientX, event.clientY);\r\n        //开始截图\r\n        if (!this.cutWaitStatus && this.cutImageStatus) {\r\n            this.cutInitPos = [x, y];\r\n            this.cutDown = true;\r\n            this.cutMouseState = \"cut\";\r\n        }\r\n\r\n        //编辑截图\r\n        if (this.canvas && this.context && this.cutWaitStatus && this[isWithinCutShotArea](x, y)) {\r\n            this.cutInitPos = [x, y];\r\n            this.cutDown = true;\r\n            //保存画布状态\r\n            let [sx, sy, sw, sh] = this.cutShotDataArray;\r\n            this.canvasState = this.context.getImageData(sx, sy, sw, sh);\r\n\r\n            //开始划线\r\n            if (this.cutEditStatus) {\r\n                // 开始绘制路径\r\n                this.cutMouseState = \"line\";\r\n                this.context.beginPath();\r\n                this.context.moveTo(x - this.canvas.offsetLeft, y - this.canvas.offsetTop);\r\n            }\r\n\r\n            //开始画框\r\n            if (this.cutRectStatus) {\r\n                this.cutMouseState = \"rect\";\r\n            }\r\n        }\r\n\r\n\r\n    }\r\n\r\n    //鼠标滑动进行\r\n    [cutHandleCanvasMouseMove](event: MouseEvent) {\r\n        let [x, y] = this[correctionCoord](event.clientX, event.clientY);\r\n        if (this.cutDown && this.canvas && this.context) {\r\n            const endX = x;\r\n            const endY = y;\r\n            const [startX, startY] = this.cutInitPos;\r\n            const rectWidth = endX - startX;\r\n            const rectHeight = endY - startY;\r\n            const {width, height} = this.canvas;\r\n\r\n\r\n            switch (this.cutMouseState) {\r\n                //截图中\r\n                case \"cut\":\r\n                    //清空画布\r\n                    this.context.clearRect(0, 0, width, height);\r\n                    this.cutShotDataArray = [startX, startY, rectWidth, rectHeight];\r\n                    this[drawImageMask](0, 0, width, height, this.MASK_OPACITY);\r\n                    //绘制矩形截图\r\n                    this[drawCutImageShot](width, height, startX, startY, rectWidth, rectHeight);\r\n                    break;\r\n\r\n                //划线中\r\n                case \"line\":\r\n                    if (this[isWithinCutShotArea](endX, endY)) {\r\n                        this[drawFreeLine](x - this.canvas.offsetLeft, y - this.canvas.offsetTop);\r\n                    }\r\n\r\n                    break;\r\n\r\n                //画框中\r\n                case \"rect\":\r\n                    if (this[isWithinCutShotArea](endX, endY)) {\r\n                        this[drawFreeRect](startX, startY, rectWidth, rectHeight);\r\n                    }\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    [drawFreeLine](endX: number, endY: number) {\r\n        //恢复状态\r\n        this[restoreCanvasState]();\r\n        //新图形覆盖在原图像之上\r\n        if (this.context) {\r\n            this.context.globalCompositeOperation = \"source-over\";\r\n            this.context.strokeStyle = \"red\";\r\n            this.context.lineWidth = 2;\r\n            this.context.lineTo(endX, endY);\r\n            this.context.stroke();\r\n        }\r\n    }\r\n\r\n    [drawFreeRect](startX: number, startY: number, rectWidth: number, rectHeight: number) {\r\n        //恢复状态\r\n        this[restoreCanvasState]();\r\n        //新图形覆盖在原图像之上\r\n        if (this.context) {\r\n            this.context.globalCompositeOperation = \"source-over\";\r\n            this.context.beginPath();\r\n            this.context.strokeStyle = \"red\";\r\n            this.context.lineWidth = 2;\r\n            this.context.rect(startX, startY, rectWidth, rectHeight);\r\n            this.context.stroke();\r\n        }\r\n\r\n    }\r\n\r\n    //监测坐标是否在截图区域内\r\n    [isWithinCutShotArea](x: number, y: number) {\r\n        return x >= this.cutShotDataArray[0] &&\r\n            x <= this.cutShotDataArray[0] + this.cutShotDataArray[2] &&\r\n            y >= this.cutShotDataArray[1] &&\r\n            y <= this.cutShotDataArray[1] + this.cutShotDataArray[3];\r\n    }\r\n\r\n    //鼠标抬起完成\r\n    [cutHandleCanvasMouseUp](event: MouseEvent) {\r\n        if (this.cutDown && this.context) {\r\n            switch (this.cutMouseState) {\r\n                //截图结束\r\n                case \"cut\":\r\n                    this.cutDown = false;\r\n                    this.cutWaitStatus = true;\r\n                    if (this.captureWorkSpace && this.cutTool) {\r\n                        this.captureWorkSpace.appendChild(this.cutTool);\r\n                        this.cutTool.style.left = (event.clientX - this.cutTool.clientWidth) + \"px\";\r\n                        this.cutTool.style.top = event.clientY + \"px\";\r\n                    }\r\n                    this.cutMouseState = \"\";\r\n                    break;\r\n                //结束划线\r\n                case \"line\":\r\n                    this.context.closePath();\r\n                    this.cutMouseState = \"\";\r\n                    this.cutDown = false;\r\n                    break;\r\n                //结束画框\r\n                case \"rect\":\r\n                    this.context.closePath();\r\n                    this.cutMouseState = \"\";\r\n                    this.cutDown = false;\r\n                    break;\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    //右键关闭\r\n    [rightCloseCut](event: Event) {\r\n        event.preventDefault();\r\n        this[closeCut]();\r\n    }\r\n\r\n    //关闭截图\r\n    [closeCut]() {\r\n        this.cutImageStatus = false;\r\n        this.cutWaitStatus = false;\r\n        this.captureWorkSpace.remove();\r\n        //截图之后事件\r\n        this.option.after();\r\n    }\r\n\r\n    //启用画笔编辑\r\n    cutEditStatus = false;\r\n\r\n    [selPen]() {\r\n        if (this.cutWaitStatus) {\r\n            this.cutEditStatus = true;\r\n            this.cutRectStatus = false;\r\n        }\r\n\r\n    }\r\n\r\n    //启用画框编辑\r\n    cutRectStatus = false;\r\n\r\n    [selRect]() {\r\n        if (this.cutWaitStatus) {\r\n            this.cutRectStatus = true;\r\n            this.cutEditStatus = false;\r\n        }\r\n    }\r\n\r\n    [clearCanvas]() {\r\n        if (this.canvas && this.context) {\r\n            //清空选中区域画布\r\n            const [x, y, w, h] = this.cutShotDataArray;\r\n            this.context.clearRect(x, y, w, h);\r\n\r\n            const {width, height} = this.canvas;\r\n            this.canvasState = undefined;\r\n            //绘制矩形截图背景\r\n            this[drawCutImageShot](width, height, this.cutShotDataArray[0], this.cutShotDataArray[1], this.cutShotDataArray[2], this.cutShotDataArray[3]);\r\n        }\r\n\r\n    }\r\n\r\n    //保存截图\r\n    [saveCut]() {\r\n        if (this.canvas && this.context) {\r\n            const [x, y, w, h] = this.cutShotDataArray;\r\n            const data = this.context.getImageData(x, y, w, h);\r\n\r\n            const shotCanvas = window.document.createElement(\"canvas\");\r\n            const shotContext = shotCanvas.getContext(\"2d\");\r\n\r\n            if (shotContext != null) {\r\n                shotCanvas.width = data.width;\r\n                shotCanvas.height = data.height;\r\n                shotContext.putImageData(data, 0, 0);\r\n                //jpeg格式，数据更小\r\n                this.cutShotDataURL = shotCanvas.toDataURL('image/png');\r\n                //确定保存截图\r\n                this.option.save(this.cutShotDataURL);\r\n            }\r\n            shotCanvas.remove();\r\n            this[closeCut]();\r\n        }\r\n    };\r\n}"],"names":[],"mappings":"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"}