def brush.sample
gralha-svg-render@0.1.0.1 · svg.bend:2376
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-image@0.1.0.1/image.bend as Img
2376def brush.sample(brush: Brush, +p: Point, +paintPoint: Point, next: List<&2, Scene<Brush>> -> Point -> Point -> Img.Color) -> Img.Color:
2377 match brush:
2378 case Solid{c, source}: c
2379 case Bitmap{raster, inv, nearest}:
2380 +mat = inv
2381 bitmap.sample(raster, matrix.point(mat, p), matrix.point(mat, paintPoint), nearest)
2382 case PendingContext{stroke, opacity}: Img.clear()
2383 case ContextPaint{source, matrix, opacity}:
2384 +mat = matrix
2385 color.fade(brush.sample(source, matrix.point(mat, p), matrix.point(mat, paintPoint), next), opacity)
2386 case Pattern{inv, w, h, opacity, nodes}:
2387 +matrix = inv
2388 pattern.at(matrix.point(matrix, p), matrix.point(matrix, paintPoint), w, h, opacity, nodes, next)
2389 case Tile{raster, inv, w, h, opacity, u, v, grid}: tile.sample(raster, matrix.point(inv, p), w, h, opacity, u, v, grid)
2390 case Gradient{inv, radial, start, end, radius, fr, stops, spread, opacity, linear}:
2391 +q = matrix.point(inv, paintPoint)
2392 +a = start
2393 +b = end
2394 gradient.at(U.choose(Parameter, radial, radial.parameter(q, a, b, radius, fr), linear.parameter(q, a, b)),
2395 stops, spread, opacity, linear)