summaryrefslogtreecommitdiff
path: root/src/ui.c
diff options
context:
space:
mode:
authorPaweł Redman <pawel.redman@gmail.com>2016-03-31 18:10:42 +0200
committerPaweł Redman <pawel.redman@gmail.com>2016-03-31 18:10:42 +0200
commita5677db21bee18f8e5b67ba2b0615403ebe6dc8a (patch)
tree73be0f704b905b8bf6f00364c2c89b738f8138be /src/ui.c
parent523f6b460dcf1f864656a9a6ccc2a54d52f385c6 (diff)
Refactor ui_simview, minor physics fixes.
Diffstat (limited to 'src/ui.c')
-rw-r--r--src/ui.c122
1 files changed, 76 insertions, 46 deletions
diff --git a/src/ui.c b/src/ui.c
index c79669d..4e2f791 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -305,25 +305,16 @@ void ui_animate_exp(float *val, float targ, float lambda, float dt)
*val = targ + (*val - targ) * exp(-lambda * dt);
}
-void ui_draw_window_simview(ui_window *uiw, int64_t time, float dt)
+void ui_draw_simview_xsection(ui_window *uiw, float *field)
{
ui_simview *sv = &uiw->simview;
phy_sim *sim = sv->sim;
float aspect_ratio;
vec2_t origin_s, scale_s;
- phy_field_em *field_em = sim->fields + 2;
-
- const char *xsection_type_strings[] = {
- "Przekrój XY przez Z",
- "Przekrój XZ przez Y",
- "Przekrój YZ przez X"
- };
-
- // xsection
SDL_mutexP(sim->rotate_lock);
r_xsection_update(uiw->rw, &sv->xsection, &sim->field_info,
- field_em->E, sv->xsection_type, sv->xsection_frac);
+ field, sv->xsection_type, sv->xsection_frac);
SDL_mutexV(sim->rotate_lock);
aspect_ratio = sv->xsection.aspect_ratio;
@@ -343,50 +334,53 @@ void ui_draw_window_simview(ui_window *uiw, int64_t time, float dt)
r_xsection_draw(uiw->rw, &sv->xsection, origin_s[0], origin_s[1],
scale_s[0], scale_s[1]);
+}
- // xsection - select
-
- if (sv->select_valid)
- {
- vec2_t select_s;
+void ui_draw_simview_selection(ui_window *uiw)
+{
+ ui_simview *sv = &uiw->simview;
+ phy_sim *sim = sv->sim;
+ vec2_t select_s;
- switch (sv->xsection_type) {
- case XSECTION_XY:
- v2_set(select_s, sv->select[0], sv->select[1]);
- break;
+ if (!sv->select_valid)
+ return;
- case XSECTION_XZ:
- v2_set(select_s, sv->select[0], sv->select[2]);
- break;
+ switch (sv->xsection_type) {
+ case XSECTION_XY:
+ v2_set(select_s, sv->select[0], sv->select[1]);
+ break;
- case XSECTION_YZ:
- v2_set(select_s, sv->select[1], sv->select[2]);
- break;
- }
+ case XSECTION_XZ:
+ v2_set(select_s, sv->select[0], sv->select[2]);
+ break;
- v2_mul_mst2(select_s, select_s, sv->tf_x2s);
+ case XSECTION_YZ:
+ v2_set(select_s, sv->select[1], sv->select[2]);
+ break;
+ }
- r_draw_line(uiw->rw, select_s[0], 0, select_s[0], uiw->h,
- theme.color_select);
- r_draw_line(uiw->rw, 0, select_s[1], uiw->w, select_s[1],
- theme.color_select);
+ v2_mul_mst2(select_s, select_s, sv->tf_x2s);
+ r_draw_line(uiw->rw, select_s[0], 0, select_s[0], uiw->h,
+ theme.color_select);
+ r_draw_line(uiw->rw, 0, select_s[1], uiw->w, select_s[1],
+ theme.color_select);
+}
- r_draw_rect(uiw->rw, 0, uiw->h - theme.font_size,
- uiw->w, theme.font_size, theme.color_main);
+void ui_draw_simview_bars(ui_window *uiw, float dt)
+{
+ const char *xsection_type_strings[] = {
+ "Przekrój XY przez Z",
+ "Przekrój XZ przez Y",
+ "Przekrój YZ przez X"
+ };
- r_draw_text(uiw->rw, 0, uiw->h - theme.font_size,
- theme.font_size,
- va("x = [%f %f %f]", sv->select[0],
- sv->select[1], sv->select[2]),
- theme.color_text, 0);
+ ui_simview *sv = &uiw->simview;
+ phy_sim *sim = sv->sim;
- sv->margin_bottom = 1 * theme.font_size;
- }
- else
- sv->margin_bottom = 0;
+ // upper
- // status
+ sv->margin_top = theme.font_size;
r_draw_rect(uiw->rw, 0, 0, uiw->w, theme.font_size, theme.color_main);
@@ -399,8 +393,44 @@ void ui_draw_window_simview(ui_window *uiw, int64_t time, float dt)
sv->xsection_frac),
theme.color_text, 0);
+ // lower
+
+ sv->margin_bottom = theme.font_size;
+ r_draw_rect(uiw->rw, 0, uiw->h - theme.font_size,
+ uiw->w, theme.font_size, theme.color_main);
+
+ r_draw_text(uiw->rw, 0, uiw->h - theme.font_size,
+ theme.font_size, va("t = %f", sim->time),
+ theme.color_text, 0);
+
+ if (sv->select_valid) {
+ size_t x, y, z, offs;
+
+ sv->margin_bottom += 2 * theme.font_size;
+
+ r_draw_rect(uiw->rw, 0, uiw->h - 3 * theme.font_size,
+ uiw->w, 2 * theme.font_size, theme.color_main);
+
+ r_draw_text(uiw->rw, 0, uiw->h - theme.font_size,
+ theme.font_size,
+ va("x = [%f %f %f]", sv->select[0],
+ sv->select[1], sv->select[2]),
+ theme.color_text, 0);
+ }
+}
+
+
+void ui_draw_simview(ui_window *uiw, int64_t time, float dt)
+{
+ ui_draw_simview_xsection(uiw, uiw->simview.sim->fields[1].E);
+ ui_draw_simview_selection(uiw);
+ ui_draw_simview_bars(uiw, dt);
+
+ // status
+
// info text
+/*
if (sv->info_valid && sv->info_time + 2000000000ll > time)
{
vec4_t color;
@@ -420,7 +450,7 @@ void ui_draw_window_simview(ui_window *uiw, int64_t time, float dt)
r_draw_text(uiw->rw, uiw->w / 2.0f, theme.font_size,
theme.font_size, sv->info, color, TEXT_CENTERX);
- }
+ }*/
}
void ui_draw_window(ui_window *uiw)
@@ -453,7 +483,7 @@ void ui_draw_window(ui_window *uiw)
dt = (get_time() - uiw->last_frame) * 1.0e-9;
r_clear(uiw->rw, r_color_black);
- ui_draw_window_simview(uiw, time, dt);
+ ui_draw_simview(uiw, time, dt);
r_flip(uiw->rw);
uiw->last_frame = time;