summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-06-25 15:05:09 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-06-25 15:05:09 +0200
commitd5095a462df8c1373da36924a86c1da7fb3b1c49 (patch)
tree40df07dbf466d4ee65f0069547ca2166fd6cb535 /src/kernel
parent96d1781a9ba365baef0f89ef85a2b103bfd6370a (diff)
downloadabaos-d5095a462df8c1373da36924a86c1da7fb3b1c49.tar.gz
abaos-d5095a462df8c1373da36924a86c1da7fb3b1c49.tar.bz2
we have a flickering mouse cursor and terrible redrawing of the desktop now :-)
removed the font window for now, far too slow!
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/kernel.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/kernel/kernel.c b/src/kernel/kernel.c
index 3135a25..f10a1a2 100644
--- a/src/kernel/kernel.c
+++ b/src/kernel/kernel.c
@@ -43,6 +43,7 @@ typedef struct {
vga_t vga;
mode_t mode;
mouse_t mouse;
+ desktop_t desktop;
} global_context_t;
static global_context_t global_context;
@@ -134,6 +135,17 @@ void kernel_main( void )
// so we let the main thread sleep instead of
// burning CPU..
kernel_halt( );
+
+ switch( global_context.mode ) {
+ case MODE_TEXT:
+ break;
+
+ case MODE_GRAPHICS:
+ interrupts_disable( );
+ ((widget_vtable_t *)global_context.desktop.vtable)->draw( &global_context.desktop, &global_context.vga );
+ interrupts_enable( );
+ break;
+ }
}
TERMINATE:
@@ -198,16 +210,15 @@ static void handle_keyboard_event( keyboard_event_t *event, void *context )
switch( global_context->mode ) {
case MODE_TEXT:
if( vga_set_mode( vga, vga_make_mode( VGA_MODE_TYPE_GRAPHICS, 320, 200, 8 ) ) ) {
- desktop_t desktop;
- desktop_init( &desktop, 320, 200, VGA_COLOR_BLUE );
+ desktop_init( &global_context->desktop, 320, 200, VGA_COLOR_BLUE );
widget_t widget1;
- widget_init( &widget1, (widget_t *)&desktop, 60, 90, 60, 70, VGA_COLOR_LIGHT_GREY );
- ((composite_widget_vtable_t *)desktop.vtable)->add_child( &desktop, &widget1 );
+ widget_init( &widget1, (widget_t *)&global_context->desktop, 60, 90, 60, 70, VGA_COLOR_LIGHT_GREY );
+ ((composite_widget_vtable_t *)global_context->desktop.vtable)->add_child( &global_context->desktop, &widget1 );
widget_t widget2;
- widget_init( &widget2, (widget_t *)&desktop, 130, 80, 60, 70, VGA_COLOR_GREEN );
- ((composite_widget_vtable_t *)desktop.vtable)->add_child( &desktop, &widget2 );
+ widget_init( &widget2, (widget_t *)&global_context->desktop, 130, 80, 60, 70, VGA_COLOR_GREEN );
+ ((composite_widget_vtable_t *)global_context->desktop.vtable)->add_child( &global_context->desktop, &widget2 );
char s[100];
char *p = s;
@@ -215,12 +226,13 @@ static void handle_keyboard_event( keyboard_event_t *event, void *context )
*p++ = c;
}
*p = '\0';
- text_widget_t widget3;
- text_widget_init( &widget3, (widget_t *)&desktop, 55, 5, vga->mode.x - 65 , 100, VGA_COLOR_RED, s );
- ((composite_widget_vtable_t *)desktop.vtable)->add_child( &desktop, (widget_t *)&widget3 );
+// 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 *)desktop.vtable)->draw( &desktop, vga );
+ ((widget_vtable_t *)global_context->desktop.vtable)->draw( &global_context->desktop, vga );
mouse_set_resolution( mouse, vga->mode.x, vga->mode.y );
}
@@ -255,6 +267,7 @@ static void handle_mouse_event( mouse_event_t *event, void *context )
global_context_t *global_context = (global_context_t *)context;
vga_text_t *vga_text = &global_context->vga_text;
vga_t *vga = &global_context->vga;
+ desktop_t *desktop = &global_context->desktop;
switch( global_context->mode ) {
case MODE_TEXT:
@@ -287,7 +300,7 @@ static void handle_mouse_event( mouse_event_t *event, void *context )
break;
case MOUSE_EVENT_TYPE_MOVE:
- vga_set_pixel( vga, event->cursor_x, event->cursor_y, VGA_COLOR_WHITE );
+ desktop_on_mouse_move( desktop, event->old_cursor_x, event->old_cursor_y, event->cursor_x, event->cursor_y );
break;
}
break;