From a036d0ca49fcda31c6b28371bc2f82047b064203 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sat, 19 Apr 2003 08:51:05 +0000 Subject: [PATCH] Add automatic font generator script for Photoshop. --- .../Font generation/Output/placeholder.txt | 1 + .../Templates/kanji 1 template.psd | Bin 0 -> 103180 bytes .../Templates/kanji 2 template.psd | Bin 0 -> 124809 bytes .../Templates/kanji 3 template.psd | Bin 0 -> 36740 bytes .../Templates/main template.psd | Bin 0 -> 218270 bytes stepmania/Utils/Font generation/Text.js | 351 ++++++++++++++++++ 6 files changed, 352 insertions(+) create mode 100644 stepmania/Utils/Font generation/Output/placeholder.txt create mode 100644 stepmania/Utils/Font generation/Templates/kanji 1 template.psd create mode 100644 stepmania/Utils/Font generation/Templates/kanji 2 template.psd create mode 100644 stepmania/Utils/Font generation/Templates/kanji 3 template.psd create mode 100644 stepmania/Utils/Font generation/Templates/main template.psd create mode 100644 stepmania/Utils/Font generation/Text.js diff --git a/stepmania/Utils/Font generation/Output/placeholder.txt b/stepmania/Utils/Font generation/Output/placeholder.txt new file mode 100644 index 0000000000..2c0c083733 --- /dev/null +++ b/stepmania/Utils/Font generation/Output/placeholder.txt @@ -0,0 +1 @@ +Generated font pages go here. (placeholder to make CVS create dir) diff --git a/stepmania/Utils/Font generation/Templates/kanji 1 template.psd b/stepmania/Utils/Font generation/Templates/kanji 1 template.psd new file mode 100644 index 0000000000000000000000000000000000000000..5b16615a02e4328891c6f66f777d8f52490431e9 GIT binary patch literal 103180 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

