typedef struct ui_ctx ui_ctx;
typedef struct ui_colourset ui_colourset;
+// Relative to cursor p0
+enum ui_text_align
+{
+ k_text_align_left = 0,
+ k_text_align_right = 1,
+ k_text_align_center = 2
+};
+
struct ui_colourset
{
union
return ui_fill_rect_uv( ctx, rect, colour, (ui_px[4]){ 4,4, 4,4 } );
}
-static void ui_text( ui_ctx *ctx, const char *str, ui_px scale )
+static ui_px ui_text_line_offset( const char *str, ui_px scale, enum ui_text_align align )
+{
+ if( align == k_text_align_left )
+ return 0;
+
+ int length = 0;
+ const char *_c = str;
+ char c;
+
+ while( (c = *(_c ++)) )
+ if( c >= 32 && c <= 126 )
+ length ++;
+ else if( c == '\n' )
+ break;
+
+ if( align == k_text_align_right )
+ return -length * scale*8;
+ else
+ return (-length * scale*8) / 2;
+}
+
+static void ui_text( ui_ctx *ctx, ui_px pos[2], const char *str, ui_px scale, enum ui_text_align align )
{
ui_rect text_cursor;
+ u32 current_colour = 0x00ffffff;
+
+ const char *_c = str;
+ char c;
- text_cursor[0] = ctx->cursor[0];
- text_cursor[1] = ctx->cursor[1];
+ text_cursor[0] = pos[0] + ui_text_line_offset( str, scale, align );
+ text_cursor[1] = pos[1];
text_cursor[2] = 8*scale;
text_cursor[3] = 14*scale;
- u32 current_colour = 0x00ffffff;
-
- const char *_c = str;
- char c;
while( (c = *(_c ++)) )
{
if( c == '\n' )
{
text_cursor[1] += 14*scale;
- text_cursor[0] = ctx->cursor[0];
+ text_cursor[0] = ctx->cursor[0] + ui_text_line_offset( _c, scale, align );
continue;
}
else if( c >= 33 && c <= 126 )
// title..
ctx->cursor[0] += 2;
ctx->cursor[1] += 2;
- ui_text( ctx, window->title, 2 );
+ ui_text( ctx, ctx->cursor, window->title, 2, 0 );
// Close button
ctx->cursor[3] = 25;
vg_info( "Click clacked\n" );
}
ctx->cursor[0] += 2;
- ui_text( ctx, "x", 2 );
+ ui_text( ctx, ctx->cursor, "x", 2, 0 );
ui_end( ctx );
if( ui_hasmouse( ctx ) )