diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-02-28 14:01:48 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-02-28 14:01:48 -0500 |
| commit | e0b42abda8d5d4e6e350ccd15618f7a2f1b14f6c (patch) | |
| tree | 205e959d255101dae3f29218e32089b07a9fed89 /ui.c | |
| parent | a5e695b40492346c73b5fa88e2adcd414eb8a54c (diff) | |
| download | volute-e0b42abda8d5d4e6e350ccd15618f7a2f1b14f6c.zip | |
dup/del buttons
Diffstat (limited to 'ui.c')
| -rw-r--r-- | ui.c | 40 |
1 files changed, 39 insertions, 1 deletions
@@ -1,5 +1,9 @@ +#include <string.h> + #include "microui.h" #include "widget.h" +#include "unit.h" +#include "engine.h" #include "ui.h" @@ -14,6 +18,8 @@ void init_ui(UI *ui) { w_init_field(&ui->displacement); w_init_select(&ui->displacement_unit, nelem(displacement_units), displacement_units); + +ui->npoints = 1; w_init_field(&ui->rpm[0]); @@ -22,5 +28,37 @@ init_ui(UI *ui) { w_init_field(&ui->ve[0]); - ui->npoints = 1; + init_engine(&ui->points[0]); +} + +void +insert_point(UI *ui, int idx) { + int i; + + if (idx < 0 || idx >= ui->npoints || ui->npoints >= MAX_POINTS) { + return; + } + + for (i = ui->npoints; i > idx; i--) { + memmove(&ui->rpm[i], &ui->rpm[i-1], sizeof(ui->rpm[i-1])); + memmove(&ui->map[i], &ui->map[i-1], sizeof(ui->map[i-1])); + memmove(&ui->ve[i], &ui->ve[i-1], sizeof(ui->ve[i-1])); + memmove(&ui->points[i], &ui->points[i-1], sizeof(ui->points[i-1])); + } + ui->npoints++; +} + +void +remove_point(UI *ui, int idx) { + if (idx < 0 || idx >= ui->npoints || ui->npoints <= 1) { + return; + } + + for (; idx < ui->npoints-1; idx++) { + memmove(&ui->rpm[idx], &ui->rpm[idx+1], sizeof(ui->rpm[idx])); + memmove(&ui->map[idx], &ui->map[idx+1], sizeof(ui->map[idx])); + memmove(&ui->ve[idx], &ui->ve[idx+1], sizeof(ui->ve[idx])); + memmove(&ui->points[idx], &ui->points[idx+1], sizeof(ui->points[idx])); + } + ui->npoints--; } |