new ui conception rect_cut+ryan memes
This commit is contained in:
@@ -67,10 +67,14 @@ typedef double f64;
|
||||
|
||||
#define defer_if(begin, cond_end) for (b32 PASTE(_i_, __LINE__) = !!begin; PASTE(_i_, __LINE__); PASTE(_i_, __LINE__) = (cond_end, 0))
|
||||
#define defer_block(begin, end) for (i32 PASTE(_i_, __LINE__) = (begin, 0); !PASTE(_i_, __LINE__); PASTE(_i_, __LINE__) += (end, 1))
|
||||
|
||||
#define stack_t(type, size) struct { type data[size]; i32 len; }
|
||||
#define STACK_PUSH(stack, ...) (assert((stack).len < lengthof((stack).data)), (stack).data[(stack).len++] = __VA_ARGS__)
|
||||
#define STACK_POP(stack) (assert((stack).len > 0), (stack).data[--(stack).len])
|
||||
#define STACK_TOP(stack) (assert((stack).len > 0), (stack).data[((stack).len-1)])
|
||||
#define STACK_CAP(stack) (lengthof((stack).data))
|
||||
#define STACK_EMPTY(stack) ((stack).len == 0)
|
||||
#define STACK_FULL(stack) ((stack).len == STACK_CAP(stack))
|
||||
#define STACK_PUSH(stack, ...) (assert(!STACK_FULL(stack)), (stack).data[(stack).len++] = __VA_ARGS__)
|
||||
#define STACK_POP(stack) (assert(!STACK_EMPTY(stack)), (stack).data[--(stack).len])
|
||||
#define STACK_TOP(stack) (assert(!STACK_EMPTY(stack)), (stack).data[((stack).len-1)])
|
||||
|
||||
#define STRINGIFY_(S) #S
|
||||
#define STRINGIFY(S) STRINGIFY_(S)
|
||||
@@ -89,11 +93,11 @@ typedef double f64;
|
||||
#endif
|
||||
|
||||
#if PLATFORM_CL
|
||||
#define fn_force_inline __forceinline
|
||||
#define fn_inline __forceinline
|
||||
#elif PLATFORM_CLANG || PLATFORM_GCC
|
||||
#define fn_force_inline __attribute__((always_inline))
|
||||
#define fn_inline __attribute__((always_inline))
|
||||
#else
|
||||
#define fn_force_inline
|
||||
#define fn_inline
|
||||
#endif
|
||||
|
||||
#ifndef FILE_AND_LINE_GCC_FORMAT
|
||||
|
||||
@@ -217,6 +217,48 @@ r2f32_t r2f32_cut_bottom(r2f32_t *r, f32 value) { /* Y is down */
|
||||
return (r2f32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2f32_t r2f32_cut_left_no_squash(r2f32_t *r, f32 value) {
|
||||
f32 minx = r->min.x;
|
||||
r->min.x = r->min.x + value;
|
||||
return (r2f32_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
||||
}
|
||||
r2f32_t r2f32_cut_right_no_squash(r2f32_t *r, f32 value) {
|
||||
f32 maxx = r->max.x;
|
||||
r->max.x = r->max.x - value;
|
||||
return (r2f32_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
||||
}
|
||||
r2f32_t r2f32_cut_top_no_squash(r2f32_t *r, f32 value) { /* Y is down */
|
||||
f32 miny = r->min.y;
|
||||
r->min.y = r->min.y + value;
|
||||
return (r2f32_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
||||
}
|
||||
r2f32_t r2f32_cut_bottom_no_squash(r2f32_t *r, f32 value) { /* Y is down */
|
||||
f32 maxy = r->max.y;
|
||||
r->max.y = r->max.y - value;
|
||||
return (r2f32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2f32_t r2f32_add_left(r2f32_t *r, f32 value) {
|
||||
r2f32_t result = { .min = {r->min.x - value, r->min.y}, .max = {r->min.x, r->max.y} };
|
||||
r->min.x -= value;
|
||||
return result;
|
||||
}
|
||||
r2f32_t r2f32_add_right(r2f32_t *r, f32 value) {
|
||||
r2f32_t result = { .min = {r->max.x, r->min.y}, .max = {r->max.x + value, r->max.y} };
|
||||
r->max.x += value;
|
||||
return result;
|
||||
}
|
||||
r2f32_t r2f32_add_top(r2f32_t *r, f32 value) {
|
||||
r2f32_t result = { .min = {r->min.x, r->min.y - value}, .max = {r->max.x, r->min.y} };
|
||||
r->min.y -= value;
|
||||
return result;
|
||||
}
|
||||
r2f32_t r2f32_add_bottom(r2f32_t *r, f32 value) {
|
||||
r2f32_t result = { .min = {r->min.x, r->max.y}, .max = {r->max.x, r->max.y + value} };
|
||||
r->max.y += value;
|
||||
return result;
|
||||
}
|
||||
|
||||
// get past left
|
||||
r2f32_t r2f32_getp_left(const r2f32_t *rect, f32 value) {
|
||||
r2f32_t result = r2f32(rect->min.x - value, rect->min.y, rect->min.x, rect->max.y);
|
||||
@@ -285,6 +327,48 @@ r2f64_t r2f64_cut_bottom(r2f64_t *r, f64 value) { /* Y is down */
|
||||
return (r2f64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2f64_t r2f64_cut_left_no_squash(r2f64_t *r, f64 value) {
|
||||
f64 minx = r->min.x;
|
||||
r->min.x = r->min.x + value;
|
||||
return (r2f64_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
||||
}
|
||||
r2f64_t r2f64_cut_right_no_squash(r2f64_t *r, f64 value) {
|
||||
f64 maxx = r->max.x;
|
||||
r->max.x = r->max.x - value;
|
||||
return (r2f64_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
||||
}
|
||||
r2f64_t r2f64_cut_top_no_squash(r2f64_t *r, f64 value) { /* Y is down */
|
||||
f64 miny = r->min.y;
|
||||
r->min.y = r->min.y + value;
|
||||
return (r2f64_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
||||
}
|
||||
r2f64_t r2f64_cut_bottom_no_squash(r2f64_t *r, f64 value) { /* Y is down */
|
||||
f64 maxy = r->max.y;
|
||||
r->max.y = r->max.y - value;
|
||||
return (r2f64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2f64_t r2f64_add_left(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->min.x - value, r->min.y}, .max = {r->min.x, r->max.y} };
|
||||
r->min.x -= value;
|
||||
return result;
|
||||
}
|
||||
r2f64_t r2f64_add_right(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->max.x, r->min.y}, .max = {r->max.x + value, r->max.y} };
|
||||
r->max.x += value;
|
||||
return result;
|
||||
}
|
||||
r2f64_t r2f64_add_top(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->min.x, r->min.y - value}, .max = {r->max.x, r->min.y} };
|
||||
r->min.y -= value;
|
||||
return result;
|
||||
}
|
||||
r2f64_t r2f64_add_bottom(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->min.x, r->max.y}, .max = {r->max.x, r->max.y + value} };
|
||||
r->max.y += value;
|
||||
return result;
|
||||
}
|
||||
|
||||
// get past left
|
||||
r2f64_t r2f64_getp_left(const r2f64_t *rect, f64 value) {
|
||||
r2f64_t result = r2f64(rect->min.x - value, rect->min.y, rect->min.x, rect->max.y);
|
||||
@@ -353,6 +437,48 @@ r2i32_t r2i32_cut_bottom(r2i32_t *r, i32 value) { /* Y is down */
|
||||
return (r2i32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2i32_t r2i32_cut_left_no_squash(r2i32_t *r, i32 value) {
|
||||
i32 minx = r->min.x;
|
||||
r->min.x = r->min.x + value;
|
||||
return (r2i32_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
||||
}
|
||||
r2i32_t r2i32_cut_right_no_squash(r2i32_t *r, i32 value) {
|
||||
i32 maxx = r->max.x;
|
||||
r->max.x = r->max.x - value;
|
||||
return (r2i32_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
||||
}
|
||||
r2i32_t r2i32_cut_top_no_squash(r2i32_t *r, i32 value) { /* Y is down */
|
||||
i32 miny = r->min.y;
|
||||
r->min.y = r->min.y + value;
|
||||
return (r2i32_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
||||
}
|
||||
r2i32_t r2i32_cut_bottom_no_squash(r2i32_t *r, i32 value) { /* Y is down */
|
||||
i32 maxy = r->max.y;
|
||||
r->max.y = r->max.y - value;
|
||||
return (r2i32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2i32_t r2i32_add_left(r2i32_t *r, i32 value) {
|
||||
r2i32_t result = { .min = {r->min.x - value, r->min.y}, .max = {r->min.x, r->max.y} };
|
||||
r->min.x -= value;
|
||||
return result;
|
||||
}
|
||||
r2i32_t r2i32_add_right(r2i32_t *r, i32 value) {
|
||||
r2i32_t result = { .min = {r->max.x, r->min.y}, .max = {r->max.x + value, r->max.y} };
|
||||
r->max.x += value;
|
||||
return result;
|
||||
}
|
||||
r2i32_t r2i32_add_top(r2i32_t *r, i32 value) {
|
||||
r2i32_t result = { .min = {r->min.x, r->min.y - value}, .max = {r->max.x, r->min.y} };
|
||||
r->min.y -= value;
|
||||
return result;
|
||||
}
|
||||
r2i32_t r2i32_add_bottom(r2i32_t *r, i32 value) {
|
||||
r2i32_t result = { .min = {r->min.x, r->max.y}, .max = {r->max.x, r->max.y + value} };
|
||||
r->max.y += value;
|
||||
return result;
|
||||
}
|
||||
|
||||
// get past left
|
||||
r2i32_t r2i32_getp_left(const r2i32_t *rect, i32 value) {
|
||||
r2i32_t result = r2i32(rect->min.x - value, rect->min.y, rect->min.x, rect->max.y);
|
||||
@@ -421,6 +547,48 @@ r2i64_t r2i64_cut_bottom(r2i64_t *r, i64 value) { /* Y is down */
|
||||
return (r2i64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2i64_t r2i64_cut_left_no_squash(r2i64_t *r, i64 value) {
|
||||
i64 minx = r->min.x;
|
||||
r->min.x = r->min.x + value;
|
||||
return (r2i64_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
||||
}
|
||||
r2i64_t r2i64_cut_right_no_squash(r2i64_t *r, i64 value) {
|
||||
i64 maxx = r->max.x;
|
||||
r->max.x = r->max.x - value;
|
||||
return (r2i64_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
||||
}
|
||||
r2i64_t r2i64_cut_top_no_squash(r2i64_t *r, i64 value) { /* Y is down */
|
||||
i64 miny = r->min.y;
|
||||
r->min.y = r->min.y + value;
|
||||
return (r2i64_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
||||
}
|
||||
r2i64_t r2i64_cut_bottom_no_squash(r2i64_t *r, i64 value) { /* Y is down */
|
||||
i64 maxy = r->max.y;
|
||||
r->max.y = r->max.y - value;
|
||||
return (r2i64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2i64_t r2i64_add_left(r2i64_t *r, i64 value) {
|
||||
r2i64_t result = { .min = {r->min.x - value, r->min.y}, .max = {r->min.x, r->max.y} };
|
||||
r->min.x -= value;
|
||||
return result;
|
||||
}
|
||||
r2i64_t r2i64_add_right(r2i64_t *r, i64 value) {
|
||||
r2i64_t result = { .min = {r->max.x, r->min.y}, .max = {r->max.x + value, r->max.y} };
|
||||
r->max.x += value;
|
||||
return result;
|
||||
}
|
||||
r2i64_t r2i64_add_top(r2i64_t *r, i64 value) {
|
||||
r2i64_t result = { .min = {r->min.x, r->min.y - value}, .max = {r->max.x, r->min.y} };
|
||||
r->min.y -= value;
|
||||
return result;
|
||||
}
|
||||
r2i64_t r2i64_add_bottom(r2i64_t *r, i64 value) {
|
||||
r2i64_t result = { .min = {r->min.x, r->max.y}, .max = {r->max.x, r->max.y + value} };
|
||||
r->max.y += value;
|
||||
return result;
|
||||
}
|
||||
|
||||
// get past left
|
||||
r2i64_t r2i64_getp_left(const r2i64_t *rect, i64 value) {
|
||||
r2i64_t result = r2i64(rect->min.x - value, rect->min.y, rect->min.x, rect->max.y);
|
||||
|
||||
@@ -223,6 +223,48 @@ r2f64_t r2f64_cut_bottom(r2f64_t *r, f64 value) { /* Y is down */
|
||||
return (r2f64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2f64_t r2f64_cut_left_no_squash(r2f64_t *r, f64 value) {
|
||||
f64 minx = r->min.x;
|
||||
r->min.x = r->min.x + value;
|
||||
return (r2f64_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
||||
}
|
||||
r2f64_t r2f64_cut_right_no_squash(r2f64_t *r, f64 value) {
|
||||
f64 maxx = r->max.x;
|
||||
r->max.x = r->max.x - value;
|
||||
return (r2f64_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
||||
}
|
||||
r2f64_t r2f64_cut_top_no_squash(r2f64_t *r, f64 value) { /* Y is down */
|
||||
f64 miny = r->min.y;
|
||||
r->min.y = r->min.y + value;
|
||||
return (r2f64_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
||||
}
|
||||
r2f64_t r2f64_cut_bottom_no_squash(r2f64_t *r, f64 value) { /* Y is down */
|
||||
f64 maxy = r->max.y;
|
||||
r->max.y = r->max.y - value;
|
||||
return (r2f64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
||||
}
|
||||
|
||||
r2f64_t r2f64_add_left(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->min.x - value, r->min.y}, .max = {r->min.x, r->max.y} };
|
||||
r->min.x -= value;
|
||||
return result;
|
||||
}
|
||||
r2f64_t r2f64_add_right(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->max.x, r->min.y}, .max = {r->max.x + value, r->max.y} };
|
||||
r->max.x += value;
|
||||
return result;
|
||||
}
|
||||
r2f64_t r2f64_add_top(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->min.x, r->min.y - value}, .max = {r->max.x, r->min.y} };
|
||||
r->min.y -= value;
|
||||
return result;
|
||||
}
|
||||
r2f64_t r2f64_add_bottom(r2f64_t *r, f64 value) {
|
||||
r2f64_t result = { .min = {r->min.x, r->max.y}, .max = {r->max.x, r->max.y + value} };
|
||||
r->max.y += value;
|
||||
return result;
|
||||
}
|
||||
|
||||
// get past left
|
||||
r2f64_t r2f64_getp_left(const r2f64_t *rect, f64 value) {
|
||||
r2f64_t result = r2f64(rect->min.x - value, rect->min.y, rect->min.x, rect->max.y);
|
||||
|
||||
Reference in New Issue
Block a user