Root/
Source at commit 1492 created 12 years 10 months ago. By blackosx, re-enable copying of SetFile, add line to copy fdisk440 to relevant package script folders. Add correct path to where fdisk440 for script to work. Next problem to sort is find where org.chameleon.Boot.plist is created?? | |
---|---|
1 | ␊ |
2 | /* Graphic utility functions and data types␊ |
3 | * Prashant Vaibhav (C) 12/12/2008␊ |
4 | * Chameleon␊ |
5 | */␊ |
6 | #include "boot.h"␊ |
7 | #include "graphic_utils.h"␊ |
8 | #include "gui.h"␊ |
9 | ␊ |
10 | void blend( const pixmap_t *blendThis, // Source image␊ |
11 | pixmap_t *blendInto, // Dest image␊ |
12 | const position_t position) // Where to place the source image␊ |
13 | {␊ |
14 | uint16_t sx, sy, dx, dy;␊ |
15 | uint32_t dstrb, dstag, srcrb, srcag, drb, dag, rb, ag, alpha;␊ |
16 | ␉␊ |
17 | ␉uint16_t width = (blendThis->width + position.x < blendInto->width) ? blendThis->width: blendInto->width-position.x;␊ |
18 | ␉uint16_t height = (blendThis->height + position.y < blendInto->height) ? blendThis->height: blendInto->height-position.y;␊ |
19 | ␉␊ |
20 | for (dy = position.y, sy = 0; sy < height; dy++, sy++) {␊ |
21 | for (dx = position.x, sx = 0; sx < width; dx++, sx++) {␊ |
22 | alpha = (pixel(blendThis, sx, sy).ch.a);␊ |
23 | ␊ |
24 | ␉ /* Skip blending for fully transparent pixel */␊ |
25 | ␉ if (alpha == 0) continue;␊ |
26 | ␊ |
27 | ␉ /* For fully opaque pixel, there is no need to interpolate */␊ |
28 | ␉ if (alpha == 255) {␊ |
29 | ␉␉ pixel(blendInto, dx, dy).value = pixel(blendThis, sx, sy).value;␊ |
30 | ␉␉ continue;␊ |
31 | ␉ }␊ |
32 | ␊ |
33 | ␉ /* For semi-transparent pixels, do a full blend */␊ |
34 | ␉ //alpha++␊ |
35 | ␉␉ /* This is needed to spread the alpha over [0..256] instead of [0..255]␊ |
36 | ␉␉␉Boundary conditions were handled above */␊ |
37 | dstrb = pixel(blendInto, dx, dy).value & 0xFF00FF;␊ |
38 | dstag = (pixel(blendInto, dx, dy).value >> 8) & 0xFF00FF;␊ |
39 | srcrb = pixel(blendThis, sx, sy).value & 0xFF00FF;␊ |
40 | srcag = (pixel(blendThis, sx, sy).value >> 8) & 0xFF00FF;␊ |
41 | drb = srcrb - dstrb;␊ |
42 | dag = srcag - dstag;␊ |
43 | drb *= alpha; dag *= alpha;␊ |
44 | drb >>= 8; dag >>= 8;␊ |
45 | rb = (drb + dstrb) & 0x00FF00FF;␊ |
46 | ag = ((dag + dstag) << 8) & 0xFF00FF00;␊ |
47 | pixel(blendInto, dx, dy).value = (rb | ag);␊ |
48 | }␊ |
49 | }␊ |
50 | }␊ |
51 | ␊ |
52 | position_t centeredIn( const pixmap_t *background, const pixmap_t *toCenter )␊ |
53 | {␊ |
54 | position_t centered;␊ |
55 | centered.x = ( background->width - toCenter->width ) / 2;␊ |
56 | centered.y = ( background->height - toCenter->height ) / 2;␊ |
57 | return centered;␊ |
58 | }␊ |
59 | ␊ |
60 | position_t centeredAt( const pixmap_t *pixmap, const position_t center )␊ |
61 | {␊ |
62 | position_t topleft;␊ |
63 | topleft.x = center.x - (pixmap->width / 2);␊ |
64 | topleft.y = center.y - (pixmap->height / 2);␊ |
65 | return topleft;␊ |
66 | }␊ |
67 | ␊ |
68 | position_t pos(const uint16_t x, const uint16_t y) { position_t p; p.x = x; p.y = y; return p; }␊ |
69 | ␊ |
70 | void flipRB(pixmap_t *p)␊ |
71 | {␊ |
72 | ␉//if(testForQemu()) return;␊ |
73 | ␉␊ |
74 | ␉uint32_t x;␊ |
75 | register uint8_t tempB;␊ |
76 | ␉for (x = 0; x < (p->height) * (p->width) ; x++) {␊ |
77 | ␉␉tempB = (p->pixels[x]).ch.b;␊ |
78 | (p->pixels[x]).ch.b = (p->pixels[x]).ch.r;␊ |
79 | (p->pixels[x]).ch.r = tempB;␊ |
80 | ␉}␊ |
81 | }␊ |
82 |