summaryrefslogtreecommitdiff
path: root/src/gui/desktop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/desktop.c')
-rw-r--r--src/gui/desktop.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gui/desktop.c b/src/gui/desktop.c
index 6592b52..ad4aad9 100644
--- a/src/gui/desktop.c
+++ b/src/gui/desktop.c
@@ -28,6 +28,7 @@ void desktop_init( desktop_t *desktop, const int w, const int h, const vga_color
desktop->mouse_x = w / 2;
desktop->mouse_y = h / 2;
+ desktop->needs_redrawing = true;
desktop->base.base.vtable = (widget_vtable_t *)&desktop_vtable;
desktop->base.vtable = (composite_widget_vtable_t *)&desktop_vtable;
@@ -38,6 +39,10 @@ void desktop_draw( void *obj, graphics_context_t *context )
{
desktop_t *desktop = obj;
+ if( !desktop->needs_redrawing ) {
+ return;
+ }
+
vga_clear_screen( context, desktop->base.base.background_color );
composite_widget_draw( obj, context );
@@ -56,16 +61,26 @@ void desktop_draw( void *obj, graphics_context_t *context )
vga_set_pixel( context, desktop->mouse_x, desktop->mouse_y + i, VGA_COLOR_WHITE );
}
}
+
+ desktop->needs_redrawing = false;
}
void desktop_on_mouse_down( void *obj, const int x, const int y )
{
+ desktop_t *desktop = obj;
+
composite_widget_on_mouse_down( obj, x, y );
+
+ desktop->needs_redrawing = true;
}
void desktop_on_mouse_up( void *obj, const int x, const int y )
{
+ desktop_t *desktop = obj;
+
composite_widget_on_mouse_up( obj, x, y );
+
+ desktop->needs_redrawing = true;
}
void desktop_on_mouse_move( void *obj, const int old_x, const int old_y, const int x, const int y )
@@ -76,4 +91,6 @@ void desktop_on_mouse_move( void *obj, const int old_x, const int old_y, const i
desktop->mouse_y = y;
composite_widget_on_mouse_move( obj, old_x, old_y, x, y );
+
+ desktop->needs_redrawing = true;
}