def element.viewport

gralha-svg-render@0.1.0.1 · svg.bend:2736

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

2736def element.viewport(+name: String, raw: List<&2, XML.Attr>, +m: Matrix, +w: F32, +h: F32, +root: Bool) -> Viewport:
2737  +as = image.layout.attrs(raw, w, h)
2738  +base = matrix.mul(m, transform(XML.attr.get(as, "transform", ""), identity()))
2739  +svg = U.string.equal(name, "svg")
2740  +width = U.choose(F32, root, w, viewport.dimension(as, "width", w))
2741  +height = U.choose(F32, root, h, viewport.dimension(as, "height", h))
2742  +origin = matrix.mul(base, U.choose(Matrix, root, identity(),
2743    translate(dimension(as, "x", w, "0"), dimension(as, "y", h, "0"))))
2744  +view = U.numbers(XML.attr.get(as, "viewBox", ""))
2745  +vw = U.nth(view, 2n, width)
2746  +vh = U.nth(view, 3n, height)
2747  U.branch(Viewport, svg, _ => Viewport{
2748      matrix.mul(origin, viewbox.matrix(view, width, height, U.trim.both(XML.attr.get(as, "preserveAspectRatio", "xMidYMid meet")))), vw, vh,
2749      U.branch(Clip, U.string.equal(XML.attr.get(as, "overflow", "hidden"), "visible"), _ => ClipAll{}, _ => viewport.clip(width, height, origin)),
2750      F32.is_gt(width, 0.0) && F32.is_gt(height, 0.0) && F32.is_gt(vw, 0.0) && F32.is_gt(vh, 0.0)},
2751    _ => Viewport{U.branch(Matrix, U.string.equal(name, "use"),
2752      _ => matrix.mul(base, translate(dimension(as, "x", w, "0"), dimension(as, "y", h, "0"))), _ => base), w, h, ClipAll{}, True{}})

Uses (26)

Used by (3)