diff options
Diffstat (limited to 'video')
| -rw-r--r-- | video/compositor.c | 65 |
1 files changed, 59 insertions, 6 deletions
diff --git a/video/compositor.c b/video/compositor.c index 4debe9a..d6689a7 100644 --- a/video/compositor.c +++ b/video/compositor.c @@ -5,6 +5,7 @@ #include "kmalloc.h" #include "log.h" #include "vmem.h" +#include "timer.h" #include "asm_x86.h" #include "mount.h" @@ -32,6 +33,9 @@ struct window struct window windows[MAX_WINDOWS]; +static uint32_t display_width=1920; +static uint32_t display_height=1080; + static uint16_t next_window=0; static uint16_t next_x=50; static uint16_t next_y=50; @@ -156,15 +160,27 @@ static void put_mouse() { if(mouse_k&1) { - for(int i=-5;i<5;i++) - for(int j=-5;j<5;j++) - backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00; + for(int i=0;i<1;i++) + for(int j=0;j<display_height;j++) +// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00; + backbuffer[(j)*vesa_width+mouse_x+i]=0x0044ee; + + for(int i=0;i<display_width;i++) + for(int j=0;j<1;j++) +// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00; + backbuffer[(mouse_y+j)*vesa_width+i]=0x0044ee; } else { - for(int i=-5;i<5;i++) - for(int j=-5;j<5;j++) - backbuffer[(mouse_y+i)*vesa_width+mouse_x+j]=0xff0000; + for(int i=0;i<1;i++) + for(int j=0;j<display_height;j++) +// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00; + backbuffer[(j)*vesa_width+mouse_x+i]=0x000099; + + for(int i=0;i<display_width;i++) + for(int j=0;j<1;j++) +// backbuffer[(mouse_y+j)*vesa_width+mouse_x+i]=0x00ff00; + backbuffer[(mouse_y+j)*vesa_width+i]=0x000099; } } @@ -236,6 +252,8 @@ void compositor_swap_buffers() // klog("swap"); // background memcpy(backbuffer,bgimage,vesa_height*vesa_width*4);// TODO optimize? rects only too? + // compositor_set_background(0); + for(int i=next_window-1;i>=0;i--) { @@ -316,8 +334,22 @@ void compositor_mouse_handle(uint16_t x,uint16_t y, uint8_t key) } } +// https://stackoverflow.com/questions/3581528/how-is-the-square-root-function-implemented +double sqroot(double n){ + double lo = 0, hi = n, mid; + for(int i = 0 ; i < 10 ; i++){ + mid = (lo+hi)/2; + if(mid*mid == n) return mid; + if(mid*mid > n) hi = mid; + else lo = mid; + } + return mid; +} + void compositor_set_background(char *ppm_raw_filename) { +// uint64_t t=timer_get_ms()/333; + /* klog("loading bg..."); fd bg=mount_file_open(ppm_raw_filename); @@ -334,4 +366,25 @@ void compositor_set_background(char *ppm_raw_filename) } klog("finished"); + */ + + int center_x=vesa_width/2; + int center_y=vesa_height/2; + + int max_dist = center_x*center_x+center_y*center_y; + + for(int x=0;x<vesa_width;x++) + { + for(int y=0;y<vesa_height;y++) + { + int diffx=center_x-x; + int diffy=center_y-y; + int dist=diffx*diffx+diffy*diffy; + int val = 0xff*dist/max_dist; + + bgimage[x+y*vesa_width]=val; + //backbuffer[x+y*vesa_width]=valr<<16; + } + } + } |
