* 1. layout is defined by subdividing
* 2. a parent node should never be resized by the content after creation
* 3. when the ui is in an interactive state, no controls should ever move
+ * 4. controls directly reference a memory location and use that as their
+ * unique id
+ * 5. a maximum of ONE control per memory location can be drawn at any given
+ * point.
*/
#ifndef VG_IMGUI_H
int cursor_user, cursor_pos;
u32 len;
u32 flags;
+
+ struct ui_textbox_callbacks{
+ void (*enter)( char *, u32 ),
+ (*up)( char *, u32 ),
+ (*down)( char *, u32 ),
+ (*change)( char *, u32 );
+ }
+ callbacks;
}
textbox;
-
- void (*textbuf_on_enter) ( char *buf, u32 len );
- void (*textbuf_on_up) ( char *buf, u32 len );
- void (*textbuf_on_down) ( char *buf, u32 len );
- void (*textbuf_on_change)( char *buf, u32 len );
GLuint tex_glyphs, vao, vbo, ebo;
}
}
else{
- if( vg_ui.textbuf_on_up ){
- vg_ui.textbuf_on_up( vg_ui.textbuf, vg_ui.textbox.len );
+ if( vg_ui.textbox.callbacks.up ){
+ vg_ui.textbox.callbacks.up( vg_ui.textbuf, vg_ui.textbox.len );
}
}
}
vg_ui.textbox.cursor_pos = line_below_begin+offset;
}
else{
- if( vg_ui.textbuf_on_down ){
- vg_ui.textbuf_on_down( vg_ui.textbuf, vg_ui.textbox.len );
+ if( vg_ui.textbox.callbacks.down ){
+ vg_ui.textbox.callbacks.down( vg_ui.textbuf, vg_ui.textbox.len );
}
}
}
vg_ui.textbox.cursor_user = _ui_textbox_delete_char( -1 );
vg_ui.textbox.cursor_pos = vg_ui.textbox.cursor_user;
- if( vg_ui.textbuf_on_change )
- vg_ui.textbuf_on_change( vg_ui.textbuf, vg_ui.textbox.len );
+ if( vg_ui.textbox.callbacks.change ){
+ vg_ui.textbox.callbacks.change( vg_ui.textbuf, vg_ui.textbox.len );
+ }
}
}
vg_ui.textbox.cursor_user = _ui_textbox_delete_char( 1 );
vg_ui.textbox.cursor_pos = vg_ui.textbox.cursor_user;
- if( vg_ui.textbuf_on_change )
- vg_ui.textbuf_on_change( vg_ui.textbuf, vg_ui.textbox.len );
+ if( vg_ui.textbox.callbacks.change ){
+ vg_ui.textbox.callbacks.change( vg_ui.textbuf, vg_ui.textbox.len );
+ }
}
}
ui_defocus_all();
}
- if( vg_ui.textbuf_on_enter ){
- vg_ui.textbuf_on_enter( vg_ui.textbuf, vg_ui.textbox.len );
+ if( vg_ui.textbox.callbacks.enter ){
+ vg_ui.textbox.callbacks.enter( vg_ui.textbuf, vg_ui.textbox.len );
}
}
}
return printed_chars+1;
}
-static int ui_textbox( ui_rect rect, char *buf, u32 len, u32 flags )
+static int ui_textbox( ui_rect rect, char *buf, u32 len, u32 flags,
+ struct ui_textbox_callbacks *callbacks )
{
int clickup= ui_click_up(UI_MOUSE_LEFT),
click = ui_clicking(UI_MOUSE_LEFT) | clickup,
vg_ui.textbox.cursor_pos = 0;
vg_ui.textbox.cursor_user = 0;
+ if( callbacks ){
+ vg_ui.textbox.callbacks = *callbacks;
+ }
+ else{
+ vg_ui.textbox.callbacks.change = NULL;
+ vg_ui.textbox.callbacks.down = NULL;
+ vg_ui.textbox.callbacks.up = NULL;
+ vg_ui.textbox.callbacks.enter = NULL;
+ }
+
SDL_StartTextInput();
}
}
ptr ++;
}
- if( vg_ui.textbuf_on_change ){
- vg_ui.textbuf_on_change( vg_ui.textbuf, vg_ui.textbox.len );
+ if( vg_ui.textbox.callbacks.change ){
+ vg_ui.textbox.callbacks.change( vg_ui.textbuf, vg_ui.textbox.len );
}
}
}