scroller work, everything improv

This commit is contained in:
Krzosa Karol
2025-01-31 09:26:23 +01:00
parent 9808d435d5
commit 644bb896ac
11 changed files with 481 additions and 386 deletions

View File

@@ -367,6 +367,7 @@ fn r2f32_t r2f32_get_bottom(const r2f32_t *r, f32 value) { /* Y is down */
}
fn_inline r2f32_t r2f32_expand(r2f32_t rect, v2f32_t value) { return (r2f32_t){ v2f32_sub(rect.min, value), v2f32_add(rect.max, value) }; }
fn_inline r2f32_t r2f32_shrink(r2f32_t rect, v2f32_t value) { return (r2f32_t){ v2f32_add(rect.min, value), v2f32_sub(rect.max, value) }; }
fn_inline r2f32_t r2f32_shrinks(r2f32_t rect, f32 value) { return (r2f32_t){ v2f32_adds(rect.min, value), v2f32_subs(rect.max, value) }; }
fn_inline v2f32_t r2f32_get_size(r2f32_t r) { return (v2f32_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
@@ -390,6 +391,14 @@ fn v2f32_t v2f32_clamp(v2f32_t v, v2f32_t min, v2f32_t max) {
v2f32_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
return result;
}
fn r2f32_t r2f32_fix(r2f32_t n) {
r2f32_t result = {
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
};
return result;
}
fn r2f64_t r2f64_cut_left(r2f64_t *r, f64 value) {
@@ -503,6 +512,7 @@ fn r2f64_t r2f64_get_bottom(const r2f64_t *r, f64 value) { /* Y is down */
}
fn_inline r2f64_t r2f64_expand(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_sub(rect.min, value), v2f64_add(rect.max, value) }; }
fn_inline r2f64_t r2f64_shrink(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_add(rect.min, value), v2f64_sub(rect.max, value) }; }
fn_inline r2f64_t r2f64_shrinks(r2f64_t rect, f64 value) { return (r2f64_t){ v2f64_adds(rect.min, value), v2f64_subs(rect.max, value) }; }
fn_inline v2f64_t r2f64_get_size(r2f64_t r) { return (v2f64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
@@ -526,6 +536,14 @@ fn v2f64_t v2f64_clamp(v2f64_t v, v2f64_t min, v2f64_t max) {
v2f64_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
return result;
}
fn r2f64_t r2f64_fix(r2f64_t n) {
r2f64_t result = {
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
};
return result;
}
fn r2i32_t r2i32_cut_left(r2i32_t *r, i32 value) {
@@ -639,6 +657,7 @@ fn r2i32_t r2i32_get_bottom(const r2i32_t *r, i32 value) { /* Y is down */
}
fn_inline r2i32_t r2i32_expand(r2i32_t rect, v2i32_t value) { return (r2i32_t){ v2i32_sub(rect.min, value), v2i32_add(rect.max, value) }; }
fn_inline r2i32_t r2i32_shrink(r2i32_t rect, v2i32_t value) { return (r2i32_t){ v2i32_add(rect.min, value), v2i32_sub(rect.max, value) }; }
fn_inline r2i32_t r2i32_shrinks(r2i32_t rect, i32 value) { return (r2i32_t){ v2i32_adds(rect.min, value), v2i32_subs(rect.max, value) }; }
fn_inline v2i32_t r2i32_get_size(r2i32_t r) { return (v2i32_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
@@ -662,6 +681,14 @@ fn v2i32_t v2i32_clamp(v2i32_t v, v2i32_t min, v2i32_t max) {
v2i32_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
return result;
}
fn r2i32_t r2i32_fix(r2i32_t n) {
r2i32_t result = {
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
};
return result;
}
fn r2i64_t r2i64_cut_left(r2i64_t *r, i64 value) {
@@ -775,6 +802,7 @@ fn r2i64_t r2i64_get_bottom(const r2i64_t *r, i64 value) { /* Y is down */
}
fn_inline r2i64_t r2i64_expand(r2i64_t rect, v2i64_t value) { return (r2i64_t){ v2i64_sub(rect.min, value), v2i64_add(rect.max, value) }; }
fn_inline r2i64_t r2i64_shrink(r2i64_t rect, v2i64_t value) { return (r2i64_t){ v2i64_add(rect.min, value), v2i64_sub(rect.max, value) }; }
fn_inline r2i64_t r2i64_shrinks(r2i64_t rect, i64 value) { return (r2i64_t){ v2i64_adds(rect.min, value), v2i64_subs(rect.max, value) }; }
fn_inline v2i64_t r2i64_get_size(r2i64_t r) { return (v2i64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
@@ -798,6 +826,14 @@ fn v2i64_t v2i64_clamp(v2i64_t v, v2i64_t min, v2i64_t max) {
v2i64_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
return result;
}
fn r2i64_t r2i64_fix(r2i64_t n) {
r2i64_t result = {
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
};
return result;
}
fn_inline v2f64_t v2f32_to_v2f64(v2f32_t v) { return (v2f64_t){ (f64)v.x, (f64)v.y }; }
fn_inline v3f64_t v3f32_to_v3f64(v3f32_t v) { return (v3f64_t){ (f64)v.x, (f64)v.y, (f64)v.z }; }

View File

@@ -315,6 +315,7 @@ fn r2f64_t r2f64_get_bottom(const r2f64_t *r, f64 value) { /* Y is down */
}
fn_inline r2f64_t r2f64_expand(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_sub(rect.min, value), v2f64_add(rect.max, value) }; }
fn_inline r2f64_t r2f64_shrink(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_add(rect.min, value), v2f64_sub(rect.max, value) }; }
fn_inline r2f64_t r2f64_shrinks(r2f64_t rect, f64 value) { return (r2f64_t){ v2f64_adds(rect.min, value), v2f64_subs(rect.max, value) }; }
fn_inline v2f64_t r2f64_get_size(r2f64_t r) { return (v2f64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
@@ -338,6 +339,14 @@ fn v2f64_t v2f64_clamp(v2f64_t v, v2f64_t min, v2f64_t max) {
v2f64_t result = { CLAMP(v.x, min.x, max.x), CLAMP(v.y, min.y, max.y) };
return result;
}
fn r2f64_t r2f64_fix(r2f64_t n) {
r2f64_t result = {
.min = {MIN(n.min.x, n.max.x), MIN(n.min.y, n.max.y)},
.max = {MAX(n.min.x, n.max.x), MAX(n.min.y, n.max.y)},
};
return result;
}
"""
s = s.replace("f64", basic_type)
print(s)

View File

@@ -486,4 +486,48 @@ fn f64 f64_from_s8(s8_t string) {
f64 result = os_parse_float(num_string.str);
ma_end_scratch(scratch);
return result;
}
gb_read_only i64 fuzzy_closer_word_begin = 5;
gb_read_only i64 fuzzy_consecutive_multiplier = 3;
fn i64 fuzzy_rate_string(s8_t string, s8_t with) {
if (with.len == 0) return 0;
i64 points = 0;
i64 consecutive = 0;
i64 with_i = 0;
for (i64 i = 0; i < string.len; i++) {
if (string.str[i] == with.str[with_i]) {
i64 closer_begin = CLAMP_BOT((i64)0, fuzzy_closer_word_begin - i);
points += closer_begin;
consecutive++;
with_i += 1;
} else {
points += consecutive * fuzzy_consecutive_multiplier;
consecutive = 0;
with_i = 0;
}
if (with_i >= with.len) with_i = 0;
}
points += consecutive * fuzzy_consecutive_multiplier;
return points;
}
fn fuzzy_pair_t *fuzzy_rate_array(ma_arena_t *arena, s8_t needle, s8_t *array, i32 len) {
fuzzy_pair_t *pairs = ma_push_array(arena, fuzzy_pair_t, len);
for (i32 i = 0; i < len; i += 1) {
pairs[i].rating = fuzzy_rate_string(array[i], needle);
pairs[i].index = i;
}
for (i32 i = 0; i < len - 1; i++) {
for (i32 j = 0; j < len - 1; j++) {
if (pairs[j].rating < pairs[j + 1].rating) {
SWAP(fuzzy_pair_t, pairs[j], pairs[j + 1]);
}
}
}
return pairs;
}

View File

@@ -175,3 +175,9 @@ void *sbin_read_data(stream_t *stream, i64 size);
va_start(args1, str); \
i32 len = stbsp_vsnprintf(buff, sizeof(buff), str, args1); \
va_end(args1)
typedef struct fuzzy_pair_t fuzzy_pair_t;
struct fuzzy_pair_t {
i64 index;
i64 rating;
};