6 SDL_Surface* noShadow(SDL_Surface* surf,int is_black,int is_fix_size){
12 SDL_Surface* likeNicoNico(SDL_Surface* surf,int is_black,int is_fix_size){
14 int slide = SHADOW_SIZE;
20 SDL_Surface* shadow = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
24 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
36 SDL_Surface* shadow2 = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
40 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
52 SDL_Rect rect = {slide,slide};
53 SDL_SetAlpha(surf,0,0xff);
54 SDL_BlitSurface(surf,NULL,shadow,&rect);
55 SDL_SetAlpha(surf,SDL_SRCALPHA,0xff);
56 if(is_black){//黒であれば、周りをしろで囲む
57 setRGB(shadow,0xffffffff);
61 SDL_SetAlpha(shadow,0,0xff);
62 SDL_BlitSurface(shadow,NULL,shadow2,NULL);
63 SDL_SetAlpha(shadow,SDL_SRCALPHA,0xff);
69 int pitch = shadow->pitch;
70 int bps = shadow->format->BytesPerPixel;
71 Uint32 Amask = shadow->format->Amask;
72 Uint32 Mask = (shadow->format->Rmask | shadow->format->Gmask | shadow->format->Bmask);
73 Uint32 Ashift = shadow->format->Ashift;
74 Uint32 Aloss = shadow->format->Aloss;
75 SDL_LockSurface(shadow);
76 SDL_LockSurface(shadow2);
84 char *pixels = (char*)shadow->pixels;
85 char *pixels2 = (char*)shadow2->pixels;
87 pix = (int*)(&pixels[pitch * y]);
88 pix2 = (int*)(&pixels2[pitch * y]);
90 int right = (x==nw-1) ? 0 : *(int*)((((char*)pix)+bps));
91 int left = (x==0) ? 0 : *(int*)((((char*)pix)-bps));
92 int up = (y==0) ? 0 : *(int*)((((char*)pix)-pitch));
93 int down = (y==nh-1) ? 0 : *(int*)((((char*)pix)+pitch));
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;
96 new_alpha = (new_alpha * 18) >> 4;
101 *pix2 |= ((new_alpha >> Aloss) << Ashift) & Amask;
102 pix = (int*)(((char*)pix)+bps);
103 pix2 = (int*)(((char*)pix2)+bps);
110 SDL_UnlockSurface(shadow);
111 SDL_UnlockSurface(shadow2);
112 shadowBlitSurface(surf,NULL,shadow,&rect);
113 SDL_FreeSurface(surf);
114 SDL_FreeSurface(shadow2);
119 #define SHADOW_SLIDE 2
120 SDL_Surface* likeNovel(SDL_Surface* surf,int is_black,int is_fix_size){
122 int slide = SHADOW_SLIDE;
127 SDL_Surface* black = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
131 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
143 SDL_Rect rect = {slide,slide};
144 SDL_SetAlpha(surf,0,0xff);//一回alpha合成を切る
145 SDL_BlitSurface(surf,NULL,black,&rect);
146 SDL_SetAlpha(surf,SDL_SRCALPHA,0xff);
147 if(is_black){//黒であれば、周りをしろで囲む
148 setRGB(black,0xffffffff);
152 setAlpha(black,0.6f);
153 shadowBlitSurface(surf,NULL,black,NULL);
154 SDL_FreeSurface(surf);
159 SDL_Surface* likeOld(SDL_Surface* surf,int is_black,int is_fix_size){
161 int slide = SHADOW_SIZE;
167 SDL_Surface* shadow = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
171 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
183 SDL_Surface* shadow2 = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
187 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
199 SDL_Rect rect = {slide,slide};
200 SDL_SetAlpha(surf,0,0xff);
201 SDL_BlitSurface(surf,NULL,shadow,&rect);
202 SDL_SetAlpha(surf,SDL_SRCALPHA,0xff);
203 if(is_black){//黒であれば、周りをしろで囲む
204 setRGB(shadow,0xffffffff);
208 SDL_SetAlpha(shadow,0,0xff);
209 SDL_BlitSurface(shadow,NULL,shadow2,NULL);
210 SDL_SetAlpha(shadow,SDL_SRCALPHA,0xff);
216 int pitch = shadow->pitch;
217 int bps = shadow->format->BytesPerPixel;
218 Uint32 Amask = shadow->format->Amask;
219 Uint32 Mask = (shadow->format->Rmask | shadow->format->Gmask | shadow->format->Bmask);
220 Uint32 Ashift = shadow->format->Ashift;
221 Uint32 Aloss = shadow->format->Aloss;
223 SDL_LockSurface(shadow);
224 SDL_LockSurface(shadow2);
230 char *pixels = (char*)shadow->pixels;
231 char *pixels2 = (char*)shadow2->pixels;
233 pix = (int*)(&pixels[pitch * y]);
234 pix2 = (int*)(&pixels2[pitch * y]);
236 int right = (x==nw-1) ? 0 : *(int*)((((char*)pix)+bps));
237 int left = (x==0) ? 0 : *(int*)((((char*)pix)-bps));
238 int up = (y==0) ? 0 : *(int*)((((char*)pix)-pitch));
239 int down = (y==nh-1) ? 0 : *(int*)((((char*)pix)+pitch));
242 if(((right | left | up | down | my) & Amask) != 0){
244 *pix2 |= (((0xff/(z+1)) >> Aloss) << Ashift) & Amask;
246 pix = (int*)(((char*)pix)+bps);
247 pix2 = (int*)(((char*)pix2)+bps);
254 SDL_UnlockSurface(shadow);
255 SDL_UnlockSurface(shadow2);
256 shadowBlitSurface(surf,NULL,shadow,&rect);
257 SDL_FreeSurface(surf);
258 SDL_FreeSurface(shadow2);
264 SDL_Surface* (*ShadowFunc[SHADOW_MAX])(SDL_Surface* surf,int is_black,int is_fix_size) = {