diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-30 13:02:10 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-30 13:02:10 +0200 |
commit | d2af238397ab523b2c1ba7d24875a186b4a8acc6 (patch) | |
tree | 5a99466020e9a6632ad361e846e92e51de5e6be3 /src/kernel | |
parent | ad7f1dd777eda2d6505118c4e47faba3f21e78ba (diff) | |
download | abaos-d2af238397ab523b2c1ba7d24875a186b4a8acc6.tar.gz abaos-d2af238397ab523b2c1ba7d24875a186b4a8acc6.tar.bz2 |
added a third widget (for drawing fonts)
fixed drawing races due to mouse interrupts
Diffstat (limited to 'src/kernel')
-rw-r--r-- | src/kernel/kernel.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c index babb6e0..197f491 100644 --- a/src/kernel/kernel.c +++ b/src/kernel/kernel.c @@ -47,6 +47,8 @@ typedef struct { desktop_t desktop; window_t window1; window_t window2; + window_t window3; + text_widget_t widget3; } global_context_t; static global_context_t global_context; @@ -144,11 +146,20 @@ void kernel_main( void ) break; case MODE_GRAPHICS: + // for now we must avoid races with the interrupt + // events originating especially from the mouse + interrupts_disable( ); + // wait for VGA retrace, assume drawing the desktop // is fast enough to finish in time (so we don't recheck // for retrace) vga_wait_for_retrace( &global_context.vga ); + + // as vga_t is equals to the graphical context for now ((widget_vtable_t *)global_context.desktop.vtable)->draw( &global_context.desktop, &global_context.vga ); + + interrupts_enable( ); + break; } } @@ -170,6 +181,7 @@ void kernel_panic( const char *format, ... ) va_start( args, format ); (void)vprintf( format, args ); va_end( args ); + puts( "" ); longjmp( panic_jmp_buf, 47 ); } @@ -229,13 +241,12 @@ static void handle_keyboard_event( keyboard_event_t *event, void *context ) *p++ = c; } *p = '\0'; -// TODO: far too slow, must improve memory to VGA memory operations like copy block and masking -// text_widget_t widget3; -// text_widget_init( &widget3, (widget_t *)&global_context->desktop, 55, 5, vga->mode.x - 65 , 100, VGA_COLOR_RED, s ); -// ((composite_widget_vtable_t *)global_context->desktop.vtable)->add_child( &global_context->desktop, (widget_t *)&widget3 ); - // as vga_t is equals to the graphical context for now - ((widget_vtable_t *)global_context->desktop.vtable)->draw( &global_context->desktop, vga ); + window_init( &global_context->window3, (widget_t *)&global_context->desktop, 55, 5, vga->mode.x - 65, 100, VGA_COLOR_WHITE ); + ((composite_widget_vtable_t *)global_context->desktop.vtable)->add_child( &global_context->desktop, (widget_t *)&global_context->window3 ); + +// text_widget_init( &global_context->widget3, (widget_t *)&global_context->window3, 1, 1, global_context->window3.base.base.w - 2, global_context->window3.base.base.h - 2, VGA_COLOR_RED, s ); +// ((composite_widget_vtable_t *)global_context->window3.vtable)->add_child( (composite_widget_t *)&global_context->window3, (widget_t *)&global_context->widget3 ); mouse_set_resolution( mouse, vga->mode.x, vga->mode.y ); } |