12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653 |
- #include "api__vis_milk2.h"
- #include "plugin.h"
- #include "utility.h"
- #include "support.h"
- #include "resource.h"
- #include "defines.h"
- #include "shell_defines.h"
- #include <assert.h>
- #include <locale.h>
- #include <process.h> // for beginthread, etc.
- #include <shellapi.h>
- #include <strsafe.h>
- #include "../nu/AutoCharFn.h"
- #define FRAND ((warand() % 7381)/7380.0f)
- void NSEEL_HOSTSTUB_EnterMutex(){}
- void NSEEL_HOSTSTUB_LeaveMutex(){}
- D3DVERTEXELEMENT9 g_MyVertDecl[] =
- {
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
- { 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
- { 0, 16, D3DDECLTYPE_FLOAT4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
- { 0, 32, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1 },
- D3DDECL_END()
- };
- D3DVERTEXELEMENT9 g_WfVertDecl[] =
- {
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
- { 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
- D3DDECL_END()
- };
- D3DVERTEXELEMENT9 g_SpriteVertDecl[] =
- {
-
- { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
- { 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
- { 0, 16, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
- D3DDECL_END()
- };
- extern CPlugin g_plugin;
- extern bool g_bDebugOutput;
- extern bool g_bDumpFileCleared;
- volatile HANDLE g_hThread;
- volatile bool g_bThreadAlive;
- volatile int g_bThreadShouldQuit;
- static CRITICAL_SECTION g_cs;
- #define IsAlphabetChar(x) ((x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'))
- #define IsAlphanumericChar(x) ((x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z') || (x >= '0' && x <= '9') || x == '.')
- #define IsNumericChar(x) (x >= '0' && x <= '9')
- const unsigned char LC2UC[256] = {
- 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
- 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,255,
- 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
- 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
- 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
- 113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,96,
- 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
- 113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
- 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
- 145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
- 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
- 177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
- 193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
- 209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
- 225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
- 241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
- };
- void copyStringToClipboardA(const char * source)
- {
- int ok = OpenClipboard(NULL);
- if (!ok)
- return;
- HGLOBAL clipbuffer;
- EmptyClipboard();
- clipbuffer = GlobalAlloc(GMEM_DDESHARE, (lstrlenA(source)+1)*sizeof(char));
- char* buffer = (char*)GlobalLock(clipbuffer);
- lstrcpyA(buffer, source);
- GlobalUnlock(clipbuffer);
- SetClipboardData(CF_TEXT, clipbuffer);
- CloseClipboard();
- }
- void copyStringToClipboardW(const wchar_t * source)
- {
- int ok = OpenClipboard(NULL);
- if (!ok)
- return;
- HGLOBAL clipbuffer;
- EmptyClipboard();
- clipbuffer = GlobalAlloc(GMEM_DDESHARE, (lstrlenW(source)+1)*sizeof(wchar_t));
- wchar_t* buffer = (wchar_t*)GlobalLock(clipbuffer);
- lstrcpyW(buffer, source);
- GlobalUnlock(clipbuffer);
- SetClipboardData(CF_UNICODETEXT, clipbuffer);
- CloseClipboard();
- }
- char * getStringFromClipboardA()
- {
- int ok = OpenClipboard(NULL);
- if (!ok)
- return NULL;
- HANDLE hData = GetClipboardData(CF_TEXT);
- char* buffer = (char*)GlobalLock(hData);
- GlobalUnlock(hData);
- CloseClipboard();
- return buffer;
- }
- wchar_t * getStringFromClipboardW()
- {
- int ok = OpenClipboard(NULL);
- if (!ok)
- return NULL;
- HANDLE hData = GetClipboardData(CF_UNICODETEXT);
- wchar_t* buffer = (wchar_t*)GlobalLock(hData);
- GlobalUnlock(hData);
- CloseClipboard();
- return buffer;
- }
- void ConvertCRsToLFCA(const char* src, char* dst)
- {
- while (*src)
- {
- char ch = *src;
- if (*src==13 && *(src+1)==10)
- {
- *dst++ = LINEFEED_CONTROL_CHAR;
- src += 2;
- }
- else
- {
- *dst++ = *src++;
- }
- }
- *dst = 0;
- }
- void ConvertCRsToLFCW(const wchar_t* src, wchar_t* dst)
- {
- while (*src)
- {
- wchar_t ch = *src;
- if (*src==13 && *(src+1)==10)
- {
- *dst++ = LINEFEED_CONTROL_CHAR;
- src += 2;
- }
- else
- {
- *dst++ = *src++;
- }
- }
- *dst = 0;
- }
- void ConvertLFCToCRsA(const char* src, char* dst)
- {
- while (*src)
- {
- char ch = *src;
- if (*src==LINEFEED_CONTROL_CHAR)
- {
- *dst++ = 13;
- *dst++ = 10;
- src++;
- }
- else
- {
- *dst++ = *src++;
- }
- }
- *dst = 0;
- }
- void ConvertLFCToCRsW(const wchar_t* src, wchar_t* dst)
- {
- while (*src)
- {
- wchar_t ch = *src;
- if (*src==LINEFEED_CONTROL_CHAR)
- {
- *dst++ = 13;
- *dst++ = 10;
- src++;
- }
- else
- {
- *dst++ = *src++;
- }
- }
- *dst = 0;
- }
- int mystrcmpiW(const wchar_t *s1, const wchar_t *s2)
- {
-
-
-
-
-
- int i=0;
- while (LC2UC[s1[i]] == LC2UC[s2[i]] && s1[i] != 0)
- i++;
-
- if (s1[i]==0 && s2[i]==0)
- return 0;
- else if (s1[i]==0)
- return -1;
- else if (s2[i]==0)
- return 1;
- else
- return (LC2UC[s1[i]] < LC2UC[s2[i]]) ? -1 : 1;
- }
- bool ReadFileToString(const wchar_t* szBaseFilename, char* szDestText, int nMaxBytes, bool bConvertLFsToSpecialChar)
- {
- wchar_t szFile[MAX_PATH];
- swprintf(szFile, L"%s%s", g_plugin.m_szMilkdrop2Path, szBaseFilename);
-
-
- FILE* f = _wfopen(szFile, L"rb");
- if (!f)
- {
- wchar_t buf[1024], title[64];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_UNABLE_TO_READ_DATA_FILE_X), szFile);
- g_plugin.dumpmsg(buf);
- MessageBoxW(NULL, buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- int len = 0;
- int x;
- char prev_ch = 0;
- while ( (x = fgetc(f)) >= 0 && len < nMaxBytes-4 )
- {
- char orig_ch = (char)x;
- char ch = orig_ch;
- bool bSkipChar = false;
- if (bConvertLFsToSpecialChar)
- {
- if (ch==10)
- {
- if (prev_ch==13)
- bSkipChar = true;
- else
- ch = LINEFEED_CONTROL_CHAR;
- }
- else if (ch==13)
- ch = LINEFEED_CONTROL_CHAR;
- }
- if (!bSkipChar)
- szDestText[len++] = ch;
- prev_ch = orig_ch;
- }
- szDestText[len] = 0;
- szDestText[len++] = ' ';
- fclose(f);
- return true;
- }
- void OnUserEditedPerFrame(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_pState->RecompileExpressions(RECOMPILE_PRESET_CODE, 0);
- }
- void OnUserEditedPerPixel(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_pState->RecompileExpressions(RECOMPILE_PRESET_CODE, 0);
- }
- void OnUserEditedPresetInit(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_pState->RecompileExpressions(RECOMPILE_PRESET_CODE, 1);
- }
- void OnUserEditedWavecode(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_pState->RecompileExpressions(RECOMPILE_WAVE_CODE, 0);
- }
- void OnUserEditedWavecodeInit(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_pState->RecompileExpressions(RECOMPILE_WAVE_CODE, 1);
- }
- void OnUserEditedShapecode(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_pState->RecompileExpressions(RECOMPILE_SHAPE_CODE, 0);
- }
- void OnUserEditedShapecodeInit(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_pState->RecompileExpressions(RECOMPILE_SHAPE_CODE, 1);
- }
- void OnUserEditedWarpShaders(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_bNeedRescanTexturesDir = true;
- g_plugin.ClearErrors(ERR_PRESET);
- if (g_plugin.m_nMaxPSVersion == 0)
- return;
- if (!g_plugin.RecompilePShader(g_plugin.m_pState->m_szWarpShadersText, &g_plugin.m_shaders.warp, SHADER_WARP, false, g_plugin.m_pState->m_nWarpPSVersion))
- {
-
- g_plugin.m_fallbackShaders_ps.warp.ptr->AddRef();
- g_plugin.m_fallbackShaders_ps.warp.CT->AddRef();
- g_plugin.m_shaders.warp = g_plugin.m_fallbackShaders_ps.warp;
- }
- }
- void OnUserEditedCompShaders(LPARAM param1, LPARAM param2)
- {
- g_plugin.m_bNeedRescanTexturesDir = true;
- g_plugin.ClearErrors(ERR_PRESET);
- if (g_plugin.m_nMaxPSVersion == 0)
- return;
- if (!g_plugin.RecompilePShader(g_plugin.m_pState->m_szCompShadersText, &g_plugin.m_shaders.comp, SHADER_COMP, false, g_plugin.m_pState->m_nCompPSVersion))
- {
-
- g_plugin.m_fallbackShaders_ps.comp.ptr->AddRef();
- g_plugin.m_fallbackShaders_ps.comp.CT->AddRef();
- g_plugin.m_shaders.comp = g_plugin.m_fallbackShaders_ps.comp;
- }
- }
- wchar_t* g_szHelp = 0;
- int g_szHelp_W = 0;
- #define IPC_CB_VISRANDOM 628
- void CPlugin::OverrideDefaults()
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- m_allow_page_tearing_w = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- void CPlugin::MyPreInitialize()
- {
-
-
-
-
-
-
-
-
-
- g_szHelp = (wchar_t*)GetTextResource(IDR_TEXT2,1);
- if(!g_szHelp) g_szHelp = (wchar_t*)GetTextResource(IDR_TEXT1,0);
- else g_szHelp_W = 1;
-
- m_bFirstRun = true;
- m_bInitialPresetSelected = false;
- m_fBlendTimeUser = 1.7f;
- m_fBlendTimeAuto = 2.7f;
- m_fTimeBetweenPresets = 16.0f;
- m_fTimeBetweenPresetsRand = 10.0f;
- m_bSequentialPresetOrder = false;
- m_bHardCutsDisabled = true;
- m_fHardCutLoudnessThresh = 2.5f;
- m_fHardCutHalflife = 60.0f;
-
-
-
- m_nCanvasStretch = 0;
- m_nTexSizeX = -1;
- m_nTexSizeY = -1;
- m_nTexBitsPerCh = 8;
- m_nGridX = 48;
- m_nGridY = 36;
- m_bShowPressF1ForHelp = true;
-
- m_bShowMenuToolTips = true;
- m_n16BitGamma = 2;
- m_bAutoGamma = true;
-
- m_bEnableRating = true;
-
- m_bSongTitleAnims = true;
- m_fSongTitleAnimDuration = 1.7f;
- m_fTimeBetweenRandomSongTitles = -1.0f;
- m_fTimeBetweenRandomCustomMsgs = -1.0f;
- m_nSongTitlesSpawned = 0;
- m_nCustMsgsSpawned = 0;
- m_nFramesSinceResize = 0;
-
-
-
-
-
- m_bWarningsDisabled2 = true;
-
- m_bPresetLockOnAtStartup = false;
- m_bPreventScollLockHandling = false;
- m_nMaxPSVersion_ConfigPanel = -1;
- m_nMaxPSVersion_DX9 = -1;
- m_nMaxPSVersion = -1;
- m_nMaxImages = 32;
- m_nMaxBytes = 16000000;
- #ifdef _DEBUG
- m_dwShaderFlags = D3DXSHADER_DEBUG|(1<<16);
- #else
- m_dwShaderFlags = (1<<16);
- #endif
-
-
- m_pShaderCompileErrors = NULL;
-
-
-
-
- ZeroMemory(&m_shaders, sizeof(PShaderSet));
- ZeroMemory(&m_OldShaders, sizeof(PShaderSet));
- ZeroMemory(&m_NewShaders, sizeof(PShaderSet));
- ZeroMemory(&m_fallbackShaders_vs, sizeof(VShaderSet));
- ZeroMemory(&m_fallbackShaders_ps, sizeof(PShaderSet));
- ZeroMemory(m_BlurShaders, sizeof(m_BlurShaders));
- m_bWarpShaderLock = false;
- m_bCompShaderLock = false;
- m_bNeedRescanTexturesDir = true;
-
- m_pSpriteVertDecl = NULL;
- m_pWfVertDecl = NULL;
- m_pMyVertDecl = NULL;
- m_gdi_title_font_doublesize = NULL;
- m_d3dx_title_font_doublesize = NULL;
-
- m_prev_time = GetTime() - 0.0333f;
- m_bTexSizeWasAutoPow2 = false;
- m_bTexSizeWasAutoExact = false;
-
- m_bPresetLockedByCode = false;
- m_fStartTime = 0.0f;
- m_fPresetStartTime = 0.0f;
- m_fNextPresetTime = -1.0f;
- m_nLoadingPreset = 0;
- m_nPresetsLoadedTotal = 0;
- m_fSnapPoint = 0.5f;
- m_pState = &m_state_DO_NOT_USE[0];
- m_pOldState = &m_state_DO_NOT_USE[1];
- m_pNewState = &m_state_DO_NOT_USE[2];
- m_UI_mode = UI_REGULAR;
- m_bShowShaderHelp = false;
- m_nMashSlot = 0;
- for (int mash=0; mash<MASH_SLOTS; mash++)
- m_nLastMashChangeFrame[mash] = 0;
-
-
-
- m_bUserPagedUp = false;
- m_bUserPagedDown = false;
- m_fMotionVectorsTempDx = 0.0f;
- m_fMotionVectorsTempDy = 0.0f;
-
- m_waitstring.bActive = false;
- m_waitstring.bOvertypeMode = false;
- m_waitstring.szClipboard[0] = 0;
- m_nPresets = 0;
- m_nDirs = 0;
- m_nPresetListCurPos = 0;
- m_nCurrentPreset = -1;
- m_szCurrentPresetFile[0] = 0;
- m_szLoadingPreset[0] = 0;
-
- m_bPresetListReady = false;
- m_szUpdatePresetMask[0] = 0;
-
- myfft.Init(576, MY_FFT_SAMPLES, -1);
- memset(&mysound, 0, sizeof(mysound));
- int i = 0;
- for (i=0; i<PRESET_HIST_LEN; i++)
- m_presetHistory[i] = L"";
- m_presetHistoryPos = 0;
- m_presetHistoryBackFence = 0;
- m_presetHistoryFwdFence = 0;
-
-
- m_bShowFPS = false;
- m_bShowRating = false;
- m_bShowPresetInfo = false;
- m_bShowDebugInfo = false;
- m_bShowSongTitle = false;
- m_bShowSongTime = false;
- m_bShowSongLen = false;
- m_fShowRatingUntilThisTime = -1.0f;
- ClearErrors();
- m_szDebugMessage[0] = 0;
- m_szSongTitle[0] = 0;
- m_szSongTitlePrev[0] = 0;
- m_lpVS[0] = NULL;
- m_lpVS[1] = NULL;
- #if (NUM_BLUR_TEX>0)
- for (i=0; i<NUM_BLUR_TEX; i++)
- m_lpBlur[i] = NULL;
- #endif
- m_lpDDSTitle = NULL;
- m_nTitleTexSizeX = 0;
- m_nTitleTexSizeY = 0;
- m_verts = NULL;
- m_verts_temp = NULL;
- m_vertinfo = NULL;
- m_indices_list = NULL;
- m_indices_strip = NULL;
- m_bMMX = false;
- m_bHasFocus = true;
- m_bHadFocus = false;
- m_bOrigScrollLockState = GetKeyState(VK_SCROLL) & 1;
-
- m_nNumericInputMode = NUMERIC_INPUT_MODE_CUST_MSG;
- m_nNumericInputNum = 0;
- m_nNumericInputDigits = 0;
-
-
-
- m_supertext.bRedrawSuperText = false;
- m_supertext.fStartTime = -1.0f;
-
- g_bDebugOutput = false;
- g_bDumpFileCleared = false;
- swprintf(m_szMilkdrop2Path, L"%s%s", GetPluginsDirPath(), SUBDIR);
- swprintf(m_szPresetDir, L"%spresets\\", m_szMilkdrop2Path );
-
- wchar_t szConfigDir[MAX_PATH] = {0};
- lstrcpyW(szConfigDir, GetConfigIniFile());
- wchar_t* p = wcsrchr(szConfigDir, L'\\');
- if (p) *(p+1) = 0;
- swprintf(m_szMsgIniFile, L"%s%s", szConfigDir, MSG_INIFILE );
- swprintf(m_szImgIniFile, L"%s%s", szConfigDir, IMG_INIFILE );
- }
- void CPlugin::MyReadConfig()
- {
-
-
-
-
-
-
-
-
-
-
-
- int n=0;
- wchar_t *pIni = GetConfigIniFile();
- m_bFirstRun = !GetPrivateProfileBoolW(L"settings",L"bConfigured" ,false,pIni);
- m_bEnableRating = GetPrivateProfileBoolW(L"settings",L"bEnableRating",m_bEnableRating,pIni);
-
- m_bHardCutsDisabled = GetPrivateProfileBoolW(L"settings",L"bHardCutsDisabled",m_bHardCutsDisabled,pIni);
- g_bDebugOutput = GetPrivateProfileBoolW(L"settings",L"bDebugOutput",g_bDebugOutput,pIni);
-
-
- m_bShowPressF1ForHelp = GetPrivateProfileBoolW(L"settings",L"bShowPressF1ForHelp",m_bShowPressF1ForHelp,pIni);
-
- m_bSongTitleAnims = GetPrivateProfileBoolW(L"settings",L"bSongTitleAnims",m_bSongTitleAnims,pIni);
- m_bShowFPS = GetPrivateProfileBoolW(L"settings",L"bShowFPS", m_bShowFPS ,pIni);
- m_bShowRating = GetPrivateProfileBoolW(L"settings",L"bShowRating", m_bShowRating ,pIni);
- m_bShowPresetInfo = GetPrivateProfileBoolW(L"settings",L"bShowPresetInfo",m_bShowPresetInfo ,pIni);
-
- m_bShowSongTitle = GetPrivateProfileBoolW(L"settings",L"bShowSongTitle", m_bShowSongTitle ,pIni);
- m_bShowSongTime = GetPrivateProfileBoolW(L"settings",L"bShowSongTime", m_bShowSongTime ,pIni);
- m_bShowSongLen = GetPrivateProfileBoolW(L"settings",L"bShowSongLen", m_bShowSongLen ,pIni);
-
- int nTemp = GetPrivateProfileBoolW(L"settings",L"bFixPinkBug",-1,pIni);
- if (nTemp == 0)
- m_n16BitGamma = 0;
- else if (nTemp == 1)
- m_n16BitGamma = 2;
- m_n16BitGamma = GetPrivateProfileIntW(L"settings",L"n16BitGamma",m_n16BitGamma,pIni);
- m_bAutoGamma = GetPrivateProfileBoolW(L"settings",L"bAutoGamma",m_bAutoGamma,pIni);
-
-
-
-
-
- m_bWarningsDisabled2 = GetPrivateProfileBoolW(L"settings",L"bWarningsDisabled2",m_bWarningsDisabled2,pIni);
-
- m_bPresetLockOnAtStartup = GetPrivateProfileBoolW(L"settings",L"bPresetLockOnAtStartup",m_bPresetLockOnAtStartup,pIni);
- m_bPreventScollLockHandling = GetPrivateProfileBoolW(L"settings",L"m_bPreventScollLockHandling",m_bPreventScollLockHandling,pIni);
- m_nCanvasStretch = GetPrivateProfileIntW(L"settings",L"nCanvasStretch" ,m_nCanvasStretch,pIni);
- m_nTexSizeX = GetPrivateProfileIntW(L"settings",L"nTexSize" ,m_nTexSizeX ,pIni);
- m_nTexSizeY = m_nTexSizeX;
- m_bTexSizeWasAutoPow2 = (m_nTexSizeX == -2);
- m_bTexSizeWasAutoExact = (m_nTexSizeX == -1);
- m_nTexBitsPerCh = GetPrivateProfileIntW(L"settings", L"nTexBitsPerCh", m_nTexBitsPerCh, pIni);
- m_nGridX = GetPrivateProfileIntW(L"settings",L"nMeshSize" ,m_nGridX ,pIni);
- m_nGridY = m_nGridX*3/4;
- m_nMaxPSVersion_ConfigPanel = GetPrivateProfileIntW(L"settings",L"MaxPSVersion",m_nMaxPSVersion_ConfigPanel,pIni);
- m_nMaxImages = GetPrivateProfileIntW(L"settings",L"MaxImages",m_nMaxImages,pIni);
- m_nMaxBytes = GetPrivateProfileIntW(L"settings",L"MaxBytes" ,m_nMaxBytes ,pIni);
- m_fBlendTimeUser = GetPrivateProfileFloatW(L"settings",L"fBlendTimeUser" ,m_fBlendTimeUser ,pIni);
- m_fBlendTimeAuto = GetPrivateProfileFloatW(L"settings",L"fBlendTimeAuto" ,m_fBlendTimeAuto ,pIni);
- m_fTimeBetweenPresets = GetPrivateProfileFloatW(L"settings",L"fTimeBetweenPresets" ,m_fTimeBetweenPresets ,pIni);
- m_fTimeBetweenPresetsRand = GetPrivateProfileFloatW(L"settings",L"fTimeBetweenPresetsRand",m_fTimeBetweenPresetsRand,pIni);
- m_fHardCutLoudnessThresh = GetPrivateProfileFloatW(L"settings",L"fHardCutLoudnessThresh" ,m_fHardCutLoudnessThresh ,pIni);
- m_fHardCutHalflife = GetPrivateProfileFloatW(L"settings",L"fHardCutHalflife" ,m_fHardCutHalflife ,pIni);
- m_fSongTitleAnimDuration = GetPrivateProfileFloatW(L"settings",L"fSongTitleAnimDuration" ,m_fSongTitleAnimDuration ,pIni);
- m_fTimeBetweenRandomSongTitles = GetPrivateProfileFloatW(L"settings",L"fTimeBetweenRandomSongTitles" ,m_fTimeBetweenRandomSongTitles,pIni);
- m_fTimeBetweenRandomCustomMsgs = GetPrivateProfileFloatW(L"settings",L"fTimeBetweenRandomCustomMsgs" ,m_fTimeBetweenRandomCustomMsgs,pIni);
-
- GetPrivateProfileStringW(L"settings",L"szPresetDir",m_szPresetDir,m_szPresetDir,sizeof(m_szPresetDir),pIni);
- ReadCustomMessages();
-
- if (m_nGridX > MAX_GRID_X)
- m_nGridX = MAX_GRID_X;
- if (m_nGridY > MAX_GRID_Y)
- m_nGridY = MAX_GRID_Y;
- if (m_fTimeBetweenPresetsRand < 0)
- m_fTimeBetweenPresetsRand = 0;
- if (m_fTimeBetweenPresets < 0.1f)
- m_fTimeBetweenPresets = 0.1f;
-
- m_bPresetLockedByUser = m_bPresetLockOnAtStartup;
-
- }
- void CPlugin::MyWriteConfig()
- {
-
-
-
-
-
-
-
-
-
-
-
-
- wchar_t *pIni = GetConfigIniFile();
-
- WritePrivateProfileStringW(L"settings",L"bConfigured",L"1",pIni);
-
- wchar_t szSectionName[] = L"settings";
- WritePrivateProfileIntW(m_bSongTitleAnims, L"bSongTitleAnims", pIni, L"settings");
- WritePrivateProfileIntW(m_bHardCutsDisabled, L"bHardCutsDisabled", pIni, L"settings");
- WritePrivateProfileIntW(m_bEnableRating, L"bEnableRating", pIni, L"settings");
-
- WritePrivateProfileIntW(g_bDebugOutput, L"bDebugOutput", pIni, L"settings");
-
-
-
- WritePrivateProfileIntW(m_bShowPressF1ForHelp, L"bShowPressF1ForHelp", pIni, L"settings");
-
- WritePrivateProfileIntW(m_n16BitGamma, L"n16BitGamma", pIni, L"settings");
- WritePrivateProfileIntW(m_bAutoGamma, L"bAutoGamma", pIni, L"settings");
-
-
-
-
-
- WritePrivateProfileIntW(m_bWarningsDisabled2, L"bWarningsDisabled2", pIni, L"settings");
-
- WritePrivateProfileIntW(m_bPresetLockOnAtStartup,L"bPresetLockOnAtStartup",pIni,L"settings");
- WritePrivateProfileIntW(m_bPreventScollLockHandling,L"m_bPreventScollLockHandling",pIni,L"settings");
-
-
- WritePrivateProfileIntW(m_nCanvasStretch, L"nCanvasStretch", pIni, L"settings");
- WritePrivateProfileIntW(m_nTexSizeX, L"nTexSize", pIni, L"settings");
- WritePrivateProfileIntW(m_nTexBitsPerCh, L"nTexBitsPerCh", pIni, L"settings");
- WritePrivateProfileIntW(m_nGridX, L"nMeshSize", pIni, L"settings");
- WritePrivateProfileIntW(m_nMaxPSVersion_ConfigPanel, L"MaxPSVersion", pIni, L"settings");
- WritePrivateProfileIntW(m_nMaxImages, L"MaxImages", pIni, L"settings");
- WritePrivateProfileIntW(m_nMaxBytes , L"MaxBytes", pIni, L"settings");
-
- WritePrivateProfileFloatW(m_fBlendTimeAuto, L"fBlendTimeAuto", pIni, L"settings");
- WritePrivateProfileFloatW(m_fBlendTimeUser, L"fBlendTimeUser", pIni, L"settings");
- WritePrivateProfileFloatW(m_fTimeBetweenPresets, L"fTimeBetweenPresets", pIni, L"settings");
- WritePrivateProfileFloatW(m_fTimeBetweenPresetsRand, L"fTimeBetweenPresetsRand", pIni, L"settings");
- WritePrivateProfileFloatW(m_fHardCutLoudnessThresh, L"fHardCutLoudnessThresh", pIni, L"settings");
- WritePrivateProfileFloatW(m_fHardCutHalflife, L"fHardCutHalflife", pIni, L"settings");
- WritePrivateProfileFloatW(m_fSongTitleAnimDuration, L"fSongTitleAnimDuration", pIni, L"settings");
- WritePrivateProfileFloatW(m_fTimeBetweenRandomSongTitles,L"fTimeBetweenRandomSongTitles",pIni, L"settings");
- WritePrivateProfileFloatW(m_fTimeBetweenRandomCustomMsgs,L"fTimeBetweenRandomCustomMsgs",pIni, L"settings");
- }
- void ConvertLLCto1310(char* d, const char *s)
- {
-
- assert(s != d);
-
- while (*s)
- {
- if (*s == LINEFEED_CONTROL_CHAR)
- {
- *d++ = 13;
- *d++ = 10;
- }
- else
- {
- *d++ = *s;
- }
- s++;
- };
- *d = 0;
- }
- void StripComments(char* str)
- {
- if (!str || !str[0] || !str[1])
- return;
- char c0 = str[0];
- char c1 = str[1];
- char* dest = str;
- char* p = &str[1];
- bool bIgnoreTilEndOfLine = false;
- bool bIgnoreTilCloseComment = false;
- int nCharsToSkip = 0;
- while (1)
- {
-
- if (!bIgnoreTilCloseComment && c0=='/' && c1=='/')
- bIgnoreTilEndOfLine = true;
- if (bIgnoreTilEndOfLine && (c0==10 || c0==13))
- {
- bIgnoreTilEndOfLine = false;
- nCharsToSkip = 0;
- }
-
- if (!bIgnoreTilEndOfLine && c0=='/' && c1=='*')
- bIgnoreTilCloseComment = true;
- if (bIgnoreTilCloseComment && c0=='*' && c1=='/')
- {
- bIgnoreTilCloseComment = false;
- nCharsToSkip = 2;
- }
- if (!bIgnoreTilEndOfLine && !bIgnoreTilCloseComment)
- {
- if (nCharsToSkip > 0)
- nCharsToSkip--;
- else
- *dest++ = c0;
- }
- if (c1==0)
- break;
- p++;
- c0 = c1;
- c1 = *p;
- }
- *dest++ = 0;
- }
- int CPlugin::AllocateMyNonDx9Stuff()
- {
-
-
-
-
-
-
-
- g_hThread = INVALID_HANDLE_VALUE;
- g_bThreadAlive = false;
- g_bThreadShouldQuit = false;
- InitializeCriticalSection(&g_cs);
-
- bool bSuccess = true;
- bSuccess = ReadFileToString(L"data\\include.fx", m_szShaderIncludeText, sizeof(m_szShaderIncludeText)-4, false);
- if (!bSuccess) return false;
- StripComments(m_szShaderIncludeText);
- m_nShaderIncludeTextLen = lstrlen(m_szShaderIncludeText);
- bSuccess |= ReadFileToString(L"data\\warp_vs.fx", m_szDefaultWarpVShaderText, sizeof(m_szDefaultWarpVShaderText), true);
- if (!bSuccess) return false;
- bSuccess |= ReadFileToString(L"data\\warp_ps.fx", m_szDefaultWarpPShaderText, sizeof(m_szDefaultWarpPShaderText), true);
- if (!bSuccess) return false;
- bSuccess |= ReadFileToString(L"data\\comp_vs.fx", m_szDefaultCompVShaderText, sizeof(m_szDefaultCompVShaderText), true);
- if (!bSuccess) return false;
- bSuccess |= ReadFileToString(L"data\\comp_ps.fx", m_szDefaultCompPShaderText, sizeof(m_szDefaultCompPShaderText), true);
- if (!bSuccess) return false;
- bSuccess |= ReadFileToString(L"data\\blur_vs.fx", m_szBlurVS, sizeof(m_szBlurVS), true);
- if (!bSuccess) return false;
- bSuccess |= ReadFileToString(L"data\\blur1_ps.fx", m_szBlurPSX, sizeof(m_szBlurPSX), true);
- if (!bSuccess) return false;
- bSuccess |= ReadFileToString(L"data\\blur2_ps.fx", m_szBlurPSY, sizeof(m_szBlurPSY), true);
- if (!bSuccess) return false;
- BuildMenus();
- m_bMMX = CheckForMMX();
-
- m_pState->Default();
- m_pOldState->Default();
- m_pNewState->Default();
-
- return true;
- }
- void CancelThread(int max_wait_time_ms)
- {
- g_bThreadShouldQuit = true;
- int waited = 0;
- while (g_bThreadAlive && waited < max_wait_time_ms)
- {
- Sleep(30);
- waited += 30;
- }
-
- if (g_bThreadAlive)
- {
- TerminateThread(g_hThread,0);
- g_bThreadAlive = false;
- }
- if (g_hThread != INVALID_HANDLE_VALUE)
- CloseHandle(g_hThread);
- g_hThread = INVALID_HANDLE_VALUE;
- }
- void CPlugin::CleanUpMyNonDx9Stuff()
- {
-
-
-
-
-
-
- DeleteCriticalSection(&g_cs);
- CancelThread(0);
- m_menuPreset .Finish();
- m_menuWave .Finish();
- m_menuAugment .Finish();
- m_menuCustomWave.Finish();
- m_menuCustomShape.Finish();
- m_menuMotion .Finish();
- m_menuPost .Finish();
- int i = 0;
- for (i=0; i<MAX_CUSTOM_WAVES; i++)
- m_menuWavecode[i].Finish();
- for (i=0; i<MAX_CUSTOM_SHAPES; i++)
- m_menuShapecode[i].Finish();
- SetScrollLock(m_bOrigScrollLockState, m_bPreventScollLockHandling);
-
- }
- float SquishToCenter(float x, float fExp)
- {
- if (x > 0.5f)
- return powf(x*2-1, fExp)*0.5f + 0.5f;
- return (1-powf(1-x*2, fExp))*0.5f;
- }
- int GetNearestPow2Size(int w, int h)
- {
- float fExp = logf( max(w,h)*0.75f + 0.25f*min(w,h) ) / logf(2.0f);
- float bias = 0.55f;
- if (fExp + bias >= 11.0f)
- bias = 0.5f;
- int nExp = (int)(fExp + bias);
- int log2size = (int)powf(2.0f, (float)nExp);
- return log2size;
- }
- int CPlugin::AllocateMyDX9Stuff()
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- wchar_t buf[32768], title[64];
- m_nFramesSinceResize = 0;
- int nNewCanvasStretch = (m_nCanvasStretch == 0) ? 100 : m_nCanvasStretch;
- DWORD PSVersion = GetCaps()->PixelShaderVersion & 0xFFFF;
- if (PSVersion >= 0x0300)
- m_nMaxPSVersion_DX9 = MD2_PS_3_0;
- else if (PSVersion > 0x0200)
- m_nMaxPSVersion_DX9 = MD2_PS_2_X;
- else if (PSVersion >= 0x0200)
- m_nMaxPSVersion_DX9 = MD2_PS_2_0;
- else
- m_nMaxPSVersion_DX9 = MD2_PS_NONE;
- if (m_nMaxPSVersion_ConfigPanel == -1)
- m_nMaxPSVersion = m_nMaxPSVersion_DX9;
- else
- {
-
-
-
- m_nMaxPSVersion = m_nMaxPSVersion_ConfigPanel;
- }
-
- const char* szGPU = GetDriverDescription();
-
-
-
-
-
-
-
- if (m_nCanvasStretch==0)
- {
-
-
- if (
- strstr(szGPU, "GeForce 4" ) ||
- strstr(szGPU, "GeForce FX 52" ) ||
- strstr(szGPU, "GeForce FX 53" ) ||
- strstr(szGPU, "GeForce FX 54" ) ||
- strstr(szGPU, "GeForce FX 55" ) ||
- strstr(szGPU, "GeForce FX 56" ) ||
-
- strstr(szGPU, "GeForce FX 56" ) ||
- strstr(szGPU, "GeForce FX 56" ) ||
- strstr(szGPU, "SiS 300/305/630/540/730") ||
- strstr(szGPU, "Radeon 8" ) ||
- strstr(szGPU, "Radeon 90" ) ||
- strstr(szGPU, "Radeon 91" ) ||
- strstr(szGPU, "Radeon 92" ) ||
- strstr(szGPU, "Radeon 93" ) ||
- strstr(szGPU, "Radeon 94" ) ||
-
- strstr(szGPU, "Radeon 9550") ||
- strstr(szGPU, "Radeon X300") ||
- 0)
- {
- nNewCanvasStretch = 200;
- }
- }
-
-
-
-
-
- if (m_nMaxPSVersion_ConfigPanel==-1)
- {
- if (strstr(szGPU, "GeForce2" ) ||
- strstr(szGPU, "GeForce3" ) ||
- strstr(szGPU, "GeForce4" ) ||
- strstr(szGPU, "Radeon 7" ) ||
- strstr(szGPU, "Radeon 8" ) ||
- strstr(szGPU, "SiS 661FX_760_741") ||
-
-
- (strstr(szGPU,"Intel") && strstr(szGPU,"945G")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"915G")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"910G")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"8291")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"8281")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"8283")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"8284")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"8285")) ||
- (strstr(szGPU,"Intel") && strstr(szGPU,"8286")) ||
- 0)
- {
- m_nMaxPSVersion = MD2_PS_NONE;
-
-
- }
- }
-
-
-
-
- if (m_nMaxPSVersion > MD2_PS_NONE)
- {
-
- if (D3D_OK != GetDevice()->CreateVertexDeclaration( g_MyVertDecl, &m_pMyVertDecl ))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_CREATE_MY_VERTEX_DECLARATION,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,sizeof(title)), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (D3D_OK != GetDevice()->CreateVertexDeclaration( g_WfVertDecl, &m_pWfVertDecl ))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_CREATE_WF_VERTEX_DECLARATION,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,sizeof(title)), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (D3D_OK != GetDevice()->CreateVertexDeclaration( g_SpriteVertDecl, &m_pSpriteVertDecl ))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_CREATE_SPRITE_VERTEX_DECLARATION,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,sizeof(title)), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
-
- if (!RecompilePShader(m_szDefaultWarpPShaderText, &m_fallbackShaders_ps.warp, SHADER_WARP, true, 2))
- {
- wchar_t szSM[64];
- switch(m_nMaxPSVersion_DX9)
- {
- case MD2_PS_2_0:
- case MD2_PS_2_X:
- WASABI_API_LNGSTRINGW_BUF(IDS_SHADER_MODEL_2,szSM,64); break;
- case MD2_PS_3_0: WASABI_API_LNGSTRINGW_BUF(IDS_SHADER_MODEL_3,szSM,64); break;
- case MD2_PS_4_0: WASABI_API_LNGSTRINGW_BUF(IDS_SHADER_MODEL_4,szSM,64); break;
- default:
- swprintf(szSM, WASABI_API_LNGSTRINGW(IDS_UKNOWN_CASE_X), m_nMaxPSVersion_DX9);
- break;
- }
- if (m_nMaxPSVersion_ConfigPanel >= MD2_PS_NONE && m_nMaxPSVersion_DX9 < m_nMaxPSVersion_ConfigPanel)
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_FAILED_TO_COMPILE_PIXEL_SHADERS_USING_X),szSM,PSVersion);
- else
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_FAILED_TO_COMPILE_PIXEL_SHADERS_HARDWARE_MIS_REPORT),szSM,PSVersion);
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (!RecompileVShader(m_szDefaultWarpVShaderText, &m_fallbackShaders_vs.warp, SHADER_WARP, true))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_COMPILE_FALLBACK_WV_SHADER,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (!RecompileVShader(m_szDefaultCompVShaderText, &m_fallbackShaders_vs.comp, SHADER_COMP, true))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_COMPILE_FALLBACK_CV_SHADER,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (!RecompilePShader(m_szDefaultCompPShaderText, &m_fallbackShaders_ps.comp, SHADER_COMP, true, 2))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_COMPILE_FALLBACK_CP_SHADER,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
-
- if (!RecompileVShader(m_szBlurVS, &m_BlurShaders[0].vs, SHADER_BLUR, true))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_COMPILE_BLUR1_VERTEX_SHADER,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (!RecompilePShader(m_szBlurPSX, &m_BlurShaders[0].ps, SHADER_BLUR, true, 2))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_COMPILE_BLUR1_PIXEL_SHADER,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (!RecompileVShader(m_szBlurVS, &m_BlurShaders[1].vs, SHADER_BLUR, true))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_COMPILE_BLUR2_VERTEX_SHADER,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (!RecompilePShader(m_szBlurPSY, &m_BlurShaders[1].ps, SHADER_BLUR, true, 2))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_COMPILE_BLUR2_PIXEL_SHADER,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- }
-
- {
- int log2texsize = GetNearestPow2Size(GetWidth(), GetHeight());
-
- if (m_bTexSizeWasAutoExact)
- {
-
-
-
-
-
-
-
-
-
- m_nTexSizeX = GetWidth();
- m_nTexSizeY = GetHeight();
- }
- else if (m_bTexSizeWasAutoPow2)
- {
- m_nTexSizeX = log2texsize;
- m_nTexSizeY = log2texsize;
- }
-
- if ((DWORD)m_nTexSizeX > GetCaps()->MaxTextureWidth && GetCaps()->MaxTextureWidth>0)
- m_nTexSizeX = GetCaps()->MaxTextureWidth;
- if ((DWORD)m_nTexSizeY > GetCaps()->MaxTextureHeight && GetCaps()->MaxTextureHeight>0)
- m_nTexSizeY = GetCaps()->MaxTextureHeight;
-
- m_nTexSizeX = (m_nTexSizeX * 100)/nNewCanvasStretch;
- m_nTexSizeY = (m_nTexSizeY * 100)/nNewCanvasStretch;
-
- log2texsize = GetNearestPow2Size(m_nTexSizeX, m_nTexSizeY);
- if (m_bTexSizeWasAutoPow2)
- {
- m_nTexSizeX = log2texsize;
- m_nTexSizeY = log2texsize;
- }
-
-
- m_nTexSizeX = ((m_nTexSizeX+15)/16)*16;
- m_nTexSizeY = ((m_nTexSizeY+15)/16)*16;
-
- D3DFORMAT fmt;
- switch(m_nTexBitsPerCh) {
- case 5: fmt = D3DFMT_R5G6B5 ; break;
- case 8: fmt = D3DFMT_X8R8G8B8 ; break;
- case 10: fmt = D3DFMT_A2R10G10B10; break;
- case 16: fmt = D3DFMT_A16B16G16R16F; break;
- case 32: fmt = D3DFMT_A32B32G32R32F; break;
- default: fmt = D3DFMT_X8R8G8B8 ; break;
- }
-
- bool bSuccess = false;
- DWORD vs_flags = D3DUSAGE_RENDERTARGET;
- bool bRevertedBitDepth = false;
- do
- {
- SafeRelease(m_lpVS[0]);
- SafeRelease(m_lpVS[1]);
-
- bSuccess = (GetDevice()->CreateTexture(m_nTexSizeX, m_nTexSizeY, 1, vs_flags, fmt, D3DPOOL_DEFAULT, &m_lpVS[0], NULL) == D3D_OK);
- if (!bSuccess)
- {
- bSuccess = (GetDevice()->CreateTexture(m_nTexSizeX, m_nTexSizeY, 1, vs_flags, GetBackBufFormat(), D3DPOOL_DEFAULT, &m_lpVS[0], NULL) == D3D_OK);
- if (bSuccess)
- fmt = GetBackBufFormat();
- }
-
- if (bSuccess)
- bSuccess = (GetDevice()->CreateTexture(m_nTexSizeX, m_nTexSizeY, 1, vs_flags, fmt, D3DPOOL_DEFAULT, &m_lpVS[1], NULL) == D3D_OK);
- if (!bSuccess)
- {
- if (m_bTexSizeWasAutoExact)
- {
- if (m_nTexSizeX > 256 || m_nTexSizeY > 256)
- {
- m_nTexSizeX /= 2;
- m_nTexSizeY /= 2;
- m_nTexSizeX = ((m_nTexSizeX+15)/16)*16;
- m_nTexSizeY = ((m_nTexSizeY+15)/16)*16;
- }
- else
- {
- m_nTexSizeX = log2texsize;
- m_nTexSizeY = log2texsize;
- m_bTexSizeWasAutoExact = false;
- m_bTexSizeWasAutoPow2 = true;
- }
- }
- else if (m_bTexSizeWasAutoPow2)
- {
- if (m_nTexSizeX > 256)
- {
- m_nTexSizeX /= 2;
- m_nTexSizeY /= 2;
- }
- else
- break;
- }
- }
- }
- while (!bSuccess);
- if (!bSuccess)
- {
- wchar_t buf[2048];
- UINT err_id = IDS_COULD_NOT_CREATE_INTERNAL_CANVAS_TEXTURE_NOT_ENOUGH_VID_MEM;
- if (GetScreenMode() == FULLSCREEN)
- err_id = IDS_COULD_NOT_CREATE_INTERNAL_CANVAS_TEXTURE_SMALLER_DISPLAY;
- else if (!(m_bTexSizeWasAutoExact || m_bTexSizeWasAutoPow2))
- err_id = IDS_COULD_NOT_CREATE_INTERNAL_CANVAS_TEXTURE_NOT_ENOUGH_VID_MEM_RECOMMENDATION;
- WASABI_API_LNGSTRINGW_BUF(err_id,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- else
- {
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_SUCCESSFULLY_CREATED_VS0_VS1), m_nTexSizeX, m_nTexSizeY, GetWidth(), GetHeight());
- dumpmsg(buf);
- }
-
-
- #if (NUM_BLUR_TEX>0)
- int w = m_nTexSizeX;
- int h = m_nTexSizeY;
- DWORD blurtex_flags = D3DUSAGE_RENDERTARGET;
- for (int i=0; i<NUM_BLUR_TEX; i++)
- {
-
-
-
-
-
-
-
- if (!(i&1) || (i<2))
- {
- w = max(16, w/2);
- h = max(16, h/2);
- }
- int w2 = ((w+3)/16)*16;
- int h2 = ((h+3)/4)*4;
- bSuccess = (GetDevice()->CreateTexture(w2, h2, 1, blurtex_flags, fmt, D3DPOOL_DEFAULT, &m_lpBlur[i], NULL) == D3D_OK);
- m_nBlurTexW[i] = w2;
- m_nBlurTexH[i] = h2;
- if (!bSuccess)
- {
- m_nBlurTexW[i] = 1;
- m_nBlurTexH[i] = 1;
- MessageBoxW(GetPluginWindow(), WASABI_API_LNGSTRINGW_BUF(IDS_ERROR_CREATING_BLUR_TEXTURES,buf,sizeof(buf)),
- WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_WARNING,title,sizeof(title)), MB_OK|MB_SETFOREGROUND|MB_TOPMOST);
- break;
- }
-
- TexInfo x;
- swprintf(x.texname, L"blur%d%s", i/2+1, (i%2) ? L"" : L"doNOTuseME");
- x.texptr = m_lpBlur[i];
-
- x.w = w2;
- x.h = h2;
- x.d = 1;
- x.bEvictable = false;
- x.nAge = m_nPresetsLoadedTotal;
- x.nSizeInBytes = 0;
- m_textures.push_back(x);
- }
- #endif
- }
- m_fAspectX = (m_nTexSizeY > m_nTexSizeX) ? m_nTexSizeX/(float)m_nTexSizeY : 1.0f;
- m_fAspectY = (m_nTexSizeX > m_nTexSizeY) ? m_nTexSizeY/(float)m_nTexSizeX : 1.0f;
- m_fInvAspectX = 1.0f/m_fAspectX;
- m_fInvAspectY = 1.0f/m_fAspectY;
-
-
-
- ZeroMemory(m_comp_verts, sizeof(MYVERTEX)*FCGSX*FCGSY);
-
-
- float fHalfTexelW = 0.5f / (float)GetWidth();
- float fHalfTexelH = 0.5f / (float)GetHeight();
- float fDivX = 1.0f / (float)(FCGSX-2);
- float fDivY = 1.0f / (float)(FCGSY-2);
- for (int j=0; j<FCGSY; j++)
- {
- int j2 = j - j/(FCGSY/2);
- float v = j2*fDivY;
- v = SquishToCenter(v, 3.0f);
- float sy = -((v-fHalfTexelH)*2-1);
- for (int i=0; i<FCGSX; i++)
- {
- int i2 = i - i/(FCGSX/2);
- float u = i2*fDivX;
- u = SquishToCenter(u, 3.0f);
- float sx = (u-fHalfTexelW)*2-1;
- MYVERTEX* p = &m_comp_verts[i + j*FCGSX];
- p->x = sx;
- p->y = sy;
- p->z = 0;
- float rad, ang;
- UvToMathSpace( u, v, &rad, &ang );
-
- if (i==FCGSX/2-1) {
- if (j < FCGSY/2-1)
- ang = 3.1415926535898f*1.5f;
- else if (j == FCGSY/2-1)
- ang = 3.1415926535898f*1.25f;
- else if (j == FCGSY/2)
- ang = 3.1415926535898f*0.75f;
- else
- ang = 3.1415926535898f*0.5f;
- }
- else if (i==FCGSX/2) {
- if (j < FCGSY/2-1)
- ang = 3.1415926535898f*1.5f;
- else if (j == FCGSY/2-1)
- ang = 3.1415926535898f*1.75f;
- else if (j == FCGSY/2)
- ang = 3.1415926535898f*0.25f;
- else
- ang = 3.1415926535898f*0.5f;
- }
- else if (j==FCGSY/2-1) {
- if (i < FCGSX/2-1)
- ang = 3.1415926535898f*1.0f;
- else if (i == FCGSX/2-1)
- ang = 3.1415926535898f*1.25f;
- else if (i == FCGSX/2)
- ang = 3.1415926535898f*1.75f;
- else
- ang = 3.1415926535898f*2.0f;
- }
- else if (j==FCGSY/2) {
- if (i < FCGSX/2-1)
- ang = 3.1415926535898f*1.0f;
- else if (i == FCGSX/2-1)
- ang = 3.1415926535898f*0.75f;
- else if (i == FCGSX/2)
- ang = 3.1415926535898f*0.25f;
- else
- ang = 3.1415926535898f*0.0f;
- }
- p->tu = u;
- p->tv = v;
-
-
- p->rad = rad;
- p->ang = ang;
- p->Diffuse = 0xFFFFFFFF;
- }
- }
-
-
- int* cur_index = &m_comp_indices[0];
- int y = 0;
- for (y=0; y<FCGSY-1; y++)
- {
- if (y==FCGSY/2-1)
- continue;
- for (int x=0; x<FCGSX-1; x++)
- {
- if (x==FCGSX/2-1)
- continue;
- bool left_half = (x < FCGSX/2);
- bool top_half = (y < FCGSY/2);
- bool center_4 = ((x==FCGSX/2 || x==FCGSX/2-1) && (y==FCGSY/2 || y==FCGSY/2-1));
- if ( ((int)left_half + (int)top_half + (int)center_4) % 2 )
- {
- *(cur_index+0) = (y )*FCGSX + (x );
- *(cur_index+1) = (y )*FCGSX + (x+1);
- *(cur_index+2) = (y+1)*FCGSX + (x+1);
- *(cur_index+3) = (y+1)*FCGSX + (x+1);
- *(cur_index+4) = (y+1)*FCGSX + (x );
- *(cur_index+5) = (y )*FCGSX + (x );
- }
- else
- {
- *(cur_index+0) = (y+1)*FCGSX + (x );
- *(cur_index+1) = (y )*FCGSX + (x );
- *(cur_index+2) = (y )*FCGSX + (x+1);
- *(cur_index+3) = (y )*FCGSX + (x+1);
- *(cur_index+4) = (y+1)*FCGSX + (x+1);
- *(cur_index+5) = (y+1)*FCGSX + (x );
- }
- cur_index += 6;
- }
- }
-
-
-
-
-
- {
- m_nTitleTexSizeX = max(m_nTexSizeX, m_nTexSizeY);
- m_nTitleTexSizeY = m_nTitleTexSizeX/4;
-
-
-
-
-
-
-
-
- HRESULT hr;
- do
- {
- hr = pCreateTexture(GetDevice(), m_nTitleTexSizeX, m_nTitleTexSizeY, 1, D3DUSAGE_RENDERTARGET, GetBackBufFormat(), D3DPOOL_DEFAULT, &m_lpDDSTitle);
- if (hr != D3D_OK)
- {
- if (m_nTitleTexSizeY < m_nTitleTexSizeX)
- {
- m_nTitleTexSizeY *= 2;
- }
- else
- {
- m_nTitleTexSizeX /= 2;
- m_nTitleTexSizeY /= 2;
- }
- }
- }
- while (hr != D3D_OK && m_nTitleTexSizeX > 16);
- if (hr != D3D_OK)
- {
-
- m_lpDDSTitle = NULL;
-
-
- }
- else
- {
-
-
- m_supertext.bRedrawSuperText = true;
- }
- }
-
-
- int songtitle_font_size = m_fontinfo[SONGTITLE_FONT].nSize * m_nTitleTexSizeX/256;
- if (songtitle_font_size<6) songtitle_font_size=6;
- if (!(m_gdi_title_font_doublesize = CreateFontW(songtitle_font_size, 0, 0, 0, m_fontinfo[SONGTITLE_FONT].bBold ? 900 : 400,
- m_fontinfo[SONGTITLE_FONT].bItalic, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, m_fontinfo[SONGTITLE_FONT].bAntiAliased ? ANTIALIASED_QUALITY : DEFAULT_QUALITY, DEFAULT_PITCH, m_fontinfo[SONGTITLE_FONT].szFace)))
- {
- MessageBoxW(NULL, WASABI_API_LNGSTRINGW(IDS_ERROR_CREATING_DOUBLE_SIZED_GDI_TITLE_FONT),
- WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,sizeof(title)),
- MB_OK|MB_SETFOREGROUND|MB_TOPMOST);
- return false;
- }
- if (pCreateFontW( GetDevice(),
- songtitle_font_size,
- 0,
- m_fontinfo[SONGTITLE_FONT].bBold ? 900 : 400,
- 1,
- m_fontinfo[SONGTITLE_FONT].bItalic,
- DEFAULT_CHARSET,
- OUT_DEFAULT_PRECIS,
- ANTIALIASED_QUALITY,
- DEFAULT_PITCH,
- m_fontinfo[SONGTITLE_FONT].szFace,
- &m_d3dx_title_font_doublesize
- ) != D3D_OK)
- {
- MessageBoxW(GetPluginWindow(), WASABI_API_LNGSTRINGW(IDS_ERROR_CREATING_DOUBLE_SIZED_D3DX_TITLE_FONT),
- WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,sizeof(title)), MB_OK|MB_SETFOREGROUND|MB_TOPMOST);
- return false;
- }
-
- m_texmgr.Init(GetDevice());
-
- m_verts = new MYVERTEX[(m_nGridX+1)*(m_nGridY+1)];
- m_verts_temp = new MYVERTEX[(m_nGridX+2) * 4];
- m_vertinfo = new td_vertinfo[(m_nGridX+1)*(m_nGridY+1)];
- m_indices_strip = new int[(m_nGridX+2)*(m_nGridY*2)];
- m_indices_list = new int[m_nGridX*m_nGridY*6];
- if (!m_verts || !m_vertinfo)
- {
- swprintf(buf, L"couldn't allocate mesh - out of memory");
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- int nVert = 0;
- float texel_offset_x = 0.5f / (float)m_nTexSizeX;
- float texel_offset_y = 0.5f / (float)m_nTexSizeY;
- for (y=0; y<=m_nGridY; y++)
- {
- for (int x=0; x<=m_nGridX; x++)
- {
-
- m_verts[nVert].x = x/(float)m_nGridX*2.0f - 1.0f;
- m_verts[nVert].y = y/(float)m_nGridY*2.0f - 1.0f;
- m_verts[nVert].z = 0.0f;
-
- m_vertinfo[nVert].rad = sqrtf(m_verts[nVert].x*m_verts[nVert].x*m_fAspectX*m_fAspectX + m_verts[nVert].y*m_verts[nVert].y*m_fAspectY*m_fAspectY);
- if (y==m_nGridY/2 && x==m_nGridX/2)
- m_vertinfo[nVert].ang = 0.0f;
- else
- m_vertinfo[nVert].ang = atan2f(m_verts[nVert].y*m_fAspectY, m_verts[nVert].x*m_fAspectX);
- m_vertinfo[nVert].a = 1;
- m_vertinfo[nVert].c = 0;
- m_verts[nVert].rad = m_vertinfo[nVert].rad;
- m_verts[nVert].ang = m_vertinfo[nVert].ang;
- m_verts[nVert].tu_orig = m_verts[nVert].x*0.5f + 0.5f + texel_offset_x;
- m_verts[nVert].tv_orig = -m_verts[nVert].y*0.5f + 0.5f + texel_offset_y;
- nVert++;
- }
- }
-
-
-
-
- int xref, yref;
- int nVert_strip = 0;
- for (int quadrant=0; quadrant<4; quadrant++)
- {
- for (int slice=0; slice < m_nGridY/2; slice++)
- {
- for (int i=0; i < m_nGridX + 2; i++)
- {
-
-
- xref = i/2;
- yref = (i%2) + slice;
- if (quadrant & 1)
- xref = m_nGridX - xref;
- if (quadrant & 2)
- yref = m_nGridY - yref;
- int v = xref + (yref)*(m_nGridX+1);
- m_indices_strip[nVert_strip++] = v;
- }
- }
- }
-
- int nVert_list = 0;
- for (int quadrant=0; quadrant<4; quadrant++)
- {
- for (int slice=0; slice < m_nGridY/2; slice++)
- {
- for (int i=0; i < m_nGridX/2; i++)
- {
-
-
- xref = i;
- yref = slice;
- if (quadrant & 1)
- xref = m_nGridX-1 - xref;
- if (quadrant & 2)
- yref = m_nGridY-1 - yref;
- int v = xref + (yref)*(m_nGridX+1);
- m_indices_list[nVert_list++] = v;
- m_indices_list[nVert_list++] = v +1;
- m_indices_list[nVert_list++] = v+m_nGridX+1 ;
- m_indices_list[nVert_list++] = v +1;
- m_indices_list[nVert_list++] = v+m_nGridX+1 ;
- m_indices_list[nVert_list++] = v+m_nGridX+1+1;
- }
- }
- }
-
-
- if (m_nMaxPSVersion > 0)
- {
-
- if (!AddNoiseTex(L"noise_lq", 256, 1)) return false;
- if (!AddNoiseTex(L"noise_lq_lite", 32, 1)) return false;
- if (!AddNoiseTex(L"noise_mq", 256, 4)) return false;
- if (!AddNoiseTex(L"noise_hq", 256, 8)) return false;
- if (!AddNoiseVol(L"noisevol_lq", 32, 1)) return false;
- if (!AddNoiseVol(L"noisevol_hq", 32, 4)) return false;
- }
- if (!m_bInitialPresetSelected)
- {
- UpdatePresetList(true);
- LoadRandomPreset(0.0f);
- m_bInitialPresetSelected = true;
- }
- else
- LoadShaders(&m_shaders, m_pState, false);
- return true;
- }
- float fCubicInterpolate(float y0, float y1, float y2, float y3, float t)
- {
- float a0,a1,a2,a3,t2;
- t2 = t*t;
- a0 = y3 - y2 - y0 + y1;
- a1 = y0 - y1 - a0;
- a2 = y2 - y0;
- a3 = y1;
- return(a0*t*t2+a1*t2+a2*t+a3);
- }
- DWORD dwCubicInterpolate(DWORD y0, DWORD y1, DWORD y2, DWORD y3, float t)
- {
-
- DWORD ret = 0;
- DWORD shift = 0;
- for (int i=0; i<4; i++)
- {
- float f = fCubicInterpolate(
- ((y0 >> shift) & 0xFF)/255.0f,
- ((y1 >> shift) & 0xFF)/255.0f,
- ((y2 >> shift) & 0xFF)/255.0f,
- ((y3 >> shift) & 0xFF)/255.0f,
- t
- );
- if (f<0)
- f = 0;
- if (f>1)
- f = 1;
- ret |= ((DWORD)(f*255)) << shift;
- shift += 8;
- }
- return ret;
- }
- bool CPlugin::AddNoiseTex(const wchar_t* szTexName, int size, int zoom_factor)
- {
-
-
-
-
-
- wchar_t buf[2048], title[64];
-
- LPDIRECT3DTEXTURE9 pNoiseTex = NULL;
-
- for (int i=0; i<2; i++)
- {
- if (D3D_OK != GetDevice()->CreateTexture(size, size, i, D3DUSAGE_DYNAMIC | (i ? 0 : D3DUSAGE_AUTOGENMIPMAP), D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pNoiseTex, NULL))
- {
- if (i==1)
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_CREATE_NOISE_TEXTURE,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- }
- else
- break;
- }
- D3DLOCKED_RECT r;
- if (D3D_OK != pNoiseTex->LockRect(0, &r, NULL, D3DLOCK_DISCARD))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_LOCK_NOISE_TEXTURE,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (r.Pitch < size*4)
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_NOISE_TEXTURE_BYTE_LAYOUT_NOT_RECOGNISED,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
-
- DWORD* dst = (DWORD*)r.pBits;
- int dwords_per_line = r.Pitch / sizeof(DWORD);
- int RANGE = (zoom_factor > 1) ? 216 : 256;
- for (int y=0; y<size; y++) {
- LARGE_INTEGER q;
- QueryPerformanceCounter(&q);
- srand(q.LowPart ^ q.HighPart ^ warand());
- int x = 0;
- for (x=0; x<size; x++) {
- dst[x] = (((DWORD)(warand() % RANGE)+RANGE/2) << 24) |
- (((DWORD)(warand() % RANGE)+RANGE/2) << 16) |
- (((DWORD)(warand() % RANGE)+RANGE/2) << 8) |
- (((DWORD)(warand() % RANGE)+RANGE/2) );
- }
-
- for (x=0; x<size; x++)
- {
- int x1 = (warand() ^ q.LowPart ) % size;
- int x2 = (warand() ^ q.HighPart) % size;
- DWORD temp = dst[x2];
- dst[x2] = dst[x1];
- dst[x1] = temp;
- }
- dst += dwords_per_line;
- }
-
- if (zoom_factor > 1)
- {
-
- DWORD* dst = (DWORD*)r.pBits;
- for (int y=0; y<size; y+=zoom_factor)
- for (int x=0; x<size; x++)
- if (x % zoom_factor)
- {
- int base_x = (x/zoom_factor)*zoom_factor + size;
- int base_y = y*dwords_per_line;
- DWORD y0 = dst[ base_y + ((base_x - zoom_factor ) % size) ];
- DWORD y1 = dst[ base_y + ((base_x ) % size) ];
- DWORD y2 = dst[ base_y + ((base_x + zoom_factor ) % size) ];
- DWORD y3 = dst[ base_y + ((base_x + zoom_factor*2) % size) ];
- float t = (x % zoom_factor)/(float)zoom_factor;
- DWORD result = dwCubicInterpolate(y0, y1, y2, y3, t);
-
- dst[ y*dwords_per_line + x ] = result;
- }
-
-
- for (int x=0; x<size; x++)
- for (int y=0; y<size; y++)
- if (y % zoom_factor)
- {
- int base_y = (y/zoom_factor)*zoom_factor + size;
- DWORD y0 = dst[ ((base_y - zoom_factor ) % size)*dwords_per_line + x ];
- DWORD y1 = dst[ ((base_y ) % size)*dwords_per_line + x ];
- DWORD y2 = dst[ ((base_y + zoom_factor ) % size)*dwords_per_line + x ];
- DWORD y3 = dst[ ((base_y + zoom_factor*2) % size)*dwords_per_line + x ];
- float t = (y % zoom_factor)/(float)zoom_factor;
- DWORD result = dwCubicInterpolate(y0, y1, y2, y3, t);
-
- dst[ y*dwords_per_line + x ] = result;
- }
- }
-
- pNoiseTex->UnlockRect(0);
-
- TexInfo x;
- lstrcpyW(x.texname, szTexName);
- x.texptr = pNoiseTex;
-
- x.w = size;
- x.h = size;
- x.d = 1;
- x.bEvictable = false;
- x.nAge = m_nPresetsLoadedTotal;
- x.nSizeInBytes = 0;
- m_textures.push_back(x);
- return true;
- }
- bool CPlugin::AddNoiseVol(const wchar_t* szTexName, int size, int zoom_factor)
- {
-
-
-
-
-
- wchar_t buf[2048], title[64];
-
- LPDIRECT3DVOLUMETEXTURE9 pNoiseTex = NULL;
-
-
- for (int i=1; i<2; i++)
- {
- if (D3D_OK != GetDevice()->CreateVolumeTexture(size, size, size, i, D3DUSAGE_DYNAMIC | (i ? 0 : D3DUSAGE_AUTOGENMIPMAP), D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pNoiseTex, NULL))
- {
- if (i==1)
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_CREATE_3D_NOISE_TEXTURE,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- }
- else
- break;
- }
- D3DLOCKED_BOX r;
- if (D3D_OK != pNoiseTex->LockBox(0, &r, NULL, D3DLOCK_DISCARD))
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_COULD_NOT_LOCK_3D_NOISE_TEXTURE,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
- if (r.RowPitch < size*4 || r.SlicePitch < size*size*4)
- {
- WASABI_API_LNGSTRINGW_BUF(IDS_3D_NOISE_TEXTURE_BYTE_LAYOUT_NOT_RECOGNISED,buf,sizeof(buf));
- dumpmsg(buf);
- MessageBoxW(GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- return false;
- }
-
- int dwords_per_slice = r.SlicePitch / sizeof(DWORD);
- int dwords_per_line = r.RowPitch / sizeof(DWORD);
- int RANGE = (zoom_factor > 1) ? 216 : 256;
- for (int z=0; z<size; z++) {
- DWORD* dst = (DWORD*)r.pBits + z*dwords_per_slice;
- for (int y=0; y<size; y++) {
- LARGE_INTEGER q;
- QueryPerformanceCounter(&q);
- srand(q.LowPart ^ q.HighPart ^ warand());
- int x = 0;
- for (x=0; x<size; x++) {
- dst[x] = (((DWORD)(warand() % RANGE)+RANGE/2) << 24) |
- (((DWORD)(warand() % RANGE)+RANGE/2) << 16) |
- (((DWORD)(warand() % RANGE)+RANGE/2) << 8) |
- (((DWORD)(warand() % RANGE)+RANGE/2) );
- }
-
- for (x=0; x<size; x++)
- {
- int x1 = (warand() ^ q.LowPart ) % size;
- int x2 = (warand() ^ q.HighPart) % size;
- DWORD temp = dst[x2];
- dst[x2] = dst[x1];
- dst[x1] = temp;
- }
- dst += dwords_per_line;
- }
- }
-
- if (zoom_factor > 1)
- {
-
- DWORD* dst = (DWORD*)r.pBits;
- for (int z=0; z<size; z+=zoom_factor)
- for (int y=0; y<size; y+=zoom_factor)
- for (int x=0; x<size; x++)
- if (x % zoom_factor)
- {
- int base_x = (x/zoom_factor)*zoom_factor + size;
- int base_y = z*dwords_per_slice + y*dwords_per_line;
- DWORD y0 = dst[ base_y + ((base_x - zoom_factor ) % size) ];
- DWORD y1 = dst[ base_y + ((base_x ) % size) ];
- DWORD y2 = dst[ base_y + ((base_x + zoom_factor ) % size) ];
- DWORD y3 = dst[ base_y + ((base_x + zoom_factor*2) % size) ];
- float t = (x % zoom_factor)/(float)zoom_factor;
- DWORD result = dwCubicInterpolate(y0, y1, y2, y3, t);
-
- dst[ z*dwords_per_slice + y*dwords_per_line + x ] = result;
- }
-
-
- for (int z=0; z<size; z+=zoom_factor)
- for (int x=0; x<size; x++)
- for (int y=0; y<size; y++)
- if (y % zoom_factor)
- {
- int base_y = (y/zoom_factor)*zoom_factor + size;
- int base_z = z*dwords_per_slice;
- DWORD y0 = dst[ ((base_y - zoom_factor ) % size)*dwords_per_line + base_z + x ];
- DWORD y1 = dst[ ((base_y ) % size)*dwords_per_line + base_z + x ];
- DWORD y2 = dst[ ((base_y + zoom_factor ) % size)*dwords_per_line + base_z + x ];
- DWORD y3 = dst[ ((base_y + zoom_factor*2) % size)*dwords_per_line + base_z + x ];
- float t = (y % zoom_factor)/(float)zoom_factor;
- DWORD result = dwCubicInterpolate(y0, y1, y2, y3, t);
-
- dst[ y*dwords_per_line + base_z + x ] = result;
- }
-
- for (int x=0; x<size; x++)
- for (int y=0; y<size; y++)
- for (int z=0; z<size; z++)
- if (z % zoom_factor)
- {
- int base_y = y*dwords_per_line;
- int base_z = (z/zoom_factor)*zoom_factor + size;
- DWORD y0 = dst[ ((base_z - zoom_factor ) % size)*dwords_per_slice + base_y + x ];
- DWORD y1 = dst[ ((base_z ) % size)*dwords_per_slice + base_y + x ];
- DWORD y2 = dst[ ((base_z + zoom_factor ) % size)*dwords_per_slice + base_y + x ];
- DWORD y3 = dst[ ((base_z + zoom_factor*2) % size)*dwords_per_slice + base_y + x ];
- float t = (z % zoom_factor)/(float)zoom_factor;
- DWORD result = dwCubicInterpolate(y0, y1, y2, y3, t);
-
- dst[ z*dwords_per_slice + base_y + x ] = result;
- }
- }
-
- pNoiseTex->UnlockBox(0);
-
- TexInfo x;
- lstrcpyW(x.texname, szTexName);
- x.texptr = pNoiseTex;
-
- x.w = size;
- x.h = size;
- x.d = size;
- x.bEvictable = false;
- x.nAge = m_nPresetsLoadedTotal;
- x.nSizeInBytes = 0;
- m_textures.push_back(x);
- return true;
- }
- void VShaderInfo::Clear()
- {
- SafeRelease(ptr);
- SafeRelease(CT);
- params.Clear();
- }
- void PShaderInfo::Clear()
- {
- SafeRelease(ptr);
- SafeRelease(CT);
- params.Clear();
- }
- CShaderParamsList global_CShaderParams_master_list;
- CShaderParams::CShaderParams() {
- global_CShaderParams_master_list.push_back(this);
- }
- CShaderParams::~CShaderParams() {
- int N = global_CShaderParams_master_list.size();
- for (int i=0; i<N; i++)
- if (global_CShaderParams_master_list[i] == this)
- {
- global_CShaderParams_master_list.erase(global_CShaderParams_master_list.begin() + i);
- break;
- }
- texsize_params.clear();
- }
- void CShaderParams::OnTextureEvict(LPDIRECT3DBASETEXTURE9 texptr)
- {
- for (int i=0; i<sizeof(m_texture_bindings)/sizeof(m_texture_bindings[0]); i++)
- if (m_texture_bindings[i].texptr == texptr)
- m_texture_bindings[i].texptr = NULL;
- }
- void CShaderParams::Clear()
- {
-
- rand_frame = NULL;
- rand_preset = NULL;
- ZeroMemory(rot_mat, sizeof(rot_mat));
- ZeroMemory(const_handles, sizeof(const_handles));
- ZeroMemory(q_const_handles, sizeof(q_const_handles));
- texsize_params.clear();
-
- for (int i=0; i<sizeof(m_texture_bindings)/sizeof(m_texture_bindings[0]); i++)
- {
- m_texture_bindings[i].texptr = NULL;
- m_texcode[i] = TEX_DISK;
- }
- }
- bool CPlugin::EvictSomeTexture()
- {
-
-
- #if _DEBUG
- {
- int nEvictableFiles = 0;
- int nEvictableBytes = 0;
- int N = m_textures.size();
- for (int i=0; i<N; i++)
- if (m_textures[i].bEvictable && m_textures[i].texptr)
- {
- nEvictableFiles++;
- nEvictableBytes += m_textures[i].nSizeInBytes;
- }
- char buf[1024];
- sprintf(buf, "evicting at %d textures, %.1f MB\n", nEvictableFiles, nEvictableBytes*0.000001f);
- OutputDebugString(buf);
- }
- #endif
- int N = m_textures.size();
-
-
- int newest = 99999999;
- int oldest = 0;
- bool bAtLeastOneFound = false;
- int i = 0;
- for (i=0; i<N; i++)
- if (m_textures[i].bEvictable && m_textures[i].nSizeInBytes>0 && m_textures[i].nAge < m_nPresetsLoadedTotal-1)
- {
- newest = min(newest, m_textures[i].nAge);
- oldest = max(oldest, m_textures[i].nAge);
- bAtLeastOneFound = true;
- }
- if (!bAtLeastOneFound)
- return false;
-
-
-
- int biggest_bytes = 0;
- int biggest_index = -1;
- for (i=0; i<N; i++)
- if (m_textures[i].bEvictable && m_textures[i].nSizeInBytes>0 && m_textures[i].nAge < m_nPresetsLoadedTotal-1)
- {
- float size_mult = 1.0f + (m_textures[i].nAge - newest)/(float)(oldest-newest);
- int bytes = (int)(m_textures[i].nSizeInBytes * size_mult);
- if (bytes > biggest_bytes)
- {
- biggest_bytes = bytes;
- biggest_index = i;
- }
- }
- if (biggest_index == -1)
- return false;
-
-
- assert(m_textures[biggest_index].texptr);
-
- N = global_CShaderParams_master_list.size();
- for (i=0; i<N; i++)
- global_CShaderParams_master_list[i]->OnTextureEvict( m_textures[biggest_index].texptr );
-
- SafeRelease(m_textures[biggest_index].texptr);
- m_textures.erase(m_textures.begin() + biggest_index);
- return true;
- }
- GString texture_exts[] = { L"jpg", L"dds", L"png", L"tga", L"bmp", L"dib", };
- const wchar_t szExtsWithSlashes[] = L"jpg|png|dds|etc.";
- typedef std::vector<GString> StringVec;
- bool PickRandomTexture(const wchar_t* prefix, wchar_t* szRetTextureFilename)
- {
- static StringVec texfiles;
- static DWORD texfiles_timestamp = 0;
-
-
-
-
- if (g_plugin.m_bNeedRescanTexturesDir)
- {
- g_plugin.m_bNeedRescanTexturesDir = false;
- texfiles.clear();
- wchar_t szMask[MAX_PATH];
- swprintf(szMask, L"%stextures\\*.*", g_plugin.m_szMilkdrop2Path);
- WIN32_FIND_DATAW ffd = {0};
- HANDLE hFindFile = INVALID_HANDLE_VALUE;
- if( (hFindFile = FindFirstFileW(szMask, &ffd )) == INVALID_HANDLE_VALUE )
- return false;
-
- do
- {
- if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- continue;
- wchar_t* ext = wcsrchr(ffd.cFileName, L'.');
- if (!ext)
- continue;
- for (int i=0; i<sizeof(texture_exts)/sizeof(texture_exts[0]); i++)
- if (!wcsicmp(texture_exts[i].c_str(), ext+1))
- {
-
- texfiles.push_back( ffd.cFileName );
- continue;
- }
- }
- while (FindNextFileW(hFindFile, &ffd));
- FindClose(hFindFile);
- }
- if (texfiles.size() == 0)
- return false;
-
- if (prefix==NULL || prefix[0]==0)
- {
-
- int i = warand() % texfiles.size();
- lstrcpyW(szRetTextureFilename, texfiles[i].c_str());
- }
- else
- {
-
- StringVec temp_list;
- int N = texfiles.size();
- int len = lstrlenW(prefix);
- for (int i=0; i<N; i++)
- if (!_wcsnicmp(prefix, texfiles[i].c_str(), len))
- temp_list.push_back(texfiles[i]);
- N = temp_list.size();
- if (N==0)
- return false;
-
- int i = warand() % temp_list.size();
- lstrcpyW(szRetTextureFilename, temp_list[i].c_str());
- }
- return true;
- }
- void CShaderParams::CacheParams(LPD3DXCONSTANTTABLE pCT, bool bHardErrors)
- {
- Clear();
- if (!pCT)
- return;
- D3DXCONSTANTTABLE_DESC d;
- pCT->GetDesc(&d);
- D3DXCONSTANT_DESC cd;
- #define MAX_RAND_TEX 16
- GString RandTexName[MAX_RAND_TEX];
-
- UINT i = 0;
- for (i=0; i<d.Constants; i++)
- {
- D3DXHANDLE h = pCT->GetConstant(NULL, i);
- unsigned int count = 1;
- pCT->GetConstantDesc(h, &cd, &count);
-
-
-
- if (cd.RegisterSet == D3DXRS_SAMPLER && cd.RegisterIndex >= 0 && cd.RegisterIndex < sizeof(m_texture_bindings)/sizeof(m_texture_bindings[0]))
- {
- assert(m_texture_bindings[cd.RegisterIndex].texptr == NULL);
-
- wchar_t szRootName[MAX_PATH];
- if (!strncmp(cd.Name, "sampler_", 8))
- lstrcpyW(szRootName, AutoWide(&cd.Name[8]));
- else
- lstrcpyW(szRootName, AutoWide(cd.Name));
-
- bool bBilinear = true;
- bool bWrap = true;
- bool bWrapFilterSpecified = false;
- if (lstrlenW(szRootName) > 3 && szRootName[2]==L'_')
- {
- wchar_t temp[3];
- temp[0] = szRootName[0];
- temp[1] = szRootName[1];
- temp[2] = 0;
-
- if (temp[0] >= L'a' && temp[0] <= L'z')
- temp[0] -= L'a' - L'A';
- if (temp[1] >= L'a' && temp[1] <= L'z')
- temp[1] -= L'a' - L'A';
- if (!wcscmp(temp, L"FW")) { bWrapFilterSpecified = true; bBilinear = true; bWrap = true; }
- else if (!wcscmp(temp, L"FC")) { bWrapFilterSpecified = true; bBilinear = true; bWrap = false; }
- else if (!wcscmp(temp, L"PW")) { bWrapFilterSpecified = true; bBilinear = false; bWrap = true; }
- else if (!wcscmp(temp, L"PC")) { bWrapFilterSpecified = true; bBilinear = false; bWrap = false; }
-
- else if (!wcscmp(temp, L"WF")) { bWrapFilterSpecified = true; bBilinear = true; bWrap = true; }
- else if (!wcscmp(temp, L"CF")) { bWrapFilterSpecified = true; bBilinear = true; bWrap = false; }
- else if (!wcscmp(temp, L"WP")) { bWrapFilterSpecified = true; bBilinear = false; bWrap = true; }
- else if (!wcscmp(temp, L"CP")) { bWrapFilterSpecified = true; bBilinear = false; bWrap = false; }
-
- int i = 0;
- while (szRootName[i+3])
- {
- szRootName[i] = szRootName[i+3];
- i++;
- }
- szRootName[i] = 0;
- }
- m_texture_bindings[ cd.RegisterIndex ].bWrap = bWrap;
- m_texture_bindings[ cd.RegisterIndex ].bBilinear = bBilinear;
-
- if (!wcscmp(L"main", szRootName))
- {
- m_texture_bindings[ cd.RegisterIndex ].texptr = NULL;
- m_texcode[ cd.RegisterIndex ] = TEX_VS;
- }
- #if (NUM_BLUR_TEX >= 2)
- else if (!wcscmp(L"blur1", szRootName))
- {
- m_texture_bindings[ cd.RegisterIndex ].texptr = g_plugin.m_lpBlur[1];
- m_texcode [ cd.RegisterIndex ] = TEX_BLUR1;
- if (!bWrapFilterSpecified) {
- m_texture_bindings[ cd.RegisterIndex ].bWrap = false;
- m_texture_bindings[ cd.RegisterIndex ].bBilinear = true;
- }
- }
- #endif
- #if (NUM_BLUR_TEX >= 4)
- else if (!wcscmp(L"blur2", szRootName))
- {
- m_texture_bindings[ cd.RegisterIndex ].texptr = g_plugin.m_lpBlur[3];
- m_texcode [ cd.RegisterIndex ] = TEX_BLUR2;
- if (!bWrapFilterSpecified) {
- m_texture_bindings[ cd.RegisterIndex ].bWrap = false;
- m_texture_bindings[ cd.RegisterIndex ].bBilinear = true;
- }
- }
- #endif
- #if (NUM_BLUR_TEX >= 6)
- else if (!wcscmp(L"blur3", szRootName))
- {
- m_texture_bindings[ cd.RegisterIndex ].texptr = g_plugin.m_lpBlur[5];
- m_texcode [ cd.RegisterIndex ] = TEX_BLUR3;
- if (!bWrapFilterSpecified) {
- m_texture_bindings[ cd.RegisterIndex ].bWrap = false;
- m_texture_bindings[ cd.RegisterIndex ].bBilinear = true;
- }
- }
- #endif
- #if (NUM_BLUR_TEX >= 8)
- else if (!wcscmp("blur4", szRootName))
- {
- m_texture_bindings[ cd.RegisterIndex ].texptr = g_plugin.m_lpBlur[7];
- m_texcode [ cd.RegisterIndex ] = TEX_BLUR4;
- if (!bWrapFilterSpecified) {
- m_texture_bindings[ cd.RegisterIndex ].bWrap = false;
- m_texture_bindings[ cd.RegisterIndex ].bBilinear = true;
- }
- }
- #endif
- #if (NUM_BLUR_TEX >= 10)
- else if (!wcscmp("blur5", szRootName))
- {
- m_texture_bindings[ cd.RegisterIndex ].texptr = g_plugin.m_lpBlur[9];
- m_texcode [ cd.RegisterIndex ] = TEX_BLUR5;
- if (!bWrapFilterSpecified) {
- m_texture_bindings[ cd.RegisterIndex ].bWrap = false;
- m_texture_bindings[ cd.RegisterIndex ].bBilinear = true;
- }
- }
- #endif
- #if (NUM_BLUR_TEX >= 12)
- else if (!wcscmp("blur6", szRootName))
- {
- m_texture_bindings[ cd.RegisterIndex ].texptr = g_plugin.m_lpBlur[11];
- m_texcode [ cd.RegisterIndex ] = TEX_BLUR6;
- if (!bWrapFilterSpecified) {
- m_texture_bindings[ cd.RegisterIndex ].bWrap = false;
- m_texture_bindings[ cd.RegisterIndex ].bBilinear = true;
- }
- }
- #endif
- else
- {
- m_texcode[ cd.RegisterIndex ] = TEX_DISK;
-
- if (!wcsncmp(L"rand", szRootName, 4) &&
- IsNumericChar(szRootName[4]) &&
- IsNumericChar(szRootName[5]) &&
- (szRootName[6]==0 || szRootName[6]=='_') )
- {
- int rand_slot = -1;
-
-
- wchar_t prefix[MAX_PATH];
- if (szRootName[6]==L'_')
- lstrcpyW(prefix, &szRootName[7]);
- else
- prefix[0] = 0;
- szRootName[6] = 0;
- swscanf(&szRootName[4], L"%d", &rand_slot);
- if (rand_slot >= 0 && rand_slot <= 15)
- {
- if (!PickRandomTexture(prefix, szRootName))
- {
- if (prefix[0])
- swprintf(szRootName, L"[rand%02d] %s*", rand_slot, prefix);
- else
- swprintf(szRootName, L"[rand%02d] *", rand_slot);
- }
- else
- {
-
- wchar_t *p = wcsrchr(szRootName, L'.');
- if (p)
- *p = 0;
- }
- assert(RandTexName[rand_slot].GetLength() == 0);
- RandTexName[rand_slot] = szRootName;
- }
- }
-
-
-
- int N = g_plugin.m_textures.size();
- for (int n=0; n<N; n++) {
- if (!wcscmp(g_plugin.m_textures[n].texname, szRootName))
- {
-
- m_texture_bindings[ cd.RegisterIndex ].texptr = g_plugin.m_textures[n].texptr;
-
- g_plugin.m_textures[n].nAge = g_plugin.m_nPresetsLoadedTotal;
- break;
- }
- }
-
- if (!m_texture_bindings[ cd.RegisterIndex ].texptr)
- {
- TexInfo x;
- wcsncpy(x.texname, szRootName, 254);
- x.texptr = NULL;
-
-
-
- while (1)
- {
- int nTexturesCached = 0;
- int nBytesCached = 0;
- int N = g_plugin.m_textures.size();
- for (int i=0; i<N; i++)
- if (g_plugin.m_textures[i].bEvictable && g_plugin.m_textures[i].texptr)
- {
- nBytesCached += g_plugin.m_textures[i].nSizeInBytes;
- nTexturesCached++;
- }
- if ( nTexturesCached < g_plugin.m_nMaxImages &&
- nBytesCached < g_plugin.m_nMaxBytes )
- break;
-
- if (!g_plugin.EvictSomeTexture())
- break;
- }
-
- wchar_t szFilename[MAX_PATH];
- for (int z=0; z<sizeof(texture_exts)/sizeof(texture_exts[0]); z++)
- {
- swprintf(szFilename, L"%stextures\\%s.%s", g_plugin.m_szMilkdrop2Path, szRootName, texture_exts[z].c_str());
- if (GetFileAttributesW(szFilename) == 0xFFFFFFFF)
- {
-
- swprintf(szFilename, L"%s%s.%s", g_plugin.m_szPresetDir, szRootName, texture_exts[z].c_str());
- if (GetFileAttributesW(szFilename) == 0xFFFFFFFF)
- continue;
- }
- D3DXIMAGE_INFO desc;
-
-
- while (1)
- {
- HRESULT hr = pCreateTextureFromFileExW(g_plugin.GetDevice(),
- szFilename,
- D3DX_DEFAULT_NONPOW2,
- D3DX_DEFAULT_NONPOW2,
- D3DX_DEFAULT,
- 0,
- D3DFMT_UNKNOWN,
- D3DPOOL_DEFAULT,
- D3DX_DEFAULT,
- D3DX_DEFAULT,
- 0,
- &desc,
- NULL,
- (IDirect3DTexture9**)&x.texptr
- );
- if (hr==D3DERR_OUTOFVIDEOMEMORY || hr==E_OUTOFMEMORY)
- {
-
- if (g_plugin.EvictSomeTexture())
- continue;
- }
- if (hr==D3D_OK)
- {
- x.w = desc.Width;
- x.h = desc.Height;
- x.d = desc.Depth;
- x.bEvictable = true;
- x.nAge = g_plugin.m_nPresetsLoadedTotal;
- int nPixels = desc.Width*desc.Height*max(1,desc.Depth);
- int BitsPerPixel = GetDX9TexFormatBitsPerPixel(desc.Format);
- x.nSizeInBytes = nPixels*BitsPerPixel/8 + 16384;
- }
- break;
- }
- }
-
- if (!x.texptr)
- {
- wchar_t buf[2048], title[64];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_COULD_NOT_LOAD_TEXTURE_X), szRootName, szExtsWithSlashes);
- g_plugin.dumpmsg(buf);
- if (bHardErrors)
- MessageBoxW(g_plugin.GetPluginWindow(), buf, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- else {
- g_plugin.AddError(buf, 6.0f, ERR_PRESET, true);
- }
- return;
- }
- g_plugin.m_textures.push_back(x);
- m_texture_bindings[ cd.RegisterIndex ].texptr = x.texptr;
- }
- }
- }
- }
-
- for (i=0; i<d.Constants; i++)
- {
- D3DXHANDLE h = pCT->GetConstant(NULL, i);
- unsigned int count = 1;
- pCT->GetConstantDesc(h, &cd, &count);
- if (cd.RegisterSet == D3DXRS_FLOAT4)
- {
- if (cd.Class == D3DXPC_MATRIX_COLUMNS)
- {
- if (!strcmp(cd.Name, "rot_s1" )) rot_mat[0] = h;
- else if (!strcmp(cd.Name, "rot_s2" )) rot_mat[1] = h;
- else if (!strcmp(cd.Name, "rot_s3" )) rot_mat[2] = h;
- else if (!strcmp(cd.Name, "rot_s4" )) rot_mat[3] = h;
- else if (!strcmp(cd.Name, "rot_d1" )) rot_mat[4] = h;
- else if (!strcmp(cd.Name, "rot_d2" )) rot_mat[5] = h;
- else if (!strcmp(cd.Name, "rot_d3" )) rot_mat[6] = h;
- else if (!strcmp(cd.Name, "rot_d4" )) rot_mat[7] = h;
- else if (!strcmp(cd.Name, "rot_f1" )) rot_mat[8] = h;
- else if (!strcmp(cd.Name, "rot_f2" )) rot_mat[9] = h;
- else if (!strcmp(cd.Name, "rot_f3" )) rot_mat[10] = h;
- else if (!strcmp(cd.Name, "rot_f4" )) rot_mat[11] = h;
- else if (!strcmp(cd.Name, "rot_vf1")) rot_mat[12] = h;
- else if (!strcmp(cd.Name, "rot_vf2")) rot_mat[13] = h;
- else if (!strcmp(cd.Name, "rot_vf3")) rot_mat[14] = h;
- else if (!strcmp(cd.Name, "rot_vf4")) rot_mat[15] = h;
- else if (!strcmp(cd.Name, "rot_uf1")) rot_mat[16] = h;
- else if (!strcmp(cd.Name, "rot_uf2")) rot_mat[17] = h;
- else if (!strcmp(cd.Name, "rot_uf3")) rot_mat[18] = h;
- else if (!strcmp(cd.Name, "rot_uf4")) rot_mat[19] = h;
- else if (!strcmp(cd.Name, "rot_rand1")) rot_mat[20] = h;
- else if (!strcmp(cd.Name, "rot_rand2")) rot_mat[21] = h;
- else if (!strcmp(cd.Name, "rot_rand3")) rot_mat[22] = h;
- else if (!strcmp(cd.Name, "rot_rand4")) rot_mat[23] = h;
- }
- else if (cd.Class == D3DXPC_VECTOR)
- {
- if (!strcmp(cd.Name, "rand_frame")) rand_frame = h;
- else if (!strcmp(cd.Name, "rand_preset")) rand_preset = h;
- else if (!strncmp(cd.Name, "texsize_", 8))
- {
-
- wchar_t szRootName[MAX_PATH];
- if (!strncmp(cd.Name, "texsize_", 8))
- lstrcpyW(szRootName, AutoWide(&cd.Name[8]));
- else
- lstrcpyW(szRootName, AutoWide(cd.Name));
-
-
- if (!wcsncmp(L"rand", szRootName, 4) &&
- IsNumericChar(szRootName[4]) &&
- IsNumericChar(szRootName[5]) &&
- (szRootName[6]==0 || szRootName[6]==L'_') )
- {
- int rand_slot = -1;
-
-
- if (szRootName[6]==L'_')
- szRootName[6] = 0;
- swscanf(&szRootName[4], L"%d", &rand_slot);
- if (rand_slot >= 0 && rand_slot <= 15)
- if (RandTexName[rand_slot].GetLength() > 0)
- lstrcpyW(szRootName, RandTexName[rand_slot].c_str());
- }
-
- bool bTexFound = false;
- int N = g_plugin.m_textures.size();
- for (int n=0; n<N; n++) {
- if (!wcscmp(g_plugin.m_textures[n].texname, szRootName))
- {
-
- TexSizeParamInfo y;
- y.texname = szRootName;
- y.texsize_param = h;
- y.w = g_plugin.m_textures[n].w;
- y.h = g_plugin.m_textures[n].h;
- texsize_params.push_back(y);
-
- bTexFound = true;
- break;
- }
- }
- if (!bTexFound)
- {
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_UNABLE_TO_RESOLVE_TEXSIZE_FOR_A_TEXTURE_NOT_IN_USE), cd.Name);
- g_plugin.AddError(buf, 6.0f, ERR_PRESET, true);
- }
- }
- else if (cd.Name[0] == '_' && cd.Name[1] == 'c')
- {
- int z;
- if (sscanf(&cd.Name[2], "%d", &z)==1)
- if (z >= 0 && z < sizeof(const_handles)/sizeof(const_handles[0]))
- const_handles[z] = h;
- }
- else if (cd.Name[0] == '_' && cd.Name[1] == 'q')
- {
- int z = cd.Name[2] - 'a';
- if (z >= 0 && z < sizeof(q_const_handles)/sizeof(q_const_handles[0]))
- q_const_handles[z] = h;
- }
- }
- }
- }
- }
- bool CPlugin::RecompileVShader(const char* szShadersText, VShaderInfo *si, int shaderType, bool bHardErrors)
- {
- SafeRelease(si->ptr);
- ZeroMemory(si, sizeof(VShaderInfo));
-
-
- if (!LoadShaderFromMemory( szShadersText, "VS", "vs_1_1", &si->CT, (void**)&si->ptr, shaderType, bHardErrors && (GetScreenMode()==WINDOWED)))
- return false;
-
-
- si->params.CacheParams(si->CT, bHardErrors);
- return true;
- }
- bool CPlugin::RecompilePShader(const char* szShadersText, PShaderInfo *si, int shaderType, bool bHardErrors, int PSVersion)
- {
- assert(m_nMaxPSVersion > 0);
- SafeRelease(si->ptr);
- ZeroMemory(si, sizeof(PShaderInfo));
-
-
-
-
- char ver[16];
- lstrcpy(ver, "ps_0_0");
- switch(PSVersion) {
- case MD2_PS_NONE:
-
-
-
-
- lstrcpy(ver, "ps_2_0");
- break;
- case MD2_PS_2_0: lstrcpy(ver, "ps_2_0"); break;
- case MD2_PS_2_X: lstrcpy(ver, "ps_2_a"); break;
- case MD2_PS_3_0: lstrcpy(ver, "ps_3_0"); break;
- case MD2_PS_4_0: lstrcpy(ver, "ps_4_0"); break;
- default: assert(0); break;
- }
- if (!LoadShaderFromMemory( szShadersText, "PS", ver, &si->CT, (void**)&si->ptr, shaderType, bHardErrors && (GetScreenMode()==WINDOWED)))
- return false;
-
-
- si->params.CacheParams(si->CT, bHardErrors);
- return true;
- }
- bool CPlugin::LoadShaders(PShaderSet* sh, CState* pState, bool bTick)
- {
- if (m_nMaxPSVersion <= 0)
- return true;
-
-
- if (!sh->warp.ptr && pState->m_nWarpPSVersion > 0)
- {
- bool bOK = RecompilePShader(pState->m_szWarpShadersText, &sh->warp, SHADER_WARP, false, pState->m_nWarpPSVersion);
- if (!bOK)
- {
-
- m_fallbackShaders_ps.warp.ptr->AddRef();
- m_fallbackShaders_ps.warp.CT->AddRef();
- memcpy(&sh->warp, &m_fallbackShaders_ps.warp, sizeof(PShaderInfo));
-
-
- }
- if (bTick)
- return true;
- }
- if (!sh->comp.ptr && pState->m_nCompPSVersion > 0)
- {
- bool bOK = RecompilePShader(pState->m_szCompShadersText, &sh->comp, SHADER_COMP, false, pState->m_nCompPSVersion);
- if (!bOK)
- {
-
- m_fallbackShaders_ps.comp.ptr->AddRef();
- m_fallbackShaders_ps.comp.CT->AddRef();
- memcpy(&sh->comp, &m_fallbackShaders_ps.comp, sizeof(PShaderInfo));
-
-
- }
- }
- return true;
- }
- bool CPlugin::LoadShaderFromMemory( const char* szOrigShaderText, char* szFn, char* szProfile,
- LPD3DXCONSTANTTABLE* ppConstTable, void** ppShader, int shaderType, bool bHardErrors )
- {
- const char szWarpDefines[] = "#define rad _rad_ang.x\n"
- "#define ang _rad_ang.y\n"
- "#define uv _uv.xy\n"
- "#define uv_orig _uv.zw\n";
- const char szCompDefines[] = "#define rad _rad_ang.x\n"
- "#define ang _rad_ang.y\n"
- "#define uv _uv.xy\n"
- "#define uv_orig _uv.xy\n"
- "#define hue_shader _vDiffuse.xyz\n";
- const char szWarpParams[] = "float4 _vDiffuse : COLOR, float4 _uv : TEXCOORD0, float2 _rad_ang : TEXCOORD1, out float4 _return_value : COLOR0";
- const char szCompParams[] = "float4 _vDiffuse : COLOR, float2 _uv : TEXCOORD0, float2 _rad_ang : TEXCOORD1, out float4 _return_value : COLOR0";
- const char szFirstLine[] = " float3 ret = 0;";
- const char szLastLine[] = " _return_value = float4(ret.xyz, _vDiffuse.w);";
- char szWhichShader[64];
- switch(shaderType)
- {
- case SHADER_WARP: lstrcpy(szWhichShader, "warp"); break;
- case SHADER_COMP: lstrcpy(szWhichShader, "composite"); break;
- case SHADER_BLUR: lstrcpy(szWhichShader, "blur"); break;
- case SHADER_OTHER: lstrcpy(szWhichShader, "(other)"); break;
- default: lstrcpy(szWhichShader, "(unknown)"); break;
- }
- LPD3DXBUFFER pShaderByteCode;
- wchar_t title[64];
-
- *ppShader = NULL;
- *ppConstTable = NULL;
- char szShaderText[128000];
- char temp[128000];
- int writePos = 0;
-
- lstrcpy(&szShaderText[writePos], m_szShaderIncludeText);
- writePos += m_nShaderIncludeTextLen;
-
- if (shaderType == SHADER_WARP && szProfile[0]=='p')
- {
- lstrcpy(&szShaderText[writePos], szWarpDefines);
- writePos += lstrlen(szWarpDefines);
- }
- else if (shaderType == SHADER_COMP && szProfile[0]=='p')
- {
- lstrcpy(&szShaderText[writePos], szCompDefines);
- writePos += lstrlen(szCompDefines);
- }
-
-
- int shaderStartPos = writePos;
- {
- const char *s = szOrigShaderText;
- char *d = &szShaderText[writePos];
- while (*s)
- {
- if (*s == LINEFEED_CONTROL_CHAR)
- {
- *d++ = 13; writePos++;
- *d++ = 10; writePos++;
- }
- else
- {
- *d++ = *s; writePos++;
- }
- s++;
- }
- *d = 0; writePos++;
- }
-
-
- StripComments(&szShaderText[shaderStartPos]);
-
-
-
-
-
-
-
-
-
-
-
-
- if ((shaderType == SHADER_WARP || shaderType == SHADER_COMP) && szProfile[0]=='p')
- {
- char* p = &szShaderText[shaderStartPos];
-
-
- while (*p && strncmp(p, "shader_body", 11))
- p++;
- if (p)
- {
- for (int i=0; i<11; i++)
- *p++ = ' ';
- }
- if (p)
- {
-
- lstrcpy(temp, p);
- const char *params = (shaderType==SHADER_WARP) ? szWarpParams : szCompParams;
- sprintf(p, "void %s( %s )\n", szFn, params);
- p += lstrlen(p);
- lstrcpy(p, temp);
-
- p = strchr(p, '{');
- if (p)
- {
-
- p++;
-
- lstrcpy(temp, p);
- sprintf(p, "%s\n", szFirstLine);
- p += lstrlen(p);
- lstrcpy(p, temp);
-
- p = strrchr(p, '}');
-
- if (p)
- sprintf(p, " %s\n}\n", szLastLine);
- }
- }
- if (!p)
- {
- wchar_t temp[512];
- swprintf(temp, WASABI_API_LNGSTRINGW(IDS_ERROR_PARSING_X_X_SHADER), szProfile, szWhichShader);
- dumpmsg(temp);
- AddError(temp, 8.0f, ERR_PRESET, true);
- return false;
- }
- }
-
-
- bool failed=false;
- int len = lstrlen(szShaderText);
- if (D3D_OK != pCompileShader(
- szShaderText,
- len,
- NULL,
- NULL,
- szFn,
- szProfile,
- m_dwShaderFlags,
- &pShaderByteCode,
- &m_pShaderCompileErrors,
- ppConstTable
- ))
- {
- failed=true;
- }
-
- if (failed && !strcmp(szProfile, "ps_2_a"))
- {
- SafeRelease(m_pShaderCompileErrors);
- if (D3D_OK == pCompileShader(szShaderText, len, NULL, NULL, szFn,
- "ps_2_b", m_dwShaderFlags, &pShaderByteCode, &m_pShaderCompileErrors, ppConstTable))
- {
- failed=false;
- }
- }
- if (failed)
- {
- wchar_t temp[1024];
- swprintf(temp, WASABI_API_LNGSTRINGW(IDS_ERROR_COMPILING_X_X_SHADER), szProfile, szWhichShader);
- if (m_pShaderCompileErrors && m_pShaderCompileErrors->GetBufferSize() < sizeof(temp) - 256)
- {
- lstrcatW(temp, L"\n\n");
- lstrcatW(temp, AutoWide((char*)m_pShaderCompileErrors->GetBufferPointer()));
- }
- SafeRelease(m_pShaderCompileErrors);
- dumpmsg(temp);
- if (bHardErrors)
- MessageBoxW(GetPluginWindow(), temp, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- else {
- AddError(temp, 8.0f, ERR_PRESET, true);
- }
- return false;
- }
- HRESULT hr = 1;
- if (szProfile[0] == 'v')
- {
- hr = GetDevice()->CreateVertexShader((const unsigned long *)(pShaderByteCode->GetBufferPointer()), (IDirect3DVertexShader9**)ppShader);
- }
- else if (szProfile[0] == 'p')
- {
- hr = GetDevice()->CreatePixelShader((const unsigned long *)(pShaderByteCode->GetBufferPointer()), (IDirect3DPixelShader9**)ppShader);
- }
- if (hr != D3D_OK)
- {
- wchar_t temp[512];
- WASABI_API_LNGSTRINGW_BUF(IDS_ERROR_CREATING_SHADER,temp,sizeof(temp));
- dumpmsg(temp);
- if (bHardErrors)
- MessageBoxW(GetPluginWindow(), temp, WASABI_API_LNGSTRINGW_BUF(IDS_MILKDROP_ERROR,title,64), MB_OK|MB_SETFOREGROUND|MB_TOPMOST );
- else {
- AddError(temp, 6.0f, ERR_PRESET, true);
- }
- return false;
- }
- pShaderByteCode->Release();
- return true;
- }
- void CPlugin::CleanUpMyDX9Stuff(int final_cleanup)
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if (m_nLoadingPreset != 0) {
-
- m_nLoadingPreset = 8;
- LoadPresetTick();
- }
-
- m_pState->m_bBlending = false;
- for ( TexInfo &l_texture : m_textures )
- {
- if ( l_texture.texptr )
- {
-
- for ( CShaderParams *l_shader_param : global_CShaderParams_master_list )
- l_shader_param->OnTextureEvict( l_texture.texptr );
- SafeRelease( l_texture.texptr );
- }
- }
- m_textures.clear();
-
- #if (NUM_BLUR_TEX>0)
- for (int i=0; i<NUM_BLUR_TEX; i++)
- m_lpBlur[i] = NULL;
- #endif
-
-
- SafeRelease(m_pSpriteVertDecl);
- SafeRelease(m_pWfVertDecl);
- SafeRelease(m_pMyVertDecl);
- m_shaders.comp.Clear();
- m_shaders.warp.Clear();
- m_OldShaders.comp.Clear();
- m_OldShaders.warp.Clear();
- m_NewShaders.comp.Clear();
- m_NewShaders.warp.Clear();
- m_fallbackShaders_vs.comp.Clear();
- m_fallbackShaders_ps.comp.Clear();
- m_fallbackShaders_vs.warp.Clear();
- m_fallbackShaders_ps.warp.Clear();
- m_BlurShaders[0].vs.Clear();
- m_BlurShaders[0].ps.Clear();
- m_BlurShaders[1].vs.Clear();
- m_BlurShaders[1].ps.Clear();
-
- SafeRelease( m_pShaderCompileErrors );
-
-
-
- SafeRelease(m_lpVS[0]);
- SafeRelease(m_lpVS[1]);
- SafeRelease(m_lpDDSTitle);
- SafeRelease(m_d3dx_title_font_doublesize);
-
- if (m_gdi_title_font_doublesize)
- {
- DeleteObject(m_gdi_title_font_doublesize);
- m_gdi_title_font_doublesize = NULL;
- }
- m_texmgr.Finish();
- if (m_verts != NULL)
- {
- delete m_verts;
- m_verts = NULL;
- }
- if (m_verts_temp != NULL)
- {
- delete m_verts_temp;
- m_verts_temp = NULL;
- }
- if (m_vertinfo != NULL)
- {
- delete m_vertinfo;
- m_vertinfo = NULL;
- }
- if (m_indices_list != NULL)
- {
- delete m_indices_list;
- m_indices_list = NULL;
- }
- if (m_indices_strip != NULL)
- {
- delete m_indices_strip;
- m_indices_strip = NULL;
- }
- ClearErrors();
-
-
-
-
- WritePrivateProfileIntW(m_bPresetLockedByUser,L"bPresetLockOnAtStartup", GetConfigIniFile(),L"settings");
- }
- void CPlugin::MyRenderFn(int redraw)
- {
- EnterCriticalSection(&g_cs);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- if (!redraw)
- {
- float dt = GetTime() - m_prev_time;
- m_prev_time = GetTime();
- m_bPresetLockedByCode = (m_UI_mode != UI_REGULAR);
- if (m_bPresetLockedByUser || m_bPresetLockedByCode)
- {
-
-
-
-
-
- m_fPresetStartTime = GetTime();
- m_fNextPresetTime = -1.0f;
- }
-
-
- }
-
-
- if (GetFrame()==0)
- {
-
-
-
- SetScrollLock(m_bPresetLockOnAtStartup, m_bPreventScollLockHandling);
-
-
-
-
- }
- else
- {
- m_bHadFocus = m_bHasFocus;
- HWND winamp = GetWinampWindow();
- HWND plugin = GetPluginWindow();
- HWND focus = GetFocus();
- HWND cur = plugin;
- m_bHasFocus = false;
- do
- {
- m_bHasFocus = (focus == cur);
- if (m_bHasFocus)
- break;
- cur = GetParent(cur);
- }
- while (cur != NULL && cur != winamp);
- if (m_hTextWnd && focus==m_hTextWnd)
- m_bHasFocus = 1;
- if (GetFocus()==NULL)
- m_bHasFocus = 0;
- ;
-
-
-
-
- if (m_bHadFocus==1 && m_bHasFocus==0)
- {
-
- SetScrollLock(m_bOrigScrollLockState, m_bPreventScollLockHandling);
- }
- else if (m_bHadFocus==0 && m_bHasFocus==1)
- {
- m_bOrigScrollLockState = GetKeyState(VK_SCROLL) & 1;
- SetScrollLock(m_bPresetLockedByUser, m_bPreventScollLockHandling);
- }
- }
- if (!redraw)
- {
- GetWinampSongTitle(GetWinampWindow(), m_szSongTitle, sizeof(m_szSongTitle)-1);
- if (wcscmp(m_szSongTitle, m_szSongTitlePrev))
- {
- lstrcpynW(m_szSongTitlePrev, m_szSongTitle, 512);
- if (m_bSongTitleAnims)
- LaunchSongTitleAnim();
- }
- }
-
-
-
-
-
-
-
-
-
-
- PrepareFor2DDrawing(GetDevice());
- if (!redraw)
- DoCustomSoundAnalysis();
- RenderFrame(redraw);
-
- if (!redraw)
- {
- m_nFramesSinceResize++;
- if (m_nLoadingPreset > 0)
- {
- LoadPresetTick();
- }
- }
- LeaveCriticalSection(&g_cs);
- }
- void CPlugin::DrawTooltip(wchar_t* str, int xR, int yB)
- {
-
-
-
-
-
-
- RECT r, r2;
- SetRect(&r, 0, 0, xR-TEXT_MARGIN*2, 2048);
- m_text.DrawTextW(GetFont(TOOLTIP_FONT), str, -1, &r, DT_CALCRECT, 0xFFFFFFFF, false);
- r2.bottom = yB - TEXT_MARGIN;
- r2.right = xR - TEXT_MARGIN;
- r2.left = r2.right - (r.right-r.left);
- r2.top = r2.bottom - (r.bottom-r.top);
- RECT r3 = r2; r3.left -= 4; r3.top -= 2; r3.right += 2; r3.bottom += 2;
- DrawDarkTranslucentBox(&r3);
- m_text.DrawTextW(GetFont(TOOLTIP_FONT), str, -1, &r2, 0, 0xFFFFFFFF, false);
- }
- #define MTO_UPPER_RIGHT 0
- #define MTO_UPPER_LEFT 1
- #define MTO_LOWER_RIGHT 2
- #define MTO_LOWER_LEFT 3
- #define SelectFont(n) { \
- pFont = GetFont(n); \
- h = GetFontHeight(n); \
- }
- #define MyTextOut_BGCOLOR(str, corner, bDarkBox, boxColor) { \
- SetRect(&r, 0, 0, xR-xL, 2048); \
- m_text.DrawTextW(pFont, str, -1, &r, DT_NOPREFIX | ((corner == MTO_UPPER_RIGHT)?0:DT_SINGLELINE) | DT_WORD_ELLIPSIS | DT_CALCRECT | ((corner == MTO_UPPER_RIGHT) ? DT_RIGHT : 0), 0xFFFFFFFF, false, boxColor); \
- int w = r.right - r.left; \
- if (corner == MTO_UPPER_LEFT ) SetRect(&r, xL, *upper_left_corner_y, xL+w, *upper_left_corner_y + h); \
- else if (corner == MTO_UPPER_RIGHT) SetRect(&r, xR-w, *upper_right_corner_y, xR, *upper_right_corner_y + h); \
- else if (corner == MTO_LOWER_LEFT ) SetRect(&r, xL, *lower_left_corner_y - h, xL+w, *lower_left_corner_y); \
- else if (corner == MTO_LOWER_RIGHT) SetRect(&r, xR-w, *lower_right_corner_y - h, xR, *lower_right_corner_y); \
- m_text.DrawTextW(pFont, str, -1, &r, DT_NOPREFIX | ((corner == MTO_UPPER_RIGHT)?0:DT_SINGLELINE) | DT_WORD_ELLIPSIS | ((corner == MTO_UPPER_RIGHT) ? DT_RIGHT: 0), 0xFFFFFFFF, bDarkBox, boxColor); \
- if (corner == MTO_UPPER_LEFT ) *upper_left_corner_y += h; \
- else if (corner == MTO_UPPER_RIGHT) *upper_right_corner_y += h; \
- else if (corner == MTO_LOWER_LEFT ) *lower_left_corner_y -= h; \
- else if (corner == MTO_LOWER_RIGHT) *lower_right_corner_y -= h; \
- }
- #define MyTextOut(str, corner, bDarkBox) MyTextOut_BGCOLOR(str, corner, bDarkBox, 0xFF000000)
- #define MyTextOut_Shadow(str, corner) { \
- \
- SetRect(&r, 0, 0, xR-xL, 2048); \
- m_text.DrawTextW(pFont, (wchar_t*)str, -1, &r, DT_NOPREFIX | DT_SINGLELINE | DT_WORD_ELLIPSIS | DT_CALCRECT, 0xFFFFFFFF, false, 0xFF000000); \
- int w = r.right - r.left; \
- \
- if (corner == MTO_UPPER_LEFT ) SetRect(&r, xL, *upper_left_corner_y, xL+w, *upper_left_corner_y + h); \
- else if (corner == MTO_UPPER_RIGHT) SetRect(&r, xR-w, *upper_right_corner_y, xR, *upper_right_corner_y + h); \
- else if (corner == MTO_LOWER_LEFT ) SetRect(&r, xL, *lower_left_corner_y - h, xL+w, *lower_left_corner_y); \
- else if (corner == MTO_LOWER_RIGHT) SetRect(&r, xR-w, *lower_right_corner_y - h, xR, *lower_right_corner_y); \
- r.top += 1; r.left += 1; \
- m_text.DrawTextW(pFont, (wchar_t*)str, -1, &r, DT_NOPREFIX | DT_SINGLELINE | DT_WORD_ELLIPSIS, 0xFF000000, false, 0xFF000000); \
- \
- r.top -= 1; r.left -= 1; \
- m_text.DrawTextW(pFont, (wchar_t*)str, -1, &r, DT_NOPREFIX | DT_SINGLELINE | DT_WORD_ELLIPSIS, 0xFFFFFFFF, false, 0xFF000000); \
- if (corner == MTO_UPPER_LEFT ) *upper_left_corner_y += h; \
- else if (corner == MTO_UPPER_RIGHT) *upper_right_corner_y += h; \
- else if (corner == MTO_LOWER_LEFT ) *lower_left_corner_y -= h; \
- else if (corner == MTO_LOWER_RIGHT) *lower_right_corner_y -= h; \
- }
- void CPlugin::OnAltK()
- {
- AddError(WASABI_API_LNGSTRINGW(IDS_PLEASE_EXIT_VIS_BEFORE_RUNNING_CONFIG_PANEL), 3.0f, ERR_NOTIFY, true);
- }
- void CPlugin::AddError(wchar_t* szMsg, float fDuration, int category, bool bBold)
- {
- if (category == ERR_NOTIFY)
- ClearErrors(category);
- assert(category != ERR_ALL);
- ErrorMsg x;
- x.msg = szMsg;
- x.birthTime = GetTime();
- x.expireTime = GetTime() + fDuration;
- x.category = category;
- x.bBold = bBold;
- m_errors.push_back(x);
- }
- void CPlugin::ClearErrors(int category)
- {
- int N = m_errors.size();
- for (int i = 0; i < N; i++)
- {
- if (category == ERR_ALL || m_errors[i].category == category)
- {
- m_errors.erase(m_errors.begin() + i);
- i--;
- N--;
- }
- }
- }
- void CPlugin::MyRenderUI(
- int *upper_left_corner_y,
- int *upper_right_corner_y,
- int *lower_left_corner_y,
- int *lower_right_corner_y,
- int xL,
- int xR
- )
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- RECT r = {0};
- wchar_t buf[512] = {0};
- LPD3DXFONT pFont = GetFont(DECORATIVE_FONT);
- int h = GetFontHeight(DECORATIVE_FONT);
- if (!pFont)
- return;
- if (!GetFont(DECORATIVE_FONT))
- return;
-
-
- {
-
- if (m_bShowPresetInfo)
- {
- SelectFont(DECORATIVE_FONT);
- swprintf(buf, L"%s ", (m_nLoadingPreset != 0) ? m_pNewState->m_szDesc : m_pState->m_szDesc);
- MyTextOut_Shadow(buf, MTO_UPPER_RIGHT);
- }
-
- if (m_bShowRating || GetTime() < m_fShowRatingUntilThisTime)
- {
-
- SelectFont(DECORATIVE_FONT);
- swprintf(buf, L" %s: %d ", WASABI_API_LNGSTRINGW(IDS_RATING), (int)m_pState->m_fRating);
- if (!m_bEnableRating) lstrcatW(buf, WASABI_API_LNGSTRINGW(IDS_DISABLED));
- MyTextOut_Shadow(buf, MTO_UPPER_RIGHT);
- }
-
- if (m_bShowFPS)
- {
- SelectFont(DECORATIVE_FONT);
- swprintf(buf, L"%s: %4.2f ", WASABI_API_LNGSTRINGW(IDS_FPS), GetFps());
- MyTextOut_Shadow(buf, MTO_UPPER_RIGHT);
- }
-
- if (m_bShowDebugInfo)
- {
- SelectFont(SIMPLE_FONT);
- swprintf(buf, L" %s: %6.4f ", WASABI_API_LNGSTRINGW(IDS_PF_MONITOR), (float)(*m_pState->var_pf_monitor));
- MyTextOut_Shadow(buf, MTO_UPPER_RIGHT);
- }
-
- }
-
- {
-
- if (m_waitstring.bActive && m_bShowMenuToolTips && m_waitstring.szToolTip[0])
- {
- DrawTooltip(m_waitstring.szToolTip, xR, *lower_right_corner_y);
- }
- }
-
- {
- wchar_t buf2[512] = {0};
- wchar_t buf3[512+1] = {0};
-
- if (m_bShowSongTitle)
- {
- wchar_t buf4[512] = {0};
- SelectFont(DECORATIVE_FONT);
- GetWinampSongTitle(GetWinampWindow(), buf4, sizeof(buf4));
- MyTextOut_Shadow(buf4, MTO_LOWER_LEFT);
- }
-
- if (m_bShowSongTime || m_bShowSongLen)
- {
- GetWinampSongPosAsText(GetWinampWindow(), buf);
- GetWinampSongLenAsText(GetWinampWindow(), buf2);
- if (m_bShowSongTime && m_bShowSongLen)
- {
-
- if(buf[0])
- swprintf(buf3, L"%s / %s ", buf, buf2);
- else
- lstrcpynW(buf3, buf2, 512);
- }
- else if (m_bShowSongTime)
- lstrcpynW(buf3, buf, 512);
- else
- lstrcpynW(buf3, buf2, 512);
- SelectFont(DECORATIVE_FONT);
- MyTextOut_Shadow(buf3, MTO_LOWER_LEFT);
- }
- }
-
- {
- wchar_t buf[64000] = {0};
-
- char bufA[64000] = {0};
- SelectFont(SIMPLE_FONT);
-
- if (m_waitstring.bActive)
- {
-
- MyTextOut(m_waitstring.szPrompt, MTO_UPPER_LEFT, true);
-
- bool bIsWarp = m_waitstring.bDisplayAsCode && (m_pCurMenu == &m_menuPreset) && !wcscmp(m_menuPreset.GetCurItem()->m_szName, L"[ edit warp shader ]");
- bool bIsComp = m_waitstring.bDisplayAsCode && (m_pCurMenu == &m_menuPreset) && !wcscmp(m_menuPreset.GetCurItem()->m_szName, L"[ edit composite shader ]");
- if (bIsWarp || bIsComp)
- {
- if (m_bShowShaderHelp) {
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_PRESS_F9_TO_HIDE_SHADER_QREF), MTO_UPPER_LEFT, true);
- }
- else {
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_PRESS_F9_TO_SHOW_SHADER_QREF), MTO_UPPER_LEFT, true);
- }
- *upper_left_corner_y += h*2/3;
- if (m_bShowShaderHelp)
- {
-
- SetRect(&r, 0, 0, 2048, 2048);
- m_text.DrawTextW(pFont, WASABI_API_LNGSTRINGW(IDS_STRING615), -1, &r, DT_NOPREFIX | DT_SINGLELINE | DT_WORD_ELLIPSIS | DT_CALCRECT, 0xFFFFFFFF, false, 0xFF000000);
- RECT darkbox;
- SetRect(&darkbox, xL, *upper_left_corner_y-2, xL+r.right-r.left, *upper_left_corner_y + (r.bottom-r.top)*13 + 2);
- DrawDarkTranslucentBox(&darkbox);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING616), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING617), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING618), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING619), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING620), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING621), MTO_UPPER_LEFT, false);
- if (bIsWarp)
- {
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING622), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING623), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING624), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING625), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING626), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING627), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING628), MTO_UPPER_LEFT, false);
- }
- else if (bIsComp)
- {
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING629), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING630), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING631), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING632), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING633), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING634), MTO_UPPER_LEFT, false);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_STRING635), MTO_UPPER_LEFT, false);
- }
- *upper_left_corner_y += h*2/3;
- }
- }
- else if (m_UI_mode == UI_SAVEAS && (m_bWarpShaderLock || m_bCompShaderLock))
- {
- wchar_t buf[256] = {0};
- int shader_msg_id = IDS_COMPOSITE_SHADER_LOCKED;
- if (m_bWarpShaderLock && m_bCompShaderLock)
- shader_msg_id = IDS_WARP_AND_COMPOSITE_SHADERS_LOCKED;
- else if (m_bWarpShaderLock && !m_bCompShaderLock)
- shader_msg_id = IDS_WARP_SHADER_LOCKED;
- else
- shader_msg_id = IDS_COMPOSITE_SHADER_LOCKED;
- WASABI_API_LNGSTRINGW_BUF(shader_msg_id, buf, 256);
- MyTextOut_BGCOLOR(buf, MTO_UPPER_LEFT, true, 0xFF000000);
- *upper_left_corner_y += h*2/3;
- }
- else
- *upper_left_corner_y += h*2/3;
-
- int bBrackets = m_waitstring.nSelAnchorPos != -1 && m_waitstring.nSelAnchorPos != m_waitstring.nCursorPos;
- int bCursorBlink = ( !bBrackets &&
- ((int)(GetTime()*270.0f) % 100 > 50)
-
- );
- lstrcpyW(buf, m_waitstring.szText);
- lstrcpyA(bufA, (char*)m_waitstring.szText);
- int temp_cursor_pos = m_waitstring.nCursorPos;
- int temp_anchor_pos = m_waitstring.nSelAnchorPos;
- if (bBrackets)
- {
- if (m_waitstring.bDisplayAsCode)
- {
-
- int start = (temp_cursor_pos < temp_anchor_pos) ? temp_cursor_pos : temp_anchor_pos;
- int end = (temp_cursor_pos > temp_anchor_pos) ? temp_cursor_pos - 1 : temp_anchor_pos - 1;
- int len = lstrlenA(bufA);
- int i;
- for (i=len; i>end; i--)
- bufA[i+1] = bufA[i];
- bufA[end+1] = ']';
- len++;
- for (i=len; i>=start; i--)
- bufA[i+1] = bufA[i];
- bufA[start] = '[';
- len++;
- }
- else
- {
-
- int start = (temp_cursor_pos < temp_anchor_pos) ? temp_cursor_pos : temp_anchor_pos;
- int end = (temp_cursor_pos > temp_anchor_pos) ? temp_cursor_pos - 1 : temp_anchor_pos - 1;
- int len = lstrlenW(buf);
- int i;
- for (i=len; i>end; i--)
- buf[i+1] = buf[i];
- buf[end+1] = L']';
- len++;
- for (i=len; i>=start; i--)
- buf[i+1] = buf[i];
- buf[start] = L'[';
- len++;
- }
- }
- else
- {
-
- if (m_waitstring.bDisplayAsCode)
- {
- if (bCursorBlink)
- {
- if (bufA[temp_cursor_pos] == 0)
- {
- bufA[temp_cursor_pos] = '_';
- bufA[temp_cursor_pos+1] = 0;
- }
- else if (bufA[temp_cursor_pos] == LINEFEED_CONTROL_CHAR)
- {
- for (int i=strlen(bufA); i>=temp_cursor_pos; i--)
- bufA[i+1] = bufA[i];
- bufA[temp_cursor_pos] = '_';
- }
- else if (bufA[temp_cursor_pos] == '_')
- bufA[temp_cursor_pos] = ' ';
- else
- bufA[temp_cursor_pos] = '_';
- }
- else
- {
- if (bufA[temp_cursor_pos] == 0)
- {
- bufA[temp_cursor_pos] = ' ';
- bufA[temp_cursor_pos+1] = 0;
- }
- else if (bufA[temp_cursor_pos] == LINEFEED_CONTROL_CHAR)
- {
- for (int i=strlen(bufA); i>=temp_cursor_pos; i--)
- bufA[i+1] = bufA[i];
- bufA[temp_cursor_pos] = ' ';
- }
-
-
-
-
- }
- }
- else
- {
- if (bCursorBlink)
- {
- if (buf[temp_cursor_pos] == 0)
- {
- buf[temp_cursor_pos] = L'_';
- buf[temp_cursor_pos+1] = 0;
- }
- else if (buf[temp_cursor_pos] == LINEFEED_CONTROL_CHAR)
- {
- for (int i=wcslen(buf); i>=temp_cursor_pos; i--)
- buf[i+1] = buf[i];
- buf[temp_cursor_pos] = L'_';
- }
- else if (buf[temp_cursor_pos] == L'_')
- buf[temp_cursor_pos] = L' ';
- else
- buf[temp_cursor_pos] = L'_';
- }
- else
- {
- if (buf[temp_cursor_pos] == 0)
- {
- buf[temp_cursor_pos] = L' ';
- buf[temp_cursor_pos+1] = 0;
- }
- else if (buf[temp_cursor_pos] == LINEFEED_CONTROL_CHAR)
- {
- for (int i=wcslen(buf); i>=temp_cursor_pos; i--)
- buf[i+1] = buf[i];
- buf[temp_cursor_pos] = L' ';
- }
-
-
-
-
- }
- }
- }
- RECT rect = {0};
- SetRect(&rect, xL, *upper_left_corner_y, xR, *lower_left_corner_y);
- rect.top += PLAYLIST_INNER_MARGIN;
- rect.left += PLAYLIST_INNER_MARGIN;
- rect.right -= PLAYLIST_INNER_MARGIN;
- rect.bottom -= PLAYLIST_INNER_MARGIN;
-
- if (m_waitstring.bDisplayAsCode)
- {
- char buf2[8192] = {0};
- int top_of_page_pos = 0;
-
-
- {
- int start = 0;
- int pos = 0;
- int ypixels = 0;
- int page = 1;
- int exit_on_next_page = 0;
- RECT box = rect;
- box.right = box.left;
- box.bottom = box.top;
- while (bufA[pos] != 0)
- {
- start = pos;
- while (bufA[pos] != LINEFEED_CONTROL_CHAR && bufA[pos] != 0)
- pos++;
- char ch = bufA[pos];
- bufA[pos] = 0;
- sprintf(buf2, " %sX", &bufA[start]);
- RECT r2 = rect;
- r2.bottom = 4096;
- m_text.DrawTextA(GetFont(SIMPLE_FONT), buf2, -1, &r2, DT_CALCRECT , 0xFFFFFFFF, false);
- int h = r2.bottom-r2.top;
- ypixels += h;
- bufA[pos] = ch;
-
- if (start > m_waitstring.nCursorPos)
- exit_on_next_page = 1;
- if (ypixels > rect.bottom-rect.top)
- {
- if (exit_on_next_page)
- {
- bufA[start] = 0;
- break;
- }
- ypixels = h;
- top_of_page_pos = start;
- page++;
- box = rect;
- box.right = box.left;
- box.bottom = box.top;
- }
- box.bottom += h;
- box.right = max(box.right, box.left + r2.right-r2.left);
-
- if (bufA[pos]==0)
- break;
- pos++;
- }
-
- box.top -= PLAYLIST_INNER_MARGIN;
- box.left -= PLAYLIST_INNER_MARGIN;
- box.right += PLAYLIST_INNER_MARGIN;
- box.bottom += PLAYLIST_INNER_MARGIN;
- DrawDarkTranslucentBox(&box);
- *upper_left_corner_y += box.bottom - box.top + PLAYLIST_INNER_MARGIN*3;
- swprintf(m_waitstring.szToolTip, WASABI_API_LNGSTRINGW(IDS_PAGE_X), page);
- }
-
- {
- int start = top_of_page_pos;
- int pos = top_of_page_pos;
-
- while (bufA[pos] != 0)
- {
- while (bufA[pos] != LINEFEED_CONTROL_CHAR && bufA[pos] != 0)
- pos++;
- char ch = bufA[pos];
- bufA[pos] = 0;
- sprintf(buf2, " %s ", &bufA[start]);
- DWORD color = MENU_COLOR;
- if (m_waitstring.nCursorPos >= start && m_waitstring.nCursorPos <= pos)
- color = MENU_HILITE_COLOR;
- rect.top += m_text.DrawTextA(GetFont(SIMPLE_FONT), buf2, -1, &rect, 0, color, false);
- bufA[pos] = ch;
- if (rect.top > rect.bottom)
- break;
-
- if (bufA[pos] != 0) pos++;
- start = pos;
- }
- }
-
- }
- else
- {
- wchar_t buf2[8192] = {0};
-
- RECT box = rect;
- box.bottom = 4096;
- swprintf(buf2, L" %sX", buf);
- m_text.DrawTextW(GetFont(SIMPLE_FONT), buf2, -1, &box, DT_CALCRECT, MENU_COLOR, false );
-
- box.top -= PLAYLIST_INNER_MARGIN;
- box.left -= PLAYLIST_INNER_MARGIN;
- box.right += PLAYLIST_INNER_MARGIN;
- box.bottom += PLAYLIST_INNER_MARGIN;
- DrawDarkTranslucentBox(&box);
- *upper_left_corner_y += box.bottom - box.top + PLAYLIST_INNER_MARGIN*3;
- swprintf(buf2, L" %s ", buf);
- m_text.DrawTextW(GetFont(SIMPLE_FONT), buf2, -1, &rect, 0, MENU_COLOR, false );
- }
- }
- else if (m_UI_mode == UI_MENU)
- {
- assert(m_pCurMenu);
- SetRect(&r, xL, *upper_left_corner_y, xR, *lower_left_corner_y);
-
- RECT darkbox = {0};
- m_pCurMenu->DrawMenu(r, xR, *lower_right_corner_y, 1, &darkbox);
- *upper_left_corner_y += darkbox.bottom - darkbox.top + PLAYLIST_INNER_MARGIN*3;
- darkbox.right += PLAYLIST_INNER_MARGIN*2;
- darkbox.bottom += PLAYLIST_INNER_MARGIN*2;
- DrawDarkTranslucentBox(&darkbox);
- r.top += PLAYLIST_INNER_MARGIN;
- r.left += PLAYLIST_INNER_MARGIN;
- r.right += PLAYLIST_INNER_MARGIN;
- r.bottom += PLAYLIST_INNER_MARGIN;
- m_pCurMenu->DrawMenu(r, xR, *lower_right_corner_y);
- }
- else if (m_UI_mode == UI_UPGRADE_PIXEL_SHADER)
- {
- RECT rect = {0};
- SetRect(&rect, xL, *upper_left_corner_y, xR, *lower_left_corner_y);
-
- if (m_pState->m_nWarpPSVersion >= m_nMaxPSVersion &&
- m_pState->m_nCompPSVersion >= m_nMaxPSVersion)
- {
- assert(m_pState->m_nMaxPSVersion == m_nMaxPSVersion);
- wchar_t buf[1024] = {0};
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_PRESET_USES_HIGHEST_PIXEL_SHADER_VERSION), m_nMaxPSVersion);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), buf, -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESS_ESC_TO_RETURN), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- }
- else
- {
- if (m_pState->m_nMinPSVersion != m_pState->m_nMaxPSVersion)
- {
- switch(m_pState->m_nMinPSVersion)
- {
- case MD2_PS_NONE:
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESET_HAS_MIXED_VERSIONS_OF_SHADERS), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_UPGRADE_SHADERS_TO_USE_PS2), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- break;
- case MD2_PS_2_0:
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESET_HAS_MIXED_VERSIONS_OF_SHADERS), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_UPGRADE_SHADERS_TO_USE_PS2X), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- break;
- case MD2_PS_2_X:
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESET_HAS_MIXED_VERSIONS_OF_SHADERS), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_UPGRADE_SHADERS_TO_USE_PS3), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- break;
- case MD2_PS_3_0:
- assert(false);
- break;
- default:
- assert(0);
- break;
- }
- }
- else
- {
- switch(m_pState->m_nMinPSVersion)
- {
- case MD2_PS_NONE:
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESET_DOES_NOT_USE_PIXEL_SHADERS), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_UPGRADE_TO_USE_PS2), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_WARNING_OLD_GPU_MIGHT_NOT_WORK_WITH_PRESET), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- break;
- case MD2_PS_2_0:
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESET_CURRENTLY_USES_PS2), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_UPGRADE_TO_USE_PS2X), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_WARNING_OLD_GPU_MIGHT_NOT_WORK_WITH_PRESET), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- break;
- case MD2_PS_2_X:
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESET_CURRENTLY_USES_PS2X), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_UPGRADE_TO_USE_PS3), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_WARNING_OLD_GPU_MIGHT_NOT_WORK_WITH_PRESET), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- break;
- case MD2_PS_3_0:
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_PRESET_CURRENTLY_USES_PS3), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_UPGRADE_TO_USE_PS4), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_WARNING_OLD_GPU_MIGHT_NOT_WORK_WITH_PRESET), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- break;
- default:
- assert(0);
- break;
- }
- }
- }
- *upper_left_corner_y = rect.top;
- }
- else if (m_UI_mode == UI_LOAD_DEL)
- {
- RECT rect;
- SetRect(&rect, xL, *upper_left_corner_y, xR, *lower_left_corner_y);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_ARE_YOU_SURE_YOU_WANT_TO_DELETE_PRESET), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_PRESET_TO_DELETE), m_presets[m_nPresetListCurPos].szFilename.c_str());
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), buf, -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- *upper_left_corner_y = rect.top;
- }
- else if (m_UI_mode == UI_SAVE_OVERWRITE)
- {
- RECT rect;
- SetRect(&rect, xL, *upper_left_corner_y, xR, *lower_left_corner_y);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_FILE_ALREADY_EXISTS_OVERWRITE_IT), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_FILE_IN_QUESTION_X_MILK), m_waitstring.szText);
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), buf, -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, MENU_COLOR, true);
- if (m_bWarpShaderLock)
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_WARNING_DO_NOT_FORGET_WARP_SHADER_WAS_LOCKED), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, 0xFFFFFFFF, true, 0xFFCC0000);
- if (m_bCompShaderLock)
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), WASABI_API_LNGSTRINGW(IDS_WARNING_DO_NOT_FORGET_COMPOSITE_SHADER_WAS_LOCKED), -1, &rect, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX, 0xFFFFFFFF, true, 0xFFCC0000);
- *upper_left_corner_y = rect.top;
- }
- else if (m_UI_mode == UI_MASHUP)
- {
- if (m_nPresets-m_nDirs == 0)
- {
-
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_ERROR_NO_PRESET_FILE_FOUND_IN_X_MILK), m_szPresetDir);
- AddError(buf, 6.0f, ERR_MISC, true);
- m_UI_mode = UI_REGULAR;
- }
- else
- {
- UpdatePresetList();
-
- for (int mash=0; mash<MASH_SLOTS; mash++)
- {
-
- if (m_nMashPreset[mash] < m_nDirs)
- m_nMashPreset[mash] = m_nDirs;
- if (m_nMashPreset[mash] >= m_nPresets)
- m_nMashPreset[mash] = m_nPresets-1;
-
-
- if (m_nLastMashChangeFrame[mash]+MASH_APPLY_DELAY_FRAMES+1 == GetFrame())
- {
-
- DWORD ApplyFlags = 0;
- switch(mash)
- {
- case 0: ApplyFlags = STATE_GENERAL; break;
- case 1: ApplyFlags = STATE_MOTION; break;
- case 2: ApplyFlags = STATE_WAVE; break;
- case 3: ApplyFlags = STATE_WARP; break;
- case 4: ApplyFlags = STATE_COMP; break;
- }
- wchar_t szFile[MAX_PATH];
- swprintf(szFile, L"%s%s", m_szPresetDir, m_presets[m_nMashPreset[mash]].szFilename.c_str());
- m_pState->Import(szFile, GetTime(), m_pState, ApplyFlags);
- if (ApplyFlags & STATE_WARP)
- SafeRelease( m_shaders.warp.ptr );
- if (ApplyFlags & STATE_COMP)
- SafeRelease( m_shaders.comp.ptr );
- LoadShaders(&m_shaders, m_pState, false);
-
- SetMenusForPresetVersion( m_pState->m_nWarpPSVersion, m_pState->m_nCompPSVersion );
- }
- }
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_PRESET_MASH_UP_TEXT1), MTO_UPPER_LEFT, true);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_PRESET_MASH_UP_TEXT2), MTO_UPPER_LEFT, true);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_PRESET_MASH_UP_TEXT3), MTO_UPPER_LEFT, true);
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_PRESET_MASH_UP_TEXT4), MTO_UPPER_LEFT, true);
- *upper_left_corner_y += PLAYLIST_INNER_MARGIN;
- RECT rect;
- SetRect(&rect, xL, *upper_left_corner_y, xR, *lower_left_corner_y);
- rect.top += PLAYLIST_INNER_MARGIN;
- rect.left += PLAYLIST_INNER_MARGIN;
- rect.right -= PLAYLIST_INNER_MARGIN;
- rect.bottom -= PLAYLIST_INNER_MARGIN;
- int lines_available = (rect.bottom - rect.top - PLAYLIST_INNER_MARGIN*2) / GetFontHeight(SIMPLE_FONT);
- lines_available -= MASH_SLOTS;
- if (lines_available < 10)
- {
-
- rect.bottom = rect.top + GetFontHeight(SIMPLE_FONT)*10 + 1;
- lines_available = 10;
- }
- if (lines_available > 16)
- lines_available = 16;
-
- if (m_bUserPagedDown)
- {
- m_nMashPreset[m_nMashSlot] += lines_available;
- if (m_nMashPreset[m_nMashSlot] >= m_nPresets)
- m_nMashPreset[m_nMashSlot] = m_nPresets - 1;
- m_bUserPagedDown = false;
- }
- if (m_bUserPagedUp)
- {
- m_nMashPreset[m_nMashSlot] -= lines_available;
- if (m_nMashPreset[m_nMashSlot] < m_nDirs)
- m_nMashPreset[m_nMashSlot] = m_nDirs;
- m_bUserPagedUp = false;
- }
- int i;
- int first_line = m_nMashPreset[m_nMashSlot] - (m_nMashPreset[m_nMashSlot] % lines_available);
- int last_line = first_line + lines_available;
- wchar_t str[512], str2[512];
- if (last_line > m_nPresets)
- last_line = m_nPresets;
-
- if (m_bShowMenuToolTips)
- {
- wchar_t buf[256];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_PAGE_X_OF_X), m_nMashPreset[m_nMashSlot]/lines_available+1, (m_nPresets+lines_available-1)/lines_available);
- DrawTooltip(buf, xR, *lower_right_corner_y);
- }
- RECT orig_rect = rect;
- RECT box;
- box.top = rect.top;
- box.left = rect.left;
- box.right = rect.left;
- box.bottom = rect.top;
- int mashNames[MASH_SLOTS] = { IDS_MASHUP_GENERAL_POSTPROC,
- IDS_MASHUP_MOTION_EQUATIONS,
- IDS_MASHUP_WAVEFORMS_SHAPES,
- IDS_MASHUP_WARP_SHADER,
- IDS_MASHUP_COMP_SHADER,
- };
- int pass = 0;
- for (pass=0; pass<2; pass++)
- {
- box = orig_rect;
- int w = 0;
- int h = 0;
- int start_y = orig_rect.top;
- for (int mash=0; mash<MASH_SLOTS; mash++)
- {
- int idx = m_nMashPreset[mash];
-
- wchar_t buf[1024];
- swprintf(buf, L"%s%s", WASABI_API_LNGSTRINGW(mashNames[mash]), m_presets[idx].szFilename);
- RECT r2 = orig_rect;
- r2.top += h;
- h += m_text.DrawTextW(GetFont(SIMPLE_FONT), buf, -1, &r2, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX | (pass==0 ? DT_CALCRECT : 0), (mash==m_nMashSlot) ? PLAYLIST_COLOR_HILITE_TRACK : PLAYLIST_COLOR_NORMAL, false);
- w = max(w, r2.right - r2.left);
- }
- if (pass==0) {
- box.right = box.left + w;
- box.bottom = box.top + h;
- DrawDarkTranslucentBox(&box);
- }
- else
- orig_rect.top += h;
- }
- orig_rect.top += GetFontHeight(SIMPLE_FONT) + PLAYLIST_INNER_MARGIN;
- box = orig_rect;
- box.right = box.left;
- box.bottom = box.top;
-
- for (pass=0; pass<2; pass++)
- {
-
-
- rect = orig_rect;
- for (i=first_line; i<last_line; i++)
- {
-
-
- bool bIsDir = (m_presets[i].szFilename.c_str()[0] == '*');
- bool bIsRunning = false;
- bool bIsSelected = (i == m_nMashPreset[m_nMashSlot]);
-
- if (bIsDir)
- {
-
- if (wcscmp(m_presets[i].szFilename.c_str()+1, L"..")==0)
- swprintf(str2, L" [ %s ] (%s) ", m_presets[i].szFilename.c_str()+1, WASABI_API_LNGSTRINGW(IDS_PARENT_DIRECTORY));
- else
- swprintf(str2, L" [ %s ] ", m_presets[i].szFilename.c_str()+1);
- }
- else
- {
-
- lstrcpyW(str, m_presets[i].szFilename.c_str());
- RemoveExtension(str);
- swprintf(str2, L" %s ", str);
- if (wcscmp(m_presets[m_nMashPreset[m_nMashSlot]].szFilename.c_str(), str)==0)
- bIsRunning = true;
- }
-
- if (bIsRunning && m_bPresetLockedByUser)
- lstrcatW(str2, WASABI_API_LNGSTRINGW(IDS_LOCKED));
- DWORD color = bIsDir ? DIR_COLOR : PLAYLIST_COLOR_NORMAL;
- if (bIsRunning)
- color = bIsSelected ? PLAYLIST_COLOR_BOTH : PLAYLIST_COLOR_PLAYING_TRACK;
- else if (bIsSelected)
- color = PLAYLIST_COLOR_HILITE_TRACK;
- RECT r2 = rect;
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), str2, -1, &r2, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX | (pass==0 ? DT_CALCRECT : 0), color, false);
- if (pass==0)
- {
- box.right = max(box.right, box.left + r2.right-r2.left);
- box.bottom += r2.bottom-r2.top;
- }
- }
-
-
- if (pass==0)
- {
- box.top -= PLAYLIST_INNER_MARGIN;
- box.left -= PLAYLIST_INNER_MARGIN;
- box.right += PLAYLIST_INNER_MARGIN;
- box.bottom += PLAYLIST_INNER_MARGIN;
- DrawDarkTranslucentBox(&box);
- *upper_left_corner_y = box.bottom + PLAYLIST_INNER_MARGIN;
- }
- else
- orig_rect.top += box.bottom-box.top;
- }
- orig_rect.top += PLAYLIST_INNER_MARGIN;
- }
- }
- else if (m_UI_mode == UI_LOAD)
- {
- if (m_nPresets == 0)
- {
-
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_ERROR_NO_PRESET_FILE_FOUND_IN_X_MILK), m_szPresetDir);
- AddError(buf, 6.0f, ERR_MISC, true);
- m_UI_mode = UI_REGULAR;
- }
- else
- {
- MyTextOut(WASABI_API_LNGSTRINGW(IDS_LOAD_WHICH_PRESET_PLUS_COMMANDS), MTO_UPPER_LEFT, true);
- wchar_t buf[MAX_PATH+64];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_DIRECTORY_OF_X), m_szPresetDir);
- MyTextOut(buf, MTO_UPPER_LEFT, true);
- *upper_left_corner_y += h/2;
- RECT rect;
- SetRect(&rect, xL, *upper_left_corner_y, xR, *lower_left_corner_y);
- rect.top += PLAYLIST_INNER_MARGIN;
- rect.left += PLAYLIST_INNER_MARGIN;
- rect.right -= PLAYLIST_INNER_MARGIN;
- rect.bottom -= PLAYLIST_INNER_MARGIN;
- int lines_available = (rect.bottom - rect.top - PLAYLIST_INNER_MARGIN*2) / GetFontHeight(SIMPLE_FONT);
- if (lines_available < 1)
- {
-
- rect.bottom = rect.top + GetFontHeight(SIMPLE_FONT) + 1;
- lines_available = 1;
- }
- if (lines_available > MAX_PRESETS_PER_PAGE)
- lines_available = MAX_PRESETS_PER_PAGE;
- if (m_bUserPagedDown)
- {
- m_nPresetListCurPos += lines_available;
- if (m_nPresetListCurPos >= m_nPresets)
- m_nPresetListCurPos = m_nPresets - 1;
-
-
-
-
- m_bUserPagedDown = false;
- }
- if (m_bUserPagedUp)
- {
- m_nPresetListCurPos -= lines_available;
- if (m_nPresetListCurPos < 0)
- m_nPresetListCurPos = 0;
-
-
-
-
- m_bUserPagedUp = false;
- }
- int i;
- int first_line = m_nPresetListCurPos - (m_nPresetListCurPos % lines_available);
- int last_line = first_line + lines_available;
- wchar_t str[512], str2[512];
- if (last_line > m_nPresets)
- last_line = m_nPresets;
-
- if (m_bShowMenuToolTips)
- {
- wchar_t buf[256];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_PAGE_X_OF_X), m_nPresetListCurPos/lines_available+1, (m_nPresets+lines_available-1)/lines_available);
- DrawTooltip(buf, xR, *lower_right_corner_y);
- }
- RECT orig_rect = rect;
- RECT box;
- box.top = rect.top;
- box.left = rect.left;
- box.right = rect.left;
- box.bottom = rect.top;
- for (int pass=0; pass<2; pass++)
- {
-
-
- rect = orig_rect;
- for (i=first_line; i<last_line; i++)
- {
-
-
- bool bIsDir = (m_presets[i].szFilename.c_str()[0] == '*');
- bool bIsRunning = (i == m_nCurrentPreset);
- bool bIsSelected = (i == m_nPresetListCurPos);
-
- if (bIsDir)
- {
-
- if (wcscmp(m_presets[i].szFilename.c_str()+1, L"..")==0)
- swprintf(str2, L" [ %s ] (%s) ", m_presets[i].szFilename.c_str()+1, WASABI_API_LNGSTRINGW(IDS_PARENT_DIRECTORY));
- else
- swprintf(str2, L" [ %s ] ", m_presets[i].szFilename.c_str()+1);
- }
- else
- {
-
- lstrcpyW(str, m_presets[i].szFilename.c_str());
- RemoveExtension(str);
- swprintf(str2, L" %s ", str);
-
-
- }
-
- if (bIsRunning && m_bPresetLockedByUser)
- lstrcatW(str2, WASABI_API_LNGSTRINGW(IDS_LOCKED));
- DWORD color = bIsDir ? DIR_COLOR : PLAYLIST_COLOR_NORMAL;
- if (bIsRunning)
- color = bIsSelected ? PLAYLIST_COLOR_BOTH : PLAYLIST_COLOR_PLAYING_TRACK;
- else if (bIsSelected)
- color = PLAYLIST_COLOR_HILITE_TRACK;
- RECT r2 = rect;
- rect.top += m_text.DrawTextW(GetFont(SIMPLE_FONT), str2, -1, &r2, DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOPREFIX | (pass==0 ? DT_CALCRECT : 0), color, false);
- if (pass==0)
- {
- box.right = max(box.right, box.left + r2.right-r2.left);
- box.bottom += r2.bottom-r2.top;
- }
- }
-
-
- if (pass==0)
- {
- box.top -= PLAYLIST_INNER_MARGIN;
- box.left -= PLAYLIST_INNER_MARGIN;
- box.right += PLAYLIST_INNER_MARGIN;
- box.bottom += PLAYLIST_INNER_MARGIN;
- DrawDarkTranslucentBox(&box);
- *upper_left_corner_y = box.bottom + PLAYLIST_INNER_MARGIN;
- }
- }
- }
- }
- }
-
-
- {
-
- if (!m_bWarningsDisabled2)
- {
- wchar_t buf[512] = {0};
- SelectFont(SIMPLE_FONT);
- float t = GetTime();
- int N = m_errors.size();
- for (int i=0; i<N; i++)
- {
- if (t >= m_errors[i].birthTime && t < m_errors[i].expireTime)
- {
- swprintf(buf, L"%s ", m_errors[i].msg.c_str());
- float age_rel = (t - m_errors[i].birthTime) / (m_errors[i].expireTime - m_errors[i].birthTime);
- DWORD cr = (DWORD)(200 - 199*powf(age_rel,4));
- DWORD cg = 0;
- DWORD cb = 0;
- DWORD z = 0xFF000000 | (cr<<16) | (cg<<8) | cb;
- MyTextOut_BGCOLOR(buf, MTO_UPPER_RIGHT, true, m_errors[i].bBold ? z : 0xFF000000);
- }
- else
- {
- m_errors.erase(m_errors.begin() + i);
- i--;
- N--;
- }
- }
- }
- }
- }
- LRESULT CPlugin::MyWindowProc(HWND hWnd, unsigned uMsg, WPARAM wParam, LPARAM lParam)
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- USHORT mask = 1 << (sizeof(SHORT)*8 - 1);
- bool bShiftHeldDown = (GetKeyState(VK_SHIFT) & mask) != 0;
- bool bCtrlHeldDown = (GetKeyState(VK_CONTROL) & mask) != 0;
- int nRepeat = 1;
- int rep;
- switch (uMsg)
- {
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case ID_VIS_NEXT:
- NextPreset(m_fBlendTimeUser);
- return 0;
- case ID_VIS_PREV:
- PrevPreset(m_fBlendTimeUser);
- return 0;
- case ID_VIS_RANDOM:
- {
-
-
-
- USHORT v = HIWORD(wParam);
- if (v==0xFFFF)
- {
-
-
- SendMessage(GetWinampWindow(), WM_WA_IPC, (m_bPresetLockOnAtStartup ? 0 : 1) << 16, IPC_CB_VISRANDOM);
- return 0;
- }
-
- v = v ? 1 : 0;
-
-
- m_bPresetLockedByUser = (v == 0);
- SetScrollLock(m_bPresetLockedByUser, m_bPreventScollLockHandling);
- return 0;
- }
- case ID_VIS_FS:
- PostMessage(hWnd, WM_USER + 1667, 0, 0);
- return 0;
- case ID_VIS_CFG:
- ToggleHelp();
- return 0;
- case ID_VIS_MENU:
- POINT pt;
- GetCursorPos(&pt);
- SendMessage(hWnd, WM_CONTEXTMENU, (WPARAM)hWnd, (pt.y << 16) | pt.x);
- return 0;
- }
- break;
-
-
-
- case WM_USER+1667:
- if (GetFrame() > 0) ToggleFullScreen();
- return 0;
- case WM_CHAR:
- nRepeat = LOWORD(lParam);
- if (m_waitstring.bActive)
- {
- if ((wParam >= ' ' && wParam <= 'z') || wParam=='{' || wParam=='}')
- {
- int len;
- if(m_waitstring.bDisplayAsCode)
- len = lstrlenA((char*)m_waitstring.szText);
- else
- len = lstrlenW(m_waitstring.szText);
- if (m_waitstring.bFilterBadChars &&
- (wParam == '\"' ||
- wParam == '\\' ||
- wParam == '/' ||
- wParam == ':' ||
- wParam == '*' ||
- wParam == '?' ||
- wParam == '|' ||
- wParam == '<' ||
- wParam == '>' ||
- wParam == '&'))
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_ILLEGAL_CHARACTER), 2.5f, ERR_MISC, true);
- }
- else if (len+nRepeat >= m_waitstring.nMaxLen)
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_STRING_TOO_LONG), 2.5f, ERR_MISC, true);
- }
- else
- {
-
- if(m_waitstring.bDisplayAsCode)
- {
- char buf[16];
- sprintf(buf, "%c", wParam);
- if (m_waitstring.nSelAnchorPos != -1)
- WaitString_NukeSelection();
- if (m_waitstring.bOvertypeMode)
- {
-
- for (rep=0; rep<nRepeat; rep++)
- {
- if (m_waitstring.nCursorPos == len)
- {
- lstrcatA((char*)m_waitstring.szText, buf);
- len++;
- }
- else
- {
- char* ptr = (char*)m_waitstring.szText;
- *(ptr + m_waitstring.nCursorPos) = buf[0];
- }
- m_waitstring.nCursorPos++;
- }
- }
- else
- {
-
- char* ptr = (char*)m_waitstring.szText;
- for (rep=0; rep<nRepeat; rep++)
- {
- for (int i=len; i>=m_waitstring.nCursorPos; i--)
- *(ptr + i+1) = *(ptr + i);
- *(ptr + m_waitstring.nCursorPos) = buf[0];
- m_waitstring.nCursorPos++;
- len++;
- }
- }
- }
- else
- {
- wchar_t buf[16];
- swprintf(buf, L"%c", wParam);
- if (m_waitstring.nSelAnchorPos != -1)
- WaitString_NukeSelection();
- if (m_waitstring.bOvertypeMode)
- {
-
- for (rep=0; rep<nRepeat; rep++)
- {
- if (m_waitstring.nCursorPos == len)
- {
- lstrcatW(m_waitstring.szText, buf);
- len++;
- }
- else
- m_waitstring.szText[m_waitstring.nCursorPos] = buf[0];
- m_waitstring.nCursorPos++;
- }
- }
- else
- {
-
- for (rep=0; rep<nRepeat; rep++)
- {
- for (int i=len; i>=m_waitstring.nCursorPos; i--)
- m_waitstring.szText[i+1] = m_waitstring.szText[i];
- m_waitstring.szText[m_waitstring.nCursorPos] = buf[0];
- m_waitstring.nCursorPos++;
- len++;
- }
- }
- }
- }
- }
- return 0;
- }
- else if (m_UI_mode == UI_LOAD_DEL)
- {
- if (wParam == keyMappings[0] || wParam == keyMappings[1])
- {
-
- wchar_t szDelFile[512];
- swprintf(szDelFile, L"%s%s", GetPresetDir(), m_presets[m_nPresetListCurPos].szFilename.c_str());
- DeletePresetFile(szDelFile);
-
- }
- m_UI_mode = UI_LOAD;
- return 0;
- }
- else if (m_UI_mode == UI_UPGRADE_PIXEL_SHADER)
- {
- if (wParam == keyMappings[0] || wParam == keyMappings[1])
- {
- if (m_pState->m_nMinPSVersion == m_pState->m_nMaxPSVersion)
- {
- switch(m_pState->m_nMinPSVersion)
- {
- case MD2_PS_NONE:
- m_pState->m_nWarpPSVersion = MD2_PS_2_0;
- m_pState->m_nCompPSVersion = MD2_PS_2_0;
- m_pState->GenDefaultWarpShader();
- m_pState->GenDefaultCompShader();
- break;
- case MD2_PS_2_0:
- m_pState->m_nWarpPSVersion = MD2_PS_2_X;
- m_pState->m_nCompPSVersion = MD2_PS_2_X;
- break;
- case MD2_PS_2_X:
- m_pState->m_nWarpPSVersion = MD2_PS_3_0;
- m_pState->m_nCompPSVersion = MD2_PS_3_0;
- break;
- default:
- assert(0);
- break;
- }
- }
- else
- {
- switch(m_pState->m_nMinPSVersion)
- {
- case MD2_PS_NONE:
- if (m_pState->m_nWarpPSVersion < MD2_PS_2_0)
- {
- m_pState->m_nWarpPSVersion = MD2_PS_2_0;
- m_pState->GenDefaultWarpShader();
- }
- if (m_pState->m_nCompPSVersion < MD2_PS_2_0)
- {
- m_pState->m_nCompPSVersion = MD2_PS_2_0;
- m_pState->GenDefaultCompShader();
- }
- break;
- case MD2_PS_2_0:
- m_pState->m_nWarpPSVersion = max(m_pState->m_nWarpPSVersion, MD2_PS_2_X);
- m_pState->m_nCompPSVersion = max(m_pState->m_nCompPSVersion, MD2_PS_2_X);
- break;
- case MD2_PS_2_X:
- m_pState->m_nWarpPSVersion = max(m_pState->m_nWarpPSVersion, MD2_PS_3_0);
- m_pState->m_nCompPSVersion = max(m_pState->m_nCompPSVersion, MD2_PS_3_0);
- break;
- default:
- assert(0);
- break;
- }
- }
- m_pState->m_nMinPSVersion = min(m_pState->m_nWarpPSVersion, m_pState->m_nCompPSVersion);
- m_pState->m_nMaxPSVersion = max(m_pState->m_nWarpPSVersion, m_pState->m_nCompPSVersion);
- LoadShaders(&m_shaders, m_pState, false);
- SetMenusForPresetVersion( m_pState->m_nWarpPSVersion, m_pState->m_nCompPSVersion );
- }
- if (wParam != 13)
- m_UI_mode = UI_MENU;
- return 0;
- }
- else if (m_UI_mode == UI_SAVE_OVERWRITE)
- {
- if (wParam == keyMappings[0] || wParam == keyMappings[1])
- {
-
- wchar_t szNewFile[512];
- swprintf(szNewFile, L"%s%s.milk", GetPresetDir(), m_waitstring.szText);
- SavePresetAs(szNewFile);
-
- m_UI_mode = UI_REGULAR;
- m_waitstring.bActive = false;
-
- }
- else if ((wParam >= ' ' && wParam <= 'z') || wParam == 27)
- {
-
- m_UI_mode = UI_SAVEAS;
- m_waitstring.bActive = true;
- }
- return 0;
- }
- else
- {
- if (HandleRegularKey(wParam)==0)
- return 0;
- }
- return 1;
- case WM_KEYDOWN:
-
-
-
-
-
- nRepeat = LOWORD(lParam);
- switch(wParam)
- {
- case VK_F2: m_bShowSongTitle = !m_bShowSongTitle; return 0;
- case VK_F3:
- if (m_bShowSongTime && m_bShowSongLen)
- {
- m_bShowSongTime = false;
- m_bShowSongLen = false;
- }
- else if (m_bShowSongTime && !m_bShowSongLen)
- {
- m_bShowSongLen = true;
- }
- else
- {
- m_bShowSongTime = true;
- m_bShowSongLen = false;
- }
- return 0;
- case VK_F4: m_bShowPresetInfo = !m_bShowPresetInfo; return 0;
- case VK_F5: m_bShowFPS = !m_bShowFPS; return 0;
- case VK_F6: m_bShowRating = !m_bShowRating; return 0;
- case VK_F7:
- if (m_nNumericInputMode == NUMERIC_INPUT_MODE_CUST_MSG)
- ReadCustomMessages();
- return 0;
- case VK_F8:
- {
- m_UI_mode = UI_CHANGEDIR;
-
- m_waitstring.bActive = true;
- m_waitstring.bFilterBadChars = false;
- m_waitstring.bDisplayAsCode = false;
- m_waitstring.nSelAnchorPos = -1;
- m_waitstring.nMaxLen = min(sizeof(m_waitstring.szText)-1, MAX_PATH - 1);
- lstrcpyW(m_waitstring.szText, GetPresetDir());
- {
-
- int len = lstrlenW(m_waitstring.szText);
- if (len > 3 && m_waitstring.szText[len-1] == '\\')
- m_waitstring.szText[len-1] = 0;
- }
- WASABI_API_LNGSTRINGW_BUF(IDS_DIRECTORY_TO_JUMP_TO, m_waitstring.szPrompt, 512);
- m_waitstring.szToolTip[0] = 0;
- m_waitstring.nCursorPos = lstrlenW(m_waitstring.szText);
- }
- return 0;
- case VK_F9:
- m_bShowShaderHelp = !m_bShowShaderHelp;
- return FALSE;
- case VK_SCROLL:
- m_bPresetLockedByUser = GetKeyState(VK_SCROLL) & 1;
-
- SendMessage(GetWinampWindow(), WM_WA_IPC, (m_bPresetLockedByUser ? 0 : 1) << 16, IPC_CB_VISRANDOM);
-
-
- return 0;
-
-
-
-
- }
-
-
-
-
- if (m_waitstring.bActive)
- {
-
- USHORT mask = 1 << (sizeof(SHORT)*8 - 1);
- bool bShiftHeldDown = (GetKeyState(VK_SHIFT) & mask) != 0;
- bool bCtrlHeldDown = (GetKeyState(VK_CONTROL) & mask) != 0;
- if (wParam == VK_LEFT || wParam == VK_RIGHT ||
- wParam == VK_HOME || wParam == VK_END ||
- wParam == VK_UP || wParam == VK_DOWN)
- {
- if (bShiftHeldDown)
- {
- if (m_waitstring.nSelAnchorPos == -1)
- m_waitstring.nSelAnchorPos = m_waitstring.nCursorPos;
- }
- else
- {
- m_waitstring.nSelAnchorPos = -1;
- }
- }
- if (bCtrlHeldDown)
- {
- switch(wParam)
- {
- case 'c':
- case 'C':
- case VK_INSERT:
- WaitString_Copy();
- return 0;
- case 'x':
- case 'X':
- WaitString_Cut();
- return 0;
- case 'v':
- case 'V':
- WaitString_Paste();
- return 0;
- case VK_LEFT: WaitString_SeekLeftWord(); return 0;
- case VK_RIGHT: WaitString_SeekRightWord(); return 0;
- case VK_HOME: m_waitstring.nCursorPos = 0; return 0;
- case VK_END:
- if (m_waitstring.bDisplayAsCode)
- {
- m_waitstring.nCursorPos = lstrlenA((char*)m_waitstring.szText);
- }
- else
- {
- m_waitstring.nCursorPos = lstrlenW(m_waitstring.szText);
- }
- return 0;
- case VK_RETURN:
- if (m_waitstring.bDisplayAsCode)
- {
-
-
- m_pCurMenu->OnWaitStringAccept(m_waitstring.szText);
-
-
-
- m_waitstring.bActive = false;
- m_UI_mode = UI_MENU;
- }
- return 0;
- }
- }
- else
- {
- switch(wParam)
- {
- case VK_INSERT:
- m_waitstring.bOvertypeMode = !m_waitstring.bOvertypeMode;
- return 0;
- case VK_LEFT:
- for (rep=0; rep<nRepeat; rep++)
- if (m_waitstring.nCursorPos > 0)
- m_waitstring.nCursorPos--;
- return 0;
- case VK_RIGHT:
- for (rep=0; rep<nRepeat; rep++)
- {
- if (m_waitstring.bDisplayAsCode)
- {
- if (m_waitstring.nCursorPos < (int)lstrlenA((char*)m_waitstring.szText))
- m_waitstring.nCursorPos++;
- }
- else
- {
- if (m_waitstring.nCursorPos < (int)lstrlenW(m_waitstring.szText))
- m_waitstring.nCursorPos++;
- }
- }
- return 0;
- case VK_HOME:
- m_waitstring.nCursorPos -= WaitString_GetCursorColumn();
- return 0;
- case VK_END:
- m_waitstring.nCursorPos += WaitString_GetLineLength() - WaitString_GetCursorColumn();
- return 0;
- case VK_UP:
- for (rep=0; rep<nRepeat; rep++)
- WaitString_SeekUpOneLine();
- return 0;
- case VK_DOWN:
- for (rep=0; rep<nRepeat; rep++)
- WaitString_SeekDownOneLine();
- return 0;
- case VK_BACK:
- if (m_waitstring.nSelAnchorPos != -1)
- {
- WaitString_NukeSelection();
- }
- else if (m_waitstring.nCursorPos > 0)
- {
- int len;
- if (m_waitstring.bDisplayAsCode)
- {
- len = lstrlenA((char*)m_waitstring.szText);
- }
- else
- {
- len = lstrlenW(m_waitstring.szText);
- }
- int src_pos = m_waitstring.nCursorPos;
- int dst_pos = m_waitstring.nCursorPos - nRepeat;
- int gap = nRepeat;
- int copy_chars = len - m_waitstring.nCursorPos + 1;
- if (dst_pos < 0)
- {
- gap += dst_pos;
-
- dst_pos = 0;
- }
- if (m_waitstring.bDisplayAsCode)
- {
- char* ptr = (char*)m_waitstring.szText;
- for (int i=0; i<copy_chars; i++)
- *(ptr + dst_pos+i) = *(ptr + src_pos+i);
- }
- else
- {
- for (int i=0; i<copy_chars; i++)
- m_waitstring.szText[dst_pos+i] = m_waitstring.szText[src_pos+i];
- }
- m_waitstring.nCursorPos -= gap;
- }
- return 0;
-
- case VK_DELETE:
- if (m_waitstring.nSelAnchorPos != -1)
- {
- WaitString_NukeSelection();
- }
- else
- {
- if (m_waitstring.bDisplayAsCode)
- {
- int len = lstrlenA((char*)m_waitstring.szText);
- char* ptr = (char*)m_waitstring.szText;
- for (int i=m_waitstring.nCursorPos; i<=len - nRepeat; i++)
- *(ptr + i) = *(ptr + i+nRepeat);
- }
- else
- {
- int len = lstrlenW(m_waitstring.szText);
- for (int i=m_waitstring.nCursorPos; i<=len - nRepeat; i++)
- m_waitstring.szText[i] = m_waitstring.szText[i+nRepeat];
- }
- }
- return 0;
- case VK_RETURN:
- if (m_UI_mode == UI_LOAD_RENAME)
- {
-
- wchar_t szOldFile[512];
- wchar_t szNewFile[512];
- lstrcpyW(szOldFile, GetPresetDir());
- lstrcpyW(szNewFile, GetPresetDir());
- lstrcatW(szOldFile, m_presets[m_nPresetListCurPos].szFilename.c_str());
- lstrcatW(szNewFile, m_waitstring.szText);
- lstrcatW(szNewFile, L".milk");
- RenamePresetFile(szOldFile, szNewFile);
- }
- else if (m_UI_mode == UI_IMPORT_WAVE ||
- m_UI_mode == UI_EXPORT_WAVE ||
- m_UI_mode == UI_IMPORT_SHAPE ||
- m_UI_mode == UI_EXPORT_SHAPE)
- {
- int bWave = (m_UI_mode == UI_IMPORT_WAVE || m_UI_mode == UI_EXPORT_WAVE);
- int bImport = (m_UI_mode == UI_IMPORT_WAVE || m_UI_mode == UI_IMPORT_SHAPE);
- int i = m_pCurMenu->GetCurItem()->m_lParam;
- int ret;
- switch(m_UI_mode)
- {
- case UI_IMPORT_WAVE : ret = m_pState->m_wave[i].Import(NULL, m_waitstring.szText, 0); break;
- case UI_EXPORT_WAVE : ret = m_pState->m_wave[i].Export(NULL, m_waitstring.szText, 0); break;
- case UI_IMPORT_SHAPE: ret = m_pState->m_shape[i].Import(NULL, m_waitstring.szText, 0); break;
- case UI_EXPORT_SHAPE: ret = m_pState->m_shape[i].Export(NULL, m_waitstring.szText, 0); break;
- }
- if (bImport)
- m_pState->RecompileExpressions(1);
-
- if (!ret)
- {
- wchar_t buf[1024];
- if (m_UI_mode==UI_IMPORT_WAVE || m_UI_mode==UI_IMPORT_SHAPE)
- WASABI_API_LNGSTRINGW_BUF(IDS_ERROR_IMPORTING_BAD_FILENAME, buf, 1024);
- else
- WASABI_API_LNGSTRINGW_BUF(IDS_ERROR_IMPORTING_BAD_FILENAME_OR_NOT_OVERWRITEABLE, buf, 1024);
- AddError(WASABI_API_LNGSTRINGW(IDS_STRING_TOO_LONG), 2.5f, ERR_MISC, true);
- }
- m_waitstring.bActive = false;
- m_UI_mode = UI_MENU;
-
- }
- else if (m_UI_mode == UI_SAVEAS)
- {
-
- wchar_t szNewFile[512];
- swprintf(szNewFile, L"%s%s.milk", GetPresetDir(), m_waitstring.szText);
- if (GetFileAttributesW(szNewFile) != -1)
- {
-
- m_waitstring.bActive = false;
- m_UI_mode = UI_SAVE_OVERWRITE;
- }
- else
- {
- SavePresetAs(szNewFile);
-
- m_UI_mode = UI_REGULAR;
- m_waitstring.bActive = false;
-
- }
- }
- else if (m_UI_mode == UI_EDIT_MENU_STRING)
- {
- if (m_waitstring.bDisplayAsCode)
- {
- if (m_waitstring.nSelAnchorPos != -1)
- WaitString_NukeSelection();
- int len = lstrlenA((char*)m_waitstring.szText);
- char* ptr = (char*)m_waitstring.szText;
- if (len + 1 < m_waitstring.nMaxLen)
- {
-
- for (int pos=len+1; pos > m_waitstring.nCursorPos; pos--)
- *(ptr + pos) = *(ptr + pos - 1);
- *(ptr + m_waitstring.nCursorPos++) = LINEFEED_CONTROL_CHAR;
-
- }
- else
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_STRING_TOO_LONG), 2.5f, ERR_MISC, true);
- }
- }
- else
- {
-
-
- m_pCurMenu->OnWaitStringAccept(m_waitstring.szText);
-
-
-
- m_waitstring.bActive = false;
- m_UI_mode = UI_MENU;
- }
- }
- else if (m_UI_mode == UI_CHANGEDIR)
- {
-
-
- wchar_t szOldDir[512];
- wchar_t szNewDir[512];
- lstrcpyW(szOldDir, g_plugin.m_szPresetDir);
- lstrcpyW(szNewDir, m_waitstring.szText);
- int len = lstrlenW(szNewDir);
- if (len > 0 && szNewDir[len-1] != L'\\')
- lstrcatW(szNewDir, L"\\");
- lstrcpyW(g_plugin.m_szPresetDir, szNewDir);
-
- bool bSuccess = true;
- if (GetFileAttributesW(g_plugin.m_szPresetDir) == -1)
- bSuccess = false;
- if (bSuccess) {
- UpdatePresetList(false,true,false);
- bSuccess = (m_nPresets > 0);
- }
- if (!bSuccess)
- {
-
- lstrcpyW(g_plugin.m_szPresetDir, szOldDir);
-
- AddError(WASABI_API_LNGSTRINGW(IDS_INVALID_PATH), 3.5f, ERR_MISC, true);
- }
- else
- {
-
- lstrcpyW(g_plugin.m_szPresetDir, szNewDir);
-
- WritePrivateProfileStringW(L"settings",L"szPresetDir",g_plugin.m_szPresetDir,GetConfigIniFile());
-
- m_nCurrentPreset = -1;
-
- m_waitstring.bActive = false;
- m_UI_mode = UI_LOAD;
- ClearErrors(ERR_MISC);
- }
- }
- return 0;
- case VK_ESCAPE:
- if (m_UI_mode == UI_LOAD_RENAME)
- {
- m_waitstring.bActive = false;
- m_UI_mode = UI_LOAD;
- }
- else if (
- m_UI_mode == UI_SAVEAS ||
- m_UI_mode == UI_SAVE_OVERWRITE ||
- m_UI_mode == UI_EXPORT_SHAPE ||
- m_UI_mode == UI_IMPORT_SHAPE ||
- m_UI_mode == UI_EXPORT_WAVE ||
- m_UI_mode == UI_IMPORT_WAVE)
- {
-
- m_waitstring.bActive = false;
- m_UI_mode = UI_REGULAR;
- }
- else if (m_UI_mode == UI_EDIT_MENU_STRING)
- {
- m_waitstring.bActive = false;
- if (m_waitstring.bDisplayAsCode)
- m_UI_mode = UI_MENU;
- else
- m_UI_mode = UI_REGULAR;
- }
- else
- {
- m_waitstring.bActive = false;
- m_UI_mode = UI_REGULAR;
- }
- return 0;
- }
- }
-
- return 0;
- }
-
- if (m_UI_mode == UI_MENU)
- {
-
- if (m_pCurMenu->HandleKeydown(hWnd, uMsg, wParam, lParam) == 0)
- return 0;
- }
-
-
-
-
-
- switch(wParam)
- {
- case VK_LEFT:
- case VK_RIGHT:
- if (m_UI_mode == UI_LOAD)
- {
-
- if (wParam == VK_LEFT) m_UI_mode = UI_REGULAR;
- return 0;
- }
- else if (m_UI_mode == UI_UPGRADE_PIXEL_SHADER)
- {
- m_UI_mode = UI_MENU;
- return 0;
- }
- else if (m_UI_mode == UI_MASHUP)
- {
- if (wParam==VK_LEFT)
- m_nMashSlot = max(0, m_nMashSlot-1);
- else
- m_nMashSlot = min(MASH_SLOTS-1, m_nMashSlot+1);
- return 0;
- }
- break;
- case VK_ESCAPE:
- if (m_UI_mode == UI_LOAD || m_UI_mode == UI_MENU || m_UI_mode == UI_MASHUP)
- {
- m_UI_mode = UI_REGULAR;
- return 0;
- }
- else if (m_UI_mode == UI_LOAD_DEL)
- {
- m_UI_mode = UI_LOAD;
- return 0;
- }
- else if (m_UI_mode == UI_UPGRADE_PIXEL_SHADER)
- {
- m_UI_mode = UI_MENU;
- return 0;
- }
- else if (m_UI_mode == UI_SAVE_OVERWRITE)
- {
- m_UI_mode = UI_SAVEAS;
-
- m_waitstring.bActive = true;
- return 0;
- }
-
- break;
- case VK_UP:
- if (m_UI_mode == UI_MASHUP)
- {
- for (rep=0; rep<nRepeat; rep++)
- m_nMashPreset[m_nMashSlot] = max(m_nMashPreset[m_nMashSlot]-1, m_nDirs);
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame();
- return 0;
- }
- else if (m_UI_mode == UI_LOAD)
- {
- for (rep=0; rep<nRepeat; rep++)
- if (m_nPresetListCurPos > 0)
- m_nPresetListCurPos--;
- return 0;
-
-
- }
- break;
- case VK_DOWN:
- if (m_UI_mode == UI_MASHUP)
- {
- for (rep=0; rep<nRepeat; rep++)
- m_nMashPreset[m_nMashSlot] = min(m_nMashPreset[m_nMashSlot]+1, m_nPresets-1);
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame();
- return 0;
- }
- else if (m_UI_mode == UI_LOAD)
- {
- for (rep=0; rep<nRepeat; rep++)
- if (m_nPresetListCurPos < m_nPresets - 1)
- m_nPresetListCurPos++;
- return 0;
-
-
- }
- break;
- case VK_SPACE:
- if (m_UI_mode == UI_LOAD)
- goto HitEnterFromLoadMenu;
- if (!m_bPresetLockedByCode)
- {
- LoadRandomPreset(m_fBlendTimeUser);
- return 0;
- }
- break;
- case VK_PRIOR:
- if (m_UI_mode == UI_LOAD || m_UI_mode == UI_MASHUP)
- {
- m_bUserPagedUp = true;
- if (m_UI_mode == UI_MASHUP)
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame();
- return 0;
- }
- break;
- case VK_NEXT:
- if (m_UI_mode == UI_LOAD || m_UI_mode == UI_MASHUP)
- {
- m_bUserPagedDown = true;
- if (m_UI_mode == UI_MASHUP)
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame();
- return 0;
- }
- break;
- case VK_HOME:
- if (m_UI_mode == UI_LOAD)
- {
- m_nPresetListCurPos = 0;
- return 0;
- }
- else if (m_UI_mode == UI_MASHUP)
- {
- m_nMashPreset[m_nMashSlot] = m_nDirs;
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame();
- return 0;
- }
- break;
- case VK_END:
- if (m_UI_mode == UI_LOAD)
- {
- m_nPresetListCurPos = m_nPresets - 1;
- return 0;
- }
- else if (m_UI_mode == UI_MASHUP)
- {
- m_nMashPreset[m_nMashSlot] = m_nPresets-1;
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame();
- return 0;
- }
- break;
-
- case VK_DELETE:
- if (m_UI_mode == UI_LOAD)
- {
- if (m_presets[m_nPresetListCurPos].szFilename.c_str()[0] != '*')
- m_UI_mode = UI_LOAD_DEL;
- return 0;
- }
- else
- {
- if (m_nNumericInputMode == NUMERIC_INPUT_MODE_CUST_MSG)
- {
- m_nNumericInputDigits = 0;
- m_nNumericInputNum = 0;
-
- m_supertext.fStartTime = -1.0f;
- return 0;
- }
- else if (m_nNumericInputMode == NUMERIC_INPUT_MODE_SPRITE)
- {
-
-
-
- m_nNumericInputDigits = 0;
- m_nNumericInputNum = 0;
- USHORT mask = 1 << (sizeof(SHORT)*8 - 1);
- bool bShiftHeldDown = (GetKeyState(VK_SHIFT) & mask) != 0;
- bool bCtrlHeldDown = (GetKeyState(VK_CONTROL) & mask) != 0;
- if (bShiftHeldDown && bCtrlHeldDown)
- {
- for (int x=0; x<NUM_TEX; x++)
- m_texmgr.KillTex(x);
- }
- else
- {
- int newest = -1;
- int frame;
- for (int x=0; x<NUM_TEX; x++)
- {
- if (m_texmgr.m_tex[x].pSurface)
- {
- if ((newest == -1) ||
- (!bShiftHeldDown && m_texmgr.m_tex[x].nStartFrame > frame) ||
- (bShiftHeldDown && m_texmgr.m_tex[x].nStartFrame < frame))
- {
- newest = x;
- frame = m_texmgr.m_tex[x].nStartFrame;
- }
- }
- }
- if (newest != -1)
- m_texmgr.KillTex(newest);
- }
- return 0;
- }
- }
- break;
- case VK_INSERT:
- if (m_UI_mode == UI_LOAD)
- {
- if (m_presets[m_nPresetListCurPos].szFilename.c_str()[0] != '*')
- {
-
- m_UI_mode = UI_LOAD_RENAME;
- m_waitstring.bActive = true;
- m_waitstring.bFilterBadChars = true;
- m_waitstring.bDisplayAsCode = false;
- m_waitstring.nSelAnchorPos = -1;
- m_waitstring.nMaxLen = min(sizeof(m_waitstring.szText)-1, MAX_PATH - lstrlenW(GetPresetDir()) - 6);
-
- lstrcpyW(m_waitstring.szText, m_presets[m_nPresetListCurPos].szFilename.c_str());
- RemoveExtension(m_waitstring.szText);
-
- swprintf(m_waitstring.szPrompt, WASABI_API_LNGSTRINGW(IDS_ENTER_THE_NEW_NAME_FOR_X), m_waitstring.szText);
- m_waitstring.szToolTip[0] = 0;
-
- m_waitstring.nCursorPos = lstrlenW(m_waitstring.szText);
- }
- return 0;
- }
- break;
- case VK_RETURN:
- if (m_UI_mode == UI_MASHUP)
- {
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame() + MASH_APPLY_DELAY_FRAMES;
- return 0;
- }
- else if (m_UI_mode == UI_LOAD)
- {
- HitEnterFromLoadMenu:
- if (m_presets[m_nPresetListCurPos].szFilename.c_str()[0] == '*')
- {
-
- wchar_t *p = GetPresetDir();
- if (wcscmp(m_presets[m_nPresetListCurPos].szFilename.c_str(), L"*..") == 0)
- {
-
- wchar_t *p2 = wcsrchr(p, L'\\');
- if (p2)
- {
- *p2 = 0;
- p2 = wcsrchr(p, L'\\');
- if (p2) *(p2+1) = 0;
- }
- }
- else
- {
-
- lstrcatW(p, &m_presets[m_nPresetListCurPos].szFilename.c_str()[1]);
- lstrcatW(p, L"\\");
- }
- WritePrivateProfileStringW(L"settings",L"szPresetDir",GetPresetDir(),GetConfigIniFile());
- UpdatePresetList(false, true, false);
-
-
- m_nCurrentPreset = -1;
- }
- else
- {
-
- m_nCurrentPreset = m_nPresetListCurPos;
-
- wchar_t s[MAX_PATH];
- lstrcpyW(s, GetPresetDir());
- lstrcatW(s, m_presets[m_nCurrentPreset].szFilename.c_str());
-
- m_presetHistoryPos = (m_presetHistoryPos+1) % PRESET_HIST_LEN;
- LoadPreset(s, (wParam==VK_SPACE) ? m_fBlendTimeUser : 0);
- }
- return 0;
- }
- break;
- case VK_BACK:
-
-
- PrevPreset(0);
- m_fHardCutThresh *= 2.0f;
-
-
- return 0;
- case 'T':
- if (bCtrlHeldDown)
- {
-
- m_supertext.fStartTime = -1.0f;
- return 0;
- }
- break;
- case 'K':
- if (bCtrlHeldDown)
- {
- for (int x=0; x<NUM_TEX; x++)
- if (m_texmgr.m_tex[x].pSurface)
- m_texmgr.KillTex(x);
- return 0;
- }
- break;
-
- }
- if (wParam == keyMappings[2])
- {
- if (bCtrlHeldDown)
- {
- m_supertext.fStartTime = -1.0f;
- return 0;
- }
- }
- return 1;
-
- case WM_KEYUP:
- return 1;
- break;
- default:
- return DefWindowProcW(hWnd, uMsg, wParam, lParam);
- break;
- }
- return 0;
- };
- int CPlugin::HandleRegularKey(WPARAM wParam)
- {
-
-
-
-
-
-
-
- if (m_UI_mode == UI_LOAD && ((wParam >= 'A' && wParam <= 'Z') || (wParam >= 'a' && wParam <= 'z')))
- {
- SeekToPreset((char)wParam);
- return 0;
- }
- else if (m_UI_mode == UI_MASHUP && wParam >= '1' && wParam <= ('0' + MASH_SLOTS))
- {
- m_nMashSlot = wParam - '1';
- }
- else switch(wParam)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- {
- int digit = wParam - '0';
- m_nNumericInputNum = (m_nNumericInputNum*10) + digit;
- m_nNumericInputDigits++;
- if (m_nNumericInputDigits >= 2)
- {
- if (m_nNumericInputMode == NUMERIC_INPUT_MODE_CUST_MSG)
- LaunchCustomMessage(m_nNumericInputNum);
- else if (m_nNumericInputMode == NUMERIC_INPUT_MODE_SPRITE)
- LaunchSprite(m_nNumericInputNum, -1);
- else if (m_nNumericInputMode == NUMERIC_INPUT_MODE_SPRITE_KILL)
- {
- for (int x=0; x<NUM_TEX; x++)
- if (m_texmgr.m_tex[x].nUserData == m_nNumericInputNum)
- m_texmgr.KillTex(x);
- }
- m_nNumericInputDigits = 0;
- m_nNumericInputNum = 0;
- }
- }
- return 0;
-
- case 'q':
- m_pState->m_fVideoEchoZoom /= 1.05f;
- return 0;
- case 'Q':
- m_pState->m_fVideoEchoZoom *= 1.05f;
- return 0;
- case 'w':
- m_pState->m_nWaveMode++;
- if (m_pState->m_nWaveMode >= NUM_WAVES) m_pState->m_nWaveMode = 0;
- return 0;
- case 'W':
- m_pState->m_nWaveMode--;
- if (m_pState->m_nWaveMode < 0) m_pState->m_nWaveMode = NUM_WAVES - 1;
- return 0;
- case 'e':
- m_pState->m_fWaveAlpha -= 0.1f;
- if (m_pState->m_fWaveAlpha.eval(-1) < 0.0f) m_pState->m_fWaveAlpha = 0.0f;
- return 0;
- case 'E':
- m_pState->m_fWaveAlpha += 0.1f;
-
- return 0;
- case 'I': m_pState->m_fZoom -= 0.01f; return 0;
- case 'i': m_pState->m_fZoom += 0.01f; return 0;
- case 'n':
- case 'N':
- m_bShowDebugInfo = !m_bShowDebugInfo;
- return 0;
- case 'r':
- m_bSequentialPresetOrder = !m_bSequentialPresetOrder;
- {
- wchar_t buf[1024], tmp[64];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_PRESET_ORDER_IS_NOW_X),
- WASABI_API_LNGSTRINGW_BUF((m_bSequentialPresetOrder) ? IDS_SEQUENTIAL : IDS_RANDOM, tmp, 64));
- AddError(buf, 3.0f, ERR_NOTIFY, false);
- }
-
- m_presetHistory[0] = m_szCurrentPresetFile;
- m_presetHistoryPos = 0;
- m_presetHistoryFwdFence = 1;
- m_presetHistoryBackFence = 0;
- return 0;
-
- case 'u':
- case 'U':
- if (SendMessage(GetWinampWindow(),WM_USER,0,250))
- AddError(WASABI_API_LNGSTRINGW(IDS_SHUFFLE_IS_NOW_OFF), 3.0f, ERR_NOTIFY, false);
- else
- AddError(WASABI_API_LNGSTRINGW(IDS_SHUFFLE_IS_NOW_ON), 3.0f, ERR_NOTIFY, false);
-
-
- PostMessage(GetWinampWindow(),WM_COMMAND,40023,0);
- return 0;
-
- case 't':
- case 'T':
- LaunchSongTitleAnim();
- return 0;
- case 'o': m_pState->m_fWarpAmount /= 1.1f; return 0;
- case 'O': m_pState->m_fWarpAmount *= 1.1f; return 0;
-
- case '!':
-
- {
- bool bWarpLock = m_bWarpShaderLock;
- wchar_t szOldPreset[MAX_PATH];
- lstrcpyW(szOldPreset, m_szCurrentPresetFile);
- m_bWarpShaderLock = false;
- LoadRandomPreset(0.0f);
- m_bWarpShaderLock = true;
- LoadPreset(szOldPreset, 0.0f);
- m_bWarpShaderLock = bWarpLock;
- }
- break;
- case '@':
-
- {
- bool bCompLock = m_bCompShaderLock;
- wchar_t szOldPreset[MAX_PATH];
- lstrcpyW(szOldPreset, m_szCurrentPresetFile);
- m_bCompShaderLock = false;
- LoadRandomPreset(0.0f);
- m_bCompShaderLock = true;
- LoadPreset(szOldPreset, 0.0f);
- m_bCompShaderLock = bCompLock;
- }
- break;
- case 'a':
- case 'A':
-
-
- {
- bool bCompLock = m_bCompShaderLock;
- bool bWarpLock = m_bWarpShaderLock;
- m_bCompShaderLock = false; m_bWarpShaderLock = false;
- LoadRandomPreset(0.0f);
- m_bCompShaderLock = true; m_bWarpShaderLock = false;
- LoadRandomPreset(0.0f);
- m_bCompShaderLock = false; m_bWarpShaderLock = true;
- LoadRandomPreset(0.0f);
- m_bCompShaderLock = bCompLock;
- m_bWarpShaderLock = bWarpLock;
- }
- break;
- case 'd':
- case 'D':
- if (!m_bCompShaderLock && !m_bWarpShaderLock) {
- m_bCompShaderLock = true; m_bWarpShaderLock = false;
- AddError(WASABI_API_LNGSTRINGW(IDS_COMPSHADER_LOCKED), 3.0f, ERR_NOTIFY, false);
- } else if (m_bCompShaderLock && !m_bWarpShaderLock) {
- m_bCompShaderLock = false; m_bWarpShaderLock = true;
- AddError(WASABI_API_LNGSTRINGW(IDS_WARPSHADER_LOCKED), 3.0f, ERR_NOTIFY, false);
- } else if (!m_bCompShaderLock && m_bWarpShaderLock) {
- m_bCompShaderLock = true; m_bWarpShaderLock = true;
- AddError(WASABI_API_LNGSTRINGW(IDS_ALLSHADERS_LOCKED), 3.0f, ERR_NOTIFY, false);
- } else {
- m_bCompShaderLock = false; m_bWarpShaderLock = false;
- AddError(WASABI_API_LNGSTRINGW(IDS_ALLSHADERS_UNLOCKED), 3.0f, ERR_NOTIFY, false);
- }
- break;
-
-
-
-
-
- case 'h':
- case 'H':
-
- if (m_UI_mode == UI_MASHUP)
- {
- if (wParam=='h')
- {
- m_nMashPreset[m_nMashSlot] = m_nDirs + (warand() % (m_nPresets-m_nDirs));
- m_nLastMashChangeFrame[m_nMashSlot] = GetFrame() + MASH_APPLY_DELAY_FRAMES;
- }
- else
- {
- for (int mash=0; mash<MASH_SLOTS; mash++)
- {
- m_nMashPreset[mash] = m_nDirs + (warand() % (m_nPresets-m_nDirs));
- m_nLastMashChangeFrame[mash] = GetFrame() + MASH_APPLY_DELAY_FRAMES;
- }
- }
- }
- else
- {
- NextPreset(0);
- m_fHardCutThresh *= 2.0f;
- }
- return 0;
- case 'f':
- case 'F':
- m_pState->m_nVideoEchoOrientation = (m_pState->m_nVideoEchoOrientation + 1) % 4;
- return 0;
- case 'g':
- m_pState->m_fGammaAdj -= 0.1f;
- if (m_pState->m_fGammaAdj.eval(-1) < 0.0f) m_pState->m_fGammaAdj = 0.0f;
- return 0;
- case 'G':
- m_pState->m_fGammaAdj += 0.1f;
-
- return 0;
- case 'j':
- m_pState->m_fWaveScale *= 0.9f;
- return 0;
- case 'J':
- m_pState->m_fWaveScale /= 0.9f;
- return 0;
- case 'k':
- case 'K':
- {
- USHORT mask = 1 << (sizeof(SHORT)*8 - 1);
- bool bShiftHeldDown = (GetKeyState(VK_SHIFT) & mask) != 0;
- if (bShiftHeldDown)
- m_nNumericInputMode = NUMERIC_INPUT_MODE_SPRITE_KILL;
- else
- m_nNumericInputMode = NUMERIC_INPUT_MODE_SPRITE;
- m_nNumericInputNum = 0;
- m_nNumericInputDigits = 0;
- }
- return 0;
-
- case '[':
- m_pState->m_fXPush -= 0.005f;
- return 0;
- case ']':
- m_pState->m_fXPush += 0.005f;
- return 0;
- case '{':
- m_pState->m_fYPush -= 0.005f;
- return 0;
- case '}':
- m_pState->m_fYPush += 0.005f;
- return 0;
- case '<':
- m_pState->m_fRot += 0.02f;
- return 0;
- case '>':
- m_pState->m_fRot -= 0.02f;
- return 0;
- case 's':
- case 'S':
- if (m_UI_mode == UI_REGULAR)
- {
-
- m_UI_mode = UI_SAVEAS;
-
- m_waitstring.bActive = true;
- m_waitstring.bFilterBadChars = true;
- m_waitstring.bDisplayAsCode = false;
- m_waitstring.nSelAnchorPos = -1;
- m_waitstring.nMaxLen = min(sizeof(m_waitstring.szText)-1, MAX_PATH - lstrlenW(GetPresetDir()) - 6);
- lstrcpyW(m_waitstring.szText, m_pState->m_szDesc);
- WASABI_API_LNGSTRINGW_BUF(IDS_SAVE_AS,m_waitstring.szPrompt,512);
- m_waitstring.szToolTip[0] = 0;
- m_waitstring.nCursorPos = lstrlenW(m_waitstring.szText);
- return 0;
- }
- break;
- case 'l':
- case 'L':
- if (m_UI_mode == UI_LOAD)
- {
- m_UI_mode = UI_REGULAR;
- return 0;
- }
- else if (
- m_UI_mode == UI_REGULAR ||
- m_UI_mode == UI_MENU)
- {
- UpdatePresetList();
- m_UI_mode = UI_LOAD;
- m_bUserPagedUp = false;
- m_bUserPagedDown = false;
- return 0;
- }
- break;
- case 'm':
- case 'M':
-
- if (m_UI_mode == UI_MENU)
- m_UI_mode = UI_REGULAR;
- else if (m_UI_mode == UI_REGULAR || m_UI_mode == UI_LOAD)
- m_UI_mode = UI_MENU;
- return 0;
- case '-':
- SetCurrentPresetRating(m_pState->m_fRating - 1.0f);
- return 0;
- case '+':
- SetCurrentPresetRating(m_pState->m_fRating + 1.0f);
- return 0;
- case '*':
- m_nNumericInputDigits = 0;
- m_nNumericInputNum = 0;
- return 0;
- }
- if (wParam == keyMappings[3] || wParam == keyMappings[4])
- {
- m_nNumericInputMode = NUMERIC_INPUT_MODE_CUST_MSG;
- m_nNumericInputNum = 0;
- m_nNumericInputDigits = 0;
- return 0;
- }
- return 1;
- }
- void CPlugin::RefreshTab2(HWND hwnd)
- {
- ShowWindow(GetDlgItem(hwnd, IDC_BRIGHT_SLIDER), !m_bAutoGamma);
- ShowWindow(GetDlgItem(hwnd, IDC_T1), !m_bAutoGamma);
- ShowWindow(GetDlgItem(hwnd, IDC_T2), !m_bAutoGamma);
- ShowWindow(GetDlgItem(hwnd, IDC_T3), !m_bAutoGamma);
- ShowWindow(GetDlgItem(hwnd, IDC_T4), !m_bAutoGamma);
- ShowWindow(GetDlgItem(hwnd, IDC_T5), !m_bAutoGamma);
- }
- int CALLBACK MyEnumFontsProc(
- CONST LOGFONT *lplf,
- CONST TEXTMETRIC *lptm,
- DWORD dwType,
- LPARAM lpData
- )
- {
- SendMessage( GetDlgItem( (HWND)lpData, IDC_FONT3), CB_ADDSTRING, 0, (LPARAM)(lplf->lfFaceName));
- return 1;
- }
- wchar_t* FormImageCacheSizeString(wchar_t* itemStr, UINT sizeID)
- {
- static wchar_t cacheBuf[128] = {0};
- StringCchPrintfW(cacheBuf, 128, L"%s %s", itemStr, WASABI_API_LNGSTRINGW(sizeID));
- return cacheBuf;
- }
- BOOL CPlugin::MyConfigTabProc(int nPage, HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
- {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- int t;
- float val;
- if (nPage == 2)
- {
- switch(msg)
- {
- case WM_INITDIALOG:
- {
- char buf[2048];
- int nPos, i;
- HWND ctrl;
-
- ctrl = GetDlgItem( hwnd, IDC_SHADERS );
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_PS_AUTO_RECOMMENDED), -1);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_PS_DISABLED), MD2_PS_NONE);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_PS_SHADER_MODEL_2), MD2_PS_2_0);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_PS_SHADER_MODEL_3), MD2_PS_3_0);
- SelectItemByPos(ctrl, 0);
- SelectItemByValue(ctrl, m_nMaxPSVersion_ConfigPanel);
-
- ctrl = GetDlgItem( hwnd, IDC_TEXFORMAT );
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_TX_8_BITS_PER_CHANNEL), 8);
-
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_TX_16_BITS_PER_CHANNEL), 16);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_TX_32_BITS_PER_CHANNEL), 32);
- SelectItemByPos(ctrl, 0);
- SelectItemByValue(ctrl, m_nTexBitsPerCh);
-
- ctrl = GetDlgItem( hwnd, IDC_MESHSIZECOMBO );
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_8X6_FAST), 8);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_16X12_FAST), 16);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_24X18), 24);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_32X24), 32);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_40X30), 40);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_48X36_DEFAULT), 48);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_64X48_SLOW), 64);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_80X60_SLOW), 80);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_96X72_SLOW), 96);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_128X96_SLOW), 128);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_160X120_SLOW), 160);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_192X144_SLOW), 192);
- SelectItemByPos(ctrl, 0);
- SelectItemByValue(ctrl, m_nGridX);
-
- ctrl = GetDlgItem( hwnd, IDC_STRETCH );
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_AUTO), 0);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_NONE_BEST_IMAGE_QUALITY), 100);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_1_25_X), 125);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_1_33_X), 133);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_1_5_X), 150);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_1_67_X), 167);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_2_X), 200);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_3_X), 300);
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_4_X), 400);
- SelectItemByPos(ctrl, 0);
- SelectItemByValue(ctrl, m_nCanvasStretch);
-
- for (i=0; i<5; i++)
- {
- int size = (int)pow(2., i+8);
- sprintf(buf, " %4d x %4d ", size, size);
- nPos = SendMessage( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_ADDSTRING, 0, (LPARAM)buf);
- SendMessage( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_SETITEMDATA, nPos, size);
- }
-
- nPos = SendMessageW( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_ADDSTRING, 0, (LPARAM)WASABI_API_LNGSTRINGW(IDS_NEAREST_POWER_OF_2));
- SendMessage( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_SETITEMDATA, nPos, -2);
- nPos = SendMessageW( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_ADDSTRING, 0, (LPARAM)WASABI_API_LNGSTRINGW(IDS_EXACT_RECOMMENDED));
- SendMessage( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_SETITEMDATA, nPos, -1);
-
- for (i=0; i<5+2; i++)
- {
- int size = SendMessage( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_GETITEMDATA, i, 0);
- if (size == m_nTexSizeX)
- {
- SendMessage( GetDlgItem( hwnd, IDC_TEXSIZECOMBO ), CB_SETCURSEL, i, 0);
- }
- }
-
- SendMessage( GetDlgItem( hwnd, IDC_BRIGHT_SLIDER), TBM_SETRANGEMIN,
- FALSE, (LPARAM)(0) );
- SendMessage( GetDlgItem( hwnd, IDC_BRIGHT_SLIDER), TBM_SETRANGEMAX,
- FALSE, (LPARAM)(4) );
- SendMessage( GetDlgItem( hwnd, IDC_BRIGHT_SLIDER), TBM_SETPOS,
- TRUE, (LPARAM)(m_n16BitGamma) );
- for (i=0; i<5; i++)
- SendMessage( GetDlgItem( hwnd, IDC_BRIGHT_SLIDER), TBM_SETTIC, 0, i);
-
- GetWindowText( GetDlgItem(hwnd, IDC_CB_DEBUGOUTPUT), buf, 256);
- lstrcat(buf, DEBUGFILE);
- SetWindowText( GetDlgItem(hwnd, IDC_CB_DEBUGOUTPUT), buf);
-
- CheckDlgButton(hwnd, IDC_CB_DEBUGOUTPUT, g_bDebugOutput);
-
-
-
-
-
-
-
- CheckDlgButton(hwnd, IDC_CB_NOWARN2, m_bWarningsDisabled2);
-
- CheckDlgButton(hwnd, IDC_CB_SCROLLON, m_bPresetLockOnAtStartup);
- CheckDlgButton(hwnd, IDC_CB_SCROLLON2, m_bPreventScollLockHandling);
-
- CheckDlgButton(hwnd, IDC_CB_NORATING, !m_bEnableRating);
- CheckDlgButton(hwnd, IDC_CB_AUTOGAMMA, m_bAutoGamma);
- RefreshTab2(hwnd);
- }
- break;
- case WM_COMMAND:
- {
- int id = LOWORD(wParam);
-
- switch (id)
- {
- case IDC_CB_NORATING:
- m_bEnableRating = !DlgItemIsChecked(hwnd, IDC_CB_NORATING);
- RefreshTab2(hwnd);
- break;
- case IDC_CB_AUTOGAMMA:
- m_bAutoGamma = DlgItemIsChecked(hwnd, IDC_CB_AUTOGAMMA);
- RefreshTab2(hwnd);
- break;
-
- }
-
- }
- break;
- case WM_DESTROY:
- {
- ReadCBValue(hwnd, IDC_SHADERS , &m_nMaxPSVersion_ConfigPanel );
- ReadCBValue(hwnd, IDC_TEXFORMAT , &m_nTexBitsPerCh );
- ReadCBValue(hwnd, IDC_TEXSIZECOMBO , &m_nTexSizeX );
- ReadCBValue(hwnd, IDC_MESHSIZECOMBO, &m_nGridX );
- ReadCBValue(hwnd, IDC_STRETCH , &m_nCanvasStretch);
-
- t = SendMessage( GetDlgItem( hwnd, IDC_BRIGHT_SLIDER ), TBM_GETPOS, 0, 0);
- if (t != CB_ERR) m_n16BitGamma = t;
-
- g_bDebugOutput = DlgItemIsChecked(hwnd, IDC_CB_DEBUGOUTPUT);
-
-
-
-
-
-
-
- m_bWarningsDisabled2 = DlgItemIsChecked(hwnd, IDC_CB_NOWARN2);
-
- m_bPresetLockOnAtStartup = DlgItemIsChecked(hwnd, IDC_CB_SCROLLON);
- m_bPreventScollLockHandling = DlgItemIsChecked(hwnd, IDC_CB_SCROLLON2);
-
-
- m_bEnableRating = !DlgItemIsChecked(hwnd, IDC_CB_NORATING);
- m_bAutoGamma = DlgItemIsChecked(hwnd, IDC_CB_AUTOGAMMA);
-
- }
- break;
- case WM_HELP:
- if (lParam)
- {
- HELPINFO *ph = (HELPINFO*)lParam;
- wchar_t title[1024], buf[2048], ctrl_name[1024];
- GetWindowTextW(GetDlgItem(hwnd, ph->iCtrlId), ctrl_name, sizeof(ctrl_name)/sizeof(*ctrl_name));
- RemoveSingleAmpersands(ctrl_name);
- buf[0] = 0;
- StringCbCopyW(title, sizeof(title), ctrl_name);
-
- switch(ph->iCtrlId)
- {
- case IDC_SHADERS:
- case IDC_SHADERS_CAPTION:
- WASABI_API_LNGSTRINGW_BUF(IDS_PIXEL_SHADERS, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_PIXEL_SHADERS_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_TEXFORMAT:
- case IDC_TEXFORMAT_CAPTION:
- WASABI_API_LNGSTRINGW_BUF(IDS_TEXFORMAT, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_TEXFORMAT_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_TEXSIZECOMBO:
- case IDC_TEXSIZECOMBO_CAPTION:
- WASABI_API_LNGSTRINGW_BUF(IDS_CANVAS_SIZE, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_CANVAS_SIZE_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_STRETCH:
- case IDC_STRETCH_CAPTION:
- WASABI_API_LNGSTRINGW_BUF(IDS_CANVAS_STRETCH, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_CANVAS_STRETCH_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_MESHSIZECOMBO:
- case IDC_MESHSIZECOMBO_CAPTION:
- WASABI_API_LNGSTRINGW_BUF(IDS_MESH_SIZE, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_MESH_SIZE_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_CB_ALWAYS3D:
- WASABI_API_LNGSTRINGW_BUF(IDS_CB_ALWAYS3D, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_CB_NORATING:
- WASABI_API_LNGSTRINGW_BUF(IDS_DISABLE_PRESET_RATING, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_DISABLE_PRESET_RATING_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_CB_NOWARN2:
- WASABI_API_LNGSTRINGW_BUF(IDS_CB_NOWARN2, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_CB_SCROLLON:
- WASABI_API_LNGSTRINGW_BUF(IDS_START_WITH_PRESET_LOCK_ON, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_START_WITH_PRESET_LOCK_ON_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_BRIGHT_SLIDER:
- case IDC_BRIGHT_SLIDER_BOX:
- case IDC_T1:
- case IDC_T2:
- case IDC_T3:
- case IDC_T4:
- case IDC_T5:
- case IDC_CB_AUTOGAMMA:
- GetWindowTextW(GetDlgItem(hwnd, IDC_BRIGHT_SLIDER_BOX), title, sizeof(title)/sizeof(*title));
- RemoveSingleAmpersands(title);
- WASABI_API_LNGSTRINGW_BUF((ph->iCtrlId==IDC_CB_AUTOGAMMA?IDS_CB_AUTOGAMMA:IDS_BRIGHT_SLIDER), buf, sizeof(buf)/sizeof(*buf));
- break;
- }
- if (buf[0])
- MessageBoxW(hwnd, buf, title, MB_OK|MB_SETFOREGROUND|MB_TOPMOST|MB_TASKMODAL);
- }
- break;
- }
- }
- else if (nPage==3)
- {
- switch(msg)
- {
- case WM_INITDIALOG:
- {
- char buf[2048];
- HWND ctrl;
-
- ctrl = GetDlgItem( hwnd, IDC_MAX_BYTES );
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_AUTO), -1);
- AddItem(ctrl, FormImageCacheSizeString(L" 0", IDS_MB), 0);
- AddItem(ctrl, FormImageCacheSizeString(L" 1", IDS_MB), 1000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 2", IDS_MB), 2000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 3", IDS_MB), 3000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 4", IDS_MB), 4000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 6", IDS_MB), 6000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 9", IDS_MB), 8000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 10", IDS_MB), 10000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 12", IDS_MB), 12000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 14", IDS_MB), 14000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 16", IDS_MB), 16000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 20", IDS_MB), 20000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 24", IDS_MB), 24000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 28", IDS_MB), 28000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 32", IDS_MB), 32000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 40", IDS_MB), 40000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 48", IDS_MB), 48000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 56", IDS_MB), 56000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 64", IDS_MB), 64000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 80", IDS_MB), 80000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 96", IDS_MB), 96000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 128", IDS_MB), 128000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 160", IDS_MB), 160000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 192", IDS_MB), 192000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 224", IDS_MB), 224000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 256", IDS_MB), 256000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 384", IDS_MB), 384000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 512", IDS_MB), 512000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 768", IDS_MB), 768000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 1", IDS_GB), 1000000000);
- AddItem(ctrl, FormImageCacheSizeString(L"1.25", IDS_GB), 1250000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 1.5", IDS_GB), 1500000000);
- AddItem(ctrl, FormImageCacheSizeString(L"1.75", IDS_GB), 1750000000);
- AddItem(ctrl, FormImageCacheSizeString(L" 2", IDS_GB), 2000000000);
- SelectItemByPos (ctrl, 0);
- SelectItemByValue(ctrl, m_nMaxBytes);
-
- ctrl = GetDlgItem( hwnd, IDC_MAX_IMAGES );
- AddItem(ctrl, WASABI_API_LNGSTRINGW(IDS_AUTO), -1);
- AddItem(ctrl, L" 0 ", 0);
- AddItem(ctrl, L" 1 ", 1);
- AddItem(ctrl, L" 2 ", 2);
- AddItem(ctrl, L" 3 ", 3);
- AddItem(ctrl, L" 4 ", 4);
- AddItem(ctrl, L" 6 ", 6);
- AddItem(ctrl, L" 8 ", 8);
- AddItem(ctrl, L" 10 ", 10);
- AddItem(ctrl, L" 12 ", 12);
- AddItem(ctrl, L" 14 ", 14);
- AddItem(ctrl, L" 16 ", 16);
- AddItem(ctrl, L" 20 ", 20);
- AddItem(ctrl, L" 24 ", 24);
- AddItem(ctrl, L" 28 ", 28);
- AddItem(ctrl, L" 32 ", 32);
- AddItem(ctrl, L" 40 ", 40);
- AddItem(ctrl, L" 48 ", 48);
- AddItem(ctrl, L" 56 ", 56);
- AddItem(ctrl, L" 64 ", 64);
- AddItem(ctrl, L" 80 ", 80);
- AddItem(ctrl, L" 96 ", 96);
- AddItem(ctrl, L" 128 ",128);
- AddItem(ctrl, L" 160 ",160);
- AddItem(ctrl, L" 192 ",192);
- AddItem(ctrl, L" 224 ",224);
- AddItem(ctrl, L" 256 ",256);
- AddItem(ctrl, L" 384 ",384);
- AddItem(ctrl, L" 512 ",512);
- AddItem(ctrl, L" 768 ",768);
- AddItem(ctrl, L" 1024 ",1024);
- AddItem(ctrl, L" 1536 ",1536);
- AddItem(ctrl, L" 2048 ",2048);
- SelectItemByPos (ctrl, 0);
- SelectItemByValue(ctrl, m_nMaxImages);
-
-
- sprintf(buf, " %2.1f", m_fSongTitleAnimDuration);
- SetWindowText(GetDlgItem( hwnd, IDC_SONGTITLEANIM_DURATION), buf);
- sprintf(buf, " %2.1f", m_fTimeBetweenRandomSongTitles);
- SetWindowText(GetDlgItem(hwnd, IDC_RAND_TITLE), buf);
- sprintf(buf, " %2.1f", m_fTimeBetweenRandomCustomMsgs);
- SetWindowText(GetDlgItem(hwnd, IDC_RAND_MSG), buf);
- CheckDlgButton(hwnd, IDC_CB_TITLE_ANIMS, m_bSongTitleAnims);
- }
- break;
- case WM_COMMAND:
- {
- int id = LOWORD(wParam);
-
- switch (id)
- {
- case ID_SPRITE:
- {
- wchar_t szPath[512], szFile[512];
- lstrcpyW(szPath, GetConfigIniFile());
- wchar_t *p = wcsrchr(szPath, L'\\');
- if (p != NULL)
- {
- *(p+1) = 0;
- lstrcpyW(szFile, szPath);
- lstrcatW(szFile, IMG_INIFILE);
- intptr_t ret = (intptr_t)ShellExecuteW(NULL, L"open", szFile, NULL, szPath, SW_SHOWNORMAL);
- if (ret <= 32)
- {
- wchar_t* str = WASABI_API_LNGSTRINGW(IDS_ERROR_IN_SHELLEXECUTE);
- MessageBoxW(hwnd, str, str, MB_OK|MB_SETFOREGROUND|MB_TOPMOST|MB_TASKMODAL);
- }
- }
- }
- break;
- case ID_MSG:
- {
- wchar_t szPath[512], szFile[512];
- lstrcpyW(szPath, GetConfigIniFile());
- wchar_t *p = wcsrchr(szPath, L'\\');
- if (p != NULL)
- {
- *(p+1) = 0;
- lstrcpyW(szFile, szPath);
- lstrcatW(szFile, MSG_INIFILE);
- intptr_t ret = (intptr_t)ShellExecuteW(NULL, L"open", szFile, NULL, szPath, SW_SHOWNORMAL);
- if (ret <= 32)
- {
- wchar_t* str = WASABI_API_LNGSTRINGW(IDS_ERROR_IN_SHELLEXECUTE);
- MessageBoxW(hwnd, str, str, MB_OK|MB_SETFOREGROUND|MB_TOPMOST|MB_TASKMODAL);
- }
- }
- }
- break;
- }
- }
-
- break;
- case WM_DESTROY:
- {
- ReadCBValue(hwnd, IDC_MAX_BYTES , &m_nMaxBytes );
- ReadCBValue(hwnd, IDC_MAX_IMAGES , &m_nMaxImages );
- char buf[2048];
- GetWindowText( GetDlgItem( hwnd, IDC_SONGTITLEANIM_DURATION ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fSongTitleAnimDuration = val;
- GetWindowText( GetDlgItem( hwnd, IDC_RAND_TITLE ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fTimeBetweenRandomSongTitles = val;
- GetWindowText( GetDlgItem( hwnd, IDC_RAND_MSG ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fTimeBetweenRandomCustomMsgs = val;
- m_bSongTitleAnims = DlgItemIsChecked(hwnd, IDC_CB_TITLE_ANIMS);
- }
- break;
- case WM_HELP:
- if (lParam)
- {
- HELPINFO *ph = (HELPINFO*)lParam;
- wchar_t title[1024], buf[2048], ctrl_name[1024];
- GetWindowTextW(GetDlgItem(hwnd, ph->iCtrlId), ctrl_name, sizeof(ctrl_name)/sizeof(*ctrl_name));
- RemoveSingleAmpersands(ctrl_name);
- buf[0] = 0;
- StringCbCopyW(title, sizeof(title), ctrl_name);
-
- switch(ph->iCtrlId)
- {
- case IDC_MAX_IMAGES:
- case IDC_MAX_IMAGES_CAPTION:
- case IDC_MAX_BYTES:
- case IDC_MAX_BYTES_CAPTION:
- WASABI_API_LNGSTRINGW_BUF(IDS_MAX_IMAGES_BYTES, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_MAX_IMAGES_BYTES_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case ID_SPRITE:
- WASABI_API_LNGSTRINGW_BUF(IDS_SPRITE, buf, sizeof(buf)/sizeof(*buf));
- break;
- case ID_MSG:
- WASABI_API_LNGSTRINGW_BUF(IDS_MSG, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_SONGTITLEANIM_DURATION:
- case IDC_SONGTITLEANIM_DURATION_LABEL:
- GetWindowTextW(GetDlgItem(hwnd, IDC_SONGTITLEANIM_DURATION_LABEL), title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_SONGTITLEANIM_DURATION_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_RAND_TITLE:
- case IDC_RAND_TITLE_LABEL:
- WASABI_API_LNGSTRINGW_BUF(IDS_RAND_TITLE, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_RAND_TITLE_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_RAND_MSG:
- case IDC_RAND_MSG_LABEL:
- WASABI_API_LNGSTRINGW_BUF(IDS_RAND_MSG, title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_RAND_MSG_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_CB_TITLE_ANIMS:
- WASABI_API_LNGSTRINGW_BUF(IDS_TITLE_ANIMS_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- }
- if (buf[0])
- MessageBoxW(hwnd, buf, title, MB_OK|MB_SETFOREGROUND|MB_TOPMOST|MB_TASKMODAL);
- }
- break;
- }
- }
- else if (nPage==4)
- {
- switch(msg)
- {
- case WM_INITDIALOG:
- {
- char buf[2048];
-
- sprintf(buf, " %2.1f", m_fTimeBetweenPresets);
- SetWindowText( GetDlgItem( hwnd, IDC_BETWEEN_TIME ), buf );
- sprintf(buf, " %2.1f", m_fTimeBetweenPresetsRand);
- SetWindowText( GetDlgItem( hwnd, IDC_BETWEEN_TIME_RANDOM ), buf );
- sprintf(buf, " %2.1f", m_fBlendTimeUser);
- SetWindowText( GetDlgItem( hwnd, IDC_BLEND_USER ), buf );
- sprintf(buf, " %2.1f", m_fBlendTimeAuto);
- SetWindowText( GetDlgItem( hwnd, IDC_BLEND_AUTO ), buf );
-
- sprintf(buf, " %2.1f", m_fHardCutHalflife);
- SetWindowText( GetDlgItem( hwnd, IDC_HARDCUT_BETWEEN_TIME ), buf );
- int n = (int)((m_fHardCutLoudnessThresh - 1.25f) * 10.0f);
- if (n<0) n = 0;
- if (n>20) n = 20;
- SendMessage( GetDlgItem( hwnd, IDC_HARDCUT_LOUDNESS), TBM_SETRANGEMIN, FALSE, (LPARAM)(0) );
- SendMessage( GetDlgItem( hwnd, IDC_HARDCUT_LOUDNESS), TBM_SETRANGEMAX, FALSE, (LPARAM)(20) );
- SendMessage( GetDlgItem( hwnd, IDC_HARDCUT_LOUDNESS), TBM_SETPOS, TRUE, (LPARAM)(n) );
- CheckDlgButton(hwnd, IDC_CB_HARDCUTS, m_bHardCutsDisabled);
- }
- break;
- case WM_DESTROY:
- {
- char buf[2048];
-
- GetWindowText( GetDlgItem( hwnd, IDC_BETWEEN_TIME ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fTimeBetweenPresets = val;
- GetWindowText( GetDlgItem( hwnd, IDC_BETWEEN_TIME_RANDOM ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fTimeBetweenPresetsRand = val;
- GetWindowText( GetDlgItem( hwnd, IDC_BLEND_AUTO ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fBlendTimeAuto = val;
- GetWindowText( GetDlgItem( hwnd, IDC_BLEND_USER ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fBlendTimeUser = val;
-
- GetWindowText( GetDlgItem( hwnd, IDC_HARDCUT_BETWEEN_TIME ), buf, sizeof(buf));
- if (_sscanf_l(buf, "%f", g_use_C_locale, &val) == 1)
- m_fHardCutHalflife = val;
- t = SendMessage( GetDlgItem( hwnd, IDC_HARDCUT_LOUDNESS ), TBM_GETPOS, 0, 0);
- if (t != CB_ERR) m_fHardCutLoudnessThresh = 1.25f + t/10.0f;
- m_bHardCutsDisabled = DlgItemIsChecked(hwnd, IDC_CB_HARDCUTS);
- }
- break;
- case WM_HELP:
- if (lParam)
- {
- HELPINFO *ph = (HELPINFO*)lParam;
- wchar_t title[1024], buf[2048], ctrl_name[1024];
- GetWindowTextW(GetDlgItem(hwnd, ph->iCtrlId), ctrl_name, sizeof(ctrl_name)/sizeof(*ctrl_name));
- RemoveSingleAmpersands(ctrl_name);
- buf[0] = 0;
- StringCbCopyW(title, sizeof(title), ctrl_name);
-
- switch(ph->iCtrlId)
- {
- case IDC_BETWEEN_TIME:
- case IDC_BETWEEN_TIME_LABEL:
- GetWindowTextW(GetDlgItem(hwnd, IDC_BETWEEN_TIME_LABEL), title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_BETWEEN_TIME_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_BETWEEN_TIME_RANDOM:
- case IDC_BETWEEN_TIME_RANDOM_LABEL:
- GetWindowTextW(GetDlgItem(hwnd, IDC_BETWEEN_TIME_RANDOM_LABEL), title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_BETWEEN_TIME_RANDOM_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_BLEND_AUTO:
- case IDC_BLEND_AUTO_LABEL:
- GetWindowTextW(GetDlgItem(hwnd, IDC_BLEND_AUTO_LABEL), title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_BLEND_AUTO_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_BLEND_USER:
- case IDC_BLEND_USER_LABEL:
- GetWindowTextW(GetDlgItem(hwnd, IDC_BLEND_USER_LABEL), title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_BLEND_USER_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_HARDCUT_BETWEEN_TIME:
- case IDC_HARDCUT_BETWEEN_TIME_LABEL:
- GetWindowTextW(GetDlgItem(hwnd, IDC_HARDCUT_BETWEEN_TIME_LABEL), title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_HARDCUT_BETWEEN_TIME_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_HARDCUT_LOUDNESS:
- case IDC_HARDCUT_LOUDNESS_LABEL:
- case IDC_HARDCUT_LOUDNESS_MIN:
- case IDC_HARDCUT_LOUDNESS_MAX:
- GetWindowTextW(GetDlgItem(hwnd, IDC_HARDCUT_LOUDNESS_LABEL), title, sizeof(title)/sizeof(*title));
- WASABI_API_LNGSTRINGW_BUF(IDS_HARDCUT_LOUDNESS_TEXT, buf, sizeof(buf)/sizeof(*buf));
- break;
- case IDC_CB_HARDCUTS:
- WASABI_API_LNGSTRINGW_BUF(IDS_CB_HARDCUTS, buf, sizeof(buf)/sizeof(*buf));
- break;
- }
- if (buf[0])
- MessageBoxW(hwnd, buf, title, MB_OK|MB_SETFOREGROUND|MB_TOPMOST|MB_TASKMODAL);
- }
- break;
- }
- }
- return false;
- }
- void CPlugin::Randomize()
- {
- srand((int)(GetTime()*100));
-
- m_fRandStart[0] = (warand() % 64841L)*0.01f;
- m_fRandStart[1] = (warand() % 53751L)*0.01f;
- m_fRandStart[2] = (warand() % 42661L)*0.01f;
- m_fRandStart[3] = (warand() % 31571L)*0.01f;
-
-
-
- }
- void CPlugin::SetMenusForPresetVersion(int WarpPSVersion, int CompPSVersion)
- {
- int MaxPSVersion = max(WarpPSVersion, CompPSVersion);
- m_menuPreset.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_WARP_SHADER), WarpPSVersion > 0);
- m_menuPreset.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_COMPOSITE_SHADER), CompPSVersion > 0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_SUSTAIN_LEVEL), WarpPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_TEXTURE_WRAP), WarpPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_GAMMA_ADJUSTMENT), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_HUE_SHADER), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_VIDEO_ECHO_ALPHA), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_VIDEO_ECHO_ZOOM), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_VIDEO_ECHO_ORIENTATION), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_FILTER_INVERT), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_FILTER_BRIGHTEN), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_FILTER_DARKEN), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_FILTER_SOLARIZE), CompPSVersion==0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_BLUR1_EDGE_DARKEN_AMOUNT), MaxPSVersion > 0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_BLUR1_MIN_COLOR_VALUE), MaxPSVersion > 0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_BLUR1_MAX_COLOR_VALUE), MaxPSVersion > 0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_BLUR2_MIN_COLOR_VALUE), MaxPSVersion > 0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_BLUR2_MAX_COLOR_VALUE), MaxPSVersion > 0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_BLUR3_MIN_COLOR_VALUE), MaxPSVersion > 0);
- m_menuPost.EnableItem(WASABI_API_LNGSTRINGW(IDS_MENU_BLUR3_MAX_COLOR_VALUE), MaxPSVersion > 0);
- }
- void CPlugin::BuildMenus()
- {
- wchar_t buf[1024];
- m_pCurMenu = &m_menuPreset;
-
- m_menuPreset .Init(WASABI_API_LNGSTRINGW(IDS_EDIT_CURRENT_PRESET));
- m_menuMotion .Init(WASABI_API_LNGSTRINGW(IDS_MOTION));
- m_menuCustomShape.Init(WASABI_API_LNGSTRINGW(IDS_DRAWING_CUSTOM_SHAPES));
- m_menuCustomWave .Init(WASABI_API_LNGSTRINGW(IDS_DRAWING_CUSTOM_WAVES));
- m_menuWave .Init(WASABI_API_LNGSTRINGW(IDS_DRAWING_SIMPLE_WAVEFORM));
- m_menuAugment .Init(WASABI_API_LNGSTRINGW(IDS_DRAWING_BORDERS_MOTION_VECTORS));
- m_menuPost .Init(WASABI_API_LNGSTRINGW(IDS_POST_PROCESSING_MISC));
- int i = 0;
- for (i=0; i<MAX_CUSTOM_WAVES; i++)
- {
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_CUSTOM_WAVE_X), i+1);
- m_menuWavecode[i].Init(buf);
- }
- for (i=0; i<MAX_CUSTOM_SHAPES; i++)
- {
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_CUSTOM_SHAPE_X), i+1);
- m_menuShapecode[i].Init(buf);
- }
-
-
-
- m_menuPreset.AddChildMenu(&m_menuMotion);
- m_menuPreset.AddChildMenu(&m_menuCustomShape);
- m_menuPreset.AddChildMenu(&m_menuCustomWave);
- m_menuPreset.AddChildMenu(&m_menuWave);
- m_menuPreset.AddChildMenu(&m_menuAugment);
- m_menuPreset.AddChildMenu(&m_menuPost);
- for (i=0; i<MAX_CUSTOM_SHAPES; i++)
- m_menuCustomShape.AddChildMenu(&m_menuShapecode[i]);
- for (i=0; i<MAX_CUSTOM_WAVES; i++)
- m_menuCustomWave.AddChildMenu(&m_menuWavecode[i]);
-
-
- m_menuPreset.AddItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_PRESET_INIT_CODE),
- &m_pState->m_szPerFrameInit, MENUITEMTYPE_STRING,
- WASABI_API_LNGSTRINGW_BUF(IDS_MENU_EDIT_PRESET_INIT_CODE_TT, buf, 1024),
- 256, 0, &OnUserEditedPresetInit, sizeof(m_pState->m_szPerFrameInit), 0);
- m_menuPreset.AddItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_PER_FRAME_EQUATIONS),
- &m_pState->m_szPerFrameExpr, MENUITEMTYPE_STRING,
- WASABI_API_LNGSTRINGW_BUF(IDS_MENU_EDIT_PER_FRAME_EQUATIONS_TT, buf, 1024),
- 256, 0, &OnUserEditedPerFrame, sizeof(m_pState->m_szPerFrameExpr), 0);
- m_menuPreset.AddItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_PER_VERTEX_EQUATIONS),
- &m_pState->m_szPerPixelExpr, MENUITEMTYPE_STRING,
- WASABI_API_LNGSTRINGW_BUF(IDS_MENU_EDIT_PER_VERTEX_EQUATIONS_TT, buf, 1024),
- 256, 0, &OnUserEditedPerPixel, sizeof(m_pState->m_szPerPixelExpr), 0);
- m_menuPreset.AddItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_WARP_SHADER),
- &m_pState->m_szWarpShadersText, MENUITEMTYPE_STRING,
- WASABI_API_LNGSTRINGW_BUF(IDS_MENU_EDIT_WARP_SHADER_TT, buf, 1024),
- 256, 0, &OnUserEditedWarpShaders, sizeof(m_pState->m_szWarpShadersText), 0);
- m_menuPreset.AddItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_COMPOSITE_SHADER),
- &m_pState->m_szCompShadersText, MENUITEMTYPE_STRING,
- WASABI_API_LNGSTRINGW_BUF(IDS_MENU_EDIT_COMPOSITE_SHADER_TT, buf, 1024),
- 256, 0, &OnUserEditedCompShaders, sizeof(m_pState->m_szCompShadersText), 0);
- m_menuPreset.AddItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_UPGRADE_PRESET_PS_VERSION),
- (void*)UI_UPGRADE_PIXEL_SHADER, MENUITEMTYPE_UIMODE,
- WASABI_API_LNGSTRINGW_BUF(IDS_MENU_EDIT_UPGRADE_PRESET_PS_VERSION_TT, buf, 1024),
- 0, 0, NULL, UI_UPGRADE_PIXEL_SHADER, 0);
- m_menuPreset.AddItem(WASABI_API_LNGSTRINGW(IDS_MENU_EDIT_DO_A_PRESET_MASH_UP),
- (void*)UI_MASHUP, MENUITEMTYPE_UIMODE,
- WASABI_API_LNGSTRINGW_BUF(IDS_MENU_EDIT_DO_A_PRESET_MASH_UP_TT, buf, 1024),
- 0, 0, NULL, UI_MASHUP, 0);
-
-
- #define MEN_T(id) WASABI_API_LNGSTRINGW(id)
- #define MEN_TT(id) WASABI_API_LNGSTRINGW_BUF(id, buf, 1024)
- m_menuWave.AddItem(MEN_T(IDS_MENU_WAVE_TYPE), &m_pState->m_nWaveMode, MENUITEMTYPE_INT, MEN_TT(IDS_MENU_WAVE_TYPE_TT), 0, NUM_WAVES-1);
- m_menuWave.AddItem(MEN_T(IDS_MENU_SIZE), &m_pState->m_fWaveScale, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_SIZE_TT));
- m_menuWave.AddItem(MEN_T(IDS_MENU_SMOOTH), &m_pState->m_fWaveSmoothing,MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_SMOOTH_TT), 0.0f, 0.9f);
- m_menuWave.AddItem(MEN_T(IDS_MENU_MYSTERY_PARAMETER), &m_pState->m_fWaveParam, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_MYSTERY_PARAMETER_TT), -1.0f, 1.0f);
- m_menuWave.AddItem(MEN_T(IDS_MENU_POSITION_X), &m_pState->m_fWaveX, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_POSITION_X_TT), 0, 1);
- m_menuWave.AddItem(MEN_T(IDS_MENU_POSITION_Y), &m_pState->m_fWaveY, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_POSITION_Y_TT), 0, 1);
- m_menuWave.AddItem(MEN_T(IDS_MENU_COLOR_RED), &m_pState->m_fWaveR, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_RED_TT), 0, 1);
- m_menuWave.AddItem(MEN_T(IDS_MENU_COLOR_GREEN), &m_pState->m_fWaveG, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_GREEN_TT), 0, 1);
- m_menuWave.AddItem(MEN_T(IDS_MENU_COLOR_BLUE), &m_pState->m_fWaveB, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_BLUE_TT), 0, 1);
- m_menuWave.AddItem(MEN_T(IDS_MENU_OPACITY), &m_pState->m_fWaveAlpha, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_OPACITY_TT), 0.001f, 100.0f);
- m_menuWave.AddItem(MEN_T(IDS_MENU_USE_DOTS), &m_pState->m_bWaveDots, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_USE_DOTS_TT));
- m_menuWave.AddItem(MEN_T(IDS_MENU_DRAW_THICK), &m_pState->m_bWaveThick, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_DRAW_THICK_TT));
- m_menuWave.AddItem(MEN_T(IDS_MENU_MODULATE_OPACITY_BY_VOLUME), &m_pState->m_bModWaveAlphaByVolume, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_MODULATE_OPACITY_BY_VOLUME_TT));
- m_menuWave.AddItem(MEN_T(IDS_MENU_MODULATION_TRANSPARENT_VOLUME), &m_pState->m_fModWaveAlphaStart, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_MODULATION_TRANSPARENT_VOLUME_TT), 0.0f, 2.0f);
- m_menuWave.AddItem(MEN_T(IDS_MENU_MODULATION_OPAQUE_VOLUME), &m_pState->m_fModWaveAlphaEnd, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_MODULATION_OPAQUE_VOLUME_TT), 0.0f, 2.0f);
- m_menuWave.AddItem(MEN_T(IDS_MENU_ADDITIVE_DRAWING), &m_pState->m_bAdditiveWaves, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_ADDITIVE_DRAWING_TT));
- m_menuWave.AddItem(MEN_T(IDS_MENU_COLOR_BRIGHTENING), &m_pState->m_bMaximizeWaveColor, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_COLOR_BRIGHTENING_TT));
- m_menuAugment.AddItem(MEN_T(IDS_MENU_OUTER_BORDER_THICKNESS), &m_pState->m_fOuterBorderSize, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_OUTER_BORDER_THICKNESS_TT), 0, 0.5f);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_RED_OUTER), &m_pState->m_fOuterBorderR, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_RED_OUTER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_GREEN_OUTER), &m_pState->m_fOuterBorderG, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_GREEN_OUTER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_BLUE_OUTER), &m_pState->m_fOuterBorderB, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_BLUE_OUTER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_OPACITY_OUTER), &m_pState->m_fOuterBorderA, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_OPACITY_OUTER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_INNER_BORDER_THICKNESS), &m_pState->m_fInnerBorderSize, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_INNER_BORDER_THICKNESS_TT), 0, 0.5f);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_RED_OUTER), &m_pState->m_fInnerBorderR, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_RED_INNER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_GREEN_OUTER), &m_pState->m_fInnerBorderG, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_GREEN_INNER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_BLUE_OUTER), &m_pState->m_fInnerBorderB, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_BLUE_INNER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_OPACITY_OUTER), &m_pState->m_fInnerBorderA, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_OPACITY_INNER_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_MOTION_VECTOR_OPACITY), &m_pState->m_fMvA, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_MOTION_VECTOR_OPACITY_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_NUM_MOT_VECTORS_X), &m_pState->m_fMvX, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_NUM_MOT_VECTORS_X_TT), 0, 64);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_NUM_MOT_VECTORS_Y), &m_pState->m_fMvY, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_NUM_MOT_VECTORS_Y_TT), 0, 48);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_OFFSET_X), &m_pState->m_fMvDX, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_OFFSET_X_TT), -1, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_OFFSET_Y), &m_pState->m_fMvDY, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_OFFSET_Y_TT), -1, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_TRAIL_LENGTH), &m_pState->m_fMvL, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_TRAIL_LENGTH_TT), 0, 5);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_RED_OUTER), &m_pState->m_fMvR, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_RED_MOTION_VECTOR_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_GREEN_OUTER), &m_pState->m_fMvG, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_GREEN_MOTION_VECTOR_TT), 0, 1);
- m_menuAugment.AddItem(MEN_T(IDS_MENU_COLOR_BLUE_OUTER), &m_pState->m_fMvB, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_COLOR_BLUE_MOTION_VECTOR_TT), 0, 1);
- m_menuMotion.AddItem(MEN_T(IDS_MENU_ZOOM_AMOUNT), &m_pState->m_fZoom, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_ZOOM_AMOUNT_TT));
- m_menuMotion.AddItem(MEN_T(IDS_MENU_ZOOM_EXPONENT), &m_pState->m_fZoomExponent, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_ZOOM_EXPONENT_TT));
- m_menuMotion.AddItem(MEN_T(IDS_MENU_WARP_AMOUNT), &m_pState->m_fWarpAmount, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_WARP_AMOUNT_TT));
- m_menuMotion.AddItem(MEN_T(IDS_MENU_WARP_SCALE), &m_pState->m_fWarpScale, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_WARP_SCALE_TT));
- m_menuMotion.AddItem(MEN_T(IDS_MENU_WARP_SPEED), &m_pState->m_fWarpAnimSpeed, MENUITEMTYPE_LOGFLOAT, MEN_TT(IDS_MENU_WARP_SPEED_TT));
- m_menuMotion.AddItem(MEN_T(IDS_MENU_ROTATION_AMOUNT), &m_pState->m_fRot, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_ROTATION_AMOUNT_TT), -1.00f, 1.00f);
- m_menuMotion.AddItem(MEN_T(IDS_MENU_ROTATION_CENTER_OF_X), &m_pState->m_fRotCX, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_ROTATION_CENTER_OF_X_TT), -1.0f, 2.0f);
- m_menuMotion.AddItem(MEN_T(IDS_MENU_ROTATION_CENTER_OF_Y), &m_pState->m_fRotCY, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_ROTATION_CENTER_OF_Y_TT), -1.0f, 2.0f);
- m_menuMotion.AddItem(MEN_T(IDS_MENU_TRANSLATION_X), &m_pState->m_fXPush, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_TRANSLATION_X_TT), -1.0f, 1.0f);
- m_menuMotion.AddItem(MEN_T(IDS_MENU_TRANSLATION_Y), &m_pState->m_fYPush, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_TRANSLATION_Y_TT), -1.0f, 1.0f);
- m_menuMotion.AddItem(MEN_T(IDS_MENU_SCALING_X), &m_pState->m_fStretchX, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_SCALING_X_TT));
- m_menuMotion.AddItem(MEN_T(IDS_MENU_SCALING_Y), &m_pState->m_fStretchY, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_SCALING_Y_TT));
- m_menuPost.AddItem(MEN_T(IDS_MENU_SUSTAIN_LEVEL), &m_pState->m_fDecay, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_SUSTAIN_LEVEL_TT), 0.50f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_DARKEN_CENTER), &m_pState->m_bDarkenCenter, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_DARKEN_CENTER_TT));
- m_menuPost.AddItem(MEN_T(IDS_MENU_GAMMA_ADJUSTMENT), &m_pState->m_fGammaAdj, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_GAMMA_ADJUSTMENT_TT), 1.0f, 8.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_HUE_SHADER), &m_pState->m_fShader, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_HUE_SHADER_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_VIDEO_ECHO_ALPHA), &m_pState->m_fVideoEchoAlpha, MENUITEMTYPE_BLENDABLE, MEN_TT(IDS_MENU_VIDEO_ECHO_ALPHA_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_VIDEO_ECHO_ZOOM), &m_pState->m_fVideoEchoZoom, MENUITEMTYPE_LOGBLENDABLE, MEN_TT(IDS_MENU_VIDEO_ECHO_ZOOM_TT));
- m_menuPost.AddItem(MEN_T(IDS_MENU_VIDEO_ECHO_ORIENTATION), &m_pState->m_nVideoEchoOrientation, MENUITEMTYPE_INT, MEN_TT(IDS_MENU_VIDEO_ECHO_ORIENTATION_TT), 0.0f, 3.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_TEXTURE_WRAP), &m_pState->m_bTexWrap, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_TEXTURE_WRAP_TT));
-
- m_menuPost.AddItem(MEN_T(IDS_MENU_FILTER_INVERT), &m_pState->m_bInvert, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_FILTER_INVERT_TT));
- m_menuPost.AddItem(MEN_T(IDS_MENU_FILTER_BRIGHTEN), &m_pState->m_bBrighten, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_FILTER_BRIGHTEN_TT));
- m_menuPost.AddItem(MEN_T(IDS_MENU_FILTER_DARKEN), &m_pState->m_bDarken, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_FILTER_DARKEN_TT));
- m_menuPost.AddItem(MEN_T(IDS_MENU_FILTER_SOLARIZE), &m_pState->m_bSolarize, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_FILTER_SOLARIZE_TT));
- m_menuPost.AddItem(MEN_T(IDS_MENU_BLUR1_EDGE_DARKEN_AMOUNT),&m_pState->m_fBlur1EdgeDarken, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BLUR1_EDGE_DARKEN_AMOUNT_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_BLUR1_MIN_COLOR_VALUE), &m_pState->m_fBlur1Min, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BLUR1_MIN_COLOR_VALUE_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_BLUR1_MAX_COLOR_VALUE), &m_pState->m_fBlur1Max, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BLUR1_MAX_COLOR_VALUE_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_BLUR2_MIN_COLOR_VALUE), &m_pState->m_fBlur2Min, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BLUR2_MIN_COLOR_VALUE_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_BLUR2_MAX_COLOR_VALUE), &m_pState->m_fBlur2Max, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BLUR2_MAX_COLOR_VALUE_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_BLUR3_MIN_COLOR_VALUE), &m_pState->m_fBlur3Min, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BLUR3_MIN_COLOR_VALUE_TT), 0.0f, 1.0f);
- m_menuPost.AddItem(MEN_T(IDS_MENU_BLUR3_MAX_COLOR_VALUE), &m_pState->m_fBlur3Max, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BLUR3_MAX_COLOR_VALUE_TT), 0.0f, 1.0f);
- for (i=0; i<MAX_CUSTOM_WAVES; i++)
- {
-
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_ENABLED), &m_pState->m_wave[i].enabled, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_ENABLED_TT));
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_NUMBER_OF_SAMPLES),&m_pState->m_wave[i].samples, MENUITEMTYPE_INT, MEN_TT(IDS_MENU_NUMBER_OF_SAMPLES_TT), 2, 512);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_L_R_SEPARATION), &m_pState->m_wave[i].sep, MENUITEMTYPE_INT, MEN_TT(IDS_MENU_L_R_SEPARATION_TT), 0, 256);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_SCALING), &m_pState->m_wave[i].scaling, MENUITEMTYPE_LOGFLOAT, MEN_TT(IDS_MENU_SCALING_TT));
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_SMOOTH), &m_pState->m_wave[i].smoothing, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_SMOOTHING_TT), 0, 1);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_COLOR_RED), &m_pState->m_wave[i].r, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_COLOR_RED_TT), 0, 1);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_COLOR_GREEN), &m_pState->m_wave[i].g, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_COLOR_GREEN_TT), 0, 1);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_COLOR_BLUE), &m_pState->m_wave[i].b, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_COLOR_BLUE_TT), 0, 1);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_OPACITY), &m_pState->m_wave[i].a, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_OPACITY_WAVE_TT), 0, 1);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_USE_SPECTRUM), &m_pState->m_wave[i].bSpectrum, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_USE_SPECTRUM_TT));
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_USE_DOTS), &m_pState->m_wave[i].bUseDots, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_USE_DOTS_WAVE_TT));
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_DRAW_THICK), &m_pState->m_wave[i].bDrawThick,MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_DRAW_THICK_WAVE_TT));
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_ADDITIVE_DRAWING), &m_pState->m_wave[i].bAdditive, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_ADDITIVE_DRAWING_WAVE_TT));
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_EXPORT_TO_FILE), (void*)UI_EXPORT_WAVE, MENUITEMTYPE_UIMODE,MEN_TT(IDS_MENU_EXPORT_TO_FILE_TT), 0, 0, NULL, UI_EXPORT_WAVE, i);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_IMPORT_FROM_FILE), (void*)UI_IMPORT_WAVE, MENUITEMTYPE_UIMODE,MEN_TT(IDS_MENU_IMPORT_FROM_FILE_TT), 0, 0, NULL, UI_IMPORT_WAVE, i);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_EDIT_INIT_CODE), &m_pState->m_wave[i].m_szInit, MENUITEMTYPE_STRING,MEN_TT(IDS_MENU_EDIT_INIT_CODE_TT), 256, 0, &OnUserEditedWavecodeInit, sizeof(m_pState->m_wave[i].m_szInit), 0);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_EDIT_PER_FRAME_CODE), &m_pState->m_wave[i].m_szPerFrame, MENUITEMTYPE_STRING, MEN_TT(IDS_MENU_EDIT_PER_FRAME_CODE_TT), 256, 0, &OnUserEditedWavecode, sizeof(m_pState->m_wave[i].m_szPerFrame), 0);
- m_menuWavecode[i].AddItem(MEN_T(IDS_MENU_EDIT_PER_POINT_CODE), &m_pState->m_wave[i].m_szPerPoint, MENUITEMTYPE_STRING, MEN_TT(IDS_MENU_EDIT_PER_POINT_CODE_TT), 256, 0, &OnUserEditedWavecode, sizeof(m_pState->m_wave[i].m_szPerPoint), 0);
- }
- for (i=0; i<MAX_CUSTOM_SHAPES; i++)
- {
-
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_ENABLED), &m_pState->m_shape[i].enabled, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_ENABLED_SHAPE_TT));
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_NUMBER_OF_INSTANCES), &m_pState->m_shape[i].instances,MENUITEMTYPE_INT, MEN_TT(IDS_MENU_NUMBER_OF_INSTANCES_TT), 1, 1024);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_NUMBER_OF_SIDES), &m_pState->m_shape[i].sides, MENUITEMTYPE_INT, MEN_TT(IDS_MENU_NUMBER_OF_SIDES_TT), 3, 100);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_DRAW_THICK), &m_pState->m_shape[i].thickOutline, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_DRAW_THICK_SHAPE_TT));
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_ADDITIVE_DRAWING), &m_pState->m_shape[i].additive, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_ADDITIVE_DRAWING_SHAPE_TT));
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_X_POSITION), &m_pState->m_shape[i].x, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_X_POSITION_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_Y_POSITION), &m_pState->m_shape[i].y, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_Y_POSITION_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_RADIUS), &m_pState->m_shape[i].rad, MENUITEMTYPE_LOGFLOAT, MEN_TT(IDS_MENU_RADIUS_TT));
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_ANGLE), &m_pState->m_shape[i].ang, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_ANGLE_TT), 0, 3.1415927f*2.0f);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_TEXTURED), &m_pState->m_shape[i].textured, MENUITEMTYPE_BOOL, MEN_TT(IDS_MENU_TEXTURED_TT));
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_TEXTURE_ZOOM), &m_pState->m_shape[i].tex_zoom, MENUITEMTYPE_LOGFLOAT, MEN_TT(IDS_MENU_TEXTURE_ZOOM_TT));
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_TEXTURE_ANGLE), &m_pState->m_shape[i].tex_ang, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_TEXTURE_ANGLE_TT), 0, 3.1415927f*2.0f);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_INNER_COLOR_RED), &m_pState->m_shape[i].r, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_INNER_COLOR_RED_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_INNER_COLOR_GREEN), &m_pState->m_shape[i].g, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_INNER_COLOR_GREEN_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_INNER_COLOR_BLUE), &m_pState->m_shape[i].b, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_INNER_COLOR_BLUE_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_INNER_OPACITY), &m_pState->m_shape[i].a, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_INNER_OPACITY_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_OUTER_COLOR_RED), &m_pState->m_shape[i].r2, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_OUTER_COLOR_RED_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_OUTER_COLOR_GREEN), &m_pState->m_shape[i].g2, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_OUTER_COLOR_GREEN_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_OUTER_COLOR_BLUE), &m_pState->m_shape[i].b2, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_OUTER_COLOR_BLUE_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_OUTER_OPACITY), &m_pState->m_shape[i].a2, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_OUTER_OPACITY_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_BORDER_COLOR_RED), &m_pState->m_shape[i].border_r, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BORDER_COLOR_RED_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_BORDER_COLOR_GREEN), &m_pState->m_shape[i].border_g, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BORDER_COLOR_GREEN_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_BORDER_COLOR_BLUE), &m_pState->m_shape[i].border_b, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BORDER_COLOR_BLUE_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_BORDER_OPACITY), &m_pState->m_shape[i].border_a, MENUITEMTYPE_FLOAT, MEN_TT(IDS_MENU_BORDER_OPACITY_TT), 0, 1);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_EXPORT_TO_FILE), NULL, MENUITEMTYPE_UIMODE, MEN_TT(IDS_MENU_EXPORT_TO_FILE_SHAPE_TT), 0, 0, NULL, UI_EXPORT_SHAPE, i);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_IMPORT_FROM_FILE), NULL, MENUITEMTYPE_UIMODE, MEN_TT(IDS_MENU_IMPORT_FROM_FILE_SHAPE_TT), 0, 0, NULL, UI_IMPORT_SHAPE, i);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_EDIT_INIT_CODE), &m_pState->m_shape[i].m_szInit, MENUITEMTYPE_STRING, MEN_TT(IDS_MENU_EDIT_INIT_CODE_SHAPE_TT), 256, 0, &OnUserEditedShapecodeInit, sizeof(m_pState->m_shape[i].m_szInit), 0);
- m_menuShapecode[i].AddItem(MEN_T(IDS_MENU_EDIT_PER_FRAME_INSTANCE_CODE), &m_pState->m_shape[i].m_szPerFrame, MENUITEMTYPE_STRING, MEN_TT(IDS_MENU_EDIT_PER_FRAME_INSTANCE_CODE_TT), 256, 0, &OnUserEditedShapecode, sizeof(m_pState->m_shape[i].m_szPerFrame), 0);
-
- }
- }
- void CPlugin::WriteRealtimeConfig()
- {
- WritePrivateProfileIntW(m_bShowFPS, L"bShowFPS",GetConfigIniFile(), L"settings");
- WritePrivateProfileIntW(m_bShowRating, L"bShowRating",GetConfigIniFile(), L"settings");
- WritePrivateProfileIntW(m_bShowPresetInfo, L"bShowPresetInfo",GetConfigIniFile(), L"settings");
- WritePrivateProfileIntW(m_bShowSongTitle, L"bShowSongTitle",GetConfigIniFile(), L"settings");
- WritePrivateProfileIntW(m_bShowSongTime, L"bShowSongTime",GetConfigIniFile(), L"settings");
- WritePrivateProfileIntW(m_bShowSongLen, L"bShowSongLen",GetConfigIniFile(), L"settings");
- }
- void CPlugin::dumpmsg(wchar_t *s)
- {
- #if _DEBUG
- OutputDebugStringW(s);
- if (s[0])
- {
- int len = lstrlenW(s);
- if (s[len-1] != L'\n')
- OutputDebugStringW(L"\n");
- }
- #endif
- }
- void CPlugin::PrevPreset(float fBlendTime)
- {
- if (m_bSequentialPresetOrder)
- {
- m_nCurrentPreset--;
- if (m_nCurrentPreset < m_nDirs)
- m_nCurrentPreset = m_nPresets-1;
- if (m_nCurrentPreset >= m_nPresets)
- m_nCurrentPreset = m_nDirs;
- wchar_t szFile[MAX_PATH];
- lstrcpyW(szFile, m_szPresetDir);
- lstrcatW(szFile, m_presets[m_nCurrentPreset].szFilename.c_str());
- LoadPreset(szFile, fBlendTime);
- }
- else
- {
- int prev = (m_presetHistoryPos-1 + PRESET_HIST_LEN) % PRESET_HIST_LEN;
- if (m_presetHistoryPos != m_presetHistoryBackFence)
- {
- m_presetHistoryPos = prev;
- LoadPreset( m_presetHistory[m_presetHistoryPos].c_str(), fBlendTime);
- }
- }
- }
- void CPlugin::NextPreset(float fBlendTime)
- {
- LoadRandomPreset(fBlendTime);
- }
- void CPlugin::LoadRandomPreset(float fBlendTime)
- {
-
- if (m_nPresets - m_nDirs == 0)
- {
- if (m_nPresets - m_nDirs == 0)
- {
-
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_ERROR_NO_PRESET_FILE_FOUND_IN_X_MILK), m_szPresetDir);
- AddError(buf, 6.0f, ERR_MISC, true);
-
- if (m_UI_mode == UI_REGULAR || m_UI_mode == UI_MENU)
- {
- m_UI_mode = UI_LOAD;
- m_bUserPagedUp = false;
- m_bUserPagedDown = false;
- }
- return;
- }
- }
-
- bool bHistoryEmpty = (m_presetHistoryFwdFence==m_presetHistoryBackFence);
-
- if (!m_bSequentialPresetOrder)
- {
- int next = (m_presetHistoryPos+1) % PRESET_HIST_LEN;
- if (next != m_presetHistoryFwdFence && !bHistoryEmpty)
- {
- m_presetHistoryPos = next;
- LoadPreset( m_presetHistory[m_presetHistoryPos].c_str(), fBlendTime);
- return;
- }
- }
-
-
-
-
-
- if (m_bSequentialPresetOrder)
- {
- m_nCurrentPreset++;
- if (m_nCurrentPreset < m_nDirs || m_nCurrentPreset >= m_nPresets)
- m_nCurrentPreset = m_nDirs;
- }
- else
- {
-
- if (!m_bEnableRating || (m_presets[m_nPresets - 1].fRatingCum < 0.1f))
- {
- m_nCurrentPreset = m_nDirs + (warand() % (m_nPresets - m_nDirs));
- }
- else
- {
- float cdf_pos = (warand() % 14345)/14345.0f*m_presets[m_nPresets - 1].fRatingCum;
-
- if (cdf_pos < m_presets[m_nDirs].fRatingCum)
- {
- m_nCurrentPreset = m_nDirs;
- }
- else
- {
- int lo = m_nDirs;
- int hi = m_nPresets;
- while (lo + 1 < hi)
- {
- int mid = (lo+hi)/2;
- if (m_presets[mid].fRatingCum > cdf_pos)
- hi = mid;
- else
- lo = mid;
- }
- m_nCurrentPreset = hi;
- }
- }
- }
-
-
- wchar_t szFile[MAX_PATH] = {0};
- lstrcpyW(szFile, m_szPresetDir);
- lstrcatW(szFile, m_presets[m_nCurrentPreset].szFilename.c_str());
- if (!bHistoryEmpty)
- m_presetHistoryPos = (m_presetHistoryPos+1) % PRESET_HIST_LEN;
- LoadPreset(szFile, fBlendTime);
- }
- void CPlugin::RandomizeBlendPattern()
- {
- if (!m_vertinfo)
- return;
-
-
- int mixtype = 1 + (warand()%3);
- if (mixtype==0)
- {
-
- int nVert = 0;
- for (int y=0; y<=m_nGridY; y++)
- {
- for (int x=0; x<=m_nGridX; x++)
- {
- m_vertinfo[nVert].a = 1;
- m_vertinfo[nVert].c = 0;
- nVert++;
- }
- }
- }
- else if (mixtype==1)
- {
-
- float ang = FRAND*6.28f;
- float vx = cosf(ang);
- float vy = sinf(ang);
- float band = 0.1f + 0.2f*FRAND;
- float inv_band = 1.0f/band;
-
- int nVert = 0;
- for (int y=0; y<=m_nGridY; y++)
- {
- float fy = (y/(float)m_nGridY)*m_fAspectY;
- for (int x=0; x<=m_nGridX; x++)
- {
- float fx = (x/(float)m_nGridX)*m_fAspectX;
-
-
- float t = (fx-0.5f)*vx + (fy-0.5f)*vy + 0.5f;
- t = (t-0.5f)/sqrtf(2.0f) + 0.5f;
- m_vertinfo[nVert].a = inv_band * (1 + band);
- m_vertinfo[nVert].c = -inv_band + inv_band*t;
- nVert++;
- }
- }
- }
- else if (mixtype==2)
- {
-
- float band = 0.12f + 0.13f*FRAND;
- float inv_band = 1.0f/band;
-
- m_vertinfo[ 0].c = FRAND;
- m_vertinfo[ m_nGridX].c = FRAND;
- m_vertinfo[m_nGridY*(m_nGridX+1) ].c = FRAND;
- m_vertinfo[m_nGridY*(m_nGridX+1) + m_nGridX].c = FRAND;
- GenPlasma(0, m_nGridX, 0, m_nGridY, 0.25f);
-
- float minc = m_vertinfo[0].c;
- float maxc = m_vertinfo[0].c;
- int x,y,nVert;
-
- nVert = 0;
- for (y=0; y<=m_nGridY; y++)
- {
- for (x=0; x<=m_nGridX; x++)
- {
- if (minc > m_vertinfo[nVert].c)
- minc = m_vertinfo[nVert].c;
- if (maxc < m_vertinfo[nVert].c)
- maxc = m_vertinfo[nVert].c;
- nVert++;
- }
- }
- float mult = 1.0f/(maxc-minc);
- nVert = 0;
- for (y=0; y<=m_nGridY; y++)
- {
- for (x=0; x<=m_nGridX; x++)
- {
- float t = (m_vertinfo[nVert].c - minc)*mult;
- m_vertinfo[nVert].a = inv_band * (1 + band);
- m_vertinfo[nVert].c = -inv_band + inv_band*t;
- nVert++;
- }
- }
- }
- else if (mixtype==3)
- {
-
- float band = 0.02f + 0.14f*FRAND + 0.34f*FRAND;
- float inv_band = 1.0f/band;
- float dir = (float)((warand()%2)*2 - 1);
- int nVert = 0;
- for (int y=0; y<=m_nGridY; y++)
- {
- float dy = (y/(float)m_nGridY - 0.5f)*m_fAspectY;
- for (int x=0; x<=m_nGridX; x++)
- {
- float dx = (x/(float)m_nGridX - 0.5f)*m_fAspectX;
- float t = sqrtf(dx*dx + dy*dy)*1.41421f;
- if (dir==-1)
- t = 1-t;
- m_vertinfo[nVert].a = inv_band * (1 + band);
- m_vertinfo[nVert].c = -inv_band + inv_band*t;
- nVert++;
- }
- }
- }
- }
- void CPlugin::GenPlasma(int x0, int x1, int y0, int y1, float dt)
- {
- int midx = (x0+x1)/2;
- int midy = (y0+y1)/2;
- float t00 = m_vertinfo[y0*(m_nGridX+1) + x0].c;
- float t01 = m_vertinfo[y0*(m_nGridX+1) + x1].c;
- float t10 = m_vertinfo[y1*(m_nGridX+1) + x0].c;
- float t11 = m_vertinfo[y1*(m_nGridX+1) + x1].c;
- if (y1-y0 >= 2)
- {
- if (x0==0)
- m_vertinfo[midy*(m_nGridX+1) + x0].c = 0.5f*(t00 + t10) + (FRAND*2-1)*dt*m_fAspectY;
- m_vertinfo[midy*(m_nGridX+1) + x1].c = 0.5f*(t01 + t11) + (FRAND*2-1)*dt*m_fAspectY;
- }
- if (x1-x0 >= 2)
- {
- if (y0==0)
- m_vertinfo[y0*(m_nGridX+1) + midx].c = 0.5f*(t00 + t01) + (FRAND*2-1)*dt*m_fAspectX;
- m_vertinfo[y1*(m_nGridX+1) + midx].c = 0.5f*(t10 + t11) + (FRAND*2-1)*dt*m_fAspectX;
- }
- if (y1-y0 >= 2 && x1-x0 >= 2)
- {
-
- t00 = m_vertinfo[midy*(m_nGridX+1) + x0].c;
- t01 = m_vertinfo[midy*(m_nGridX+1) + x1].c;
- t10 = m_vertinfo[y0*(m_nGridX+1) + midx].c;
- t11 = m_vertinfo[y1*(m_nGridX+1) + midx].c;
- m_vertinfo[midy*(m_nGridX+1) + midx].c = 0.25f*(t10 + t11 + t00 + t01) + (FRAND*2-1)*dt;
- GenPlasma(x0, midx, y0, midy, dt*0.5f);
- GenPlasma(midx, x1, y0, midy, dt*0.5f);
- GenPlasma(x0, midx, midy, y1, dt*0.5f);
- GenPlasma(midx, x1, midy, y1, dt*0.5f);
- }
- }
- void CPlugin::LoadPreset(const wchar_t *szPresetFilename, float fBlendTime)
- {
-
- if (m_nFramesSinceResize > 4)
- ClearErrors(ERR_PRESET);
-
-
- if (GetFileAttributesW(szPresetFilename) == 0xFFFFFFFF)
- {
- const wchar_t *p = wcsrchr(szPresetFilename, L'\\');
- p = (p) ? p+1 : szPresetFilename;
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_ERROR_PRESET_NOT_FOUND_X), p);
- AddError(buf, 6.0f, ERR_PRESET, true);
- return;
- }
- if ( !m_bSequentialPresetOrder )
- {
-
- if ( m_presetHistoryFwdFence == m_presetHistoryPos )
- {
-
- m_presetHistory[m_presetHistoryPos] = szPresetFilename;
- m_presetHistoryFwdFence = (m_presetHistoryFwdFence+1) % PRESET_HIST_LEN;
-
- if (m_presetHistoryBackFence == m_presetHistoryFwdFence)
- m_presetHistoryBackFence = (m_presetHistoryBackFence+1) % PRESET_HIST_LEN;
- }
- else
- {
-
- }
- }
-
- if (!wcscmp(m_pState->m_szDesc, INVALID_PRESET_DESC))
- fBlendTime = 0;
- if (fBlendTime == 0)
- {
-
- if (szPresetFilename != m_szCurrentPresetFile)
- lstrcpyW(m_szCurrentPresetFile, szPresetFilename);
-
- CState *temp = m_pState;
- m_pState = m_pOldState;
- m_pOldState = temp;
- DWORD ApplyFlags = STATE_ALL;
- ApplyFlags ^= (m_bWarpShaderLock ? STATE_WARP : 0);
- ApplyFlags ^= (m_bCompShaderLock ? STATE_COMP : 0);
-
- m_pState->Import(m_szCurrentPresetFile, GetTime(), m_pOldState, ApplyFlags);
-
- if (fBlendTime >= 0.001f)
- {
- RandomizeBlendPattern();
- m_pState->StartBlendFrom(m_pOldState, GetTime(), fBlendTime);
- }
- m_fPresetStartTime = GetTime();
- m_fNextPresetTime = -1.0f;
-
- SafeRelease( m_OldShaders.comp.ptr );
- SafeRelease( m_OldShaders.warp.ptr );
- SafeRelease( m_OldShaders.comp.CT );
- SafeRelease( m_OldShaders.warp.CT );
- m_OldShaders = m_shaders;
- ZeroMemory(&m_shaders, sizeof(PShaderSet));
-
- LoadShaders(&m_shaders, m_pState, false);
- OnFinishedLoadingPreset();
- }
- else
- {
-
- SafeRelease( m_NewShaders.comp.ptr );
- SafeRelease( m_NewShaders.warp.ptr );
- ZeroMemory(&m_NewShaders, sizeof(PShaderSet));
- DWORD ApplyFlags = STATE_ALL;
- ApplyFlags ^= (m_bWarpShaderLock ? STATE_WARP : 0);
- ApplyFlags ^= (m_bCompShaderLock ? STATE_COMP : 0);
-
- m_pNewState->Import(szPresetFilename, GetTime(), m_pOldState, ApplyFlags);
-
- m_nLoadingPreset = 1;
- m_fLoadingPresetBlendTime = fBlendTime;
- lstrcpyW(m_szLoadingPreset, szPresetFilename);
- }
- }
- void CPlugin::OnFinishedLoadingPreset()
- {
-
- SetMenusForPresetVersion( m_pState->m_nWarpPSVersion, m_pState->m_nCompPSVersion );
- m_nPresetsLoadedTotal++;
-
- for (int mash=0; mash<MASH_SLOTS; mash++)
- m_nMashPreset[mash] = m_nCurrentPreset;
- }
- void CPlugin::LoadPresetTick()
- {
- if (m_nLoadingPreset == 2 || m_nLoadingPreset == 5)
- {
-
- LoadShaders(&m_NewShaders, m_pNewState, true);
- }
- else if (m_nLoadingPreset == 8)
- {
-
- lstrcpyW(m_szCurrentPresetFile, m_szLoadingPreset);
- m_szLoadingPreset[0] = 0;
-
- CState *temp = m_pState;
- m_pState = m_pOldState;
- m_pOldState = temp;
- temp = m_pState;
- m_pState = m_pNewState;
- m_pNewState = temp;
- RandomizeBlendPattern();
-
- m_pState->StartBlendFrom(m_pOldState, GetTime(), m_fLoadingPresetBlendTime);
- m_fPresetStartTime = GetTime();
- m_fNextPresetTime = -1.0f;
-
- SafeRelease( m_OldShaders.comp.ptr );
- SafeRelease( m_OldShaders.warp.ptr );
- m_OldShaders = m_shaders;
- m_shaders = m_NewShaders;
- ZeroMemory(&m_NewShaders, sizeof(PShaderSet));
-
- m_nLoadingPreset = 0;
- OnFinishedLoadingPreset();
- }
- if (m_nLoadingPreset > 0)
- m_nLoadingPreset++;
- }
- void CPlugin::SeekToPreset(wchar_t cStartChar)
- {
- if (cStartChar >= L'a' && cStartChar <= L'z')
- cStartChar -= L'a' - L'A';
- for (int i = m_nDirs; i < m_nPresets; i++)
- {
- wchar_t ch = m_presets[i].szFilename.c_str()[0];
- if (ch >= L'a' && ch <= L'z')
- ch -= L'a' - L'A';
- if (ch == cStartChar)
- {
- m_nPresetListCurPos = i;
- return;
- }
- }
- }
- void CPlugin::FindValidPresetDir()
- {
- swprintf(m_szPresetDir, L"%spresets\\", m_szMilkdrop2Path );
- if (GetFileAttributesW(m_szPresetDir) != -1)
- return;
- lstrcpyW(m_szPresetDir, m_szMilkdrop2Path);
- if (GetFileAttributesW(m_szPresetDir) != -1)
- return;
- lstrcpyW(m_szPresetDir, GetPluginsDirPath());
- if (GetFileAttributesW(m_szPresetDir) != -1)
- return;
- lstrcpyW(m_szPresetDir, L"c:\\program files\\winamp\\");
- if (GetFileAttributesW(m_szPresetDir) != -1)
- return;
- lstrcpyW(m_szPresetDir, L"c:\\program files\\");
- if (GetFileAttributesW(m_szPresetDir) != -1)
- return;
- lstrcpyW(m_szPresetDir, L"c:\\");
- }
- char* NextLine(char* p)
- {
-
-
-
- if (!p)
- return NULL;
- char* s = p;
- while (*s != '\r' && *s != '\n' && *s != 0)
- s++;
- while (*s == '\r' || *s == '\n')
- s++;
- if (*s==0)
- return NULL;
- return s;
- }
- static unsigned int WINAPI __UpdatePresetList(void* lpVoid)
- {
-
- DWORD flags = (DWORD)lpVoid;
- bool bForce = (flags & 1) ? true : false;
- bool bTryReselectCurrentPreset = (flags & 2) ? true : false;
- WIN32_FIND_DATAW fd;
- ZeroMemory(&fd, sizeof(fd));
- HANDLE h = INVALID_HANDLE_VALUE;
- int nTry = 0;
- bool bRetrying = false;
- EnterCriticalSection(&g_cs);
- retry:
-
- if (GetFileAttributesW(g_plugin.m_szPresetDir) == -1)
- {
-
- g_plugin.FindValidPresetDir();
- }
-
-
- wchar_t szMask[MAX_PATH];
- swprintf(szMask, L"%s*.*", g_plugin.m_szPresetDir);
- if (bForce || !g_plugin.m_szUpdatePresetMask[0] || wcscmp(szMask, g_plugin.m_szUpdatePresetMask))
- {
-
- if (h != INVALID_HANDLE_VALUE)
- FindClose(h);
- h = INVALID_HANDLE_VALUE;
- g_plugin.m_bPresetListReady = false;
- lstrcpyW(g_plugin.m_szUpdatePresetMask, szMask);
- ZeroMemory(&fd, sizeof(fd));
- g_plugin.m_nPresets = 0;
- g_plugin.m_nDirs = 0;
- g_plugin.m_presets.clear();
-
-
- if( (h = FindFirstFileW(g_plugin.m_szUpdatePresetMask, &fd )) == INVALID_HANDLE_VALUE )
- {
-
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_ERROR_NO_PRESET_FILES_OR_DIRS_FOUND_IN_X), g_plugin.m_szPresetDir);
- g_plugin.AddError(buf, 4.0f, ERR_MISC, true);
- if (bRetrying)
- {
- LeaveCriticalSection(&g_cs);
- g_bThreadAlive = false;
- _endthreadex(0);
- return 0;
- }
- g_plugin.FindValidPresetDir();
- bRetrying = true;
- goto retry;
- }
- g_plugin.AddError(WASABI_API_LNGSTRINGW(IDS_SCANNING_PRESETS), 8.0f, ERR_SCANNING_PRESETS, false);
- }
- if (g_plugin.m_bPresetListReady)
- {
- LeaveCriticalSection(&g_cs);
- g_bThreadAlive = false;
- _endthreadex(0);
- return 0;
- }
- int nMaxPSVersion = g_plugin.m_nMaxPSVersion;
- wchar_t szPresetDir[MAX_PATH];
- lstrcpyW(szPresetDir, g_plugin.m_szPresetDir);
- LeaveCriticalSection(&g_cs);
- PresetList temp_presets;
- int temp_nDirs = 0;
- int temp_nPresets = 0;
-
-
- while (!g_bThreadShouldQuit && h != INVALID_HANDLE_VALUE)
- {
- bool bSkip = false;
- bool bIsDir = (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
- float fRating = 0;
- wchar_t szFilename[512];
- lstrcpyW(szFilename, fd.cFileName);
- if (bIsDir)
- {
-
- if (wcscmp(fd.cFileName, L".")==0)
- bSkip = true;
- else
- swprintf(szFilename, L"*%s", fd.cFileName);
- }
- else
- {
-
- int len = lstrlenW(fd.cFileName);
- if (len < 5 || wcsicmp(fd.cFileName + len - 5, L".milk") != 0)
- bSkip = true;
-
-
- if (!bSkip)
- {
-
-
-
-
- wchar_t szFullPath[MAX_PATH];
- swprintf(szFullPath, L"%s%s", szPresetDir, fd.cFileName);
- FILE* f = _wfopen(szFullPath, L"r");
- if (!f)
- bSkip = true;
- else {
- #define PRESET_HEADER_SCAN_BYTES 160
- char szLine[PRESET_HEADER_SCAN_BYTES];
- char *p = szLine;
- int bytes_to_read = sizeof(szLine)-1;
- int count = fread(szLine, bytes_to_read, 1, f);
- if (count < 1) {
- fseek(f, SEEK_SET, 0);
- count = fread(szLine, 1, bytes_to_read, f);
- szLine[ count ] = 0;
- }
- else
- szLine[bytes_to_read-1] = 0;
- bool bScanForPreset00AndRating = false;
- bool bRatingKnown = false;
-
-
-
-
-
- if (!strncmp(p, "MILKDROP_PRESET_VERSION", 23))
- {
- p = NextLine(p);
- int ps_version = 2;
- if (p && !strncmp(p, "PSVERSION", 9))
- {
- sscanf(&p[10], "%d", &ps_version);
- if (ps_version > nMaxPSVersion)
- bSkip = true;
- else
- {
- p = NextLine(p);
- bScanForPreset00AndRating = true;
- }
- }
- }
- else
- {
-
- bScanForPreset00AndRating = true;
- }
-
-
- int reps = (bScanForPreset00AndRating) ? 10 : 0;
- for (int z=0; z<reps; z++)
- {
- if (p && !strncmp(p, "[preset00]", 10))
- {
- p = NextLine(p);
- if (p && !strncmp(p, "fRating=", 8))
- {
- _sscanf_l(&p[8], "%f", g_use_C_locale, &fRating);
- bRatingKnown = true;
- break;
- }
- }
- p = NextLine(p);
- }
- fclose(f);
- if (!bRatingKnown)
- fRating = GetPrivateProfileFloatW(L"preset00", L"fRating", 3.0f, szFullPath);
- fRating = max(0.0f, min(5.0f, fRating));
- }
- }
- }
- if (!bSkip)
- {
- float fPrevPresetRatingCum = 0;
- if (temp_nPresets > 0)
- fPrevPresetRatingCum += temp_presets[temp_nPresets-1].fRatingCum;
- PresetInfo x;
- x.szFilename = szFilename;
- x.fRatingThis = fRating;
- x.fRatingCum = fPrevPresetRatingCum + fRating;
- temp_presets.push_back(x);
- temp_nPresets++;
- if (bIsDir)
- temp_nDirs++;
- }
- if (!FindNextFileW(h, &fd))
- {
- FindClose(h);
- h = INVALID_HANDLE_VALUE;
- break;
- }
-
- #define PRESET_UPDATE_INTERVAL 64
- if (temp_nPresets == 30 || ((temp_nPresets % PRESET_UPDATE_INTERVAL)==0))
- {
- EnterCriticalSection(&g_cs);
-
-
- for (int i=g_plugin.m_nPresets; i<temp_nPresets; i++)
- g_plugin.m_presets.push_back(temp_presets[i]);
- g_plugin.m_nPresets = temp_nPresets;
- g_plugin.m_nDirs = temp_nDirs;
-
- LeaveCriticalSection(&g_cs);
- }
- }
- if (g_bThreadShouldQuit)
- {
-
- g_bThreadAlive = false;
- _endthreadex(0);
- return 0;
- }
- EnterCriticalSection(&g_cs);
-
- for (int i=g_plugin.m_nPresets; i<temp_nPresets; i++)
- g_plugin.m_presets.push_back(temp_presets[i]);
- g_plugin.m_nPresets = temp_nPresets;
- g_plugin.m_nDirs = temp_nDirs;
- g_plugin.m_bPresetListReady = true;
- if (g_plugin.m_bPresetListReady && g_plugin.m_nPresets == 0)
- {
-
-
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_ERROR_NO_PRESET_FILES_OR_DIRS_FOUND_IN_X), g_plugin.m_szPresetDir);
- g_plugin.AddError(buf, 4.0f, ERR_MISC, true);
- if (bRetrying)
- {
- LeaveCriticalSection(&g_cs);
- g_bThreadAlive = false;
- _endthreadex(0);
- return 0;
- }
- g_plugin.FindValidPresetDir();
- bRetrying = true;
- goto retry;
- }
- if (g_plugin.m_bPresetListReady)
- {
- g_plugin.MergeSortPresets(0, g_plugin.m_nPresets-1);
-
- g_plugin.m_presets[0].fRatingCum = g_plugin.m_presets[0].fRatingThis;
- for (int i=0; i<g_plugin.m_nPresets; i++)
- g_plugin.m_presets[i].fRatingCum = g_plugin.m_presets[i-1].fRatingCum + g_plugin.m_presets[i].fRatingThis;
-
- g_plugin.ClearErrors(ERR_SCANNING_PRESETS);
-
- g_plugin.m_nPresetListCurPos = 0;
- if (bTryReselectCurrentPreset)
- {
- if (g_plugin.m_szCurrentPresetFile[0])
- {
-
- wchar_t *p = wcsrchr(g_plugin.m_szCurrentPresetFile, L'\\');
- p = (p) ? (p+1) : g_plugin.m_szCurrentPresetFile;
- for (int i=g_plugin.m_nDirs; i<g_plugin.m_nPresets; i++)
- {
- if (wcscmp(p, g_plugin.m_presets[i].szFilename.c_str())==0) {
- g_plugin.m_nPresetListCurPos = i;
- break;
- }
- }
- }
- }
- }
- LeaveCriticalSection(&g_cs);
- g_bThreadAlive = false;
- _endthreadex(0);
- return 0;
- }
- void CPlugin::UpdatePresetList(bool bBackground, bool bForce, bool bTryReselectCurrentPreset)
- {
-
- if (bForce)
- {
- if (g_bThreadAlive)
- CancelThread(3000);
- }
- else
- {
- if (bBackground && (g_bThreadAlive || m_bPresetListReady))
- return;
- if (!bBackground && m_bPresetListReady)
- return;
- }
- assert(!g_bThreadAlive);
-
- DWORD flags = (bForce ? 1 : 0) | (bTryReselectCurrentPreset ? 2 : 0);
- g_bThreadShouldQuit = false;
- g_bThreadAlive = true;
- g_hThread = (HANDLE)_beginthreadex(NULL,0,__UpdatePresetList,(void*)flags,0,0);
- if (!bBackground)
- {
-
- SetThreadPriority(g_hThread,THREAD_PRIORITY_HIGHEST);
-
- while (g_bThreadAlive)
- Sleep(30);
-
- assert(g_hThread != INVALID_HANDLE_VALUE);
- CloseHandle(g_hThread);
- g_hThread = INVALID_HANDLE_VALUE;
- }
- else
- {
-
-
-
- SetThreadPriority(g_hThread,THREAD_PRIORITY_HIGHEST);
-
-
-
- while (g_bThreadAlive)
- {
- Sleep(30);
- EnterCriticalSection(&g_cs);
- int nPresets = g_plugin.m_nPresets;
- LeaveCriticalSection(&g_cs);
- if (nPresets >= 30)
- break;
- }
- if (g_bThreadAlive)
- {
-
-
-
- SetThreadPriority(g_hThread,THREAD_PRIORITY_ABOVE_NORMAL);
- }
- }
- return;
- }
- void CPlugin::MergeSortPresets(int left, int right)
- {
-
- int nItems = right-left+1;
- if (nItems > 2)
- {
-
- int mid = (left+right)/2;
- MergeSortPresets(left, mid);
- MergeSortPresets(mid+1, right);
-
-
- int a = left;
- int b = mid + 1;
- while (a <= mid && b <= right)
- {
- bool bSwap;
-
- int nSpecial = 0;
- if (m_presets[a].szFilename.c_str()[0] == '*') nSpecial++;
- if (m_presets[b].szFilename.c_str()[0] == '*') nSpecial++;
- if (nSpecial == 1)
- {
- bSwap = (m_presets[b].szFilename.c_str()[0] == '*');
- }
- else
- {
- bSwap = (mystrcmpiW(m_presets[a].szFilename.c_str(), m_presets[b].szFilename.c_str()) > 0);
- }
- if (bSwap)
- {
- PresetInfo temp = m_presets[b];
- for (int k=b; k>a; k--)
- m_presets[k] = m_presets[k-1];
- m_presets[a] = temp;
- mid++;
- b++;
- }
- a++;
- }
- }
- else if (nItems == 2)
- {
-
- int nSpecial = 0;
- if (m_presets[left].szFilename.c_str()[0] == '*') nSpecial++;
- if (m_presets[right].szFilename.c_str()[0] == '*') nSpecial++;
- if (nSpecial == 1)
- {
- if (m_presets[right].szFilename.c_str()[0] == '*')
- {
- PresetInfo temp = m_presets[left];
- m_presets[left] = m_presets[right];
- m_presets[right] = temp;
- }
- }
- else if (mystrcmpiW(m_presets[left].szFilename.c_str(), m_presets[right].szFilename.c_str()) > 0)
- {
- PresetInfo temp = m_presets[left];
- m_presets[left] = m_presets[right];
- m_presets[right] = temp;
- }
- }
- }
- void CPlugin::WaitString_NukeSelection()
- {
- if (m_waitstring.bActive &&
- m_waitstring.nSelAnchorPos != -1)
- {
-
- int start = (m_waitstring.nCursorPos < m_waitstring.nSelAnchorPos) ? m_waitstring.nCursorPos : m_waitstring.nSelAnchorPos;
- int end = (m_waitstring.nCursorPos > m_waitstring.nSelAnchorPos) ? m_waitstring.nCursorPos - 1 : m_waitstring.nSelAnchorPos - 1;
- int len = (m_waitstring.bDisplayAsCode ? lstrlenA((char*)m_waitstring.szText) : lstrlenW(m_waitstring.szText));
- int how_far_to_shift = end - start + 1;
- int num_chars_to_shift = len - end;
-
- if (m_waitstring.bDisplayAsCode)
- {
- char* ptr = (char*)m_waitstring.szText;
- for (int i=0; i<num_chars_to_shift; i++)
- *(ptr + start + i) = *(ptr + start + i + how_far_to_shift);
- }
- else
- {
- for (int i=0; i<num_chars_to_shift; i++)
- m_waitstring.szText[start + i] = m_waitstring.szText[start + i + how_far_to_shift];
- }
-
-
- m_waitstring.nCursorPos = start;
- m_waitstring.nSelAnchorPos = -1;
- }
- }
- void CPlugin::WaitString_Cut()
- {
- if (m_waitstring.bActive &&
- m_waitstring.nSelAnchorPos != -1)
- {
- WaitString_Copy();
- WaitString_NukeSelection();
- }
- }
- void CPlugin::WaitString_Copy()
- {
- if (m_waitstring.bActive &&
- m_waitstring.nSelAnchorPos != -1)
- {
-
- int start = (m_waitstring.nCursorPos < m_waitstring.nSelAnchorPos) ? m_waitstring.nCursorPos : m_waitstring.nSelAnchorPos;
- int end = (m_waitstring.nCursorPos > m_waitstring.nSelAnchorPos) ? m_waitstring.nCursorPos - 1 : m_waitstring.nSelAnchorPos - 1;
- int chars_to_copy = end - start + 1;
- if (m_waitstring.bDisplayAsCode)
- {
- char* ptr = (char*)m_waitstring.szText;
- for (int i=0; i<chars_to_copy; i++)
- m_waitstring.szClipboard[i] = *(ptr + start + i);
- m_waitstring.szClipboard[chars_to_copy] = 0;
-
- char tmp[64000];
- ConvertLFCToCRsA(m_waitstring.szClipboard, tmp);
- copyStringToClipboardA(tmp);
- }
- else
- {
- for (int i=0; i<chars_to_copy; i++)
- m_waitstring.szClipboardW[i] = m_waitstring.szText[start + i];
- m_waitstring.szClipboardW[chars_to_copy] = 0;
-
- wchar_t tmp[64000];
- ConvertLFCToCRsW(m_waitstring.szClipboardW, tmp);
- copyStringToClipboardW(tmp);
- }
- }
- }
- void CPlugin::WaitString_Paste()
- {
-
-
- if (m_waitstring.bActive)
- {
- WaitString_NukeSelection();
- if (m_waitstring.bDisplayAsCode)
- {
- char tmp[64000];
- lstrcpyA(tmp, getStringFromClipboardA());
- ConvertCRsToLFCA(tmp, m_waitstring.szClipboard);
- }
- else
- {
- wchar_t tmp[64000];
- lstrcpyW(tmp, getStringFromClipboardW());
- ConvertCRsToLFCW(tmp, m_waitstring.szClipboardW);
- }
- int len;
- int chars_to_insert;
- if (m_waitstring.bDisplayAsCode)
- {
- len = lstrlenA((char*)m_waitstring.szText);
- chars_to_insert = lstrlenA(m_waitstring.szClipboard);
- }
- else
- {
- len = lstrlenW(m_waitstring.szText);
- chars_to_insert = lstrlenW(m_waitstring.szClipboardW);
- }
- if (len + chars_to_insert + 1 >= m_waitstring.nMaxLen)
- {
- chars_to_insert = m_waitstring.nMaxLen - len - 1;
-
-
- AddError(WASABI_API_LNGSTRINGW(IDS_STRING_TOO_LONG), 2.5f, ERR_MISC, true);
- }
- else
- {
-
- }
- int i;
- if (m_waitstring.bDisplayAsCode)
- {
- char* ptr = (char*)m_waitstring.szText;
- for (i=len; i >= m_waitstring.nCursorPos; i--)
- *(ptr + i + chars_to_insert) = *(ptr + i);
- for (i=0; i < chars_to_insert; i++)
- *(ptr + i + m_waitstring.nCursorPos) = m_waitstring.szClipboard[i];
- }
- else
- {
- for (i=len; i >= m_waitstring.nCursorPos; i--)
- m_waitstring.szText[i + chars_to_insert] = m_waitstring.szText[i];
- for (i=0; i < chars_to_insert; i++)
- m_waitstring.szText[i + m_waitstring.nCursorPos] = m_waitstring.szClipboardW[i];
- }
- m_waitstring.nCursorPos += chars_to_insert;
- }
- }
- void CPlugin::WaitString_SeekLeftWord()
- {
-
- if (m_waitstring.bDisplayAsCode)
- {
- char* ptr = (char*)m_waitstring.szText;
- while (m_waitstring.nCursorPos > 0 &&
- !IsAlphanumericChar(*(ptr + m_waitstring.nCursorPos-1)))
- m_waitstring.nCursorPos--;
- while (m_waitstring.nCursorPos > 0 &&
- IsAlphanumericChar(*(ptr + m_waitstring.nCursorPos-1)))
- m_waitstring.nCursorPos--;
- }
- else
- {
- while (m_waitstring.nCursorPos > 0 &&
- !IsAlphanumericChar(m_waitstring.szText[m_waitstring.nCursorPos-1]))
- m_waitstring.nCursorPos--;
- while (m_waitstring.nCursorPos > 0 &&
- IsAlphanumericChar(m_waitstring.szText[m_waitstring.nCursorPos-1]))
- m_waitstring.nCursorPos--;
- }
- }
- void CPlugin::WaitString_SeekRightWord()
- {
-
-
-
- if (m_waitstring.bDisplayAsCode)
- {
- int len = lstrlenA((char*)m_waitstring.szText);
- char* ptr = (char*)m_waitstring.szText;
- while (m_waitstring.nCursorPos < len &&
- IsAlphanumericChar(*(ptr + m_waitstring.nCursorPos)))
- m_waitstring.nCursorPos++;
- while (m_waitstring.nCursorPos < len &&
- !IsAlphanumericChar(*(ptr + m_waitstring.nCursorPos)))
- m_waitstring.nCursorPos++;
- }
- else
- {
- int len = lstrlenW(m_waitstring.szText);
- while (m_waitstring.nCursorPos < len &&
- IsAlphanumericChar(m_waitstring.szText[m_waitstring.nCursorPos]))
- m_waitstring.nCursorPos++;
- while (m_waitstring.nCursorPos < len &&
- !IsAlphanumericChar(m_waitstring.szText[m_waitstring.nCursorPos]))
- m_waitstring.nCursorPos++;
- }
- }
- int CPlugin::WaitString_GetCursorColumn()
- {
- if (m_waitstring.bDisplayAsCode)
- {
- int column = 0;
- char* ptr = (char*)m_waitstring.szText;
- while (m_waitstring.nCursorPos - column - 1 >= 0 &&
- *(ptr + m_waitstring.nCursorPos - column - 1) != LINEFEED_CONTROL_CHAR)
- column++;
- return column;
- }
- else
- {
- return m_waitstring.nCursorPos;
- }
- }
- int CPlugin::WaitString_GetLineLength()
- {
- int line_start = m_waitstring.nCursorPos - WaitString_GetCursorColumn();
- int line_length = 0;
- if (m_waitstring.bDisplayAsCode)
- {
- char* ptr = (char*)m_waitstring.szText;
- while (*(ptr + line_start + line_length) != 0 &&
- *(ptr + line_start + line_length) != LINEFEED_CONTROL_CHAR)
- line_length++;
- }
- else
- {
- while (m_waitstring.szText[line_start + line_length] != 0 &&
- m_waitstring.szText[line_start + line_length] != LINEFEED_CONTROL_CHAR)
- line_length++;
- }
- return line_length;
- }
- void CPlugin::WaitString_SeekUpOneLine()
- {
- int column = g_plugin.WaitString_GetCursorColumn();
- if (column != m_waitstring.nCursorPos)
- {
-
- m_waitstring.nCursorPos -= column + 1;
-
- int new_column = g_plugin.WaitString_GetCursorColumn();
- if (new_column > column)
- m_waitstring.nCursorPos -= (new_column - column);
- }
- }
- void CPlugin::WaitString_SeekDownOneLine()
- {
- int column = g_plugin.WaitString_GetCursorColumn();
- int newpos = m_waitstring.nCursorPos;
- char* ptr = (char*)m_waitstring.szText;
- while (*(ptr + newpos) != 0 && *(ptr + newpos) != LINEFEED_CONTROL_CHAR)
- newpos++;
- if (*(ptr + newpos) != 0)
- {
- m_waitstring.nCursorPos = newpos + 1;
- while ( column > 0 &&
- *(ptr + m_waitstring.nCursorPos) != LINEFEED_CONTROL_CHAR &&
- *(ptr + m_waitstring.nCursorPos) != 0)
- {
- m_waitstring.nCursorPos++;
- column--;
- }
- }
- }
- void CPlugin::SavePresetAs(wchar_t *szNewFile)
- {
-
-
-
- if (!m_pState->Export(szNewFile))
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_ERROR_UNABLE_TO_SAVE_THE_FILE), 6.0f, ERR_PRESET, true);
- }
- else
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_SAVE_SUCCESSFUL), 3.0f, ERR_NOTIFY, false);
-
- lstrcpyW(m_pState->m_szDesc, m_waitstring.szText);
-
- UpdatePresetList(false,true);
- }
- }
- void CPlugin::DeletePresetFile(wchar_t *szDelFile)
- {
-
-
-
- if (!DeleteFileW(szDelFile))
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_ERROR_UNABLE_TO_DELETE_THE_FILE), 6.0f, ERR_MISC, true);
- }
- else
- {
-
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_PRESET_X_DELETED), m_presets[m_nPresetListCurPos].szFilename.c_str());
- AddError(buf, 3.0f, ERR_NOTIFY, false);
-
- int newPos = m_nPresetListCurPos;
- UpdatePresetList(false,true);
- m_nPresetListCurPos = max(0, min(m_nPresets-1, newPos));
- }
- }
- void CPlugin::RenamePresetFile(wchar_t *szOldFile, wchar_t *szNewFile)
- {
-
-
- if (GetFileAttributesW(szNewFile) != -1)
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_ERROR_A_FILE_ALREADY_EXISTS_WITH_THAT_FILENAME), 6.0f, ERR_PRESET, true);
-
-
- }
- else
- {
-
- if (!MoveFileW(szOldFile, szNewFile))
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_ERROR_UNABLE_TO_RENAME_FILE), 6.0f, ERR_MISC, true);
- }
- else
- {
-
- AddError(WASABI_API_LNGSTRINGW(IDS_RENAME_SUCCESSFUL), 3.0f, ERR_NOTIFY, false);
-
- wchar_t buf[512];
- swprintf(buf, L"%s.milk", m_pState->m_szDesc);
- if (wcscmp(m_presets[m_nPresetListCurPos].szFilename.c_str(), buf) == 0)
- {
- lstrcpyW(m_pState->m_szDesc, m_waitstring.szText);
- }
-
- wchar_t buf2[512];
- lstrcpyW(buf2, m_waitstring.szText);
- lstrcatW(buf2, L".milk");
- m_presets[m_nPresetListCurPos].szFilename = buf2;
- UpdatePresetList(false,true,false);
-
- m_nPresetListCurPos = 0;
- wchar_t* p = wcsrchr(szNewFile, L'\\');
- if (p)
- {
- p++;
- for (int i=m_nDirs; i<m_nPresets; i++)
- {
- if (wcscmp(p, m_presets[i].szFilename.c_str())==0) {
- m_nPresetListCurPos = i;
- break;
- }
- }
- }
- }
-
- m_UI_mode = UI_LOAD;
- m_waitstring.bActive = false;
- }
- }
- void CPlugin::SetCurrentPresetRating(float fNewRating)
- {
- if (!m_bEnableRating)
- return;
- if (fNewRating < 0) fNewRating = 0;
- if (fNewRating > 5) fNewRating = 5;
- float change = (fNewRating - m_pState->m_fRating);
-
-
-
-
-
- WritePrivateProfileFloatW(fNewRating, L"fRating", m_szCurrentPresetFile, L"preset00");
-
- m_pState->m_fRating = fNewRating;
-
- m_presets[m_nCurrentPreset].fRatingThis += change;
- if (m_nCurrentPreset != -1)
- for (int i=m_nCurrentPreset; i<m_nPresets; i++)
- m_presets[i].fRatingCum += change;
-
-
- if (!m_bShowRating)
- {
-
- m_fShowRatingUntilThisTime = GetTime() + 2.0f;
- }
- }
- void CPlugin::ReadCustomMessages()
- {
- int n;
-
- for (n=0; n<MAX_CUSTOM_MESSAGE_FONTS; n++)
- {
- wcscpy(m_CustomMessageFont[n].szFace, L"arial");
- m_CustomMessageFont[n].bBold = false;
- m_CustomMessageFont[n].bItal = false;
- m_CustomMessageFont[n].nColorR = 255;
- m_CustomMessageFont[n].nColorG = 255;
- m_CustomMessageFont[n].nColorB = 255;
- }
- for (n=0; n<MAX_CUSTOM_MESSAGES; n++)
- {
- m_CustomMessage[n].szText[0] = 0;
- m_CustomMessage[n].nFont = 0;
- m_CustomMessage[n].fSize = 50.0f;
- m_CustomMessage[n].x = 0.5f;
- m_CustomMessage[n].y = 0.5f;
- m_CustomMessage[n].randx = 0;
- m_CustomMessage[n].randy = 0;
- m_CustomMessage[n].growth = 1.0f;
- m_CustomMessage[n].fTime = 1.5f;
- m_CustomMessage[n].fFade = 0.2f;
- m_CustomMessage[n].bOverrideBold = false;
- m_CustomMessage[n].bOverrideItal = false;
- m_CustomMessage[n].bOverrideFace = false;
- m_CustomMessage[n].bOverrideColorR = false;
- m_CustomMessage[n].bOverrideColorG = false;
- m_CustomMessage[n].bOverrideColorB = false;
- m_CustomMessage[n].bBold = false;
- m_CustomMessage[n].bItal = false;
- wcscpy(m_CustomMessage[n].szFace, L"arial");
- m_CustomMessage[n].nColorR = 255;
- m_CustomMessage[n].nColorG = 255;
- m_CustomMessage[n].nColorB = 255;
- m_CustomMessage[n].nRandR = 0;
- m_CustomMessage[n].nRandG = 0;
- m_CustomMessage[n].nRandB = 0;
- }
-
- for (n=0; n<MAX_CUSTOM_MESSAGE_FONTS; n++)
- {
- wchar_t szSectionName[32];
- swprintf(szSectionName, L"font%02d", n);
-
- GetPrivateProfileStringW(szSectionName,L"face",L"arial",m_CustomMessageFont[n].szFace,sizeof(m_CustomMessageFont[n].szFace), m_szMsgIniFile);
- m_CustomMessageFont[n].bBold = GetPrivateProfileBoolW(szSectionName,L"bold",m_CustomMessageFont[n].bBold, m_szMsgIniFile);
- m_CustomMessageFont[n].bItal = GetPrivateProfileBoolW(szSectionName,L"ital",m_CustomMessageFont[n].bItal, m_szMsgIniFile);
- m_CustomMessageFont[n].nColorR = GetPrivateProfileIntW (szSectionName,L"r" ,m_CustomMessageFont[n].nColorR, m_szMsgIniFile);
- m_CustomMessageFont[n].nColorG = GetPrivateProfileIntW (szSectionName,L"g" ,m_CustomMessageFont[n].nColorG, m_szMsgIniFile);
- m_CustomMessageFont[n].nColorB = GetPrivateProfileIntW (szSectionName,L"b" ,m_CustomMessageFont[n].nColorB, m_szMsgIniFile);
- }
- for (n=0; n<MAX_CUSTOM_MESSAGES; n++)
- {
- wchar_t szSectionName[64];
- swprintf(szSectionName, L"message%02d", n);
-
- GetPrivateProfileStringW(szSectionName,L"text",L"",m_CustomMessage[n].szText,sizeof(m_CustomMessage[n].szText), m_szMsgIniFile);
- if (m_CustomMessage[n].szText[0])
- {
- m_CustomMessage[n].nFont = GetPrivateProfileIntW (szSectionName,L"font" ,m_CustomMessage[n].nFont, m_szMsgIniFile);
- m_CustomMessage[n].fSize = GetPrivateProfileFloatW(szSectionName,L"size" ,m_CustomMessage[n].fSize, m_szMsgIniFile);
- m_CustomMessage[n].x = GetPrivateProfileFloatW(szSectionName,L"x" ,m_CustomMessage[n].x, m_szMsgIniFile);
- m_CustomMessage[n].y = GetPrivateProfileFloatW(szSectionName,L"y" ,m_CustomMessage[n].y, m_szMsgIniFile);
- m_CustomMessage[n].randx = GetPrivateProfileFloatW(szSectionName,L"randx" ,m_CustomMessage[n].randx, m_szMsgIniFile);
- m_CustomMessage[n].randy = GetPrivateProfileFloatW(szSectionName,L"randy" ,m_CustomMessage[n].randy, m_szMsgIniFile);
- m_CustomMessage[n].growth = GetPrivateProfileFloatW(szSectionName,L"growth",m_CustomMessage[n].growth, m_szMsgIniFile);
- m_CustomMessage[n].fTime = GetPrivateProfileFloatW(szSectionName,L"time" ,m_CustomMessage[n].fTime, m_szMsgIniFile);
- m_CustomMessage[n].fFade = GetPrivateProfileFloatW(szSectionName,L"fade" ,m_CustomMessage[n].fFade, m_szMsgIniFile);
- m_CustomMessage[n].nColorR = GetPrivateProfileIntW (szSectionName,L"r" ,m_CustomMessage[n].nColorR, m_szMsgIniFile);
- m_CustomMessage[n].nColorG = GetPrivateProfileIntW (szSectionName,L"g" ,m_CustomMessage[n].nColorG, m_szMsgIniFile);
- m_CustomMessage[n].nColorB = GetPrivateProfileIntW (szSectionName,L"b" ,m_CustomMessage[n].nColorB, m_szMsgIniFile);
- m_CustomMessage[n].nRandR = GetPrivateProfileIntW (szSectionName,L"randr" ,m_CustomMessage[n].nRandR, m_szMsgIniFile);
- m_CustomMessage[n].nRandG = GetPrivateProfileIntW (szSectionName,L"randg" ,m_CustomMessage[n].nRandG, m_szMsgIniFile);
- m_CustomMessage[n].nRandB = GetPrivateProfileIntW (szSectionName,L"randb" ,m_CustomMessage[n].nRandB, m_szMsgIniFile);
-
- GetPrivateProfileStringW(szSectionName,L"face",L"",m_CustomMessage[n].szFace,sizeof(m_CustomMessage[n].szFace), m_szMsgIniFile);
- m_CustomMessage[n].bBold = GetPrivateProfileIntW (szSectionName, L"bold", -1, m_szMsgIniFile);
- m_CustomMessage[n].bItal = GetPrivateProfileIntW (szSectionName, L"ital", -1, m_szMsgIniFile);
- m_CustomMessage[n].nColorR = GetPrivateProfileIntW (szSectionName, L"r" , -1, m_szMsgIniFile);
- m_CustomMessage[n].nColorG = GetPrivateProfileIntW (szSectionName, L"g" , -1, m_szMsgIniFile);
- m_CustomMessage[n].nColorB = GetPrivateProfileIntW (szSectionName, L"b" , -1, m_szMsgIniFile);
- m_CustomMessage[n].bOverrideFace = (m_CustomMessage[n].szFace[0] != 0);
- m_CustomMessage[n].bOverrideBold = (m_CustomMessage[n].bBold != -1);
- m_CustomMessage[n].bOverrideItal = (m_CustomMessage[n].bItal != -1);
- m_CustomMessage[n].bOverrideColorR = (m_CustomMessage[n].nColorR != -1);
- m_CustomMessage[n].bOverrideColorG = (m_CustomMessage[n].nColorG != -1);
- m_CustomMessage[n].bOverrideColorB = (m_CustomMessage[n].nColorB != -1);
- }
- }
- }
- void CPlugin::LaunchCustomMessage(int nMsgNum)
- {
- if (nMsgNum > 99)
- nMsgNum = 99;
- if (nMsgNum < 0)
- {
- int count=0;
-
- for (nMsgNum=0; nMsgNum<100; nMsgNum++)
- if (m_CustomMessage[nMsgNum].szText[0])
- count++;
- int sel = (warand()%count)+1;
- count = 0;
- for (nMsgNum=0; nMsgNum<100; nMsgNum++)
- {
- if (m_CustomMessage[nMsgNum].szText[0])
- count++;
- if (count==sel)
- break;
- }
- }
- if (nMsgNum < 0 ||
- nMsgNum >= MAX_CUSTOM_MESSAGES ||
- m_CustomMessage[nMsgNum].szText[0]==0)
- {
- return;
- }
- int fontID = m_CustomMessage[nMsgNum].nFont;
- m_supertext.bRedrawSuperText = true;
- m_supertext.bIsSongTitle = false;
- lstrcpyW(m_supertext.szTextW, m_CustomMessage[nMsgNum].szText);
-
- m_supertext.fFontSize = m_CustomMessage[nMsgNum].fSize;
- m_supertext.fX = m_CustomMessage[nMsgNum].x + m_CustomMessage[nMsgNum].randx * ((warand()%1037)/1037.0f*2.0f - 1.0f);
- m_supertext.fY = m_CustomMessage[nMsgNum].y + m_CustomMessage[nMsgNum].randy * ((warand()%1037)/1037.0f*2.0f - 1.0f);
- m_supertext.fGrowth = m_CustomMessage[nMsgNum].growth;
- m_supertext.fDuration = m_CustomMessage[nMsgNum].fTime;
- m_supertext.fFadeTime = m_CustomMessage[nMsgNum].fFade;
-
- if (m_CustomMessage[nMsgNum].bOverrideFace)
- lstrcpyW(m_supertext.nFontFace, m_CustomMessage[nMsgNum].szFace);
- else
- lstrcpyW(m_supertext.nFontFace, m_CustomMessageFont[fontID].szFace);
- m_supertext.bItal = (m_CustomMessage[nMsgNum].bOverrideItal) ? (m_CustomMessage[nMsgNum].bItal != 0) : (m_CustomMessageFont[fontID].bItal != 0);
- m_supertext.bBold = (m_CustomMessage[nMsgNum].bOverrideBold) ? (m_CustomMessage[nMsgNum].bBold != 0) : (m_CustomMessageFont[fontID].bBold != 0);
- m_supertext.nColorR = (m_CustomMessage[nMsgNum].bOverrideColorR) ? m_CustomMessage[nMsgNum].nColorR : m_CustomMessageFont[fontID].nColorR;
- m_supertext.nColorG = (m_CustomMessage[nMsgNum].bOverrideColorG) ? m_CustomMessage[nMsgNum].nColorG : m_CustomMessageFont[fontID].nColorG;
- m_supertext.nColorB = (m_CustomMessage[nMsgNum].bOverrideColorB) ? m_CustomMessage[nMsgNum].nColorB : m_CustomMessageFont[fontID].nColorB;
-
- m_supertext.nColorR += (int)(m_CustomMessage[nMsgNum].nRandR * ((warand()%1037)/1037.0f*2.0f - 1.0f));
- m_supertext.nColorG += (int)(m_CustomMessage[nMsgNum].nRandG * ((warand()%1037)/1037.0f*2.0f - 1.0f));
- m_supertext.nColorB += (int)(m_CustomMessage[nMsgNum].nRandB * ((warand()%1037)/1037.0f*2.0f - 1.0f));
- if (m_supertext.nColorR < 0) m_supertext.nColorR = 0;
- if (m_supertext.nColorG < 0) m_supertext.nColorG = 0;
- if (m_supertext.nColorB < 0) m_supertext.nColorB = 0;
- if (m_supertext.nColorR > 255) m_supertext.nColorR = 255;
- if (m_supertext.nColorG > 255) m_supertext.nColorG = 255;
- if (m_supertext.nColorB > 255) m_supertext.nColorB = 255;
-
-
- m_supertext.fStartTime = GetTime();
- }
- void CPlugin::LaunchSongTitleAnim()
- {
- m_supertext.bRedrawSuperText = true;
- m_supertext.bIsSongTitle = true;
- lstrcpyW(m_supertext.szTextW, m_szSongTitle);
-
- lstrcpyW(m_supertext.nFontFace, m_fontinfo[SONGTITLE_FONT].szFace);
- m_supertext.fFontSize = (float)m_fontinfo[SONGTITLE_FONT].nSize;
- m_supertext.bBold = m_fontinfo[SONGTITLE_FONT].bBold;
- m_supertext.bItal = m_fontinfo[SONGTITLE_FONT].bItalic;
- m_supertext.fX = 0.5f;
- m_supertext.fY = 0.5f;
- m_supertext.fGrowth = 1.0f;
- m_supertext.fDuration = m_fSongTitleAnimDuration;
- m_supertext.nColorR = 255;
- m_supertext.nColorG = 255;
- m_supertext.nColorB = 255;
- m_supertext.fStartTime = GetTime();
- }
- bool CPlugin::LaunchSprite(int nSpriteNum, int nSlot)
- {
- char initcode[8192], code[8192], sectionA[64];
- char szTemp[8192];
- wchar_t img[512], section[64];
- initcode[0] = 0;
- code[0] = 0;
- img[0] = 0;
- swprintf(section, L"img%02d", nSpriteNum);
- sprintf(sectionA, "img%02d", nSpriteNum);
-
- GetPrivateProfileStringW(section, L"img", L"", img, sizeof(img)-1, m_szImgIniFile);
- if (img[0] == 0)
- {
- wchar_t buf[1024];
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_SPRITE_X_ERROR_COULD_NOT_FIND_IMG_OR_NOT_DEFINED), nSpriteNum);
- AddError(buf, 7.0f, ERR_MISC, false);
- return false;
- }
-
- if (img[1] != L':')
- {
-
- wchar_t temp[512];
- wcscpy(temp, img);
- swprintf(img, L"%s%s", m_szMilkdrop2Path, temp);
- }
-
-
-
-
- unsigned int ck = (unsigned int)GetPrivateProfileIntW(section, L"colorkey_lo", 0x00000000, m_szImgIniFile);
- ck = (unsigned int)GetPrivateProfileIntW(section, L"colorkey", ck, m_szImgIniFile);
-
- for (int n=0; n<2; n++)
- {
- char *pStr = (n==0) ? initcode : code;
- char szLineName[32];
- int len;
- int line = 1;
- int char_pos = 0;
- bool bDone = false;
-
- while (!bDone)
- {
- if (n==0)
- sprintf(szLineName, "init_%d", line);
- else
- sprintf(szLineName, "code_%d", line);
- GetPrivateProfileString(sectionA, szLineName, "~!@#$", szTemp, 8192, AutoCharFn(m_szImgIniFile));
- len = lstrlen(szTemp);
- if ((strcmp(szTemp, "~!@#$")==0) ||
- (len >= 8191-char_pos-1))
- {
- bDone = true;
- }
- else
- {
- sprintf(&pStr[char_pos], "%s%c", szTemp, LINEFEED_CONTROL_CHAR);
- }
-
- char_pos += len + 1;
- line++;
- }
- pStr[char_pos++] = 0;
- }
- if (nSlot == -1)
- {
-
- int oldest_index = 0;
- int oldest_frame = m_texmgr.m_tex[0].nStartFrame;
- for (int x=0; x<NUM_TEX; x++)
- {
- if (!m_texmgr.m_tex[x].pSurface)
- {
- nSlot = x;
- break;
- }
- else if (m_texmgr.m_tex[x].nStartFrame < oldest_frame)
- {
- oldest_index = x;
- oldest_frame = m_texmgr.m_tex[x].nStartFrame;
- }
- }
- if (nSlot == -1)
- {
- nSlot = oldest_index;
- m_texmgr.KillTex(nSlot);
- }
- }
- int ret = m_texmgr.LoadTex(img, nSlot, initcode, code, GetTime(), GetFrame(), ck);
- m_texmgr.m_tex[nSlot].nUserData = nSpriteNum;
- wchar_t buf[1024];
- switch(ret & TEXMGR_ERROR_MASK)
- {
- case TEXMGR_ERR_SUCCESS:
- switch(ret & TEXMGR_WARNING_MASK)
- {
- case TEXMGR_WARN_ERROR_IN_INIT_CODE:
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_SPRITE_X_WARNING_ERROR_IN_INIT_CODE), nSpriteNum);
- AddError(buf, 6.0f, ERR_MISC, true);
- break;
- case TEXMGR_WARN_ERROR_IN_REG_CODE:
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_SPRITE_X_WARNING_ERROR_IN_PER_FRAME_CODE), nSpriteNum);
- AddError(buf, 6.0f, ERR_MISC, true);
- break;
- default:
-
- break;
- }
- break;
- case TEXMGR_ERR_BAD_INDEX:
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_SPRITE_X_ERROR_BAD_SLOT_INDEX), nSpriteNum);
- AddError(buf, 6.0f, ERR_MISC, true);
- break;
-
- case TEXMGR_ERR_BADFILE:
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_SPRITE_X_ERROR_IMAGE_FILE_MISSING_OR_CORRUPT), nSpriteNum);
- AddError(buf, 6.0f, ERR_MISC, true);
- break;
- case TEXMGR_ERR_OUTOFMEM:
- swprintf(buf, WASABI_API_LNGSTRINGW(IDS_SPRITE_X_ERROR_OUT_OF_MEM), nSpriteNum);
- AddError(buf, 6.0f, ERR_MISC, true);
- break;
- }
- return (ret & TEXMGR_ERROR_MASK) ? false : true;
- }
- void CPlugin::KillSprite(int iSlot)
- {
- m_texmgr.KillTex(iSlot);
- }
- void CPlugin::DoCustomSoundAnalysis()
- {
- memcpy(mysound.fWave[0], m_sound.fWaveform[0], sizeof(float)*576);
- memcpy(mysound.fWave[1], m_sound.fWaveform[1], sizeof(float)*576);
-
- float fWaveLeft[576];
- int i = 0;
- for (i=0; i<576; i++)
- fWaveLeft[i] = m_sound.fWaveform[0][i];
- memset(mysound.fSpecLeft, 0, sizeof(float)*MY_FFT_SAMPLES);
- myfft.time_to_frequency_domain(fWaveLeft, mysound.fSpecLeft);
-
-
-
- for (i=0; i<3; i++)
- {
-
- int start = MY_FFT_SAMPLES*i/6;
- int end = MY_FFT_SAMPLES*(i+1)/6;
- int j;
- mysound.imm[i] = 0;
- for (j=start; j<end; j++)
- mysound.imm[i] += mysound.fSpecLeft[j];
- }
-
- for (i=0; i<3; i++)
- {
- float rate;
- if (mysound.imm[i] > mysound.avg[i])
- rate = 0.2f;
- else
- rate = 0.5f;
- rate = AdjustRateToFPS(rate, 30.0f, GetFps());
- mysound.avg[i] = mysound.avg[i]*rate + mysound.imm[i]*(1-rate);
- if (GetFrame() < 50)
- rate = 0.9f;
- else
- rate = 0.992f;
- rate = AdjustRateToFPS(rate, 30.0f, GetFps());
- mysound.long_avg[i] = mysound.long_avg[i]*rate + mysound.imm[i]*(1-rate);
-
- if (fabsf(mysound.long_avg[i]) < 0.001f)
- mysound.imm_rel[i] = 1.0f;
- else
- mysound.imm_rel[i] = mysound.imm[i] / mysound.long_avg[i];
- if (fabsf(mysound.long_avg[i]) < 0.001f)
- mysound.avg_rel[i] = 1.0f;
- else
- mysound.avg_rel[i] = mysound.avg[i] / mysound.long_avg[i];
- }
- }
- void CPlugin::GenWarpPShaderText(char *szShaderText, float decay, bool bWrap)
- {
-
- lstrcpy(szShaderText, m_szDefaultWarpPShaderText);
- char LF = LINEFEED_CONTROL_CHAR;
- char *p = strrchr( szShaderText, '{' );
- if (!p)
- return;
- p++;
- p += sprintf(p, "%c", 1);
- p += sprintf(p, " // sample previous frame%c", LF);
- p += sprintf(p, " ret = tex2D( sampler%s_main, uv ).xyz;%c", bWrap ? L"" : L"_fc", LF);
- p += sprintf(p, " %c", LF);
- p += sprintf(p, " // darken (decay) over time%c", LF);
- p += sprintf(p, " ret *= %.2f; //or try: ret -= 0.004;%c", decay, LF);
-
-
- p += sprintf(p, "}%c", LF);
- }
- void CPlugin::GenCompPShaderText(char *szShaderText, float brightness, float ve_alpha, float ve_zoom, int ve_orient, float hue_shader, bool bBrighten, bool bDarken, bool bSolarize, bool bInvert)
- {
-
- lstrcpy(szShaderText, m_szDefaultCompPShaderText);
- char LF = LINEFEED_CONTROL_CHAR;
- char *p = strrchr( szShaderText, '{' );
- if (!p)
- return;
- p++;
- p += sprintf(p, "%c", 1);
- if (ve_alpha > 0.001f)
- {
- int orient_x = (ve_orient % 2) ? -1 : 1;
- int orient_y = (ve_orient >= 2) ? -1 : 1;
- p += sprintf(p, " float2 uv_echo = (uv - 0.5)*%.3f*float2(%d,%d) + 0.5;%c", 1.0f/ve_zoom, orient_x, orient_y, LF);
- p += sprintf(p, " ret = lerp( tex2D(sampler_main, uv).xyz, %c", LF);
- p += sprintf(p, " tex2D(sampler_main, uv_echo).xyz, %c", LF);
- p += sprintf(p, " %.2f %c", ve_alpha, LF);
- p += sprintf(p, " ); //video echo%c", LF);
- p += sprintf(p, " ret *= %.2f; //gamma%c", brightness, LF);
- }
- else
- {
- p += sprintf(p, " ret = tex2D(sampler_main, uv).xyz;%c", LF);
- p += sprintf(p, " ret *= %.2f; //gamma%c", brightness, LF);
- }
- if (hue_shader >= 1.0f)
- p += sprintf(p, " ret *= hue_shader; //old hue shader effect%c", LF);
- else if (hue_shader > 0.001f)
- p += sprintf(p, " ret *= %.2f + %.2f*hue_shader; //old hue shader effect%c", 1-hue_shader, hue_shader, LF);
- if (bBrighten)
- p += sprintf(p, " ret = sqrt(ret); //brighten%c", LF);
- if (bDarken)
- p += sprintf(p, " ret *= ret; //darken%c", LF);
- if (bSolarize)
- p += sprintf(p, " ret = ret*(1-ret)*4; //solarize%c", LF);
- if (bInvert)
- p += sprintf(p, " ret = 1 - ret; //invert%c", LF);
-
- p += sprintf(p, "}%c", LF);
- }
|