diff --git a/app/Filament/Resources/GameResource/RelationManagers/GameScreenshotsRelationManager.php b/app/Filament/Resources/GameResource/RelationManagers/GameScreenshotsRelationManager.php index a4da48cf07..58b0846a06 100644 --- a/app/Filament/Resources/GameResource/RelationManagers/GameScreenshotsRelationManager.php +++ b/app/Filament/Resources/GameResource/RelationManagers/GameScreenshotsRelationManager.php @@ -22,11 +22,13 @@ use Filament\Schemas\Schema; use Filament\Tables; use Filament\Tables\Table; +use Illuminate\Contracts\Support\Htmlable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; +use Illuminate\Support\HtmlString; use Illuminate\Validation\ValidationException; use Spatie\Activitylog\ActivityLogger; @@ -472,7 +474,7 @@ private function getScreenshotValidationRules(): array ]); } - private function getScreenshotHelperText(): ?string + private function getScreenshotHelperText(): ?Htmlable { $system = $this->getOwnerRecord()?->system; $resolutions = $system?->screenshot_resolutions; @@ -480,23 +482,32 @@ private function getScreenshotHelperText(): ?string return null; } - $formatted = collect($resolutions) - ->map(fn (array $r) => "{$r['width']}x{$r['height']}") - ->join(', '); + $supportsUpscaling = (bool) $system->supports_upscaled_screenshots; + $isSingleResolution = count($resolutions) === 1; - $label = count($resolutions) > 1 ? 'Accepted resolutions' : 'Expected resolution'; + $natives = collect($resolutions) + ->map(fn (array $r) => "{$r['width']}×{$r['height']}") + ->join(', '); - $multiplesNote = $system->supports_upscaled_screenshots - ? ' (or 2x/3x integer multiples)' - : ''; + $lines = []; - $text = "{$label} for {$system->name}: {$formatted}{$multiplesNote}"; + if ($supportsUpscaling) { + $lines[] = ['label' => 'Recommended', 'value' => "2× or 3× native, captured at your emulator's internal resolution"]; + $lines[] = ['label' => 'Native', 'value' => $natives]; + } else { + $label = $isSingleResolution ? 'Expected resolution' : 'Accepted resolutions'; + $lines[] = ['label' => $label, 'value' => $natives]; + } if ($system->has_analog_tv_output) { - $text .= '. SMPTE 601 capture resolutions (704x480, 720x480, 720x486, 704x576, 720x576) are also accepted.'; + $lines[] = ['label' => 'Also accepted', 'value' => 'SMPTE 601 capture sizes']; } - return $text; + $html = collect($lines) + ->map(fn (array $line) => '' . e($line['label']) . ': ' . e($line['value'])) + ->join('
'); + + return new HtmlString($html); } private function shouldShowArchivedScreenshots(): bool