diff --git a/bindings/odin/clay-odin/clay.odin b/bindings/odin/clay-odin/clay.odin index a0e615b..d677772 100644 --- a/bindings/odin/clay-odin/clay.odin +++ b/bindings/odin/clay-odin/clay.odin @@ -128,12 +128,17 @@ CustomElementConfig :: struct { customData: rawptr, } +BorderWidth :: struct { + left: u16, + right: u16, + top: u16, + bottom: u16, + betweenChildren: u16, +} + BorderElementConfig :: struct { - left: BorderData, - right: BorderData, - top: BorderData, - bottom: BorderData, - betweenChildren: BorderData, + color: Color, + width: BorderWidth, } ScrollElementConfig :: struct { @@ -141,10 +146,6 @@ ScrollElementConfig :: struct { vertical: bool, } -SharedElementConfig :: struct { - cornerRadius: CornerRadius -} - FloatingAttachPointType :: enum EnumBackingType { LEFT_TOP, LEFT_CENTER, @@ -170,29 +171,56 @@ PointerCaptureMode :: enum EnumBackingType { FloatingElementConfig :: struct { offset: Vector2, expand: Dimensions, - zIndex: u16, parentId: u32, + zIndex: i32, attachment: FloatingAttachPoints, pointerCaptureMode: PointerCaptureMode, } -ElementConfigUnion :: struct #raw_union { - rectangleElementConfig: ^RectangleElementConfig, - textElementConfig: ^TextElementConfig, - imageElementConfig: ^ImageElementConfig, - customElementConfig: ^CustomElementConfig, - borderElementConfig: ^BorderElementConfig, +TextRenderData :: struct { + stringContents: StringSlice, + textColor: Color, + fontId: u16, + fontSize: u16, + letterSpacing: u16, + lineHeight: u16, } -TextOrSharedConfig :: struct #raw_union { - text: StringSlice, - sharedConfig: ^SharedElementConfig +RectangleRenderData :: struct { + backgroundColor: Color, + cornerRadius: CornerRadius, +} + +ImageRenderData :: struct { + backgroundColor: Color, + cornerRadius: CornerRadius, + sourceDimensions: Dimensions, + imageData: rawptr, +} + +CustomRenderData :: struct { + backgroundColor: Color, + cornerRadius: CornerRadius, + customData: rawptr, +} + +BorderRenderData :: struct { + color: Color, + cornerRadius: CornerRadius, + width: BorderWidth, +} + +RenderCommandData :: struct #raw_union { + rectangle: RectangleRenderData, + text: TextRenderData, + image: ImageRenderData, + custom: CustomRenderData, + border: BorderRenderData, } RenderCommand :: struct { boundingBox: BoundingBox, - config: ElementConfigUnion, - textOrSharedConfig: TextOrSharedConfig, + renderData: RenderCommandData, zIndex: i32, id: u32, commandType: RenderCommandType, @@ -283,13 +311,13 @@ ClayArray :: struct($type: typeid) { ElementDeclaration :: struct { id: ElementId, layout: LayoutConfig, - rectangle: RectangleElementConfig, + backgroundColor: Color, + cornerRadius: CornerRadius, image: ImageElementConfig, floating: FloatingElementConfig, custom: CustomElementConfig, scroll: ScrollElementConfig, border: BorderElementConfig, - shared: SharedElementConfig, } ErrorType :: enum { @@ -369,14 +397,6 @@ PaddingAll :: proc(allPadding: u16) -> Padding { return { left = allPadding, right = allPadding, top = allPadding, bottom = allPadding } } -BorderOutside :: proc(outsideBorders: BorderData) -> BorderElementConfig { - return { left = outsideBorders, right = outsideBorders, top = outsideBorders, bottom = outsideBorders } -} - -BorderAll :: proc(allBorders: BorderData) -> BorderElementConfig { - return { left = allBorders, right = allBorders, top = allBorders, bottom = allBorders, betweenChildren = allBorders } -} - CornerRadiusAll :: proc(radius: f32) -> CornerRadius { return CornerRadius{radius, radius, radius, radius} } diff --git a/bindings/odin/clay-odin/linux/clay.a b/bindings/odin/clay-odin/linux/clay.a index 919fcda..913074f 100644 Binary files a/bindings/odin/clay-odin/linux/clay.a and b/bindings/odin/clay-odin/linux/clay.a differ diff --git a/bindings/odin/clay-odin/macos-arm64/clay.a b/bindings/odin/clay-odin/macos-arm64/clay.a index 0d9aa7c..71c5562 100644 Binary files a/bindings/odin/clay-odin/macos-arm64/clay.a and b/bindings/odin/clay-odin/macos-arm64/clay.a differ diff --git a/bindings/odin/clay-odin/macos/clay.a b/bindings/odin/clay-odin/macos/clay.a index bedd6ef..5b2ae4b 100644 Binary files a/bindings/odin/clay-odin/macos/clay.a and b/bindings/odin/clay-odin/macos/clay.a differ diff --git a/bindings/odin/clay-odin/wasm/clay.o b/bindings/odin/clay-odin/wasm/clay.o index 359aecf..c6b3c95 100644 Binary files a/bindings/odin/clay-odin/wasm/clay.o and b/bindings/odin/clay-odin/wasm/clay.o differ diff --git a/bindings/odin/clay-odin/windows/clay.lib b/bindings/odin/clay-odin/windows/clay.lib index a1ef087..c338c38 100644 Binary files a/bindings/odin/clay-odin/windows/clay.lib and b/bindings/odin/clay-odin/windows/clay.lib differ diff --git a/bindings/odin/examples/clay-official-website/clay-official-website.odin b/bindings/odin/examples/clay-official-website/clay-official-website.odin index c39eaef..dd7056f 100644 --- a/bindings/odin/examples/clay-official-website/clay-official-website.odin +++ b/bindings/odin/examples/clay-official-website/clay-official-website.odin @@ -57,12 +57,17 @@ headerTextConfig := clay.TextElementConfig { textColor = {61, 26, 5, 255}, } +border2pxRed := clay.BorderElementConfig { + width = { 2, 2, 2, 2, 0 }, + color = COLOR_RED +} + LandingPageBlob :: proc(index: u32, fontSize: u16, fontId: u16, color: clay.Color, text: string, image: ^raylib.Texture2D) { if clay.UI().configure({ id = clay.ID("HeroBlob", index), layout = { sizing = { width = clay.SizingGrow({ max = 480 }) }, padding = clay.PaddingAll(16), childGap = 16, childAlignment = clay.ChildAlignment{ y = .CENTER } }, - border = clay.BorderOutside({ 2, color }), - shared = { cornerRadius = clay.CornerRadiusAll(10) } + border = border2pxRed, + cornerRadius = clay.CornerRadiusAll(10) }) { if clay.UI().configure({ id = clay.ID("CheckImage", index), @@ -81,7 +86,7 @@ LandingPageDesktop :: proc() { if clay.UI().configure({ id = clay.ID("LandingPage1"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(32), childGap = 32 }, - border = { left = { 2, COLOR_RED }, right = { 2, COLOR_RED } }, + border = { COLOR_RED, { left = 2, right = 2 } }, }) { if clay.UI().configure({ id = clay.ID("LeftText"), layout = { sizing = { width = clay.SizingPercent(0.55) }, layoutDirection = .TOP_TO_BOTTOM, childGap = 8 } }) { clay.Text( @@ -149,7 +154,7 @@ FeatureBlocks :: proc(widthSizing: clay.SizingAxis, outerPadding: u16) { id = clay.ID("HFileBoxOuter"), layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { width = widthSizing }, childAlignment = { y = .CENTER }, padding = { outerPadding, outerPadding, 32, 32 }, childGap = 8 }, }) { - if clay.UI().configure({ id = clay.ID("HFileIncludeOuter"), layout = { padding = { 8, 8, 4, 4 } }, rectangle = { color = COLOR_RED }, shared = { cornerRadius = clay.CornerRadiusAll(8) } }) { + if clay.UI().configure({ id = clay.ID("HFileIncludeOuter"), layout = { padding = { 8, 8, 4, 4 } }, backgroundColor = COLOR_RED, cornerRadius = clay.CornerRadiusAll(8) }) { clay.Text("#include clay.h", clay.TextConfig({fontSize = 24, fontId = FONT_ID_BODY_24, textColor = COLOR_LIGHT})) } clay.Text("~2000 lines of C99.", textConfig) @@ -170,7 +175,7 @@ FeatureBlocksDesktop :: proc() { if clay.UI().configure({ id = clay.ID("FeatureBlocksInner"), layout = { sizing = { width = clay.SizingGrow({ }) }, childAlignment = { y = .CENTER } }, - border = { betweenChildren = { width = 2, color = COLOR_RED } }, + border = border2pxRed, }) { FeatureBlocks(clay.SizingPercent(0.5), 50) } @@ -181,7 +186,7 @@ FeatureBlocksMobile :: proc() { if clay.UI().configure({ id = clay.ID("FeatureBlocksInner"), layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { width = clay.SizingGrow({ }) } }, - border = { betweenChildren = { width = 2, color = COLOR_RED } }, + border = border2pxRed, }) { FeatureBlocks(clay.SizingGrow({}), 16) } @@ -221,7 +226,7 @@ DeclarativeSyntaxPageDesktop :: proc() { if clay.UI().configure({ id = clay.ID("SyntaxPage"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(32), childGap = 32 }, - border = { left = { 2, COLOR_RED }, right = { 2, COLOR_RED } }, + border = border2pxRed, }) { DeclarativeSyntaxPage({fontSize = 52, fontId = FONT_ID_TITLE_52, textColor = COLOR_RED}, clay.SizingPercent(0.5)) } @@ -270,19 +275,19 @@ HighPerformancePage :: proc(lerpValue: f32, titleTextConfig: clay.TextElementCon if clay.UI().configure({ id = clay.ID("PerformanceRightBorder"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(400) } }, - border = clay.BorderAll({ width = 2, color = COLOR_LIGHT }), + border = { COLOR_LIGHT, {2, 2, 2, 2, 2} }, }) { if clay.UI().configure({ id = clay.ID("AnimationDemoContainerLeft"), layout = { sizing = { clay.SizingPercent(0.35 + 0.3 * lerpValue), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(16) }, - rectangle = { color = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue) }, + backgroundColor = ColorLerp(COLOR_RED, COLOR_ORANGE, lerpValue), }) { clay.Text(LOREM_IPSUM_TEXT, clay.TextConfig({fontSize = 16, fontId = FONT_ID_BODY_16, textColor = COLOR_LIGHT})) } if clay.UI().configure({ id = clay.ID("AnimationDemoContainerRight"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(16) }, - rectangle = { color = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue) }, + backgroundColor = ColorLerp(COLOR_ORANGE, COLOR_RED, lerpValue), }) { clay.Text(LOREM_IPSUM_TEXT, clay.TextConfig({fontSize = 16, fontId = FONT_ID_BODY_16, textColor = COLOR_LIGHT})) } @@ -294,7 +299,7 @@ HighPerformancePageDesktop :: proc(lerpValue: f32) { if clay.UI().configure({ id = clay.ID("PerformanceDesktop"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFit({ min = cast(f32)windowHeight - 50 }) }, childAlignment = { y = .CENTER }, padding = { 82, 82, 32, 32 }, childGap = 64 }, - rectangle = { color = COLOR_RED }, + backgroundColor = COLOR_RED, }) { HighPerformancePage(lerpValue, {fontSize = 52, fontId = FONT_ID_TITLE_52, textColor = COLOR_LIGHT}, clay.SizingPercent(0.5)) } @@ -310,7 +315,7 @@ HighPerformancePageMobile :: proc(lerpValue: f32) { padding = { 16, 16, 32, 32 }, childGap = 32, }, - rectangle = { color = COLOR_RED }, + backgroundColor = COLOR_RED, }) { HighPerformancePage(lerpValue, {fontSize = 48, fontId = FONT_ID_TITLE_48, textColor = COLOR_LIGHT}, clay.SizingGrow({})) } @@ -319,20 +324,20 @@ HighPerformancePageMobile :: proc(lerpValue: f32) { RendererButtonActive :: proc(index: i32, text: string) { if clay.UI().configure({ layout = { sizing = { width = clay.SizingFixed(300) }, padding = clay.PaddingAll(16) }, - rectangle = { color = COLOR_RED }, - shared = { cornerRadius = clay.CornerRadiusAll(10) } + backgroundColor = COLOR_RED, + cornerRadius = clay.CornerRadiusAll(10) }) { clay.Text(text, clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_28, textColor = COLOR_LIGHT})) } } RendererButtonInactive :: proc(index: u32, text: string) { - if clay.UI().configure({ border = clay.BorderOutside({ 2, COLOR_RED }) }) { + if clay.UI().configure({ border = border2pxRed }) { if clay.UI().configure({ id = clay.ID("RendererButtonInactiveInner", index), layout = { sizing = { width = clay.SizingFixed(300) }, padding = clay.PaddingAll(16) }, - rectangle = { color = COLOR_LIGHT }, - shared = { cornerRadius = clay.CornerRadiusAll(10) } + backgroundColor = COLOR_LIGHT, + cornerRadius = clay.CornerRadiusAll(10) }) { clay.Text(text, clay.TextConfig({fontSize = 28, fontId = FONT_ID_BODY_28, textColor = COLOR_RED})) } @@ -374,7 +379,7 @@ RendererPageDesktop :: proc() { if clay.UI().configure({ id = clay.ID("RendererPage"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, childAlignment = { y = .CENTER }, padding = clay.PaddingAll(32), childGap = 32 }, - border = { left = { 2, COLOR_RED }, right = { 2, COLOR_RED } }, + border = { COLOR_RED, { left = 2, right = 2 } }, }) { RendererPage({fontSize = 52, fontId = FONT_ID_TITLE_52, textColor = COLOR_RED}, clay.SizingPercent(0.5)) } @@ -391,7 +396,7 @@ RendererPageMobile :: proc() { padding = { 16, 16, 32, 32 }, childGap = 32, }, - rectangle = { color = COLOR_LIGHT }, + backgroundColor = COLOR_LIGHT, }) { RendererPage({fontSize = 48, fontId = FONT_ID_TITLE_48, textColor = COLOR_RED}, clay.SizingGrow({})) } @@ -412,7 +417,7 @@ createLayout :: proc(lerpValue: f32) -> clay.ClayArray(clay.RenderCommand) { if clay.UI().configure({ id = clay.ID("OuterContainer"), layout = { layoutDirection = .TOP_TO_BOTTOM, sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) } }, - rectangle = { color = COLOR_LIGHT }, + backgroundColor = COLOR_LIGHT, }) { if clay.UI().configure({ id = clay.ID("Header"), @@ -422,34 +427,34 @@ createLayout :: proc(lerpValue: f32) -> clay.ClayArray(clay.RenderCommand) { if clay.UI().configure({ layout = { sizing = { width = clay.SizingGrow({ }) } } }) {} if (!mobileScreen) { - if clay.UI().configure({ id = clay.ID("LinkExamplesOuter"), rectangle = {color = {0, 0, 0, 0}} }) { + if clay.UI().configure({ id = clay.ID("LinkExamplesOuter"), backgroundColor = {0, 0, 0, 0} }) { clay.Text("Examples", clay.TextConfig({fontId = FONT_ID_BODY_24, fontSize = 24, textColor = {61, 26, 5, 255}})) } - if clay.UI().configure({ id = clay.ID("LinkDocsOuter"), rectangle = {color = {0, 0, 0, 0}} }) { + if clay.UI().configure({ id = clay.ID("LinkDocsOuter"), backgroundColor = {0, 0, 0, 0} }) { clay.Text("Docs", clay.TextConfig({fontId = FONT_ID_BODY_24, fontSize = 24, textColor = {61, 26, 5, 255}})) } } if clay.UI().configure({ id = clay.ID("LinkGithubOuter"), layout = { padding = { 16, 16, 6, 6 } }, - border = clay.BorderOutside({ 2, COLOR_RED }), - rectangle = { color = clay.PointerOver(clay.GetElementId(clay.MakeString("LinkGithubOuter"))) ? COLOR_LIGHT_HOVER : COLOR_LIGHT }, - shared = { cornerRadius = clay.CornerRadiusAll(10) } + border = border2pxRed, + backgroundColor = clay.PointerOver(clay.GetElementId(clay.MakeString("LinkGithubOuter"))) ? COLOR_LIGHT_HOVER : COLOR_LIGHT, + cornerRadius = clay.CornerRadiusAll(10) }) { clay.Text("Github", clay.TextConfig({fontId = FONT_ID_BODY_24, fontSize = 24, textColor = {61, 26, 5, 255}})) } } - if clay.UI().configure({ id = clay.ID("TopBorder1"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, rectangle = { color = COLOR_TOP_BORDER_5 } }) {} - if clay.UI().configure({ id = clay.ID("TopBorder2"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, rectangle = { color = COLOR_TOP_BORDER_4 } }) {} - if clay.UI().configure({ id = clay.ID("TopBorder3"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, rectangle = { color = COLOR_TOP_BORDER_3 } }) {} - if clay.UI().configure({ id = clay.ID("TopBorder4"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, rectangle = { color = COLOR_TOP_BORDER_2 } }) {} - if clay.UI().configure({ id = clay.ID("TopBorder5"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, rectangle = { color = COLOR_TOP_BORDER_1 } }) {} + if clay.UI().configure({ id = clay.ID("TopBorder1"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_5 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder2"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_4 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder3"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_3 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder4"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_2 } ) {} + if clay.UI().configure({ id = clay.ID("TopBorder5"), layout = { sizing = { clay.SizingGrow({ }), clay.SizingFixed(4) } }, backgroundColor = COLOR_TOP_BORDER_1 } ) {} if clay.UI().configure({ id = clay.ID("ScrollContainerBackgroundRectangle"), scroll = { vertical = true }, layout = { sizing = { clay.SizingGrow({ }), clay.SizingGrow({ }) }, layoutDirection = clay.LayoutDirection.TOP_TO_BOTTOM }, - rectangle = { color = COLOR_LIGHT }, - border = { betweenChildren = { 2, COLOR_RED } } + backgroundColor = COLOR_LIGHT, + border = { COLOR_RED, { betweenChildren = 2} }, }) { if (!mobileScreen) { LandingPageDesktop() diff --git a/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin b/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin index 3070671..7a6408c 100644 --- a/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin +++ b/bindings/odin/examples/clay-official-website/clay_renderer_raylib.odin @@ -56,22 +56,24 @@ clayRaylibRender :: proc(renderCommands: ^clay.ClayArray(clay.RenderCommand), al case clay.RenderCommandType.None: {} case clay.RenderCommandType.Text: + config := renderCommand.renderData.text // Raylib uses standard C strings so isn't compatible with cheap slices, we need to clone the string to append null terminator - text := string(renderCommand.textOrSharedConfig.text.chars[:renderCommand.textOrSharedConfig.text.length]) + text := string(config.stringContents.chars[:config.stringContents.length]) cloned := strings.clone_to_cstring(text, allocator) - fontToUse: raylib.Font = raylibFonts[renderCommand.config.textElementConfig.fontId].font + fontToUse: raylib.Font = raylibFonts[config.fontId].font raylib.DrawTextEx( fontToUse, cloned, raylib.Vector2{boundingBox.x, boundingBox.y}, - cast(f32)renderCommand.config.textElementConfig.fontSize, - cast(f32)renderCommand.config.textElementConfig.letterSpacing, - clayColorToRaylibColor(renderCommand.config.textElementConfig.textColor), + cast(f32)config.fontSize, + cast(f32)config.letterSpacing, + clayColorToRaylibColor(config.textColor), ) case clay.RenderCommandType.Image: + config := renderCommand.renderData.image // TODO image handling - imageTexture := cast(^raylib.Texture2D)renderCommand.config.imageElementConfig.imageData - raylib.DrawTextureEx(imageTexture^, raylib.Vector2{boundingBox.x, boundingBox.y}, 0, boundingBox.width / cast(f32)imageTexture.width, raylib.WHITE) + imageTexture := cast(^raylib.Texture2D)config.imageData + raylib.DrawTextureEx(imageTexture^, raylib.Vector2{boundingBox.x, boundingBox.y}, 0, boundingBox.width / cast(f32)imageTexture.width, clayColorToRaylibColor(config.backgroundColor)) case clay.RenderCommandType.ScissorStart: raylib.BeginScissorMode( cast(i32)math.round(boundingBox.x), @@ -82,102 +84,100 @@ clayRaylibRender :: proc(renderCommands: ^clay.ClayArray(clay.RenderCommand), al case clay.RenderCommandType.ScissorEnd: raylib.EndScissorMode() case clay.RenderCommandType.Rectangle: - config: ^clay.RectangleElementConfig = renderCommand.config.rectangleElementConfig - cornerRadius := renderCommand.textOrSharedConfig.sharedConfig.cornerRadius - if (cornerRadius.topLeft > 0) { - radius: f32 = (cornerRadius.topLeft * 2) / min(boundingBox.width, boundingBox.height) - raylib.DrawRectangleRounded(raylib.Rectangle{boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height}, radius, 8, clayColorToRaylibColor(config.color)) + config := renderCommand.renderData.rectangle + if (config.cornerRadius.topLeft > 0) { + radius: f32 = (config.cornerRadius.topLeft * 2) / min(boundingBox.width, boundingBox.height) + raylib.DrawRectangleRounded(raylib.Rectangle{boundingBox.x, boundingBox.y, boundingBox.width, boundingBox.height}, radius, 8, clayColorToRaylibColor(config.backgroundColor)) } else { - raylib.DrawRectangle(cast(i32)boundingBox.x, cast(i32)boundingBox.y, cast(i32)boundingBox.width, cast(i32)boundingBox.height, clayColorToRaylibColor(config.color)) + raylib.DrawRectangle(cast(i32)boundingBox.x, cast(i32)boundingBox.y, cast(i32)boundingBox.width, cast(i32)boundingBox.height, clayColorToRaylibColor(config.backgroundColor)) } case clay.RenderCommandType.Border: - config := renderCommand.config.borderElementConfig - cornerRadius := renderCommand.textOrSharedConfig.sharedConfig.cornerRadius + config := renderCommand.renderData.border // Left border - if (config.left.width > 0) { + if (config.width.left > 0) { raylib.DrawRectangle( cast(i32)math.round(boundingBox.x), - cast(i32)math.round(boundingBox.y + cornerRadius.topLeft), - cast(i32)config.left.width, - cast(i32)math.round(boundingBox.height - cornerRadius.topLeft - cornerRadius.bottomLeft), - clayColorToRaylibColor(config.left.color), + cast(i32)math.round(boundingBox.y + config.cornerRadius.topLeft), + cast(i32)config.width.left, + cast(i32)math.round(boundingBox.height - config.cornerRadius.topLeft - config.cornerRadius.bottomLeft), + clayColorToRaylibColor(config.color), ) } // Right border - if (config.right.width > 0) { + if (config.width.right > 0) { raylib.DrawRectangle( - cast(i32)math.round(boundingBox.x + boundingBox.width - cast(f32)config.right.width), - cast(i32)math.round(boundingBox.y + cornerRadius.topRight), - cast(i32)config.right.width, - cast(i32)math.round(boundingBox.height - cornerRadius.topRight - cornerRadius.bottomRight), - clayColorToRaylibColor(config.right.color), + cast(i32)math.round(boundingBox.x + boundingBox.width - cast(f32)config.width.right), + cast(i32)math.round(boundingBox.y + config.cornerRadius.topRight), + cast(i32)config.width.right, + cast(i32)math.round(boundingBox.height - config.cornerRadius.topRight - config.cornerRadius.bottomRight), + clayColorToRaylibColor(config.color), ) } // Top border - if (config.top.width > 0) { + if (config.width.top > 0) { raylib.DrawRectangle( - cast(i32)math.round(boundingBox.x + cornerRadius.topLeft), + cast(i32)math.round(boundingBox.x + config.cornerRadius.topLeft), cast(i32)math.round(boundingBox.y), - cast(i32)math.round(boundingBox.width - cornerRadius.topLeft - cornerRadius.topRight), - cast(i32)config.top.width, - clayColorToRaylibColor(config.top.color), + cast(i32)math.round(boundingBox.width - config.cornerRadius.topLeft - config.cornerRadius.topRight), + cast(i32)config.width.top, + clayColorToRaylibColor(config.color), ) } // Bottom border - if (config.bottom.width > 0) { + if (config.width.bottom > 0) { raylib.DrawRectangle( - cast(i32)math.round(boundingBox.x + cornerRadius.bottomLeft), - cast(i32)math.round(boundingBox.y + boundingBox.height - cast(f32)config.bottom.width), - cast(i32)math.round(boundingBox.width - cornerRadius.bottomLeft - cornerRadius.bottomRight), - cast(i32)config.bottom.width, - clayColorToRaylibColor(config.bottom.color), + cast(i32)math.round(boundingBox.x + config.cornerRadius.bottomLeft), + cast(i32)math.round(boundingBox.y + boundingBox.height - cast(f32)config.width.bottom), + cast(i32)math.round(boundingBox.width - config.cornerRadius.bottomLeft - config.cornerRadius.bottomRight), + cast(i32)config.width.bottom, + clayColorToRaylibColor(config.color), ) } - if (cornerRadius.topLeft > 0) { + if (config.cornerRadius.topLeft > 0) { raylib.DrawRing( - raylib.Vector2{math.round(boundingBox.x + cornerRadius.topLeft), math.round(boundingBox.y + cornerRadius.topLeft)}, - math.round(cornerRadius.topLeft - cast(f32)config.top.width), - cornerRadius.topLeft, + raylib.Vector2{math.round(boundingBox.x + config.cornerRadius.topLeft), math.round(boundingBox.y + config.cornerRadius.topLeft)}, + math.round(config.cornerRadius.topLeft - cast(f32)config.width.top), + config.cornerRadius.topLeft, 180, 270, 10, - clayColorToRaylibColor(config.top.color), + clayColorToRaylibColor(config.color), ) } - if (cornerRadius.topRight > 0) { + if (config.cornerRadius.topRight > 0) { raylib.DrawRing( - raylib.Vector2{math.round(boundingBox.x + boundingBox.width - cornerRadius.topRight), math.round(boundingBox.y + cornerRadius.topRight)}, - math.round(cornerRadius.topRight - cast(f32)config.top.width), - cornerRadius.topRight, + raylib.Vector2{math.round(boundingBox.x + boundingBox.width - config.cornerRadius.topRight), math.round(boundingBox.y + config.cornerRadius.topRight)}, + math.round(config.cornerRadius.topRight - cast(f32)config.width.top), + config.cornerRadius.topRight, 270, 360, 10, - clayColorToRaylibColor(config.top.color), + clayColorToRaylibColor(config.color), ) } - if (cornerRadius.bottomLeft > 0) { + if (config.cornerRadius.bottomLeft > 0) { raylib.DrawRing( - raylib.Vector2{math.round(boundingBox.x + cornerRadius.bottomLeft), math.round(boundingBox.y + boundingBox.height - cornerRadius.bottomLeft)}, - math.round(cornerRadius.bottomLeft - cast(f32)config.top.width), - cornerRadius.bottomLeft, + raylib.Vector2{math.round(boundingBox.x + config.cornerRadius.bottomLeft), math.round(boundingBox.y + boundingBox.height - config.cornerRadius.bottomLeft)}, + math.round(config.cornerRadius.bottomLeft - cast(f32)config.width.top), + config.cornerRadius.bottomLeft, 90, 180, 10, - clayColorToRaylibColor(config.bottom.color), + clayColorToRaylibColor(config.color), ) } - if (cornerRadius.bottomRight > 0) { + if (config.cornerRadius.bottomRight > 0) { raylib.DrawRing( raylib.Vector2 { - math.round(boundingBox.x + boundingBox.width - cornerRadius.bottomRight), - math.round(boundingBox.y + boundingBox.height - cornerRadius.bottomRight), + math.round(boundingBox.x + boundingBox.width - config.cornerRadius.bottomRight), + math.round(boundingBox.y + boundingBox.height - config.cornerRadius.bottomRight), }, - math.round(cornerRadius.bottomRight - cast(f32)config.bottom.width), - cornerRadius.bottomRight, + math.round(config.cornerRadius.bottomRight - cast(f32)config.width.bottom), + config.cornerRadius.bottomRight, 0.1, 90, 10, - clayColorToRaylibColor(config.bottom.color), + clayColorToRaylibColor(config.color), ) } case clay.RenderCommandType.Custom: