Skip to documentation
SLOP

tiny.gui.paint.cpu.geometry

Reference tiny.gui paint cpu geometry

Defined in paint.cpu.

API (15)

Actions

Public operations.

Types and contracts

Public types and contracts.

No direct callersNo direct callspaint.cpugeometry
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallsNo direct callspaint.accyrenderCommandsCpupaint.accyrenderCommandsCpuWithImagespaint.accyrunPackedCommandsCpupaint.accyrunPackedTileRangesCpuprivate sourcelib.gui.src.paint.accyrunPaintFrameLifecycle+28 morepaint.Regionfull
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callspaint.cpu.geometryclippedBoundstest sourcelib.gui.src.paint.cpu.geometrytest: floorClamp and ceilClamp bound ...private sourcelib.gui.src.paint.cpu.spanrasterStrokepaint.regionsfromRectpaint.cpu.geometryceilClamp
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callspaint.cpu.geometryinsideRoundedpaint.cpu.geometryroundedRectOutsideDistanceprivate sourcelib.gui.src.paint.cpu.spanrasterFillprivate sourcelib.gui.src.paint.cpu.spanrasterLinearGradientprivate sourcelib.gui.src.paint.cpu.spanrasterShadowprivate sourcelib.gui.src.paint.cpu.spanrasterStrokepaint.cpu.geometryclampedRadius
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest sourcelib.gui.src.paint.cpu.geometrytest: clippedBounds culls positive-in...private sourcelib.gui.src.paint.cpu.spanrasterCommandpaint.cpu.geometryceilClamppaint.cpu.geometryfloorClamppaint.cpu.geometryregionRectpaint.cpu.geometryclippedBounds
Static calls · unresolved targets: 0 · external targets: 1.
Called byCallsNo direct callsprivate sourcelib.gui.src.paint.cpu.spanrasterCommandpaint.cpu.geometryfiniteRects
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callspaint.cpu.geometryclippedBoundstest sourcelib.gui.src.paint.cpu.geometrytest: floorClamp and ceilClamp bound ...private sourcelib.gui.src.paint.cpu.spanrasterStrokepaint.regionsfromRectpaint.cpu.geometryfloorClamp
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsprivate sourcelib.gui.src.paint.cpu.coveragestrokeCoversprivate sourcelib.gui.src.paint.cpu.spanrasterStrokepaint.cpu.geometryinset
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsprivate sourcelib.gui.src.paint.cpu.coveragecoverspaint.cpu.geometryinsideRoundedpaint.cpu.geometryinside
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsprivate sourcelib.gui.src.paint.cpu.coveragecoversprivate sourcelib.gui.src.paint.cpu.coverageshadowCoversprivate sourcelib.gui.src.paint.cpu.coveragestrokeCoverstest sourcelib.gui.src.paint.cpu.geometrytest: insideRounded keeps straight ba...private sourcelib.gui.src.paint.imagerasterShadowMaskpaint.cpu.geometryclampedRadiuspaint.cpu.geometryinsidepaint.cpu.geometryinsideRounded
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callspaint.cpu.geometryclippedBoundspaint.cpu.geometryregionRect
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsprivate sourcelib.gui.src.paint.cpu.coverageshadowAlphaAtprivate sourcelib.gui.src.paint.cpu.coverageshadowCoverspaint.cpu.geometryclampedRadiuspaint.cpu.geometryroundedRectOutsideDistance
Static calls · unresolved targets: 0 · external targets: 0.

Source: lib/gui/src/paint/cpu/geometry.zig

