Skip to content

Commit

Permalink
Merge branch 'clay-bindings-c3'
Browse files Browse the repository at this point in the history
Conflicts:
	bindings/c3/examples/video-example.c3
	bindings/c3/project.json
	bindings/c3/source/clay-raylib-renderer.c3
  • Loading branch information
JeffereyAEL committed Jan 29, 2025
2 parents 1b67696 + 9dc9e49 commit 773d18a
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions bindings/c3/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Clay-C3-Bindings
C3 Bindings for [Clay](https://github.com/nicbarker/clay.git), a UI layout library written in C.
This directory contains the clay.c3 bindings file as well as a recreation of the clay-raylib-renderer and the video-example raylib/clay project.

Special thanks to:
- [Christoffer L](https://github.com/lerno) C3's core developer (as I understand it)
- Book-reader in the [C3-lang Discord](https://discord.gg/qN76R87)

## TODO:
- Find out how to build a static-lib with additional C sources

## - C3 macros
Traditional Clay C Macro System

```cpp
/* FILTER BUTTON */
CLAY(
CLAY_ID("FilterButton"),
Clay_Hovered() ? CLAY_RECTANGLE({
.color = Clay_Hovered() ? FIRE_ORANGE : (Clay_Color){80, 25, 200, 255},
.cornerRadius = 8,
}) : 0,
CLAY_LAYOUT({
.sizing = {
.width = CLAY_SIZING_FIT(),
.height = CLAY_SIZING_GROW()
},
.padding = 10
})
) {
// define children...
}
```

Clay C3 Macro System
```cpp
/* FILTER BUTTON */
@clay(
clay::id("FilterButton"),
clay::@bodyIf(clay::hovered(), clay::rectangle({
.color = clay::hovered() ? FIRE_ORANGE : {80, 25, 200, 255},
.cornerRadius = clay::cornerRadiusUni(8)
})
),
clay::layout({
.sizing = {
.width = clay::sizingFit(),
.height = clay::sizingGrow()
},
.padding = clay::paddingUni(8)
})
){
// define children...
};
```

## To Get Started:
- Download c3c [here](https://c3-lang.org/getting-started/prebuilt-binaries/)
- If you wish to compile the website-example, I've already provided a target to build in the [project.json](project.json)
[Photo of project.json goes here]
- - set your `cd` to this project dir
- - The use the `c3c vendor-fetch raylib55` command to download a c3 compressed archive of raylib
- - - *once you have raylib55.c3l in the [lib](lib) folder you've got it right*
- - - (*note: for the current configuration you'll need to modify the default raylib module name in the raylib.c3i file in [build](build) from `raylib55::li` to `module raylib`*)
- - then use the command `c3c run video-example` to compile and run the video example
- - - (*note: to use the `c3c build <target>` command with video-example, you'll need to copy the resource folder into the [build](build) directory to run it
- - - `run` executes the build result from the project directory, somehow. This means that `run` will look for the resource folder in [c3](../c3), while `build` will look for it in [build](build))

## RESOURCES:
### - [C3](https://github.com/c3lang/c3c.git) (A C-a-like, that aims to bring modern language QA features and a revamped Macro system to C)
### - [Raylib](https://github.com/raysan5/raylib.git) (C Videogame and Graphical API)
### - [Lexend](https://github.com/googlefonts/lexend.git) (Accessible/ Dyslexic Friendly Font)

0 comments on commit 773d18a

Please sign in to comment.