Atm36P)ibut~!s{bX0B)WJZB`WBq z&|C*YwqOP#Ttbc&a~;mYmnMKT-yx>M7i(HyJ=LKJr|6-WwpBs%;l%8Pkx7Oc!# zd3(={l~=~3X%6ROxUSQpUQ)D`=CIe3BQJH0%}+}qm7&-_BaJ7o_27h$)A|B(EeFmF z`_-$lWixM531Wk@M*pgEqI0z*hp32YuVXmR?{v0VXSE!M`69ML_i3RF?`-)joD*Z= z_8!-1(02!&IPbQ4io;oXWuI|1BRS$r@6z0ZtEV`ewTxoHXVqWJsI%r2ha#!e06$-b zvg@QcoHq+b1uv?|32c;{D@(|J{S=4u&Ifu?eMz|^xq+)~V10r8(^g(w$?kacbkQPS z@uFQZ#o>}oT%Z@#-vFj27D>%$v=d+zz8cvG<%O6z z&LCB2+F_OplpGfp0|DY%w#fHr#V0izFu$TQH<;qE1?y`nM>CU>}`Ng*=lD0QH*Z`&wBJXQZ>if=ygg{E&DZSq>9KICF-h zYdOrwu``rQeA{+JvS!6Jhcg|_Tz{IwKH9);qQO>`U|jN= zipsY!)1lxYB*K9)@={nK3OMnuH1S!#Lzxa&MoJJ|v}hlQ$%#BS(lc+g%$sUV>D+iv zM+o9@!^}Ac4R;}eMH~^Mw&sejC^=2e`Du|vZg@)7+~H*>k$^;rF_TujhFJ~kot#`v zCWjGa5{!_!godt-_FRYCD*z*=6@j*mEwg2UMS_#Ys3$mqnmc0lsE?czHjvZ8VD)WGeAsB8 z36!*az0`;D^5<6aLq)!Y_2)ixO){sVNqOhcO4$$RRgK9cr;;1l4<-Jz@_)SA6~u9J z%u3l0UuMskjOT9pU4C7C(U}wGlSv&$eHV!|S7krEU>1#dk-WK5%c=bZ(^It;YsV-N zbY?$%osiKwvmcU@Cr+Se5kaOdgf)m@S>oLI!VC%ic`g2-#2;q_{07q>Ubga*6KSeI zaE<(j^OjiaHM1W!8r)F&Ljs}VOfXXUvw90}V`FNt(e#Iota_vA4_lbn+1R~(*Qlbn z65^yo?POHx16fGkm}E2j!D6avhFuna+S4D3>?AMjDy${_;bko^91%*;{w_-!k=Wd- zbF=Uo6#LHM?Ul19rgVdEJPWrVqr6o^YO#aNqY9w92Vt?WTgAJo>F0&!L_ z@m_}u8_R;YqzLm%R2<`S(K_`vl8Y4iOT#c7vIx`5S7kw*mDmv$Y`u99mq_9yFYauP z(Yh}LPP-Z;DH_`HAo3FIYB-ZLSXpNx#GXieemiHeaULr(9`B6P*-%~}DR1LhMHLbh za3VDajU7H$w3WfJ3?AYYFU1xZ2}C!oEuAp zn8zbFX3l_*KW|Bf2syAm^G1ZR6RA33s+zptjRFmm_m&`f@Ghlp}kD=9pe%s(n^GQi2yJT{|zKU%v;G?!~A%qOo(mxtThp$VDyG0LcAzx z#k{~phM1biTFgr-%38vN=IS(vf{eVa`DUg;6g*_V2D3SdR5X+DrYyb+5D6U*|H>vm((As?Ddi$zOLj=QqWIcn1p%Itj}sy z_!gg6WkI~O$_(Wb#1}KGWI_D8`V*9xSr8+Ww=4_dSE#oul-COKf;+vzEQrd>gaPA& z_f11&TH`~~5?@S#jQEW1mIV2Df24aLNf6~#v|mAVn72T zgUX7{rj}eHJTnq;r0K7y9 zB|#K*yhaklgc4shdT~HlUPOU!QZB?y&E|MJTq!oMRA_eFhszhA3JsW6usNQl}XX<ak7uMBQpKE#F9aAN57 zWhH6R=9vDnkg%qVh*#9t8H~OyIT2GM0r^0c5hRC^uovUWK?^0M9~9@QIlM$NVG&|&ezS3xclnth!RD1EcIE}t%=?@ z@oQ2suSL3@&0_43iD0h?0SL%Q;{0o-n&MG8BtscDQ#GZG?0mk#1c@Sd0K{NswOHd` z3C&@e*P9~Ip~r@%cJyvelEj8)c;zJ{i^NPT*pVYR@($N^q)CLJOjS{>N+*uHL;PN1 zq#H?;nB#rCjFewiIY@{At~XPn+nrlvFI6ySacSaYcfqU`LAW`&64}!y_-z-d+IX_W zIoY8ZBB1h?WWyAuf@iydWQn&0thu)*OKj?hx87`t^LkOs!aTugBU7CmZ1kWS@4rWa z*PAUdOSVM8C9Bt*F7aDLfHK!imw0~F+36RVofgsV<>?X^CCIltU1D7v6g_9Q2J6h1 zxTs{e{CTA5n)wnPd^WCZJYk}1NREye0uRyZ2@_i_$%=?cJ}i90dbs@th2GWAo9<)Dfw7u#>BMAm-(H=Z$3 z_B`Y885a_dmJB1iWd{IjMlSS+tHnj)3zEHK#f*vBil9WfRF-C;)mk$qO7pPTE*QyH zXcOmBn#0O!2}76p5*IT;VWo_TeKkTA9E@6q!|mW>Y??~4hy}OOF&Ty16A0!4%wwJ2 zepPKGVWO<~+kkB!N#m({uRC9&8*4V0Fi}Rb^`}dGjd6M#$ZL4Dv3!YJp(#X{Pb{-y z#{o;1QSxDpf#5fmFYzK~Ut|iqX*ZTHFpULg;dlI@CZ4P^(FBst!7;^a*MM8p50pWC1x4eiGKSe>+(cy z1S5{m@kpUEJBzvTSzLh&YGeCB51qaP`*SNqnYpAP`*UvOLQ|M2@|(M zXk<$eV>jzf%a9GrFY@(A+|XB#NJIRusK z=1a^+btalKgljjFFi{Q%zu_qpXF+cLNfR$Bh_WngBH6fZC~IPttcgM@*%*KAw29{x zJIE}F6JJ)>O`FJ4=ap3_W>&oS&a{b3tQW43Ht`jPw^h?7E-B7|yTpm-V+>vao?k0% z;&otMc7k5VstUBcmL-I>q)l|^w!JF`F^#Vn*>-+a+C;Z0s@O=J=$3+{i82~@?X-!q zWVm|TMCpGkaU#jZP!7OWWyAmV(k42{H;^`Q$YGTT9x+C6h7XB8-&qGP}tGt99p0%t_8fatPx|1q&w0Tex7ecz_F5-m2ina$X-J8TSxY zkuw^C7s6VUmr+=7AQ-v9oQVp*lM$R1wzP3+#;h-A;#C-c`G#^PF1nsCS~*SK>*2jb zvM?o`tCHu8oeJ=&k;72-&|OXbHKa_;ve19AEob6oh`WxAiP9#46n6J+Fk_;uV7785 zHXLQyq}k&I%1V?;hL5_if0dMpO&sup)|)a>n(q_*vG`u%%B&}6VzcRG-Cuvs#3mwG zLMsV-5oY?nmYj)>?^Ysl>&}_jXjNlhnyupMd6+h$-99^*j6)@Kvv?zmGI@gmMD>!K ziQ+Bce6BldqO{x#;X~+73uswFcN&Kkc$JcMPO|nv2Yg^r?N!ny&f&Gmo%Huf_Z)8=@Vri{f-FELe{X(oY#}+3n$s3&$aR=3Qm0< za>5YA+~LOaClXqp0hjE$GbjqH8aWinYgxR342qn)5%1X(O|sX)dy}SMNyLFV^gvuN;4*r-2fT@M@JB#C_=o-1awkfXQR6SwAkn_ z_rXh7$d*K(nv!fw9-nE+=g#bYwYzhy?fGV74)3hLot>{F*|Xyvd%yHZ9!sJ`CP^H9 z=l)(~W*rTX1Z>JeTLrSKD>EbF{o`Hn;zdOEp(EAfs-&`i1Im5na+|7Tx4viX(2-;J z47}D|d3m|^FZb*85ubxF@)$ zezbOG>dwdJYR4bD_r%0w4^AAOyy-1(-toq_j8D#U&6Q_~Bzxp}`fKk=ql zAHDz8^7xTkd2+V4Fz!Ecc6w(1)<@oSldEtm-{tn+n|xPf;lVfE^zM7A{=)3+^n+6i z{^%`-ZW+CK-@YI4PtA>=tvx(D_n<#=%YmC{a&Gd}t@q!4N8TV;Z@THs!b1Jly?Y;i z_~Ba~-gnFF-08g|hYug#8;tH99lefP;XGxN7NOt(zT zp4~h3?!6Q> zxOrq`^5D%U$Aa3;Cr7xwZ)9|0-`LnqJN%;GuMMIogyn#n;{kSFgYJ3S)Y9EppGBDi?#|7f zJFd+ot`$9|Uzht=`Kmm=+>-WRj%6apjF0^0Uvag~T?rrHNm*w3{kxcw4-hTX-n+q>ExK0PGqt(#h1w)H)QLyywY>0-tgzgXC&$j7 z_WAX#?tf)*Zu-Pq-+cm7Idg^iy?5@JKV9p&Gc-QEaAN#)&%HepHR{zKSvWR-=ZSmn zK1p6!8r)Xg?kT+e% z{hf&T%;w_GQm+?6s+9Yxm%1xa+yVD=mt0q*kHRdI{gn7^`C56mdW9;b|2d77_x3xE z-Jwcl@!NRr^qXqeZIZ|T;iLDca{8p&sHL3Am)W_7WZQHhO-?nS}_FdQS+_Cfe z8?W27>$)3Xal;Ka-f+V!uHWVU<-f9v&7Y;+J9qBhv)kLV$9w6XJ$qg%AA4S!Rk{93 z8c40Wej8mfmC~zK`TA1j`cnGm*zC6S-<941%E6NR2VnVEp>qR+L&Mv)@7P(|{II0T zmExhNN&}@zd7wNvJhW}FvTGj?udfWe>LnwCxBcMw4X^%@kB$z#^i#k7KOg!2*W7sj zzdpHd|J;v$;pp&dKYcv;i>D{%54`Mi|I3fP?)INOG5OYi^ZA9bmw)jc|F!na|N60i z`=!M%KYPbbKld9S|EE9y@Ba8J=YI2_{o$Yd<@tA>dgv3M`K^EcfBdKacH!XL-gWxn z$3Oeq|Ki{OKYw-cdQ~oicEDj89vVF0AiQeiB?BP%kyqa^IQr2~y;KnV>-)cu?0e10 zznJ^cPai#g_r(ZiH0ES<8;NN@^5TAefMiR0iBBJU?HgY6>0@s{_L@)M|LJ3|`MKZNd?Qt9>&l9K;mV4A@yd#Q>B@@z@s$<( zlPfFspRTOfpE~<{l~X<$|FBS{u2Z+ENj0lZGPL=ss?P9zfuDKzjiFxM@B$@#bx_@+ z0%7Rh#LsS zbIg@S+uuL&_>>y}1@y%gjNTfI z-Maq}#Z@ILW%MLMi^@g2B^6aV-=!e`hDwzj8xcbXf9Yi%{H5<}<7WuRXNkX)-oCEf zZrimbA9yo|Is09@Z<;~)-7Zp;TH-w=YE0CC+&goG?`rTXQiD%gAN-2Qab|YzY^q+* zvp@L(DZxK3q{a*XeBWF0fBt2^I4PcZ^!OR2zI0BN-jZa^Z~iRq>)wMk-O)(Ds zPyNSV7`pfO)$UVAKJ|su+fKdqN9TUwckaFU{(nzQ@BV@CXirGg9h#{-=N_AxoLxMb zmCZiiIkzye>E5mdqJp>0O-)Wt&73YGqwafBGari8eRDGlc^UUzo(UcKecQ~!ZN;fCIdC~2xTpWk@<;{3wYsi}!^w?H2Fd+(TY=>Iyg%yieJ^2~zi&*awp%

_`{@2)KXS-Mk{3mksof;@lQG=1ni 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 WqSbMK&5i%X{ad&4yacURJ^n8!m5K}i literal 0 HcmV?d00001 diff --git a/stepmania/Utils/Font generation/Templates/kanji 3 template.psd b/stepmania/Utils/Font generation/Templates/kanji 3 template.psd new file mode 100644 index 0000000000000000000000000000000000000000..de776e993044c7ff90472b3ddd39b019696b7f15 GIT binary patch literal 36740 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 O>s>trJOti)1pW^IBvCd1 literal 0 HcmV?d00001 diff --git a/stepmania/Utils/Font generation/Templates/main template.psd b/stepmania/Utils/Font generation/Templates/main template.psd new file mode 100644 index 0000000000000000000000000000000000000000..717f568462e0c70f210b3c4b9c3c5652f761a7fb GIT binary patch literal 218270 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 literal 0 HcmV?d00001 diff --git a/stepmania/Utils/Font generation/Text.js b/stepmania/Utils/Font generation/Text.js new file mode 100644 index 0000000000..95980f5ff3 --- /dev/null +++ b/stepmania/Utils/Font generation/Text.js @@ -0,0 +1,351 @@ +/* This file was written by Glenn Maynard, and is in the public domain. + * + * This is a Photoshop javascript to generate Kanji fonts. + * + * You'll need the plugin: + * + * http://www.adobe.com/support/downloads/detail.jsp?ftpID=1536 + * + * Load this script from File->Automation->Scripts, browse. Expect it to take + * a minute or two. + * + * Minimally, you'll need to edit the directories below. + * + * Each font page in FontPages is generated for each font in Fonts. + * + * I can't figure out a way to force a font to fixed-width, so this currently + * only works with fixed-width fonts. I'm using this primarily for Japanese + * fonts, so that's OK. If we could output Unicode, we could get around this, + * by outputting each glyph in a separate layer and aligning them individually, + * though that'd take a very long time. + */ + +/* Okay, this is a stupid way to pass by reference, but I don't speak JavaScript ... */ +function Integer(i) { this.val = i; } + +var TemplateDir = "c:/temp/stepmania/utils/Font generation/Templates/"; +var OutputDir = "c:/temp/stepmania/utils/Font generation/Output/"; + +var Fonts = new Array( + /* name font frame sz font sz AA border bold */ + new FontDef("_japanese 16px", "MS-Gothic", 32, 20, AntiAlias.STRONG, 2, true), + new FontDef("_japanese 24px", "MS-Gothic", 32, 28, AntiAlias.SMOOTH, 2, true) + ); + + +/* We can't send Unicode into the font ourself for some reason. So, we have to + * store prototypes for each font page. These should just be PSD files that contain + * a single text layer with the characters we want. The orientation, font, etc. + * don't matter; they'll be overridden. */ +var FontPages = Array("main", "kanji 1", "kanji 2","kanji 3"); + +var sel, doc; + +var strtRulerUnits = preferences.rulerUnits; +var strtTypeUnits = preferences.typeUnits; +preferences.rulerUnits = Units.PIXELS; +preferences.typeUnits = TypeUnits.PIXELS; +displayDialogs = DialogModes.NO; + +go(); + +preferences.rulerUnits = strtRulerUnits; +preferences.typeUnits = strtTypeUnits; + +function FontDef(Name, /* filename prefix */ + Font, /* actual font name */ + FrameSize, /* frame size in pixels */ + FontSize, /* font character size in pixels (horiz) */ + AAMethod, /* antialiasing */ + Border, /* pixels or 0 for off */ + Bold /* boolean */ + ) +{ + this.Name = Name; + this.Font = Font; + + this.FrameSize = FrameSize; + /* This is the width of each character, as output by the font renderer. + * Changing this changes the size of the character. */ + + this.HorizSize = FontSize; + /* This is the actual vertical size of characters, as output by the font renderer. + * For MS Gothic, it always seems to be 4/3 of the vertical size. */ + this.VertSize = FontSize* 4 / 3; + this.AAMethod = AAMethod; + this.Border = Border; + this.Bold = Bold; +} + +function go() +{ + for(var f = 0; f < Fonts.length; ++f) + { + for(var i = 0; i < FontPages.length; ++i) + { + MakeFontPage(TemplateDir + FontPages[i] + " template.psd", + OutputDir + Fonts[f].Name + " [" + FontPages[i] + "]", + Fonts[f]); + } + } +} + +function MakeFontPage(TemplatePath, OutputPath, Font) +{ + /* Open the template. */ + var file = new File(TemplatePath); + if(!file.open("r")) + { + alert("Couldn't open " + TemplatePath); + return; + } + open(file); + file = null; + + /* Change the template to a font page. */ + var frameX = new Integer; + var frameY = new Integer; + ConvertCurrentDocument(frameX, frameY, Font); + + /* Save the template to the destination file and close the template. */ + var Save = new PNGSaveOptions; + Save.interlaced = false; + OutputPath += " " + frameX.val + "x" + frameY.val; + OutputPath += ".png"; + activeDocument.saveAs(new File(OutputPath), Save, true, Extension.LOWERCASE); + activeDocument.close(SaveOptions.DONOTSAVECHANGES); +} + +function GetTextLayer(Doc) +{ + /* Find a text layer. */ + var TextLayer = null; + for(var i = 0; i < activeDocument.artLayers.length; ++i) + { + if(activeDocument.artLayers[i].kind != LayerKind.TEXT) + continue; /* irrelevant */ + + if(TextLayer != null) + { + alert("More than one text layer found. Confused."); + return null; + } + + TextLayer = activeDocument.artLayers[i]; + } + + if(TextLayer == null) + { + alert("No text layer found. Confused."); + return null; + } + + return TextLayer; +} + +/* We have an open document with a single text layer. Convert it to a font + * page. The result will be a single RGB layer. */ +function ConvertCurrentDocument( frameX, frameY, Font ) +{ + // Create a new art layer and convert it to a text layer. + // Set its contents, size and color. + if (documents.length == 0) + { + alert ("You must have at least one open document to run this script."); + return; + } + + doc = activeDocument; + sel = doc.selection; + + /* Find a text layer. */ + var TextLayer = GetTextLayer(doc); + if(TextLayer == null) return; + + /* Figure out the number of frames in each dimension, based on the line count + * and max characters/line. */ + GetFrameCount(TextLayer.textItem.contents, frameX, frameY); + + /* Based on the frame count and frame size, figure out the dimensions of + * the whole page. */ + var PageWidth = frameX.val * Font.FrameSize; + var PageHeight = frameY.val * Font.FrameSize; + + /* Resize the image down to the size required to hold the images. This prevents + * errors later when we move columns around if the image is too big. */ + doc.resizeCanvas(PageWidth, PageHeight, AnchorPosition.TOPLEFT); + + { + /* Using HorizSize as the vertical origin seems to align the text so that + * it's centered in the top VertSize pixels. Adjust from there to being centered + * in the frame. */ + var Dist = Font.FrameSize/2-Font.VertSize/2; + TextLayer.textItem.position = Array(0, Font.HorizSize+Dist); + } + + TextLayer.textItem.font = Font.Font; + TextLayer.textItem.antiAliasMethod = Font.AAMethod; + var textColor = new SolidColor; + textColor.rgb.red = 255; + textColor.rgb.green = 255; + textColor.rgb.blue = 255; + + TextLayer.textItem.color = textColor; + + TextLayer.textItem.useAutoLeading = 0; + TextLayer.textItem.spaceBefore = Font.FrameSize; + TextLayer.textItem.spaceAfter = 0; + + TextLayer.textItem.size = Font.HorizSize; + + TextLayer.textItem.fauxBold = Font.Bold; + TextLayer.textItem.fauxItalic = false; + + TextLayer.rasterize(RasterizeType.ENTIRELAYER); + + var CurrentSpacing = Font.HorizSize; + /* Faux bold adds half a pixel to the widht of each character. */ + if(Font.Bold) + CurrentSpacing += 0.5; + + /* We currently have a horizontal spacing of CurrentSpacing; adjust it to + * have a vertical spacing of FrameSize. */ + Adjust(Font.FrameSize, CurrentSpacing, frameX.val); + + if(Font.Border != 0) + TextLayer = MakeBorder(TextLayer, doc.artLayers, Font.Border); + + { + /* Resize the texture to have the largest possible frame count without going + * over a power of two. This way, when the font page grows, the frame count + * (8x8) stays constant, so we don't have to keep renaming files in CVS. */ + var MaxX = power_of_two(PageWidth); + var MaxY = power_of_two(PageHeight); + while(PageWidth + Font.FrameSize <= MaxX) + PageWidth += Font.FrameSize; + while(PageHeight + Font.FrameSize <= MaxY) + PageHeight += Font.FrameSize; + + /* Actually, let's force the texture to be square, too, which reduces filename + * changes even more. This eats a little texture memory. It also means that + * if the texture is reduced at runtime, it'll be reduced equally in both + * dimensions, which will probably look less weird. */ + if(PageHeight < PageWidth) PageHeight = PageWidth; + else PageWidth = PageHeight; + + frameX.val = PageWidth / Font.FrameSize; + frameY.val = PageHeight / Font.FrameSize; + } + doc.resizeCanvas(PageWidth, PageHeight, AnchorPosition.TOPLEFT); +} + +function GetFrameCount(str, x, y) +{ + /* Strip blank lines off the end. */ + for(var c = str.length-1; c >= 0; --c) + { + if(c != '\r' && c != ' ') + break; + str = str.substr(0, str.length-1); + } + + var NumLines = 0, MaxLength = 0, CurLength = 0; + + for(var c = 0; c < str.length; ++c) + { + if(str[c] == '\r') + { + CurLength = 0; + NumLines++; + } + else + { + CurLength++; + if(CurLength > MaxLength) + MaxLength = CurLength; + } + } + if(CurLength) + NumLines++; + + x.val = MaxLength; + y.val = NumLines; +} + +function power_of_two(n) +{ + var value = 1; + + while (value < n) + value *= 2; + + return value; +} + +/* The current document is in columns of width NewWidth. Space it out so the columns + * are of width OldWidth. */ +function Adjust(NewWidth, OldWidth, Columns) +{ + // col = 7; + for(var col = Columns-1; col >= 0; --col) + { + var selBounds = Array( + Array(col*OldWidth,0), + Array((col+1)*OldWidth, 0), + Array((col+1)*OldWidth, activeDocument.height), + Array(col*OldWidth, activeDocument.height)); + sel.select(selBounds); + + var OldXCenter = (col + .5) * OldWidth; + var NewXCenter = (col + .5) * NewWidth; + var Distance = NewXCenter-OldXCenter; + sel.translate(Distance); + } + sel.deselect(); +} + +function SelectTransparencyFromCurrentLayer() +{ + // Voodoo from the action recorder, since I couldn't find a way to + // do this normally. + var id15 = charIDToTypeID( "setd" ); + var desc3 = new ActionDescriptor(); + var id16 = charIDToTypeID( "null" ); + var ref1 = new ActionReference(); + var id17 = charIDToTypeID( "Chnl" ); + var id18 = charIDToTypeID( "fsel" ); + ref1.putProperty( id17, id18 ); + desc3.putReference( id16, ref1 ); + var id19 = charIDToTypeID( "T " ); + var ref2 = new ActionReference(); + var id20 = charIDToTypeID( "Chnl" ); + var id21 = charIDToTypeID( "Chnl" ); + var id22 = charIDToTypeID( "Trsp" ); + ref2.putEnumerated( id20, id21, id22 ); + desc3.putReference( id19, ref2 ); + executeAction( id15, desc3, DialogModes.NO ); +} + +/* Add a border to the current layer. */ +function MakeBorder(Layer, Layers, Width) +{ + SelectTransparencyFromCurrentLayer(); + sel.expand(Width); + + var BorderLayer = Layers.add(); + BorderLayer.moveAfter(Layer); + + var borderColor = new SolidColor; + borderColor.rgb.red = 0; + borderColor.rgb.green = 0; + borderColor.rgb.blue = 0; + + sel.fill(borderColor); + sel.deselect(); + + Layer.merge(); + + return BorderLayer; +} + +