2 #include <SDL/SDL_ttf.h>
3 #include <SDL/SDL_rotozoom.h>
4 #include "com_surface.h"
6 #include "../chat/chat.h"
7 #include "../chat/chat_slot.h"
8 #include "../nicodef.h"
14 SDL_Surface* drawText(COMMDATA* data,int size,int color,Uint16* str);
16 SDL_Surface* makeCommentSurface(COMMDATA* data,const CHAT_ITEM* item,int video_width,int video_height){
17 Uint16* index = item->str;
18 Uint16* last = item->str;
19 SDL_Surface* ret = NULL;
20 int color = item->color;
21 int size = item->size;
26 while(*index != '\0'){
28 *index = '\0';//ここで一旦切る
29 if(ret == null){//結局改行は無い
30 ret = drawText(data,size,color,last);
32 ret = connectSurface(ret,drawText(data,size,color,last));
34 *index = '\n';//ここで一旦切る
39 if(ret == null){//結局改行は無い
40 ret = drawText(data,size,color,item->str);
42 ret = connectSurface(ret,drawText(data,size,color,last));
45 if(ret->w == 0 || ret->h == 0){
46 fprintf(data->common->log,"[comsurface/make]comment %04d has no char.\n",item->no);
47 fflush(data->common->log);
54 int shadow = data->common->shadow_kind;
55 if(shadow >= SHADOW_MAX){
56 shadow = SHADOW_DEFAULT;
58 ret = (*ShadowFunc[shadow])(ret,item->color == CMD_COLOR_BLACK,data->common->fontsize_fix);
63 if(!data->opaque_comment){
64 float alpha_t = (((float)(item->no)/(item->chat->max_no)) * 0.4) + 0.6;
65 fprintf(data->common->log,"[comsurface/make]comment %04d set alpha:%5.2f%%.\n",item->no,alpha_t*100);
66 setAlpha(ret,alpha_t);
74 //double zoomy = 1.0f;
77 if (data->common->fontsize_fix) {
78 const double width = (data->common->aspect_mode != 1) ? NICO_WIDTH : NICO_HD_WIDTH;
79 zoomx = (0.5f * (double) video_width) / width;
80 //zoomy = (0.5f * (double)video_height) / (double)NICO_HEIGHT;
84 //if(((double)ret->h * zoomy) > ((double)video_height/3.0f)){
85 if(((double)ret->h * zoomx) > ((double)video_height/3.0f)){
89 if(item->location != CMD_LOC_DEF && (ret->w * zoomx) > (double)video_width){
90 double scale = ((double)video_width) / (ret->w * zoomx);
95 //if(zoomx != 1.0f || zoomy != 1.0f){
97 //fprintf(data->log,"[comsurface/make]comment %04d resized.(%5.2f%%,%5.2f%%)\n",item->no,zoomx*100,zoomy*100);
98 fprintf(data->common->log,"[comsurface/make]comment %04d resized.(%5.2f%%)\n",item->no,zoomx*100);
99 fflush(data->common->log);
100 SDL_Surface* tmp = ret;
101 ret = zoomSurface(tmp,zoomx,zoomx,SMOOTHING_ON);
102 SDL_FreeSurface(tmp);
111 SDL_Surface* drawText(COMMDATA* data,int size,int color,Uint16* str){
113 return SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
114 0,COMMENT_FONT_SIZE[size],32,
115 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
129 SDL_Surface* fmt = SDL_CreateRGBSurface( SDL_SRCALPHA | SDL_HWSURFACE | SDL_HWACCEL,
133 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
146 SDL_Surface* tmp = TTF_RenderUNICODE_Blended(data->font[size],str,COMMENT_COLOR[color]);
147 SDL_SetAlpha(tmp,SDL_SRCALPHA | SDL_RLEACCEL,0xff);
148 SDL_Surface* surf = SDL_ConvertSurface(tmp,fmt->format,SDL_SRCALPHA | SDL_HWSURFACE);
149 SDL_FreeSurface(tmp);
150 SDL_FreeSurface(fmt);
152 SDL_Surface* surf = TTF_RenderUNICODE_Blended(data->common->font[size],str,COMMENT_COLOR[color]);