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")}

Uses (20)

Used by (1)