From fe8180d88540bfa96595dcc58290de5425e534e3 Mon Sep 17 00:00:00 2001 From: Miguel Date: Fri, 5 Oct 2018 23:41:51 +0200 Subject: drunken proggin --- video/compositor.c | 31 ++++++++++++++++++++++++++++--- video/compositor.h | 4 +++- 2 files changed, 31 insertions(+), 4 deletions(-) (limited to 'video') diff --git a/video/compositor.c b/video/compositor.c index d0d5bfa..5dca7bd 100644 --- a/video/compositor.c +++ b/video/compositor.c @@ -1,5 +1,6 @@ #include "compositor.h" +#include "syscalls.h" #include "kernel.h" #include "kmalloc.h" #include "log.h" @@ -25,6 +26,7 @@ struct window uint16_t height; uint32_t color; uint16_t active; + uint32_t pid; struct pdirectory *vmem; }; @@ -42,6 +44,8 @@ static uint16_t mouse_x=100; static uint16_t mouse_y=100; static uint16_t mouse_k; +static bool skip_render; + static void put_pixel(int x,int y, uint32_t color) { vmem[y*vesa_width+x]=color; @@ -49,11 +53,11 @@ static void put_pixel(int x,int y, uint32_t color) static void put_win(struct window *win) { - struct pdirectory* mydir=x86_get_page_directory(); - + struct pdirectory* mydir; if(win->vmem) { x86_cli();// do not reschedule us til ready! + mydir=x86_get_page_directory(); x86_set_page_directory(win->vmem); } @@ -179,7 +183,7 @@ void compositor_del_window(uint32_t addr) } } -void compositor_add_window(uint32_t addr) +void compositor_add_window(uint32_t addr,uint32_t pid) { klog("window added"); if (next_window>=MAX_WINDOWS)kpanic("max number of windows reached. increase MAX_WINDOWS"); @@ -198,6 +202,7 @@ void compositor_add_window(uint32_t addr) windows[0].color=0xAAAA00AA; windows[0].active=0; windows[0].vmem=addr; + windows[0].pid=pid; next_window++; } @@ -209,8 +214,16 @@ void compositor_init(uint16_t width, uint16_t height, uint16_t pitch) klog("initialized composing window manager to %d x %d",width,height); } +void compositor_wake() +{ + skip_render=false; +} + void compositor_swap_buffers() { + if(skip_render)return; + skip_render=true; + static bool first=true; // if(!first)return; // klog("swap"); @@ -226,6 +239,18 @@ void compositor_swap_buffers() memcpy(VMEM_FRAMEBUFFER,backbuffer,vesa_height*vesa_width*4);// TODO optimize? rects only too? first=false; } +void compositor_kb_handle(char c) +{ + for(int i=0;iactive) + { +// klog("writing [%c] to window with pid [%d]",c,w->pid); + fd_write(get_fd(w->pid,1),c); + } + } +} void compositor_mouse_handle(uint16_t x,uint16_t y, uint8_t key) { diff --git a/video/compositor.h b/video/compositor.h index b8710b6..f109018 100644 --- a/video/compositor.h +++ b/video/compositor.h @@ -1,8 +1,10 @@ #include +void compositor_wake(); void compositor_init(uint16_t width, uint16_t height, uint16_t pitch); void compositor_set_background(char *ppm_raw_filename); void compositor_swap_buffers(); void compositor_mouse_handle(uint16_t x,uint16_t y, uint8_t key); -void compositor_add_window(uint32_t addr); +void compositor_kb_handle(char c); +void compositor_add_window(uint32_t addr,uint32_t pid); void compositor_del_window(uint32_t addr); -- cgit v1.2.3