2 #include "surf_util.h"
\r
6 SDL_Surface* noShadow(SDL_Surface* surf,int is_black,int is_fix_size){
\r
10 #define SHADOW_SIZE 3
\r
12 SDL_Surface* likeNicoNico(SDL_Surface* surf,int is_black,int is_fix_size){
\r
13 /*
\83X
\83\89\83C
\83h
\95\9d\82Ì
\8am
\92è*/
\r
14 int slide = SHADOW_SIZE;
\r
20 SDL_Surface* shadow = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
\r
24 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
\r
36 SDL_Surface* shadow2 = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
\r
40 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
\r
52 SDL_Rect rect = {slide,slide};
\r
53 SDL_SetAlpha(surf,0,0xff);
\r
54 SDL_BlitSurface(surf,NULL,shadow,&rect);
\r
55 SDL_SetAlpha(surf,SDL_SRCALPHA,0xff);
\r
56 if(is_black){//
\8d\95\82Å
\82 \82ê
\82Î
\81A
\8eü
\82è
\82ð
\82µ
\82ë
\82Å
\88Í
\82Þ
\r
57 setRGB(shadow,0xffffffff);
\r
61 SDL_SetAlpha(shadow,0,0xff);
\r
62 SDL_BlitSurface(shadow,NULL,shadow2,NULL);
\r
63 SDL_SetAlpha(shadow,SDL_SRCALPHA,0xff);
\r
69 int pitch = shadow->pitch;
\r
70 int bps = shadow->format->BytesPerPixel;
\r
71 Uint32 Amask = shadow->format->Amask;
\r
72 Uint32 Mask = (shadow->format->Rmask | shadow->format->Gmask | shadow->format->Bmask);
\r
73 Uint32 Ashift = shadow->format->Ashift;
\r
74 Uint32 Aloss = shadow->format->Aloss;
\r
75 SDL_LockSurface(shadow);
\r
76 SDL_LockSurface(shadow2);
\r
77 //
\82±
\82±
\82Í
\8bô
\90\94\82É
\82·
\82é
\82±
\82Æ
\81B
\r
83 for(z=0;z<zmax;z++){
\r
84 char *pixels = (char*)shadow->pixels;
\r
85 char *pixels2 = (char*)shadow2->pixels;
\r
87 pix = (int*)(&pixels[pitch * y]);
\r
88 pix2 = (int*)(&pixels2[pitch * y]);
\r
90 int right = (x==nw-1) ? 0 : *(int*)((((char*)pix)+bps));
\r
91 int left = (x==0) ? 0 : *(int*)((((char*)pix)-bps));
\r
92 int up = (y==0) ? 0 : *(int*)((((char*)pix)-pitch));
\r
93 int down = (y==nh-1) ? 0 : *(int*)((((char*)pix)+pitch));
\r
95 int new_alpha = (((((my & Amask) >> Ashift) << Aloss) +(((right & Amask) >> Ashift) << Aloss)+(((left & Amask) >> Ashift) << Aloss)+(((up & Amask) >> Ashift) << Aloss)+(((down & Amask) >> Ashift) << Aloss)) / 5) & 0xff;
\r
96 new_alpha = (new_alpha * 18) >> 4;
\r
97 if(new_alpha > 0xff){
\r
101 *pix2 |= ((new_alpha >> Aloss) << Ashift) & Amask;
\r
102 pix = (int*)(((char*)pix)+bps);
\r
103 pix2 = (int*)(((char*)pix2)+bps);
\r
110 SDL_UnlockSurface(shadow);
\r
111 SDL_UnlockSurface(shadow2);
\r
112 shadowBlitSurface(surf,NULL,shadow,&rect);
\r
113 SDL_FreeSurface(surf);
\r
114 SDL_FreeSurface(shadow2);
\r
119 #define SHADOW_SLIDE 2
\r
120 SDL_Surface* likeNovel(SDL_Surface* surf,int is_black,int is_fix_size){
\r
121 /*
\83X
\83\89\83C
\83h
\95\9d\82Ì
\8am
\92è*/
\r
122 int slide = SHADOW_SLIDE;
\r
126 /*
\8d\95\82Ì
\97p
\88Ó*/
\r
127 SDL_Surface* black = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
\r
131 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
\r
143 SDL_Rect rect = {slide,slide};
\r
144 SDL_SetAlpha(surf,0,0xff);//
\88ê
\89ñalpha
\8d\87\90¬
\82ð
\90Ø
\82é
\r
145 SDL_BlitSurface(surf,NULL,black,&rect);
\r
146 SDL_SetAlpha(surf,SDL_SRCALPHA,0xff);
\r
147 if(is_black){//
\8d\95\82Å
\82 \82ê
\82Î
\81A
\8eü
\82è
\82ð
\82µ
\82ë
\82Å
\88Í
\82Þ
\r
148 setRGB(black,0xffffffff);
\r
152 setAlpha(black,0.6f);
\r
153 shadowBlitSurface(surf,NULL,black,NULL);
\r
154 SDL_FreeSurface(surf);
\r
158 //
\8eU
\82ç
\82·
\82Ì
\82Å
\82Í
\82È
\82
\81A
\88Í
\82Á
\82Ä
\82µ
\82Ü
\82¤
\81B
\r
159 SDL_Surface* likeOld(SDL_Surface* surf,int is_black,int is_fix_size){
\r
160 /*
\83X
\83\89\83C
\83h
\95\9d\82Ì
\8am
\92è*/
\r
161 int slide = SHADOW_SIZE;
\r
167 SDL_Surface* shadow = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
\r
171 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
\r
183 SDL_Surface* shadow2 = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
\r
187 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
\r
199 SDL_Rect rect = {slide,slide};
\r
200 SDL_SetAlpha(surf,0,0xff);
\r
201 SDL_BlitSurface(surf,NULL,shadow,&rect);
\r
202 SDL_SetAlpha(surf,SDL_SRCALPHA,0xff);
\r
203 if(is_black){//
\8d\95\82Å
\82 \82ê
\82Î
\81A
\8eü
\82è
\82ð
\82µ
\82ë
\82Å
\88Í
\82Þ
\r
204 setRGB(shadow,0xffffffff);
\r
208 SDL_SetAlpha(shadow,0,0xff);
\r
209 SDL_BlitSurface(shadow,NULL,shadow2,NULL);
\r
210 SDL_SetAlpha(shadow,SDL_SRCALPHA,0xff);
\r
212 int nw = shadow->w;
\r
213 int nh = shadow->h;
\r
216 int pitch = shadow->pitch;
\r
217 int bps = shadow->format->BytesPerPixel;
\r
218 Uint32 Amask = shadow->format->Amask;
\r
219 Uint32 Mask = (shadow->format->Rmask | shadow->format->Gmask | shadow->format->Bmask);
\r
220 Uint32 Ashift = shadow->format->Ashift;
\r
221 Uint32 Aloss = shadow->format->Aloss;
\r
223 SDL_LockSurface(shadow);
\r
224 SDL_LockSurface(shadow2);
\r
229 for(z=0;z<zmax;z++){
\r
230 char *pixels = (char*)shadow->pixels;
\r
231 char *pixels2 = (char*)shadow2->pixels;
\r
233 pix = (int*)(&pixels[pitch * y]);
\r
234 pix2 = (int*)(&pixels2[pitch * y]);
\r
236 int right = (x==nw-1) ? 0 : *(int*)((((char*)pix)+bps));
\r
237 int left = (x==0) ? 0 : *(int*)((((char*)pix)-bps));
\r
238 int up = (y==0) ? 0 : *(int*)((((char*)pix)-pitch));
\r
239 int down = (y==nh-1) ? 0 : *(int*)((((char*)pix)+pitch));
\r
241 //
\8eü
\82è
\82ª
\8bó
\94\92\82Å
\82È
\82¢
\r
242 if(((right | left | up | down | my) & Amask) != 0){
\r
244 *pix2 |= (((0xff/(z+1)) >> Aloss) << Ashift) & Amask;
\r
246 pix = (int*)(((char*)pix)+bps);
\r
247 pix2 = (int*)(((char*)pix2)+bps);
\r
254 SDL_UnlockSurface(shadow);
\r
255 SDL_UnlockSurface(shadow2);
\r
256 shadowBlitSurface(surf,NULL,shadow,&rect);
\r
257 SDL_FreeSurface(surf);
\r
258 SDL_FreeSurface(shadow2);
\r
264 SDL_Surface* (*ShadowFunc[SHADOW_MAX])(SDL_Surface* surf,int is_black,int is_fix_size) = {
\r