summaryrefslogtreecommitdiff
path: root/userland
diff options
context:
space:
mode:
Diffstat (limited to 'userland')
-rw-r--r--userland/windowserver/draw.c14
-rw-r--r--userland/windowserver/draw.h1
-rw-r--r--userland/windowserver/ws.c11
-rw-r--r--userland/windowserver/ws.h2
4 files changed, 19 insertions, 9 deletions
diff --git a/userland/windowserver/draw.c b/userland/windowserver/draw.c
index caa16a2..1794378 100644
--- a/userland/windowserver/draw.c
+++ b/userland/windowserver/draw.c
@@ -1,8 +1,6 @@
#include "draw.h"
#include <string.h>
-#define BPP 4
-
#define place_pixel(_p, _w, _h) \
{ *(uint32_t *)(disp->back_buffer + BPP * (_w) + (WIDTH * BPP * (_h))) = _p; }
@@ -24,9 +22,7 @@ void update_display(DISPLAY *disp) {
}
void draw_wallpaper(DISPLAY *disp) {
- for (int i = 0; i < disp->size / BPP; i++) {
- place_pixel_pos(0xFF00FF, i);
- }
+memcpy(disp->back_buffer, disp->wallpaper_buffer, disp->size);
}
void draw_mouse(DISPLAY *disp, int mouse_x, int mouse_y) {
@@ -45,11 +41,11 @@ void draw_window(DISPLAY *disp, const WINDOW *w) {
x = px;
y = py;
for (int i = 0; i < sy; i++) {
- if((i+py)*WIDTH + px > HEIGHT*WIDTH)
- break;
+ if ((i + py) * WIDTH + px > HEIGHT * WIDTH)
+ break;
uint32_t *ptr = disp->back_buffer + BPP * ((i + py) * WIDTH) + px * BPP;
- if(i*sx > HEIGHT*WIDTH)
- break;
+ if (i * sx > HEIGHT * WIDTH)
+ break;
uint32_t *bm = &w->bitmap_ptr[i * sx];
// ((uint8_t *)w->bitmap_ptr) + BPP * ((i + py) * WIDTH) + px * BPP;
for (int j = 0; j < sx; j++) {
diff --git a/userland/windowserver/draw.h b/userland/windowserver/draw.h
index bf9ff4f..cebe0fa 100644
--- a/userland/windowserver/draw.h
+++ b/userland/windowserver/draw.h
@@ -4,6 +4,7 @@
#define WIDTH 0x500
#define HEIGHT 0x320
+#define BPP 4
void draw_wallpaper(DISPLAY *disp);
void draw_window(DISPLAY *disp, const WINDOW *w);
diff --git a/userland/windowserver/ws.c b/userland/windowserver/ws.c
index da1bdaa..6c7e6ee 100644
--- a/userland/windowserver/ws.c
+++ b/userland/windowserver/ws.c
@@ -69,6 +69,17 @@ void setup_display(DISPLAY *disp, const char *path, uint64_t size) {
disp->true_buffer = mmap(NULL, size, 0, 0, disp->vga_fd, 0);
disp->back_buffer = malloc(size + 0x1000);
disp->clients = clients;
+
+ disp->wallpaper_fd = shm_open("wallpaper", O_RDWR, 0);
+ assert(disp->wallpaper_fd >= 0);
+ ftruncate(disp->wallpaper_fd, size);
+ void *rc = mmap(NULL, size, 0, 0, disp->wallpaper_fd, 0);
+ assert(rc);
+ disp->wallpaper_buffer = rc;
+ for (int i = 0; i < disp->size / BPP; i++) {
+ uint32_t *p = disp->wallpaper_buffer + i * sizeof(uint32_t);
+ *p = 0xFFFFFF;
+ }
}
void setup(void) {
diff --git a/userland/windowserver/ws.h b/userland/windowserver/ws.h
index c4daf7b..864fc53 100644
--- a/userland/windowserver/ws.h
+++ b/userland/windowserver/ws.h
@@ -19,6 +19,8 @@ typedef struct {
typedef struct {
int vga_fd;
+ int wallpaper_fd;
+ uint8_t *wallpaper_buffer;
uint8_t *back_buffer;
uint8_t *true_buffer;
size_t size;