layout
This commit is contained in:
parent
8f46b88f1d
commit
94db9c18d5
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
microgui
|
||||||
|
*.o
|
21
ugui.c
21
ugui.c
@ -215,3 +215,24 @@ int ug_end(ug_ctx_t *ctx)
|
|||||||
ctx->input_text[0] = '\0';
|
ctx->input_text[0] = '\0';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*=============================================================================*
|
||||||
|
* UI ELEMENTS *
|
||||||
|
*=============================================================================*/
|
||||||
|
|
||||||
|
#undef TEST_CTX
|
||||||
|
#define TEST_CTX(ctx) { \
|
||||||
|
if (!ctx) { \
|
||||||
|
warn("__FUNCTION__:" "trying to use a null context"); \
|
||||||
|
return 0; \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slider element, a rectangle with some text and another rectangle inside
|
||||||
|
// When used with a mouse the slider moves to the clicked area and stat gets
|
||||||
|
// updated, in that case a non-zero value gets returned
|
||||||
|
int ug_slider(ug_ctx_t *ctx, float *stat, float min, float max)
|
||||||
|
{
|
||||||
|
TEST_CTX(ctx);
|
||||||
|
ug_draw_rect(ctx)
|
||||||
|
}
|
||||||
|
110
ugui.h
110
ugui.h
@ -262,5 +262,115 @@ void ug_input_text(ug_ctx_t *ctx, const char *text);
|
|||||||
int ug_begin(ug_ctx_t *ctx);
|
int ug_begin(ug_ctx_t *ctx);
|
||||||
int ug_end(ug_ctx_t *ctx);
|
int ug_end(ug_ctx_t *ctx);
|
||||||
|
|
||||||
|
// layout control
|
||||||
|
// Split the layout vertically and horizontally, n times each time with the
|
||||||
|
// supplied width/height
|
||||||
|
|
||||||
|
/* Window space
|
||||||
|
* +-----------------------------+
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* +-----------------------------+
|
||||||
|
*
|
||||||
|
* ug_layout_vsplit(ctx, 2, (int[]){10, 20});
|
||||||
|
* create two vertical zones
|
||||||
|
* +-----------------------------+
|
||||||
|
* | } 10px |
|
||||||
|
* +-----------------------------+
|
||||||
|
* | |> 20px |
|
||||||
|
* | | |
|
||||||
|
* +-----------------------------+
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | remainder |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* +-----------------------------+
|
||||||
|
*
|
||||||
|
* ug_layout_hsplit(ctx, 3, NULL);
|
||||||
|
* equally spaced divisions
|
||||||
|
* +-----------------------------+
|
||||||
|
* | | | |
|
||||||
|
* +-----------------------------+
|
||||||
|
* | |> 20px |
|
||||||
|
* | | |
|
||||||
|
* +-----------------------------+
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | remainder |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* +-----------------------------+
|
||||||
|
*
|
||||||
|
* ug_button(ctx, "ciao");
|
||||||
|
* ug_layout_next(ctx); // skip second square
|
||||||
|
* ug_button(ctx, "quit");
|
||||||
|
* float val = 0.3
|
||||||
|
* ug_slider(ctx, &val, 0, 1);
|
||||||
|
* ug_text(ctx, "lorem ipsum\ndolor et");
|
||||||
|
*
|
||||||
|
* +-----------------------------+
|
||||||
|
* | ciao | | quit |
|
||||||
|
* +-----------------------------+
|
||||||
|
* | # 0.3 |
|
||||||
|
* | # |
|
||||||
|
* +-----------------------------+
|
||||||
|
* | lorem ipsum |
|
||||||
|
* | dolor et |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* +-----------------------------+
|
||||||
|
*
|
||||||
|
* ug_layout_popup(ctx, {100x50, centrato});
|
||||||
|
* ug_layout_vsplit(ctx, 1, NULL);
|
||||||
|
* ug_button(ctx, "btn1");
|
||||||
|
* ug_button(ctx, "btn2");
|
||||||
|
*
|
||||||
|
* +-----------------------------+
|
||||||
|
* | ciao | | quit |
|
||||||
|
* +-----------------------------+
|
||||||
|
* | # 0.3 |
|
||||||
|
* | # +----------+ |
|
||||||
|
* +--------| btn1 |---------+
|
||||||
|
* | lorem i| | |
|
||||||
|
* | dolor e+----------+ |
|
||||||
|
* | | btn2 | |
|
||||||
|
* | | | |
|
||||||
|
* | +----------+ |
|
||||||
|
* | |
|
||||||
|
* | |
|
||||||
|
* +-----------------------------+
|
||||||
|
*/
|
||||||
|
int ug_layout_vsplit(ug_ctx_t *ctx, int n, const int *heights);
|
||||||
|
int ug_layout_hsplit(ug_ctx_t *ctx, int n, const int *widths);
|
||||||
|
// popup layout, create a rectangle that sits over the view and has a higher
|
||||||
|
// z-index, this allows it to have any position and have focus priority
|
||||||
|
// creating a popup selects it as current layout
|
||||||
|
int ug_layout_popup(ug_ctx_t *ctx, ug_rect_t rect);
|
||||||
|
// get the next rectangular region in the layout context
|
||||||
|
ug_rect_t ug_layout_next(ug_ctx_t *ctx);
|
||||||
|
// get the current layout rectangle area, but do not pop it (select the next)
|
||||||
|
// this is useful to get information about the area's width height and position
|
||||||
|
ug_rect_t ug_layout_get_current(ug_ctx_t *ctx);
|
||||||
|
// set the unit of the dimensions, in the context all units are pixels but
|
||||||
|
// when regions are defined units can be in pixels, millimiters, etc
|
||||||
|
int ui_layout_set_mm(ug_ctx_t *ctx);
|
||||||
|
int ui_layout_set_px(ug_ctx_t *ctx);
|
||||||
|
|
||||||
|
// ui elements
|
||||||
|
int ug_slider(ug_ctx_t *ctx, float *stat, float min, float max);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user