-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathpreview.tsx
90 lines (82 loc) · 3.95 KB
/
preview.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import {ipcRenderer} from "electron"
import React, {useState, useEffect, useRef} from "react"
import ReactDom from "react-dom"
import PreviewTitleBar from "./components/PreviewTitleBar"
import {TransformWrapper, TransformComponent} from "react-zoom-pan-pinch"
import {ReactCompareSlider, ReactCompareSliderHandle} from "react-compare-slider"
import functions from "./structures/functions"
import "./preview.less"
const App: React.FunctionComponent = () => {
const [oldImage, setOldImage] = useState("")
const [oldFileSize, setOldFileSize] = useState("0")
const [newImage, setNewImage] = useState("")
const [newFileSize, setNewFileSize] = useState("0")
const [zoomScale, setZoomScale] = useState(1)
const [id, setID] = useState(0)
const [title, setTitle] = useState("")
const [position, setPosition] = useState(50)
const zoomRef = useRef(null) as any
useEffect(() => {
const updateBuffer = (event: any, info: {id: number, title: string, source: string, fileSize: string, newSource: string, newFileSize: string}) => {
setOldImage(info.source)
setOldFileSize(info.fileSize)
setID(info.id)
setTitle(info.title)
resetZoom()
if (!info.newFileSize || !parseInt(info.newFileSize)) {
setNewImage(info.source)
setNewFileSize(info.fileSize)
} else {
setNewImage(info.newSource)
setNewFileSize(info.newFileSize)
}
}
ipcRenderer.on("update-buffer", updateBuffer)
ipcRenderer.on("zoom-in", zoomIn)
ipcRenderer.on("zoom-out", zoomOut)
return () => {
ipcRenderer.removeListener("update-buffer", updateBuffer)
ipcRenderer.removeListener("zoom-in", zoomIn)
ipcRenderer.removeListener("zoom-out", zoomOut)
}
}, [])
useEffect(() => {
const updateBufferRealtime = (event: any, info: {id: number, newSource: string, newFileSize: string}) => {
if (id === info.id) {
setNewImage(info.newSource)
setNewFileSize(info.newFileSize)
}
}
ipcRenderer.on("update-buffer-realtime", updateBufferRealtime)
return () => {
ipcRenderer.removeListener("update-buffer-realtime", updateBufferRealtime)
}
})
const resetZoom = () => {
zoomRef?.current!.resetTransform(0)
}
const zoomIn = () => {
zoomRef?.current!.zoomIn(0.5, 0)
}
const zoomOut = () => {
zoomRef?.current!.zoomOut(0.5, 0)
}
return (
<main className="app">
<PreviewTitleBar title={title}/>
<TransformWrapper ref={zoomRef} minScale={0.75} limitToBounds={false} minPositionX={-200} maxPositionX={200} minPositionY={-200} maxPositionY={200} onZoomStop={(ref) => setZoomScale(ref.state.scale)} wheel={{step: 0.1}} pinch={{disabled: true}} zoomAnimation={{disabled: true}} alignmentAnimation={{disabled: true}} doubleClick={{mode: "reset", animationTime: 0}}>
<TransformComponent>
<div className="preview-container">
<ReactCompareSlider
changePositionOnHover={true}
handle={<><p className="preview-text">{oldFileSize}</p><ReactCompareSliderHandle buttonStyle={{display: "none"}} linesStyle={{height: "100%", width: 1, color: "black", opacity: 0.5, cursor: "default"}}/><p className="preview-text2">{newFileSize}</p></>}
itemOne={<img src={oldImage} className="image"/>}
itemTwo={<img src={newImage} className="image"/>}
/>
</div>
</TransformComponent>
</TransformWrapper>
</main>
)
}
ReactDom.render(<App/>, document.getElementById("root"))