From: Mark Wooding Date: Wed, 21 Jun 2023 09:43:07 +0000 (+0100) Subject: mason/dhandler (.image), static/tgal.css: Adaptive view scaling. X-Git-Url: https://git.distorted.org.uk/~mdw/tgal/commitdiff_plain/7cd805d11b686c973574dd5cab7b1cb8f907f26d?hp=fd972456d42c0d1e5031e4d12ae2ae74384e1582 mason/dhandler (.image), static/tgal.css: Adaptive view scaling. The view now picks an appropriately scaled image from the backend. The selection is rather imperfect, because it's based on the window size, with guesses at the size of the furniture, but it seems to work OK. --- diff --git a/mason/dhandler b/mason/dhandler index 4676769..0c834b9 100755 --- a/mason/dhandler +++ b/mason/dhandler @@ -222,16 +222,26 @@ Failed to find ‘<% $path |h %>’. my $urldir = join_paths $SCRIPTURL, $dir; my ($dd, $ff, $ii) = listdir $realdir; my @thumbsz = qw{smallthumb medthumb bigthumb}; + my @imgsz = sort { $SIZE{$a} <=> $SIZE{$b} } keys %SIZE; + my ($wd, $ht, $max); my %tn; - my $vw; + my %vw; my $fi = undef; FILE: for (my $i = 0; $i < @$ff; $i++) { my $f = $ff->[$i]; my $img = TrivGal::Image->new(join_paths $dir, $f->name); for my $sz (@thumbsz) { $tn{$f->name}{$sz} = $img->scale($sz); } - if ($ff->[$i]->name eq "$base$ext") - { $fi = $i; $vw = $img->scale("medium"); } + if ($ff->[$i]->name eq "$base$ext") { + $fi = $i; + ($wd, $ht) = ($img->wd, $img->ht); + $max = $img->sz; + SIZE: for my $sc (@imgsz) { + my $sz = $SIZE{$sc}; + last SIZE if $max < $sz; + $vw{$sc} = $img->scale($sc); + } + } } defined $fi or die "image not found in its folder?"; my $this = $ff->[$fi]; @@ -270,7 +280,19 @@ Failed to find ‘<% $path |h %>’. % } - + +% my ($hoff, $voff) = (60, 480); +% SIZE: for (my $i = 0; $i < @imgsz; $i++) { +% my $scale = $imgsz[$i]; +% last SIZE unless exists $vw{$scale}; +% my $scsz = $SIZE{$scale}; +% my $f = $scsz/$max; +% my ($thiswd, $thisht) = map int, ($f*$wd + $hoff, $f*$ht + $voff); + +% } + "> + % if ($link{next}) { diff --git a/static/tgal.css b/static/tgal.css index aa64878..73e3933 100644 --- a/static/tgal.css +++ b/static/tgal.css @@ -150,6 +150,11 @@ a.view { } a:link:hover.view { background: inherit; } +a.view picture { + display: flex; flex-direction: column; + flex-grow: 1; flex-basis: 0; +} + a.view img { min-width: 0; min-height: 0; max-width: 100%; max-height: 100%;