feat(showcase): rewrite the webpage using preact for future development (2/3)

add wallpaper engine settings
This commit is contained in:
Haoyu Xu
2023-01-08 08:04:39 -05:00
parent 2611b11496
commit 06c16d53a5
2 changed files with 110 additions and 32 deletions

View File

@@ -61,41 +61,88 @@ export default function Settings({
spinePlayer.setFps(value) spinePlayer.setFps(value)
} }
useEffect(() => {
const handleListener = (e) => {
setFPS(e.detail)
}
subscribe("settings:fps", handleListener)
return () => unsubscribe("settings:fps", handleListener)
}, [spinePlayer])
const setLogoDisplay = (flag) => { const setLogoDisplay = (flag) => {
setShowLogo(flag) setShowLogo(flag)
logoEl.hidden = flag; logoEl.hidden = flag;
} }
useEffect(() => {
const handleListener = (e) => {
setLogoDisplay(e.detail)
}
subscribe("settings:logo", handleListener)
return () => unsubscribe("settings:logo", handleListener)
}, [logoEl])
const setLogo = (src, invert_filter) => {
logoEl.src = src
resize()
setLogoInvertFilter(invert_filter)
}
const setLogoImage = (e) => { const setLogoImage = (e) => {
readFile( readFile(
e, e,
(readerEvent) => { (readerEvent) => {
const content = readerEvent.target.result; const content = readerEvent.target.result;
logoEl.src = content setLogo(content, false)
resize()
setLogoInvertFilter(false)
}, },
() => setLogoClearDisabled(false) () => setLogoClearDisabled(false)
) )
} }
useEffect(() => {
const handleListener = (e) => {
setLogo(e.detail)
}
subscribe("settings:image:set", handleListener)
return () => unsubscribe("settings:image:set", handleListener)
}, [logoEl])
const resetLogoImage = () => { const resetLogoImage = () => {
logoEl.src = defaultLogoImage setLogo(defaultLogoImage, defaultInvertFilter)
resize()
setLogoInvertFilter(defaultInvertFilter)
setLogoClearDisabled(true) setLogoClearDisabled(true)
} }
useEffect(() => {
subscribe("settings:image:reset", resetLogoImage)
return () => unsubscribe("settings:image:reset", resetLogoImage)
}, [logoEl])
const setLogoRatio = (value) => { const setLogoRatio = (value) => {
setRatio(value) setRatio(value)
resize(value) resize(value)
} }
useEffect(() => {
const handleListener = (e) => {
setLogoRatio(e.detail)
}
subscribe("settings:ratio", handleListener)
return () => unsubscribe("settings:ratio", handleListener)
}, [logoEl])
const setLogoOpacity = (value) => { const setLogoOpacity = (value) => {
setOpacity(value) setOpacity(value)
logoEl.style.opacity = value / 100 logoEl.style.opacity = value / 100
} }
useEffect(() => {
const handleListener = (e) => {
setLogoOpacity(e.detail)
}
subscribe("settings:opacity", handleListener)
return () => unsubscribe("settings:opacity", handleListener)
}, [logoEl])
const setLogoInvertFilter = (flag) => { const setLogoInvertFilter = (flag) => {
if (!flag) { if (!flag) {
logoEl.style.filter = "invert(0)" logoEl.style.filter = "invert(0)"
@@ -104,22 +151,39 @@ export default function Settings({
} }
} }
const setBackgoundImage = (v) => {
document.body.style.backgroundImage = v
}
const setBackground = (e) => { const setBackground = (e) => {
readFile( readFile(
e, e,
(readerEvent) => { (readerEvent) => {
const content = readerEvent.target.result; const content = readerEvent.target.result;
document.body.style.backgroundImage = `url("${content}")` setBackgoundImage(`url("${content}")`)
}, },
() => setBackgroundClearDisabled(false) () => setBackgroundClearDisabled(false)
) )
} }
useEffect(() => {
const handleListener = (e) => {
setBackgoundImage(e.detail)
}
subscribe("settings:background:set", handleListener)
return () => unsubscribe("settings:background:set", handleListener)
}, [])
const resetBackground = () => { const resetBackground = () => {
document.body.style.backgroundImage = defaultBackgroundImage setBackgoundImage(defaultBackgroundImage)
setBackgroundClearDisabled(true) setBackgroundClearDisabled(true)
} }
useEffect(() => {
subscribe("settings:background:reset", resetLogoImage)
return () => unsubscribe("settings:background:reset", resetLogoImage)
}, [])
const positionPadding = (key, value) => { const positionPadding = (key, value) => {
switch (key) { switch (key) {
case "left": case "left":
@@ -153,6 +217,14 @@ export default function Settings({
} }
} }
useEffect(() => {
const handleListener = (e) => {
positionPadding(e.detail.key, e.detail.value)
}
subscribe("settings:position:set", handleListener)
return () => unsubscribe("settings:position:set", handleListener)
}, [spinePlayer])
const positionReset = () => { const positionReset = () => {
setPadLeft(defaultPadLeft) setPadLeft(defaultPadLeft)
setPadRight(defaultPadRight) setPadRight(defaultPadRight)
@@ -161,6 +233,11 @@ export default function Settings({
spinePlayer.updateViewport(defaultViewport) spinePlayer.updateViewport(defaultViewport)
} }
useEffect(() => {
subscribe("settings:position:reset", positionReset)
return () => unsubscribe("settings:position:reset", positionReset)
}, [spinePlayer])
useEffect(() => { useEffect(() => {
if (logoEl) { if (logoEl) {
resize() resize()

View File

@@ -4,64 +4,65 @@ window.wallpaperPropertyListener = {
applyGeneralProperties: function (properties) { applyGeneralProperties: function (properties) {
if (properties.fps) { if (properties.fps) {
// use custom event // use custom event
publish('fps', properties.fps.value) publish('settings:fps', properties.fps.value)
} }
}, },
applyUserProperties: function (properties) { applyUserProperties: function (properties) {
if (properties.logo) { if (properties.logo) {
publish('logo', properties.logo.value) publish('settings:logo', !properties.logo.value)
} }
if (properties.logoratio) { if (properties.logoratio) {
if (properties.logoratio.value) { if (properties.logoratio.value) {
publish('logoratio', properties.logoratio.value) publish('settings:ratio', properties.logoratio.value)
} }
} }
if (properties.logoopacity) { if (properties.logoopacity) {
if (properties.logoopacity.value) { if (properties.logoopacity.value) {
publish('logoopacity', properties.logoopacity.value) publish('settings:opacity', properties.logoopacity.value)
} }
} }
if (properties.logoimage) { if (properties.logoimage) {
if (properties.logoimage.value) { if (properties.logoimage.value) {
publish('logoimage', properties.logoimage.value) publish('settings:image:set', 'file:///' + properties.logoimage.value)
// var logoImage = 'file:///' + properties.logoimage.value;
// settings.setLogo(logoImage, true);
} else { } else {
publish('logoimage', null) publish('settings:image:reset')
// settings.resetLogo();
} }
} }
if (properties.background) { if (properties.background) {
if (properties.background.value) { if (properties.background.value) {
publish('background', properties.background.value) publish('settings:background:set', 'file:///' + properties.background.value)
// var background = 'file:///' + properties.background.value;
// settings.setBackground(background);
} else { } else {
publish('background', null) publish('settings:background:reset')
// settings.resetBackground();
} }
} }
if (properties.position) { if (properties.position) {
if (!properties.position.value) { if (!properties.position.value) {
publish('position', null) publish('settings:position:reset')
// settings.positionReset();
} }
} }
if (properties.paddingleft) { if (properties.paddingleft) {
publish('paddingleft', properties.paddingleft.value) publish('settings:position:set', {
// settings.positionPadding("padLeft", properties.paddingleft.value) key: "left",
value: properties.paddingleft.value
})
} }
if (properties.paddingright) { if (properties.paddingright) {
publish('paddingright', properties.paddingright.value) publish('settings:position:set', {
// settings.positionPadding("padRight", properties.paddingright.value) key: "right",
value: properties.paddingright.value
})
} }
if (properties.paddingtop) { if (properties.paddingtop) {
publish('paddingtop', properties.paddingtop.value) publish('settings:position:set', {
// settings.positionPadding("padTop", properties.paddingtop.value) key: "top",
value: properties.paddingtop.value
})
} }
if (properties.paddingbottom) { if (properties.paddingbottom) {
publish('paddingbottom', properties.paddingbottom.value) publish('settings:position:set', {
// settings.positionPadding("padBottom", properties.paddingbottom.value) key: "bottom",
value: properties.paddingbottom.value
})
} }
}, },
}; };