From: hackbard Date: Fri, 14 Sep 2007 10:36:07 +0000 (+0200) Subject: draw rectangle assumed fixes/fins (untested!) X-Git-Url: https://hackdaworld.org/gitweb/?a=commitdiff_plain;h=71bf7666ce24cd3c07bb16648e0ab231e07be6d8;p=my-code%2Farm.git draw rectangle assumed fixes/fins (untested!) --- diff --git a/betty/display.c b/betty/display.c index 2da19ef..ce8fd7c 100644 --- a/betty/display.c +++ b/betty/display.c @@ -7,9 +7,13 @@ /* * some comments on alpha blending! + * ################################ * - * ... - * + * if c is the result of layer a over layer b with opacity alpha: + * + * c=alpha*a+(1-alpha)*b and if alpha is a byte (0-255) + * => c=alpha*a+(255-alpha)*b + * */ #include "display.h" @@ -104,54 +108,55 @@ void display_load_logo(u8 *src) { } } -void display_draw_rectangle(int x,int y,int w,int h,u8 fill,u8 alpha) { +#define display_m2i(m,r) (((((m)[0]>>r)&1)<<1)|(((m)[1]>>r)&1)) - int c,r,rmax; - u8 p,spage,epage; - u8 b[2],a[2]; // c = a over b => c=alpha*a+(1-alpha)*b +void display_draw_rectangle(u8 x,u8 y,u8 w,u8 h,u8 fill,u8 alpha) { - a[0]=0; - a[1]=0; - switch(fill) { - case DISPLAY_FILL_LG: - a[1]=1; - break; - case DISPLAY_FILL_DG: - a[0]=1; - break; - case DISPLAY_FILL_B: - a[0]=1; - a[1]=1; - case DISPLAY_FILL_W: - default: - break; - } + u8 page,col,row,rmax,cnt; + u8 d[2]; + int ca,cb; + u8 a,b,c; // c = a over b + + a=fill&0x03; + ca=0; + for(cnt=0;cnt>3; // start page = y/8 - epage=(y+h)>>3; // end page (y+h)/8 - - for(p=spage;p<=epage;p++) { - DISPLAY_SET_PAGE_ADDR(p); - for(c=x;cy+h?y+h:y+8; - for(r=y;r>3);page<=((y+h)>>3);page++) { // page = y/8 + DISPLAY_SET_PAGE_ADDR(page); + rmax=(page+1)<<3; // row max + if(rmax>y+h) + rmax=y+h; + for(col=x;col>8; + d[0]&=~(1<>1)&1)<