DVUI

stroke

Stroke path as a series of line segments. See Rect.stroke.

Only valid between Window.beginand Window.end.

Parameters

#
path:Path
Path
opts:StrokeOptions
StrokeOptions

Source

Implementation

#
pub fn stroke(path: Path, opts: StrokeOptions) void {
    if (path.points.len == 0) {
        return;
    }

    const cw = dvui.currentWindow();

    if (opts.after or !cw.render_target.rendering) {
        const new_path = path.dupe(cw.arena()) catch |err| {
            dvui.logError(@src(), err, "Could not reallocate path for render command", .{});
            return;
        };
        cw.addRenderCommand(.{ .pathStroke = .{ .path = new_path, .opts = opts } }, opts.after);
        return;
    }

    var options = opts;
    options.color = options.color.opacity(cw.alpha);

    var triangles = path.strokeTriangles(cw.lifo(), options) catch |err| {
        dvui.logError(@src(), err, "Could not get triangles for path", .{});
        return;
    };
    defer triangles.deinit(cw.lifo());
    dvui.renderTriangles(triangles, null) catch |err| {
        dvui.logError(@src(), err, "Could not draw path, opts: {any}", .{opts});
        return;
    };
}