-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Summary
Implement the desktop shell that provides the desktop environment, including panel/taskbar, wallpaper, application launcher, and system tray.
Goals
- Desktop background/wallpaper
- Panel/taskbar at top or bottom
- Application launcher menu
- System tray (clock, volume, etc.)
- Window list in panel
- Logout/shutdown menu
Implementation
Desktop Background
```c
void desktop_draw_background() {
cairo_t *cr = cairo_create(screen_surface);
// Solid color or gradient
cairo_set_source_rgb(cr, 0.15, 0.15, 0.20);
cairo_paint(cr);
// Or load wallpaper image
// cairo_surface_t *wallpaper = cairo_image_surface_create_from_png(...);
// cairo_set_source_surface(cr, wallpaper, 0, 0);
// cairo_paint(cr);
cairo_destroy(cr);
}
```
Panel
```c
#define PANEL_HEIGHT 28
void panel_draw() {
cairo_t *cr = cairo_create(screen_surface);
// Panel background
cairo_rectangle(cr, 0, 0, screen_width, PANEL_HEIGHT);
cairo_set_source_rgb(cr, 0.1, 0.1, 0.1);
cairo_fill(cr);
// Application menu button
draw_button(cr, 5, 2, 80, 24, "Applications");
// Window list
int x = 100;
for (struct window *w = windows; w; w = w->next) {
draw_button(cr, x, 2, 100, 24, w->title);
x += 105;
}
// System tray (right side)
draw_clock(cr, screen_width - 100, 2);
draw_volume_icon(cr, screen_width - 150, 2);
cairo_destroy(cr);
}
```
Application Launcher
```c
struct app_entry {
const char *name;
const char *exec;
const char *icon;
};
struct app_entry apps[] = {
{ "Terminal", "/bin/terminal", "terminal.png" },
{ "Text Editor", "/bin/editor", "editor.png" },
{ "File Manager", "/bin/files", "folder.png" },
{ "Calculator", "/bin/calc", "calc.png" },
{ NULL, NULL, NULL }
};
void launcher_show_menu() {
// Draw menu popup
cairo_t *cr = cairo_create(screen_surface);
int y = PANEL_HEIGHT + 5;
for (int i = 0; apps[i].name; i++) {
draw_menu_item(cr, 5, y, 200, 30, apps[i].name, apps[i].icon);
y += 35;
}
cairo_destroy(cr);
}
void launcher_exec(const char *command) {
if (fork() == 0) {
execl(command, command, NULL);
exit(1);
}
}
```
Timeline
Total: 3-4 weeks
Definition of Done
- Desktop background renders
- Panel/taskbar displays
- Application launcher works
- Can launch applications from menu
- System tray shows clock
- Window list shows open windows
- Professional desktop appearance
Dependencies
- Port Cairo 2D graphics library to meniOS #396: Cairo (rendering)
- Implement compositor core #403: Compositor core
- Implement composition engine with damage tracking #405: Window manager core
See docs/road/road_to_gui.md for complete roadmap.