summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-06-30 13:02:10 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-06-30 13:02:10 +0200
commitd2af238397ab523b2c1ba7d24875a186b4a8acc6 (patch)
tree5a99466020e9a6632ad361e846e92e51de5e6be3 /src/kernel
parentad7f1dd777eda2d6505118c4e47faba3f21e78ba (diff)
downloadabaos-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.c23
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 );
}