feat(plugin page): device-photo treatment for in-game screenshots
The QAM overlay can't be captured by Steam's screenshot shortcut while a game runs, so the 'recording' and 'session-form' shots will be phone photos of the Deck. These now render with rounded corners + drop shadow + ring so a device photo looks intentional rather than like a broken screenshot. Placeholders label them 'device photo coming soon'.
This commit is contained in:
@@ -28,6 +28,10 @@ interface Shot {
|
|||||||
caption: string
|
caption: string
|
||||||
// filename the user should save the capture as (in /public/plugin/)
|
// filename the user should save the capture as (in /public/plugin/)
|
||||||
file: string
|
file: string
|
||||||
|
// true = present as a device photo (rounded, shadow) instead of a flat
|
||||||
|
// screenshot. Use for in-game shots where the QAM overlay can't be
|
||||||
|
// captured by Steam's screenshot shortcut, so a phone photo is used.
|
||||||
|
photo?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const SCREENSHOTS: Shot[] = [
|
const SCREENSHOTS: Shot[] = [
|
||||||
@@ -58,6 +62,7 @@ const SCREENSHOTS: Shot[] = [
|
|||||||
caption:
|
caption:
|
||||||
"Once in-game, open the panel and hit Start Recording. A live timer tracks your session. Stop when you're done benchmarking.",
|
"Once in-game, open the panel and hit Start Recording. A live timer tracks your session. Stop when you're done benchmarking.",
|
||||||
file: "recording.png",
|
file: "recording.png",
|
||||||
|
photo: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "session-form",
|
id: "session-form",
|
||||||
@@ -65,6 +70,7 @@ const SCREENSHOTS: Shot[] = [
|
|||||||
caption:
|
caption:
|
||||||
"After stopping, review the captured FPS, 1% lows, and power draw. Add notes, then upload straight to DeckyVault — or export to a file.",
|
"After stopping, review the captured FPS, 1% lows, and power draw. Add notes, then upload straight to DeckyVault — or export to a file.",
|
||||||
file: "session-form.png",
|
file: "session-form.png",
|
||||||
|
photo: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "entry-live",
|
id: "entry-live",
|
||||||
@@ -379,13 +385,15 @@ export function PluginPageClient() {
|
|||||||
transition={{ delay: i * 0.05 }}
|
transition={{ delay: i * 0.05 }}
|
||||||
className="rounded-xl border border-border bg-text/2 overflow-hidden flex flex-col"
|
className="rounded-xl border border-border bg-text/2 overflow-hidden flex flex-col"
|
||||||
>
|
>
|
||||||
<div className="relative aspect-[16/10] bg-gradient-to-br from-text/5 to-text/10 flex items-center justify-center">
|
<div className="relative aspect-[16/10] bg-gradient-to-br from-text/5 to-text/10 flex items-center justify-center p-3">
|
||||||
{HAS_SCREENSHOT[shot.id] ? (
|
{HAS_SCREENSHOT[shot.id] ? (
|
||||||
// eslint-disable-next-line @next/next/no-img-element
|
// eslint-disable-next-line @next/next/no-img-element
|
||||||
<img
|
<img
|
||||||
src={`/plugin/${shot.file}`}
|
src={`/plugin/${shot.file}`}
|
||||||
alt={shot.title}
|
alt={shot.title}
|
||||||
className="w-full h-full object-contain"
|
className={shot.photo
|
||||||
|
? "max-w-full max-h-full object-contain rounded-lg shadow-2xl shadow-black/40 ring-1 ring-black/20"
|
||||||
|
: "w-full h-full object-contain"}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<div className="flex flex-col items-center gap-2 text-text/30 p-6 text-center">
|
<div className="flex flex-col items-center gap-2 text-text/30 p-6 text-center">
|
||||||
@@ -394,7 +402,7 @@ export function PluginPageClient() {
|
|||||||
/plugin/{shot.file}
|
/plugin/{shot.file}
|
||||||
</span>
|
</span>
|
||||||
<span className="text-xs">
|
<span className="text-xs">
|
||||||
screenshot coming soon
|
{shot.photo ? "device photo" : "screenshot"} coming soon
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
Reference in New Issue
Block a user