Mercurial > hg > dmlib
annotate dmgfx.c @ 307:397d4a457dc5
Merged.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 11 Oct 2012 21:20:13 +0300 |
parents | e147c07e41cb |
children | 41889c480291 |
rev | line source |
---|---|
0 | 1 #include "dmlib.h" |
2 | |
3 | |
4 void dmFillRect(SDL_Surface *screen, int x0, int y0, int x1, int y1, Uint32 col) | |
5 { | |
6 SDL_Rect rc; | |
7 rc.x = x0; | |
8 rc.y = y0; | |
9 rc.w = x1 - x0 + 1; | |
10 rc.h = y1 - y0 + 1; | |
11 SDL_FillRect(screen, &rc, col); | |
12 } | |
13 | |
14 | |
15 void dmDrawHLine(SDL_Surface *screen, int x0, int x1, int yc, const Uint32 col) | |
16 { | |
17 int x; | |
18 const int bpp = screen->format->BytesPerPixel, | |
19 cx0 = screen->clip_rect.x, cy0 = screen->clip_rect.y, | |
20 cx1 = screen->clip_rect.x + screen->clip_rect.w - 1, | |
21 cy1 = screen->clip_rect.y + screen->clip_rect.h - 1; | |
22 | |
23 DM_SWAP(int, x0, x1); | |
24 if (yc < cy0|| yc > cy1 || x1 < cx0 || x0 > cx1) return; | |
25 if (x0 < cx0) x0 = cx0; | |
26 if (x1 > cx1) x1 = cx1; | |
27 | |
28 Uint8 *pix = screen->pixels + yc * screen->pitch + (x0 * bpp); | |
29 switch (screen->format->BitsPerPixel) | |
30 { | |
31 case 8: | |
32 for (x = x0; x <= x1; x++) | |
33 *pix++ = col; | |
34 break; | |
35 | |
36 case 15: | |
37 case 16: | |
38 { | |
39 Uint16 *p = (Uint16 *) pix; | |
40 for (x = x0; x <= x1; x++) | |
41 *p++ = col; | |
42 } | |
43 break; | |
44 | |
45 case 24: | |
46 for (x = x0; x <= x1; x++) | |
47 { | |
48 *pix++ = col; | |
49 *pix++ = col; | |
50 *pix++ = col; | |
51 } | |
52 break; | |
53 | |
54 case 32: | |
55 { | |
56 Uint32 *p = (Uint32 *) pix; | |
57 for (x = x0; x <= x1; x++) | |
58 *p++ = col; | |
59 } | |
60 break; | |
61 } | |
62 } | |
63 | |
64 | |
65 void dmDrawVLine(SDL_Surface *screen, int y0, int y1, int xc, const Uint32 col) | |
66 { | |
67 int y; | |
68 const int bpp = screen->format->BytesPerPixel, | |
69 pitch = screen->pitch / bpp, | |
70 cx0 = screen->clip_rect.x, cy0 = screen->clip_rect.y, | |
71 cx1 = screen->clip_rect.x + screen->clip_rect.w - 1, | |
72 cy1 = screen->clip_rect.y + screen->clip_rect.h - 1; | |
73 | |
74 DM_SWAP(int, y0, y1); | |
75 if (xc < cx0 || xc > cx1 || y1 < cy0 || y0 > cy1) return; | |
76 if (y0 < cy0) y0 = cy0; | |
77 if (y1 > cy1) y1 = cy1; | |
78 | |
79 Uint8 *pix = screen->pixels + y0 * screen->pitch + (xc * bpp); | |
80 switch (screen->format->BitsPerPixel) | |
81 { | |
82 case 8: | |
83 for (y = y0; y <= y1; y++, pix += pitch) | |
84 *pix = col; | |
85 break; | |
86 | |
87 case 16: | |
88 case 15: | |
89 { | |
90 Uint16 *p = (Uint16 *) pix; | |
91 for (y = y0; y <= y1; y++, p += pitch) | |
92 *p = col; | |
93 } | |
94 break; | |
95 | |
96 case 24: | |
97 for (y = y0; y <= y1; y++, pix += pitch) | |
98 pix[0] = pix[1] = pix[2] = col; | |
99 break; | |
100 | |
101 case 32: | |
102 { | |
103 Uint32 *p = (Uint32 *) pix; | |
104 for (y = y0; y <= y1; y++, p += pitch) | |
105 *p = col; | |
106 } | |
107 break; | |
108 } | |
109 } | |
110 | |
111 | |
150
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
112 void dmDrawBox3D(SDL_Surface *screen, int x0, int y0, int x1, int y1, Uint32 ucol, Uint32 dcol) |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
113 { |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
114 dmDrawHLine(screen, x0 , x1 - 1, y0, ucol); |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
115 dmDrawHLine(screen, x0 + 1, x1 , y1, dcol); |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
116 |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
117 dmDrawVLine(screen, y0 , y1 - 1, x0, ucol); |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
118 dmDrawVLine(screen, y0 + 1, y1 , x1, dcol); |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
119 } |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
120 |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
121 |
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
122 void dmFillBox3D(SDL_Surface *screen, int x0, int y0, int x1, int y1, Uint32 bgcol, Uint32 ucol, Uint32 dcol) |
0 | 123 { |
124 SDL_Rect rc; | |
125 | |
126 rc.x = x0 + 1; | |
127 rc.y = y0 + 1; | |
128 rc.w = x1 - x0 - 1; | |
129 rc.h = y1 - y0 - 1; | |
130 SDL_FillRect(screen, &rc, bgcol); | |
131 | |
150
e147c07e41cb
Add dmDrawBox3D() and dmFillBox3D().
Matti Hamalainen <ccr@tnsp.org>
parents:
118
diff
changeset
|
132 dmDrawBox3D(screen, x0, y0, x1, y1, ucol, dcol); |
0 | 133 } |