def bitmap.layout
gralha-svg-render@0.1.0.1 · svg.bend:2655
import gralha-svg-render@0.1.0.1/svg.bend as Svg
import Base
import gralha-text-scan@0.1.0.1/scan.bend as U
import gralha-xml-doc@0.1.0.1/xml.bend as XML
2655def bitmap.layout(+raster: Raster, +as: List<&2, XML.Attr>, +vw: F32, +vh: F32) -> EmbeddedImage:
2656 Raster{origin, step, width, height, depth, linear, pixels} = raster
2657 +iw = U32.to_f32(width)
2658 +ih = U32.to_f32(height)
2659 +aw = XML.attr.get(as, "width", "auto")
2660 +ah = XML.attr.get(as, "height", "auto")
2661 +autoW = U.string.equal(aw, "auto")
2662 +autoH = U.string.equal(ah, "auto")
2663 +rw = dimension(as, "width", vw, "0")
2664 +rh = dimension(as, "height", vh, "0")
2665 +w = U.choose(F32, autoW, U.choose(F32, autoH, iw, (rh * iw / U.max(ih, 0.000001) : F32)), rw)
2666 +h = U.choose(F32, autoH, U.choose(F32, autoW, ih, (rw * ih / U.max(iw, 0.000001) : F32)), rh)
2667 +attrs = {Con{XML.Attr{"width", F32.show(w)}, Con{XML.Attr{"height", F32.show(h)}, as}} : List<&2, XML.Attr>}
2668 +inv = matrix.inverse(matrix.mul(translate(dimension(as, "x", vw, "0"), dimension(as, "y", vh, "0")), viewbox.matrix(Con{0.0, Con{0.0, Con{iw, Con{ih, Nil{}}}}}, w, h, U.trim.both(XML.attr.get(as, "preserveAspectRatio", "xMidYMid meet")))))
2669 +rendering = XML.attr.get(as, "image-rendering", "auto")
2670 EmbeddedImage{raster, attrs, inv, U.string.equal(rendering, "pixelated") || U.string.equal(rendering, "crisp-edges") || U.string.equal(rendering, "optimizeSpeed")}