Added full clay border support to draw #28

Merged
zack merged 4 commits from clay-border into master 2026-05-12 04:47:23 +00:00
Showing only changes of commit 7febc2d200 - Show all commits
+5 -14
View File
@@ -52,15 +52,6 @@ clear_clay_per_frame :: proc() {
clear(&GLOB.clay_merge_open_stack) clear(&GLOB.clay_merge_open_stack)
} }
// ---------------------------------------------------------------------------------------------------------------------
// ----- Conversion helpers ------------
// ---------------------------------------------------------------------------------------------------------------------
// Convert clay.Color ([4]c.float in 0255 range) to Color.
color_from_clay :: #force_inline proc(clay_color: clay.Color) -> Color {
return Color{u8(clay_color[0]), u8(clay_color[1]), u8(clay_color[2]), u8(clay_color[3])}
}
// --------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------
// ----- Image data (Clay RenderCommandType.Image payload) ------------ // ----- Image data (Clay RenderCommandType.Image payload) ------------
// --------------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------------
@@ -446,7 +437,7 @@ apply_clay_border_merge_to_primitive :: proc(
// Set the outline bit in the packed flags field (low byte = Shape_Kind, bits 8+ = Shape_Flags). // Set the outline bit in the packed flags field (low byte = Shape_Kind, bits 8+ = Shape_Flags).
prim.flags |= u32(transmute(u8)Shape_Flags{.Outline}) << 8 prim.flags |= u32(transmute(u8)Shape_Flags{.Outline}) << 8
prim.effects.outline_color = color_from_clay(border_data.color) prim.effects.outline_color = Color(border_data.color)
prim.effects.outline_packed = pack_f16_pair(f16(uniform_width * dpi_scale), 0) prim.effects.outline_packed = pack_f16_pair(f16(uniform_width * dpi_scale), 0)
if candidate.kind == .Fill_Texture { if candidate.kind == .Fill_Texture {
@@ -504,7 +495,7 @@ dispatch_clay_command :: proc(
c_text, c_text,
get_font(render_data.fontId, render_data.fontSize), get_font(render_data.fontId, render_data.fontSize),
) )
prepare_text(layer, Text{sdl_text, {bounds.x, bounds.y}, color_from_clay(render_data.textColor)}) prepare_text(layer, Text{sdl_text, {bounds.x, bounds.y}, Color(render_data.textColor)})
case clay.RenderCommandType.Image: case clay.RenderCommandType.Image:
// Any texture // Any texture
render_data := render_command.renderData.image render_data := render_command.renderData.image
@@ -518,7 +509,7 @@ dispatch_clay_command :: proc(
bottom_left = corner_radii_clay.bottomLeft, bottom_left = corner_radii_clay.bottomLeft,
} }
background_color := color_from_clay(render_data.backgroundColor) background_color := Color(render_data.backgroundColor)
uv_rect, sampler, fit_rect := fit_params(img_data.fit, bounds, img_data.texture_id) uv_rect, sampler, fit_rect := fit_params(img_data.fit, bounds, img_data.texture_id)
if background_color.a > 0 { if background_color.a > 0 {
@@ -597,7 +588,7 @@ dispatch_clay_command :: proc(
case clay.RenderCommandType.Rectangle: case clay.RenderCommandType.Rectangle:
render_data := render_command.renderData.rectangle render_data := render_command.renderData.rectangle
corner_radii_clay := render_data.cornerRadius corner_radii_clay := render_data.cornerRadius
background_color := color_from_clay(render_data.backgroundColor) background_color := Color(render_data.backgroundColor)
radii := Rectangle_Radii { radii := Rectangle_Radii {
top_left = corner_radii_clay.topLeft, top_left = corner_radii_clay.topLeft,
top_right = corner_radii_clay.topRight, top_right = corner_radii_clay.topRight,
@@ -624,7 +615,7 @@ dispatch_clay_command :: proc(
clay_emit_partial_border( clay_emit_partial_border(
layer, layer,
bounds, bounds,
color_from_clay(render_data.color), Color(render_data.color),
render_data.width, render_data.width,
render_data.cornerRadius, render_data.cornerRadius,
) )