Fixed text auto-layout

This commit is contained in:
Edward R. Gonzalez 2024-03-14 10:11:04 -04:00
parent cf7660e385
commit ee8b68ac3e
7 changed files with 29 additions and 33 deletions

View File

@ -145,7 +145,7 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem
rl.SetConfigFlags( {
rl.ConfigFlag.WINDOW_RESIZABLE,
rl.ConfigFlag.WINDOW_TOPMOST,
// rl.ConfigFlag.WINDOW_TOPMOST,
})
// Rough setup of window with rl stuff

View File

@ -247,6 +247,8 @@ zpl_hmap_find :: proc( using self : ^ HMapZPL( $ Type), key : u64 ) -> HMapZPL_F
result.hash_index = cast(i64)( key % hashes.num )
result.entry_index = hashes.data[ result.hash_index ]
verify( result.entry_index < i64(entries.num), "Entry index is larger than the number of entries" )
for ; result.entry_index >= 0; {
entry := & entries.data[ result.entry_index ]
if entry.key == key {

View File

@ -53,7 +53,7 @@ str_cache_init :: proc( /*allocator : Allocator*/ ) -> ( cache : StringCache ) {
cache.slab, alloc_error = slab_init( & policy, allocator = persistent_allocator() )
verify(alloc_error == .None, "Failed to initialize the string cache" )
cache.table, alloc_error = zpl_hmap_init_reserve( StringCached, persistent_slab_allocator(), 2 * Kilobyte )
cache.table, alloc_error = zpl_hmap_init_reserve( StringCached, persistent_slab_allocator(), 64 * Kilobyte )
return
}

View File

@ -150,7 +150,7 @@ render_mode_2d :: proc()
computed_size := computed.bounds.p1 - computed.bounds.p0
if ! within_range2( view_bounds, computed.bounds ) {
// continue
continue
}
// TODO(Ed) : Render Borders

View File

@ -240,10 +240,10 @@ update :: proc( delta_time : f64 ) -> b32
// test_text_box()
// test_parenting()
if false
if true
{
frame := ui_widget( "Frame", {} )
ui_parent(frame)
// frame := ui_widget( "Frame", {} )
// ui_parent(frame)
parent_layout := default_layout
parent_layout.size = range2( { 300, 300 }, {} )
@ -310,12 +310,13 @@ update :: proc( delta_time : f64 ) -> b32
}
// Whitespace AST test
if true
if false
{
profile("Whitespace AST test")
text_style := frame_style_default
text_style.flags = {
.Size_To_Text,
.Fixed_Position_X, .Fixed_Position_Y,
// .Fixed_Width, .Fixed_Height,
}

View File

@ -70,17 +70,9 @@ ui_compute_layout :: proc()
// 1. Anchors
anchor := & layout.anchor
// anchored_pos := parent_content.min + parent_content_size * anchor.min
// anchored_size := parent_content_size * linalg.abs( anchor.p1 - anchor.p0 )
anchored_bounds := range2(
{
parent_content.min.x + parent_content_size.x * anchor.min.x,
parent_content.min.y + parent_content_size.y * anchor.min.y,
},
{
parent_content.max.x - parent_content_size.x * anchor.max.x,
parent_content.max.y - parent_content_size.y * anchor.max.y,
}
parent_content.min + parent_content_size * anchor.min,
parent_content.max - parent_content_size * anchor.max,
)
anchored_bounds_origin := (anchored_bounds.min + anchored_bounds.max) * 0.5
@ -120,11 +112,8 @@ ui_compute_layout :: proc()
text_size = computed.text_size
}
// 4. Adjust Alignment of pivot position
alignment := layout.alignment
alignment_offset := Vec2 {
// adjusted_size.x * (alignment.x - 0.5),
// adjusted_size.y * (alignment.y - 0.5),
if size_to_text {
adjusted_size = text_size
}
// 5. Determine relative position
@ -142,7 +131,9 @@ ui_compute_layout :: proc()
vec2_one := Vec2 { 1, 1 }
// Determine the box bounds
// 6. Determine the box bounds
// Adjust Alignment of pivot position
alignment := layout.alignment
bounds := range2(
rel_pos - adjusted_size * alignment,
rel_pos + adjusted_size * (vec2_one - alignment),
@ -169,17 +160,14 @@ ui_compute_layout :: proc()
computed.content = content_bounds
// TODO(Ed): Needs a rework based on changes to rest of layout above being changed
// Text
// Text
if len(current.text.str) > 0
{
bottom_left := content_bounds.min
top_right := content_bounds.max
content_size := Vec2 { top_right.x - bottom_left.x, top_right.y - bottom_left.y }
content_size := content_bounds.max - content_bounds.min
text_pos : Vec2
text_pos = top_right
text_pos.x += (-content_size.x - text_size.x) * layout.text_alignment.x
text_pos.y += (-content_size.y + text_size.y) * layout.text_alignment.y
text_pos = content_bounds.min + { 0, text_size.y }
text_pos.x += ( content_size.x - text_size.x ) * layout.text_alignment.x
text_pos.y += ( content_size.y - text_size.y ) * layout.text_alignment.y
computed.text_size = text_size
computed.text_pos = { text_pos.x, -text_pos.y }

View File

@ -26,7 +26,7 @@ test_draggable :: proc()
draggable_layout := UI_Layout {
anchor = {},
// alignment = { 0.0, 0.5 },
alignment = { 0.5, 0.5 },
alignment = { 0.5, 0.5 },
text_alignment = { 0.0, 0.0 },
// alignment = { 1.0, 1.0 },
// corner_radii = { 0.3, 0.3, 0.3, 0.3 },
@ -74,10 +74,13 @@ test_text_box :: proc()
@static pos : Vec2
style := ui_style_peek( .Default )
style.text_alignment = { 1.0, 1.0 }
// style.flags = { .Size_To_Text }
style.padding = { 10, 10, 10, 10 }
style.font_size = 32
ui_style_theme( { styles = { style, style, style, style, }} )
text := str_intern( "Lorem ipsum dolor sit amet")
font_size := 30
text_box := ui_text("TEXT BOX!", text, flags = { .Mouse_Clickable })
if text_box.first_frame {
@ -89,4 +92,6 @@ test_text_box :: proc()
}
text_box.style.layout.pos = pos
text_box.style.size.min = { text_box.computed.text_size.x * 1.5, text_box.computed.text_size.y * 3 }
}