Mercurial > hg > dmlib
annotate dmscaledblit.h @ 60:f28cd66356f6
Initial work for bitmapped fonts and text drawing. Also moved TTF header
stuff to dmtext.h.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 01 Oct 2012 09:46:56 +0300 |
parents | d9251dd496ce |
children | c257d73cf790 |
rev | line source |
---|---|
0 | 1 /* |
2 * DMLib | |
3 * -- Sprite / surface blitting function template | |
4 * Programmed and designed by Matti 'ccr' Hamalainen | |
5 * (C) Copyright 2011-2012 Tecnic Software productions (TNSP) | |
6 */ | |
7 | |
8 int DM_SCALED_NAME (SDL_Surface *src, | |
9 const int x0, const int y0, | |
10 const int dwidth, const int dheight, | |
16
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
11 SDL_Surface *dst |
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
12 #ifdef DM_SCALED_ARGS |
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
13 DM_SCALED_ARGS |
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
14 #endif |
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
15 ) |
0 | 16 { |
17 int yc; | |
18 DMFixedPoint32 xv, yv, dx, dy; | |
19 DMQValue xr, yr; | |
20 | |
21 #ifdef DM_SCALED_VARS | |
22 DM_SCALED_VARS | |
23 #endif | |
24 | |
25 // Clip coordinates | |
26 if (dmClipCoord(&xr, x0, src->w, dwidth, | |
27 dst->clip_rect.x, dst->clip_rect.x + dst->clip_rect.w) | |
28 || | |
29 dmClipCoord(&yr, y0, src->h, dheight, | |
30 dst->clip_rect.y, dst->clip_rect.y + dst->clip_rect.h)) | |
31 return -1; | |
32 | |
33 #ifdef DM_SCALED_INIT | |
34 DM_SCALED_INIT | |
35 #endif | |
36 | |
37 // Calculate "final" initial source bitmap offsets | |
38 FP_CONV(dy, yr.voffs); | |
39 FP_MUL_R(yv, dy, yr.vdelta); | |
40 | |
41 FP_CONV(dx, xr.voffs); | |
42 FP_MUL_R(dx, dx, xr.vdelta); | |
43 | |
44 // Take pitch into account | |
45 const int xadd = xr.vadd - dst->clip_rect.w + dst->clip_rect.x + (dst->pitch / DM_SCALED_DST_BYTES); | |
46 | |
47 // Blit scaled | |
48 DM_SCALED_DST_TYPE * dp = ((DM_SCALED_DST_TYPE *) dst->pixels) + (yr.v0 * dst->pitch) / DM_SCALED_DST_BYTES + xr.v0; | |
49 for (yc = yr.v0; yc < yr.v1; yc++) | |
50 { | |
51 const DM_SCALED_SRC_TYPE * sp = ((DM_SCALED_SRC_TYPE *) src->pixels) + (FP_GETH(yv) * src->pitch) / DM_SCALED_SRC_BYTES; | |
52 int xc; | |
53 | |
54 #ifdef DM_SCALED_INNER_INIT | |
55 DM_SCALED_INNER_INIT | |
56 #endif | |
57 | |
58 for (xv.dw = dx.dw, xc = xr.v0; xc < xr.v1; xc++) | |
59 { | |
60 DM_SCALED_INNER | |
61 FP_ADD(xv, xr.vdelta); | |
62 } | |
63 FP_ADD(yv, yr.vdelta); | |
64 dp += xadd; | |
65 } | |
66 | |
67 #ifdef DM_SCALED_FINISH | |
68 DM_SCALED_FINISH | |
69 #endif | |
70 | |
71 return 0; | |
72 } | |
73 | |
74 | |
75 #undef DM_SCALED_NAME | |
16
d9251dd496ce
Add new scaled blit template parameters in order to implement global alpha.
Matti Hamalainen <ccr@tnsp.org>
parents:
0
diff
changeset
|
76 #undef DM_SCALED_ARGS |
0 | 77 #undef DM_SCALED_SRC_BYTES |
78 #undef DM_SCALED_DST_BYTES | |
79 #undef DM_SCALED_SRC_TYPE | |
80 #undef DM_SCALED_DST_TYPE | |
81 #undef DM_SCALED_VARS | |
82 #undef DM_SCALED_INIT | |
83 #undef DM_SCALED_INNER_INIT | |
84 #undef DM_SCALED_INNER | |
85 #undef DM_SCALED_FINISH |