menios icon indicating copy to clipboard operation
menios copied to clipboard

Implement desktop shell (panel, wallpaper, launcher)

Open pbalduino opened this issue 3 months ago • 0 comments

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

  • #396: Cairo (rendering)
  • #403: Compositor core
  • #405: Window manager core

See docs/road/road_to_gui.md for complete roadmap.

pbalduino avatar Oct 30 '25 22:10 pbalduino