zig
const std = @import("std");const gui = @import("../../root.zig");const paint_root = @import("../root.zig");const Command = paint_root.command.Command;const Rect = gui.layout.Rect;pub const Bounds = struct {    x0: u32,    y0: u32,    x1: u32,    y1: u32,};pub const Region = struct {    x: u32 = 0,    y: u32 = 0,    width: u32 = 0,    height: u32 = 0,    pub fn full(width: u32, height: u32) Region {        return .{ .width = width, .height = height };    }    pub fn pixelCount(self: Region) usize {        return @as(usize, self.width) * @as(usize, self.height);    }    pub fn clamped(self: Region, width: u32, height: u32) Region {        if (self.x >= width or self.y >= height) return .{ .x = self.x, .y = self.y };        return .{            .x = self.x,            .y = self.y,            .width = @min(self.width, width - self.x),            .height = @min(self.height, height - self.y),        };    }};pub fn clippedBounds(width: u32, height: u32, paint: Command, region: Region) ?Bounds {    const bounds = paint_root.command.bounds(paint);    const region_rect = regionRect(region);    const x0 = floorClamp(@max(@max(bounds.x, paint.clip.x), region_rect.x), width);    const y0 = floorClamp(@max(@max(bounds.y, paint.clip.y), region_rect.y), height);    const x1 = ceilClamp(@min(@min(bounds.x + bounds.width, paint.clip.x + paint.clip.width), region_rect.x + region_rect.width), width);    const y1 = ceilClamp(@min(@min(bounds.y + bounds.height, paint.clip.y + paint.clip.height), region_rect.y + region_rect.height), height);    if (x0 >= x1 or y0 >= y1) return null;    return .{ .x0 = x0, .y0 = y0, .x1 = x1, .y1 = y1 };}pub fn regionRect(region: Region) Rect {    return .{        .x = @floatFromInt(region.x),        .y = @floatFromInt(region.y),        .width = @floatFromInt(region.width),        .height = @floatFromInt(region.height),    };}pub fn floorClamp(value: f32, limit: u32) u32 {    if (std.math.isNan(value) or value <= 0) return 0;    if (!std.math.isFinite(value)) return limit;    const floored = @floor(value);    if (floored >= @as(f32, @floatFromInt(limit))) return limit;    return @intFromFloat(floored);}pub fn ceilClamp(value: f32, limit: u32) u32 {    if (std.math.isNan(value) or value <= 0) return 0;    if (!std.math.isFinite(value)) return limit;    const ceiled = @ceil(value);    if (ceiled >= @as(f32, @floatFromInt(limit))) return limit;    return @intFromFloat(ceiled);}pub fn inside(rect: Rect, x: f32, y: f32) bool {    return x >= rect.x and y >= rect.y and x < rect.x + rect.width and y < rect.y + rect.height;}pub fn insideRounded(rect: Rect, radius: f32, x: f32, y: f32) bool {    if (!inside(rect, x, y)) return false;    const clamped = clampedRadius(rect, radius);    if (clamped <= 0) return true;    const inner_x0 = rect.x + clamped;    const inner_y0 = rect.y + clamped;    const inner_x1 = rect.x + rect.width - clamped;    const inner_y1 = rect.y + rect.height - clamped;    const cx = @max(inner_x0, @min(x, inner_x1));    const cy = @max(inner_y0, @min(y, inner_y1));    const dx = x - cx;    const dy = y - cy;    return dx * dx + dy * dy <= clamped * clamped;}pub fn roundedRectOutsideDistance(rect: Rect, radius: f32, x: f32, y: f32) f32 {    const clamped = clampedRadius(rect, radius);    const inner_x0 = rect.x + clamped;    const inner_y0 = rect.y + clamped;    const inner_x1 = rect.x + rect.width - clamped;    const inner_y1 = rect.y + rect.height - clamped;    const cx = @max(inner_x0, @min(x, inner_x1));    const cy = @max(inner_y0, @min(y, inner_y1));    const dx = x - cx;    const dy = y - cy;    return @max(@sqrt(dx * dx + dy * dy) - clamped, 0);}pub fn clampedRadius(rect: Rect, radius: f32) f32 {    return @min(@max(radius, 0), @min(rect.width, rect.height) * 0.5);}pub fn inset(rect: Rect, value: f32) Rect {    return .{        .x = rect.x + value,        .y = rect.y + value,        .width = @max(rect.width - value * 2, 0),        .height = @max(rect.height - value * 2, 0),    };}pub fn finiteRects(rect: Rect, clip: Rect) bool {    return !std.math.isNan(rect.x) and !std.math.isNan(rect.y) and        !std.math.isNan(rect.width) and !std.math.isNan(rect.height) and        !std.math.isNan(clip.x) and !std.math.isNan(clip.y) and        !std.math.isNan(clip.width) and !std.math.isNan(clip.height);}test "floorClamp and ceilClamp bound non-finite and negative values" {    try std.testing.expectEqual(@as(u32, 0), floorClamp(-3.5, 10));    try std.testing.expectEqual(@as(u32, 0), floorClamp(std.math.nan(f32), 10));    try std.testing.expectEqual(@as(u32, 10), floorClamp(400, 10));    try std.testing.expectEqual(@as(u32, 4), ceilClamp(3.5, 10));    try std.testing.expectEqual(@as(u32, 0), ceilClamp(std.math.inf(f32) * -1, 10));    try std.testing.expectEqual(@as(u32, 10), ceilClamp(std.math.inf(f32), 10));    try std.testing.expectEqual(@as(u32, 10), floorClamp(std.math.inf(f32), 10));    try std.testing.expectEqual(@as(u32, 0), floorClamp(std.math.inf(f32) * -1, 10));}test "clippedBounds culls positive-infinite geometry instead of leaking outside the region" {    const inf = std.math.inf(f32);    const region = Region{ .x = 3, .y = 2, .width = 4, .height = 4 };    const command = Command{        .kind = .fill,        .rect = .{ .x = inf, .y = 1, .width = 5, .height = 5 },        .clip = .{ .x = 0, .y = 0, .width = 10, .height = 8 },        .color = .{ .r = 1, .g = 2, .b = 3, .a = 255 },    };    try std.testing.expectEqual(@as(?Bounds, null), clippedBounds(10, 8, command, region));    const clipped_away = Command{        .kind = .fill,        .rect = .{ .x = 1, .y = 1, .width = 5, .height = 5 },        .clip = .{ .x = inf, .y = 0, .width = 10, .height = 8 },        .color = .{ .r = 1, .g = 2, .b = 3, .a = 255 },    };    try std.testing.expectEqual(@as(?Bounds, null), clippedBounds(10, 8, clipped_away, region));}test "insideRounded keeps straight bands and rejects corners" {    const rect = Rect{ .x = 0, .y = 0, .width = 10, .height = 10 };    try std.testing.expect(insideRounded(rect, 3, 5, 0.1));    try std.testing.expect(!insideRounded(rect, 3, 0.2, 0.2));    try std.testing.expect(insideRounded(rect, 3, 3, 3));}

Source: lib/gui/src/paint/cpu/root.zig:3

zig
pub const geometry = render.geometry;

Complete caller list for paint.Region.full

33 direct callers.

Audit

Definitions16
Public names26
Members8
Version26.7.0
Revisiondaab053ee433