Skip to content

Commit 69302ad

Browse files
committed
feat: update example page
1 parent dedc86f commit 69302ad

File tree

2 files changed

+103
-13
lines changed

2 files changed

+103
-13
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
"node-sass": "4.12.0",
8989
"npm-run-all": "4.1.5",
9090
"postcss-loader": "3.0.0",
91+
"pressure": "2.1.2",
9192
"prettier": "1.17.1",
9293
"react": "16.8.6",
9394
"react-dom": "16.8.6",

src/example/index.tsx

+102-13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import React, {
66
useState
77
} from 'react'
88
import { render } from 'react-dom'
9+
import Pressure from 'pressure'
910
import { useSvgDrawing } from '../'
1011

1112
const getRandomInt = (max: number): number =>
@@ -33,35 +34,120 @@ const Example = () => {
3334
width: 500,
3435
height: 500
3536
})
36-
37+
const [randomPen, switchRandom] = useState<boolean>(false)
3738
const [xml, setXml] = useState('')
39+
const [penMode, setPenMode] = useState<string>('normal')
40+
const [penWidth, setPenWidth] = useState<number>(5)
41+
const [penThinnerWidth, setPenThinnerWidth] = useState<number>(0)
3842
const handleColor = useCallback(() => {
3943
changePenColor(getRandomColor())
4044
}, [changePenColor])
4145

4246
const handlePenWidth = useCallback(
4347
(e: React.ChangeEvent<HTMLInputElement>) => {
48+
setPenWidth(Number(e.target.value))
4449
changePenWidth(Number(e.target.value))
4550
},
4651
[changePenWidth]
4752
)
4853
const handleChangeXML = useCallback(() => {
4954
setXml(getSvgXML())
5055
}, [getSvgXML])
56+
const handleChangeMode = useCallback(
57+
(e: React.ChangeEvent<HTMLInputElement>) => {
58+
setPenMode(e.target.value)
59+
},
60+
[]
61+
)
62+
const handleUpdatePenConfig = useCallback(
63+
(e: any) => {
64+
if (penMode === 'rainbow') {
65+
changePenColor(getRandomColor())
66+
return
67+
}
68+
if (penMode === 'random') {
69+
changePenWidth(getRandomInt(50) + 5)
70+
return
71+
}
72+
if (penMode == 'thinner') {
73+
changePenWidth(penThinnerWidth)
74+
}
75+
if (penMode === 'normal') {
76+
changePenWidth(penWidth)
77+
}
78+
},
79+
[penMode, penWidth, changePenWidth, changePenColor, penThinnerWidth]
80+
)
81+
// TODO: Fix Can not switch normal pen.
82+
const pressureChange = useCallback(
83+
(force: any, event: any) => {
84+
setPenThinnerWidth(30 - Math.floor(force * 40))
85+
},
86+
[setPenThinnerWidth]
87+
)
88+
89+
// Pressure -> https://github.com/stuyam/pressure
90+
useEffect(() => {
91+
if (!divRef.current) return
92+
Pressure.set(divRef.current, {
93+
change: pressureChange
94+
})
95+
}, [divRef, pressureChange])
5196
return (
5297
<Fragment>
53-
<div>
54-
pen width
55-
<input
56-
type="range"
57-
defaultValue="5"
58-
min={1}
59-
max={50}
60-
onChange={handlePenWidth}
61-
/>
62-
</div>
63-
<button onClick={undo}>Undo</button>
64-
<button onClick={handleColor}>Change Color</button>
98+
<fieldset>
99+
<label>
100+
<input
101+
type="checkbox"
102+
checked={penMode === 'normal'}
103+
value="normal"
104+
onChange={handleChangeMode}
105+
/>
106+
Normal pen.
107+
</label>
108+
<label>
109+
<input
110+
type="checkbox"
111+
checked={penMode === 'thinner'}
112+
value="thinner"
113+
onChange={handleChangeMode}
114+
/>
115+
Pen becoming thinner.
116+
</label>
117+
<label>
118+
<input
119+
type="checkbox"
120+
checked={penMode === 'random'}
121+
value="random"
122+
onChange={handleChangeMode}
123+
/>
124+
Pen becoming Random Width.
125+
</label>
126+
<label>
127+
<input
128+
type="checkbox"
129+
checked={penMode === 'rainbow'}
130+
value="rainbow"
131+
onChange={handleChangeMode}
132+
/>
133+
Rainbow pen.
134+
</label>
135+
{['normal', 'rainbow'].includes(penMode) && (
136+
<div>
137+
pen width
138+
<input
139+
type="range"
140+
value={penWidth}
141+
min={1}
142+
max={50}
143+
onChange={handlePenWidth}
144+
/>
145+
</div>
146+
)}
147+
{penMode !== 'rainbow' && (
148+
<button onClick={handleColor}>Change Color</button>
149+
)}
150+
</fieldset>
65151
<div
66152
style={{
67153
display: 'flex',
@@ -75,9 +161,12 @@ const Example = () => {
75161
border: '1px solid #eee',
76162
margin: 'auto'
77163
}}
164+
onMouseMove={handleUpdatePenConfig}
165+
onTouchMove={handleUpdatePenConfig}
78166
onTouchEnd={handleChangeXML}
79167
onMouseLeave={handleChangeXML}
80168
/>
169+
<button onClick={undo}>Undo</button>
81170
<button onClick={drawingClear}>Clear</button>
82171
<button onClick={download}>Download SVG</button>
83172
</div>

0 commit comments

Comments
 (0)