aboutsummaryrefslogtreecommitdiff
path: root/src/main.odin
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.odin')
-rw-r--r--src/main.odin195
1 files changed, 140 insertions, 55 deletions
diff --git a/src/main.odin b/src/main.odin
index e0a4507..5f6449b 100644
--- a/src/main.odin
+++ b/src/main.odin
@@ -14,6 +14,9 @@ font : rl.Font
big_font : rl.Font
small_font : rl.Font
+FRACT_MIN : f32 = 0.0
+FRACT_MAX : f32 = 1.0
+
c0 : ^oui.Context
main :: proc() {
@@ -59,9 +62,8 @@ main :: proc() {
defer delete(date_text)
wrap_text[len(wrap_text)-1] = 0
- total_sum: cstring = "3500 NOK + 26%"
- inc_soc: cstring = "4276 NOK"
- text_height: f32
+ total_sum: cstring = "3500 NOK + 26%" // Only here for legacy UI
+ inc_soc: cstring = "4276 NOK" // Only here for legacy UI
using rl
@@ -76,17 +78,13 @@ main :: proc() {
SetWindowMinSize(width, height)
// Loading fonts - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- font_size :: 18
- font = LoadFontFromMemory(".ttf", raw_data(UBUNTU_MONO), i32(len(UBUNTU_MONO)), font_size, nil, 0)
- defer UnloadFont(font)
- small_font_size :: 14
- small_font = LoadFontFromMemory(".ttf", raw_data(UBUNTU_MONO), i32(len(UBUNTU_MONO)), small_font_size, nil, 0)
- defer UnloadFont(small_font)
-
- big_font_size :: 24
- big_font = LoadFontFromMemory(".ttf", raw_data(UBUNTU_MONO), i32(len(UBUNTU_MONO)), big_font_size, nil, 0)
+ small_font = LoadFontFromMemory(".ttf", raw_data(UBUNTU_MONO), i32(len(UBUNTU_MONO)), 14, nil, 0)
+ font = LoadFontFromMemory(".ttf", raw_data(UBUNTU_MONO), i32(len(UBUNTU_MONO)), 18, nil, 0)
+ big_font = LoadFontFromMemory(".ttf", raw_data(UBUNTU_MONO), i32(len(UBUNTU_MONO)), 24, nil, 0)
defer UnloadFont(big_font)
+ defer UnloadFont(font)
+ defer UnloadFont(small_font)
// oui stuff
@@ -155,17 +153,24 @@ when true {
master_container.id = oui.push_id(c0, "big_mr_boss_man") // Make ID for master thing just because.
// Does not need to be freed because master.
master_container.layout = .Absolute
+ master_container.sort_children = true
master_container.layout_size = {int(GetScreenWidth()), int(GetScreenHeight())}
{
top_bar := panel_line(master_container, theme.background_bar, 30)
top_bar.id = oui.push_id(c0, "top_bar") // Make ID for anything that will have children.
- defer oui.pop_id(c0) // These need to be pop'ed before the next item at the same level in the hierachy.
- top_bar.layout_margin = 6
+ defer oui.pop_id(c0) // They must be pop'ed before the next equal-in-hiarchy item
+ top_bar.layout_margin = 10
+
+ oui.item_insert(top_bar, label("Date", font, sizings.date, .Center))
+ oui.item_insert(top_bar, label("Calltimes", font, sizings.call, .Center))
- oui.item_insert(top_bar, label("Date", font, 100, .Center))
- oui.item_insert(top_bar, label("Calltime", font, 100, .Center))
- oui.item_insert(top_bar, label("Lunch", font, 100, .Center))
+ top_bar.layout_cut_children = .Right
+ oui.item_insert(top_bar, label("Price", font, sizings.price, .Center))
+ oui.item_insert(top_bar, label("Wrap", font, sizings.wrap, .Center))
+
+ top_bar.layout_cut_children = .Fill
+ oui.item_insert(top_bar, label("Timeline", font, 0, .Center))
}
{
@@ -174,21 +179,29 @@ when true {
defer oui.pop_id(c0)
bottom_bar.layout_cut_children = .Left
master_container.layout_cut_children = .Bottom
+ bottom_bar.z_index = 10 // Makes this render over/after the middle section
bottom_bar.layout_size.y = 50
bottom_bar.layout_margin = 10 // Spacing from edges
+ bottom_bar.layout_cut_gap = 5 // Spacing between children
oui.item_insert(master_container, bottom_bar)
-
- pre_sos_price := label("120 000 kr", big_font, 0, .Right)
- bottom_bar.layout_cut_children = .Right
- oui.item_insert(bottom_bar, pre_sos_price)
-
- post_sos_price := label("160 000 kr", small_font, 300, .Right)
- bottom_bar.layout_cut_children = .Right
- oui.item_insert(bottom_bar, post_sos_price)
price_reason := label("Reason for price of highlighted timeblock", font, 300,)
bottom_bar.layout_cut_children = .Left
oui.item_insert(bottom_bar, price_reason)
+
+ totals := panel(theme.background_bar)
+ totals.layout_cut_children = .Top
+ totals.layout_size.x = 50
+ bottom_bar.layout_cut_children = .Right
+ oui.item_insert(bottom_bar, totals)
+
+ pre_sos_price := label("120 000 kr", small_font, 0, .Right)
+ pre_sos_price.layout_size.y = 11
+ oui.item_insert(totals, pre_sos_price)
+
+ post_sos_price := label("160 000 kr", big_font, 300, .Right)
+ post_sos_price.layout_size.y = 27
+ oui.item_insert(totals, post_sos_price)
}
{
@@ -196,45 +209,117 @@ when true {
middle_section.id = oui.push_id(c0, "middle_section")
defer oui.pop_id(c0)
middle_section.layout_margin = 10 // Spacing from edges
- middle_section.layout_cut_gap = 5 // Spacing between children
+ middle_section.layout_cut_gap = sizings.inter_timeline // Spacing between children
master_container.layout_cut_children = .Fill
oui.item_insert(master_container, middle_section)
- // To loop over the members of a struct you need to do this goofy shit:
- info := runtime.type_info_base(type_info_of(Theme))
- st := info.variant.(runtime.Type_Info_Struct)
- root := uintptr(&theme)
- for offset, i in st.offsets {
+
+ // - - - - WORKDAYS - - - -
+
+ FRACT_MAX = workdays[0].fractions[0].start
+ FRACT_MIN = FRACT_MAX // TODO: Optimize this. It doesn't need to re-calculated every frame
+
+ for day, i in workdays {
+
+ for fract, i in day.fractions {
+ if fract.start < FRACT_MIN do FRACT_MIN = fract.start
+ if fract.end > FRACT_MAX do FRACT_MAX = fract.end
+ if i+1 == day.total_timeblocks do break
+ }
+
+ line := panel_line(middle_section, theme.background)
+ line.layout_cut_children = .Left
+ line.layout_cut_gap = 0
+ line.layout_margin = 0
+ line.layout_size.y = sizings.timeline
+ oui.item_insert(line, label(dayprint(day.call), font, sizings.date, .Center))
+ oui.item_insert(line, label(clockprint(day.call), font, sizings.call, .Center))
+
+ line.layout_cut_children = .Right
+ oui.item_insert(line, label("3500 kr", font, sizings.price, .Center))
+ oui.item_insert(line, label(clockprint(day.wrap), font, sizings.wrap, .Center))
+
+ line.layout_cut_children = .Fill
+ timeline(line, day)
+ }
+ new_workday := button("+", 100)
+ middle_section.layout_cut_children = .Top
+ oui.item_insert(middle_section, new_workday)
+ if oui.is_clicked(c0, new_workday) do fmt.println("NEW WORKDAY!")
+
+
+
+ // - - - - SIZINGS EDITOR - - - -
+ {
+ oui.item_insert(middle_section, label("Sizings Editor", big_font, 100, .Center))
- line := panel_line(middle_section, theme.background, 25)
- line.layout_cut_gap = 10
- line.id = oui.push_id(c0, fmt.tprintf("line_%d", i))
- defer oui.pop_id(c0)
+ // To loop over the members of a struct you need to do this goofy shit:
+ info := runtime.type_info_base(type_info_of(Sizings))
+ st := info.variant.(runtime.Type_Info_Struct)
+ root := uintptr(&sizings)
+ for offset, i in st.offsets {
- oui.item_insert(line, label(st.names[i], font, ))
+ line := panel_line(middle_section, theme.background, 25)
+ line.id = oui.push_id(c0, fmt.tprintf("sizings_line_%d", i))
+ defer oui.pop_id(c0)
+
+ oui.item_insert(line, label(st.names[i], font, ))
+
+ // To then access the member of the struct you're looping over
+ // you need to do this shit:
+ // v----------------------v
+ current_value := cast(^int) (root+offset)
+
+ oui.item_insert(line, slider_int(fmt.tprintf("sizings-%d", i), fmt.tprintf("%d", current_value^), 300, current_value, 0, 200))
+ }
+ output_button := button("output sizings", 100)
+ middle_section.layout_cut_children = .Top
+ oui.item_insert(middle_section, output_button)
+ if oui.is_clicked(c0, output_button) do fmt.printf("%#v", sizings)
+ }
+
+
+ // - - - - THEME EDITOR - - - -
+ {
+ oui.item_insert(middle_section, label("Theme Editor", big_font, 100, .Center))
+
+ // To loop over the members of a struct you need to do this goofy shit:
+ info := runtime.type_info_base(type_info_of(Theme))
+ st := info.variant.(runtime.Type_Info_Struct)
+ root := uintptr(&theme)
+ for offset, i in st.offsets {
- // To then access the member of the struct you're looping over
- // you need to do this shit:
- // v------------------------v
- color_sliders(line, cast(^Color) (root+offset))
+ line := panel_line(middle_section, theme.background, 25)
+ line.layout_cut_gap = 10
+ line.id = oui.push_id(c0, fmt.tprintf("line_%d", i))
+ defer oui.pop_id(c0)
+
+ oui.item_insert(line, label(st.names[i], font, ))
+
+ // To then access the member of the struct you're looping over
+ // you need to do this shit:
+ // v------------------------v
+ color_sliders(line, cast(^Color) (root+offset))
+ }
+ output_theme_button := button("output theme", 100)
+ middle_section.layout_cut_children = .Top
+ oui.item_insert(middle_section, output_theme_button)
+ if oui.is_clicked(c0, output_theme_button) do fmt.printf("%#v", theme)
}
- output_theme_button := button("output theme", 100)
- oui.item_insert(middle_section, output_theme_button)
- if oui.is_clicked(c0, output_theme_button) do fmt.printf("%#v", theme)
}
-
+
oui.end_layout(c0)
-
+
ui_draw(master_container)
- // DRAW HERE OR BELOW
+
oui.process(c0)
} else {
- DrawTextEx(font, "Date", {20, 8}, font_size, 0, RAYWHITE);
- DrawTextEx(font, "Calltime", {105, 8}, font_size, 0, RAYWHITE);
- DrawTextEx(font, "Wraptime", {f32(width)-83, 8}, font_size, 0, RAYWHITE);
+ DrawTextEx(font, "Date", {20, 8}, f32(font.baseSize), 0, RAYWHITE);
+ DrawTextEx(font, "Calltime", {105, 8}, f32(font.baseSize), 0, RAYWHITE);
+ DrawTextEx(font, "Wraptime", {f32(width)-83, 8}, f32(font.baseSize), 0, RAYWHITE);
for day, i in workdays {
@@ -271,20 +356,20 @@ when true {
copy(wrap_text, clockprint(day.wrap))
copy(date_text, toString(day.call))
- text_height = math.round(f32(i+1)*DAY_HEIGHT+(DAY_HEIGHT-font_size)*0.25)
+ text_height := math.round(f32(i+1)*DAY_HEIGHT+(DAY_HEIGHT-f32(font.baseSize))*0.25)
- DrawTextEx(font, cstring(&date_text[0]), {20, text_height}, font_size, 0, RAYWHITE);
- DrawTextEx(font, cstring(&wrap_text[0]), {f32(width)-70, text_height}, font_size, 0, RAYWHITE);
+ DrawTextEx(font, cstring(&date_text[0]), {20, text_height}, f32(font.baseSize), 0, RAYWHITE);
+ DrawTextEx(font, cstring(&wrap_text[0]), {f32(width)-70, text_height}, f32(font.baseSize), 0, RAYWHITE);
if i == len(workdays)-1 {
- DrawTextEx(big_font, "+", {20, DAY_HEIGHT*f32(i+2)}, big_font_size, 0, RAYWHITE)
+ DrawTextEx(big_font, "+", {20, DAY_HEIGHT*f32(i+2)}, f32(big_font.baseSize), 0, RAYWHITE)
}
}
DrawRectangle(0, height-50, width+10, 60, theme.background_bar)
- DrawTextEx(small_font, total_sum, {f32(width)-120, f32(height)-43}, small_font_size, 0, RAYWHITE);
- DrawTextEx(big_font, inc_soc, {f32(width)-120, f32(height)-29}, big_font_size, 0, RAYWHITE);
+ DrawTextEx(small_font, total_sum, {f32(width)-120, f32(height)-43}, f32(small_font.baseSize), 0, RAYWHITE);
+ DrawTextEx(big_font, inc_soc, {f32(width)-120, f32(height)-29}, f32(big_font.baseSize), 0, RAYWHITE);
}
EndDrawing()
}