void GetNewFileName(char *lpstrFilename) { char temp2[MAX_PATH]; char *t,*p; GetWindowText(out.hMainWindow,temp2,sizeof(temp2)); t=temp2; t=scanstr_back(temp2,"-",NULL); if (t) t[-1]=0; if (temp2[0] && temp2[1] == '.') { char *p1,*p2; p1=lpstrFilename; p2=temp2; while (*p2) *p1++=*p2++; *p1=0; p1 = temp2+1; p2 = lpstrFilename; while (*p2) { *p1++ = *p2++; } *p1=0; temp2[0] = '0'; } p=temp2; while (*p != '.' && *p) p++; if (*p == '.') { *p = '-'; p=CharNext(p); } while (*p) { if (*p == '.' || *p == '/' || *p == '\\' || *p == '*' || *p == '?' || *p == ':' || *p == '+' || *p == '\"' || *p == '\'' || *p == '|' || *p == '<' || *p == '>') *p = '_'; p=CharNext(p); } p=config_AACoutdir; if (p[0]) while (p[1]) p++; if (!config_AACoutdir[0] || config_AACoutdir[0] == ' ') Config(out.hMainWindow); if (!config_AACoutdir[0]) wsprintf(lpstrFilename,"%s.aac",temp2); else if (p[0]=='\\') wsprintf(lpstrFilename,"%s%s.aac",config_AACoutdir,temp2); else wsprintf(lpstrFilename,"%s\\%s.aac",config_AACoutdir,temp2); }
int C_RenderTransitionClass::render(char visdata[2][2][576], int isBeat, int *framebuffer, int *fbout, int w, int h) { if (_dotransitionflag||enabled) g_rnd_cnt=0; if (_dotransitionflag==2 || _dotransitionflag == 3) { int notext=_dotransitionflag==3; _dotransitionflag=0; if (cfg_transitions&last_which) { curtrans = (cfg_transition_mode&0x7fff) ? (cfg_transition_mode&0x7fff) : (rand() % ((sizeof(transitionmodes)/sizeof(transitionmodes[0]))-1))+1; if (cfg_transition_mode&0x8000) curtrans|=0x8000; ep[0]=0; ep[1]=2; mask=0; start_time=0; enabled=1; } C_RenderListClass *temp=g_render_effects; g_render_effects=g_render_effects2; g_render_effects2=temp; extern int need_repop; extern char *extension(char *fn); need_repop=1; PostMessage(g_hwndDlg,WM_USER+20,0,0); if (!notext && stricmp("aph",extension(last_file))) { char buf[512]; strncpy(buf,scanstr_back(last_file,"\\",last_file-1)+1,510); buf[510]=0; scanstr_back(buf,".",buf+strlen(buf))[0]=0; strcat(buf," "); DDraw_SetStatusText(buf); } } if (!enabled) { int x; l_w=w; l_h=h; if (fbs[0]) for (x = 0; x < 4; x ++) { if (fbs[x]) { GlobalFree(fbs[x]); fbs[x]=NULL; } } if (!initThread && g_render_effects2->getNumRenders()) { g_render_effects2->clearRenders(); g_render_effects2->freeBuffers(); } return g_render_effects->render(visdata,isBeat,framebuffer,fbout,w,h); } // handle resize if (l_w != w || l_h != h || !fbs[0]) { l_w=w; l_h=h; int x; for (x = 0; x < 4; x ++) { if (fbs[x]) GlobalFree(fbs[x]); fbs[x]=(int*)GlobalAlloc(GPTR,l_w*l_h*sizeof(int)); } } if (start_time == 0) { memcpy(fbs[ep[0]],framebuffer,sizeof(int)*l_w*l_h); memcpy(fbs[ep[1]],framebuffer,sizeof(int)*l_w*l_h); } // maybe there's a faster way than using 3 more buffers without screwing // any effect... justin ? if (curtrans&0x8000) ep[1]^=g_render_effects2->render(visdata,isBeat,fbs[ep[1]],fbs[ep[1]^1],w,h)&1; ep[0]^=g_render_effects->render(visdata,isBeat,fbs[ep[0]],fbs[ep[0]^1],w,h)&1; int *p = fbs[ep[1]]; int *d = fbs[ep[0]]; int *o = framebuffer; int x=w*h; int ttime=250*cfg_transitions_speed; if (ttime<100) ttime=100; int n; if (!start_time) { n=0; start_time=GetTickCount(); } else n=MulDiv(GetTickCount()-start_time,256,ttime); if (n >= 255) n=255; float sintrans = (float)(sin(((float)n/255)*PI-PI/2)/2+0.5); // used for smoothing transitions // now sintrans does a smooth curve // from 0 to 1 switch (curtrans&0x7fff) { case 1: // Crossfade mmx_adjblend_block(o,d,p,x,n); break; case 2: // Left to right push { int i = (int)(sintrans*w); int j; for (j=0;j<h;j++) { memcpy(framebuffer+(j*w), d+(j*w)+(w-i), i*4); memcpy(framebuffer+(j*w)+i, p+(j*w), (w-i)*4); } } break; case 3: // Right to left push { int i = (int)(sintrans*w); int j; for (j=0;j<h;j++) { memcpy(framebuffer+(j*w), p+(i+j*w), (w-i)*4); memcpy(framebuffer+(j*w)+(w-i), d+(j*w), i*4); } } break; case 4: // Top to bottom push { int i = (int)(sintrans*h); memcpy(framebuffer, d+(h-i)*w, w*i*4); memcpy(framebuffer+w*i, p, w*(h-i)*4); } break; case 5: // Bottom to Top push { int i = (int)(sintrans*h); memcpy(framebuffer,p+i*w, w*(h-i)*4); memcpy(framebuffer+w*(h-i), d, w*i*4); } break; case 6: // 9 random blocks { if (!(mask&(1<<(10+n/28)))) { int r=0; if ((mask & 0x1ff) != 0x1ff) { do { r = rand()%9; } while ((1 << r) & mask); } mask |= (1<<r)|(1<<(10+n/28)); } int j; int tw=w/3, th=h/3; int twr=w-2*tw; memcpy(framebuffer, p, w*h*4); int i; for (i=0;i<9;i++) { if (mask & (1<<i)) { int end=i/3*th+th; if (i > 5) end=h; for (j=i/3*th;j<end;j++) memcpy(framebuffer+(j*w)+(i%3)*tw, d+(j*w)+(i%3)*tw, (i%3==2) ? twr*4 : tw*4); } } } break; case 7: // Left/Right to Right/Left { int i = (int)(sintrans*w); int j; for (j=0;j<h/2;j++) { memcpy(framebuffer+(i+j*w), p+(j*w), (w-i)*4); memcpy(framebuffer+(j*w), d+((j+1)*w)-i, i*4); } for (j=h/2;j<h;j++) { memcpy(framebuffer+(j*w), p+(i+j*w), (w-i)*4); memcpy(framebuffer+(j*w)+(w-i), d+(j*w), i*4); } } break; case 8: // Left/Right to Center { int i = (int)(sintrans*w/2); int j; for (j=0;j<h;j++) { memcpy(framebuffer+(j*w), d+((j+1)*w-i-w/2), i*4); memcpy(framebuffer+((j+1)*w-i), d+(j*w+w/2), i*4); memcpy(framebuffer+(j*w)+i, p+(j*w)+i, (w-i*2)*4); } } break; case 9: // Left/Right to Center, squeeze { int i = (int)(sintrans*w/2); int j; for (j=0;j<h;j++) { if (i) { int xl=i; int xp=0; int dxp=((w/2)<<16)/xl; int *ot=framebuffer+(j*w); int *it=d+(j*w); while (xl--) { *ot++=it[xp>>16]; xp+=dxp; } } if (i*2 != w) { int xl=w-i*2; int xp=0; int dxp=(w<<16)/xl; int *ot=framebuffer+(j*w)+i; int *it=p+(j*w); while (xl--) { *ot++=it[xp>>16]; xp+=dxp; } } if (i) { int xl=i; int xp=0; int dxp=((w/2)<<16)/xl; int *ot=framebuffer+(j*w)+w-i; int *it=d+(j*w)+w/2; while (xl--) { *ot++=it[xp>>16]; xp+=dxp; } } } } break; case 10: // Left to right wipe { int i = (int)(sintrans*w); int j; for (j=0;j<h;j++) { memcpy(framebuffer+(i+j*w), p+(j*w)+i, (w-i)*4); memcpy(framebuffer+(j*w), d+(j*w), i*4); } } break; case 11: // Right to left wipe { int i = (int)(sintrans*w); int j; for (j=0;j<h;j++) { memcpy(framebuffer+(j*w), p+(j*w), (w-i)*4); memcpy(framebuffer+(j*w)+(w-i), d+(j*w)+(w-i), i*4); } } break; case 12: // Top to bottom wipe { int i = (int)(sintrans*h); memcpy(framebuffer, d, w*i*4); memcpy(framebuffer+w*i, p+w*i, w*(h-i)*4); } break; case 13: // Bottom to top wipe { int i = (int)(sintrans*h); memcpy(framebuffer, p, w*(h-i)*4); memcpy(framebuffer+w*(h-i), d+w*(h-i), w*i*4); } break; case 14: // dot dissolve { int i=((int)(sintrans*5))-5; int j; int t=0; int dir=1; if (i < 0) { dir=!dir; i++; i=-i; } i=1<<i; for (j = 0; j < h; j ++) { if (t++==i) { int x=w; t=0; int t2=0; int *of=framebuffer+j*w; int *p2=(dir?p:d)+j*w; int *d2=(dir?d:p)+j*w; while (x--) { if (t2++==i) { of[0]=p2[0]; t2=0; } else of[0]=d2[0]; p2++; d2++; of++; } } else memcpy(framebuffer+j*w,(dir?d:p)+j*w,w*sizeof(int)); } } break; default: break; }
int C_RenderTransitionClass::LoadPreset(char *file, int which, C_UndoItem *item) { if (initThread) { if (WaitForSingleObject(initThread,0)==WAIT_TIMEOUT) { DDraw_SetStatusText("loading [wait]...",1000*100); return 2; } CloseHandle(initThread); initThread=0; } EnterCriticalSection(&g_render_cs); if (enabled) { enabled=0; } int r = 0; if (item) { g_render_effects2->__LoadPresetFromUndo(*item,1); last_which=which; _dotransitionflag=2; } else { lstrcpyn(last_file,file,sizeof(last_file)); if (file[0]) r=g_render_effects2->__LoadPreset(file,1); else { g_render_effects2->clearRenders(); } if (!r && l_w && l_h && (cfg_transitions2&which) && ((cfg_transitions2&128)||DDraw_IsFullScreen())) { DWORD id; last_which=which; _dotransitionflag=1; initThread=(HANDLE)_beginthreadex(NULL,0,m_initThread,(LPVOID)this,0,(unsigned int*)&id); DDraw_SetStatusText("loading...",1000*100); } else { last_which=which; _dotransitionflag=2; } if (r) { char s[MAX_PATH*2]; wsprintf(s,"error loading: %s",scanstr_back(last_file,"\\",last_file-1)+1); DDraw_SetStatusText(s); _dotransitionflag=3; } C_UndoStack::clear(); C_UndoStack::saveundo(1); C_UndoStack::cleardirty(); } LeaveCriticalSection(&g_render_cs); return !!r; }