posterazor-1.5.1/0000755000175000017500000000000011041320350013327 5ustar simrunsimrunposterazor-1.5.1/packaging/0000755000175000017500000000000011041320342015254 5ustar simrunsimrunposterazor-1.5.1/packaging/createSourceRelease.cmd0000644000175000017500000000064211041177224021701 0ustar simrunsimrunSET LISTFILENAME=files.txt SET ARCHIVEFILENAME=PosteRazor-1.5.1-Source.zip del %LISTFILENAME% del %ARCHIVEFILENAME% FOR /F %%i IN ('svn list -R ../') DO call :addtolistfile %%i pushd ..\ 7z a -tzip packaging\%ARCHIVEFILENAME% @packaging\%LISTFILENAME% popd goto :eof :addtolistfile set ENTRYTOADDTOLISTFILE=%1 if not %ENTRYTOADDTOLISTFILE:~-1%==/ echo %ENTRYTOADDTOLISTFILE% >> %LISTFILENAME% goto :eof posterazor-1.5.1/packaging/createLinuxRelease.sh0000644000175000017500000000040311041177224021402 0ustar simrunsimrun#!/bin/sh export ARCHIVEFILENAME=PosteRazor-1.5.1-Linux-x86.tgz export SOURCEDIR=../src pushd $SOURCEDIR cmake . make clean make strip PosteRazor tar cfz $ARCHIVEFILENAME PosteRazor ../CHANGES ../README ../LICENSE popd mv -f $SOURCEDIR/$ARCHIVEFILENAME . posterazor-1.5.1/packaging/iss/0000755000175000017500000000000011041320342016052 5ustar simrunsimrunposterazor-1.5.1/packaging/iss/posterazor.iss0000644000175000017500000000700411041177224021014 0ustar simrunsimrun#define APPLICATIONTITLE "PosteRazor" #define VERSION "1.5.1" #define COPYRIGHT "2005-2008 Alessandro Portale" #define PREFERENCESDIR "{userappdata}\CasaPortale.de" #define PREFERENCESFILE PREFERENCESDIR + "\PosteRazor.prefs" #define WEBSITE "http://posterazor.sourceforge.net/" [Setup] InternalCompressLevel=ultra OutputBaseFilename={#APPLICATIONTITLE}-{#VERSION}-Win32-Installer SolidCompression=true VersionInfoVersion={#VERSION} VersionInfoCompany=CasaPortale.de VersionInfoDescription=Make your own poster! VersionInfoTextVersion={#APPLICATIONTITLE} {#VERSION} VersionInfoCopyright=Copyright (C) {#COPYRIGHT} Compression=lzma/ultra AppCopyright={#COPYRIGHT} AppName={#APPLICATIONTITLE} AppVerName={#APPLICATIONTITLE} {#VERSION} ShowLanguageDialog=yes AppPublisher=Alessandro Portale AppPublisherURL=http://www.casaportale.de/ AppSupportURL=http://sourceforge.net/tracker/?group_id=141842 AppUpdatesURL={#WEBSITE} AppVersion={#VERSION} UninstallDisplayIcon={app}\PosteRazor.exe UninstallDisplayName={#APPLICATIONTITLE} DefaultDirName={pf}\{#APPLICATIONTITLE} DisableProgramGroupPage=true DisableReadyPage=true LicenseFile=license.rtf OutputDir=..\ DefaultGroupName={#APPLICATIONTITLE} WizardImageFile=wizimage.bmp WizardSmallImageFile=wizsmallimage.bmp [Files] Source: ..\..\src\PosteRazor.exe; DestDir: {app} Source: ..\..\LICENSE; DestDir: {app}; DestName: LICENSE.txt Source: ..\..\CHANGES; DestDir: {app}; DestName: CHANGES.txt Source: ..\..\README; DestDir: {app}; DestName: README.txt [Dirs] Name: {#PREFERENCESDIR}; AfterInstall: SetLanguagePreferences [Icons] Name: {group}\{#APPLICATIONTITLE}; Filename: {app}\PosteRazor.exe; WorkingDir: {app}; IconFilename: {app}\PosteRazor.exe Name: {group}\License; Filename: {app}\LICENSE.txt Name: {group}\{cm:ProgramOnTheWeb,{#APPLICATIONTITLE}}; Filename: {#WEBSITE} Name: {group}\{cm:UninstallProgram,{#APPLICATIONTITLE}}; Filename: {uninstallexe} [Run] Filename: {app}\PosteRazor.exe; WorkingDir: {app}; Flags: postinstall [Languages] Name: BrazilianPortuguese; MessagesFile: compiler:languages\BrazilianPortuguese.isl Name: Dutch; MessagesFile: compiler:languages\Dutch.isl Name: English; MessagesFile: compiler:Default.isl Name: French; MessagesFile: compiler:languages\French.isl Name: German; MessagesFile: compiler:languages\German.isl Name: Italian; MessagesFile: compiler:languages\Italian.isl Name: Polish; MessagesFile: compiler:languages\Polish.isl Name: Spanish; MessagesFile: compiler:languages\Spanish.isl [CustomMessages] BrazilianPortuguese.UILanguage=8 Dutch.UILanguage=6 English.UILanguage=1 French.UILanguage=3 German.UILanguage=2 Italian.UILanguage=5 Polish.UILanguage=4 Spanish.UILanguage=7 [UninstallDelete] Name: {#PREFERENCESFILE}; Type: files Name: {#PREFERENCESDIR}; Type: dirifempty [Code] procedure SetLanguagePreferences; var i: Integer; strings: TArrayOfString; begin LoadStringsFromFile(ExpandConstant('{#PREFERENCESFILE}'), strings); SaveStringToFile(ExpandConstant('{#PREFERENCESFILE}'), '; FLTK preferences file format 1.0' + #13#10 + '; vendor: CasaPortale.de' + #13#10 + '; application: PosteRazor' + #13#10 + '[.]' + #13#10 + 'UILanguage:' + CustomMessage('UILanguage') + #13#10, False); for i := 0 to GetArrayLength(strings)-1 do if (length(strings[i]) > 0) and (strings[i][1] <> '[') and (strings[i][1] <> ';') and (Copy(strings[i], 1, 11) <> 'UILanguage:') then SaveStringToFile(ExpandConstant('{#PREFERENCESFILE}'), strings[i] + #13#10, True); end; posterazor-1.5.1/packaging/iss/wizsmallimage.bmp0000644000175000017500000001152011041177224021427 0ustar simrunsimrunBMP6(77''         ! !!""%"$$)(7!$"%%!&*"&-$&,$*-+--&*%%*1&-5$*3%-<*.5*-2)/;#'0+1.*06.11-16,43-29.5>+2<.8:16624516;3865:>5:<9==&.B,4C+6K.:E,9K%2G.:R)6S16B3;C3C1=S.p6@;=CD=CK4AM4C[T|=XBECFLLJMMEIFDKSJNQCLYMRTLV[RUTSVYUZ[Z]]PQOIXeD[xZ^cV\b@Mh]`^[ej]msSgsNamcddfijhjkbjshnxct{ktsjvyjxysttu{{z{|vyw=WC]B^GeIhXlWuNtNtR{TxU~m|gys}zd{wY[nivt{{{sv|{v{ll}xa|[kddpkyt{|     h |rohioehegjihijg^^ )     Mxv * ! !   xg . G+% !)%   ahv *'X]?+4+4+," ^^h 0XWICR\CY>&4)&)kiv 0  W\X\CX?GQ4&8-` 3 3V\X\RIEe$` 3 3AXAUIDX'  c 2(&]B$w .U(>Xkj a 3&?[Dm?m(  q a E,>BA, #g < @%!   M^xv $ 3.*%     #  8.+&   `v QGIR       #`wox  8I[\    %>  7hHn  8+XJ%"0FE"   'n  7(JLKD%>?BG>.%02.& =(j  0JYJYB'>BWWG.).  (=j  :CJYX?!,?U4. (=n  zyzvrw\mB"&Zn  F>CWpbcnWCVI>>TZ[r  @>4WR4> )RG%4&%UZVT@r  F3@G&43*SIG."HmVF51n  67;G4@&%)2:[3)#21URF"j  #7<:F324.)28W[R%!#FHPGQ@1j  q#"/7HbPbS8&)2pbEG4*#$/651/"1-i  i#1:8<Pbd8)%UzlE2*#"<:67/1-i  _/628HP20")@zWE0#$/O<;9;1-j 6-<:H:28:2*AT7#9;76N16j <7<;H:8:02G[T27#/79<O_a<Nv we_O:H2[8#:b_etlx zF#*9Oaflv ZV8#-Ofigsw w_cbchw8/-fs~ P_flblTSPT6/* {utuFmH9r Pm[:79` Sr;Hc dr~ t~| |}}~{}|~| }bVS| }{{lHi}sy{y{sz{| orsx{iew!posterazor-1.5.1/packaging/iss/wizimage.bmp0000644000175000017500000010122211041177224020375 0ustar simrunsimrunBM6(:\~        !#"!!!""%"##*%)'3"$%!%*"&-$%+%).$*,*,-"*&&*1%,4%-:).5*-2*.:#&1*1.'1.,24,3;*5;25524426;5:<:<<3960/0!#&.B,4C,5K.9E-9L&2E-;T*9X17B4;C2;K9>C7Z-=f1>h:A>aC\C\IdHg[vRpIkMsTyT|Nwl|g{s}g{v}YWlkttz|yt{w||l{iz[]^eelkuxo{r}t ~zt o  a M# :'  &'  !            gv*f*<o aor<$f   'w f av   o<v*vv$ o99o  ;rv fafvc g  v$=3r$ uvfga<8*>*$?  f fguvfga8950)+*$'$ f v' $<r*uvogcaK<:80&,-% $($?o<*fofgaR;5/(,&,!%%(&2        ?  9$a90,(% !&,(&%&%!$ $$(2  $      $ <;ggo50(&(%!$$(,&%%  $%2     $  vf9v$5,(%%$%%&!$&           oo<wga=<fv5-(&%&%$%2&($!& %         $ wo< <orvwg*6-(%$%&(!!%&!&! (      $  o v3v af5,($%$%$&%'% !%$'$$$   *5v<o/0(%(% $%&''%&2&,-,&-,(*$%$   r *3r  50(%&$%!-1,(%2,/,/-1-2,&,&(%&($$  a o *3w$ fc0(&!!BJ2-%&2&2,/1/(,&%&,&,&('*$  w +)*l$ $v/0(&,&&, $'NM6-%!2/,&(,/,/1-,&!&,2&2,($'$$   *5f  f0(/(&%&2YNE1'-/,%,05/,/,2,-,%'$$  *g 5fg< w8o/,(&!(%&%$ A[yUD-,16.6A6HA1.-.,&$$%)%$'$ o,5fa  <oo5-&!%  %2ED]y\D61.6A1.1,1A1,".@%/,(,/&'()*$)'('$):eo c g,&(!%&.DFy||YDA1.1/,-.E@-AMFE.F\].1,1(&,0*)(),0 ,6do$f0()$%(ABNU[|]\NJC61,6B@FNYNJ6Vy{Y16/16/6/05/($' g,7S go/(% $1DFVNV~y[VMJHADFMCB]yi\D6Y]_A/6A.0.161-16/(&($675*r/)$$$%&! DN\_\VY|_YJAM[\VJ|FM[{yD@HAC.6AJA/6A616/6,&v +57-9 /($% %$!&% @YN|_[||YJM[_VJ_YD]|BAJAHC61AMNA616/,/= 9?57(o<5(%$!% "[MN|yyVM\]\V|\MzYBJ@V]MVUBJAMNYA161A6r c059w50&($%   \VZ[MY]_[Y}\MDB]y|VDMVYDC16JA $(*j*5(!$! \XYiyN\]|}]`DF]}z`[VBDNFNGFDABNVC6A6! v+  v*65!$  N~|y_|Y]_|}~]_BAYz}_\NEVNFXNBY\[VA61f v+)*v cf:5-($% D~|\_|ZAF|}]\]VD]NFYNY\VAD6.6 +*u  6/!&%+%$&Li_y\@Yy[VY|~|[F[_\MFY_D@A.*+o   75,%  '.Fi|[|}_Y{{]_~i[[_YECF\YCBV[D/ao fck7)$   (&%(/&/6\|NUA,WV[. !.BN[\YG#-1v f*vUH%$ !&,% &-,CADV]OB!       + $ *J6)$!%&(!6-BVk[]|}B.     $   av9H-$ %$!2!&-1.\_y||#   ow <od6)! !&!26-#,ACA||@     o  l/)%$(%!$B.#2AD2@AFz#        $ o-( ) %!#"!EG#.F#@C\~y"   c   fg l-)$  27D!EX#!.D7DE1i~B       c$ f/(%) &JGE.@V^2M\W.[\\7         l60%$&AEX@.F\Y-VBiBWM"   *   r o< w6(%$!/,CXDUF.AGBXV#|AZi||F!  o      r =r u6-($'+/,.UBX\2.YF[_ViD6W.kiV2%         :1&$!6-JE.G~YBF\V#GBF2()&%!  o    $ * 6/0$$ &-.ED#EXGD.M1!"$  fr    go H,)$%$ (!HABVB-#-AEZA-($     *gfa99  a I5,$'$%-%.AFYF.-.@1!!        >   I6,"$%!%!0%@2#6E@2& $%        $ vog I6,)%(%&!%%!! "%!           f*  9 HA6-(&-!%%!    $        $   JA6/5!&% %!"!2!!%             v< vv<L6/,&&$%&!2#&!%!/&!      8ffcvIA65,5($) %)%&%/6!            w w9  R K6.5/6!()!  !&       ov +og$H65/5-&$&!%        $  'o< +lo wfj6:6H6-&!!&!            $      c ACl'o$o6:161.-!!               $-&!   5o DCja o65/616-&             $!1/,1,      fc6)el/-/616.-.6!             %/6,6A1,       <v #%gf6,/6.AB.@"       )    (-56C61/     +<pMFUFVY\_]`\G!       $)(  $),-,HJA16!    "-. =uLWVY\[`]y|]y-    %/$$&/0HJCH61&/$     " +:85AYZ[_|y]G      %(%($$'%5,IMI6H6"%   @EG.2!+5:I/JZ[_i_y\B.  %!,%)'$%(%'%056HJ6/(,&  -NGN@,):/5MVYZY[\_BA2$$$)%&/&%&-5(%)$$)(0(,(06ICA6A-2!&  AE@EA6()+:7/@[Yy_]`PB#2$$!)(/#26-&,6:-/&%$)$)%)(05,0/,(5(HDJ62-,!% AEA.EA-,+:0)(-YOP\FGB.!%!%$!6C.AJD-.1-6H60()(&(0/-:-)50)"&.6!%  -.21-7.(:/&(,DBGNGOG!$(!!,AJ.6CBM.AJ.AHCIA/-0(05/6H-0/&$   &-2&,AGN-:5(%,AGOPOGPGE"'(&-,&6BUD.UZWMDFDJTJUJHI7650/6(0)$ -2.@-.NF"u8*!2EGP`]`PG#/&-!&-#-.DUFEFWZGNYVZHSUA:0(/56)%  BENG@ABD"v9*&.FGOPz`z`]`@ $&-/-6,A.6JEVYG[i]_i[|~i[^kUJWLH:50,5,56(%$  &FDNGE.AE6-v8*,B`O]z]y]_B&/616-HADEFYiO]z~|i^VJHA5/,&,)%   .JEBE6.7-Bv95,F`PO]`ONBE !-.AJAFGYFX_|_iWSJ6I6/0%$ .6A.-E@7JVr86AGP`]`_GPG`OGFDB!!!,1ADBFY`]y~iZUJH61C6-(%  &-6-.6DiZWoa/6NOPz`]`G]`GFB' &!(-AWFVYO|~_[ZMC6.60(& !.-61-(A_~lj5ANG]`_]zP]O`_O`GB!  %!&2AEMY|i_~i\FA7/,&%/-12,7Wi^Z^mp6ABFGFPY\]_NY\|_~_G-'&!2.BF|]\~_NME6-,!%/-)676TWZ_mrHDEDABMFNMJDFBX_\A&$&,/:be|_[i\||ZB6.! 2-16:57CUJCZ^llJMDBCAJWdehlpt|]\VY_|~_|_[UC6+-/6AWUWi^~i_Zhs_][MVZi|~iWL6%(.A.Uini_~n~~[DbjHJMDAJWdejpr |_]VUJCAJUJCDA- -CU^Z^iZhi^Z[ZY^T7RLCMDJDFDUBE6ABD[MFY|]V&%!(0:Kdhy_[YUA/6AUVFA.%%T6IJTWZ~ZJV[JTC;7:7SLJCACAE.JCA6AVk[\VNA!!%(&A\yZYMJMC,-,/6JD.6-&,6I7UIMWU\UWU^XU75=WJA6.6C7.DY^VNFDBDE-%05N[YUJWD6,-,/6,%'(/6LWh^in~^WTWT5JH6C616Di^\ZVDA7CMA!05J_[YDVJ6,-/&/,&%(,&6^k^i^WUSUT:T7:5);J6JH6HA6Hi_^ZVMCADA6,%(/5J\~}V[UDVDH6,&,&!,/57iWUWUTCT:)45SJ6JA6CD7AUYUWFXVBE7A6CA6,(,6HW[y\JLMVJH/&(0(%&!(56Tki~_|[^TI:754+)5SJCJA1A7JMUWUWVMJ@J616AH/(06:JZ\yYMHJDBA6(*)'%*&/CSWdWZ_hC5I7IC4+8:JA.6/6CJCJCAJEUJA61.6-6JA-/6HWVi[MCAM.6('%),(,506J_^WA;CTC5+)5uHIJCA650/HJCAJCUJWJA62.1-2/605:HUN~yYJ6J5.($$)+*)5)()+/C_\Z7RT7-4+)4vLHCI16,5HCMCAMULJH-(,6-!-6160:6:HJMi{yU:1H16-A)$'$*)5)5:%)IZ_iVWU7JC-)v658:;:56C7-6JC6/,)6&2,65/90:HIJY|]J61-6(6)$$)*:KdTHUZ\VJC6T75)/7r;:5=8=5/:HJC7A6AH165()-(&26508:K6T~~||_Y.1-(0,(1($$*(57ICILaSWKLTWZkVU75:Iou5;8<aKIC71HA7A5&-&,-650/0/6H:AM~~_[i|_[YM65,%&%,)$06ISTWUTLSRK;I;I7:/)+57lv58=;8=;<R6SL6C5%,56/5/,/6HJ[~[VZY[ZUA1,('$)'$:6I;KIA76:5:5*05*)*+435f598=<;<acdJTI6AI/,/6./56(/6,/61616ZiUMJDMVMC61,0%'$*'*=85:8;85*)53*4*35)fv*5*5985=;8:;KSKHI6H6:bLJITH6/65:M[~6ACJC6,)('$'+*5:8;<;585*)+*3534gw*5*5*5:;:KHKILHRbcSbdSL:I:/,1/56:HV|6HA:10)*(*$)'+0:=8;=;<5*5=5)5*=a53=4gg)*+*5RSIHSLSbKadSdSLH61/-5C|5/5:65:(*0*)'$*);5;:8<;:;8*5*=5354)+34R9*+5*)5:I:;KbScadLdbdSL:1/1/-/J~L:6:/6:650*+*5<;RKRSIR;:;<95*5*3+35R9*'*5;5K5:8;<;RSdS65:,/,&,/05U~|_iWJIA6/650*05*0*'*'*;RIRSR;=;=<=8=5=<3+3R9*59*0:<;9:;KRbcdSdSL6/5/,(2,(,/V_ZUhhMJH6/60595*)'*58;RKRK;589=53*858435;9*50)5;58508:aIRSeded6,0/(,(,(-VNJHj~[UMJ:6:0*50*'$*5;<;<;5;=9=85*5353583)*9*5*5:5;5:58:<RIRaedL60/,%(,(A6/j|_YMJI6/08*'*9=<=;=8;<8=8;<;3535358)*)*;85:8:;KRcdI6/,(%(%&(6AH6o_ZMJH659*9*;:5<=989=8;RQ=5*+35<594*595;5;<;5/5:;:;:;K;:SI:6560(,(B]_[YNJr~iVUH685050*5*95=;<8=8=8585;=<RQR=;=5345;895*98;5;:5:5:;5;cKRSdH:6/:61/,(0F|Y~[VJH60958*'*50<=<9=<8=9538538<;:535;=<85*<;8;=:;:;:6;I;:I:ISKI:/05/0)U|~_ZUI6598*'*595898=89<=<;8;Qb=58=858358<;KR:65:5:6;:I:I6:65050,U|iZWI:59890589*59858=;=8<;abaRbR=;8Q=5398<K:K:K;I5:;:I:6:6:6/5-6M~|~~_ZMI68*>9*598<=<RbgefegabRQSeSb;v9*8*;=:K;:;K;:;:6I:656:5:6/5-M|ikWL6:8;89*8<;Racgxflmljhehedv<8595;<;K:KI;:IK:I656506H56|~|_\|iZWH:89<9*;dRejejlflefejlmnmnhledv<;89;8<R<8R;R;:;R;I;K:I:;6505/65C||[Y_iVH6;8959'*)5lhljecacRagelmnhlhercK;8<=KR<;KRKIK;:KI;I:6/606U|_Zi~ZI689*95bSbRaQglmnhlhwS;=<a<aR<aSKR;IK:I;6:5:H6.]~VJU_[L68=*0*085KRabgcagetnhfloS;=<aRcSTR<K;:I6;I:;:;:L:5I[Z\iU6=9*508<K<RbcabgdmnelqlovwolfebR;K;I;:;:H6VVH;8*)0KRabcgelxmlrwojebI[ZC8;95*0*5;RaRcfgfcafllfml\[W^~~VI8;8*0*5;gbgefefgfmmlfjl~VUILZ[VI:=8*5*5RbgejflflmtmqfeZUZUC=8=9*5*5ebelfolwltm~kUH:<=5*53*0eSlehlqmqreR;=<fov ~WI85805*3elflpsqqfbgbR<a<RaRfowv ~UI8=505)*5hlmRaRgcagcgbRbaRKS;Rgfov iWI;=53*8lKacabgcdbaSbSRKSK;:KI;Rejov ~hW;85*5er;abgbgfgdedTKSbSKRKIKaSTK;K:bejo|kWK;8593958n<RbcedehedhKSRKSRSLSWKSTLIH~hWT;<8959=t<RegedehdRSdReh^WhdShWLI:ZiWSI;898=9blKbagbehelhehTdehSmnkedeld:6:|idT;9898mcaedbdhlhmnhnhedehnlemelmdLH;ikSK;:8=89TenmebjhnmhnhWehnhlhL:~ZSK;898;=8lnmhennhmlnhlhSTI;iS;:;=98<89epmqmhnhmmjleSLKZW~i~i|TI;8<=9<=KtnthWSRWV~X|[iK;=<8=89<:idIKW|~y_WR;<;<98KR<tsLSKZ~Z[<=8<SKbtsWSK~i|<;:KRcKbhsuWLK~aKRSabettstushdKgcaKjmssqurusuWaiusqtrurkSnustqorqrdSuuuvsqswrwhLnuvuqrsursroSiustusrwrwrolWdsusussstqrsrqsrwolmTrursuusststqtmqprurqsqrwololoLSnqoqrqruqsuutqsrstqwlowqolwolcfxovhLTW~owrsusruqrqlrplflwvuIRLUW~~i~lwowrgflou1sicSU^kdTbKsute:IJUhdSLKMustsrW;KWVKRMsurtuk:LWL<gMsuuqtttndLI;oNsusssumhTSNusuquststttttttvsmNusquqtmqptstqtptmsptmpmpttmotOusrqmspqtplspqtqtmtmtpmtpttqwtstOrflwoqrlqpqtqlmlmlptsrwmpsOoeljqpqsqmlmpmlpqpqpwptsP perqlpqplmlmprlmpmtusP'obljlmlplrolmoqrQ.vjalpmowlowowS4lglololo T;vforWB^posterazor-1.5.1/packaging/iss/license.rtf0000644000175000017500000011004011041177224020216 0ustar simrunsimrun{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}{\f1\fmodern\fprq1\fcharset0 Courier New;}} {\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\qc\b\f0\fs16 GNU GENERAL PUBLIC LICENSE\par \b0 Version 3, 29 June 2007\par \pard Copyright (C) 2007 Free Software Foundation, Inc. \par \par Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\par \par \pard\qc\b Preamble\par \pard\b0 The GNU General Public License is a free, copyleft license for software and other kinds of works.\par \par The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.\par \par When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.\par \par To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.\par \par For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\par \par Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.\par \par For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.\par \par Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.\par \par Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.\par \par The precise terms and conditions for copying, distribution and modification follow.\par \par \pard\qc\b TERMS AND CONDITIONS\par \pard 0. Definitions.\par \b0\par \ldblquote This License\rdblquote refers to version 3 of the GNU General Public License.\par \par \ldblquote Copyright\rdblquote also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.\par \par \ldblquote The Program\rdblquote refers to any copyrightable work licensed under this License. Each licensee is addressed as \ldblquote you\rdblquote . \ldblquote Licensees\rdblquote and \ldblquote recipients\rdblquote may be individuals or organizations.\par \par To \ldblquote modify\rdblquote a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a \ldblquote modified version\rdblquote of the earlier work or a work \ldblquote based on\rdblquote the earlier work.\par \par A \ldblquote covered work\rdblquote means either the unmodified Program or a work based on the Program.\par \par To \ldblquote propagate\rdblquote a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.\par \par To \ldblquote convey\rdblquote a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.\par \par An interactive user interface displays \ldblquote Appropriate Legal Notices\rdblquote to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.\par \b\par 1. Source Code.\par \b0 The \ldblquote source code\rdblquote for a work means the preferred form of the work for making modifications to it. \ldblquote Object code\rdblquote means any non-source form of a work.\par \par A \ldblquote Standard Interface\rdblquote means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.\par \par The \ldblquote System Libraries\rdblquote of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A \ldblquote Major Component\rdblquote , in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.\par \par The \ldblquote Corresponding Source\rdblquote for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.\par \par The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.\par \par The Corresponding Source for a work in source code form is that same work.\par \b\par 2. Basic Permissions.\par \b0 All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.\par \par You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.\par \par Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.\par 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\par \par No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.\par \par When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.\par \par \b 4. Conveying Verbatim Copies.\par \b0 You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.\par \par You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.\par \b\par 5. Conveying Modified Source Versions.\par \b0 You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:\par \par \pard\fi-284\li284\tx284 a)\tab The work must carry prominent notices stating that you modified it, and giving a relevant date.\par b)\tab The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to \ldblquote keep intact all notices\rdblquote .\par c)\tab You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.\par d)\tab If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.\par \pard\par A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an \ldblquote aggregate\rdblquote if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.\par \par \b 6. Conveying Non-Source Forms.\par \b0 You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:\par \par \pard\fi-284\li284\tx284 a)\tab Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.\par b)\tab Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.\par c)\tab Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.\par d)\tab Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.\par e)\tab Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.\par \pard\par A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.\par \par A \ldblquote User Product\rdblquote is either (1) a \ldblquote consumer product\rdblquote , which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, \ldblquote normally used\rdblquote refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.\par \par \ldblquote Installation Information\rdblquote for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.\par \par If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).\par \par The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.\par \par Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.\par \par \b 7. Additional Terms.\par \b0\ldblquote Additional permissions\rdblquote are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.\par \par When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.\par \par Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:\par \par \pard\fi-284\li284\tx284 a)\tab Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or\par b)\tab Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or\par c)\tab Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or\par d)\tab Limiting the use for publicity purposes of names of licensors or authors of the material; or\par e)\tab Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or\par f)\tab Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.\par \pard\par All other non-permissive additional terms are considered \ldblquote further restrictions\rdblquote within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.\par \par If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.\par \par Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.\par \par \b 8. Termination.\par \b0 You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).\par \par However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.\par \par Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.\par \par Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.\par \par \b 9. Acceptance Not Required for Having Copies.\par \b0 You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.\par \par \b 10. Automatic Licensing of Downstream Recipients.\par \b0 Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.\par \par An \ldblquote entity transaction\rdblquote is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.\par \par You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.\par \par \b 11. Patents.\par \b0 A \ldblquote contributor\rdblquote is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's \ldblquote contributor version\rdblquote .\par \par A contributor's \ldblquote essential patent claims\rdblquote are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, \ldblquote control\rdblquote includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.\par \par Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.\par \par In the following three paragraphs, a \ldblquote patent license\rdblquote is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To \ldblquote grant\rdblquote such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.\par \par If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. \ldblquote Knowingly relying\rdblquote means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.\par \par If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.\par \par A patent license is \ldblquote discriminatory\rdblquote if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.\par \par Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.\par \par \b 12. No Surrender of Others' Freedom.\par \b0 If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.\par \par \b 13. Use with the GNU Affero General Public License.\par \b0 Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.\par \par \b 14. Revised Versions of this License.\par \b0 The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\par \par Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License \ldblquote or any later version\rdblquote applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.\par \par If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.\par \par Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.\par \par \b 15. Disclaimer of Warranty.\par \b0 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \ldblquote AS IS\rdblquote WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par \par \b 16. Limitation of Liability.\par \b0 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\par \par \b 17. Interpretation of Sections 15 and 16.\par \b0 If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.\par \par END OF TERMS AND CONDITIONS\par \par \pard\qc\b How to Apply These Terms to Your New Programs\par \pard\b0 If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\par \par To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the \ldblquote copyright\rdblquote line and a pointer to where the full notice is found.\par \par \pard\li284\f1 \par Copyright (C) \par \par This program is free software: you can redistribute it and/or modify\par it under the terms of the GNU General Public License as published by\par the Free Software Foundation, either version 3 of the License, or\par (at your option) any later version.\par \par This program is distributed in the hope that it will be useful,\par but WITHOUT ANY WARRANTY; without even the implied warranty of\par MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par GNU General Public License for more details.\par \par You should have received a copy of the GNU General Public License\par along with this program. If not, see .\par \pard\f0\par Also add information on how to contact you by electronic and paper mail.\par \par If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:\par \par \pard\li284\f1 Copyright (C) \par This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par This is free software, and you are welcome to redistribute it\par under certain conditions; type `show c' for details.\par \pard\f0\par The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an \ldblquote about box\rdblquote .\par \par You should also get your employer (if you work as a programmer) or school, if any, to sign a \ldblquote copyright disclaimer\rdblquote for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see .\par \par The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .\par } posterazor-1.5.1/packaging/createWin32Release.cmd0000644000175000017500000000060111041177224021336 0ustar simrunsimrunpushd ..\src rd /s /q Release rd /s /q CMakeFiles del CMakeCache.txt cmake . -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release || pause nmake clean || pause nmake || pause upx --best PosteRazor.exe popd ISCC.exe iss\posterazor.iss SET ARCHIVEFILENAME=PosteRazor-1.5.1-Win32.zip del %ARCHIVEFILENAME% 7z a -tzip %ARCHIVEFILENAME% ..\src\PosteRazor.exe ..\CHANGES ..\LICENSE ..\README posterazor-1.5.1/LICENSE0000644000175000017500000010575511041177230014360 0ustar simrunsimrun GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . posterazor-1.5.1/src/0000755000175000017500000000000011041320342014117 5ustar simrunsimrunposterazor-1.5.1/src/alignmentCenter.png0000644000175000017500000000021211041177230017745 0ustar simrunsimrunPNG  IHDR{* PLTE-WBtRNS@f,IDATx^ 0%MZ=u,' #define CASESENSITIVESTRCMP stricmp #define CASESENSITIVESTRNCMP strnicmp #else #include #define CASESENSITIVESTRCMP strcasecmp #define CASESENSITIVESTRNCMP strncasecmp #endif #if defined (__APPLE__) #include #endif FlPosteRazorHelpDialog::FlPosteRazorHelpDialog() :PosteRazorHelpDialogUI(500, 400, "PosteRazor Help") { m_help_view->link(linkCallback); #if defined(NO_LAUNCH_URLS_OR_FILES) m_homepageButton->hide(); #endif } void FlPosteRazorHelpDialog::setHtmlContent(const char *content) { m_help_view->value(content); } void FlPosteRazorHelpDialog::jumpToAnchor(const char *anchor) { m_help_view->topline(anchor); } void FlPosteRazorHelpDialog::handleHomepageButtonClick(void) { openURLInBrowser(Translations::instance().posteRazorWebSiteURL()); } void FlPosteRazorHelpDialog::openURLInBrowser(const char* url) { #if defined (WIN32) ShellExecute(HWND_DESKTOP, "open", url, NULL, NULL, SW_SHOW); #elif defined (__APPLE__) char commandString[2048]; sprintf(commandString, "open \"%s\"", url); system(commandString); #endif } const char *FlPosteRazorHelpDialog::linkCallback(Fl_Widget *w, const char *uri) { const char* const httpSchemeStart = "http://"; if (0 == CASESENSITIVESTRNCMP(uri, httpSchemeStart, strlen(httpSchemeStart))) { ((FlPosteRazorHelpDialog*)(w->parent()))->openURLInBrowser(uri); return NULL; } else return uri; } void FlPosteRazorHelpDialog::updateLanguage(void) { label(Translations::instance().posteRazorHelp()); setHomepageButtonLabel(Translations::instance().posteRazorWebSite()); redraw(); } posterazor-1.5.1/src/PaintCanvasInterface.h0000644000175000017500000000430011041177230020323 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef PAINTCANVASINTERFACE_H #define PAINTCANVASINTERFACE_H class PaintCanvasInterface; class PainterInterface { public: virtual ~PainterInterface() {} virtual void paintOnCanvas(PaintCanvasInterface *paintCanvas, void* options = 0) const = 0; virtual void getImage(PaintCanvasInterface *paintCanvas, double maxWidth, double maxHeight) const = 0; }; class PaintCanvasInterface { public: virtual ~PaintCanvasInterface() {} virtual void setPainterInterface(const PainterInterface *painter) = 0; virtual void setBackgroundColor(unsigned char red, unsigned char green, unsigned char blue) = 0; virtual void drawFilledRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) = 0; virtual void drawRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) = 0; virtual void drawLine(double x1, double y1, double x2, double y2, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) = 0; virtual void getSize(double &width, double &height) const = 0; virtual void setImage(const unsigned char* rgbData, double width, double height) = 0; virtual void drawImage(double x, double y, double width, double height) = 0; }; #endif // PAINTCANVASINTERFACE_H posterazor-1.5.1/src/TranslationFrench.h0000644000175000017500000005724411041177230017736 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ French translation by Martin Loyer - traduction et loyer dot name This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationFrench_h #define TranslationFrench_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define FRENCH_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN class TranslationFrench: public TranslationInterface { public: const char* languageName(void) const {return "Franais";} const char* absoluteSize(void) const {return "Taille relle :";} const char* allImageFormats(void) const {return "Tous les formats d'images";} const char* back(void) const {return "Prcdent";} const char* borders(void) const {return "Bordures";} const char* bottom(void) const {return "Bas";} const char* bottomLeft(void) const {return "En bas gauche";} const char* bottomRight(void) const {return "En bas droite";} const char* cancel(void) const {return "Annuler";} const char* colorType(void) const {return "Format :";} const char* custom(void) const {return "Personnalis";} const char* fileCouldNotBeLoaded(void) const {return "Le fichier \"%s\" ne peut pas tre charg.";} const char* fileCouldNotBeSaved(void) const {return "Le fichier \"%s\" ne peut pas tre enregistr.";} const char* format(void) const {return "Format :";} const char* grayscale(void) const {return "Niveau de gris";} const char* height(void) const {return "Hauteur :";} const char* imageAlignment(void) const {return "Position de l'image";} const char* imageInformations(void) const {return "Informations :";} const char* imageSize(void) const {return "Taille de l'image";} const char* inputImage(void) const {return "Image dcouper";} const char* landscape(void) const {return "Paysage";} const char* language(void) const {return "Langue";} const char* languageExplanation(void) const {return "Choisissez votre langage";} const char* launchPDFApplication(void) const {return "Ouvrir le PDF aprs avoir sauv le poster";} const char* left(void) const {return "Gauche";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "monochrome";} const char* next(void) const {return "Suivant";} const char* orientation(void) const {return "Orientation :";} const char* overlappingPosition(void) const {return "Position du recouvrement";} const char* overlappingSize(void) const {return "Taille du recouvrement";} const char* overwriteFile(void) const {return "Le fichier '%s' existe dj.\nVoulez-vous le remplacer ?";} const char* pages(void) const {return "pages";} const char* paperFormat(void) const {return "Format de papier";} const char* palette(void) const {return "Palette";} const char* portrait(void) const {return "Portrait";} const char* posteRazorHelp(void) const {return "Aide de PosteRazor";} const char* posteRazorSettings(void) const {return #ifdef __APPLE__ // This seems to be the only problematic string on OSX. It is used for a window title. "R\x8Eglages de PosteRazor" #else "Rglages de PosteRazor" #endif ;} const char* posteRazorWebSiteURL(void) const {return FRENCH_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "Siteweb de PosteRazor";} const char* previewWithOpenGL(void) const {return "Prvisualisation OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL permet un rendu plus net. Mais il peut ralentir la prvisualisation sur les machines moins rcente.";} const char* resolution(void) const {return "Rsolution :";} const char* right(void) const {return "Droite";} const char* saveThePoster(void) const {return "Enregistrer le poster";} const char* saveThePosterAs(void) const {return "Enregistrer le poster sous";} const char* settings(void) const {return "Rglages...";} const char* Size(void) const {return "Taille :";} const char* sizeInPages(void) const {return "Taille en nombres de pages :";} const char* sizeInPercent(void) const {return "Taille en pourcentage :";} const char* sizeInPixels(void) const {return "Taille (en pixels) :";} const char* sizeInUnitOfLength(void) const {return "Taille (en %s) :";} const char* standard(void) const {return "Standard";} const char* stepXOfY(void) const {return "tape %d de %d";} const char* top(void) const {return "Haut ";} const char* topLeft(void) const {return "En haut gauche";} const char* topRight(void) const {return "En haut droite";} const char* unitOfLength(void) const {return "Unit de mesure";} const char* unitOfLengthExplanation(void) const {return "Choisissez l'unit de mesure qui vous convient.";} const char* width(void) const {return "Largeur :";} #define FRENCH_POSTERAZORHELSTEP "Étape" #define FRENCH_POSTERAZORHELPABOUT "À propos de PosteRazor" #define FRENCH_POSTERAZORHELPMANUAL "Manuel" #define FRENCH_POSTERAZORHELPSETTINGS "Réglages" #define FRENCH_POSTERAZORHELPSTEPTITLE01 "Ouvrir une image" #define FRENCH_POSTERAZORHELPSTEPTITLE02 "Format du papier" #define FRENCH_POSTERAZORHELPSTEPTITLE03 "Recouvrements de l'image" #define FRENCH_POSTERAZORHELPSTEPTITLE04 "Taille final du poster" #define FRENCH_POSTERAZORHELPSTEPTITLE05 "Enregistrer le Poster" #define FRENCH_POSTERAZORHELPINPUTFILEFORMATS "Formats d'image supportés" #define FRENCH_POSTERAZORHELPWHYPDFOUTPUT "Pourquoi un poster en PDF ?" #define FRENCH_POSTERAZORHELPCODEFROMTHIRDPARTIES "Code source tiers" #define FRENCH_POSTERAZORHELPLICENSE "License" const char* stepTitle01(void) const {return FRENCH_POSTERAZORHELPSTEPTITLE01;} const char* stepTitle02(void) const {return FRENCH_POSTERAZORHELPSTEPTITLE02;} const char* stepTitle03(void) const {return FRENCH_POSTERAZORHELPSTEPTITLE03;} const char* stepTitle04(void) const {return FRENCH_POSTERAZORHELPSTEPTITLE04;} const char* stepTitle05(void) const {return FRENCH_POSTERAZORHELPSTEPTITLE05;} const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

Aide de PosteRazor "POSTERAZORVERSION"

" POSTERAZORHELPENDLINE \ "

Contents

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, FRENCH_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "PosteRazor fractionne une grande image en plusieurs éléments qui peuvent être imprimés plus facilement. Ces morceaux sont ensuite assemblés pour former un poster. Le format de l'image initiale doit être compatible avec les formats suivants. Au lieu de directement imprimer le poster, PosteRazor créé un fichier PDF de plusieurs pages qui contient les morceaux à imprimer.
" POSTERAZORHELPENDLINE \ "Ce programme est libre (licence GNU GPL). Il fonctionne avec des codes, libres, utilisés dans d'autres projets. " POSTERAZORHELPENDLINE \ "Le site web de PosteRazor est posterazor.sourceforge.net." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, FRENCH_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "PosteRazor est organisé à la manière d'un assistant. La création d'un poster se fait en cinq étapes. Les boutons Précédent et Suivant permettent de naviguer facilement entre ces différentes étapes.
" POSTERAZORHELPENDLINE \ "Le bouton ? ouvre une fenêtre d'aide, qui explique l'étape en cours.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Toutes les valeurs et choix sont conservés au prochain lancement de l'application." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, FRENCH_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "En cliquant sur le bouton Réglages, situé en bas à gauche de la fenêtre principale, la boite de réglages des préférences s'affiche. Les réglages suivants sont possibles :" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, FRENCH_POSTERAZORHELSTEP " 1: " FRENCH_POSTERAZORHELPSTEPTITLE01) \ POSTERAZORHELPINDENTATION "Chargez une image en cliquant sur l'icône en forme de dossier. Choisissez le fichier en naviguant dans vos dossiers ou glissez-déposez l'image dans la fenêtre. Le glissé-déposé marche aussi dans les autres étapes de l'assistant.
" POSTERAZORHELPENDLINE \ "Plusieurs formats d'images sont compatibles. Après avoir chargé l'image, les informations pratiques (taille, couleur, résolution) sont affichées dans la rubrique Informations :." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, FRENCH_POSTERAZORHELSTEP " 2: " FRENCH_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Dans cette étape, vous allez régler le type de papier que vous utiliserez pour imprimer. Les formats de papier courants ainsi que l'orientation (paysage/portrait) sont disponibles dans la catégorie Standard. Cependant, si vous souhaitez définir vous-même la taille du papier, vous pouvez utiliser la catégorie Personnalisé (si une taille de papier standard n'apparaît pas, n'hésitez pas à m'envoyer un e-mail)." POSTERAZORHELPENDLINE \ "Même si votre imprimante n'impose pas de marges, il est toujours utile d'en mettre, afin de permettre de coller les différents éléments du poster entre eux." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, FRENCH_POSTERAZORHELSTEP " 3: " FRENCH_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "Les recouvrements entre morceaux donnent une certaine tolérance lors du découpage et du collage du poster." POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "La position de recouvrement détermine les cotés qui seront recouverts. " POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, FRENCH_POSTERAZORHELSTEP " 4: " FRENCH_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Pour déterminer la taille finale du poster, il existe trois méthodes :
" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Par défaut, le poster est immédiatement calculé avec un rendu de 1 pour 1 (100%). Vous pouvez juger du rendu dans la fenêtre de prévisualisation. Les traits rouges figurent la coupure entre les pages." POSTERAZORHELPENDLINE \ "Le bouton Position de l'image permet de régler la position de l'image par rapport au papier. L'image peut être centrée ou collée sur un des bords." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, FRENCH_POSTERAZORHELSTEP " 5: " FRENCH_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Enregistrez votre poster en cliquant sur le bouton en forme de disquette. Ensuite, donnez un nom à votre æuvre, choisissez l'emplacement, puis cliquez sur Enregistrer. Si vous cochez l'option Ouvrir le PDF après avoir sauvé le poster, le poster sera automatiquement ouvert dans votre application PDF après l'enregistrement." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, FRENCH_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "La plupart des formats d'images supportés par FreeImage sont supportés par PosteRazor. Les formats suivants sont gérés :
" POSTERAZORHELPENDLINE \ "BMP, DDS files, Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor gère les formats monochrome, niveaux de gris, RVB et CMJN (uniquement TIFF) au format 4, 8 et 24 bits. La couche alpha des images RVB est transformée en fond blanc." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, FRENCH_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "Pourquoi utiliser le PDF, alors qu'il serait possible d'imprimer directement ? Tout d'abord, PosteRazor a été créé pour fonctionner sur de multiples systèmes, qui utilisent tous des moyens différents pour imprimer. L'auteur de l'application ne les connaît pas tous. Ensuite, le PDF est utile quand on souhaite composer soigneusement son poster, pour enfin l'imprimer sans risque ailleurs (chez l'imprimeur, au travail, chez un ami...)." POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Pourquoi utiliser le format PDF et non pas un format d'image ? Le PDF permet d'intégrer directement toute l'image et de la couper virtuellement. Le PDF gère aussi directement les recouvrements. Enfin, il est plus pratique d'imprimer un PDF, que d'imprimer séparément les différentes images !" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, FRENCH_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, FRENCH_POSTERAZORHELPLICENSE) \ "PosteRazor - Créez vos propres posters !
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ "La licence GNU GPL est pour le moment en Anglais, tant que la Free Software Foundation n'aura pas validé la licence en langue Française.
 
" POSTERAZORHELPENDLINE \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 11;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,28,82,255,28,82, 255,28,82,255,28,82,255,28,82,255,28,82,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255, 0,0,140,140,140,140,140,140,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255, 28,82,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,28, 82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,0,0,255,0,0,255, 0,0,255,0,0,255,0,0,140,140,140,140,140,140,28,82,255,28,82,255,28,82,255,28, 82,255,28,82,255,28,82,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140, 140,140,140,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,28,82,255,28,82,255,28, 82,255,28,82,255,28,82,255,28,82,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 140,140,140,140,140,140,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,28,82,255, 28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255, 0,0,255,0,0,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140 }; return flagRGBData; } }; static const TranslationFrench french; #endif posterazor-1.5.1/src/TranslationBrazilianPortuguese.h0000644000175000017500000006052211041177230022520 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ Brazilian Portuguese translation by Ederson Gomes dos Santos This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationBrazilianPortuguese_h #define TranslationBrazilianPortuguese_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define BRAZILIANPORTUGUESE_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN class TranslationBrazilianPortuguese: public TranslationInterface { public: const char* languageName(void) const {return "Portugus do Brasil";} const char* absoluteSize(void) const {return "Tamanho total:";} const char* allImageFormats(void) const {return "Todos os formatos de imagens";} const char* back(void) const {return "Voltar";} const char* borders(void) const {return "Margens";} const char* bottom(void) const {return "Inferior";} const char* bottomLeft(void) const {return "Inferior esquerdo";} const char* bottomRight(void) const {return "Inferior direito";} const char* cancel(void) const {return "Cancelar";} const char* colorType(void) const {return "Tipo de cor:";} const char* custom(void) const {return "Personalizado";} const char* fileCouldNotBeLoaded(void) const {return "O arquivo \"%s\" no pde ser carregado.";} const char* fileCouldNotBeSaved(void) const {return "O arquivo \"%s\" no pde ser salvo.";} const char* format(void) const {return "Formato:";} const char* grayscale(void) const {return "Escala de cinza";} const char* height(void) const {return "Altura:";} const char* imageAlignment(void) const {return "Alinhamento da imagem";} const char* imageInformations(void) const {return "Informaes da imagem";} const char* imageSize(void) const {return "Tamanho da imagem";} const char* inputImage(void) const {return "Imagem de entrada";} const char* landscape(void) const {return "Paisagem";} const char* language(void) const {return "Idioma";} const char* languageExplanation(void) const {return "Escolha seu idioma";} const char* launchPDFApplication(void) const {return "Execute o leitor PDF aps salvar o poster";} const char* left(void) const {return "Esquerda";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "Monocromtico";} const char* next(void) const {return "Prximo";} const char* orientation(void) const {return "Orientao:";} const char* overlappingPosition(void) const {return "Posio da Superposio";} const char* overlappingSize(void) const {return "Tamanho da Superposio";} const char* overwriteFile(void) const {return "O arquivo '%s' j existe.\nQuer sobrescrev-lo?";} const char* pages(void) const {return "Pginas";} const char* paperFormat(void) const {return "Formato do papel";} const char* palette(void) const {return "Paleta";} const char* portrait(void) const {return "Retrato";} const char* posteRazorHelp(void) const {return "Ajuda do PosteRazor";} const char* posteRazorSettings(void) const {return "Configuraes do PosteRazor";} const char* posteRazorWebSiteURL(void) const {return BRAZILIANPORTUGUESE_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "Homepage do PosteRazor";} const char* previewWithOpenGL(void) const {return "Previsualizar com OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL possibilita uma previsualizao fcil em sistemas modernos. Em sistemas mais antigos a previsualizao fica mais lenta.";} const char* resolution(void) const {return "Resoluo:";} const char* right(void) const {return "Direita";} const char* saveThePoster(void) const {return "Salvar o poster";} const char* saveThePosterAs(void) const {return "Salvar o poster como";} const char* settings(void) const {return "Configuraes...";} const char* Size(void) const {return "Tamanho:";} const char* sizeInPages(void) const {return "Tamanho em pginas:";} const char* sizeInPercent(void) const {return "Tamanho em percentual:";} const char* sizeInPixels(void) const {return "Tamanho (pixels):";} const char* sizeInUnitOfLength(void) const {return "Tamanho (%s):";} const char* standard(void) const {return "Padro";} const char* stepXOfY(void) const {return "Passo %d de %d";} const char* top(void) const {return "Superior";} const char* topLeft(void) const {return "Superior esquerdo";} const char* topRight(void) const {return "Superior direito";} const char* unitOfLength(void) const {return "Unidade de Comprimento";} const char* unitOfLengthExplanation(void) const {return "Escolha a unidade com que deseja trabalhar";} const char* width(void) const {return "Largura:";} #define BRAZILIANPORTUGUESE_POSTERAZORHELSTEP "Passo" #define BRAZILIANPORTUGUESE_POSTERAZORHELPABOUT "Sobre o PosteRazor" #define BRAZILIANPORTUGUESE_POSTERAZORHELPMANUAL "Manual" #define BRAZILIANPORTUGUESE_POSTERAZORHELPSETTINGS "Configurações" #define BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE01 "Carregar uma imagem de entrada" #define BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE02 "Definie o formato do papel da impressora" #define BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLENOHTML03 "Definir a superposio do mosaico da imagem" #define BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE03 "Definir a superposição do mosaico da imagem" #define BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE04 "Definir o tamanho final do poster" #define BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE05 "Salvar o Poster" #define BRAZILIANPORTUGUESE_POSTERAZORHELPINPUTFILEFORMATS "Arquivos de imagens de entrada suportados" #define BRAZILIANPORTUGUESE_POSTERAZORHELPWHYPDFOUTPUT "Porque a saída em PDF?" #define BRAZILIANPORTUGUESE_POSTERAZORHELPCODEFROMTHIRDPARTIES "Código de terceiros" #define BRAZILIANPORTUGUESE_POSTERAZORHELPLICENSE "Licença" const char* stepTitle01(void) const {return BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE01;} const char* stepTitle02(void) const {return BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE02;} const char* stepTitle03(void) const {return BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLENOHTML03;} const char* stepTitle04(void) const {return BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE04;} const char* stepTitle05(void) const {return BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE05;} const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

PosteRazor "POSTERAZORVERSION" Help

" POSTERAZORHELPENDLINE \ "

Contents

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, BRAZILIANPORTUGUESE_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "O PosteRazor corta uma imagem e redimensiona em pedaços que podem ser impressas e colocadas juntas formando um Poster (cartaz). Como uma imagem de entrada, uma varredura de arquivos diversos formatos de arquivos de imagem são suportados. Em evz de imprimir diretamente o poster (cartaz), o PosteRazor produz uma multi-página em arquivo PDF que contém o poster.
" POSTERAZORHELPENDLINE \ "Este é um programa open source que depende de outros projetos open source. " POSTERAZORHELPENDLINE \ "O PosteRazor is hospedado em posterazor.sourceforge.net." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, BRAZILIANPORTUGUESE_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "PosteRazor tem a interface do usuário organizada em um \"Assistente\". Todas as configurações para a criação do poster podem ser feitas em 5 passos. Os botões Voltar e Próximo navegam através desses passos.
" POSTERAZORHELPENDLINE \ "O botão ? abre uma janela de ajuda com a explicação do corrente passo.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Todas as entradas e escolhas são lembradas até o próximo uso do PosteRazor." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, BRAZILIANPORTUGUESE_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "Pressionando o botão Configurações... na parte inferior esquerda da janela de diálogo, a janela de diálogo configurações do PosteRazor é aberta." POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, BRAZILIANPORTUGUESE_POSTERAZORHELSTEP " 1: " BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE01) \ POSTERAZORHELPINDENTATION "carregue a imagem clicando no botão com o ícone de abrir e selecione o arquivo de imagem, ou clique & arraste uma imagem para o PosteRazor. O clique & arraste também funciona nos outros passos.
" POSTERAZORHELPENDLINE \ "Muitos formatos de arquivos e tipos de imagens podem ser usados. Após carregar uma imagem, a informações mais importantes são listadas nos campos Informações da imagem." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, BRAZILIANPORTUGUESE_POSTERAZORHELSTEP " 2: " BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Defina o tamanho da folha de papel que usa em sua impressora. Um tamanho padrão de folhe pode ser selecionado através da escolha Formato, bem como a dsejada Orientation do papel. Alternativamente, pode definir um tamanho personalizado na aba Personalizar. (Favor me escrever um e-mail caso seu tamanho padrão escolhido seja perdido). " POSTERAZORHELPENDLINE \ "As bordas do papel são definidas nos campos Bordas. Mesmo que sua impressora não precise (precise de pequenas) de bordas na folha, algumas bordas podem ser necessárias para ter área suficiente para colar as folhas do poster final." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, BRAZILIANPORTUGUESE_POSTERAZORHELSTEP " 3: " BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "A sobreposição do mosaico é necessária para ter alguma tolerância para cortar totalmente as bordas desnecessárias de um lado. Assim, como nas margens do passo anterior, dá uma área maior para colar juntas as páginas do poster final. " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "The Posição de sobreposição define as margens destinadas a sobrepor cm as páginas vizinhas. As margens dos lados opostos devem ser cortadas (exceto as páginas ultraperiféricas)." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, BRAZILIANPORTUGUESE_POSTERAZORHELSTEP " 4: " BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Define o tamanho final do poster, em um dos três modos seguintes que podem ser selecionados com os botões correspondentes:
" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "O tamanho da largura e altura é sempre 1:1 e é automaticamente recalculado. Na área de previsualização, você pode ver as áreas de sobreposição que serão marcadas por retângulos vermelhos. " POSTERAZORHELPENDLINE \ "Alinhamento da imagem estabelece o alinhamento da imagem na área total do papel do poster. Isto é util se você quer guardar o papel não utilizado." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, BRAZILIANPORTUGUESE_POSTERAZORHELSTEP " 5: " BRAZILIANPORTUGUESE_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Salve o portsre clicando no botão Salvar e especificando o nome do arquivo destino. Marque ou desmarque o Executar aplicação PDF após o porter ser salvo, para, uma vez salvo o aqruivo PDF, abrir o aplicativo de PDF automaticamente." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, BRAZILIANPORTUGUESE_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "A maioria dos formatos de imagem são suportados pelo FreeImage também são suportadas pelo PosteRazor:
" POSTERAZORHELPENDLINE \ "BMP, arquivos DDS, Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor distingue e maneja imagens monocromáticas, escala de cinza, paleta de 4-bits, paleta de 8-bits, RGB 24 bits, e CMYK (apenas de TIF). Imagens RGB com um canal alfa são compostas automaticamente sobre um fundo branco." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, BRAZILIANPORTUGUESE_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "Porque o arquivo PDF não é automaticamente impresso? Primeiro que o desenvolvedor do software não sabe (ainda) como fazer isso, do tipo \"enviar imagens para a impressora\", em diferentes sistemas operacionais, os quais Posterrazor funciona. Também, PDF faz sentido, se o poster é criado em casa com toda a disponibilidade de tempo, no dia seguinte pode ser impresso numa impressora a laser colorida em outro local. " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Por que PDF e não outro formato de arquivo? PDF dá a possibilidade de juntar toda a imagem e cortá-la virtualmente, e não apenas em pixel mas também em suas frações. Além disso, parece ser mais prático imprimir um arquivo PDF multi-páginas que múltiplos arquivos de imagem." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, BRAZILIANPORTUGUESE_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, BRAZILIANPORTUGUESE_POSTERAZORHELPLICENSE) \ "PosteRazor - Faça seu próprio poster!
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 11;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,0,175, 75,0,175,75,62,192,56,62,192,56,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,0, 175,75,0,175,75,0,175,75,140,140,140,140,140,140,0,175,75,0,175,75,0,175,75,0, 175,75,0,175,75,0,175,75,62,192,56,187,226,19,248,243,0,248,243,0,187,226,19,62, 192,56,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,140,140,140,140, 140,140,0,175,75,0,175,75,0,175,75,0,175,75,62,192,56,187,226,19,236,233,8,139, 150,75,67,88,126,67,88,126,139,150,75,236,233,8,187,226,19,62,192,56,0,175,75,0, 175,75,0,175,75,0,175,75,140,140,140,140,140,140,0,175,75,0,175,75,62,192,56, 187,226,19,248,243,0,248,243,0,160,168,111,121,137,193,121,137,193,53,78,142,30, 57,151,139,150,75,248,243,0,248,243,0,187,226,19,62,192,56,0,175,75,0,175,75, 140,140,140,140,140,140,0,175,75,124,209,37,248,243,0,248,243,0,248,243,0,248, 243,0,53,78,142,30,57,151,33,59,152,113,130,189,94,113,181,53,78,142,248,243,0, 248,243,0,248,243,0,248,243,0,124,209,37,0,175,75,140,140,140,140,140,140,0,175, 75,0,175,75,62,192,56,187,226,19,248,243,0,248,243,0,139,150,75,30,57,151,30, 57,151,30,57,151,94,113,181,160,168,111,248,243,0,248,243,0,187,226,19,62,192, 56,0,175,75,0,175,75,140,140,140,140,140,140,0,175,75,0,175,75,0,175,75,0,175, 75,62,192,56,187,226,19,236,233,8,139,150,75,67,88,126,67,88,126,139,150,75, 236,233,8,187,226,19,62,192,56,0,175,75,0,175,75,0,175,75,0,175,75,140,140,140, 140,140,140,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,62,192,56,187, 226,19,248,243,0,248,243,0,187,226,19,62,192,56,0,175,75,0,175,75,0,175,75,0, 175,75,0,175,75,0,175,75,140,140,140,140,140,140,0,175,75,0,175,75,0,175,75,0, 175,75,0,175,75,0,175,75,0,175,75,0,175,75,62,192,56,62,192,56,0,175,75,0,175, 75,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,0,175,75,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140 }; return flagRGBData; } }; static const TranslationBrazilianPortuguese brazilianPortuguese; #endif posterazor-1.5.1/src/PaintCanvasBase.cpp0000644000175000017500000000334711041177230017642 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "PaintCanvasBase.h" #include PaintCanvasBase::PaintCanvasBase() : PaintCanvasInterface() , m_maxImageWidth(1024) , m_maxImageHeight(1024) , m_painter(NULL) { m_stateString[0] = '\0'; m_backgroundColor[0] = m_backgroundColor[1] = m_backgroundColor[2] = 0; } void PaintCanvasBase::setPainterInterface(const PainterInterface *painter) { m_painter = painter; } void PaintCanvasBase::setBackgroundColor(unsigned char red, unsigned char green, unsigned char blue) { m_backgroundColor[0] = red; m_backgroundColor[1] = green; m_backgroundColor[2] = blue; } void PaintCanvasBase::setState(const char *state) { strncpy(m_stateString, state, sizeof(m_stateString)); m_stateString[sizeof(m_stateString)-1] = '\0'; } void PaintCanvasBase::requestImage(void) { if (m_painter) m_painter->getImage(this, m_maxImageWidth, m_maxImageHeight); } posterazor-1.5.1/src/FlPersistentPreferences.cpp0000644000175000017500000000460311041177230021440 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlPersistentPreferences.h" FlPersistentPreferences::FlPersistentPreferences(const char *vendor, const char *application) :Fl_Preferences(Fl_Preferences::USER, vendor, application) { } void FlPersistentPreferences::setInteger(int value, const char *key) { Fl_Preferences::set(key, value); } void FlPersistentPreferences::setDouble(double value, const char *key) { Fl_Preferences::set(key, value); } void FlPersistentPreferences::setBoolean(bool value, const char *key) { Fl_Preferences::set(key, (int)(value?1:0)); } void FlPersistentPreferences::setString(const char *value, const char *key) { Fl_Preferences::set(key, value); } int FlPersistentPreferences::getInteger(const char *key, int defaultValue) { int returnValue = defaultValue; Fl_Preferences::get(key, returnValue, defaultValue); return returnValue; } double FlPersistentPreferences::getDouble(const char *key, double defaultValue) { double returnValue = defaultValue; Fl_Preferences::get(key, returnValue, defaultValue); return returnValue; } bool FlPersistentPreferences::getBoolean(const char *key, bool defaultValue) { int returnValue = defaultValue?1:0; Fl_Preferences::get(key, returnValue, defaultValue?1:0); return returnValue==0?false:true; } const char *FlPersistentPreferences::getString(const char *key, const char *defaultValue) { static char returnValue[2048]=""; Fl_Preferences::get(key, returnValue, defaultValue, sizeof(returnValue)); returnValue[sizeof(returnValue)-1] = '\0'; return returnValue; } posterazor-1.5.1/src/PaperFormats.cpp0000644000175000017500000000654611041177230017247 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "PaperFormats.h" #include typedef struct { PaperFormats::ePaperFormats format; char *name; double width; double height; } paperFormats; // Needs to have the same order as the ePaperFormats enum!!! static const paperFormats g_paperFormats[] = { {PaperFormats::ePaperFormatA4, "DIN A4", 21.0, 29.7}, {PaperFormats::ePaperFormatA3, "DIN A3", 29.7, 42.0}, {PaperFormats::ePaperFormatLegal, "Legal", 21.6, 35.6}, {PaperFormats::ePaperFormatLetter, "Letter", 21.6, 27.9}, {PaperFormats::ePaperFormatTabloid, "Tabloid", 27.9, 43.2} }; static const int g_paperFormatsCount = sizeof(g_paperFormats)/sizeof(g_paperFormats[0]); int PaperFormats::getPaperFormatsCount(void) { return g_paperFormatsCount; } PaperFormats::ePaperFormats PaperFormats::getPaperFormatForIndex(int index) { return g_paperFormats[index].format; } const int GetPaperFormatIndex(PaperFormats::ePaperFormats format) { int index = 0; for (int i = 0; i < g_paperFormatsCount; i++) { if (format == g_paperFormats[i].format) { index = i; break; } } return index; } const char* PaperFormats::getPaperFormatName(ePaperFormats format) { const int paperFormatIndex = GetPaperFormatIndex(format); return g_paperFormats[paperFormatIndex].name; } PaperFormats::ePaperFormats PaperFormats::getPaperFormatForName(const char* name) { ePaperFormats paperFormat = ePaperFormatA4; for (int i = 0; i < g_paperFormatsCount; i++) { if (0 == strcmp(name, g_paperFormats[i].name)) { paperFormat = getPaperFormatForIndex(i); break; } } return paperFormat; } double PaperFormats::getPaperDimension(ePaperFormats format, ePaperOrientations orientation, UnitsOfLength::eUnitsOfLength unit, bool width) { const int paperFormatIndex = GetPaperFormatIndex(format); const double dimension = ((width && orientation == ePaperOrientationPortrait) || (!width && orientation == ePaperOrientationLandscape))?g_paperFormats[paperFormatIndex].width:g_paperFormats[paperFormatIndex].height; return UnitsOfLength::convertBetweenUnitsOfLength(dimension, UnitsOfLength::eUnitOfLengthCentimeter, unit); } double PaperFormats::getPaperWidth(ePaperFormats format, ePaperOrientations orientation, UnitsOfLength::eUnitsOfLength unit) { return getPaperDimension(format, orientation, unit, true); } double PaperFormats::getPaperHeight(ePaperFormats format, ePaperOrientations orientation, UnitsOfLength::eUnitsOfLength unit) { return getPaperDimension(format, orientation, unit, false); } posterazor-1.5.1/src/TranslationPolish.h0000644000175000017500000007132611041177230017764 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ Polish translation by Grzegorz Wacikowski This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationPolish_h #define TranslationPolish_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define CHAR_Acedilla "" #define CHAR_HTML_Acedilla "¥" #define CHAR_acedilla "" #define CHAR_HTML_acedilla "¹" #define CHAR_Cacute "" #define CHAR_HTML_Cacute "Æ" #define CHAR_cacute "" #define CHAR_HTML_cacute "æ" #define CHAR_Ecedilla "" #define CHAR_HTML_Ecedilla "Ê" #define CHAR_ecedilla "" #define CHAR_HTML_ecedilla "ê" #define CHAR_Laccent "" #define CHAR_HTML_Laccent "£" #define CHAR_laccent "" #define CHAR_HTML_laccent "³" #define CHAR_Nacute "" #define CHAR_HTML_Nacute "Ñ" #define CHAR_nacute "" #define CHAR_HTML_nacute "ñ" #define CHAR_Oacute "" #define CHAR_HTML_Oacute "Ó" #define CHAR_oacute "" #define CHAR_HTML_oacute "ó" #define CHAR_Sacute "" #define CHAR_HTML_Sacute "Œ" #define CHAR_sacute "" #define CHAR_HTML_sacute "œ" #define CHAR_Zacute "" #define CHAR_HTML_Zacute "" #define CHAR_zacute "" #define CHAR_HTML_zacute "Ÿ" #define CHAR_Zdot "" #define CHAR_HTML_Zdot "¯" #define CHAR_zdot "" #define CHAR_HTML_zdot "¿" #define POLISH_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN class TranslationPolish: public TranslationInterface { public: const char* languageName(void) const {return "Polski";} const char* absoluteSize(void) const {return "Rozmiar ca"CHAR_laccent"kowity:";} const char* allImageFormats(void) const {return "Wszystkie formaty";} const char* back(void) const {return "Wr"CHAR_oacute"c";} const char* borders(void) const {return "Marginesy";} const char* bottom(void) const {return "D"CHAR_oacute""CHAR_laccent;} const char* bottomLeft(void) const {return "D"CHAR_oacute""CHAR_laccent" z lewej";} const char* bottomRight(void) const {return "D"CHAR_oacute""CHAR_laccent" z prawej";} const char* cancel(void) const {return "Anuluj";} const char* colorType(void) const {return "Typ koloru:";} const char* custom(void) const {return "W"CHAR_laccent"asny";} const char* fileCouldNotBeLoaded(void) const {return "Nie mo"CHAR_zdot"na otworzy"CHAR_cacute" pliku \"%s\"";} const char* fileCouldNotBeSaved(void) const {return "The File \"%s\" could not be saved.";} const char* format(void) const {return "Format:";} const char* grayscale(void) const {return "Skala szaro"CHAR_sacute"ci";} const char* height(void) const {return "Wysoko"CHAR_sacute""CHAR_cacute":";} const char* imageAlignment(void) const {return "Ustawienia obrazu";} const char* imageInformations(void) const {return "Informacje o obrazie";} const char* imageSize(void) const {return "Rozmiar obrazu";} const char* inputImage(void) const {return "Obraz wej"CHAR_sacute"ciowy";} const char* landscape(void) const {return "Poziomo";} const char* language(void) const {return "J"CHAR_ecedilla"zyk";} const char* languageExplanation(void) const {return "Wybierz j"CHAR_ecedilla"zyk";} const char* launchPDFApplication(void) const {return "Uruchom przegladark"CHAR_ecedilla" PDF po zapisaniu plakatu";} const char* left(void) const {return "Lewa";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "Monochromatyczny";} const char* next(void) const {return "Dalej";} const char* orientation(void) const {return "Po"CHAR_laccent"o"CHAR_zdot"enie:";} const char* overlappingPosition(void) const {return "Miejsce zaz"CHAR_ecedilla"bienia";} const char* overlappingSize(void) const {return "Szeroko"CHAR_sacute""CHAR_cacute" zaz"CHAR_ecedilla"bienia";} const char* overwriteFile(void) const {return "Plik '%s' ju"CHAR_zdot" instnieje.\nCzy chcesz go nadpisa"CHAR_cacute"?";} const char* pages(void) const {return "strony";} const char* paperFormat(void) const {return "Rozmiar papieru";} const char* palette(void) const {return "Paleta";} const char* portrait(void) const {return "Pionowo";} const char* posteRazorHelp(void) const {return "PosteRazor pomoc";} const char* posteRazorSettings(void) const {return "PosteRazor ustawienia";} const char* posteRazorWebSiteURL(void) const {return POLISH_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "PosteRazor strona www";} const char* previewWithOpenGL(void) const {return "Podgl"CHAR_acedilla"d z OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL umo"CHAR_zdot"liwia p"CHAR_laccent"ynny podgl"CHAR_acedilla"d na nowoczesnych komputerach. Mo"CHAR_zdot"e wyd"CHAR_laccent"u"CHAR_zdot"y"CHAR_cacute" proces podgl"CHAR_acedilla"du na starszych maszynach.";} const char* resolution(void) const {return "Rozdzielczo"CHAR_sacute""CHAR_cacute":";} const char* right(void) const {return "Prawa";} const char* saveThePoster(void) const {return "Zapisz plakat";} const char* saveThePosterAs(void) const {return "Zapisz plakat jako";} const char* settings(void) const {return "Ustawienia...";} const char* Size(void) const {return "Rozmiar:";} const char* sizeInPages(void) const {return "Rozmiar na stronie:";} const char* sizeInPercent(void) const {return "Rozmiar w procentach:";} const char* sizeInPixels(void) const {return "Rozmiar:";} // (w pikselach) const char* sizeInUnitOfLength(void) const {return "Rozmiar (w %s):";} const char* standard(void) const {return "Standard";} const char* stepXOfY(void) const {return "Krok %d z %d";} const char* top(void) const {return "G"CHAR_oacute"ra";} const char* topLeft(void) const {return "G"CHAR_oacute"ra z lewej";} const char* topRight(void) const {return "G"CHAR_oacute"ra z prawej";} const char* unitOfLength(void) const {return "Jednostka d"CHAR_laccent"ugo"CHAR_sacute"ci";} const char* unitOfLengthExplanation(void) const {return "Wybierz miar"CHAR_ecedilla" d"CHAR_laccent"ugo"CHAR_sacute"ci, kt"CHAR_oacute"ej chcesz u"CHAR_zdot"ywa"CHAR_cacute"";} const char* width(void) const {return "Szeroko"CHAR_sacute""CHAR_cacute":";} #define POLISH_POSTERAZORHELSTEP "Krok" #define POLISH_POSTERAZORHELPABOUT "O programie PosteRazor" #define POLISH_POSTERAZORHELPMANUAL "Manual" #define POLISH_POSTERAZORHELPSETTINGS "Ustawienia" #define POLISH_POSTERAZORHELPSTEPTITLE01 "Za"CHAR_HTML_laccent"aduj obraz" #define POLISH_POSTERAZORHELPSTEPTITLENOHTML01 "Za"CHAR_laccent"aduj obraz" #define POLISH_POSTERAZORHELPSTEPTITLE02 "Ustawienie formatu papieru drukarki" #define POLISH_POSTERAZORHELPSTEPTITLE03 "Definiowanie zaz"CHAR_HTML_ecedilla"biania si"CHAR_HTML_ecedilla"" #define POLISH_POSTERAZORHELPSTEPTITLENOHTML03 "Definiowanie zaz"CHAR_ecedilla"biania si"CHAR_ecedilla"" #define POLISH_POSTERAZORHELPSTEPTITLE04 "Ustawienie ko"CHAR_HTML_nacute"cowego rozmiaru plakatu" #define POLISH_POSTERAZORHELPSTEPTITLENOHTML04 "Ustawienie ko"CHAR_nacute"cowego rozmiaru plakatu" #define POLISH_POSTERAZORHELPSTEPTITLE05 "Zapisz plakat" #define POLISH_POSTERAZORHELPINPUTFILEFORMATS "Wspierane pliki wej"CHAR_HTML_sacute"ciowe" #define POLISH_POSTERAZORHELPWHYPDFOUTPUT "Dlaczego na wyj"CHAR_HTML_sacute"ciu plik PDF?" #define POLISH_POSTERAZORHELPCODEFROMTHIRDPARTIES "Dodatkowy kod" #define POLISH_POSTERAZORHELPLICENSE "Licencja" const char* stepTitle01(void) const {return POLISH_POSTERAZORHELPSTEPTITLENOHTML01;} const char* stepTitle02(void) const {return POLISH_POSTERAZORHELPSTEPTITLE02;} const char* stepTitle03(void) const {return POLISH_POSTERAZORHELPSTEPTITLENOHTML03;} const char* stepTitle04(void) const {return POLISH_POSTERAZORHELPSTEPTITLENOHTML04;} const char* stepTitle05(void) const {return POLISH_POSTERAZORHELPSTEPTITLE05;} const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

PosteRazor "POSTERAZORVERSION" Krok

" POSTERAZORHELPENDLINE \ "

Contents

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, POLISH_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "The PosteRazor rozcina obraz rastrowy na kawa"CHAR_HTML_laccent"ki, kt"CHAR_HTML_oacute"re mog"CHAR_HTML_acedilla" zosta"CHAR_HTML_cacute" wydrukowane, a nast"CHAR_HTML_ecedilla"pnie po"CHAR_HTML_laccent""CHAR_HTML_acedilla"czone w plakat. Jako plik wej"CHAR_HTML_sacute"ciowy, plik rastrowy sposr"CHAR_HTML_oacute"d various plik"CHAR_HTML_oacute"w graficznych o wspieranych formatach. Zamiast bezpo"CHAR_HTML_sacute"rednio drukowa"CHAR_HTML_cacute" plakat, the PosteRazor tworzy wielostronicowy plik PDF, kt"CHAR_HTML_oacute"ry zawiera kawalki plakatu.
" POSTERAZORHELPENDLINE \ "Jest to oprogramowanie typu Open Source i zalezy od innych projekt"CHAR_HTML_oacute"w tego typu. " POSTERAZORHELPENDLINE \ "The PosteRazor mo"CHAR_HTML_zdot"na znale"CHAR_HTML_zacute""CHAR_HTML_cacute" na posterazor.sourceforge.net." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, POLISH_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "PosteRazor posiada interfejs u"CHAR_HTML_zdot"ytkownika zbudowanu w oparciu o \"Wizard\". Wszelkie ustawienia plakatu tworzone s"CHAR_HTML_acedilla" w 5 krokach. Przyciski Wr"CHAR_HTML_oacute"c i Dalej prowadz"CHAR_HTML_acedilla" przez wizarda.
" POSTERAZORHELPENDLINE \ "Przycisk ? otwiera okno pomocy z wyja"CHAR_HTML_sacute"nieniem danego kroku.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Wszystkie wej"CHAR_HTML_sacute"cia i wybory s"CHAR_HTML_acedilla" pami"CHAR_HTML_ecedilla"tane do nast"CHAR_HTML_ecedilla"pnego u"CHAR_HTML_zdot"ycia PosteRazor." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, POLISH_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "Naciskaj"CHAR_HTML_acedilla"c przycisk Ustawienia... po lewej z do"CHAR_HTML_laccent"u w menu g"CHAR_HTML_laccent""CHAR_HTML_oacute"wnym, otwierane s"CHAR_HTML_acedilla" ustawienia PosteRazor." POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Jednostka miary: wybierz jednostk"CHAR_HTML_ecedilla" miary, kt"CHAR_HTML_oacute"r"CHAR_HTML_acedilla" b"CHAR_HTML_ecedilla"dzisz u"CHAR_HTML_zdot"ywa"CHAR_HTML_cacute" w czasie pracy. Gdy jednostka zostanie zmieniona, wszystkie warto"CHAR_HTML_sacute"ci zostaj"CHAR_HTML_acedilla" przeliczone automatycznie.
  • " POSTERAZORHELPENDLINE \ "
  • J"CHAR_HTML_ecedilla"zyk: wybierz sw"CHAR_HTML_oacute"j j"CHAR_HTML_ecedilla"zyk. PosteRazor nie wymaga restartowanie po zmianie j"CHAR_HTML_ecedilla"zyka.
  • " POSTERAZORHELPENDLINE \ "
  • Podgl"CHAR_HTML_acedilla"d z OpenGL: Wybierz, Je"CHAR_HTML_sacute"li PosteRazor powinien u"CHAR_HTML_zdot"ywa"CHAR_HTML_cacute" OpenGL do podgl"CHAR_HTML_acedilla"du obrazu. Zazwayczaj, w nowych komputerach OpenGL powinien by"CHAR_HTML_cacute" szybszy i dawa"CHAR_HTML_cacute" wi"CHAR_HTML_ecedilla"ksz"CHAR_HTML_acedilla" dok"CHAR_HTML_laccent"adno"CHAR_HTML_sacute""CHAR_HTML_cacute" podgl"CHAR_HTML_acedilla"du ni"CHAR_HTML_zdot" komputery nie obs"CHAR_HTML_laccent"uguj"CHAR_HTML_acedilla"ce OpenGL. Je"CHAR_HTML_zdot"eli PosteRazor wydaj"CHAR_HTML_ecedilla" si"CHAR_HTML_ecedilla" pracowa"CHAR_HTML_cacute" wolno i nie reaguje, spr"CHAR_HTML_oacute"buj czy nie b"CHAR_HTML_ecedilla"dzie lepiej pracowa"CHAR_HTML_laccent" po wy"CHAR_HTML_laccent"aczeniu OpenGL.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, POLISH_POSTERAZORHELSTEP " 1: " POLISH_POSTERAZORHELPSTEPTITLE01) \ /* polish html character test line POSTERAZORHELPINDENTATION CHAR_HTML_Acedilla""CHAR_HTML_acedilla""CHAR_HTML_Cacute""CHAR_HTML_cacute""CHAR_HTML_Ecedilla""CHAR_HTML_ecedilla""CHAR_HTML_Laccent""CHAR_HTML_laccent""CHAR_HTML_Nacute""CHAR_HTML_nacute""CHAR_HTML_Oacute""CHAR_HTML_oacute""CHAR_HTML_Sacute""CHAR_HTML_sacute""CHAR_HTML_Zacute""CHAR_HTML_zacute""CHAR_HTML_Zdot""CHAR_HTML_zdot"
" POSTERAZORHELPENDLINE \ */ POSTERAZORHELPINDENTATION "Za"CHAR_HTML_laccent"aduj obraz klikaj"CHAR_HTML_acedilla"c na przycisk i wybieraj"CHAR_HTML_acedilla"c plik graficzny lub chwytaj"CHAR_HTML_acedilla"c i przeciagaj"CHAR_HTML_acedilla"c obraz na PosteRazor. Chwy"CHAR_HTML_cacute" i przeci"CHAR_HTML_acedilla"gij dzia"CHAR_HTML_laccent"a tak"CHAR_HTML_zdot"e w pozosta"CHAR_HTML_laccent"ych krokach.
" POSTERAZORHELPENDLINE \ "Wiele format"CHAR_HTML_oacute"w plik"CHAR_HTML_oacute"w i typ"CHAR_HTML_oacute"w obraz"CHAR_HTML_oacute"w mo"CHAR_HTML_zdot"e zosta"CHAR_HTML_cacute" za"CHAR_HTML_laccent"adowanych. Po za"CHAR_HTML_laccent"adowaniu obrazu, najwa"CHAR_HTML_zdot"niejsze informacje s"CHAR_HTML_acedilla" wypisane w polu Informacje o obrazie." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, POLISH_POSTERAZORHELSTEP " 2: " POLISH_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Zdefiniuj rozmiar papieru, kt"CHAR_HTML_oacute"rego u"CHAR_HTML_zdot"ywasz w swojej drukarce. Standardowy rozmiar papieru mo"CHAR_HTML_zdot"e by"CHAR_HTML_cacute" wybrany z opcji Format, wraz z po"CHAR_HTML_zdot""CHAR_HTML_acedilla"dan"CHAR_HTML_acedilla" Orientacja papieru. Mo"CHAR_HTML_zdot"na tak"CHAR_HTML_zdot"e zdefiniowa"CHAR_HTML_cacute" w"CHAR_HTML_laccent"asny rozmiar papieru w zak"CHAR_HTML_laccent"adce W"CHAR_HTML_laccent"asny. (Prosz"CHAR_HTML_ecedilla" napisz do mnie email, je"CHAR_HTML_sacute"li nie ma jakiego"CHAR_HTML_sacute" standardowego rozmiaru do wyboru). " POSTERAZORHELPENDLINE \ "Marginesy s"CHAR_HTML_acedilla" definiowane w polu Marginesy. Nawet je"CHAR_HTML_sacute"li twoja drukarka nie wymaga (cho"CHAR_HTML_cacute"by ma"CHAR_HTML_laccent"ych) margines"CHAR_HTML_oacute"w, jaki"CHAR_HTML_sacute" margines mo"CHAR_HTML_zdot"e by"CHAR_HTML_cacute" konieczny by m"CHAR_HTML_oacute"c sklei"CHAR_HTML_cacute" kawa"CHAR_HTML_laccent"ki plakatu w ca"CHAR_HTML_laccent"o"CHAR_HTML_sacute""CHAR_HTML_cacute"." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, POLISH_POSTERAZORHELSTEP " 3: " POLISH_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "Kraw"CHAR_HTML_ecedilla"dzie zachodz"CHAR_HTML_acedilla"ce s"CHAR_HTML_acedilla" konieczne jako tolerancja w czasie odcianania niepotrzebnych margines"CHAR_HTML_oacute"w. Dodatkowo, tak jak marginesy, daje to wieksz"CHAR_HTML_acedilla" powierzchnie klejenia kawa"CHAR_HTML_laccent"k"CHAR_HTML_oacute"w w ca"CHAR_HTML_laccent"o"CHAR_HTML_sacute""CHAR_HTML_cacute". " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Miejsce zaz"CHAR_HTML_ecedilla"biania okre"CHAR_HTML_sacute"la brzeg jaki b"CHAR_HTML_ecedilla"dzie zachodzi"CHAR_HTML_cacute" na siebie z s"CHAR_HTML_acedilla"siednim kawa"CHAR_HTML_laccent"kiem. Brzegi po drugiej stronie przenaczone do odci"CHAR_HTML_ecedilla"cia (opr"CHAR_HTML_oacute"cz zewn"CHAR_HTML_ecedilla"trznych kawa"CHAR_HTML_laccent"k"CHAR_HTML_oacute"w)." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, POLISH_POSTERAZORHELSTEP " 4: " POLISH_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Okre"CHAR_HTML_sacute"l ko"CHAR_HTML_nacute"cowy rozmiar plakatu, jako jeden z trzech nast"CHAR_HTML_ecedilla"puj"CHAR_HTML_acedilla"cych tryb"CHAR_HTML_oacute"w, wybranych przyciskiem:
" POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Calkowity rozmiar obrazu: Chcesz mie"CHAR_HTML_cacute" specyficzny rozmiar plakatu.
  • " POSTERAZORHELPENDLINE \ "
  • Rozmiar na stronach: Chcesz u"CHAR_HTML_zdot"yc ca"CHAR_HTML_laccent"e strony i okre"CHAR_HTML_sacute"li"CHAR_HTML_cacute" ile chcesz ich u"CHAR_HTML_zdot"y"CHAR_HTML_cacute".
  • " POSTERAZORHELPENDLINE \ "
  • Rozmiar obrazu w procentach: Tw"CHAR_HTML_oacute"j obraz wej"CHAR_HTML_sacute"ciowy ma okre"CHAR_HTML_sacute"lony rozmiar kt"CHAR_HTML_oacute"ry jestdefiniowany przez ilo"CHAR_HTML_sacute""CHAR_HTML_cacute" pikseli oraz dpi (kropek na cal) i chcesz powi"CHAR_HTML_ecedilla"kszy"CHAR_HTML_cacute" obraz.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Ratio szeroko"CHAR_HTML_sacute"ci i wysoko"CHAR_HTML_sacute"ci jest zawsze 1:1 i jest automatycznie przeliczane. W obszarze podgl"CHAR_HTML_acedilla"du, mo"CHAR_HTML_zdot"esz zobaczy"CHAR_HTML_cacute" zaz"CHAR_HTML_ecedilla"biaj"CHAR_HTML_acedilla"ce si"CHAR_HTML_ecedilla" powierzchnie, kt"CHAR_HTML_oacute"re s"CHAR_HTML_acedilla" otoczone czerwonymi prostok"CHAR_HTML_acedilla"tami. " POSTERAZORHELPENDLINE \ "Po"CHAR_HTML_laccent"o"CHAR_HTML_zdot"enie obrazu ustawia po"CHAR_HTML_laccent"o"CHAR_HTML_zdot"enie na kartce. Jest to przydatne je"CHAR_HTML_sacute"li chcesz wkorzysta"CHAR_HTML_cacute" niezu"CHAR_HTML_zdot"yty papier." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, POLISH_POSTERAZORHELSTEP " 5: " POLISH_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Zapisz plakat klikaj"CHAR_HTML_acedilla"c na przysisk zapisywania i okre"CHAR_HTML_sacute"laj"CHAR_HTML_acedilla"c lokalizajc"CHAR_HTML_ecedilla" nowego pliku. Sprawd"CHAR_HTML_zacute" lub nie Uruchom aplikacj"CHAR_HTML_ecedilla" PDF po zapisaniu plakatu, czy standardowa aplikacja PDF zainstalowana w stoim systemie operacyjnym powinna sie urychamia"CHAR_HTML_cacute" automatycznie po zapisaniu pliku PDF." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, POLISH_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "Wi"CHAR_HTML_ecedilla"kszo"CHAR_HTML_sacute""CHAR_HTML_cacute" obraz"CHAR_HTML_oacute"w rastrowych wspieranych przez FreeImage jest tak"CHAR_HTML_zdot"e wspierana przez PosteRazor:
" POSTERAZORHELPENDLINE \ "BMP, pliki DDS, Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor odr"CHAR_HTML_oacute""CHAR_HTML_zdot"nia obrazu czarno-bia"CHAR_HTML_laccent"e, skal"CHAR_HTML_ecedilla" szaro"CHAR_HTML_sacute"ci, 4-bitow"CHAR_HTML_acedilla" palet"CHAR_HTML_ecedilla", 8-bitow"CHAR_HTML_acedilla" palet"CHAR_HTML_ecedilla", 24 bitowe RGB oraz CMYK (tylko z TIF). Obrazy RGB z kana"CHAR_HTML_laccent"em alfa s"CHAR_HTML_acedilla" automatycznie ustawiane na bia"CHAR_HTML_laccent"ym tle." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, POLISH_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "Dlaczego wyj"CHAR_HTML_sacute"ciowe pliki PDF nie s"CHAR_HTML_acedilla" automatycznie drukowane? Po pierwsze tworca programu nie wie jeszcze jak \"wysy"CHAR_HTML_laccent"a"CHAR_HTML_cacute" obraz do drukarki\", na r"CHAR_HTML_oacute"znych systemach operacyjnych, gdzie dzia"CHAR_HTML_laccent"a PosteRazor. Tak"CHAR_HTML_zdot"e, tworzenie PDF ma sens, je"CHAR_HTML_sacute"li plakat b"CHAR_HTML_ecedilla"dzie wydrukowany i poci"CHAR_HTML_ecedilla"ty w domowych warunkach, a nastepnego dnia drukowany na kolorowej drukarce laserowej w pracy (gdy wszyscy inni pojd"CHAR_HTML_acedilla" ju"CHAR_HTML_zdot" do domu). " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Dlaczego PDF a nie inny obraz rastrowy na wyj"CHAR_HTML_sacute"ciu? PDF daj"CHAR_HTML_ecedilla" mo"CHAR_HTML_zdot"liwo"CHAR_HTML_sacute""CHAR_HTML_cacute" stworzenia the ca"CHAR_HTML_laccent"ego obrazu i wirtualne jego poci"CHAR_HTML_ecedilla"cie; nie tylko pomi"CHAR_HTML_ecedilla"dzy pikselami, ale tak"CHAR_HTML_zdot"e w u"CHAR_HTML_laccent"amkach pikseli." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, POLISH_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "
    " POSTERAZORHELPENDLINE \ "
  • FLTK jest u"CHAR_HTML_zdot"ywane do interfejsu urzytkownika. Jest to ma"CHAR_HTML_laccent"y (je"CHAR_HTML_sacute"li chodzi o rozmiar), szybki, fun&easy do nauczenia oraz bardzo przeno"CHAR_HTML_sacute"ny zestaw narz"CHAR_HTML_ecedilla"dzi UI. www.fltk.org
  • " POSTERAZORHELPENDLINE \ "
  • FreeImage jest u"CHAR_HTML_zdot"ywany do za"CHAR_HTML_laccent"adowania i trzymania obrazu. FreeImage website
  • " POSTERAZORHELPENDLINE \ "
  • Fl_Native_File_Chooser jest u"CHAR_HTML_zdot"ywany do otwierania plik"CHAR_HTML_oacute"w i zapisywania. Fl_Native_File_Chooser website
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, POLISH_POSTERAZORHELPLICENSE) \ "PosteRazor - Stw"CHAR_HTML_oacute"rz sw"CHAR_HTML_oacute"j w"CHAR_HTML_laccent"asny plakat!
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 12;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140, 140,140,140,140,140,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140, 140,140,140,140,140,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140, 140,140,140,140,140,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140, 140,140,140,140,140,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,140, 140,140,140,140,140,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255, 0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,140,140,140,140,140,140,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,140,140,140,140,140,140,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140 }; return flagRGBData; } }; static const TranslationPolish polish; #endif posterazor-1.5.1/src/PosteRazorPDFOutput.cpp0000644000175000017500000003017111041177230020516 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FreeImage.h" #include #include #include #include "PaintCanvasInterface.h" #include "PosteRazorPDFOutput.h" #include #define LINEFEED "\012" #define CM2PT(cm) ((cm) / 2.54 * 72) #define JPEGFILECOPYBUFFERSIZE 10000 unsigned int PosteRazorPDFOutput::getImageBitsPerLineCount(int widthPixels, int bitPerPixel) { return (widthPixels * bitPerPixel); } unsigned int PosteRazorPDFOutput::getImageBytesPerLineCount(int widthPixels, int bitPerPixel) { return (int)(ceil((double)getImageBitsPerLineCount(widthPixels, bitPerPixel)/8.0f)); } unsigned int PosteRazorPDFOutput::getImageBytesCount(int widthPixels, int heightPixels, int bitPerPixel) { return getImageBytesPerLineCount(widthPixels, bitPerPixel) * heightPixels; } class PosteRazorPDFOutputImplementation: public PosteRazorPDFOutput { private: FILE *m_outputFile; char *m_xref; int m_pdfObjectCount; int m_contentPagesCount; int m_objectPagesID; int m_objectResourcesID; int m_objectImageID; char m_pageContent[2048]; double m_mediaboxWidth; double m_mediaboxHeight; const PainterInterface *m_painter; public: PosteRazorPDFOutputImplementation() : m_outputFile(NULL) , m_pdfObjectCount(0) , m_objectPagesID(0) , m_objectResourcesID(0) , m_objectImageID(0) , m_mediaboxWidth(5000.0) , m_mediaboxHeight(5000.0) , m_painter(NULL) { m_pageContent[0] = '\0'; } void setPainterInterface(const PainterInterface *painter) { m_painter = painter; } void AddOffsetToXref(void) { char xrefLine[25]; m_pdfObjectCount++; sprintf(xrefLine, "%.10d %.5d n " LINEFEED, (int)ftell(m_outputFile), 0); strcat(m_xref, xrefLine); } int AddImageResourcesAndXObject() { int err = 0; AddOffsetToXref(); m_objectResourcesID = m_pdfObjectCount; fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "endobj", m_pdfObjectCount, m_pdfObjectCount + 1 ); AddOffsetToXref(); fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "endobj", m_pdfObjectCount, m_pdfObjectCount + 1 ); return err; } int saveImage(const char *jpegFileName, int widthPixels, int heightPixels, ColorTypes::eColorTypes colorType) { int err = 0; err = AddImageResourcesAndXObject(); FILE *jpegFile = NULL; if (!err) { jpegFile = fopen(jpegFileName, "rb"); if (!jpegFile) err = 2; } int jpegFileSize = 0; if (!err) { fseek(jpegFile, 0, SEEK_END); jpegFileSize = ftell(jpegFile); fseek(jpegFile, 0, SEEK_SET); if (jpegFileSize == 0) err = 6; } if (!err) { AddOffsetToXref(); fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "stream" LINEFEED, m_pdfObjectCount, colorType==ColorTypes::eColorTypeCMYK?"/DeviceCMYK":"/DeviceRGB ", // Leaving space after RGB for eventual manual patching to CMYK jpegFileSize, widthPixels, heightPixels ); } unsigned char* buffer = NULL; if (!err) buffer = new unsigned char[JPEGFILECOPYBUFFERSIZE]; if (!buffer) err = 3; while(!err && !feof(jpegFile)) { size_t readBytes = fread(buffer, 1, JPEGFILECOPYBUFFERSIZE, jpegFile); if (!ferror(jpegFile)) { fwrite(buffer, 1, readBytes, m_outputFile); if (ferror(m_outputFile)) err = 4; } else { err = 5; } } if (!err) { fprintf ( m_outputFile, LINEFEED "endstream" LINEFEED\ "endobj" ); } if (buffer) delete[] buffer; fclose(jpegFile); return err; } int saveImage(unsigned char *imageData, int widthPixels, int heightPixels, int bitPerPixel, ColorTypes::eColorTypes colorType, unsigned char *rgbPalette, int paletteEntries) { int err = 0; err = AddImageResourcesAndXObject(); const unsigned int imageBytesCount = getImageBytesCount(widthPixels, heightPixels, bitPerPixel); unsigned int imageBytesCountCompressed = (unsigned int)(ceil((double)imageBytesCount*1.05))+12; unsigned char *imageDataCompressed = NULL; if (!err) { imageDataCompressed = new unsigned char[imageBytesCountCompressed]; if (!imageDataCompressed) err = 1; } if (!err) { imageBytesCountCompressed = FreeImage_ZLibCompress(imageDataCompressed, imageBytesCountCompressed, imageData, imageBytesCount); if (!imageBytesCountCompressed) err = 2; } char colorSpaceString[5000] = ""; // TODO: convert to switch if (colorType == ColorTypes::eColorTypeRGB) { strcpy(colorSpaceString, "/DeviceRGB"); } else if(colorType == ColorTypes::eColorTypeGreyscale) { strcpy(colorSpaceString, "/DeviceGray"); } /* else if(colorType == ColorTypes::eColorTypeMonochrome) { sprintf(colorSpaceString, "/DeviceGray" LINEFEED "/BlackIs1 %s", rgbPalette[0]?"false":"true"); } */ else if(colorType == ColorTypes::eColorTypeCMYK) { strcpy(colorSpaceString, "/DeviceCMYK"); } else { sprintf(colorSpaceString, "[/Indexed /DeviceRGB %d <", paletteEntries-1); // -1, because PDF wants the highest index, not the number of entries for (int i = 0; i < paletteEntries; i++) { char rgbHex[20]; sprintf(rgbHex, "%.2x%.2x%.2x", rgbPalette[i*3], rgbPalette[i*3 + 1], rgbPalette[i*3 + 2]); strcat(colorSpaceString, rgbHex); } strcat(colorSpaceString, ">]"); } AddOffsetToXref(); m_objectImageID = m_pdfObjectCount; fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "stream" LINEFEED, m_pdfObjectCount, colorSpaceString, (int)imageBytesCountCompressed, widthPixels, heightPixels, ( colorType == ColorTypes::eColorTypePalette?bitPerPixel :colorType == ColorTypes::eColorTypeMonochrome?bitPerPixel :colorType == ColorTypes::eColorTypeGreyscale?bitPerPixel :colorType == ColorTypes::eColorTypeCMYK?(bitPerPixel/4) :(bitPerPixel/3) ) ); fwrite(imageDataCompressed, (int)imageBytesCountCompressed, 1, m_outputFile); fprintf ( m_outputFile, LINEFEED "endstream" LINEFEED\ "endobj" ); if (imageDataCompressed) delete[] imageDataCompressed; return err; } int startPage(void) { int err = 0; m_pageContent[0] = '\0'; AddOffsetToXref(); fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "/Parent %d 0 R" LINEFEED\ "/MediaBox [0 0 %f %f]" LINEFEED\ "/Resources %d 0 R" LINEFEED\ "/Contents %d 0 R" LINEFEED\ "/Type /Page" LINEFEED\ ">>" LINEFEED\ "endobj", m_pdfObjectCount, m_objectPagesID, m_mediaboxWidth, m_mediaboxHeight, m_objectResourcesID, m_pdfObjectCount+1 ); return err; } int finishPage(void) { int err = 0; AddOffsetToXref(); fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "stream" LINEFEED\ "%s" LINEFEED\ "endstream" LINEFEED\ "endobj", m_pdfObjectCount, (int)strlen(m_pageContent), m_pageContent ); return err; } int startSaving(const char* fileName, int pages, double widthCm, double heightCm) { int err = 0; m_mediaboxWidth = CM2PT(widthCm); m_mediaboxHeight = CM2PT(heightCm); m_outputFile = fopen(fileName, "wb"); if (!m_outputFile) err = 1; if (!err) { m_contentPagesCount = pages; m_xref = new char[(m_contentPagesCount+15) * 50]; sprintf(m_xref, LINEFEED "xref" LINEFEED "0 %d" LINEFEED "0000000000 65535 f " LINEFEED, 7 + m_contentPagesCount*2); fprintf(m_outputFile, "%%PDF-1.3" LINEFEED "%%"); time_t rawtime; struct tm * timeinfo; time(&rawtime); timeinfo = gmtime(&rawtime); char dateStr[1024]; sprintf(dateStr, "%.4d%.2d%.2d%.2d%.2d%.2d", timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); AddOffsetToXref(); fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "endobj", m_pdfObjectCount, dateStr ); AddOffsetToXref(); fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "endobj", m_pdfObjectCount, m_pdfObjectCount+1 ); AddOffsetToXref(); m_objectPagesID = m_pdfObjectCount; char *kidsStr = new char[pages * 20]; kidsStr[0] = '\0'; for (int i = 0; i < pages; i++) { char kidStr[10]; sprintf(kidStr, "%s%d 0 R", i != 0?" ":"", i*2 + (m_pdfObjectCount) + 4); strcat(kidsStr, kidStr); } fprintf ( m_outputFile, LINEFEED "%d 0 obj" LINEFEED\ "<>" LINEFEED\ "endobj", m_pdfObjectCount, 50.0, 50.0, m_pdfObjectCount + 1, kidsStr, pages ); delete[] kidsStr; } return err; } int finishSaving() { int err = 0; const unsigned int startxref = ftell(m_outputFile); fprintf(m_outputFile, m_xref); fprintf ( m_outputFile, "trailer" LINEFEED\ "<>" LINEFEED\ "startxref" LINEFEED\ "%d" LINEFEED\ "%%%%EOF" LINEFEED, m_pdfObjectCount + 1, startxref ); if (m_xref) delete[] m_xref; fclose(m_outputFile); return err; } void setBackgroundColor(unsigned char, unsigned char, unsigned char) {} void drawFilledRect(double, double, double, double, unsigned char, unsigned char, unsigned char, unsigned char) {} void drawRect(double, double, double, double, unsigned char, unsigned char, unsigned char, unsigned char) {} void drawLine(double, double, double, double, unsigned char, unsigned char, unsigned char, unsigned char) {} void getSize(double &, double &) const {} void setImage(const unsigned char*, double, double ) {} void drawImage(double x, double y, double width, double height) { char imageCode[2048]=""; sprintf ( imageCode, "0 w" LINEFEED\ "q 0 0 %.4f %.4f re W* n" LINEFEED\ "q %.4f 0 0 %.4f %.4f %.4f cm" LINEFEED\ " /Im1 Do Q" LINEFEED\ "Q " , m_mediaboxWidth, m_mediaboxHeight, CM2PT(width), CM2PT(height), CM2PT(x), m_mediaboxHeight-CM2PT(y)-CM2PT(height) ); strcat(m_pageContent, imageCode); } }; PosteRazorPDFOutput* PosteRazorPDFOutput::createPosteRazorPDFOutput(void) { return (PosteRazorPDFOutput*) new PosteRazorPDFOutputImplementation(); } posterazor-1.5.1/src/overlappingTopRight.png0000644000175000017500000000016111041177230020640 0ustar simrunsimrunPNG  IHDRt` PLTE~#IDATx^1T#Y"+{Y/90I0{oIENDB`posterazor-1.5.1/src/PosteRazor.h0000644000175000017500000001402611041177230016411 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef POSTERAZOR_H #define POSTERAZOR_H #include "PaperFormats.h" #include "ColorTypes.h" #include "ImageIOTypes.h" #include "PaintCanvasInterface.h" class PersistentPreferencesInterface; class PosteRazorEnums { public: enum eOverlappingPositions { eOverlappingPositionTopRight, eOverlappingPositionBottomRight, eOverlappingPositionBottomLeft, eOverlappingPositionTopLeft }; enum ePosterSizeModes { ePosterSizeModeAbsolute, ePosterSizeModePercentual, ePosterSizeModePages, ePosterSizeModeNone }; enum eVerticalAlignments { eVerticalAlignmentTop, eVerticalAlignmentMiddle, eVerticalAlignmentBottom }; enum eHorizontalAlignments { eHorizontalAlignmentLeft, eHorizontalAlignmentCenter, eHorizontalAlignmentRight }; }; class PosteRazorSettersInterface { public: virtual ~PosteRazorSettersInterface() {} virtual void setUnitOfLength(UnitsOfLength::eUnitsOfLength unit) = 0; virtual void setPaperFormat(PaperFormats::ePaperFormats format) = 0; virtual void setPaperOrientation(PaperFormats::ePaperOrientations orientation) = 0; virtual void setPaperBorderTop(double border) = 0; virtual void setPaperBorderRight(double border) = 0; virtual void setPaperBorderBottom(double border) = 0; virtual void setPaperBorderLeft(double border) = 0; virtual void setCustomPaperWidth(double width) = 0; virtual void setCustomPaperHeight(double height) = 0; virtual void setUseCustomPaperSize(bool useIt) = 0; virtual void setOverlappingWidth(double width) = 0; virtual void setOverlappingHeight(double height) = 0; virtual void setOverlappingPosition(PosteRazorEnums::eOverlappingPositions position) = 0; virtual void setPosterWidth(PosteRazorEnums::ePosterSizeModes mode, double width) = 0; virtual void setPosterHeight(PosteRazorEnums::ePosterSizeModes mode, double height) = 0; virtual void setPosterSizeMode(PosteRazorEnums::ePosterSizeModes mode) = 0; virtual void setPosterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignments alignment) = 0; virtual void setPosterVerticalAlignment(PosteRazorEnums::eVerticalAlignments alignment) = 0; virtual void setPosterOutputFormat(ImageIOTypes::eImageFormats format) = 0; virtual void setLaunchPDFApplication(bool launch) = 0; }; class PosteRazorGettersInterface { public: virtual ~PosteRazorGettersInterface() {} virtual int getInputImageWidthPixels(void) const = 0; virtual int getInputImageHeightPixels(void) const = 0; virtual double getInputImageHorizontalDpi(void) const = 0; virtual double getInputImageVerticalDpi(void) const = 0; virtual double getInputImageWidth(void) const = 0; virtual double getInputImageHeight(void) const = 0; virtual int getInputImageBitsPerPixel(void) const = 0; virtual ColorTypes::eColorTypes getInputImageColorType(void) const = 0; virtual UnitsOfLength::eUnitsOfLength getUnitOfLength(void) const = 0; virtual const char* getUnitOfLengthName(void) const = 0; virtual PaperFormats::ePaperFormats getPaperFormat(void) const = 0; virtual PaperFormats::ePaperOrientations getPaperOrientation(void) const = 0; virtual double getPaperBorderTop(void) const = 0; virtual double getPaperBorderRight(void) const = 0; virtual double getPaperBorderBottom(void) const = 0; virtual double getPaperBorderLeft(void) const = 0; virtual double getCustomPaperWidth(void) const = 0; virtual double getCustomPaperHeight(void) const = 0; virtual bool getUseCustomPaperSize(void) const = 0; virtual double getPaperWidth(void) const = 0; virtual double getPaperHeight(void) const = 0; virtual double getPrintablePaperAreaWidth(void) const = 0; virtual double getPrintablePaperAreaHeight(void) const = 0; virtual double getOverlappingWidth(void) const = 0; virtual double getOverlappingHeight(void) const = 0; virtual PosteRazorEnums::eOverlappingPositions getOverlappingPosition(void) const = 0; virtual double getPosterWidth(PosteRazorEnums::ePosterSizeModes mode) const = 0; virtual double getPosterHeight(PosteRazorEnums::ePosterSizeModes mode) const = 0; virtual PosteRazorEnums::ePosterSizeModes getPosterSizeMode(void) const = 0; virtual PosteRazorEnums::eHorizontalAlignments getPosterHorizontalAlignment(void) const = 0; virtual PosteRazorEnums::eVerticalAlignments getPosterVerticalAlignment(void) const = 0; virtual ImageIOTypes::eImageFormats getPosterOutputFormat(void) const = 0; virtual bool getLaunchPDFApplication(void) const = 0; virtual bool getIsImageLoaded(void) const = 0; }; class PosteRazorActionsInterface { public: virtual ~PosteRazorActionsInterface() {} virtual bool readPersistentPreferences(PersistentPreferencesInterface *preferences) = 0; virtual bool writePersistentPreferences(PersistentPreferencesInterface *preferences) const = 0; virtual bool loadInputImage(const char *imageFileName, char *errorMessage, int errorMessageSize) = 0; virtual int savePoster(const char *fileName) const = 0; }; class PosteRazor: public PosteRazorSettersInterface, public PosteRazorGettersInterface, public PosteRazorActionsInterface, public PainterInterface { public: virtual ~PosteRazor() {}; static PosteRazor* createPosteRazor(); }; #endif // POSTERAZOR_H posterazor-1.5.1/src/FlPosteRazorDialogUI.fl0000644000175000017500000004730311041177230020427 0ustar simrunsimrun# data file for the Fltk User Interface Designer (fluid) version 1.0107 header_name {.h} code_name {.cpp} comment {/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */} {in_source in_header } decl {\#include "FlPaintCanvasGroup.h"} {public } decl {\#include "FlImageTextButton.h"} {public } decl {\#include "FlPosteRazorSpinner.h"} {public } widget_class PosteRazorDialogUI { user_data this open xywh {400 103 620 455} type Double resizable code0 {size_range(this->w(), this->h());} class Fl_Double_Window visible } { Fl_Group {} {open xywh {10 420 600 25} } { Fl_Box {} { xywh {295 420 15 25} resizable } Fl_Button m_settingsButton { label {Settings...} callback {openSettingsDialog();} xywh {10 420 220 25} labelcolor 32 align 16 class FlImageTextButton } Fl_Box m_settingsButtonLabel { image {../posterazor_ui_common/images/settingsIcon.png} xywh {230 420 40 25} align 20 hide } Fl_Button m_prevButton { label {@-2<- Back} callback {prev();} xywh {380 420 110 25} labelcolor 32 } Fl_Button m_nextButton { label {Next @-2->} callback {next();} xywh {500 420 110 25} labelcolor 32 } } Fl_Wizard m_wizard { user_data this open xywh {315 45 295 365} box THIN_DOWN_BOX } { Fl_Group m_loadInputImageStep {open xywh {315 45 295 365} color 50 hide } { Fl_Group m_imageLoadGroup { label {Input Image} open xywh {325 69 275 25} } { Fl_Box m_inputFileNameLabel { xywh {325 69 250 25} box THIN_DOWN_BOX color 55 align 84 resizable } Fl_Button m_imageLoadButton { label {@+1fileopen} callback {loadInputImage(0);} xywh {575 69 25 25} labelcolor 134 } } Fl_Group m_imageInfoGroup { label {Image information} xywh {325 120 275 85} box THIN_DOWN_BOX color 45 } { Fl_Box m_imageInfoKeysLabel { xywh {325 130 135 65} align 25 } Fl_Box m_imageInfoValuesLabel { xywh {460 130 135 65} align 21 } } Fl_Box {} { xywh {315 410 295 0} resizable } } Fl_Group m_paperSizeStep {open xywh {315 45 295 365} } { Fl_Tabs m_paperFormatTypeTabs { label {Paper size} callback {handlePaperSizeChangement(m_paperFormatTypeTabs);} open xywh {325 70 275 140} } { Fl_Group m_paperFormatStandardGroup { label Standard open xywh {325 95 275 115} box THIN_UP_BOX selection_color 40 hide } { Fl_Choice m_paperFormatChoice { label {Format:} open xywh {425 105 165 25} down_box BORDER_BOX } {} Fl_Group m_paperOrientationGroup { label {Orientation:} open xywh {425 140 165 60} box THIN_DOWN_BOX color 43 align 4 } { Fl_Round_Button m_paperOrientationPortraitRadioButton { label Portrait callback {handlePaperSizeChangement(m_paperOrientationPortraitRadioButton);} xywh {460 145 125 25} type Radio down_box ROUND_DOWN_BOX } Fl_Round_Button m_paperOrientationLandscapeRadioButton { label Landscape callback {handlePaperSizeChangement(m_paperOrientationLandscapeRadioButton);} xywh {460 170 125 25} type Radio down_box ROUND_DOWN_BOX } } } Fl_Group m_paperFormatCustomGroup { label Custom open xywh {325 95 275 115} box THIN_UP_BOX selection_color 40 } { Fl_Group m_paperCustomWidthInput { label {Width:} callback {handlePaperSizeChangement(m_paperCustomWidthInput);} xywh {425 122 95 25} align 4 when 1 class FlPosteRazorSpinner } {} Fl_Box m_paperCustomWidthDimensionUnitLabel { label cm xywh {520 122 75 25} align 20 } Fl_Group m_paperCustomHeightInput { label {Height:} callback {handlePaperSizeChangement(m_paperCustomHeightInput);} xywh {425 157 95 25} align 4 when 1 class FlPosteRazorSpinner } {} Fl_Box m_paperCustomHeightDimensionUnitLabel { label cm xywh {520 157 75 25} align 20 } } } Fl_Group m_paperBordersGroup { label {Borders (cm)} open xywh {325 235 275 135} box THIN_DOWN_BOX color 43 } { Fl_Group m_paperBorderTopInput { label Top callback {handlePaperSizeChangement(m_paperBorderTopInput);} xywh {422 260 80 25} when 1 class FlPosteRazorSpinner } {} Fl_Group m_paperBorderRightInput { label Right callback {handlePaperSizeChangement(m_paperBorderRightInput);} xywh {502 290 80 25} align 9 when 1 class FlPosteRazorSpinner } {} Fl_Group m_paperBorderBottomInput { label Bottom callback {handlePaperSizeChangement(m_paperBorderBottomInput);} xywh {422 320 80 25} align 2 when 1 class FlPosteRazorSpinner } {} Fl_Group m_paperBorderLeftInput { label Left callback {handlePaperSizeChangement(m_paperBorderLeftInput);} xywh {342 290 80 25} align 5 when 1 class FlPosteRazorSpinner } {} } Fl_Box {} { xywh {315 400 295 10} resizable } } Fl_Group m_overlappingStep {open xywh {315 45 295 365} hide } { Fl_Group m_overlappingSizeGroup { label {Overlapping size} open xywh {325 70 275 75} box THIN_DOWN_BOX color 45 selection_color 54 } { Fl_Group m_overlappingWidthInput { label {Width:} callback {handleOverlappingChangement(m_overlappingWidthInput);} xywh {430 80 90 25} align 4 when 1 class FlPosteRazorSpinner } {} Fl_Box m_overlappingWidthDimensionUnitLabel { label cm xywh {520 80 75 25} align 20 } Fl_Group m_overlappingHeightInput { label {Height:} callback {handleOverlappingChangement(m_overlappingHeightInput);} xywh {430 110 90 25} align 4 when 1 class FlPosteRazorSpinner } {} Fl_Box m_overlappingHeightDimensionUnitLabel { label cm xywh {520 110 75 25} align 20 } } Fl_Box {} { xywh {315 410 290 0} resizable } Fl_Group m_overlappingPositionGroup { label {Overlapping position} open xywh {325 170 275 190} box THIN_DOWN_BOX color 45 selection_color 54 } { Fl_Button m_overlappingPositionTopLeftButton { label {Top left} callback {handleOverlappingChangement(m_overlappingPositionTopLeftButton);} image {../posterazor_ui_common/images/overlappingTopLeft.png} xywh {335 180 120 80} type Radio color 47 selection_color 55 align 128 } Fl_Button m_overlappingPositionTopRightButton { label {Top right} callback {handleOverlappingChangement(m_overlappingPositionTopRightButton);} image {../posterazor_ui_common/images/overlappingTopRight.png} xywh {470 180 120 80} type Radio color 47 selection_color 55 align 128 } Fl_Button m_overlappingPositionBottomLeftButton { label {Bottom left} callback {handleOverlappingChangement(m_overlappingPositionBottomLeftButton);} image {../posterazor_ui_common/images/overlappingBottomLeft.png} xywh {335 270 120 80} type Radio color 47 selection_color 55 align 128 } Fl_Button m_overlappingPositionBottomRightButton { label {Bottom right} callback {handleOverlappingChangement(m_overlappingPositionBottomRightButton);} image {../posterazor_ui_common/images/overlappingBottomRight.png} xywh {470 270 120 80} type Radio color 47 selection_color 55 align 128 } } } Fl_Group m_posterSizeStep {open xywh {315 45 295 365} hide } { Fl_Group m_posterSizeGroup { label {Image size} open xywh {325 70 275 250} box THIN_DOWN_BOX color 45 selection_color 54 } { Fl_Round_Button m_posterSizeAbsoluteRadioButton { label {Absolute image size} callback {updatePosterSizeGroupsState();} xywh {335 80 260 20} type Radio down_box ROUND_DOWN_BOX } Fl_Group m_posterSizeAbsoluteGroup {open xywh {335 105 260 55} } { Fl_Group m_posterAbsoluteWidthInput { label {Width:} callback {updatePosterSizeFields(m_posterAbsoluteWidthInput);} xywh {430 105 90 25} align 4 when 1 class FlPosteRazorSpinner } {} Fl_Box m_posterAbsoluteWidthDimensionUnitLabel { label cm xywh {520 105 70 25} align 20 } Fl_Group m_posterAbsoluteHeightInput { label {Height:} callback {updatePosterSizeFields(m_posterAbsoluteHeightInput);} xywh {430 135 90 25} align 4 when 1 class FlPosteRazorSpinner } {} Fl_Box m_posterAbsoluteHeightDimensionUnitLabel { label cm xywh {520 135 70 25} align 20 } } Fl_Round_Button m_posterSizeInPagesRadioButton { label {Size in pages} callback {updatePosterSizeGroupsState();} xywh {335 170 260 20} type Radio down_box ROUND_DOWN_BOX } Fl_Group m_posterSizeInPagesGroup {open xywh {335 195 260 55} } { Fl_Group m_posterPagesWidthInput { label {Width:} callback {updatePosterSizeFields(m_posterPagesWidthInput);} xywh {430 195 90 25} align 4 when 1 code0 {o->setSpinnerVisible(true);} class FlPosteRazorSpinner } {} Fl_Box m_posterPagesWidthLabel { label pages xywh {520 195 70 25} align 20 } Fl_Group m_posterPagesHeightInput { label {Height:} callback {updatePosterSizeFields(m_posterPagesHeightInput);} xywh {430 225 90 25} align 4 when 1 code0 {o->setSpinnerVisible(true);} class FlPosteRazorSpinner } {} Fl_Box m_posterPagesHeightLabel { label pages xywh {520 225 70 25} align 20 } } Fl_Round_Button m_posterSizePercentualRadioButton { label {Image size in percent} callback {updatePosterSizeGroupsState();} xywh {335 260 260 20} type Radio down_box ROUND_DOWN_BOX } Fl_Group m_posterSizePercentualGroup {open xywh {335 285 260 25} } { Fl_Group m_posterPercentualSizeInput { label {Size:} callback {updatePosterSizeFields(m_posterPercentualSizeInput);} xywh {430 285 90 25} align 4 when 1 class FlPosteRazorSpinner } {} Fl_Box m_posterPercentualWidthLabel { label {%} xywh {520 285 70 25} align 20 } } } Fl_Group m_imageAlignmentGroup { label {Image alignment} open xywh {325 345 275 51} box THIN_DOWN_BOX color 45 selection_color 45 } { Fl_Group {} {open xywh {335 355 113 31} } { Fl_Button m_posterAlignmentTopButton { callback {handlePosterImageAlignment();} image {../posterazor_ui_common/images/alignmentTop.png} xywh {335 355 31 31} type Radio color 47 selection_color 55 } Fl_Button m_posterAlignmentMiddleButton { callback {handlePosterImageAlignment();} image {../posterazor_ui_common/images/alignmentMiddle.png} xywh {376 355 31 31} type Radio color 47 selection_color 55 } Fl_Button m_posterAlignmentBottomButton { callback {handlePosterImageAlignment();} image {../posterazor_ui_common/images/alignmentBottom.png} xywh {417 355 31 31} type Radio color 47 selection_color 55 } } Fl_Group {} {open xywh {477 355 113 31} } { Fl_Button m_posterAlignmentLeftButton { callback {handlePosterImageAlignment();} image {../posterazor_ui_common/images/alignmentLeft.png} xywh {477 355 31 31} type Radio color 47 selection_color 55 } Fl_Button m_posterAlignmentCenterButton { callback {handlePosterImageAlignment();} image {../posterazor_ui_common/images/alignmentCenter.png} xywh {518 355 31 31} type Radio color 47 selection_color 55 } Fl_Button m_posterAlignmentRightButton { callback {handlePosterImageAlignment();} image {../posterazor_ui_common/images/alignmentRight.png} xywh {559 355 31 31} type Radio color 47 selection_color 55 } } } Fl_Box {} { xywh {315 410 295 0} resizable } } Fl_Group m_savePosterStep {open xywh {315 45 295 365} hide } { Fl_Group m_savePosterGroup { label {Save the Poster} open xywh {325 70 275 85} box THIN_DOWN_BOX color 45 } { Fl_Button {} { label {@+14filesave} callback {savePoster();} xywh {335 80 255 25} labelcolor 37 } Fl_Check_Button m_setLaunchPDFApplicationCheckButton { label {Launch PDF application after saving} callback {setLaunchPDFApplication();} xywh {335 110 255 40} down_box DOWN_BOX align 148 } } Fl_Box {} { xywh {315 410 295 0} resizable } } } Fl_Group m_paintCanvasGroup {open xywh {10 45 300 365} box FLAT_BOX color 45 labelcolor 30 resizable class FlPaintCanvasGroup } {} Fl_Group {} { xywh {10 10 600 25} } { Fl_Box m_stepInfoBox { label {Step 1 of 8: Load an image} xywh {10 10 570 25} box THIN_UP_BOX color 10 labelfont 1 labelsize 15 labelcolor 32 align 20 resizable } Fl_Button {} { label {?} callback {openHelpDialog()} xywh {585 10 25 25} color 10 labelfont 1 labelsize 15 labelcolor 32 } } decl {virtual void openSettingsDialog(void) = 0;} {public } decl {virtual void next(void) = 0;} {public } decl {virtual void prev(void) = 0;} {public } decl {virtual void updateNavigationButtons(void) = 0;} {public } decl {virtual void openHelpDialog(void) = 0;} {public } decl {// ****** Load input image step:} {} decl {virtual void loadInputImage(const char *fileName) = 0;} {public } decl {// ****** Paper size step:} {} decl {virtual void handlePaperSizeChangement(Fl_Widget* sourceWidget) = 0;} {public } decl {// ****** Overlapping step:} {} decl {virtual void handleOverlappingChangement(Fl_Widget* sourceWidget) = 0;} {public } decl {// ****** Poster size step:} {} decl {virtual void updatePosterSizeGroupsState(void) = 0;} {public } decl {virtual void updatePosterSizeFields(Fl_Widget* sourceWidget) = 0;} {public } decl {virtual void handlePosterImageAlignment(void) = 0;} {public } decl {// ****** Save poster step:} {} decl {virtual void savePoster(void) = 0;} {public } decl {virtual void setLaunchPDFApplication(void) = 0;} {public } } widget_class PosteRazorHelpDialogUI { user_data this open xywh {236 419 500 400} type Double hide resizable code0 {size_range(300, 150);} class Fl_Double_Window } { Fl_Help_View m_help_view { xywh {10 10 480 345} labelsize 8 resizable code0 {o->textsize(14);} code1 {o->textfont(FL_HELVETICA);} } Fl_Group {} {open xywh {10 365 480 25} } { Fl_Return_Button {} { label OK callback {hide();} xywh {405 365 85 25} } Fl_Button m_homepageButton { label Homepage callback {handleHomepageButtonClick();} xywh {10 365 185 25} } Fl_Box {} { xywh {333 365 10 25} labelsize 8 resizable } } Function {setHomepageButtonLabel(const char *label)} {open return_type void } { code {m_homepageButton->label(label);} {} } decl {virtual void jumpToAnchor(const char *anchor) = 0;} {public } decl {virtual void setHtmlContent(const char *content) = 0;} {public } decl {virtual void handleHomepageButtonClick(void) = 0;} {public } decl {virtual void updateLanguage(void) = 0;} {public } } widget_class PosteRazorSettingsDialogUI { label {PosteRazor settings} user_data this open xywh {273 448 385 400} type Double code0 {m_okWasPressed = false;} class Fl_Double_Window modal visible } { decl {bool m_okWasPressed;} {public } Fl_Group m_backgroudGroup {open xywh {10 10 365 345} box THIN_DOWN_BOX labelsize 8 } { Fl_Group m_unitOfLengthGroup { label Units open xywh {20 35 345 85} box THIN_DOWN_BOX color 45 } { Fl_Group m_unitOfLengthButtonsGroup {open xywh {30 45 325 25} } {} Fl_Box m_unitOfLengthExplanationBox { label {Choose the distance unit you want to work with} xywh {30 80 325 30} align 148 } } Fl_Group m_useOpenGLGroup { label {Preview with OpenGL} open xywh {20 145 345 105} box THIN_DOWN_BOX color 45 } { Fl_Check_Button m_useOpenGLCheckButton { label {use OpenGL} callback {handleUseOpenGLChangement();} xywh {30 154 325 20} down_box DOWN_BOX } Fl_Box m_useOpenGLExplanationBox { label {OpenGL enables a smooth preview on modern systems. It could slow the preview down on old systems, though.} xywh {30 179 325 60} align 148 } } Fl_Group m_languageGroup { label Language open xywh {20 275 345 70} box THIN_DOWN_BOX color 45 } { Fl_Group m_languageButtonsGroup {open xywh {30 285 325 25} } {} Fl_Box m_languageExplanationBox { label {Choose your language} xywh {30 315 325 20} align 148 } } } Fl_Group m_confirmButtonsGroup {open selected xywh {10 365 365 25} } { Fl_Return_Button m_okButton { label OK callback {m_okWasPressed = true; hide();} xywh {280 365 95 25} } Fl_Button m_cancelButton { label Cancel callback {hide();} xywh {175 365 95 25} } Fl_Box {} { xywh {10 365 10 25} labelsize 8 resizable } } decl {virtual void handleUseOpenGLChangement(void) = 0;} {public } Function {show_modal(void)} {open return_type bool } { code {m_okWasPressed = true; show(); while(visible()) Fl::wait(); return m_okWasPressed;} {} } } posterazor-1.5.1/src/alignmentBottom.png0000644000175000017500000000021411041177230017773 0ustar simrunsimrunPNG  IHDR29 PLTE-WBtRNS@f.IDATx^̱ 0A, xI DP\aK O[ԯPIENDB`posterazor-1.5.1/src/PosteRazorWizardDialogController.cpp0000644000175000017500000000723511041177230023315 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "PosteRazorWizardDialogController.h" PosteRazorWizardDialogController::PosteRazorWizardDialogController() : m_WizardDialog(0) , m_wizardStep(PosteRazorWizardDialogEnums::ePosteRazorWizardStepInputImage) { } void PosteRazorWizardDialogController::setPosteRazorWizardDialog(PosteRazorWizardDialogInterface *dialog) { PosteRazorDialogController::setPosteRazorDialog(dialog); m_WizardDialog = dialog; } void PosteRazorWizardDialogController::handlePrevButtonPressed(void) { m_wizardStep = m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepSavePoster?PosteRazorWizardDialogEnums::ePosteRazorWizardStepPosterSize :m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPosterSize?PosteRazorWizardDialogEnums::ePosteRazorWizardStepOverlapping :m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepOverlapping?PosteRazorWizardDialogEnums::ePosteRazorWizardStepPaperSize :/* m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPaperSize? */PosteRazorWizardDialogEnums::ePosteRazorWizardStepInputImage; updateDialogWizardStep(); } void PosteRazorWizardDialogController::handleNextButtonPressed(void) { m_wizardStep = m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepInputImage?PosteRazorWizardDialogEnums::ePosteRazorWizardStepPaperSize :m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPaperSize?PosteRazorWizardDialogEnums::ePosteRazorWizardStepOverlapping :m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepOverlapping?PosteRazorWizardDialogEnums::ePosteRazorWizardStepPosterSize :/* m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPosterSize? */PosteRazorWizardDialogEnums::ePosteRazorWizardStepSavePoster; updateDialogWizardStep(); } void PosteRazorWizardDialogController::updateDialog(void) { PosteRazorDialogController::updateDialog(); updateDialogWizardStep(); } void PosteRazorWizardDialogController::updateDialogWizardStep(void) { m_WizardDialog->setWizardStep(m_wizardStep); m_WizardDialog->setPreviewState ( m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepInputImage?"image" :m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepOverlapping?"overlapping" :m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPaperSize?"paper" :m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPosterSize?"poster" :/* m_wizardStep == PosteRazorWizardDialogEnums::ePosteRazorWizardStepSavePoster? */"poster" ); m_WizardDialog->setPrevButtonEnabled(m_wizardStep != PosteRazorWizardDialogEnums::ePosteRazorWizardStepInputImage); m_WizardDialog->setNextButtonEnabled ( m_wizardStep != PosteRazorWizardDialogEnums::ePosteRazorWizardStepSavePoster && m_PosteRazor->getIsImageLoaded() ); } posterazor-1.5.1/src/flagEnglish.png0000644000175000017500000000032411041177230017055 0ustar simrunsimrunPNG  IHDR k:IDATx^ 0!_#7AH7T:8AH,ȋ7D6ɬs:Wo&b oF)yC^pBZ[uzfqT6Ne&0|4ee?򀷘\ ,UH °KIENDB`posterazor-1.5.1/src/alignmentRight.png0000644000175000017500000000021311041177230017603 0ustar simrunsimrunPNG  IHDR{* PLTE-WBtRNS@f-IDATx^10 Vj  8^kΡl;IENDB`posterazor-1.5.1/src/FlPosteRazorDialogUI.h0000644000175000017500000003103211041177230020245 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // generated by Fast Light User Interface Designer (fluid) version 1.0107 #ifndef FlPosteRazorDialogUI_h #define FlPosteRazorDialogUI_h #include #include "FlPaintCanvasGroup.h" #include "FlImageTextButton.h" #include "FlPosteRazorSpinner.h" #include #include #include #include #include #include #include #include #include class PosteRazorDialogUI : public Fl_Double_Window { void _PosteRazorDialogUI(); public: PosteRazorDialogUI(int X, int Y, int W, int H, const char *L = 0); PosteRazorDialogUI(int W, int H, const char *L = 0); FlImageTextButton *m_settingsButton; private: void cb_m_settingsButton_i(FlImageTextButton*, void*); static void cb_m_settingsButton(FlImageTextButton*, void*); public: Fl_Box *m_settingsButtonLabel; Fl_Button *m_prevButton; private: void cb_m_prevButton_i(Fl_Button*, void*); static void cb_m_prevButton(Fl_Button*, void*); public: Fl_Button *m_nextButton; private: void cb_m_nextButton_i(Fl_Button*, void*); static void cb_m_nextButton(Fl_Button*, void*); public: Fl_Wizard *m_wizard; Fl_Group *m_loadInputImageStep; Fl_Group *m_imageLoadGroup; Fl_Box *m_inputFileNameLabel; Fl_Button *m_imageLoadButton; private: void cb_m_imageLoadButton_i(Fl_Button*, void*); static void cb_m_imageLoadButton(Fl_Button*, void*); public: Fl_Group *m_imageInfoGroup; Fl_Box *m_imageInfoKeysLabel; Fl_Box *m_imageInfoValuesLabel; Fl_Group *m_paperSizeStep; Fl_Tabs *m_paperFormatTypeTabs; private: void cb_m_paperFormatTypeTabs_i(Fl_Tabs*, void*); static void cb_m_paperFormatTypeTabs(Fl_Tabs*, void*); public: Fl_Group *m_paperFormatStandardGroup; Fl_Choice *m_paperFormatChoice; Fl_Group *m_paperOrientationGroup; Fl_Round_Button *m_paperOrientationPortraitRadioButton; private: void cb_m_paperOrientationPortraitRadioButton_i(Fl_Round_Button*, void*); static void cb_m_paperOrientationPortraitRadioButton(Fl_Round_Button*, void*); public: Fl_Round_Button *m_paperOrientationLandscapeRadioButton; private: void cb_m_paperOrientationLandscapeRadioButton_i(Fl_Round_Button*, void*); static void cb_m_paperOrientationLandscapeRadioButton(Fl_Round_Button*, void*); public: Fl_Group *m_paperFormatCustomGroup; FlPosteRazorSpinner *m_paperCustomWidthInput; private: void cb_m_paperCustomWidthInput_i(FlPosteRazorSpinner*, void*); static void cb_m_paperCustomWidthInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_paperCustomWidthDimensionUnitLabel; FlPosteRazorSpinner *m_paperCustomHeightInput; private: void cb_m_paperCustomHeightInput_i(FlPosteRazorSpinner*, void*); static void cb_m_paperCustomHeightInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_paperCustomHeightDimensionUnitLabel; Fl_Group *m_paperBordersGroup; FlPosteRazorSpinner *m_paperBorderTopInput; private: void cb_m_paperBorderTopInput_i(FlPosteRazorSpinner*, void*); static void cb_m_paperBorderTopInput(FlPosteRazorSpinner*, void*); public: FlPosteRazorSpinner *m_paperBorderRightInput; private: void cb_m_paperBorderRightInput_i(FlPosteRazorSpinner*, void*); static void cb_m_paperBorderRightInput(FlPosteRazorSpinner*, void*); public: FlPosteRazorSpinner *m_paperBorderBottomInput; private: void cb_m_paperBorderBottomInput_i(FlPosteRazorSpinner*, void*); static void cb_m_paperBorderBottomInput(FlPosteRazorSpinner*, void*); public: FlPosteRazorSpinner *m_paperBorderLeftInput; private: void cb_m_paperBorderLeftInput_i(FlPosteRazorSpinner*, void*); static void cb_m_paperBorderLeftInput(FlPosteRazorSpinner*, void*); public: Fl_Group *m_overlappingStep; Fl_Group *m_overlappingSizeGroup; FlPosteRazorSpinner *m_overlappingWidthInput; private: void cb_m_overlappingWidthInput_i(FlPosteRazorSpinner*, void*); static void cb_m_overlappingWidthInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_overlappingWidthDimensionUnitLabel; FlPosteRazorSpinner *m_overlappingHeightInput; private: void cb_m_overlappingHeightInput_i(FlPosteRazorSpinner*, void*); static void cb_m_overlappingHeightInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_overlappingHeightDimensionUnitLabel; Fl_Group *m_overlappingPositionGroup; Fl_Button *m_overlappingPositionTopLeftButton; private: void cb_m_overlappingPositionTopLeftButton_i(Fl_Button*, void*); static void cb_m_overlappingPositionTopLeftButton(Fl_Button*, void*); public: Fl_Button *m_overlappingPositionTopRightButton; private: void cb_m_overlappingPositionTopRightButton_i(Fl_Button*, void*); static void cb_m_overlappingPositionTopRightButton(Fl_Button*, void*); public: Fl_Button *m_overlappingPositionBottomLeftButton; private: void cb_m_overlappingPositionBottomLeftButton_i(Fl_Button*, void*); static void cb_m_overlappingPositionBottomLeftButton(Fl_Button*, void*); public: Fl_Button *m_overlappingPositionBottomRightButton; private: void cb_m_overlappingPositionBottomRightButton_i(Fl_Button*, void*); static void cb_m_overlappingPositionBottomRightButton(Fl_Button*, void*); public: Fl_Group *m_posterSizeStep; Fl_Group *m_posterSizeGroup; Fl_Round_Button *m_posterSizeAbsoluteRadioButton; private: void cb_m_posterSizeAbsoluteRadioButton_i(Fl_Round_Button*, void*); static void cb_m_posterSizeAbsoluteRadioButton(Fl_Round_Button*, void*); public: Fl_Group *m_posterSizeAbsoluteGroup; FlPosteRazorSpinner *m_posterAbsoluteWidthInput; private: void cb_m_posterAbsoluteWidthInput_i(FlPosteRazorSpinner*, void*); static void cb_m_posterAbsoluteWidthInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_posterAbsoluteWidthDimensionUnitLabel; FlPosteRazorSpinner *m_posterAbsoluteHeightInput; private: void cb_m_posterAbsoluteHeightInput_i(FlPosteRazorSpinner*, void*); static void cb_m_posterAbsoluteHeightInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_posterAbsoluteHeightDimensionUnitLabel; Fl_Round_Button *m_posterSizeInPagesRadioButton; private: void cb_m_posterSizeInPagesRadioButton_i(Fl_Round_Button*, void*); static void cb_m_posterSizeInPagesRadioButton(Fl_Round_Button*, void*); public: Fl_Group *m_posterSizeInPagesGroup; FlPosteRazorSpinner *m_posterPagesWidthInput; private: void cb_m_posterPagesWidthInput_i(FlPosteRazorSpinner*, void*); static void cb_m_posterPagesWidthInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_posterPagesWidthLabel; FlPosteRazorSpinner *m_posterPagesHeightInput; private: void cb_m_posterPagesHeightInput_i(FlPosteRazorSpinner*, void*); static void cb_m_posterPagesHeightInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_posterPagesHeightLabel; Fl_Round_Button *m_posterSizePercentualRadioButton; private: void cb_m_posterSizePercentualRadioButton_i(Fl_Round_Button*, void*); static void cb_m_posterSizePercentualRadioButton(Fl_Round_Button*, void*); public: Fl_Group *m_posterSizePercentualGroup; FlPosteRazorSpinner *m_posterPercentualSizeInput; private: void cb_m_posterPercentualSizeInput_i(FlPosteRazorSpinner*, void*); static void cb_m_posterPercentualSizeInput(FlPosteRazorSpinner*, void*); public: Fl_Box *m_posterPercentualWidthLabel; Fl_Group *m_imageAlignmentGroup; Fl_Button *m_posterAlignmentTopButton; private: void cb_m_posterAlignmentTopButton_i(Fl_Button*, void*); static void cb_m_posterAlignmentTopButton(Fl_Button*, void*); public: Fl_Button *m_posterAlignmentMiddleButton; private: void cb_m_posterAlignmentMiddleButton_i(Fl_Button*, void*); static void cb_m_posterAlignmentMiddleButton(Fl_Button*, void*); public: Fl_Button *m_posterAlignmentBottomButton; private: void cb_m_posterAlignmentBottomButton_i(Fl_Button*, void*); static void cb_m_posterAlignmentBottomButton(Fl_Button*, void*); public: Fl_Button *m_posterAlignmentLeftButton; private: void cb_m_posterAlignmentLeftButton_i(Fl_Button*, void*); static void cb_m_posterAlignmentLeftButton(Fl_Button*, void*); public: Fl_Button *m_posterAlignmentCenterButton; private: void cb_m_posterAlignmentCenterButton_i(Fl_Button*, void*); static void cb_m_posterAlignmentCenterButton(Fl_Button*, void*); public: Fl_Button *m_posterAlignmentRightButton; private: void cb_m_posterAlignmentRightButton_i(Fl_Button*, void*); static void cb_m_posterAlignmentRightButton(Fl_Button*, void*); public: Fl_Group *m_savePosterStep; Fl_Group *m_savePosterGroup; private: void cb_14filesave_i(Fl_Button*, void*); static void cb_14filesave(Fl_Button*, void*); public: Fl_Check_Button *m_setLaunchPDFApplicationCheckButton; private: void cb_m_setLaunchPDFApplicationCheckButton_i(Fl_Check_Button*, void*); static void cb_m_setLaunchPDFApplicationCheckButton(Fl_Check_Button*, void*); public: FlPaintCanvasGroup *m_paintCanvasGroup; Fl_Box *m_stepInfoBox; private: void cb__i(Fl_Button*, void*); static void cb_(Fl_Button*, void*); public: virtual void openSettingsDialog(void) = 0; virtual void next(void) = 0; virtual void prev(void) = 0; virtual void updateNavigationButtons(void) = 0; virtual void openHelpDialog(void) = 0; virtual void loadInputImage(const char *fileName) = 0; virtual void handlePaperSizeChangement(Fl_Widget* sourceWidget) = 0; virtual void handleOverlappingChangement(Fl_Widget* sourceWidget) = 0; virtual void updatePosterSizeGroupsState(void) = 0; virtual void updatePosterSizeFields(Fl_Widget* sourceWidget) = 0; virtual void handlePosterImageAlignment(void) = 0; virtual void savePoster(void) = 0; virtual void setLaunchPDFApplication(void) = 0; }; #include #include class PosteRazorHelpDialogUI : public Fl_Double_Window { void _PosteRazorHelpDialogUI(); public: PosteRazorHelpDialogUI(int X, int Y, int W, int H, const char *L = 0); PosteRazorHelpDialogUI(int W, int H, const char *L = 0); Fl_Help_View *m_help_view; private: void cb_OK_i(Fl_Return_Button*, void*); static void cb_OK(Fl_Return_Button*, void*); public: Fl_Button *m_homepageButton; private: void cb_m_homepageButton_i(Fl_Button*, void*); static void cb_m_homepageButton(Fl_Button*, void*); public: virtual void jumpToAnchor(const char *anchor) = 0; virtual void setHtmlContent(const char *content) = 0; virtual void handleHomepageButtonClick(void) = 0; virtual void updateLanguage(void) = 0; void setHomepageButtonLabel(const char *label); }; class PosteRazorSettingsDialogUI : public Fl_Double_Window { void _PosteRazorSettingsDialogUI(); public: PosteRazorSettingsDialogUI(int X, int Y, int W, int H, const char *L = 0); PosteRazorSettingsDialogUI(int W, int H, const char *L = 0); bool m_okWasPressed; Fl_Group *m_backgroudGroup; Fl_Group *m_unitOfLengthGroup; Fl_Group *m_unitOfLengthButtonsGroup; Fl_Box *m_unitOfLengthExplanationBox; Fl_Group *m_useOpenGLGroup; Fl_Check_Button *m_useOpenGLCheckButton; private: void cb_m_useOpenGLCheckButton_i(Fl_Check_Button*, void*); static void cb_m_useOpenGLCheckButton(Fl_Check_Button*, void*); public: Fl_Box *m_useOpenGLExplanationBox; Fl_Group *m_languageGroup; Fl_Group *m_languageButtonsGroup; Fl_Box *m_languageExplanationBox; Fl_Group *m_confirmButtonsGroup; Fl_Return_Button *m_okButton; private: void cb_m_okButton_i(Fl_Return_Button*, void*); static void cb_m_okButton(Fl_Return_Button*, void*); public: Fl_Button *m_cancelButton; private: void cb_m_cancelButton_i(Fl_Button*, void*); static void cb_m_cancelButton(Fl_Button*, void*); public: virtual void handleUseOpenGLChangement(void) = 0; bool show_modal(void); }; #endif posterazor-1.5.1/src/settingsIcon.png0000644000175000017500000000037711041177230017313 0ustar simrunsimrunPNG  IHDR#WŸPLTE...BBB<<㍳tRNS@fIDATx^U10 ESv/B"n30䶸 “<=Y6:>zO]N9硘]ZZWT;[IIԁ-Vޱi(#MULu 0m|GyIENDB`posterazor-1.5.1/src/FlPersistentPreferences.h0000644000175000017500000000321111041177230021077 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLPERSISTENTPREFERENCES_H #define FLPERSISTENTPREFERENCES_H #include #include "PersistentPreferencesInterface.h" class FlPersistentPreferences: public Fl_Preferences, public PersistentPreferencesInterface { public: FlPersistentPreferences(const char *vendor, const char *application); void setInteger(int value, const char *key); void setDouble(double value, const char *key); void setBoolean(bool value, const char *key); void setString(const char *value, const char *key); int getInteger(const char *key, int defaultValue); double getDouble(const char *key, double defaultValue); bool getBoolean(const char *key, bool defaultValue); const char *getString(const char *key, const char *defaultValue); }; #endif // FLPERSISTENTPREFERENCES_H posterazor-1.5.1/src/Translations.h0000644000175000017500000000330211041177230016755 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef Translations_h #define Translations_h #include "TranslationInterface.h" class Translations: public TranslationInterface { protected: Translations() {} public: virtual ~Translations(void) {}; enum eLanguages { eLanguageUndefined ,eLanguageEnglish ,eLanguageGerman ,eLanguageFrench #ifdef WIN32 ,eLanguagePolish #endif ,eLanguageItalian ,eLanguageDutch ,eLanguageSpanish ,eLanguageBrazilianPortuguese }; static const Translations& instance(void); static eLanguages getSystemLanguage(void); static int getLanguagesCount(void); static eLanguages getLanguageForIndex(int index); static const TranslationInterface& getTranslationOfLanguage(eLanguages language); virtual void selectLangue(eLanguages language) const = 0; virtual eLanguages getSelectedLanguage(void) const = 0; }; #endif posterazor-1.5.1/src/FlPosteRazorSettingsDialog.h0000644000175000017500000000436311041177230021537 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLPOSTERAZORSETTINGSDIALOG_H #define FLPOSTERAZORSETTINGSDIALOG_H #include "UnitsOfLength.h" #include "FlPosteRazorDialogUI.h" #include "FlPaintCanvasGroup.h" #include "Translations.h" typedef struct { UnitsOfLength::eUnitsOfLength unitOfLength; FlPaintCanvasGroup::ePaintCanvasTypes previewType; Translations::eLanguages language; } posteRazorSettings; class SettingsChangementHandler { public: virtual ~SettingsChangementHandler() {} virtual void handleOptionsChangement(posteRazorSettings *settings) = 0; }; class FlPosteRazorSettingsDialog: public PosteRazorSettingsDialogUI { posteRazorSettings *m_settings; SettingsChangementHandler *m_changementHandler; int m_unitOfLengthButtonsCount; Fl_Button **m_unitOfLengthButtons; int m_languageButtonsCount; Fl_Button **m_languageButtons; Fl_RGB_Image **m_languageButtonImages; public: FlPosteRazorSettingsDialog(); ~FlPosteRazorSettingsDialog(); void setOptionsAndHandler(posteRazorSettings *settings, SettingsChangementHandler *changementHandler); static void handleUnitOfLengthChoice_cb(Fl_Widget *widget, void *userData); void handleUnitOfLengthChoice(void); void handleUseOpenGLChangement(void); static void handleLanguageChoice_cb(Fl_Widget *widget, void *userData); void handleLanguageChoice(void); void updateLanguage(void); void show(void); }; #endif // FLPOSTERAZORSETTINGSDIALOG_H posterazor-1.5.1/src/FlPosteRazorSpinner.cpp0000644000175000017500000001153311041177230020565 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlPosteRazorSpinner.h" #include #include #include #include #include #ifndef WIN32 #include #endif #define REPEATBUTTONWIDTH 15 FlPosteRazorSpinner::FlPosteRazorSpinner(int x, int y, int width, int height, const char* label) : Fl_Group(x, y, width, height, label) , m_spinnerVisible(true) { begin(); m_input = new Fl_Input(1, 1, 1, 1); m_input->type(FL_FLOAT_INPUT); m_input->value("1"); m_input->callback((Fl_Callback*)handleValueChangement_cb, this); m_input->when(FL_WHEN_CHANGED); m_increaseButton = new Fl_Repeat_Button(1, 1, 1, 1); m_increaseButton->label("+"); m_increaseButton->labelsize(11); m_increaseButton->labelfont(FL_COURIER_BOLD); m_increaseButton->box(FL_THIN_UP_BOX); m_increaseButton->callback((Fl_Callback*)handleButtonPress_cb, this); m_decreaseButton = new Fl_Repeat_Button(1, 1, 1, 1); m_decreaseButton->label("-"); m_decreaseButton->labelsize(11); m_decreaseButton->labelfont(FL_COURIER_BOLD); m_decreaseButton->box(FL_THIN_UP_BOX); m_decreaseButton->callback((Fl_Callback*)handleButtonPress_cb, this); setSpinnerVisible(false); updateButtonsState(); end(); } const char* FlPosteRazorSpinner::quickNDirtyDoubleToString(double value) { static char valueString[200]; sprintf(valueString, "%G", round(value, 4)); return valueString; } // "round()" from http://www.c-plusplus.de/forum/viewtopic-var-t-is-39342.html double FlPosteRazorSpinner::round(double Zahl, int Stellen) { return floor(Zahl * pow( 10.0, Stellen) + 0.5) * pow(10.0, -Stellen); } void FlPosteRazorSpinner::setSpinnerVisible(bool visible) { m_spinnerVisible = visible; if (m_spinnerVisible) { const int repeatButtonHeight = (int)((float)h()/2); m_increaseButton->resize(x() + w() - REPEATBUTTONWIDTH, y(), REPEATBUTTONWIDTH, repeatButtonHeight); m_decreaseButton->resize(x() + w() - REPEATBUTTONWIDTH, y() + h() - repeatButtonHeight, REPEATBUTTONWIDTH, repeatButtonHeight); m_increaseButton->show(); m_decreaseButton->show(); m_input->resize(x(), y(), w() - REPEATBUTTONWIDTH, h()); } else { m_input->resize(x(), y(), w(), h()); m_increaseButton->hide(); m_decreaseButton->hide(); } } void FlPosteRazorSpinner::updateButtonsState(void) { if (isValueDecrementationDisabled()) m_decreaseButton->deactivate(); else m_decreaseButton->activate(); } void FlPosteRazorSpinner::handleButtonPress_cb(Fl_Repeat_Button *button, void *data) { ((FlPosteRazorSpinner*)(data))->handleButtonPress(button); } void FlPosteRazorSpinner::handleButtonPress(Fl_Repeat_Button *button) { doValueSpin(button==m_increaseButton); } void FlPosteRazorSpinner::doValueSpin(bool increase) { const double increaseValue = increase?.5:-.50001; const double oldValue = value(); const double newValue = round(oldValue + increaseValue, 0); if (newValue >= 1.0) value(newValue); updateButtonsState(); do_callback(); } void FlPosteRazorSpinner::handleValueChangement_cb(Fl_Input *input, void *data) { ((FlPosteRazorSpinner*)(data))->handleValueChangement(input); } void FlPosteRazorSpinner::handleValueChangement(Fl_Input *input) { updateButtonsState(); do_callback(); } double FlPosteRazorSpinner::value() { return atof(m_input->value()); } void FlPosteRazorSpinner::value(double value) { m_input->value(quickNDirtyDoubleToString(value)); updateButtonsState(); } int FlPosteRazorSpinner::handle(int event) { const bool mouseIsOnGroup = Fl::event_x() > x() && Fl::event_x() <= x() + w() && Fl::event_y() > y() && Fl::event_y() <= y() + h(); if (event == FL_MOUSEWHEEL && mouseIsOnGroup) { const bool increase = Fl::e_dy < 0; if (Fl::e_dy != 0 && (increase || !isValueDecrementationDisabled())) doValueSpin(increase); return 1; // consume event } else return Fl_Group::handle(event); } bool FlPosteRazorSpinner::isValueDecrementationDisabled(void) { return (value() - 1.0 <= 0.0); } posterazor-1.5.1/src/alignmentLeft.png0000644000175000017500000000021511041177230017422 0ustar simrunsimrunPNG  IHDR{* PLTE-WBtRNS@f/IDATx^1 -|5GHFC(bbgWck57'>3#*IENDB`posterazor-1.5.1/src/PosteRazorDialogController.cpp0000644000175000017500000002340311041177230022127 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "PosteRazorDialogController.h" PosteRazorDialogController::PosteRazorDialogController() : m_PosteRazor(0) , m_Dialog(0) { } void PosteRazorDialogController::setPosteRazorModel(PosteRazor *model) { m_PosteRazor = model; if (m_Dialog) { updateDialog(); setDialogPosterSizeMode(); } } void PosteRazorDialogController::setPosteRazorDialog(PosteRazorDialogInterface *dialog) { m_Dialog = dialog; if (m_PosteRazor) { updateDialog(); setDialogPosterSizeMode(); } } void PosteRazorDialogController::updateDialog(void) { setDialogPaperOptions(); setDialogPosterOptions(); setDialogOverlappingOptions(); setDialogImageInfoFields(); setDialogSaveOptions(); m_Dialog->setUnitOfLength(m_PosteRazor->getUnitOfLength()); updatePreview(); } void PosteRazorDialogController::updatePreview(void) { m_Dialog->updatePreview(); } void PosteRazorDialogController::setUnitOfLength(UnitsOfLength::eUnitsOfLength unit) { m_PosteRazor->setUnitOfLength(unit); updateDialog(); } void PosteRazorDialogController::setPaperFormat(PaperFormats::ePaperFormats format) { m_PosteRazor->setPaperFormat(format); setDialogPosterOptions(); setDialogPaperBorders(); updatePreview(); } void PosteRazorDialogController::setPaperFormatByName(const char *name) { const PaperFormats::ePaperFormats paperFormat = PaperFormats::getPaperFormatForName(name); setPaperFormat(paperFormat); } void PosteRazorDialogController::setPaperOrientation(PaperFormats::ePaperOrientations orientation) { m_PosteRazor->setPaperOrientation(orientation); setDialogPosterOptions(); setDialogPaperBorders(); updatePreview(); } void PosteRazorDialogController::setPaperBorderTop(double border) { m_PosteRazor->setPaperBorderTop(border); setDialogPosterOptions(); updatePreview(); } void PosteRazorDialogController::setPaperBorderRight(double border) { m_PosteRazor->setPaperBorderRight(border); setDialogPosterOptions(); updatePreview(); } void PosteRazorDialogController::setPaperBorderBottom(double border) { m_PosteRazor->setPaperBorderBottom(border); setDialogPosterOptions(); updatePreview(); } void PosteRazorDialogController::setPaperBorderLeft(double border) { m_PosteRazor->setPaperBorderLeft(border); setDialogPosterOptions(); updatePreview(); } void PosteRazorDialogController::setCustomPaperWidth(double width) { m_PosteRazor->setCustomPaperWidth(width); setDialogPosterOptions(); setDialogPaperBorders(); updatePreview(); } void PosteRazorDialogController::setCustomPaperHeight(double height) { m_PosteRazor->setCustomPaperHeight(height); setDialogPosterOptions(); setDialogPaperBorders(); updatePreview(); } void PosteRazorDialogController::setUseCustomPaperSize(bool useIt) { m_PosteRazor->setUseCustomPaperSize(useIt); setDialogPosterOptions(); setDialogPaperBorders(); updatePreview(); } void PosteRazorDialogController::setOverlappingWidth(double width) { m_PosteRazor->setOverlappingWidth(width); setDialogPosterOptions(); updatePreview(); } void PosteRazorDialogController::setOverlappingHeight(double height) { m_PosteRazor->setOverlappingHeight(height); setDialogPosterOptions(); updatePreview(); } void PosteRazorDialogController::setOverlappingPosition(PosteRazorEnums::eOverlappingPositions position) { m_PosteRazor->setOverlappingPosition(position); updatePreview(); } void PosteRazorDialogController::setPosterWidth(PosteRazorEnums::ePosterSizeModes mode, double width) { m_PosteRazor->setPosterWidth(mode, width); setDialogPosterDimensions(mode, true); } void PosteRazorDialogController::setPosterHeight(PosteRazorEnums::ePosterSizeModes mode, double height) { m_PosteRazor->setPosterHeight(mode, height); setDialogPosterDimensions(mode, false); } void PosteRazorDialogController::setPosterSizeMode(PosteRazorEnums::ePosterSizeModes mode) { m_PosteRazor->setPosterSizeMode(mode); } void PosteRazorDialogController::setPosterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignments alignment) { m_PosteRazor->setPosterHorizontalAlignment(alignment); updatePreview(); } void PosteRazorDialogController::setPosterVerticalAlignment(PosteRazorEnums::eVerticalAlignments alignment) { m_PosteRazor->setPosterVerticalAlignment(alignment); updatePreview(); } void PosteRazorDialogController::setPosterOutputFormat(ImageIOTypes::eImageFormats format) { m_PosteRazor->setPosterOutputFormat(format); } void PosteRazorDialogController::setLaunchPDFApplication(bool launch) { m_PosteRazor->setLaunchPDFApplication(launch); setDialogSaveOptions(); } void PosteRazorDialogController::setDialogSaveOptions(void) { m_Dialog->setLaunchPDFApplication(m_PosteRazor->getLaunchPDFApplication()); } void PosteRazorDialogController::setDialogPosterSizeMode(void) { m_Dialog->setPosterSizeMode(m_PosteRazor->getPosterSizeMode()); } void PosteRazorDialogController::setDialogPosterOptions(void) { setDialogPosterDimensions(PosteRazorEnums::ePosterSizeModeNone, true); m_Dialog->setPosterHorizontalAlignment(m_PosteRazor->getPosterHorizontalAlignment()); m_Dialog->setPosterVerticalAlignment(m_PosteRazor->getPosterVerticalAlignment()); m_Dialog->setPosterSizeMode(m_PosteRazor->getPosterSizeMode()); } void PosteRazorDialogController::setDialogPosterDimensions(PosteRazorEnums::ePosterSizeModes excludedMode, bool widthExcluded) { static const struct { bool isWidth; PosteRazorEnums::ePosterSizeModes sizeMode; } sizeModes[] = { {true, PosteRazorEnums::ePosterSizeModeAbsolute}, {false, PosteRazorEnums::ePosterSizeModeAbsolute}, {true, PosteRazorEnums::ePosterSizeModePages}, {false, PosteRazorEnums::ePosterSizeModePages}, {true, PosteRazorEnums::ePosterSizeModePercentual} }; const int sizeModesCount = sizeof(sizeModes)/sizeof(sizeModes[0]); for (int i = 0; i < sizeModesCount; i++) { if ((excludedMode != sizeModes[i].sizeMode) || (widthExcluded != sizeModes[i].isWidth)) { if (sizeModes[i].isWidth) m_Dialog->setPosterWidth(sizeModes[i].sizeMode, m_PosteRazor->getPosterWidth(sizeModes[i].sizeMode)); else m_Dialog->setPosterHeight(sizeModes[i].sizeMode, m_PosteRazor->getPosterHeight(sizeModes[i].sizeMode)); } } updatePreview(); } void PosteRazorDialogController::setDialogPaperOptions(void) { setDialogPaperBorders(); setDialogCustomPaperDimensions(); m_Dialog->setUseCustomPaperSize(m_PosteRazor->getUseCustomPaperSize()); m_Dialog->setPaperFormat(m_PosteRazor->getPaperFormat()); m_Dialog->setPaperOrientation(m_PosteRazor->getPaperOrientation()); } void PosteRazorDialogController::setDialogPaperBorders(void) { m_Dialog->setPaperBorderTop(m_PosteRazor->getPaperBorderTop()); m_Dialog->setPaperBorderRight(m_PosteRazor->getPaperBorderRight()); m_Dialog->setPaperBorderBottom(m_PosteRazor->getPaperBorderBottom()); m_Dialog->setPaperBorderLeft(m_PosteRazor->getPaperBorderLeft()); } void PosteRazorDialogController::setDialogCustomPaperDimensions(void) { m_Dialog->setCustomPaperWidth(m_PosteRazor->getCustomPaperWidth()); m_Dialog->setCustomPaperHeight(m_PosteRazor->getCustomPaperHeight()); } void PosteRazorDialogController::setDialogImageInfoFields(void) { if (m_PosteRazor->getIsImageLoaded()) { m_Dialog->updateImageInfoFields ( m_PosteRazor->getInputImageWidthPixels(), m_PosteRazor->getInputImageHeightPixels(), m_PosteRazor->getInputImageWidth(), m_PosteRazor->getInputImageHeight(), m_PosteRazor->getUnitOfLength(), m_PosteRazor->getInputImageVerticalDpi(), m_PosteRazor->getInputImageHorizontalDpi(), m_PosteRazor->getInputImageColorType(), m_PosteRazor->getInputImageBitsPerPixel() ); } } void PosteRazorDialogController::setDialogOverlappingDimensions(void) { m_Dialog->setOverlappingWidth(m_PosteRazor->getOverlappingWidth()); m_Dialog->setOverlappingHeight(m_PosteRazor->getOverlappingHeight()); } void PosteRazorDialogController::setDialogOverlappingOptions(void) { setDialogOverlappingDimensions(); m_Dialog->setOverlappingPosition(m_PosteRazor->getOverlappingPosition()); } bool PosteRazorDialogController::readPersistentPreferences(PersistentPreferencesInterface *preferences) { const bool result = m_PosteRazor->readPersistentPreferences(preferences); if (result) updateDialog(); return result; } bool PosteRazorDialogController::writePersistentPreferences(PersistentPreferencesInterface *preferences) const { return m_PosteRazor->writePersistentPreferences(preferences); } bool PosteRazorDialogController::loadInputImage(const char *imageFileName, char *errorMessage, int errorMessageSize) { const bool result = m_PosteRazor->loadInputImage(imageFileName, errorMessage, errorMessageSize); if (result) { updateDialog(); m_Dialog->showImageFileName(imageFileName); } return result; } int PosteRazorDialogController::savePoster(const char *fileName) const { return m_PosteRazor->savePoster(fileName); } posterazor-1.5.1/src/overlappingBottomRight.png0000644000175000017500000000016111041177230021342 0ustar simrunsimrunPNG  IHDRt` PLTE~#IDATx^11AOU#YVJ0IIENDB`posterazor-1.5.1/src/FlGlPaintCanvas.cpp0000644000175000017500000002360711041177230017615 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlGlPaintCanvas.h" #include #define BORDER 9.0 #define MIN(a, b) ((a)<=(b)?(a):(b)) FlGlPaintCanvas::FlGlPaintCanvas(int x, int y, int width, int height, Fl_Widget *parentWidget) :Fl_Gl_Window(x, y, width, height) , PaintCanvasBase() , m_texturesNames(NULL) , m_imageWidth(0) , m_imageHeight(0) , m_texturesSize(64) , m_parentWidget(parentWidget) { } FlGlPaintCanvas::~FlGlPaintCanvas() { disposeImage(); } void FlGlPaintCanvas::draw() { if (!valid()) { valid(1); glLoadIdentity(); glViewport(0, 0, w(), h()); glOrtho(0, w(), h(), 0, -1, 1); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glGetIntegerv(GL_MAX_TEXTURE_SIZE, &m_texturesSize); m_texturesSize = MIN(m_texturesSize, 256); } glClear(GL_COLOR_BUFFER_BIT); drawFilledRect(-BORDER, -BORDER, w(), h(), m_backgroundColor[0], m_backgroundColor[1], m_backgroundColor[2], 255); m_painter->paintOnCanvas(this, m_stateString); } int FlGlPaintCanvas::handle(int event) { if (m_parentWidget) { switch (event) { case FL_DND_ENTER: case FL_DND_DRAG: case FL_DND_LEAVE: case FL_DND_RELEASE: return 1; case FL_PASTE: return m_parentWidget->parent()->handle(event); default: return Fl_Gl_Window::handle(event); }; } else return Fl_Gl_Window::handle(event); } void FlGlPaintCanvas::drawFilledRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) { if (height > 0 && height < 1) { drawLine(x, y, x+width, y, red, green, blue, alpha); } else if (width > 0 && width < 1) { drawLine(x, y, x, y+height, red, green, blue, alpha); } else { glColor4d(red/255.0, green/255.0, blue/255.0, alpha/255.0); glRectd(x + BORDER, y + BORDER, width + x + BORDER, height + y + BORDER); } } void FlGlPaintCanvas::drawRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) { if (height > 0 && height < 1) { drawLine(x, y, x+width, y, red, green, blue, alpha); } else if (width > 0 && width < 1) { drawLine(x, y, x, y+height, red, green, blue, alpha); } else { glColor4d(red/255.0, green/255.0, blue/255.0, alpha/255.0); glBegin(GL_LINE_LOOP); double x1 = x + BORDER; double x2 = width + x + BORDER; double y1 = y + BORDER; double y2 = height + y + BORDER; glVertex2d(x1, y1); glVertex2d(x2, y1); glVertex2d(x2, y2); glVertex2d(x1, y2); glEnd(); } } void FlGlPaintCanvas::drawLine(double x1, double y1, double x2, double y2, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) { glColor4d(red/255.0, green/255.0, blue/255.0, alpha/255.0); glBegin(GL_LINES); glVertex2d(x1 + BORDER, y1 + BORDER); glVertex2d(x2 + BORDER, y2 + BORDER); glEnd(); } void FlGlPaintCanvas::getSize(double &width, double &height) const { width = w() - BORDER - BORDER; height = h() - BORDER - BORDER; } void FlGlPaintCanvas::setImage(const unsigned char *rgbData, double width, double height) { disposeImage(); m_imageHeight = (unsigned int)height; m_imageWidth = (unsigned int)width; m_texturesNames = new GLuint[getTexturesCount()]; glGenTextures(getTexturesCount(), m_texturesNames); const unsigned long bytesPerImageRowCount = m_imageWidth * 3; const unsigned long bytesPerTextureRowCount = m_texturesSize * 3; const unsigned long textureRgbDataBytesCount = m_texturesSize * bytesPerTextureRowCount; unsigned char *textureRgbData = new unsigned char[textureRgbDataBytesCount]; for (unsigned int texturesRow = 0; texturesRow < getTexturesRowsCount(); texturesRow++) { for (unsigned int texturesColumn = 0; texturesColumn < getTexturesColumnsCount(); texturesColumn++) { const unsigned int currentTexture = texturesRow * getTexturesColumnsCount() + texturesColumn; const unsigned int currentTexturePixelsColumns = getTexturesColumnPixelColumns(texturesColumn); const unsigned int currentTexturePixelsRows = getTexturesRowPixelRows(texturesRow); memset(textureRgbData, 255, textureRgbDataBytesCount); for (unsigned int texturePixelRow = 0; texturePixelRow < currentTexturePixelsRows; texturePixelRow++) { memcpy( textureRgbData + texturePixelRow*bytesPerTextureRowCount, rgbData + ((texturesRow*m_texturesSize+texturePixelRow)*bytesPerImageRowCount) + (texturesColumn*bytesPerTextureRowCount), currentTexturePixelsColumns * 3 ); } glBindTexture(GL_TEXTURE_2D, m_texturesNames[currentTexture]); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, 0x812F); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, 0x812F); GLfloat color[4]; color[0] = color[1] = color[2] = 1; color[3] = 0; glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, color); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_texturesSize, m_texturesSize, 0, GL_RGB, GL_UNSIGNED_BYTE, textureRgbData); } } delete[] textureRgbData; redraw(); } void FlGlPaintCanvas::disposeImage(void) { if (m_texturesNames) { glDeleteTextures(getTexturesCount(), m_texturesNames); delete[] m_texturesNames; m_texturesNames = NULL; m_imageWidth = 0; m_imageHeight = 0; } } void FlGlPaintCanvas::drawImage(double x, double y, double width, double height) { if (m_texturesNames) { glColor4d(1, 1, 1, 1); glEnable(GL_TEXTURE_2D); const unsigned int texturesRowsCount = getTexturesRowsCount(); const unsigned int texturesColumnsCount = getTexturesColumnsCount(); const double widthResizeFactor = width/(double)m_imageWidth; const double heightResizeFactor = height/(double)m_imageHeight; const double defaultTextureWidth = m_texturesSize * widthResizeFactor; const double defaultTextureHeight = m_texturesSize * heightResizeFactor; const GLint textureMagFilter = widthResizeFactor >= 2.75?GL_NEAREST:GL_LINEAR; for (unsigned int texturesRow = 0; texturesRow < texturesRowsCount; texturesRow++) { const double currentTextureYOffset = texturesRow * defaultTextureHeight; for (unsigned int texturesColumn = 0; texturesColumn < texturesColumnsCount; texturesColumn++) { const unsigned int currentTexture = texturesRow * texturesColumnsCount + texturesColumn; const unsigned int currentTexturePixelsColumns = getTexturesColumnPixelColumns(texturesColumn); const double currentTextureWidth = (double)currentTexturePixelsColumns * widthResizeFactor; const unsigned int currentTexturePixelsRows = getTexturesRowPixelRows(texturesRow); const double currentTextureHeight = (double)currentTexturePixelsRows * heightResizeFactor; const double currentTextureXOffset = texturesColumn * defaultTextureWidth; const double currentTexCoordMaxX = (GLdouble)currentTexturePixelsColumns / m_texturesSize; const double currentTexCoordMaxY = (GLdouble)currentTexturePixelsRows / m_texturesSize; glBindTexture(GL_TEXTURE_2D, m_texturesNames[currentTexture]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, textureMagFilter); glBegin(GL_QUADS); glTexCoord2d (0, 0); glVertex2d(x + currentTextureXOffset + BORDER, y + currentTextureYOffset + BORDER); glTexCoord2d (currentTexCoordMaxX, 0); glVertex2d(x + currentTextureXOffset + BORDER + currentTextureWidth, y + currentTextureYOffset + BORDER); glTexCoord2d (currentTexCoordMaxX, currentTexCoordMaxY); glVertex2d(x + currentTextureXOffset + BORDER + currentTextureWidth, y + currentTextureYOffset + BORDER + currentTextureHeight); glTexCoord2d (0, currentTexCoordMaxY); glVertex2d(x + currentTextureXOffset + BORDER, y + currentTextureYOffset + BORDER + currentTextureHeight); glEnd(); } } glDisable(GL_TEXTURE_2D); } } unsigned int FlGlPaintCanvas::getTexturesColumnsCount(void) const { return (int)ceil((double)m_imageWidth / (double)m_texturesSize); } unsigned int FlGlPaintCanvas::getTexturesRowsCount(void) const { return (int)ceil((double)m_imageHeight / (double)m_texturesSize); } unsigned int FlGlPaintCanvas::getTexturesCount(void) const { return getTexturesColumnsCount() * getTexturesRowsCount(); } unsigned int FlGlPaintCanvas::getLastTexturesColumnPixelsColumns(void) const { return m_imageWidth - (getTexturesColumnsCount()-1)*m_texturesSize; } unsigned int FlGlPaintCanvas::getLastTexturesRowPixelsRows(void) const { return m_imageHeight - (getTexturesRowsCount()-1)*m_texturesSize; } unsigned int FlGlPaintCanvas::getTexturesColumnPixelColumns(unsigned int column) const { return column < getTexturesColumnsCount()-1?m_texturesSize:getLastTexturesColumnPixelsColumns(); } unsigned int FlGlPaintCanvas::getTexturesRowPixelRows(unsigned int row) const { return row < getTexturesRowsCount()-1?m_texturesSize:getLastTexturesRowPixelsRows(); } posterazor-1.5.1/src/FlPaintCanvasGroup.cpp0000644000175000017500000001175311041177230020346 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlPaintCanvasGroup.h" #include #include FlPaintCanvasGroup::FlPaintCanvasGroup(int x, int y, int width, int height) : Fl_Group(x, y, width, height) , m_imageRGBData(NULL) , m_imageWidth(0) , m_imageHeight(0) { begin(); m_drawPaintCanvas = new FlDrawPaintCanvas(x+1, y+1, width-2, height-2); #ifndef NO_OPENGL_PREVIEW m_glPaintCanvas = new FlGlPaintCanvas(x+1, y+1, width-2, height-2, this); #endif end(); Fl::get_system_colors(); const unsigned int backgroundColor = Fl::get_color(color2()); setBackgroundColor((backgroundColor >> 24) & 255, (backgroundColor >> 16) & 255, (backgroundColor >> 8) & 255); resizable(m_drawPaintCanvas); #ifndef NO_OPENGL_PREVIEW setPaintCanvasType(PaintCanvasTypeGL); #else setPaintCanvasType(PaintCanvasTypeDraw); #endif } void FlPaintCanvasGroup::redraw(void) { Fl_Group::redraw(); #ifndef NO_OPENGL_PREVIEW m_glPaintCanvas->redraw(); #endif } void FlPaintCanvasGroup::setPaintCanvasType(ePaintCanvasTypes type) { #ifndef NO_OPENGL_PREVIEW m_paintCanvasType = type; if (getPaintCanvasType()==PaintCanvasTypeDraw) { m_glPaintCanvas->hide(); m_glPaintCanvas->disposeImage(); } else { m_drawPaintCanvas->hide(); m_drawPaintCanvas->disposeImage(); } getPaintCanvasWidget()->show(); Fl::wait(0.0); // 0.0 is needed for OSX! if (m_imageRGBData) getPaintCanvasBase()->setImage(m_imageRGBData, m_imageWidth, m_imageHeight); #endif } PaintCanvasBase *FlPaintCanvasGroup::getPaintCanvasBase(void) const { #ifndef NO_OPENGL_PREVIEW if (getPaintCanvasType()==PaintCanvasTypeDraw) return dynamic_cast(m_drawPaintCanvas); else return dynamic_cast(m_glPaintCanvas); #else return m_drawPaintCanvas; #endif } Fl_Widget *FlPaintCanvasGroup::getPaintCanvasWidget(void) const { #ifndef NO_OPENGL_PREVIEW if (getPaintCanvasType()==PaintCanvasTypeDraw) return dynamic_cast(m_drawPaintCanvas); else return dynamic_cast(m_glPaintCanvas); #else return m_drawPaintCanvas; #endif } void FlPaintCanvasGroup::setPainterInterface(const PainterInterface *painter) { PaintCanvasBase::setPainterInterface(painter); m_drawPaintCanvas->setPainterInterface(m_painter); #ifndef NO_OPENGL_PREVIEW m_glPaintCanvas->setPainterInterface(m_painter); #endif } void FlPaintCanvasGroup::setBackgroundColor(unsigned char red, unsigned char green, unsigned char blue) { m_drawPaintCanvas->setBackgroundColor(red, green, blue); #ifndef NO_OPENGL_PREVIEW m_glPaintCanvas->setBackgroundColor(red, green, blue); #endif } void FlPaintCanvasGroup::drawFilledRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) {} void FlPaintCanvasGroup::drawRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) {} void FlPaintCanvasGroup::drawLine(double x1, double y1, double x2, double y2, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) {} void FlPaintCanvasGroup::getSize(double &width, double &height) const {} void FlPaintCanvasGroup::setImage(const unsigned char* rgbData, double width, double height) { disposeImage(); m_imageRGBData = new unsigned char[(int)width * (int)height * 3]; memcpy(m_imageRGBData, rgbData, (int)width * (int)height * 3); m_imageWidth = width; m_imageHeight = height; Fl::wait(); getPaintCanvasBase()->setImage(m_imageRGBData, m_imageWidth, m_imageHeight); } void FlPaintCanvasGroup::drawImage(double x, double y, double width, double height) {} void FlPaintCanvasGroup::setState(const char *state) { PaintCanvasBase::setState(state); m_drawPaintCanvas->setState(m_stateString); #ifndef NO_OPENGL_PREVIEW m_glPaintCanvas->setState(m_stateString); #endif } void FlPaintCanvasGroup::disposeImage(void) { m_drawPaintCanvas->disposeImage(); #ifndef NO_OPENGL_PREVIEW m_glPaintCanvas->disposeImage(); #endif if (m_imageRGBData) { delete[] m_imageRGBData; m_imageRGBData = NULL; m_imageWidth = 0; m_imageHeight = 0; } } posterazor-1.5.1/src/FlGlPaintCanvas.h0000644000175000017500000000512011041177230017250 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLGLPAINTCANVAS_H #define FLGLPAINTCANVAS_H #include #include #include #include "PaintCanvasBase.h" class FlGlPaintCanvas: public Fl_Gl_Window, public PaintCanvasBase { private: GLuint *m_texturesNames; unsigned int m_imageWidth; unsigned int m_imageHeight; GLint m_texturesSize; Fl_Widget *m_parentWidget; public: FlGlPaintCanvas(int x, int y, int width, int height, Fl_Widget *parentWidget); ~FlGlPaintCanvas(); virtual void draw(); virtual int handle(int event); virtual void drawFilledRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); virtual void drawRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); virtual void drawLine(double x1, double y1, double x2, double y2, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); virtual void getSize(double &width, double &height) const; virtual void setImage(const unsigned char* rgbData, double width, double height); virtual void disposeImage(void); virtual void drawImage(double x, double y, double width, double height); virtual unsigned int getTexturesColumnsCount(void) const; virtual unsigned int getTexturesRowsCount(void) const; virtual unsigned int getTexturesCount(void) const; virtual unsigned int getLastTexturesColumnPixelsColumns(void) const; virtual unsigned int getLastTexturesRowPixelsRows(void) const; virtual unsigned int getTexturesColumnPixelColumns(unsigned int column) const; virtual unsigned int getTexturesRowPixelRows(unsigned int row) const; }; #endif // FLGLPAINTCANVAS_H posterazor-1.5.1/src/FlPosteRazorHelpDialog.h0000644000175000017500000000254311041177230020625 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLPOSTERAZORHELPDIALOG_H #define FLPOSTERAZORHELPDIALOG_H #include "FlPosteRazorDialogUI.h" class FlPosteRazorHelpDialog: public PosteRazorHelpDialogUI { public: FlPosteRazorHelpDialog(); void setHtmlContent(const char *content); void jumpToAnchor(const char *anchor); void handleHomepageButtonClick(void); void openURLInBrowser(const char* url); static const char *linkCallback(Fl_Widget *w, const char *uri); void updateLanguage(void); }; #endif // FLPOSTERAZORHELPDIALOG_H posterazor-1.5.1/src/flagItalian.png0000644000175000017500000000015311041177230017045 0ustar simrunsimrunPNG  IHDR k:2IDATx^˱ Eq#p(Ό5T&^a*=QmiL5xvF 5:IENDB`posterazor-1.5.1/src/flagTurkish.png0000644000175000017500000000026511041177230017121 0ustar simrunsimrunPNG  IHDR k:|IDATx^P 0 <ܩc t*%㠥].`-gDmgpi"/V="e &;sm/)Ks R" m[Hg:s*h/lIENDB`posterazor-1.5.1/src/flagBrazilianPortuguese.png0000644000175000017500000000032311041177230021461 0ustar simrunsimrunPNG  IHDR 'p0PLTECX~>8|%KKo9!;5N^qqy[ȳD^IDATx^M 0C{s - ^#8tm+!J}@,8BC }!F7L_3qi-Spf/,L,fIENDB`posterazor-1.5.1/src/PosteRazorImageIO.h0000644000175000017500000000430311041177230017601 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef POSTERAZORIMAGEIO_H #define POSTERAZORIMAGEIO_H #include "UnitsOfLength.h" #include "ColorTypes.h" #include "ImageIOTypes.h" class PainterInterface; class PosteRazorImageIO: public ColorTypes { public: virtual ~PosteRazorImageIO() {} static PosteRazorImageIO* createPosteRazorImageIO(); virtual bool loadInputImage(const char *imageFileName, char *errorMessage, int errorMessageSize) = 0; virtual bool isImageLoaded(void) const = 0; virtual int getWidthPixels(void) const = 0; virtual int getHeightPixels(void) const = 0; virtual double getHorizontalDotsPerUnitOfLength(UnitsOfLength::eUnitsOfLength unit) const = 0; virtual double getVerticalDotsPerUnitOfLength(UnitsOfLength::eUnitsOfLength unit) const = 0; virtual double getWidth(UnitsOfLength::eUnitsOfLength unit) const = 0; virtual double getHeight(UnitsOfLength::eUnitsOfLength unit) const = 0; virtual bool getImageAsRGB(unsigned char *buffer) const = 0; virtual bool getImageAsRGB(unsigned char *buffer, int width, int height) const = 0; virtual int getBitsPerPixel(void) const = 0; virtual eColorTypes getColorDataType(void) const = 0; virtual int savePoster(const char *fileName, ImageIOTypes::eImageFormats format, const PainterInterface *painter, int pagesCount, double widthCm, double heightCm) const = 0; }; #endif // POSTERAZORIMAGEIO_H posterazor-1.5.1/src/alignmentTop.png0000644000175000017500000000021411041177230017271 0ustar simrunsimrunPNG  IHDR29 PLTE-WBtRNS@f.IDATx^̡ cޒ7d_ED }Xyԋ8yIENDB`posterazor-1.5.1/src/FlPosteRazorSettingsDialog.cpp0000644000175000017500000001642011041177230022067 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlPosteRazorSettingsDialog.h" #include "TranslationConstants.h" FlPosteRazorSettingsDialog::FlPosteRazorSettingsDialog() :PosteRazorSettingsDialogUI(385, 400, "PosteRazor settings") { #define SETTINGCHOICEBUTTONSSPACING 5 int i; m_unitOfLengthButtonsCount = UnitsOfLength::getUnitsOfLengthCount(); m_unitOfLengthButtons = new Fl_Button*[m_unitOfLengthButtonsCount]; const int unitOfLengthButtonWidth = (m_unitOfLengthButtonsGroup->w() + SETTINGCHOICEBUTTONSSPACING) / m_unitOfLengthButtonsCount - SETTINGCHOICEBUTTONSSPACING; m_unitOfLengthButtonsGroup->begin(); for (i = 0; i < m_unitOfLengthButtonsCount; i++) { const char* UnitOfLengthName = UnitsOfLength::getUnitOfLengthName(UnitsOfLength::getUnitOfLengthForIndex(i)); m_unitOfLengthButtons[i] = new Fl_Button ( m_unitOfLengthButtonsGroup->x() + i * (unitOfLengthButtonWidth+SETTINGCHOICEBUTTONSSPACING), m_unitOfLengthButtonsGroup->y(), unitOfLengthButtonWidth, m_unitOfLengthButtonsGroup->h(), UnitOfLengthName ); m_unitOfLengthButtons[i]->type(FL_RADIO_BUTTON); m_unitOfLengthButtons[i]->color((Fl_Color)47); m_unitOfLengthButtons[i]->selection_color((Fl_Color)55); m_unitOfLengthButtons[i]->callback(handleUnitOfLengthChoice_cb); m_unitOfLengthButtons[i]->user_data((void*)this); } m_unitOfLengthButtonsGroup->end(); m_languageButtonsCount = Translations::getLanguagesCount(); m_languageButtons = new Fl_Button*[m_languageButtonsCount]; m_languageButtonImages = new Fl_RGB_Image*[m_languageButtonsCount]; const int languageButtonWidth = (m_languageButtonsGroup->w() + SETTINGCHOICEBUTTONSSPACING) / m_languageButtonsCount - SETTINGCHOICEBUTTONSSPACING; m_languageButtonsGroup->begin(); for (i = 0; i < m_languageButtonsCount; i++) { m_languageButtons[i] = new Fl_Button ( m_languageButtonsGroup->x() + i * (languageButtonWidth+SETTINGCHOICEBUTTONSSPACING), m_languageButtonsGroup->y(), languageButtonWidth, m_languageButtonsGroup->h() ); const Translations::eLanguages language = Translations::getLanguageForIndex(i); const TranslationInterface& translation = Translations::getTranslationOfLanguage(language); m_languageButtonImages[i] = new Fl_RGB_Image(translation.flagImageRGBData(), translation.flagImageWidth(), translation.flagImageHeight()); m_languageButtons[i]->image(m_languageButtonImages[i]); m_languageButtons[i]->tooltip(translation.languageName()); m_languageButtons[i]->type(FL_RADIO_BUTTON); m_languageButtons[i]->color((Fl_Color)47); m_languageButtons[i]->selection_color((Fl_Color)55); m_languageButtons[i]->callback(handleLanguageChoice_cb); m_languageButtons[i]->user_data((void*)this); } m_languageButtonsGroup->end(); #ifdef NO_OPENGL_PREVIEW // Hide OpenGL preview option and shrink dialog const int moveUpDistance = m_languageGroup->y() - m_useOpenGLGroup->y(); m_useOpenGLGroup->hide(); m_languageGroup->position(m_languageGroup->x(), m_languageGroup->y() - moveUpDistance); m_confirmButtonsGroup->position(m_confirmButtonsGroup->x(), m_confirmButtonsGroup->y() - moveUpDistance); m_backgroudGroup->resizable(NULL); m_backgroudGroup->size(m_backgroudGroup->w(), m_backgroudGroup->h() - moveUpDistance); size(w(), h() - moveUpDistance); #endif updateLanguage(); } FlPosteRazorSettingsDialog::~FlPosteRazorSettingsDialog() { if (m_unitOfLengthButtons) delete[] m_unitOfLengthButtons; if (m_languageButtons) delete[] m_languageButtons; // the actual buttons are deleted by FLTK if (m_languageButtonImages) { for (int i = 0; i value(UnitsOfLength::getUnitOfLengthForIndex(i) == m_settings->unitOfLength?1:0); m_useOpenGLCheckButton->value(m_settings->previewType == FlPaintCanvasGroup::PaintCanvasTypeGL?1:0); for (i = 0; i < m_languageButtonsCount; i++) m_languageButtons[i]->value((m_settings->language == Translations::getLanguageForIndex(i))?1:0); } void FlPosteRazorSettingsDialog::handleUnitOfLengthChoice_cb(Fl_Widget *widget, void *userData) { ((FlPosteRazorSettingsDialog*)userData)->handleUnitOfLengthChoice(); } void FlPosteRazorSettingsDialog::handleUnitOfLengthChoice(void) { for (int i = 0; i < m_unitOfLengthButtonsCount; i++) { if (m_unitOfLengthButtons[i]->value() != 0) { m_settings->unitOfLength = UnitsOfLength::getUnitOfLengthForIndex(i); break; } } if (m_changementHandler) m_changementHandler->handleOptionsChangement(m_settings); } void FlPosteRazorSettingsDialog::handleUseOpenGLChangement(void) { m_settings->previewType = m_useOpenGLCheckButton->value()?FlPaintCanvasGroup::PaintCanvasTypeGL:FlPaintCanvasGroup::PaintCanvasTypeDraw; if (m_changementHandler) m_changementHandler->handleOptionsChangement(m_settings); } void FlPosteRazorSettingsDialog::handleLanguageChoice_cb(Fl_Widget *widget, void *userData) { ((FlPosteRazorSettingsDialog*)userData)->handleLanguageChoice(); } void FlPosteRazorSettingsDialog::handleLanguageChoice(void) { for (int i = 0; i < m_languageButtonsCount; i++) { if (m_languageButtons[i]->value() != 0) { m_settings->language = Translations::getLanguageForIndex(i); break; } } if (m_changementHandler) m_changementHandler->handleOptionsChangement(m_settings); } void FlPosteRazorSettingsDialog::updateLanguage(void) { label(Translations::instance().posteRazorSettings()); m_unitOfLengthGroup->label(Translations::instance().unitOfLength()); m_unitOfLengthExplanationBox->label(Translations::instance().unitOfLengthExplanation()); m_useOpenGLGroup->label(Translations::instance().previewWithOpenGL()); m_useOpenGLCheckButton->label(Translations::instance().previewWithOpenGL()); m_useOpenGLExplanationBox->label(Translations::instance().previewWithOpenGLExplanation()); m_languageGroup->label(Translations::instance().language()); m_languageExplanationBox->label(Translations::instance().languageExplanation()); m_cancelButton->label(Translations::instance().cancel()); redraw(); } void FlPosteRazorSettingsDialog::show(void) { m_okWasPressed = false; PosteRazorSettingsDialogUI::show(); } posterazor-1.5.1/src/FlPosteRazorDialog.cpp0000644000175000017500000007753611041177230020365 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlPosteRazorDialog.h" #include "FlPosteRazorHelpDialog.h" #include "PosteRazorWizardDialogController.h" #include "FlPersistentPreferences.h" #include #include #include #include #include "TranslationConstants.h" #if defined (WIN32) #include #include #include "PosteRazorResource.h" #define CASESENSITIVESTRCMP stricmp #define CASESENSITIVESTRNCMP strnicmp #else #include #define CASESENSITIVESTRCMP strcasecmp #define CASESENSITIVESTRNCMP strncasecmp #endif #if !defined (WIN32) && !defined(__APPLE__) #include #include "PosteRazor.xpm" #endif const char PreferencesVendor[] = "CasaPortale.de"; const char PreferencesProduct[] = "PosteRazor"; const char preferencesKey_UseOpenGLForPreview[] = "UseOpenGLForPreview"; const char preferencesKey_LoadImageChooserLastPath[] = "LoadImageChooserLastPath"; const char preferencesKey_SavePosterChooserLastPath[] = "SavePosterChooserLastPath"; const char preferencesKey_UILanguage[] = "UILanguage"; FlPosteRazorDragDropWidget::FlPosteRazorDragDropWidget(int x, int y, int w, int h, const char *label) :Fl_Box(FL_NO_BOX, x, y, w, h, label) { } int FlPosteRazorDragDropWidget::handle(int event) { switch (event) { case FL_DND_ENTER: case FL_DND_DRAG: case FL_DND_LEAVE: case FL_DND_RELEASE: return 1; case FL_PASTE: return parent()->handle(event); default: return 0; }; } FlPosteRazorDialog::FlPosteRazorDialog(void) : PosteRazorDialogUI(620, 455, "PosteRazor "POSTERAZORVERSION) , m_settingsDialog(NULL) , m_helpDialog(NULL) { int i; #if defined(WIN32) || defined(__APPLE__) // Drag & Drop doesn't work on Linux. That is dragging a file from Konqueror just gives // us the filename without path but with an appended character with ascii value 10. // Also, we sometimes get a "X_ConvertSelection: BadAtom (invalid Atom parameter) 0x2" message on stderr // May work with other file managers begin(); m_dragDropWidget = new FlPosteRazorDragDropWidget(0, 0, w(), h()); end(); #endif m_wizard->value(m_loadInputImageStep); m_posteRazor = PosteRazor::createPosteRazor(); m_posteRazorController = new PosteRazorWizardDialogController(); m_posteRazorController->setPosteRazorWizardDialog(this); m_posteRazorController->setPosteRazorModel(m_posteRazor); FlPersistentPreferences preferences(PreferencesVendor, PreferencesProduct); m_posteRazorController->readPersistentPreferences(&preferences); const FlPaintCanvasGroup::ePaintCanvasTypes paintCanvasType = preferences.getBoolean(preferencesKey_UseOpenGLForPreview, getUseOpenGLForPreviewByDefault())?FlPaintCanvasGroup::PaintCanvasTypeGL:FlPaintCanvasGroup::PaintCanvasTypeDraw; Translations::eLanguages language = (Translations::eLanguages)preferences.getInteger(preferencesKey_UILanguage, Translations::eLanguageUndefined); m_UILanguageIsUndefined = language == Translations::eLanguageUndefined; if (m_UILanguageIsUndefined) language = Translations::getSystemLanguage(); Translations::instance().selectLangue(language); strncpy(m_loadImageChooserLastPath, preferences.getString(preferencesKey_LoadImageChooserLastPath, ""), sizeof(m_loadImageChooserLastPath)); m_loadImageChooserLastPath[sizeof(m_loadImageChooserLastPath) - 1] = '\0'; strncpy(m_savePosterChooserLastPath, preferences.getString(preferencesKey_SavePosterChooserLastPath, ""), sizeof(m_savePosterChooserLastPath)); m_savePosterChooserLastPath[sizeof(m_savePosterChooserLastPath) - 1] = '\0'; const int paperFormatMenuItemsCount = PaperFormats::getPaperFormatsCount()+1; m_paperFormatMenuItems = new Fl_Menu_Item[paperFormatMenuItemsCount]; memset(m_paperFormatMenuItems, 0, sizeof(Fl_Menu_Item)*paperFormatMenuItemsCount); for (i = 0; i < PaperFormats::getPaperFormatsCount(); i++) { const char* const paperFormatName = PaperFormats::getPaperFormatName(PaperFormats::getPaperFormatForIndex(i)); m_paperFormatMenuItems[i].label(paperFormatName); m_paperFormatMenuItems[i].callback(handlePaperFormatChoice_cb); m_paperFormatMenuItems[i].user_data((void*)this); } m_paperFormatChoice->menu(m_paperFormatMenuItems); m_imageInfoGroup->deactivate(); m_paintCanvasGroup->setPaintCanvasType(paintCanvasType); m_paintCanvasGroup->setPainterInterface(m_posteRazor); m_settingsButton->labelImage(m_settingsButtonLabel->image()); #if defined(NO_LAUNCH_URLS_OR_FILES) m_setLaunchPDFApplicationCheckButton->hide(); m_savePosterGroup->resizable(m_setLaunchPDFApplicationCheckButton); m_savePosterGroup->size(m_savePosterGroup->w(), m_savePosterGroup->h()-m_setLaunchPDFApplicationCheckButton->h()); #endif updateLanguage(); } static const char* GetPathFromFileName(const char* fileName) { static char pathName[1024] = ""; strncpy(pathName, fileName, sizeof(pathName)); pathName[sizeof(pathName) - 1] = '\0'; pathName[strlen(pathName) - strlen(fl_filename_name(pathName))] = '\0'; return pathName; } FlPosteRazorDialog::~FlPosteRazorDialog() { FlPersistentPreferences preferences(PreferencesVendor, PreferencesProduct); m_posteRazorController->writePersistentPreferences(&preferences); preferences.setBoolean(m_paintCanvasGroup->getPaintCanvasType() == FlPaintCanvasGroup::PaintCanvasTypeGL, preferencesKey_UseOpenGLForPreview); preferences.setString(m_loadImageChooserLastPath, preferencesKey_LoadImageChooserLastPath); preferences.setString(m_savePosterChooserLastPath, preferencesKey_SavePosterChooserLastPath); if (m_UILanguageIsUndefined) Translations::instance().selectLangue(Translations::eLanguageUndefined); preferences.setInteger(Translations::instance().getSelectedLanguage(), preferencesKey_UILanguage); if (m_paperFormatMenuItems) delete[] m_paperFormatMenuItems; if (m_settingsDialog) delete m_settingsDialog; if (m_helpDialog) delete m_helpDialog; } int FlPosteRazorDialog::handle(int event) { switch (event) { case FL_PASTE: loadInputImage(Fl::event_text()); return 1; default: return PosteRazorDialogUI::handle(event); }; } bool FlPosteRazorDialog::getUseOpenGLForPreviewByDefault(void) { #if defined(WIN32) // For some reasons, some Windows 98 systems had problems with OpenGL. Maybe all non-NT versions? OSVERSIONINFO osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); return (osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS); #else return true; #endif } void FlPosteRazorDialog::openSettingsDialog(void) { if (!m_settingsDialog) { m_settings.unitOfLength = m_posteRazor->getUnitOfLength(); m_settings.previewType = m_paintCanvasGroup->getPaintCanvasType(); m_settings.language = Translations::instance().getSelectedLanguage()!=Translations::eLanguageUndefined?Translations::instance().getSelectedLanguage():Translations::eLanguageEnglish; m_settingsDialog = new FlPosteRazorSettingsDialog(); m_settingsDialog->set_modal(); } m_settingsDialog->setOptionsAndHandler(&m_settings, this); posteRazorSettings settingsbackup = m_settings; const bool languageIsUndefinedBackup = m_UILanguageIsUndefined; if (!m_settingsDialog->show_modal()) { handleOptionsChangement(&settingsbackup); m_UILanguageIsUndefined = languageIsUndefinedBackup; } } void FlPosteRazorDialog::openHelpDialog(void) { if (!m_helpDialog) { m_helpDialog = new FlPosteRazorHelpDialog(); m_helpDialog->updateLanguage(); m_helpDialog->set_modal(); } char stepTopic[1024]; sprintf(stepTopic, POSTERAZORHELPANCHORMANUALSTEP "%.2d", getCurrentWizardStepNumber() + 1); m_helpDialog->setHtmlContent(Translations::instance().helpHtml()); m_helpDialog->jumpToAnchor(stepTopic); m_helpDialog->show(); } void FlPosteRazorDialog::handleOptionsChangement(posteRazorSettings *settings) { m_posteRazorController->setUnitOfLength(settings->unitOfLength); m_paintCanvasGroup->setPaintCanvasType(settings->previewType); if (Translations::instance().getSelectedLanguage() != settings->language) { Translations::instance().selectLangue(settings->language); m_UILanguageIsUndefined = false; updateLanguage(); } m_settings = *settings; } void FlPosteRazorDialog::next(void) { m_posteRazorController->handleNextButtonPressed(); } void FlPosteRazorDialog::prev(void) { m_posteRazorController->handlePrevButtonPressed(); } void FlPosteRazorDialog::updateNavigationButtons(void) { } const char* FlPosteRazorDialog::getWizardStepInfoString(PosteRazorWizardDialogEnums::ePosteRazorWizardSteps step) { return ( step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepInputImage?Translations::instance().stepTitle01() :step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPaperSize?Translations::instance().stepTitle02() :step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepOverlapping?Translations::instance().stepTitle03() :step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPosterSize?Translations::instance().stepTitle04() :Translations::instance().stepTitle05() ); } int FlPosteRazorDialog::getCurrentWizardStepNumber(void) { return ( m_wizard->value() == m_loadInputImageStep?0 :m_wizard->value() == m_paperSizeStep?1 :m_wizard->value() == m_overlappingStep?2 :m_wizard->value() == m_posterSizeStep?3 :4 ); } void FlPosteRazorDialog::updateStepInfoBar(PosteRazorWizardDialogEnums::ePosteRazorWizardSteps step) { char stepStr[1024]; sprintf(stepStr, Translations::instance().stepXOfY(), getCurrentWizardStepNumber() + 1, 5); char helpTitleStr[1024]; sprintf(helpTitleStr, " %s: %s", stepStr, getWizardStepInfoString(step)); m_stepInfoBox->copy_label(helpTitleStr); } void FlPosteRazorDialog::updatePreview(void) { m_paintCanvasGroup->redraw(); } void FlPosteRazorDialog::updateLanguage(void) { char tempStr[1024]; sprintf(tempStr, "%s @-2->", Translations::instance().next()); m_nextButton->copy_label(tempStr); sprintf(tempStr, "@-2<- %s", Translations::instance().back()); m_prevButton->copy_label(tempStr); m_paperFormatTypeTabs->label(Translations::instance().paperFormat()); m_paperFormatCustomGroup->label(Translations::instance().custom()); m_paperFormatStandardGroup->label(Translations::instance().standard()); m_paperFormatChoice->label(Translations::instance().format()); m_paperOrientationGroup->label(Translations::instance().orientation()); m_paperOrientationLandscapeRadioButton->label(Translations::instance().landscape()); m_paperOrientationPortraitRadioButton->label(Translations::instance().portrait()); m_paperCustomHeightInput->label(Translations::instance().height()); m_paperCustomWidthInput->label(Translations::instance().width()); m_paperBorderTopInput->label(Translations::instance().top()); m_paperBorderRightInput->label(Translations::instance().right()); m_paperBorderBottomInput->label(Translations::instance().bottom()); m_paperBorderLeftInput->label(Translations::instance().left()); m_overlappingHeightInput->label(Translations::instance().height()); m_overlappingWidthInput->label(Translations::instance().width()); m_overlappingPositionGroup->label(Translations::instance().overlappingPosition()); m_overlappingSizeGroup->label(Translations::instance().overlappingSize()); m_overlappingPositionBottomLeftButton->label(Translations::instance().bottomLeft()); m_overlappingPositionBottomRightButton->label(Translations::instance().bottomRight()); m_overlappingPositionTopLeftButton->label(Translations::instance().topLeft()); m_overlappingPositionTopRightButton->label(Translations::instance().topRight()); m_posterSizeGroup->label(Translations::instance().imageSize()); m_posterSizeAbsoluteRadioButton->label(Translations::instance().absoluteSize()); m_posterAbsoluteHeightInput->label(Translations::instance().height()); m_posterAbsoluteWidthInput->label(Translations::instance().width()); m_posterSizeInPagesRadioButton->label(Translations::instance().sizeInPages()); m_posterPagesHeightInput->label(Translations::instance().height()); m_posterPagesHeightLabel->label(Translations::instance().pages()); m_posterPagesWidthInput->label(Translations::instance().width()); m_posterPagesWidthLabel->label(Translations::instance().pages()); m_posterSizePercentualRadioButton->label(Translations::instance().sizeInPercent()); m_posterPercentualSizeInput->label(Translations::instance().Size()); m_imageAlignmentGroup->label(Translations::instance().imageAlignment()); m_imageInfoGroup->label(Translations::instance().imageInformations()); m_imageLoadGroup->label(Translations::instance().inputImage()); m_settingsButton->label(Translations::instance().settings()); m_savePosterGroup->label(Translations::instance().saveThePoster()); m_setLaunchPDFApplicationCheckButton->label(Translations::instance().launchPDFApplication()); m_posteRazorController->updateDialog(); if (m_settingsDialog) m_settingsDialog->updateLanguage(); if (m_helpDialog) m_helpDialog->updateLanguage(); redraw(); } void FlPosteRazorDialog::getFileOpenDialogFilter(char *filter, int bufferLength) { char filterString[1024] = ""; char allExtensions[1024] = ""; char formats[1024] = "%s\t*.{%s}"; for (int formatIndex = 0; formatIndex < ImageIOTypes::getInputImageFormatsCount(); formatIndex++) { char extensionsOfFormat[1024] = ""; char format[1024] = ""; const int extensionsCount = ImageIOTypes::getFileExtensionsCount(formatIndex); for (int extensionIndex = 0; extensionIndex < extensionsCount; extensionIndex++) { if (extensionIndex != 0) strcat(extensionsOfFormat, ", "); strcat(extensionsOfFormat, ImageIOTypes::getFileExtensionForFormat(extensionIndex, formatIndex)); } if (formatIndex != 0) strcat(allExtensions, ", "); strcat(allExtensions, extensionsOfFormat); sprintf(format, "\n%s (%s)\t*.{%s}", ImageIOTypes::getInputImageFormat(formatIndex), extensionsOfFormat, extensionsOfFormat); strcat(formats, format); } sprintf ( filterString, formats, Translations::instance().allImageFormats(), allExtensions ); strncpy(filter, filterString, bufferLength); filter[bufferLength-1] = '\0'; } void FlPosteRazorDialog::loadInputImage(const char *fileName) { char errorMessage[1024] = ""; const char *loadFileName = fileName; bool loaded = false; Fl_Native_File_Chooser loadImageChooser(Fl_Native_File_Chooser::BROWSE_FILE); #if defined (WIN32) // filter stuff is still crashy os OSX and ugly on Linux OSVERSIONINFO osvi; ZeroMemory(&osvi, sizeof(OSVERSIONINFO)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&osvi); // It apparently does also not work in Windows Vista if (osvi.dwMajorVersion < 6) { char filterString[1024]; getFileOpenDialogFilter(filterString, sizeof(filterString)); loadImageChooser.filter(filterString); } #endif loadImageChooser.title(Translations::instance().loadAnInputImage()); if (!loadFileName) { loadImageChooser.directory(m_loadImageChooserLastPath); if (loadImageChooser.show() == 0) { loadFileName = loadImageChooser.filename(); strncpy(m_loadImageChooserLastPath, GetPathFromFileName(loadFileName), sizeof(m_loadImageChooserLastPath)); m_loadImageChooserLastPath[sizeof(m_loadImageChooserLastPath)-1] = '\0'; } } if (loadFileName) { loaded = m_posteRazorController->loadInputImage(loadFileName, errorMessage, sizeof(errorMessage)); if (!loaded) { if (strlen(errorMessage) > 0) fl_message(errorMessage); else fl_message(Translations::instance().fileCouldNotBeLoaded(), fl_filename_name(loadFileName)); } } if (loaded) { m_imageInfoGroup->activate(); m_paintCanvasGroup->requestImage(); } updateNavigationButtons(); Fl::flush(); // Needed for windows if image is loaded at startup } void FlPosteRazorDialog::showImageFileName(const char *fileName) { m_inputFileNameLabel->copy_label(fl_filename_name(fileName)); } void FlPosteRazorDialog::updateImageInfoFields(int imageWidthInPixels, int imageHeightInPixels, double imageWidth, double imageHeight, UnitsOfLength::eUnitsOfLength unitOfLength, double verticalDpi, double horizontalDpi, ColorTypes::eColorTypes colorType, int bitsPerPixel) { char sizeInDimensionUnitString[100]; sprintf(sizeInDimensionUnitString, Translations::instance().sizeInUnitOfLength(), UnitsOfLength::getUnitOfLengthName(unitOfLength)); char string[1024]; sprintf ( string, "%s\n%s\n%s\n%s", Translations::instance().sizeInPixels(), sizeInDimensionUnitString, Translations::instance().resolution(), Translations::instance().colorType() ); m_imageInfoKeysLabel->copy_label(string); sprintf ( string, "%d x %d\n%.2f x %.2f\n%.1f dpi\n%s %dbpp", imageWidthInPixels, imageHeightInPixels, imageWidth, imageHeight, verticalDpi, colorType==ColorTypes::eColorTypeMonochrome?Translations::instance().monochrome(): colorType==ColorTypes::eColorTypeGreyscale?Translations::instance().grayscale(): colorType==ColorTypes::eColorTypePalette?Translations::instance().palette(): colorType==ColorTypes::eColorTypeRGB?"RGB": colorType==ColorTypes::eColorTypeRGBA?"RGBA": /*colorType==eColorTypeCMYK?*/ "CMYK", bitsPerPixel ); m_imageInfoValuesLabel->copy_label(string); } void FlPosteRazorDialog::updatePosterSizeFields(Fl_Widget *sourceWidget) { if (sourceWidget == m_posterAbsoluteWidthInput) m_posteRazorController->setPosterWidth(PosteRazorEnums::ePosterSizeModeAbsolute, m_posterAbsoluteWidthInput->value()); else if (sourceWidget == m_posterAbsoluteHeightInput) m_posteRazorController->setPosterHeight(PosteRazorEnums::ePosterSizeModeAbsolute, m_posterAbsoluteHeightInput->value()); else if (sourceWidget == m_posterPagesWidthInput) m_posteRazorController->setPosterWidth(PosteRazorEnums::ePosterSizeModePages, m_posterPagesWidthInput->value()); else if (sourceWidget == m_posterPagesHeightInput) m_posteRazorController->setPosterHeight(PosteRazorEnums::ePosterSizeModePages, m_posterPagesHeightInput->value()); else // if (sourceWidget == m_posterPercentualSizeInput) m_posteRazorController->setPosterWidth(PosteRazorEnums::ePosterSizeModePercentual, m_posterPercentualSizeInput->value()); } void FlPosteRazorDialog::handlePaperFormatChoice_cb(Fl_Widget *widget, void *userData) { ((FlPosteRazorDialog*)userData)->handlePaperSizeChangement(((FlPosteRazorDialog*)userData)->m_paperFormatChoice); } void FlPosteRazorDialog::handlePaperSizeChangement(Fl_Widget *sourceWidget) { // TODO: Convert to switch if (sourceWidget == m_paperBorderTopInput) m_posteRazorController->setPaperBorderTop(m_paperBorderTopInput->value()); else if (sourceWidget == m_paperBorderRightInput) m_posteRazorController->setPaperBorderRight(m_paperBorderRightInput->value()); else if (sourceWidget == m_paperBorderBottomInput) m_posteRazorController->setPaperBorderBottom(m_paperBorderBottomInput->value()); else if (sourceWidget == m_paperBorderLeftInput) m_posteRazorController->setPaperBorderLeft(m_paperBorderLeftInput->value()); else if (sourceWidget == m_paperFormatTypeTabs) m_posteRazorController->setUseCustomPaperSize(m_paperFormatTypeTabs->value() == m_paperFormatCustomGroup); else if (sourceWidget == m_paperFormatChoice) { const char* const paperFormatName = m_paperFormatMenuItems[m_paperFormatChoice->value()].label(); m_posteRazorController->setPaperFormatByName(paperFormatName); } else if (sourceWidget == m_paperOrientationPortraitRadioButton || sourceWidget == m_paperOrientationLandscapeRadioButton) m_posteRazorController->setPaperOrientation(m_paperOrientationLandscapeRadioButton->value() != 0?PaperFormats::ePaperOrientationLandscape:PaperFormats::ePaperOrientationPortrait); else if (sourceWidget == m_paperCustomWidthInput) m_posteRazorController->setCustomPaperWidth(m_paperCustomWidthInput->value()); else if (sourceWidget == m_paperCustomHeightInput) m_posteRazorController->setCustomPaperHeight(m_paperCustomHeightInput->value()); } void FlPosteRazorDialog::handleOverlappingChangement(Fl_Widget *sourceWidget) { // TODO: Convert to switch if (sourceWidget == m_overlappingWidthInput) m_posteRazorController->setOverlappingWidth(m_overlappingWidthInput->value()); else if (sourceWidget == m_overlappingHeightInput) m_posteRazorController->setOverlappingHeight(m_overlappingHeightInput->value()); else m_posteRazorController->setOverlappingPosition ( m_overlappingPositionBottomRightButton->value()?PosteRazorEnums::eOverlappingPositionBottomRight :m_overlappingPositionBottomLeftButton->value()?PosteRazorEnums::eOverlappingPositionBottomLeft :m_overlappingPositionTopLeftButton->value()?PosteRazorEnums::eOverlappingPositionTopLeft :PosteRazorEnums::eOverlappingPositionTopRight ); } void FlPosteRazorDialog::updatePosterSizeGroupsState(void) { m_posterSizeAbsoluteRadioButton->value() == 0?m_posterSizeAbsoluteGroup->deactivate():m_posterSizeAbsoluteGroup->activate(); m_posterSizeInPagesRadioButton->value() == 0?m_posterSizeInPagesGroup->deactivate():m_posterSizeInPagesGroup->activate(); m_posterSizePercentualRadioButton->value() == 0?m_posterSizePercentualGroup->deactivate():m_posterSizePercentualGroup->activate(); } void FlPosteRazorDialog::handlePosterImageAlignment(void) { m_posteRazorController->setPosterVerticalAlignment ( m_posterAlignmentTopButton->value() == 1?PosteRazorEnums::eVerticalAlignmentTop :m_posterAlignmentMiddleButton->value() == 1?PosteRazorEnums::eVerticalAlignmentMiddle :PosteRazorEnums::eVerticalAlignmentBottom ); m_posteRazorController->setPosterHorizontalAlignment ( m_posterAlignmentLeftButton->value() == 1?PosteRazorEnums::eHorizontalAlignmentLeft :m_posterAlignmentCenterButton->value() == 1?PosteRazorEnums::eHorizontalAlignmentCenter :PosteRazorEnums::eHorizontalAlignmentRight ); } // dirty static bool my_file_exists(const char* fileName) { return (access(fileName, 0) == 0); } void FlPosteRazorDialog::savePoster(void) { char saveFileName[1024] = ""; bool fileExistsAskUserForOverwrite = false; Fl_Native_File_Chooser savePosterChooser(Fl_Native_File_Chooser::BROWSE_SAVE_FILE); #ifndef __APPLE__ // filter stuff is still crashy os OSX savePosterChooser.filter("Portable Document format (*.PDF)\t*.pdf"); #endif savePosterChooser.title(Translations::instance().saveThePosterAs()); do { if (fileExistsAskUserForOverwrite) savePosterChooser.preset_file(fl_filename_name(saveFileName)); savePosterChooser.directory(m_savePosterChooserLastPath); if (savePosterChooser.show() == 0) { strcpy(saveFileName, savePosterChooser.filename()); strncpy(m_savePosterChooserLastPath, GetPathFromFileName(saveFileName), sizeof(m_savePosterChooserLastPath)); m_savePosterChooserLastPath[sizeof(m_savePosterChooserLastPath) - 1] = '\0'; if (0 != CASESENSITIVESTRCMP(fl_filename_ext(savePosterChooser.filename()), ".pdf")) strcat(saveFileName, ".pdf"); fileExistsAskUserForOverwrite = my_file_exists(saveFileName); char overwriteQuestion[1024] = ""; sprintf(overwriteQuestion, Translations::instance().overwriteFile(), fl_filename_name(saveFileName)); if (!fileExistsAskUserForOverwrite || fl_ask(overwriteQuestion)) { int err = m_posteRazorController->savePoster(saveFileName); if (err) fl_message(Translations::instance().fileCouldNotBeSaved(), fl_filename_name(saveFileName)); fileExistsAskUserForOverwrite = false; } } else break; } while (fileExistsAskUserForOverwrite); } void FlPosteRazorDialog::setLaunchPDFApplication(void) { m_posteRazorController->setLaunchPDFApplication(m_setLaunchPDFApplicationCheckButton->value()==0?false:true); } void FlPosteRazorDialog::setUnitOfLength(UnitsOfLength::eUnitsOfLength unit) { const char* const unitName = UnitsOfLength::getUnitOfLengthName(unit); m_paperCustomWidthDimensionUnitLabel->label(unitName); m_paperCustomHeightDimensionUnitLabel->label(unitName); m_overlappingWidthDimensionUnitLabel->label(unitName); m_overlappingHeightDimensionUnitLabel->label(unitName); m_posterAbsoluteWidthDimensionUnitLabel->label(unitName); m_posterAbsoluteHeightDimensionUnitLabel->label(unitName); char paperBordersGroupLabel[100]; sprintf(paperBordersGroupLabel, "%s (%s)", Translations::instance().borders(), unitName); m_paperBordersGroup->copy_label(paperBordersGroupLabel); } void FlPosteRazorDialog::setPaperFormat(PaperFormats::ePaperFormats format) { m_paperFormatChoice->value((int)format); } void FlPosteRazorDialog::setPaperOrientation(PaperFormats::ePaperOrientations orientation) { // standard paper format m_paperOrientationPortraitRadioButton->value(orientation == PaperFormats::ePaperOrientationPortrait); m_paperOrientationLandscapeRadioButton->value(orientation == PaperFormats::ePaperOrientationLandscape); } void FlPosteRazorDialog::setPaperBorderTop(double border) { m_paperBorderTopInput->value(border); } void FlPosteRazorDialog::setPaperBorderRight(double border) { m_paperBorderRightInput->value(border); } void FlPosteRazorDialog::setPaperBorderBottom(double border) { m_paperBorderBottomInput->value(border); } void FlPosteRazorDialog::setPaperBorderLeft(double border) { m_paperBorderLeftInput->value(border); } void FlPosteRazorDialog::setCustomPaperWidth(double width) { m_paperCustomWidthInput->value(width); } void FlPosteRazorDialog::setCustomPaperHeight(double height) { m_paperCustomHeightInput->value(height); } void FlPosteRazorDialog::setUseCustomPaperSize(bool useIt) { // select the active tab m_paperFormatTypeTabs->value(useIt?m_paperFormatCustomGroup:m_paperFormatStandardGroup); } void FlPosteRazorDialog::setOverlappingWidth(double width) { m_overlappingWidthInput->value(width); } void FlPosteRazorDialog::setOverlappingHeight(double height) { m_overlappingHeightInput->value(height); } void FlPosteRazorDialog::setOverlappingPosition(PosteRazorEnums::eOverlappingPositions position) { ( position == PosteRazorEnums::eOverlappingPositionBottomRight?m_overlappingPositionBottomRightButton :position == PosteRazorEnums::eOverlappingPositionBottomLeft?m_overlappingPositionBottomLeftButton :position == PosteRazorEnums::eOverlappingPositionTopLeft?m_overlappingPositionTopLeftButton :m_overlappingPositionTopRightButton )->setonly(); } void FlPosteRazorDialog::setPosterWidth(PosteRazorEnums::ePosterSizeModes mode, double width) { if (mode == PosteRazorEnums::ePosterSizeModeAbsolute) m_posterAbsoluteWidthInput->value(width); else if (mode == PosteRazorEnums::ePosterSizeModePages) m_posterPagesWidthInput->value(width); else m_posterPercentualSizeInput->value(width); } void FlPosteRazorDialog::setPosterHeight(PosteRazorEnums::ePosterSizeModes mode, double height) { if (mode == PosteRazorEnums::ePosterSizeModeAbsolute) m_posterAbsoluteHeightInput->value(height); else if (mode == PosteRazorEnums::ePosterSizeModePages) m_posterPagesHeightInput->value(height); else m_posterPercentualSizeInput->value(height); } void FlPosteRazorDialog::setPosterSizeMode(PosteRazorEnums::ePosterSizeModes mode) { if (mode == PosteRazorEnums::ePosterSizeModeAbsolute) m_posterSizeAbsoluteRadioButton->setonly(); else if (mode == PosteRazorEnums::ePosterSizeModePages) m_posterSizeInPagesRadioButton->setonly(); else // if (mode == PosteRazorEnums::ePosterSizeModePercentual) m_posterSizePercentualRadioButton->setonly(); updatePosterSizeGroupsState(); } void FlPosteRazorDialog::setPosterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignments alignment) { ( alignment == PosteRazorEnums::eHorizontalAlignmentLeft?m_posterAlignmentLeftButton :alignment == PosteRazorEnums::eHorizontalAlignmentCenter?m_posterAlignmentCenterButton :m_posterAlignmentRightButton )->setonly(); } void FlPosteRazorDialog::setPosterVerticalAlignment(PosteRazorEnums::eVerticalAlignments alignment) { ( alignment == PosteRazorEnums::eVerticalAlignmentTop?m_posterAlignmentTopButton :alignment == PosteRazorEnums::eVerticalAlignmentMiddle?m_posterAlignmentMiddleButton :m_posterAlignmentBottomButton )->setonly(); } void FlPosteRazorDialog::setPosterOutputFormat(ImageIOTypes::eImageFormats format) { } void FlPosteRazorDialog::setLaunchPDFApplication(bool launch) { m_setLaunchPDFApplicationCheckButton->value(launch?1:0); } void FlPosteRazorDialog::setPrevButtonEnabled(bool enabled) { enabled?m_prevButton->activate():m_prevButton->deactivate(); } void FlPosteRazorDialog::setNextButtonEnabled(bool enabled) { enabled?m_nextButton->activate():m_nextButton->deactivate(); } void FlPosteRazorDialog::setWizardStep(PosteRazorWizardDialogEnums::ePosteRazorWizardSteps step) { m_wizard->value ( step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepInputImage?m_loadInputImageStep :step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPaperSize?m_paperSizeStep :step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepOverlapping?m_overlappingStep :step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepPosterSize?m_posterSizeStep :/* step == PosteRazorWizardDialogEnums::ePosteRazorWizardStepSavePoster? */m_savePosterStep ); updateStepInfoBar(step); } void FlPosteRazorDialog::setPreviewState(const char *state) { m_paintCanvasGroup->setState(state); updatePreview(); } #ifdef __APPLE__ static char OSX_droppedFilenameOnIcon[2048] = ""; static FlPosteRazorDialog *OSX_posteRazorDialogPointer = NULL; static void OSX_open_cb(const char* droppedFileName) { if (OSX_posteRazorDialogPointer) { // File was dropped on the already running application OSX_posteRazorDialogPointer->loadInputImage(droppedFileName); } else { // File was dropped on an application icon, but PosteRazor was not yet running if (strcmp(OSX_droppedFilenameOnIcon, "") == 0) { // If more than one were dropped, use only the first one. strncpy(OSX_droppedFilenameOnIcon, droppedFileName, sizeof(OSX_droppedFilenameOnIcon)); OSX_droppedFilenameOnIcon[sizeof(OSX_droppedFilenameOnIcon)-1] = '\0'; } } } #endif int main (int argc, char **argv) { #ifdef __APPLE__ fl_open_callback(OSX_open_cb); #endif Fl::get_system_colors(); Fl::scheme("plastic"); FlPosteRazorDialog dialog; #ifdef WIN32 dialog.icon((char *)LoadIcon(fl_display, MAKEINTRESOURCE(POSTERAZOR_ICON))); #endif dialog.show(); Fl::wait(); #if !defined(WIN32) && !defined(__APPLE__) XpmAttributes icon_attributes; Pixmap icon, icon_mask; icon_attributes.valuemask = XpmSize | XpmReturnPixels; XWMHints *hints; XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display), posteRazorXpm, &icon, &icon_mask, &icon_attributes); hints = XGetWMHints(fl_display, fl_xid(&dialog)); hints->icon_pixmap = icon; hints->icon_mask = icon_mask; hints->flags = IconPixmapHint | IconMaskHint; XSetWMHints(fl_display, fl_xid(&dialog), hints); #endif #ifndef __APPLE__ if (argc == 2) dialog.loadInputImage(argv[1]); #else if (strcmp(OSX_droppedFilenameOnIcon, "") != 0) dialog.loadInputImage(OSX_droppedFilenameOnIcon); OSX_posteRazorDialogPointer = &dialog; #endif return Fl::run(); } posterazor-1.5.1/src/FlPaintCanvasGroup.h0000644000175000017500000000536011041177230020010 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLPAINTCANVASGROUP_H #define FLPAINTCANVASGROUP_H #include #include "PaintCanvasBase.h" // No forward declaration for the canvases, because of // weird inclusions trouble in VC 6 #ifndef NO_OPENGL_PREVIEW #include "FlGlPaintCanvas.h" #endif #include "FlDrawPaintCanvas.h" class FlPaintCanvasGroup: public Fl_Group, public PaintCanvasBase { private: unsigned char *m_imageRGBData; double m_imageWidth; double m_imageHeight; public: enum ePaintCanvasTypes { PaintCanvasTypeDraw, PaintCanvasTypeGL }; FlPaintCanvasGroup(int x, int y, int width, int height); void redraw(void); void setPaintCanvasType(ePaintCanvasTypes type); ePaintCanvasTypes getPaintCanvasType(void) const {return m_paintCanvasType;} PaintCanvasBase *getPaintCanvasBase(void) const; Fl_Widget *getPaintCanvasWidget(void) const; void setPainterInterface(const PainterInterface *painter); void setBackgroundColor(unsigned char red, unsigned char green, unsigned char blue); void drawFilledRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); void drawRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); void drawLine(double x1, double y1, double x2, double y2, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); void getSize(double &width, double &height) const; void setImage(const unsigned char* rgbData, double width, double height); void drawImage(double x, double y, double width, double height); void setState(const char *state); void disposeImage(void); protected: ePaintCanvasTypes m_paintCanvasType; FlDrawPaintCanvas *m_drawPaintCanvas; #ifndef NO_OPENGL_PREVIEW FlGlPaintCanvas *m_glPaintCanvas; #endif }; #endif // FLPAINTCANVASGROUP_H posterazor-1.5.1/src/stripBinary.command0000644000175000017500000000007711041177230017777 0ustar simrunsimrunstrip build/Deployment/PosteRazor.app/Contents/MacOS/PosteRazorposterazor-1.5.1/src/PosteRazor.xcodeproj/0000755000175000017500000000000011041320342020223 5ustar simrunsimrunposterazor-1.5.1/src/PosteRazor.xcodeproj/project.pbxproj0000644000175000017500000020616111041177226023320 0ustar simrunsimrun// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 1803F4AB0DD88CBB0020E188 /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AA0DD88CBB0020E188 /* CHANGES */; }; 1803F4AD0DD88CD70020E188 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AC0DD88CD60020E188 /* LICENSE */; }; 1803F4AF0DD88CF30020E188 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AE0DD88CF30020E188 /* README */; }; 1803F4B00DD88D330020E188 /* README in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AE0DD88CF30020E188 /* README */; }; 1803F4B10DD88D330020E188 /* LICENSE in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AC0DD88CD60020E188 /* LICENSE */; }; 1803F4B20DD88D330020E188 /* CHANGES in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AA0DD88CBB0020E188 /* CHANGES */; }; 18CDF2C00DD8921C00EE5E02 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8214329C0DAFBDBD0049725F /* Info.plist */; }; 18CDF2C10DD8921C00EE5E02 /* PosteRazor.icns in Resources */ = {isa = PBXBuildFile; fileRef = 821432A60DAFBDBD0049725F /* PosteRazor.icns */; }; 18CDF2C20DD8921C00EE5E02 /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AA0DD88CBB0020E188 /* CHANGES */; }; 18CDF2C30DD8921C00EE5E02 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AC0DD88CD60020E188 /* LICENSE */; }; 18CDF2C40DD8921C00EE5E02 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AE0DD88CF30020E188 /* README */; }; 18CDF2C60DD8921C00EE5E02 /* FlDrawPaintCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432850DAFBDBD0049725F /* FlDrawPaintCanvas.cpp */; }; 18CDF2C70DD8921C00EE5E02 /* FlGlPaintCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432870DAFBDBD0049725F /* FlGlPaintCanvas.cpp */; }; 18CDF2C80DD8921C00EE5E02 /* FlImageTextButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432890DAFBDBD0049725F /* FlImageTextButton.cpp */; }; 18CDF2C90DD8921C00EE5E02 /* FlPaintCanvasGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328B0DAFBDBD0049725F /* FlPaintCanvasGroup.cpp */; }; 18CDF2CA0DD8921C00EE5E02 /* FlPersistentPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328D0DAFBDBD0049725F /* FlPersistentPreferences.cpp */; }; 18CDF2CB0DD8921C00EE5E02 /* FlPosteRazorDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328F0DAFBDBD0049725F /* FlPosteRazorDialog.cpp */; }; 18CDF2CC0DD8921C00EE5E02 /* FlPosteRazorDialogUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432910DAFBDBD0049725F /* FlPosteRazorDialogUI.cpp */; }; 18CDF2CD0DD8921C00EE5E02 /* FlPosteRazorHelpDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432940DAFBDBD0049725F /* FlPosteRazorHelpDialog.cpp */; }; 18CDF2CE0DD8921C00EE5E02 /* FlPosteRazorSettingsDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432960DAFBDBD0049725F /* FlPosteRazorSettingsDialog.cpp */; }; 18CDF2CF0DD8921C00EE5E02 /* FlPosteRazorSpinner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432980DAFBDBD0049725F /* FlPosteRazorSpinner.cpp */; }; 18CDF2D00DD8921C00EE5E02 /* ImageIOTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214329A0DAFBDBD0049725F /* ImageIOTypes.cpp */; }; 18CDF2D10DD8921C00EE5E02 /* PaintCanvasBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214329D0DAFBDBD0049725F /* PaintCanvasBase.cpp */; }; 18CDF2D20DD8921C00EE5E02 /* PaperFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432A00DAFBDBD0049725F /* PaperFormats.cpp */; }; 18CDF2D30DD8921C00EE5E02 /* PosteRazor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432A40DAFBDBD0049725F /* PosteRazor.cpp */; }; 18CDF2D40DD8921C00EE5E02 /* PosteRazorDialogController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AA0DAFBDBD0049725F /* PosteRazorDialogController.cpp */; }; 18CDF2D50DD8921C00EE5E02 /* PosteRazorImageIO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AC0DAFBDBD0049725F /* PosteRazorImageIO.cpp */; }; 18CDF2D60DD8921C00EE5E02 /* PosteRazorPDFOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AE0DAFBDBD0049725F /* PosteRazorPDFOutput.cpp */; }; 18CDF2D70DD8921C00EE5E02 /* PosteRazorWizardDialogController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432B10DAFBDBD0049725F /* PosteRazorWizardDialogController.cpp */; }; 18CDF2D80DD8921C00EE5E02 /* Translations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432BC0DAFBDBD0049725F /* Translations.cpp */; }; 18CDF2D90DD8921C00EE5E02 /* UnitsOfLength.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432BF0DAFBDBD0049725F /* UnitsOfLength.cpp */; }; 18CDF2DA0DD8921C00EE5E02 /* Fl_Native_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 82D4833C0DAFC6D2009CFF74 /* Fl_Native_File_Chooser.cxx */; }; 18CDF2DC0DD8921C00EE5E02 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; }; 18CDF2DD0DD8921C00EE5E02 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */; }; 18CDF2DE0DD8921C00EE5E02 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 821821DB0916D2A2004580FC /* AGL.framework */; }; 18CDF2DF0DD8921C00EE5E02 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 821821DC0916D2A2004580FC /* OpenGL.framework */; }; 18CDF2E40DD8921C00EE5E02 /* README in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AE0DD88CF30020E188 /* README */; }; 18CDF2E50DD8921C00EE5E02 /* LICENSE in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AC0DD88CD60020E188 /* LICENSE */; }; 18CDF2E60DD8921C00EE5E02 /* CHANGES in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AA0DD88CBB0020E188 /* CHANGES */; }; 18CDF2F10DD893B900EE5E02 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8214329C0DAFBDBD0049725F /* Info.plist */; }; 18CDF2F20DD893B900EE5E02 /* PosteRazor.icns in Resources */ = {isa = PBXBuildFile; fileRef = 821432A60DAFBDBD0049725F /* PosteRazor.icns */; }; 18CDF2F30DD893B900EE5E02 /* CHANGES in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AA0DD88CBB0020E188 /* CHANGES */; }; 18CDF2F40DD893B900EE5E02 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AC0DD88CD60020E188 /* LICENSE */; }; 18CDF2F50DD893B900EE5E02 /* README in Resources */ = {isa = PBXBuildFile; fileRef = 1803F4AE0DD88CF30020E188 /* README */; }; 18CDF2F70DD893B900EE5E02 /* FlDrawPaintCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432850DAFBDBD0049725F /* FlDrawPaintCanvas.cpp */; }; 18CDF2F80DD893B900EE5E02 /* FlGlPaintCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432870DAFBDBD0049725F /* FlGlPaintCanvas.cpp */; }; 18CDF2F90DD893B900EE5E02 /* FlImageTextButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432890DAFBDBD0049725F /* FlImageTextButton.cpp */; }; 18CDF2FA0DD893B900EE5E02 /* FlPaintCanvasGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328B0DAFBDBD0049725F /* FlPaintCanvasGroup.cpp */; }; 18CDF2FB0DD893B900EE5E02 /* FlPersistentPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328D0DAFBDBD0049725F /* FlPersistentPreferences.cpp */; }; 18CDF2FC0DD893B900EE5E02 /* FlPosteRazorDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328F0DAFBDBD0049725F /* FlPosteRazorDialog.cpp */; }; 18CDF2FD0DD893B900EE5E02 /* FlPosteRazorDialogUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432910DAFBDBD0049725F /* FlPosteRazorDialogUI.cpp */; }; 18CDF2FE0DD893B900EE5E02 /* FlPosteRazorHelpDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432940DAFBDBD0049725F /* FlPosteRazorHelpDialog.cpp */; }; 18CDF2FF0DD893B900EE5E02 /* FlPosteRazorSettingsDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432960DAFBDBD0049725F /* FlPosteRazorSettingsDialog.cpp */; }; 18CDF3000DD893B900EE5E02 /* FlPosteRazorSpinner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432980DAFBDBD0049725F /* FlPosteRazorSpinner.cpp */; }; 18CDF3010DD893B900EE5E02 /* ImageIOTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214329A0DAFBDBD0049725F /* ImageIOTypes.cpp */; }; 18CDF3020DD893B900EE5E02 /* PaintCanvasBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214329D0DAFBDBD0049725F /* PaintCanvasBase.cpp */; }; 18CDF3030DD893B900EE5E02 /* PaperFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432A00DAFBDBD0049725F /* PaperFormats.cpp */; }; 18CDF3040DD893B900EE5E02 /* PosteRazor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432A40DAFBDBD0049725F /* PosteRazor.cpp */; }; 18CDF3050DD893B900EE5E02 /* PosteRazorDialogController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AA0DAFBDBD0049725F /* PosteRazorDialogController.cpp */; }; 18CDF3060DD893B900EE5E02 /* PosteRazorImageIO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AC0DAFBDBD0049725F /* PosteRazorImageIO.cpp */; }; 18CDF3070DD893B900EE5E02 /* PosteRazorPDFOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AE0DAFBDBD0049725F /* PosteRazorPDFOutput.cpp */; }; 18CDF3080DD893B900EE5E02 /* PosteRazorWizardDialogController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432B10DAFBDBD0049725F /* PosteRazorWizardDialogController.cpp */; }; 18CDF3090DD893B900EE5E02 /* Translations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432BC0DAFBDBD0049725F /* Translations.cpp */; }; 18CDF30A0DD893B900EE5E02 /* UnitsOfLength.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432BF0DAFBDBD0049725F /* UnitsOfLength.cpp */; }; 18CDF30B0DD893B900EE5E02 /* Fl_Native_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 82D4833C0DAFC6D2009CFF74 /* Fl_Native_File_Chooser.cxx */; }; 18CDF30D0DD893B900EE5E02 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; }; 18CDF30E0DD893B900EE5E02 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */; }; 18CDF30F0DD893B900EE5E02 /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 821821DB0916D2A2004580FC /* AGL.framework */; }; 18CDF3100DD893B900EE5E02 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 821821DC0916D2A2004580FC /* OpenGL.framework */; }; 18CDF3150DD893B900EE5E02 /* README in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AE0DD88CF30020E188 /* README */; }; 18CDF3160DD893B900EE5E02 /* LICENSE in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AC0DD88CD60020E188 /* LICENSE */; }; 18CDF3170DD893B900EE5E02 /* CHANGES in Copy README, LICENSE, CHANGES */ = {isa = PBXBuildFile; fileRef = 1803F4AA0DD88CBB0020E188 /* CHANGES */; }; 18CDF3230DD8946400EE5E02 /* libfreeimage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CDF3220DD8946400EE5E02 /* libfreeimage.a */; }; 18CDF3240DD8946400EE5E02 /* libfreeimage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CDF3220DD8946400EE5E02 /* libfreeimage.a */; }; 18CDF3270DD8949900EE5E02 /* libfltk_gl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CDF3250DD8949900EE5E02 /* libfltk_gl.a */; }; 18CDF3280DD8949A00EE5E02 /* libfltk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CDF3260DD8949900EE5E02 /* libfltk.a */; }; 18CDF32B0DD894C000EE5E02 /* libfltk_gl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CDF3290DD894C000EE5E02 /* libfltk_gl.a */; }; 18CDF32C0DD894C000EE5E02 /* libfltk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CDF32A0DD894C000EE5E02 /* libfltk.a */; }; 821432C20DAFBDBD0049725F /* FlDrawPaintCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432850DAFBDBD0049725F /* FlDrawPaintCanvas.cpp */; }; 821432C40DAFBDBD0049725F /* FlGlPaintCanvas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432870DAFBDBD0049725F /* FlGlPaintCanvas.cpp */; }; 821432C60DAFBDBD0049725F /* FlImageTextButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432890DAFBDBD0049725F /* FlImageTextButton.cpp */; }; 821432C80DAFBDBD0049725F /* FlPaintCanvasGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328B0DAFBDBD0049725F /* FlPaintCanvasGroup.cpp */; }; 821432CA0DAFBDBD0049725F /* FlPersistentPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328D0DAFBDBD0049725F /* FlPersistentPreferences.cpp */; }; 821432CC0DAFBDBD0049725F /* FlPosteRazorDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214328F0DAFBDBD0049725F /* FlPosteRazorDialog.cpp */; }; 821432CE0DAFBDBD0049725F /* FlPosteRazorDialogUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432910DAFBDBD0049725F /* FlPosteRazorDialogUI.cpp */; }; 821432D10DAFBDBD0049725F /* FlPosteRazorHelpDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432940DAFBDBD0049725F /* FlPosteRazorHelpDialog.cpp */; }; 821432D30DAFBDBD0049725F /* FlPosteRazorSettingsDialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432960DAFBDBD0049725F /* FlPosteRazorSettingsDialog.cpp */; }; 821432D50DAFBDBD0049725F /* FlPosteRazorSpinner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432980DAFBDBD0049725F /* FlPosteRazorSpinner.cpp */; }; 821432D70DAFBDBD0049725F /* ImageIOTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214329A0DAFBDBD0049725F /* ImageIOTypes.cpp */; }; 821432D90DAFBDBD0049725F /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8214329C0DAFBDBD0049725F /* Info.plist */; }; 821432DA0DAFBDBD0049725F /* PaintCanvasBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8214329D0DAFBDBD0049725F /* PaintCanvasBase.cpp */; }; 821432DD0DAFBDBD0049725F /* PaperFormats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432A00DAFBDBD0049725F /* PaperFormats.cpp */; }; 821432E10DAFBDBD0049725F /* PosteRazor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432A40DAFBDBD0049725F /* PosteRazor.cpp */; }; 821432E30DAFBDBD0049725F /* PosteRazor.icns in Resources */ = {isa = PBXBuildFile; fileRef = 821432A60DAFBDBD0049725F /* PosteRazor.icns */; }; 821432E70DAFBDBD0049725F /* PosteRazorDialogController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AA0DAFBDBD0049725F /* PosteRazorDialogController.cpp */; }; 821432E90DAFBDBD0049725F /* PosteRazorImageIO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AC0DAFBDBD0049725F /* PosteRazorImageIO.cpp */; }; 821432EB0DAFBDBD0049725F /* PosteRazorPDFOutput.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432AE0DAFBDBD0049725F /* PosteRazorPDFOutput.cpp */; }; 821432EE0DAFBDBD0049725F /* PosteRazorWizardDialogController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432B10DAFBDBD0049725F /* PosteRazorWizardDialogController.cpp */; }; 821432F90DAFBDBD0049725F /* Translations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432BC0DAFBDBD0049725F /* Translations.cpp */; }; 821432FC0DAFBDBD0049725F /* UnitsOfLength.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 821432BF0DAFBDBD0049725F /* UnitsOfLength.cpp */; }; 821821DD0916D2A2004580FC /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 821821DB0916D2A2004580FC /* AGL.framework */; }; 821821DE0916D2A2004580FC /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 821821DC0916D2A2004580FC /* OpenGL.framework */; }; 82814C2408A5642E006D2A26 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */; }; 82D483490DAFC6D2009CFF74 /* Fl_Native_File_Chooser.cxx in Sources */ = {isa = PBXBuildFile; fileRef = 82D4833C0DAFC6D2009CFF74 /* Fl_Native_File_Chooser.cxx */; }; 8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20286C33FDCF999611CA2CEA /* Carbon.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ 18CDF2E30DD8921C00EE5E02 /* Copy README, LICENSE, CHANGES */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 16; files = ( 18CDF2E40DD8921C00EE5E02 /* README in Copy README, LICENSE, CHANGES */, 18CDF2E50DD8921C00EE5E02 /* LICENSE in Copy README, LICENSE, CHANGES */, 18CDF2E60DD8921C00EE5E02 /* CHANGES in Copy README, LICENSE, CHANGES */, ); name = "Copy README, LICENSE, CHANGES"; runOnlyForDeploymentPostprocessing = 0; }; 18CDF3140DD893B900EE5E02 /* Copy README, LICENSE, CHANGES */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 16; files = ( 18CDF3150DD893B900EE5E02 /* README in Copy README, LICENSE, CHANGES */, 18CDF3160DD893B900EE5E02 /* LICENSE in Copy README, LICENSE, CHANGES */, 18CDF3170DD893B900EE5E02 /* CHANGES in Copy README, LICENSE, CHANGES */, ); name = "Copy README, LICENSE, CHANGES"; runOnlyForDeploymentPostprocessing = 0; }; 82028CD5091E6E2E00763263 /* Copy README, LICENSE, CHANGES */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 16; files = ( 1803F4B00DD88D330020E188 /* README in Copy README, LICENSE, CHANGES */, 1803F4B10DD88D330020E188 /* LICENSE in Copy README, LICENSE, CHANGES */, 1803F4B20DD88D330020E188 /* CHANGES in Copy README, LICENSE, CHANGES */, ); name = "Copy README, LICENSE, CHANGES"; runOnlyForDeploymentPostprocessing = 0; }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 1803F4AA0DD88CBB0020E188 /* CHANGES */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = CHANGES; path = ../CHANGES; sourceTree = SOURCE_ROOT; }; 1803F4AC0DD88CD60020E188 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = SOURCE_ROOT; }; 1803F4AE0DD88CF30020E188 /* README */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = README; path = ../README; sourceTree = SOURCE_ROOT; }; 18CDF2EC0DD8921D00EE5E02 /* PosteRazor_i386.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PosteRazor_i386.app; sourceTree = BUILT_PRODUCTS_DIR; }; 18CDF31D0DD893B900EE5E02 /* PosteRazor_ppc.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PosteRazor_ppc.app; sourceTree = BUILT_PRODUCTS_DIR; }; 18CDF3220DD8946400EE5E02 /* libfreeimage.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreeimage.a; path = ../../../../FreeImage/Dist/libfreeimage.a; sourceTree = SOURCE_ROOT; }; 18CDF3250DD8949900EE5E02 /* libfltk_gl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfltk_gl.a; path = "../../../../fltk-1.1.9_i386/lib/libfltk_gl.a"; sourceTree = SOURCE_ROOT; }; 18CDF3260DD8949900EE5E02 /* libfltk.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfltk.a; path = "../../../../fltk-1.1.9_i386/lib/libfltk.a"; sourceTree = SOURCE_ROOT; }; 18CDF3290DD894C000EE5E02 /* libfltk_gl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfltk_gl.a; path = "../../../../fltk-1.1.9_ppc/lib/libfltk_gl.a"; sourceTree = SOURCE_ROOT; }; 18CDF32A0DD894C000EE5E02 /* libfltk.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfltk.a; path = "../../../../fltk-1.1.9_ppc/lib/libfltk.a"; sourceTree = SOURCE_ROOT; }; 20286C33FDCF999611CA2CEA /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; 821432840DAFBDBD0049725F /* ColorTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ColorTypes.h; sourceTree = ""; }; 821432850DAFBDBD0049725F /* FlDrawPaintCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlDrawPaintCanvas.cpp; sourceTree = ""; }; 821432860DAFBDBD0049725F /* FlDrawPaintCanvas.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlDrawPaintCanvas.h; sourceTree = ""; }; 821432870DAFBDBD0049725F /* FlGlPaintCanvas.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlGlPaintCanvas.cpp; sourceTree = ""; }; 821432880DAFBDBD0049725F /* FlGlPaintCanvas.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlGlPaintCanvas.h; sourceTree = ""; }; 821432890DAFBDBD0049725F /* FlImageTextButton.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlImageTextButton.cpp; sourceTree = ""; }; 8214328A0DAFBDBD0049725F /* FlImageTextButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlImageTextButton.h; sourceTree = ""; }; 8214328B0DAFBDBD0049725F /* FlPaintCanvasGroup.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlPaintCanvasGroup.cpp; sourceTree = ""; }; 8214328C0DAFBDBD0049725F /* FlPaintCanvasGroup.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlPaintCanvasGroup.h; sourceTree = ""; }; 8214328D0DAFBDBD0049725F /* FlPersistentPreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlPersistentPreferences.cpp; sourceTree = ""; }; 8214328E0DAFBDBD0049725F /* FlPersistentPreferences.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlPersistentPreferences.h; sourceTree = ""; }; 8214328F0DAFBDBD0049725F /* FlPosteRazorDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlPosteRazorDialog.cpp; sourceTree = ""; }; 821432900DAFBDBD0049725F /* FlPosteRazorDialog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlPosteRazorDialog.h; sourceTree = ""; }; 821432910DAFBDBD0049725F /* FlPosteRazorDialogUI.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlPosteRazorDialogUI.cpp; sourceTree = ""; }; 821432920DAFBDBD0049725F /* FlPosteRazorDialogUI.fl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = FlPosteRazorDialogUI.fl; sourceTree = ""; }; 821432930DAFBDBD0049725F /* FlPosteRazorDialogUI.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlPosteRazorDialogUI.h; sourceTree = ""; }; 821432940DAFBDBD0049725F /* FlPosteRazorHelpDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlPosteRazorHelpDialog.cpp; sourceTree = ""; }; 821432950DAFBDBD0049725F /* FlPosteRazorHelpDialog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlPosteRazorHelpDialog.h; sourceTree = ""; }; 821432960DAFBDBD0049725F /* FlPosteRazorSettingsDialog.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlPosteRazorSettingsDialog.cpp; sourceTree = ""; }; 821432970DAFBDBD0049725F /* FlPosteRazorSettingsDialog.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlPosteRazorSettingsDialog.h; sourceTree = ""; }; 821432980DAFBDBD0049725F /* FlPosteRazorSpinner.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FlPosteRazorSpinner.cpp; sourceTree = ""; }; 821432990DAFBDBD0049725F /* FlPosteRazorSpinner.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = FlPosteRazorSpinner.h; sourceTree = ""; }; 8214329A0DAFBDBD0049725F /* ImageIOTypes.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ImageIOTypes.cpp; sourceTree = ""; }; 8214329B0DAFBDBD0049725F /* ImageIOTypes.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ImageIOTypes.h; sourceTree = ""; }; 8214329C0DAFBDBD0049725F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = Info.plist; sourceTree = ""; }; 8214329D0DAFBDBD0049725F /* PaintCanvasBase.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PaintCanvasBase.cpp; sourceTree = ""; }; 8214329E0DAFBDBD0049725F /* PaintCanvasBase.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PaintCanvasBase.h; sourceTree = ""; }; 8214329F0DAFBDBD0049725F /* PaintCanvasInterface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PaintCanvasInterface.h; sourceTree = ""; }; 821432A00DAFBDBD0049725F /* PaperFormats.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PaperFormats.cpp; sourceTree = ""; }; 821432A10DAFBDBD0049725F /* PaperFormats.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PaperFormats.h; sourceTree = ""; }; 821432A20DAFBDBD0049725F /* PersistentPreferencesInterface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PersistentPreferencesInterface.h; sourceTree = ""; }; 821432A30DAFBDBD0049725F /* PosteRazor_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazor_Prefix.pch; sourceTree = ""; }; 821432A40DAFBDBD0049725F /* PosteRazor.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PosteRazor.cpp; sourceTree = ""; }; 821432A50DAFBDBD0049725F /* PosteRazor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazor.h; sourceTree = ""; }; 821432A60DAFBDBD0049725F /* PosteRazor.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = PosteRazor.icns; sourceTree = ""; }; 821432AA0DAFBDBD0049725F /* PosteRazorDialogController.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PosteRazorDialogController.cpp; sourceTree = ""; }; 821432AB0DAFBDBD0049725F /* PosteRazorDialogController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazorDialogController.h; sourceTree = ""; }; 821432AC0DAFBDBD0049725F /* PosteRazorImageIO.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PosteRazorImageIO.cpp; sourceTree = ""; }; 821432AD0DAFBDBD0049725F /* PosteRazorImageIO.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazorImageIO.h; sourceTree = ""; }; 821432AE0DAFBDBD0049725F /* PosteRazorPDFOutput.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PosteRazorPDFOutput.cpp; sourceTree = ""; }; 821432AF0DAFBDBD0049725F /* PosteRazorPDFOutput.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazorPDFOutput.h; sourceTree = ""; }; 821432B00DAFBDBD0049725F /* PosteRazorResource.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazorResource.h; sourceTree = ""; }; 821432B10DAFBDBD0049725F /* PosteRazorWizardDialogController.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = PosteRazorWizardDialogController.cpp; sourceTree = ""; }; 821432B20DAFBDBD0049725F /* PosteRazorWizardDialogController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazorWizardDialogController.h; sourceTree = ""; }; 821432B30DAFBDBD0049725F /* TranslationBrazilianPortuguese.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = TranslationBrazilianPortuguese.h; sourceTree = ""; }; 821432B40DAFBDBD0049725F /* TranslationConstants.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TranslationConstants.h; sourceTree = ""; }; 821432B50DAFBDBD0049725F /* TranslationDutch.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = TranslationDutch.h; sourceTree = ""; }; 821432B60DAFBDBD0049725F /* TranslationEnglish.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = TranslationEnglish.h; sourceTree = ""; }; 821432B70DAFBDBD0049725F /* TranslationFrench.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = TranslationFrench.h; sourceTree = ""; }; 821432B80DAFBDBD0049725F /* TranslationGerman.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = TranslationGerman.h; sourceTree = ""; }; 821432B90DAFBDBD0049725F /* TranslationInterface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = TranslationInterface.h; sourceTree = ""; }; 821432BA0DAFBDBD0049725F /* TranslationItalian.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = TranslationItalian.h; sourceTree = ""; }; 821432BC0DAFBDBD0049725F /* Translations.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Translations.cpp; sourceTree = ""; }; 821432BD0DAFBDBD0049725F /* Translations.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Translations.h; sourceTree = ""; }; 821432BE0DAFBDBD0049725F /* TranslationSpanish.h */ = {isa = PBXFileReference; fileEncoding = 12; lastKnownFileType = sourcecode.c.h; path = TranslationSpanish.h; sourceTree = ""; }; 821432BF0DAFBDBD0049725F /* UnitsOfLength.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = UnitsOfLength.cpp; sourceTree = ""; }; 821432C00DAFBDBD0049725F /* UnitsOfLength.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = UnitsOfLength.h; sourceTree = ""; }; 821821DB0916D2A2004580FC /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; 821821DC0916D2A2004580FC /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; 8221C68908A567C100EB193B /* PosteRazor_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PosteRazor_Prefix.pch; sourceTree = ""; }; 82D483380DAFC6D2009CFF74 /* Fl_Native_File_Chooser.H */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = Fl_Native_File_Chooser.H; sourceTree = ""; }; 82D4833A0DAFC6D2009CFF74 /* Fl_Native_File_Chooser_MAC.H */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = Fl_Native_File_Chooser_MAC.H; sourceTree = ""; }; 82D4833C0DAFC6D2009CFF74 /* Fl_Native_File_Chooser.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Fl_Native_File_Chooser.cxx; sourceTree = ""; }; 82E5567008A56658001EEB51 /* PosteRazor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PosteRazor.app; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 18CDF2DB0DD8921C00EE5E02 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 18CDF2DC0DD8921C00EE5E02 /* Carbon.framework in Frameworks */, 18CDF2DD0DD8921C00EE5E02 /* ApplicationServices.framework in Frameworks */, 18CDF2DE0DD8921C00EE5E02 /* AGL.framework in Frameworks */, 18CDF2DF0DD8921C00EE5E02 /* OpenGL.framework in Frameworks */, 18CDF3230DD8946400EE5E02 /* libfreeimage.a in Frameworks */, 18CDF3270DD8949900EE5E02 /* libfltk_gl.a in Frameworks */, 18CDF3280DD8949A00EE5E02 /* libfltk.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 18CDF30C0DD893B900EE5E02 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 18CDF30D0DD893B900EE5E02 /* Carbon.framework in Frameworks */, 18CDF30E0DD893B900EE5E02 /* ApplicationServices.framework in Frameworks */, 18CDF30F0DD893B900EE5E02 /* AGL.framework in Frameworks */, 18CDF3100DD893B900EE5E02 /* OpenGL.framework in Frameworks */, 18CDF3240DD8946400EE5E02 /* libfreeimage.a in Frameworks */, 18CDF32B0DD894C000EE5E02 /* libfltk_gl.a in Frameworks */, 18CDF32C0DD894C000EE5E02 /* libfltk.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 8D0C4E910486CD37000505A6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 8D0C4E920486CD37000505A6 /* Carbon.framework in Frameworks */, 82814C2408A5642E006D2A26 /* ApplicationServices.framework in Frameworks */, 821821DD0916D2A2004580FC /* AGL.framework in Frameworks */, 821821DE0916D2A2004580FC /* OpenGL.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 195DF8CFFE9D517E11CA2CBB /* Products */ = { isa = PBXGroup; children = ( 82E5567008A56658001EEB51 /* PosteRazor.app */, 18CDF2EC0DD8921D00EE5E02 /* PosteRazor_i386.app */, 18CDF31D0DD893B900EE5E02 /* PosteRazor_ppc.app */, ); name = Products; sourceTree = ""; }; 20286C29FDCF999611CA2CEA /* PosteRazor */ = { isa = PBXGroup; children = ( 1803F4AE0DD88CF30020E188 /* README */, 1803F4AC0DD88CD60020E188 /* LICENSE */, 1803F4AA0DD88CBB0020E188 /* CHANGES */, 82D483320DAFC6D2009CFF74 /* Fl_Native_File_Chooser */, 821432840DAFBDBD0049725F /* ColorTypes.h */, 821432850DAFBDBD0049725F /* FlDrawPaintCanvas.cpp */, 821432860DAFBDBD0049725F /* FlDrawPaintCanvas.h */, 821432870DAFBDBD0049725F /* FlGlPaintCanvas.cpp */, 821432880DAFBDBD0049725F /* FlGlPaintCanvas.h */, 821432890DAFBDBD0049725F /* FlImageTextButton.cpp */, 8214328A0DAFBDBD0049725F /* FlImageTextButton.h */, 8214328B0DAFBDBD0049725F /* FlPaintCanvasGroup.cpp */, 8214328C0DAFBDBD0049725F /* FlPaintCanvasGroup.h */, 8214328D0DAFBDBD0049725F /* FlPersistentPreferences.cpp */, 8214328E0DAFBDBD0049725F /* FlPersistentPreferences.h */, 8214328F0DAFBDBD0049725F /* FlPosteRazorDialog.cpp */, 821432900DAFBDBD0049725F /* FlPosteRazorDialog.h */, 821432910DAFBDBD0049725F /* FlPosteRazorDialogUI.cpp */, 821432920DAFBDBD0049725F /* FlPosteRazorDialogUI.fl */, 821432930DAFBDBD0049725F /* FlPosteRazorDialogUI.h */, 821432940DAFBDBD0049725F /* FlPosteRazorHelpDialog.cpp */, 821432950DAFBDBD0049725F /* FlPosteRazorHelpDialog.h */, 821432960DAFBDBD0049725F /* FlPosteRazorSettingsDialog.cpp */, 821432970DAFBDBD0049725F /* FlPosteRazorSettingsDialog.h */, 821432980DAFBDBD0049725F /* FlPosteRazorSpinner.cpp */, 821432990DAFBDBD0049725F /* FlPosteRazorSpinner.h */, 8214329A0DAFBDBD0049725F /* ImageIOTypes.cpp */, 8214329B0DAFBDBD0049725F /* ImageIOTypes.h */, 8214329C0DAFBDBD0049725F /* Info.plist */, 8214329D0DAFBDBD0049725F /* PaintCanvasBase.cpp */, 8214329E0DAFBDBD0049725F /* PaintCanvasBase.h */, 8214329F0DAFBDBD0049725F /* PaintCanvasInterface.h */, 821432A00DAFBDBD0049725F /* PaperFormats.cpp */, 821432A10DAFBDBD0049725F /* PaperFormats.h */, 821432A20DAFBDBD0049725F /* PersistentPreferencesInterface.h */, 821432A30DAFBDBD0049725F /* PosteRazor_Prefix.pch */, 821432A40DAFBDBD0049725F /* PosteRazor.cpp */, 821432A50DAFBDBD0049725F /* PosteRazor.h */, 821432A60DAFBDBD0049725F /* PosteRazor.icns */, 821432AA0DAFBDBD0049725F /* PosteRazorDialogController.cpp */, 821432AB0DAFBDBD0049725F /* PosteRazorDialogController.h */, 821432AC0DAFBDBD0049725F /* PosteRazorImageIO.cpp */, 821432AD0DAFBDBD0049725F /* PosteRazorImageIO.h */, 821432AE0DAFBDBD0049725F /* PosteRazorPDFOutput.cpp */, 821432AF0DAFBDBD0049725F /* PosteRazorPDFOutput.h */, 821432B00DAFBDBD0049725F /* PosteRazorResource.h */, 821432B10DAFBDBD0049725F /* PosteRazorWizardDialogController.cpp */, 821432B20DAFBDBD0049725F /* PosteRazorWizardDialogController.h */, 821432B30DAFBDBD0049725F /* TranslationBrazilianPortuguese.h */, 821432B40DAFBDBD0049725F /* TranslationConstants.h */, 821432B50DAFBDBD0049725F /* TranslationDutch.h */, 821432B60DAFBDBD0049725F /* TranslationEnglish.h */, 821432B70DAFBDBD0049725F /* TranslationFrench.h */, 821432B80DAFBDBD0049725F /* TranslationGerman.h */, 821432B90DAFBDBD0049725F /* TranslationInterface.h */, 821432BA0DAFBDBD0049725F /* TranslationItalian.h */, 821432BC0DAFBDBD0049725F /* Translations.cpp */, 821432BD0DAFBDBD0049725F /* Translations.h */, 821432BE0DAFBDBD0049725F /* TranslationSpanish.h */, 821432BF0DAFBDBD0049725F /* UnitsOfLength.cpp */, 821432C00DAFBDBD0049725F /* UnitsOfLength.h */, 8221C68908A567C100EB193B /* PosteRazor_Prefix.pch */, 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */, 195DF8CFFE9D517E11CA2CBB /* Products */, ); name = PosteRazor; sourceTree = ""; }; 20286C32FDCF999611CA2CEA /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( 18CDF3290DD894C000EE5E02 /* libfltk_gl.a */, 18CDF32A0DD894C000EE5E02 /* libfltk.a */, 18CDF3250DD8949900EE5E02 /* libfltk_gl.a */, 18CDF3260DD8949900EE5E02 /* libfltk.a */, 18CDF3220DD8946400EE5E02 /* libfreeimage.a */, 821821DC0916D2A2004580FC /* OpenGL.framework */, 821821DB0916D2A2004580FC /* AGL.framework */, 20286C33FDCF999611CA2CEA /* Carbon.framework */, 4A9504C8FFE6A3BC11CA0CBA /* ApplicationServices.framework */, ); name = "External Frameworks and Libraries"; sourceTree = ""; }; 82D483320DAFC6D2009CFF74 /* Fl_Native_File_Chooser */ = { isa = PBXGroup; children = ( 82D483370DAFC6D2009CFF74 /* FL */, 82D4833C0DAFC6D2009CFF74 /* Fl_Native_File_Chooser.cxx */, ); name = Fl_Native_File_Chooser; path = thirdparty/Fl_Native_File_Chooser; sourceTree = ""; }; 82D483370DAFC6D2009CFF74 /* FL */ = { isa = PBXGroup; children = ( 82D483380DAFC6D2009CFF74 /* Fl_Native_File_Chooser.H */, 82D4833A0DAFC6D2009CFF74 /* Fl_Native_File_Chooser_MAC.H */, ); path = FL; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 18CDF2BE0DD8921C00EE5E02 /* PosteRazor_i386 */ = { isa = PBXNativeTarget; buildConfigurationList = 18CDF2E80DD8921C00EE5E02 /* Build configuration list for PBXNativeTarget "PosteRazor_i386" */; buildPhases = ( 18CDF2BF0DD8921C00EE5E02 /* Resources */, 18CDF2C50DD8921C00EE5E02 /* Sources */, 18CDF2DB0DD8921C00EE5E02 /* Frameworks */, 18CDF2E30DD8921C00EE5E02 /* Copy README, LICENSE, CHANGES */, 18CDF2E70DD8921C00EE5E02 /* Generate language resources */, ); buildRules = ( ); dependencies = ( ); name = PosteRazor_i386; productInstallPath = "$(HOME)/Applications"; productName = PosteRazor; productReference = 18CDF2EC0DD8921D00EE5E02 /* PosteRazor_i386.app */; productType = "com.apple.product-type.application"; }; 18CDF2EF0DD893B900EE5E02 /* PosteRazor_ppc */ = { isa = PBXNativeTarget; buildConfigurationList = 18CDF3190DD893B900EE5E02 /* Build configuration list for PBXNativeTarget "PosteRazor_ppc" */; buildPhases = ( 18CDF2F00DD893B900EE5E02 /* Resources */, 18CDF2F60DD893B900EE5E02 /* Sources */, 18CDF30C0DD893B900EE5E02 /* Frameworks */, 18CDF3140DD893B900EE5E02 /* Copy README, LICENSE, CHANGES */, 18CDF3180DD893B900EE5E02 /* Generate language resources */, ); buildRules = ( ); dependencies = ( ); name = PosteRazor_ppc; productInstallPath = "$(HOME)/Applications"; productName = PosteRazor; productReference = 18CDF31D0DD893B900EE5E02 /* PosteRazor_ppc.app */; productType = "com.apple.product-type.application"; }; 8D0C4E890486CD37000505A6 /* PosteRazor */ = { isa = PBXNativeTarget; buildConfigurationList = 82ACC08C093FC12D00200A0E /* Build configuration list for PBXNativeTarget "PosteRazor" */; buildPhases = ( 8D0C4E8C0486CD37000505A6 /* Resources */, 8D0C4E8F0486CD37000505A6 /* Sources */, 8D0C4E910486CD37000505A6 /* Frameworks */, 82028CD5091E6E2E00763263 /* Copy README, LICENSE, CHANGES */, 82018DB20988389F0043F63C /* Generate language resources */, ); buildRules = ( ); dependencies = ( ); name = PosteRazor; productInstallPath = "$(HOME)/Applications"; productName = PosteRazor; productReference = 82E5567008A56658001EEB51 /* PosteRazor.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 20286C28FDCF999611CA2CEA /* Project object */ = { isa = PBXProject; buildConfigurationList = 82ACC090093FC12D00200A0E /* Build configuration list for PBXProject "PosteRazor" */; hasScannedForEncodings = 1; mainGroup = 20286C29FDCF999611CA2CEA /* PosteRazor */; projectDirPath = ""; targets = ( 8D0C4E890486CD37000505A6 /* PosteRazor */, 18CDF2BE0DD8921C00EE5E02 /* PosteRazor_i386 */, 18CDF2EF0DD893B900EE5E02 /* PosteRazor_ppc */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 18CDF2BF0DD8921C00EE5E02 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 18CDF2C00DD8921C00EE5E02 /* Info.plist in Resources */, 18CDF2C10DD8921C00EE5E02 /* PosteRazor.icns in Resources */, 18CDF2C20DD8921C00EE5E02 /* CHANGES in Resources */, 18CDF2C30DD8921C00EE5E02 /* LICENSE in Resources */, 18CDF2C40DD8921C00EE5E02 /* README in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 18CDF2F00DD893B900EE5E02 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 18CDF2F10DD893B900EE5E02 /* Info.plist in Resources */, 18CDF2F20DD893B900EE5E02 /* PosteRazor.icns in Resources */, 18CDF2F30DD893B900EE5E02 /* CHANGES in Resources */, 18CDF2F40DD893B900EE5E02 /* LICENSE in Resources */, 18CDF2F50DD893B900EE5E02 /* README in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 8D0C4E8C0486CD37000505A6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 821432D90DAFBDBD0049725F /* Info.plist in Resources */, 821432E30DAFBDBD0049725F /* PosteRazor.icns in Resources */, 1803F4AB0DD88CBB0020E188 /* CHANGES in Resources */, 1803F4AD0DD88CD70020E188 /* LICENSE in Resources */, 1803F4AF0DD88CF30020E188 /* README in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 18CDF2E70DD8921C00EE5E02 /* Generate language resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Generate language resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "RESOURCESFOLDER=$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/Contents/Resources/\nLANGUAGES=\"English German French Italian Dutch Spanish BrazilianPortuguese\"\n\nfor LANGUAGE in $LANGUAGES\ndo\n\tLANGUAGEFOLDER=$RESOURCESFOLDER/$LANGUAGE.lproj\n\tif [ ! -d $LANGUAGEFOLDER ]\n\tthen\tmkdir $LANGUAGEFOLDER\n\tfi\ndone\n"; }; 18CDF3180DD893B900EE5E02 /* Generate language resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Generate language resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "RESOURCESFOLDER=$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/Contents/Resources/\nLANGUAGES=\"English German French Italian Dutch Spanish BrazilianPortuguese\"\n\nfor LANGUAGE in $LANGUAGES\ndo\n\tLANGUAGEFOLDER=$RESOURCESFOLDER/$LANGUAGE.lproj\n\tif [ ! -d $LANGUAGEFOLDER ]\n\tthen\tmkdir $LANGUAGEFOLDER\n\tfi\ndone\n"; }; 82018DB20988389F0043F63C /* Generate language resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( ); name = "Generate language resources"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "RESOURCESFOLDER=$BUILT_PRODUCTS_DIR/$TARGET_NAME.app/Contents/Resources/\nLANGUAGES=\"English German French Italian Dutch Spanish BrazilianPortuguese\"\n\nfor LANGUAGE in $LANGUAGES\ndo\n\tLANGUAGEFOLDER=$RESOURCESFOLDER/$LANGUAGE.lproj\n\tif [ ! -d $LANGUAGEFOLDER ]\n\tthen\tmkdir $LANGUAGEFOLDER\n\tfi\ndone\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 18CDF2C50DD8921C00EE5E02 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 18CDF2C60DD8921C00EE5E02 /* FlDrawPaintCanvas.cpp in Sources */, 18CDF2C70DD8921C00EE5E02 /* FlGlPaintCanvas.cpp in Sources */, 18CDF2C80DD8921C00EE5E02 /* FlImageTextButton.cpp in Sources */, 18CDF2C90DD8921C00EE5E02 /* FlPaintCanvasGroup.cpp in Sources */, 18CDF2CA0DD8921C00EE5E02 /* FlPersistentPreferences.cpp in Sources */, 18CDF2CB0DD8921C00EE5E02 /* FlPosteRazorDialog.cpp in Sources */, 18CDF2CC0DD8921C00EE5E02 /* FlPosteRazorDialogUI.cpp in Sources */, 18CDF2CD0DD8921C00EE5E02 /* FlPosteRazorHelpDialog.cpp in Sources */, 18CDF2CE0DD8921C00EE5E02 /* FlPosteRazorSettingsDialog.cpp in Sources */, 18CDF2CF0DD8921C00EE5E02 /* FlPosteRazorSpinner.cpp in Sources */, 18CDF2D00DD8921C00EE5E02 /* ImageIOTypes.cpp in Sources */, 18CDF2D10DD8921C00EE5E02 /* PaintCanvasBase.cpp in Sources */, 18CDF2D20DD8921C00EE5E02 /* PaperFormats.cpp in Sources */, 18CDF2D30DD8921C00EE5E02 /* PosteRazor.cpp in Sources */, 18CDF2D40DD8921C00EE5E02 /* PosteRazorDialogController.cpp in Sources */, 18CDF2D50DD8921C00EE5E02 /* PosteRazorImageIO.cpp in Sources */, 18CDF2D60DD8921C00EE5E02 /* PosteRazorPDFOutput.cpp in Sources */, 18CDF2D70DD8921C00EE5E02 /* PosteRazorWizardDialogController.cpp in Sources */, 18CDF2D80DD8921C00EE5E02 /* Translations.cpp in Sources */, 18CDF2D90DD8921C00EE5E02 /* UnitsOfLength.cpp in Sources */, 18CDF2DA0DD8921C00EE5E02 /* Fl_Native_File_Chooser.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 18CDF2F60DD893B900EE5E02 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 18CDF2F70DD893B900EE5E02 /* FlDrawPaintCanvas.cpp in Sources */, 18CDF2F80DD893B900EE5E02 /* FlGlPaintCanvas.cpp in Sources */, 18CDF2F90DD893B900EE5E02 /* FlImageTextButton.cpp in Sources */, 18CDF2FA0DD893B900EE5E02 /* FlPaintCanvasGroup.cpp in Sources */, 18CDF2FB0DD893B900EE5E02 /* FlPersistentPreferences.cpp in Sources */, 18CDF2FC0DD893B900EE5E02 /* FlPosteRazorDialog.cpp in Sources */, 18CDF2FD0DD893B900EE5E02 /* FlPosteRazorDialogUI.cpp in Sources */, 18CDF2FE0DD893B900EE5E02 /* FlPosteRazorHelpDialog.cpp in Sources */, 18CDF2FF0DD893B900EE5E02 /* FlPosteRazorSettingsDialog.cpp in Sources */, 18CDF3000DD893B900EE5E02 /* FlPosteRazorSpinner.cpp in Sources */, 18CDF3010DD893B900EE5E02 /* ImageIOTypes.cpp in Sources */, 18CDF3020DD893B900EE5E02 /* PaintCanvasBase.cpp in Sources */, 18CDF3030DD893B900EE5E02 /* PaperFormats.cpp in Sources */, 18CDF3040DD893B900EE5E02 /* PosteRazor.cpp in Sources */, 18CDF3050DD893B900EE5E02 /* PosteRazorDialogController.cpp in Sources */, 18CDF3060DD893B900EE5E02 /* PosteRazorImageIO.cpp in Sources */, 18CDF3070DD893B900EE5E02 /* PosteRazorPDFOutput.cpp in Sources */, 18CDF3080DD893B900EE5E02 /* PosteRazorWizardDialogController.cpp in Sources */, 18CDF3090DD893B900EE5E02 /* Translations.cpp in Sources */, 18CDF30A0DD893B900EE5E02 /* UnitsOfLength.cpp in Sources */, 18CDF30B0DD893B900EE5E02 /* Fl_Native_File_Chooser.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 8D0C4E8F0486CD37000505A6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 821432C20DAFBDBD0049725F /* FlDrawPaintCanvas.cpp in Sources */, 821432C40DAFBDBD0049725F /* FlGlPaintCanvas.cpp in Sources */, 821432C60DAFBDBD0049725F /* FlImageTextButton.cpp in Sources */, 821432C80DAFBDBD0049725F /* FlPaintCanvasGroup.cpp in Sources */, 821432CA0DAFBDBD0049725F /* FlPersistentPreferences.cpp in Sources */, 821432CC0DAFBDBD0049725F /* FlPosteRazorDialog.cpp in Sources */, 821432CE0DAFBDBD0049725F /* FlPosteRazorDialogUI.cpp in Sources */, 821432D10DAFBDBD0049725F /* FlPosteRazorHelpDialog.cpp in Sources */, 821432D30DAFBDBD0049725F /* FlPosteRazorSettingsDialog.cpp in Sources */, 821432D50DAFBDBD0049725F /* FlPosteRazorSpinner.cpp in Sources */, 821432D70DAFBDBD0049725F /* ImageIOTypes.cpp in Sources */, 821432DA0DAFBDBD0049725F /* PaintCanvasBase.cpp in Sources */, 821432DD0DAFBDBD0049725F /* PaperFormats.cpp in Sources */, 821432E10DAFBDBD0049725F /* PosteRazor.cpp in Sources */, 821432E70DAFBDBD0049725F /* PosteRazorDialogController.cpp in Sources */, 821432E90DAFBDBD0049725F /* PosteRazorImageIO.cpp in Sources */, 821432EB0DAFBDBD0049725F /* PosteRazorPDFOutput.cpp in Sources */, 821432EE0DAFBDBD0049725F /* PosteRazorWizardDialogController.cpp in Sources */, 821432F90DAFBDBD0049725F /* Translations.cpp in Sources */, 821432FC0DAFBDBD0049725F /* UnitsOfLength.cpp in Sources */, 82D483490DAFC6D2009CFF74 /* Fl_Native_File_Chooser.cxx in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 18CDF2E90DD8921C00EE5E02 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = "/Users/apple/Desktop/posterazor/branches/PosteRazor_1_5_0_release/src/Info copy.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../FreeImage/Dist\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../../../fltk-1.1.9_i386/lib\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Development; }; 18CDF2EA0DD8921D00EE5E02 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; DEAD_CODE_STRIPPING = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = /Users/apple/Desktop/posterazor/branches/PosteRazor_1_5_0_release/src/Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../FreeImage/Dist\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../../../fltk-1.1.9_i386/lib\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor_i386; USER_HEADER_SEARCH_PATHS = "$(inherited) \"$(SRCROOT)/../../../../FreeImage/Dist\" \"$(SRCROOT)/../../../../fltk-1.1.9_i386\""; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Deployment; }; 18CDF2EB0DD8921D00EE5E02 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = "/Users/apple/Desktop/posterazor/branches/PosteRazor_1_5_0_release/src/Info copy.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../FreeImage/Dist\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../../../fltk-1.1.9_i386/lib\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor; WRAPPER_EXTENSION = app; }; name = Default; }; 18CDF31A0DD893B900EE5E02 /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = "/Users/apple/Desktop/posterazor/branches/PosteRazor_1_5_0_release/src/Info copy 2.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../FreeImage/Dist\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../../../fltk-1.1.9_ppc/lib\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Development; }; 18CDF31B0DD893B900EE5E02 /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = ppc; COPY_PHASE_STRIP = YES; DEAD_CODE_STRIPPING = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = /Users/apple/Desktop/posterazor/branches/PosteRazor_1_5_0_release/src/Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../FreeImage/Dist\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../../../fltk-1.1.9_ppc/lib\""; MACOSX_DEPLOYMENT_TARGET = 10.3; PREBINDING = NO; PRODUCT_NAME = PosteRazor_ppc; SDKROOT = /Developer/SDKs/MacOSX10.3.9.sdk; USER_HEADER_SEARCH_PATHS = "$(inherited) \"$(SRCROOT)/../../../../FreeImage/Dist\" \"$(SRCROOT)/../../../../fltk-1.1.9_ppc\""; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Deployment; }; 18CDF31C0DD893B900EE5E02 /* Default */ = { isa = XCBuildConfiguration; buildSettings = { GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = "/Users/apple/Desktop/posterazor/branches/PosteRazor_1_5_0_release/src/Info copy 2.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../FreeImage/Dist\""; LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SRCROOT)/../../../../fltk-1.1.9_ppc/lib\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor; WRAPPER_EXTENSION = app; }; name = Default; }; 82ACC08D093FC12D00200A0E /* Development */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Development; }; 82ACC08E093FC12D00200A0E /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; DEAD_CODE_STRIPPING = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Deployment; }; 82ACC08F093FC12D00200A0E /* Default */ = { isa = XCBuildConfiguration; buildSettings = { GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = PosteRazor_Prefix.pch; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( "$(HEADER_SEARCH_PATHS_QUOTED_1)", "$(HEADER_SEARCH_PATHS_QUOTED_2)", "$(HEADER_SEARCH_PATHS_QUOTED_3)", ); HEADER_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1\""; HEADER_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage/Source\""; HEADER_SEARCH_PATHS_QUOTED_3 = "\"$(SRCROOT)/thirdparty/Fl_Native_File_Chooser\""; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ( "$(LIBRARY_SEARCH_PATHS_QUOTED_1)", "$(LIBRARY_SEARCH_PATHS_QUOTED_2)", ); LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SRCROOT)/thirdparty/fltk-1.1/lib\""; LIBRARY_SEARCH_PATHS_QUOTED_2 = "\"$(SRCROOT)/thirdparty/FreeImage\""; PREBINDING = NO; PRODUCT_NAME = PosteRazor; WRAPPER_EXTENSION = app; }; name = Default; }; 82ACC091093FC12D00200A0E /* Development */ = { isa = XCBuildConfiguration; buildSettings = { SEPARATE_STRIP = YES; }; name = Development; }; 82ACC092093FC12D00200A0E /* Deployment */ = { isa = XCBuildConfiguration; buildSettings = { DEAD_CODE_STRIPPING = YES; ONLY_LINK_ESSENTIAL_SYMBOLS = YES; SEPARATE_STRIP = YES; }; name = Deployment; }; 82ACC093093FC12D00200A0E /* Default */ = { isa = XCBuildConfiguration; buildSettings = { }; name = Default; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 18CDF2E80DD8921C00EE5E02 /* Build configuration list for PBXNativeTarget "PosteRazor_i386" */ = { isa = XCConfigurationList; buildConfigurations = ( 18CDF2E90DD8921C00EE5E02 /* Development */, 18CDF2EA0DD8921D00EE5E02 /* Deployment */, 18CDF2EB0DD8921D00EE5E02 /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; 18CDF3190DD893B900EE5E02 /* Build configuration list for PBXNativeTarget "PosteRazor_ppc" */ = { isa = XCConfigurationList; buildConfigurations = ( 18CDF31A0DD893B900EE5E02 /* Development */, 18CDF31B0DD893B900EE5E02 /* Deployment */, 18CDF31C0DD893B900EE5E02 /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; 82ACC08C093FC12D00200A0E /* Build configuration list for PBXNativeTarget "PosteRazor" */ = { isa = XCConfigurationList; buildConfigurations = ( 82ACC08D093FC12D00200A0E /* Development */, 82ACC08E093FC12D00200A0E /* Deployment */, 82ACC08F093FC12D00200A0E /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; 82ACC090093FC12D00200A0E /* Build configuration list for PBXProject "PosteRazor" */ = { isa = XCConfigurationList; buildConfigurations = ( 82ACC091093FC12D00200A0E /* Development */, 82ACC092093FC12D00200A0E /* Deployment */, 82ACC093093FC12D00200A0E /* Default */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Default; }; /* End XCConfigurationList section */ }; rootObject = 20286C28FDCF999611CA2CEA /* Project object */; } posterazor-1.5.1/src/PosteRazorWizardDialogController.h0000644000175000017500000000414611041177230022760 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef POSTERAZORWIZARDDIALOGCONTROLLER_H #define POSTERAZORWIZARDDIALOGCONTROLLER_H #include "PosteRazorDialogController.h" class PosteRazorWizardDialogEnums { public: enum ePosteRazorWizardSteps { ePosteRazorWizardStepInputImage, ePosteRazorWizardStepPaperSize, ePosteRazorWizardStepOverlapping, ePosteRazorWizardStepPosterSize, ePosteRazorWizardStepSavePoster }; }; class PosteRazorWizardDialogInterface: public PosteRazorDialogInterface { public: virtual void setPrevButtonEnabled(bool enabled) = 0; virtual void setNextButtonEnabled(bool enabled) = 0; virtual void setWizardStep(PosteRazorWizardDialogEnums::ePosteRazorWizardSteps step) = 0; virtual void setPreviewState(const char *state) = 0; }; class PosteRazorWizardDialogController: public PosteRazorDialogController { public: PosteRazorWizardDialogController(); virtual ~PosteRazorWizardDialogController() {}; void setPosteRazorWizardDialog(PosteRazorWizardDialogInterface *dialog); void handlePrevButtonPressed(void); void handleNextButtonPressed(void); void updateDialog(void); private: PosteRazorWizardDialogInterface *m_WizardDialog; PosteRazorWizardDialogEnums::ePosteRazorWizardSteps m_wizardStep; void updateDialogWizardStep(void); }; #endif posterazor-1.5.1/src/ImageIOTypes.h0000644000175000017500000000240711041177230016600 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef IMAGEIOTYPES_H #define IMAGEIOTYPES_H class ImageIOTypes { public: enum eImageFormats { eImageFormatPDF }; static int getInputImageFormatsCount(void); static const char* getInputImageFormat(int imageFormatIndex); static int getFileExtensionsCount(int imageFormatIndex); static const char* getFileExtensionForFormat(int extensionIndex, int imageFormatIndex); }; #endif // IMAGEIOTYPES_H posterazor-1.5.1/src/flagSpanish.png0000644000175000017500000000030411041177230017067 0ustar simrunsimrunPNG  IHDR k:IDATx^!@JC8'RVoz, d_Fd5:~wr(PQW2i@Fqfڶ_5lH̘ϛUdӆas!Fs /Cf\xvNIENDB`posterazor-1.5.1/src/UnitsOfLength.h0000644000175000017500000000303511041177230017030 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef UNITSOFLENGTH_H #define UNITSOFLENGTH_H class UnitsOfLength { public: enum eUnitsOfLength { eUnitOfLengthMeter, eUnitOfLengthMillimeter, eUnitOfLengthCentimeter, eUnitOfLengthInch, eUnitOfLengthFeet, eUnitOfLengthPoints }; static int getUnitsOfLengthCount(void); static double convertBetweenUnitsOfLength(double distance, eUnitsOfLength sourceUnit, eUnitsOfLength targetUnit); static int getUnitOfLengthIndex(eUnitsOfLength unit); static const char* getUnitOfLengthName(eUnitsOfLength unit); static eUnitsOfLength getUnitOfLengthForName(const char* name); static eUnitsOfLength getUnitOfLengthForIndex(int index); }; #endif // UNITSOFLENGTH_H posterazor-1.5.1/src/FlPosteRazorDialog.h0000644000175000017500000001147211041177230020015 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLPOSTERAZORDIALOG_H #define FLPOSTERAZORDIALOG_H #include "FlPosteRazorDialogUI.h" #include "FlPosteRazorSettingsDialog.h" #include "PosteRazorWizardDialogController.h" class PosteRazor; struct Fl_Menu_Item; class PosteRazorHelpDialogUI; class FlPosteRazorDragDropWidget : public Fl_Box { public: FlPosteRazorDragDropWidget(int x, int y, int w, int h, const char *label = 0); int handle(int event); }; class FlPosteRazorDialog : public PosteRazorDialogUI, public SettingsChangementHandler, public PosteRazorWizardDialogInterface { private: PosteRazor *m_posteRazor; FlPosteRazorDragDropWidget *m_dragDropWidget; Fl_Menu_Item *m_paperFormatMenuItems; posteRazorSettings m_settings; FlPosteRazorSettingsDialog *m_settingsDialog; PosteRazorHelpDialogUI *m_helpDialog; char m_loadImageChooserLastPath[1024]; char m_savePosterChooserLastPath[1024]; bool m_UILanguageIsUndefined; PosteRazorWizardDialogController *m_posteRazorController; public: FlPosteRazorDialog(); ~FlPosteRazorDialog(); int handle(int event); bool getUseOpenGLForPreviewByDefault(void); void openSettingsDialog(void); void openHelpDialog(void); void handleOptionsChangement(posteRazorSettings *settings); void next(void); void prev(void); void updateNavigationButtons(void); const char* getWizardStepInfoString(PosteRazorWizardDialogEnums::ePosteRazorWizardSteps step); int getCurrentWizardStepNumber(void); void updateStepInfoBar(PosteRazorWizardDialogEnums::ePosteRazorWizardSteps step); void updatePreview(void); void updateLanguage(void); void getFileOpenDialogFilter(char *filter, int bufferLength); void loadInputImage(const char *fileName); void showImageFileName(const char *fileName); void updateImageInfoFields(int imageWidthInPixels, int imageHeightInPixels, double imageWidth, double imageHeight, UnitsOfLength::eUnitsOfLength unitOfLength, double verticalDpi, double horizontalDpi, ColorTypes::eColorTypes colorType, int bitsPerPixel); void updateImageInfoFields(void); static void handlePaperFormatChoice_cb(Fl_Widget *widget, void *userData); void handlePaperSizeChangement(Fl_Widget *sourceWidget); void handleOverlappingChangement(Fl_Widget *sourceWidget); void updatePosterSizeFields(Fl_Widget *sourceWidget); void updatePosterSizeGroupsState(void); void handlePosterImageAlignment(void); void savePoster(void); void setLaunchPDFApplication(void); void setUnitOfLength(UnitsOfLength::eUnitsOfLength unit); void setPaperFormat(PaperFormats::ePaperFormats format); void setPaperOrientation(PaperFormats::ePaperOrientations orientation); void setPaperBorderTop(double border); void setPaperBorderRight(double border); void setPaperBorderBottom(double border); void setPaperBorderLeft(double border); void setCustomPaperWidth(double width); void setCustomPaperHeight(double height); void setUseCustomPaperSize(bool useIt); void setOverlappingWidth(double width); void setOverlappingHeight(double height); void setOverlappingPosition(PosteRazorEnums::eOverlappingPositions position); void setPosterWidth(PosteRazorEnums::ePosterSizeModes mode, double width); void setPosterHeight(PosteRazorEnums::ePosterSizeModes mode, double height); void setPosterSizeMode(PosteRazorEnums::ePosterSizeModes mode); void setPosterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignments alignment); void setPosterVerticalAlignment(PosteRazorEnums::eVerticalAlignments alignment); void setPosterOutputFormat(ImageIOTypes::eImageFormats format); void setLaunchPDFApplication(bool launch); void setPrevButtonEnabled(bool enabled); void setNextButtonEnabled(bool enabled); void setWizardStep(PosteRazorWizardDialogEnums::ePosteRazorWizardSteps step); void setPreviewState(const char *state); }; #endif // FLPOSTERAZORDIALOG_H posterazor-1.5.1/src/PosteRazorPDFOutput.h0000644000175000017500000000367211041177230020171 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef POSTERAZORPDFOUTPUT_H #define POSTERAZORPDFOUTPUT_H #include "ColorTypes.h" #include "PaintCanvasInterface.h" class PosteRazorPDFOutput: public PaintCanvasInterface { public: virtual ~PosteRazorPDFOutput() {} static PosteRazorPDFOutput* createPosteRazorPDFOutput(); static unsigned int getImageBitsPerLineCount(int widthPixels, int bitPerPixel); static unsigned int getImageBytesPerLineCount(int widthPixels, int bitPerPixel); static unsigned int getImageBytesCount(int widthPixels, int heightPixels, int bitPerPixel); virtual int saveImage(unsigned char *imageData, int widthPixels, int heightPixels, int bitPerPixel, ColorTypes::eColorTypes colorType, unsigned char *rgbPalette, int paletteEntries) = 0; virtual int saveImage(const char *jpegFileName, int widthPixels, int heightPixels, ColorTypes::eColorTypes colorType) = 0; virtual int startPage(void) = 0; virtual int finishPage(void) = 0; virtual int startSaving(const char* fileName, int pages, double widthCm, double heightCm) = 0; virtual int finishSaving() = 0; }; #endif // POSTERAZORPDFOUTPUT_H posterazor-1.5.1/src/PosteRazorUI.rc0000644000175000017500000000630411041177230017024 0ustar simrunsimrun// Microsoft Visual C++ generated resource script. // #include "PosteRazorResource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // //#include "afxres.h" // afxres.h is not present in VS 2008 express. Windows.h works fine, there #include "Windows.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// // German (Germany) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) #ifdef _WIN32 LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// // // Icon // // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. POSTERAZOR_ICON ICON "PosteRazor.ico" ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,5,1,0 PRODUCTVERSION 1,5,1,0 FILEFLAGSMASK 0x17L #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x4L FILETYPE 0x0L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "00000000" BEGIN VALUE "Comments", "PosteRazor 1.5.1, Copyright 2005-2008 Alessandro Portale, GNU General Public License" VALUE "CompanyName", "Alessandro Portale www.casaportale.de" VALUE "FileDescription", "PosteRazor" VALUE "FileVersion", "1.5.1" VALUE "LegalCopyright", "Copyright (C) 2005-2008 Alessandro Portale" VALUE "LegalTrademarks", "Alessandro Portale" VALUE "OriginalFilename", "PosteRazor.exe" VALUE "ProductName", "PosteRazor" VALUE "ProductVersion", "1.5.1" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0, 0 END END #endif // German (Germany) resources ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // English (U.S.) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US #pragma code_page(1252) #endif //_WIN32 #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // TEXTINCLUDE // 1 TEXTINCLUDE BEGIN "PosteRazorResource.h\0" END 2 TEXTINCLUDE BEGIN "#include ""afxres.h""\r\n" "\0" END 3 TEXTINCLUDE BEGIN "\r\n" "\0" END #endif // APSTUDIO_INVOKED #endif // English (U.S.) resources ///////////////////////////////////////////////////////////////////////////// #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 3 resource. // ///////////////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED posterazor-1.5.1/src/FlPosteRazorSpinner.h0000644000175000017500000000354111041177230020232 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLPOSTERAZORSPINNER_H #define FLPOSTERAZORSPINNER_H #include class Fl_Input; class Fl_Repeat_Button; class FlPosteRazorSpinner: public Fl_Group { public: FlPosteRazorSpinner(int x, int y, int width, int height, const char* label=0); static const char* quickNDirtyDoubleToString(double value); static double round(double Zahl, int Stellen); void setSpinnerVisible(bool visible); double value(); void value(double value); int handle(int event); private: Fl_Input *m_input; Fl_Repeat_Button *m_increaseButton; Fl_Repeat_Button *m_decreaseButton; bool m_spinnerVisible; void updateButtonsState(void); static void handleButtonPress_cb(Fl_Repeat_Button *button, void *data); void handleButtonPress(Fl_Repeat_Button *button); void doValueSpin(bool increase); static void handleValueChangement_cb(Fl_Input *input, void *data); void handleValueChangement(Fl_Input *input); bool isValueDecrementationDisabled(void); }; #endif // FLPOSTERAZORSPINNER_H posterazor-1.5.1/src/PosteRazor.icns0000644000175000017500000014620111041177230017117 0ustar simrunsimrunicnśics#His327": 5Z_bW3"" )wv^ul]4 jzgG /+ *21mJ"-% 4,A?+< G*!fi. ;  %HJ (!nH< +$%=s a]C#lmb  ,[P&8":5ZR3"" /tc\ph`4 crl\4p|E  +XE.gs/ $&0E4!/, '+(Q5)# (2,$/ )OS% )  &HH  oL<  aU As ?=,kob  0[P&83 *MLKG3"" )ezqeEUeZS. Qg_I8-a|f7 31*UW!  #'.( +$ #'# #j]!! 6<   $EF nJ< >3?s ,+"jla  .[P&8s8mk# +g, 7v6q6l6Q6A0A~A*AwA? CEEEEDMqICN#<<il32'3AHJ:MOXY`jobUxvz{ycB6?@@=6=;+D}ݕitxurligE.LnyvP ~h.(gZ;W\J`FWt>-+d .(  0C>R}F  $fK/8Od7&,21.'eY3%-180))+6/"K9Q($+'%!!*4>2!9W',.*$$ )1-&%9xp)%2C,*0@<+'ײ@$!BM7(-0: bncWS/6M<$DH;Q݋A* 5-Lb7#9LD)## +L]#* .$81 NsA6ABGEJS\QIkaeaZ]K*36:63064%@qinploTM ]eme^]_[@#mx~n[UA\wkilh_B^mwq]7YA#%U}vukfF-A=5F20N4@%'fu|xiK*  =+1E]tZ7 FG0N-)4B_G(#()'%1D$A%"+-0(#!%+$((!!&#!$+0%"&&#%$$XU54$' $!=xhO#&)$  ,;>~Q)) +%JzB% !#&& &&%   Os8c   +n+ -"\"KH' R/IO=o;3 7297,&"B&0b7(!&"}rd}Tr)   4XPyO6iBl8mk#Jy= CKPOOOOOR)m+]88EܜM ѳrWD+EF}MI8)Ƿ X!c+bv+ r7)*)*****)***)8GX_3ich#H?????????????????????????????^?????????????????????????????^ih32ۿ#-& $2>CQQfS -?AMUY^dfk`ue"_rqpttsprwsa7hprwz~`DV)AHLOLLJIBEIA:^|}igstzvwuooihRTo}vtmjX:t-Ab}xb%dTF-&&XkXgixdZTPӸg%}2%&xt*@MPE>E@13y`.3g*@|y<41% 'w/'GTY}U 1&n6 "3<9ghG#($()%Oț@ٚ.!"6=7HtlZ@)+.0202+'/k8^)"(.04<5/%%+-,/+#4x*I& %'%&()!#&(&*2?5$#8O1%(0/(%" &+3>C:'#`9",'",+% !#",210/+')Qg,2147'*)01/##%'R{0)',L>)5*4;9*+&2ޠE1+VO9,30:TL:)RͣN1301MQO0 2.%$.+ /'[eeA(2KL,5>>C0.T?()3<*Xe]E1;\uB'# (1&<^]@-311'#'$" 0 CYT)/. !/M]W   )"Vf(++    8|/\y%&   Z)%/'  '?SK[ !)76(  G2| 2CDIq1  Q5&1-I1 v[ l`#Hk*5)7%J_ n !/fvtkRHG;1Km;YWl|_H965*!tJyh Fy|<2CEK9%# =s#S,$%'%# dFH $  h2mC9%   3 3A    YEoB" ~h0#-& -9BNOdP -?@KOSV[_e^m]&_rnkomieglnV2fomrutvvuU4C"AGJMJIEIIC<^}x{V|fppx{rrpmpkiVQznjz{xuwssmiY4fey*;[z{}{ub"TA`\1'&%S|xeR`[gUQG?U[,%%p{k&=HF<8=5+%]M&K)) # &#½o:CC0);7!!%%) cٶa90 &+ /53+#(>cy|T3" "%/.&!#"%!!!+4/%% %2;5    $Vg"#    8|/\y     Z+&/   (?U M[ ''  H5 }%-/2h~M$    S 5"!3Z#  w]m`1Py~tE&&Han "EKPceQE>5./))N m;9_m6BXL9-' !sKyh-LP*$,-/&?s4  fFH i4mC9%  6 3A    ZFoB" ~h0)# (17DFXI %64?EFJNPTR`U"Ug`[_\ZSTW^H,Ze\deeda\gG*29DAEBA?>;AA=8WqigpoqkkuCvL\ednqfe_`e_]LJwqssqzu~oLg]knwuhgghh]WO+ms}VEJ(6Prvghpmkg^SjvpzC1>P:#%$G~urvrkedPALEL?@im<1afV1 <'#$b|xkbW!5:72/2,#;3P6%4[gty~pdY60)  H:%!8ELfsmTB FL8 3>&-77LrdG8   )YK>hE$ ,55?WN?/$(+**''";C-M0"!#+.14,& "%%$%!F4:* "%%"%$ !"#+1'!'" $)'$$!%+33*/ &%  %&$%" +R-*"#%&$"%&% +]zK*$ "&#*BTT;) "  !&"  %)$   !Ud    7|-\y   Y)%/   %=T L[   G4}  #AL1 R 5&MYYM6w\l` $6JMIE,G` n  .25>>4.+&!$&L l; (=C'-70'# rJyh !45"# =s% c FH i1mC9%  4 3A      YEoB" ~h0h8mk :oH?kDp"B@7h , ; G,)J/_HI/ BlJ/*ɮ;P/ǬxaP@+N/bo[LEB@GSbupP/ -mc/-~/-/)///// p/ ]ǹs/K/F/F/F,FLiF8FFFHFFFQFG!F\Fh Fc̛GU3A8 %Qikkjjkkkkkkkkjkjkkkk~’Q!)******************+8B?UoQ=& /. it32bAEN ")HBNgelig>GUnondommllo')JFQspminoqrbsxvvx78PQ\tnotfnhponsvuette"$;F@alvuzrolhmjosnuxzvhsvzw#8n##?>:8;75:7|$xɧnRDUZQ~#:U?<:6879;9$cu}|nXQEZáؚ艀#eqF=956866P$Nrw~bvz~|khkkgqLDk۲䶀#tɠlJ?818494}$_`X^svsmiiWXgtqa[YH@Sྀ#zݺ}WH<551259"@LOOPlbkihgcQOZdWmv^P[URD?ȶ{L&#wվkK?:72003{BBGQV\Vc]^`dELHKBHMUTJDJK34.--4^[^ghjnlxfCIETIIKGA<6'#QuS=3300.1RJXhh^e\n{s^RBR?44*#McLLd\?;4/.//JGKM]]YVcy|hmY('*tdihnpC97/./,@HGHOMUHP]qYV3 +66]ծfۻt=93../,:DEHIKHDQTd_lZ<%.3=<@F=BABHE俘/pϪg@65--/38>EGNJIEEIeimeR '1;=6HFBD=8BA=>?6;G:9͡hN{YnܺX:42/3.36NNGK>C:BESwog`^MHJN:;=;=D@CMIEC==ACAA<78:89Y~vXl̢~N;754/-.J?6=>7A>;=@CC@?@DB>BDKRYb_RH>@NH@5;D;46>==D><@@><=JC::<47>>8jϼpfҽpYE8232+/-1/1757;98:>D@AE=D><899>:7:543l˻nNtVG7414-++/3856/556553-58>925,<3H,2200;:8?E@@<;::98=??E7;31742_๔d?<@::=?=EBAIIE?9;:2.1PhEI_I?6.35/**,599;658 :??<5011,-*H22.18::;>657>:<@=BD=IG;7662/-/7B?=<;3-/*((**7=8==<815..,0(.2-./*G),/,*(/*34:JFNMKNOLNLKBB:545579Cmk>ACDKKC80.'*'*&4886=<7766,,3.*5#,2-<0-,/3.+7=:B@GFA@UGIFGJ:748786:J}ʼn$TNNV_aP;20(&*'%2;CIQCB>;?CAA3+27.G.046635:@PGB?A;8/:7043965=9GQA;;?A-0.7963.8>35.0:5/9?>PDxG9A?9.(%$(,2,.*&0Zj]F=I5')+GF6:=9579C@:7OH9029/88789BIeL\C=M>4+($063==@?OisJ>=E2'-2GFC?;<3:DKHJPVH;29<38>648FS\˼aIMQ@4/,.+-16=WnwԼUWTP?212/*-12S{ldYPIHBC<9,0FFGGDCC@PYYV^TIE@1357.)*3;Uhploe\TfL=:.F@CCHAG>JnojiXZE@AL<),35Hվk^OP8477G;5(->;KTUjGYbP@99:F9FE??C9=Mgrte]QCKJ,&).2ZٿpdQO98JNQC7&%,:FahkeueruxV8;LBD>@7CC9;Ugp^a^<$))+-CaA#WƑbTHTejkjZE5("/9@XicjnnseBILIIMOHGDAFSOIWF #[ƈuYh{tU<%.0;=6>?=:=@D==ECFZ\($"'6a߽{vfL>40&&88564M}aF-?MJEFOTaaZgjt~g<)&"/)3GLΣwhQ>@961)!7>42@:FPF-5FTXdkvquppjT0''#),',>VYdɪiSE?:7,&#EGJ@:=5NF6BZixoxoZ{UQR2"%$'%07KDKU[]dݰxeME?8/0..*#4L^MA@E&F89clqqxmfg_RH"$"5=??8AHMafhpkzjmUPD73044=2.(6BA7FQ%F219egww|f" #'46853@-BF^TVcS]c[YUCI75522:=<0+#)5208I-3./LYf}|lkG(3!4.5'/%/27-(1/#(+=;?>3 F40.?U\jp`^`[<&$*%&+#(:>;;?8:6=;;.)((+/4633035L;76*)!KIC7*+F9//ATZWXS\YM;#$''( %3-6:2,1=-*%"!#$(*01/-3:>D@/1.#?NM0(&F;53Um}|wmo`7+!" " &$ )**%1**+%$'%%&29LAB?: %+%$F=;2Yiijdgvq>) !0)0#!&#"/5AIB;1 ,&";5Ncp{|x&"1"$(*$#05;G4. &fq+-%F#LU]bljqyoQ#$#' -0369* "Z#F< =IGBFHJMUUE)   !"<.-'OF,51]<9495:989&!$%!    %!D#N8=;;5;875'! $$($  "K{6$C$7=::;:;0-+&$#(*/+#    ##8 dYg@>765:0)')%%&$(*+*)     G A?<56-(&((/)*/-20-+$"        a*3C<3-*(&&*,0+()*-.%$# "      #$r 8E?6*,%($-'&""'! &#     J!C5,+(*'%&).0.@7/','     DvzI3,D5&$$&$/+=KbE2=[D,!"$!     &.  | >1''($!+=J=20$%)($    3 =:(#'% /.AEOT]pSkY0;9MD.#    b <# @3''# 05TPkD>^`OoWͭ|U#    !Y  _4 =.## #,/JSHFj9]]>ożnC  N4   W(H.@-$$'*63X802QAbwʻp)    5 =.%+)#&++H0>3F7Jmǣy'     M59+%*##!$1*3*4.z_[?UdSO^QE]"6H7%! !#-)(#/22_jɲqԼqryc]i^Ss[F?=!"$%!I-$"% * "!&&:566412$%y245N, 3*'#%"&*'$"*!*MUUpiVFA>4EIFDZXKZ"d 2tn')w- >CQ !FBKdelif>CRjjojkikljk!FAMnjhfhkmofkrquv73KLYpiim`hbkjhmpojln~`7HCairqvkge`c`ekgmpp~qnkqtxzr#;;$\u~yz{~|~~i<NPKRL#Wkpjsuruxvyvwvruutpvtrnklmtootrkgllg$qz|k>IhLnpstyru{~v}wxwtqtqzuuwyyrlnoe$eTNȿTMxw{tzyzw~||{xz~xtwwuxtf$RGύO~~}}x|{yzrquvj$4qCџ#C}tsxzrk$PJ̫#B|y~zvxk$qRNϻ #1cmyy{n$bKMƸ[#!=?BBUsv{p$PbELȓwT#<6:?EBW~u$0]F?QUj#?8769>@;kw#ǔ]@Jmqsu#PzV?<956866N|$Iljy^yqej|vij_ba]ab=;X#_uS@>8185;4r$VmZTVgffn]XXLLWhhTP|L;6Bƻ#gZH@:45125:"@EKONdZc^[YUKGN\N_aQFQGE:8z^5#diTB;982101p?@GNRXRZTSVY@HDF?BAGGD?>=27_F#]fXB956./0Wh{8?GJRYLVSNH?CED>D?D971 #_lH;;60/,8behph.?GLERHLNCKB=E72*  _uI:34.3WSYbejqnuxaBGDSILKG@<3##<|x^YC73301//NIUbd`g^nwpk^R44*#6YG>=JI882/.0/IGJL[^^XarsllV(&*XlMILUryS986.-.->GFGONWJOYti\Q #-/HLnX583.+8CDGIKIFOP}{v\[iT<",/97;>9=98:7nr!\ɸ~M:54-..27=DFOJJGHKax`ebME'1;=5FD>A=88=;:9;14:34VpK>\CZͿmE431.3.44KJDK@F=CGRu~~yd_XYIDJ9;=;=C?CEC@@98=<;<72"3Bg}XSmc=WósY?4643/-/;POWcce^`c lno_XSTRTC =G;6=>7A=:<>:;:;=<7:41/347bwdnmIIXTR^O:64:3++-162:AA?BGLSZc\TJBAOJF8+>=C;99;<976C=557/0221HwdWiNOjQD;10+1.1/1759=;:;?ECD?C;743>3:4;15.68;;2;:9@8?973449501..,KsxiJ8^SE<4303-++/27561656 3;>?858/?5H-3110:95:>;<765543898>03..0-.BeC(ybIG7251-(*))/:6998654:9<@D=<10/51:&34.8>8:9:7<558:8@=:B@;613/*)+?rw[G73tZF:53-24.**,488<66:9 ;@@>8344/20H32.17988;202957;7>=7@<4//.,*()/5531(mWH;94/8/*+)(/3?:8;:?9;=:75340611801/30313961-7237>6?GIQO3/-+&)&(,96/&QF<:3//15.)),/4A@AA>8;89432-+'5-G3.//2.+.:5477;>CHLNCID=1-4-))-+/MkW6714240*0*-)+(+:?5;798652=,133B5.-.6/-,-*(118:;4:?DEHDFHGHA801),-,.2Aow612/8563-*))'')*7<7< 914//-1+15034,G*,/,*)0*2/1?=DDCFEACAA99.,*..0.6PiO4565;;71,)&)&)%2577;;8754--30,7(15.:/,,/3.+585<9@;89L<>==A3/,0/1/37]f?:;@DI>,++'%)&$/6=AD;;: ;;>:<0-37-G-0466248>K?898./)30+/-30.6.17Ce%QFLL[SB21*&(+)!&1>D=AEGLBFFJMF?7254G'116988<=BH72158(,)23/.)2487H|-j^]gek\@/,*-/(("((+.+6/:33.1()2/1/379;rŲ3~zhS6/74/('$#'+1+-*&,JMH@:A5*+,=39<62>7401@:.+.0'//0127:Eʽ9`A92=5-*'#/1.86:9DVY?:8?4+.2G96737057<;:=D9.*/1*03/-19?[JhF<9;6-*')&(58O\`ROHB@;50250G =:;50-3>989:C711.2033,05?I`cÿf=C?<5++,)$(,.IaSKICA>??88/0F>::6864>HGEE>6241601),7:JcyvĻrIDC94*,.0'$%.3GSVUVPHERC8:0F8779774;PUKO?B646:0#'.0;b܍Ϳ¤iJA;<0-0.50,$(73=FDQ4824-65/0?ISACB-"$$&&0\yoU7#K_UD?:>DNNMG9/#",.1ERLUXeTUJ8;9679=87514983;0 #P±^P@LU`W`]fUB3 *%26176G;@dgOB;411'%"156//2/9F12:@EBHA5I987(#!$!*-<37=<@D[dYM<;80++)+)")6<5204(F419B@DIC@=<80.211,/77FHHMDTY]`]MTBB<2.+.-5-,')22*29$F1-0??BMNDIO`F#-+.,)6%32F=@G7?LEDD;>100--341+("%))(-2*2+*57=DCEH=?1"3,',"( (/=04G87=9<585/+**,./6/2($)* &&,..0+$F2,)06:?@0795(!$"% #20//0+0-102*(&%(+/0-,--,=2,,"#742/)+4**3799;5.)"/#!-'+/*'+6(&#! "#''+,*(.3787*+'"/42'&&F50,:EKJHA@8)% !!$!$%$ ,%)*$#&$$#-0<575. "' %$$72*DHJNIIPO0$ +$+"!%""+/696/,#!'$60;FLUXTTMP!1"#%'"#*.47+(&fp$+(FABACMHLOUD8!"&+(,-/'"Z 70 =<:48779>:1 !0#& OF&/1]:63-2+/.-. #E$N8544.0.,*#  !K{6$C$36334/2)&%!" ##($ !#9 dYg70-*%#&""$ #$%#$  G A7200(&#%$+%#(()(%#!      b*91.(%0!$%%$"$"%&"! $$r 85-%'!&*!# $!    K!7.*(&$ &!&$2(& %"    DvzJ32:.$#%!(%/5H3'2E5$ #!    '/| 5-(&'# %4.7.5<,8/()"$"    37/&#&%!)(358eC>6RA6./$!+(!6:,#!% !!!!1J[sOUajquvxD7Wl]FJ@>A;@78FS=33&C%"0)^ 2()'#$'&P_]oISYdiswUmF2=PWMG<:C6C935;841o %/).73-&% !!CTNJh?FO]kHa{{H=3IWB=38>DE4//4/1 S"%4p& 1*&%$#!$!N@QwoxS?FMJ\}AOeeF77?9;6707E40+-%:/ 3#ai81)$' #%!""!# GAkX^z^D:MO:Wx?A]eC134/34*.41-.0,()7/81('')#" #$ ! %AOJDfviRB85CE6MZP4;L`=16*0.0./,,/,-$#y20.N,/.'&""!&(%""! &8;>KaxcI=621,5351Z"d 2tn')w- ;>E C@@X\d``8:H^]ffZ\beab ?;Ec\\VZ^`eb]cgplv3 +DDRg_]cW\V]^Z_bee`comvz[1=9Q\fei^ZWTWTY\\ab^oci`fhqxpi#89M9kb`ddba_bf_ai\eb_ceabcnajajityr`#tqjovsmjdhfgefhejfgigbfcglghcspqx]I:$fwqwh|{vknuvzyjmpkkfdefmhero|vaH6:5 Vjxv{smiip{pw{xvurlkkikinqpU539*$6nqzxmomnu}uww|srmmvneklmwsu_077F<9.# "" %  ""$$ f{{nolnkxy|orwxwx{x{}uvqv}h>>5A<:E9O^hbonijmkplmlkiagddb`^dlebhga^fe]$g}uolz|s|wzytt{{suru\6>Okvge#Ieegiogiovuvyskrkjijicagernihnohade\$Yyumt}{{r{F@h{9#Gpnqknmnvxzx{ukutqpwjllpvtsmimojml_$L}tt~y}x>`[#I{tsyvtvszswvwsmmukxvrwromdfikc$+uxx]9hj#>zz||{u{yt|utyvtustfdkohb$xxw}E>lt#;{}v|~wzv{{~ypx~tkfkllm_$]zwDBg{#*W`uy~}~r{uxyu{xx|~pjcfjuc$Uup=Afw<#!=<7awjo}d==E#>6568;<6Z~~~x{}xtxuo`#w|rK:7RULRRqUAOZ#784695386j~|w~||vypuotr]$[j{|h~L:7<<>4DugI[f # ;446465796n~{xxmqmtoh$LsjykNR}rt\c_lXao><9>OcM]osU_T#6VD:7734644C}}|wvlxwd$<^UfNaUQT`[QRNUPJTrnV85Jsuu~ru_j~m#?jTA894/63:1cuousr}i$GVLJIVSQXJFD?AHTU}qDFfA626sahud#Fv_C<75/3/036xyxmsk"=>BGDTLRNOHGC?CLDJKC=F>>62V|rrC$#CqbID9744.-.-]wu|{uf{i8;BFJOEKEFFM:?;>88=>?=57:.+A/ #?jbVLG<3/0(-+N^eonn}}{xssj0;BDKPBFHB:5=??8>8?32,#?qqi`L=461+)&4RSU\Zwl|n|~~ujnf)=BG@NDEF;D=7>0.&#?url\T;3/0*((.OKLWT[aZg|ma^jjK ?AAOGIF@:6/#'UXTCF6/11.+)*EBHTXU^Q]^|wjc[ZRC7E:.2(##:464=;271-,*)D?DGTVYQT^tqfZX^H#!*:1H8A434;:9?74576310>7//2+-0.+7SaiWF@J63l^JA92,/11+0,/-/536:8797?<>884.+*5+H09/3+1256.665;4;52-..40--')'8Qj^ZUI6&VWEB:5-1.1++*-0534.33420/,367../&7.).C850686832110/4328*0+,,**3dtt_H4[TI:=1-3/+&*)(-7357641/4367864*''.*:!-.)6:455638/0464=94<973.0+&%(2QS>7-#_RE:100+02,**,25364373 5:961,-+'+)H-,*/24437.+,41396:72;6/+,+(&"$+,..-Q?<43-+6.++)(/.:5356;35770.,-)/((0(H.(..-,.41,'2-/3<6;BEKF-)++("%"$%--,>:53/+0/3-(),//=<6;=9-/055.0*,++%(*H 1&.,*0(053.**/1=B>6+)1*&%''*:N@/2,1/0,*/(+)*&)88.624310,7&+,,<-&%%G*+*+(&,,47:362*+$"$($"-6938@?C;:66953-**+G#-/4798:;<=.*+-/$$#,-)*&.0717Wdu{{iLEFNHMD3((%(*$&$$&(%65,5B=57,0&&!$G/247;5?404,)2)+*("#**+/2432Njs{xWWSY[VF<.+4.)#%!"%+%*&!'9691.4+#"$G9-4:2--,,(&)5/&'$*!(*)0,404Xqy$_cefi`ZC61+3/((#*+(1.0-7?A1.+1(#%)G3/2.0)/-0//271)#(+$*-)+-45Ao/syu}vc[K:2//0'&#%"",-?FD:<7421+'()&G 623*(),3.-//6.,*())-,&,258?kD}zkYH0911/%&'$#'':@CB>D@A9*(5.1+-%.,')18B034& ##=TON9% #7xj^D@54236>;8?/*$%(6>;?CEIAC@N?4,#,0)-)9051 *53+)( #C|mPEFE>AKL?75$!&&" 'B?9;;F!+*#(#$%&&#$(%$.)#/Xz{z}pYL>9HC;4+'&"'$&%,>J:F30*)(+-764997<6+!$&-.@g}~ziQEB:4-0('' $-$#'%,+F/0,,+2391;442,#  "!2.1Cgfre_O<8/.*+# ,.+(%($,F/+.25.40%6+-*# #&1&--*/2?WnxzULD=460+&'$%$#)0))(+ 2,02/485/*)%'-,*&'-,:45:2>?ABG9I796-*'('/(&"!)* '0</)(221<:/37E7''(%$,&%8128'/>86904+,,))-.+'#$"!$'"F0'$*,-34/5,-&)!% ""$0#'9+-303-.,)'&&(()/).$##! "%$&#F0)$)),11"+*(   *'&(&$*'(),%$#"#'++(''(&1)(( -*&)"$;4(&-+/02*+%%")"$)$ %0#"!"#'(&$*-010$$!%'&# F3)&1655720*   ! (!$'" !").3.1.(F1,%579=878<'' '" %*/00*$2)149>@=9391!#$(,0&#%ep%!4=6119488;0*!&$&&%! !Z*$ =40)-../0,' -!!OE$1]:0,',$&%%& DN0,.(,&&$  K{6#C$70--,)+!  "  "8dXg@0()()$ !#     G /*$!!%$$%#!     a*2)'"!! , "#      #$r 8/-&!!%   J!/&!% ",#""    DvzI323'!#$'4'!)7,!   &/| 0%$!" *%)#,-/(#! !     3/)#!!# +)&G.8:,:6&-$2-!   b<# 2&"$##,%3#!/A#=0FgpdbOA- !Y_4 /%  &*'%3!+3%0`m~wob]XN6&  N4 /%!  90. 5*$=Mgtxsonk`ZUZI       W(H.2#! -/'>9W`e\knihd\`TA<    5-$ ##! &**&17HUUX]gfgha[]WYE5  M5+#!"'!&):D>ESZ^_hb]dc_^SF3!!#('!L0U50&!"!$'(.6.,.!B$'!^7*!#" :BAW\H9=BHHNQ=L`U3)/:@;50.5)3-.,//+,o' .7/( /<:6\VYF367BIWU5CNO40+7?41+.248+))-'+S+p&7-% ?0AQN``P>22:8?YQ1;EC6./6-1//+-7,**+%)"9/)ai8-% " 41L@EYTTC7/:<0?WN32CG5*.,)-.%(.,)*+&$&-&8-#""% 1669FQYI>6/-650Z"d 2tn')w- t8mk@ Euk  Iz N}  %S7 (Wj  -[% M+ 0 M!!y& (c)\]^_`_`_________`_______________^]L ,H, C .E3 I -EU"R *@%!Z) '0.4m:& 1I{qbO:.,4m;& ,Cռ{xsoi`SC2**4m;& '>ӻ~{wsokgb\WQH=3'"&2m;& %8aѹ~{vsokfa\VQMGB=82+#"1m;& !4Mη~zvrnjea[WQLGA=84/+(%  0l:& -C~zwsmje`[UPKF@<73/-(%"!.D[h!1m;& ':N_gmmie`ZVPLFA=842.+(%,@Ul%3n:&   /?KSWUQLHC?;76@Rh|68q;& $0:?EWh{S>s;& %pEu:&  !Ky:& "P};& 'U~;& -X:& !3Z;& "5\;& !5t`:&  2`p:& /L;& .E;& ,C;& )@:& (>Ɏ;& &:ؑ;& $8:& "6~;& !4i;& 2U;& /F:& .D;& *Aг;& (?õ~{z;& '=˿~|zxwuomnp;& %8ɼ~|zxvsqnljgda]\^c;& #6{;& "4w;& 1u;& /s;& /r:& .s;& .s;& .r;& /r;& /r;& /s;& /r;'/r>+> /rCX /r .r(/st.s# /s7/r .s% /r?/r! /r&/rH/r! .r'/sR/r" /r)/r^/r# /s+.rk/r$ /r0/sw/s$ /r7/r脅/r{{~& /rnlp>/ra^b  /rUQU% /rOIe(.rF_vgT>*/sXL|tj\K:'/rvPrycWL>0!/rOB7-# .r@3',h6'*=Uhu󬌍ݛ^C. $5IZemoopooppoopoooopopppoppppooppoooopoooopooooooppoopppqsv{ᒀᬁteQ<( +:FOTWWWWWWXWWWXWXXXWXXWWWWWXXXXWXWXXXWWWWXXWWXXXXXWWXXXX]agrommq局wsndUF4$ *07:<<;;<;<<;;;;;<<<<<<<;;;;;;<;<;<<<;;<<<<<<<;;<<<<<<;>BGNW[ZWVU[d淇ytng`XNB5(   $%'''''''''''''''&'''''&''''''''&'&'&''''''''&&'&&'''(-28?CC?=?FQ^hnnjbZQIA7.%  %+-,+),3>KTYWSKB:2*$  #+6=@?:2,%   %)+)%      posterazor-1.5.1/src/FlImageTextButton.cpp0000644000175000017500000000243011041177230020175 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlImageTextButton.h" #include FlImageTextButton::FlImageTextButton(int x, int y, int w, int h, const char* label) : Fl_Button(x, y, w, h, label) , m_labelImage(0) { } void FlImageTextButton::labelImage(Fl_Image *image) { m_labelImage = image; } void FlImageTextButton::draw() { Fl_Button::draw(); if (m_labelImage) m_labelImage->draw(x() + 6, y() + (h()-m_labelImage->h()) / 2); } posterazor-1.5.1/src/flagFrench.png0000644000175000017500000000015511041177230016673 0ustar simrunsimrunPNG  IHDR k:4IDATx^1 }cl FP?U$L?Pٞ"ȺT0<FFU.uIENDB`posterazor-1.5.1/src/TranslationConstants.h0000644000175000017500000001062411041177230020474 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef PosteRazorHelpConstants_h #define PosteRazorHelpConstants_h #define POSTERAZORHELPANCHORTOP "top" #define POSTERAZORHELPANCHORABOUT "about" #define POSTERAZORHELPANCHORMANUAL "manual" #define POSTERAZORHELPANCHORSETTINGS "settings" #define POSTERAZORHELPANCHORMANUALSTEP "manualstep" #define POSTERAZORHELPANCHORMANUALSTEP01 "manualstep01" #define POSTERAZORHELPANCHORMANUALSTEP02 "manualstep02" #define POSTERAZORHELPANCHORMANUALSTEP03 "manualstep03" #define POSTERAZORHELPANCHORMANUALSTEP04 "manualstep04" #define POSTERAZORHELPANCHORMANUALSTEP05 "manualstep05" #define POSTERAZORHELPANCHORINPUTFILEFORMATS "inputfileformats" #define POSTERAZORHELPANCHORABOUTPDFOUTPUT "aboutpdfoutput" #define POSTERAZORHELPANCHORWHYPDFOUTPUT "whypdfoutput" #define POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES "codefromthirdparties" #define POSTERAZORHELPANCHORLICENSE "license" #define POSTERAZORVERSION "1.5.1" #define POSTERAZORWEBSITEDOMAIN "http://posterazor.sourceforge.net/" #define POSTERAZORHELPLINKTOTOP "   ^" #define POSTERAZORHELPINDENTATION "
    " #define POSTERAZORHELPENDLINE "" #define POSTERAZORHELPSECTIONHEADER(ANCHOR, TITLE) "

" TITLE "" POSTERAZORHELPLINKTOTOP "

" POSTERAZORHELPENDLINE #define POSTERAZORCOPYRIGHT "Copyright (C) 2005-2008 by Alessandro Portale
" POSTERAZORHELPENDLINE POSTERAZORHELPENDLINE \ #define POSTERAZORTRANSLATIONCREDITSSTART "
" POSTERAZORHELPENDLINE #define POSTERAZORTRANSLATIONCREDITSEND "
" POSTERAZORHELPENDLINE #define POSTERAZORTRANSLATIONCREDITSFRENCH "
French translation:
   Martin Loyer (traduction@loyer.name).
" POSTERAZORHELPENDLINE #define POSTERAZORTRANSLATIONCREDITSPOLISH "
Polish translation:
   Grzegorz Wacikowski.
" POSTERAZORHELPENDLINE #define POSTERAZORTRANSLATIONCREDITSDUTCH "
Dutch/Belgian translation:
   Erik Wijkamp - Lochem (The Netherlands) (e_wijkamp@yahoo.com)
" POSTERAZORHELPENDLINE #define POSTERAZORTRANSLATIONCREDITSITALIAN "
Italian translation:
   Stefano Nosei (kluster@imente.org).
" POSTERAZORHELPENDLINE #define POSTERAZORTRANSLATIONCREDITSSPANISH "
Spanish translation:
   Cristobal from HispánicoWeb
" POSTERAZORHELPENDLINE #define POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE "
Brazilian Portuguese translation:
   Éderson Gomes dos Santos.
" POSTERAZORHELPENDLINE #define POSTERAZORLICENSE \ "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
 
" POSTERAZORHELPENDLINE \ "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 
" POSTERAZORHELPENDLINE \ "You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." POSTERAZORHELPENDLINE #endif posterazor-1.5.1/src/flagDutch.png0000644000175000017500000000016511041177230016536 0ustar simrunsimrunPNG  IHDR k: #include #ifdef WIN32 #include #else #include #endif #include #define MIN(a, b) ((a)<=(b)?(a):(b)) #define MAX(a, b) ((a)>(b)?(a):(b)) #define MINMAX(a, min, max) (MIN((max), MAX((a), (min)))) const char preferencesKey_PosterSizeMode[] = "PosterSizeMode"; const char preferencesKey_PosterDimension[] = "PosterDimension"; const char preferencesKey_PosterDimensionIsWidth[] = "PosterDimensionIsWidth"; const char preferencesKey_PosterHorizontalAlignment[] = "PosterHorizontalAlignment"; const char preferencesKey_PosterVerticalAlignment[] = "PosterVerticalAlignment"; const char preferencesKey_UseCustomPaperSize[] = "UseCustomPaperSize"; const char preferencesKey_PaperFormat[] = "paperFormat"; const char preferencesKey_PaperOrientation[] = "PaperOrientation"; const char preferencesKey_PaperBorderTop[] = "PaperBorderTop"; const char preferencesKey_PaperBorderRight[] = "PaperBorderRight"; const char preferencesKey_PaperBorderBottom[] = "PaperBorderBottom"; const char preferencesKey_PaperBorderLeft[] = "PaperBorderLeft"; const char preferencesKey_CustomPaperWidth[] = "CustomPaperWidth"; const char preferencesKey_CustomPaperHeight[] = "CustomPaperHeight"; const char preferencesKey_OverlappingWidth[] = "OverlappingWidth"; const char preferencesKey_OverlappingHeight[] = "OverlappingHeight"; const char preferencesKey_OverlappingPosition[] = "overlappingPosition"; const char preferencesKey_UnitOfLength[] = "unitOfLength"; const char preferencesKey_PosterOutputFormat[] = "PosterOutputFormat"; const char preferencesKey_LaunchPDFApplication[] = "launchPDFApplication"; class PosteRazorImplementation: public PosteRazor { private: PosteRazorImageIO* m_imageIO; PosteRazorEnums::ePosterSizeModes m_posterSizeMode; double m_posterDimension; bool m_posterDimensionIsWidth; PosteRazorEnums::eHorizontalAlignments m_posterHorizontalAlignment; PosteRazorEnums::eVerticalAlignments m_posterVerticalAlignment; bool m_useCustomPaperSize; PaperFormats::ePaperFormats m_paperFormat; PaperFormats::ePaperOrientations m_paperOrientation; double m_paperBorderTop; double m_paperBorderRight; double m_paperBorderBottom; double m_paperBorderLeft; double m_customPaperWidth; double m_customPaperHeight; double m_overlappingWidth; double m_overlappingHeight; PosteRazorEnums::eOverlappingPositions m_overlappingPosition; UnitsOfLength::eUnitsOfLength m_unitOfLength; ImageIOTypes::eImageFormats m_posterOutputFormat; bool m_launchPDFApplication; public: PosteRazorImplementation() : m_posterSizeMode(PosteRazorEnums::ePosterSizeModePages) , m_posterDimension(2.0) , m_posterDimensionIsWidth(true) , m_posterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignmentLeft) , m_posterVerticalAlignment(PosteRazorEnums::eVerticalAlignmentTop) , m_useCustomPaperSize(false) , m_paperFormat(PaperFormats::ePaperFormatA4) , m_paperOrientation(PaperFormats::ePaperOrientationPortrait) , m_paperBorderTop(1.5) , m_paperBorderRight(1.5) , m_paperBorderBottom(1.5) , m_paperBorderLeft(1.5) , m_customPaperWidth(20) , m_customPaperHeight(20) , m_overlappingWidth(1.0) , m_overlappingHeight(1.0) , m_overlappingPosition(PosteRazorEnums::eOverlappingPositionBottomRight) , m_unitOfLength(UnitsOfLength::eUnitOfLengthCentimeter) , m_posterOutputFormat(ImageIOTypes::eImageFormatPDF) , m_launchPDFApplication(true) { m_imageIO = PosteRazorImageIO::createPosteRazorImageIO(); } ~PosteRazorImplementation() { delete m_imageIO; } virtual bool readPersistentPreferences(PersistentPreferencesInterface *preferences) { bool returnValue = true; m_posterSizeMode = (PosteRazorEnums::ePosterSizeModes)preferences->getInteger(preferencesKey_PosterSizeMode, (int)m_posterSizeMode); m_posterDimension = preferences->getDouble(preferencesKey_PosterDimension, m_posterDimension); m_posterDimensionIsWidth = preferences->getBoolean(preferencesKey_PosterDimensionIsWidth, m_posterDimensionIsWidth); m_posterHorizontalAlignment = (PosteRazorEnums::eHorizontalAlignments)preferences->getInteger(preferencesKey_PosterHorizontalAlignment, (int)m_posterHorizontalAlignment); m_posterVerticalAlignment = (PosteRazorEnums::eVerticalAlignments)preferences->getInteger(preferencesKey_PosterVerticalAlignment, (int)m_posterVerticalAlignment); m_useCustomPaperSize = preferences->getBoolean(preferencesKey_UseCustomPaperSize, m_useCustomPaperSize); m_paperFormat = (PaperFormats::ePaperFormats)preferences->getInteger(preferencesKey_PaperFormat, (int)m_paperFormat); m_paperOrientation = (PaperFormats::ePaperOrientations)preferences->getInteger(preferencesKey_PaperOrientation, (int)m_paperOrientation); m_paperBorderTop = preferences->getDouble(preferencesKey_PaperBorderTop, m_paperBorderTop); m_paperBorderRight = preferences->getDouble(preferencesKey_PaperBorderRight, m_paperBorderRight); m_paperBorderBottom = preferences->getDouble(preferencesKey_PaperBorderBottom, m_paperBorderBottom); m_paperBorderLeft = preferences->getDouble(preferencesKey_PaperBorderLeft, m_paperBorderLeft); m_customPaperWidth = preferences->getDouble(preferencesKey_CustomPaperWidth, m_customPaperWidth); m_customPaperHeight = preferences->getDouble(preferencesKey_CustomPaperHeight, m_customPaperHeight); m_overlappingWidth = preferences->getDouble(preferencesKey_OverlappingWidth, m_overlappingWidth); m_overlappingHeight = preferences->getDouble(preferencesKey_OverlappingHeight, m_overlappingHeight); m_overlappingPosition = (PosteRazorEnums::eOverlappingPositions)preferences->getInteger(preferencesKey_OverlappingPosition, (int)m_overlappingPosition); m_unitOfLength = (UnitsOfLength::eUnitsOfLength)preferences->getInteger(preferencesKey_UnitOfLength, (int)m_unitOfLength); m_posterOutputFormat = (ImageIOTypes::eImageFormats)preferences->getInteger(preferencesKey_PosterOutputFormat, (int)m_posterOutputFormat); m_launchPDFApplication = preferences->getBoolean(preferencesKey_LaunchPDFApplication, m_launchPDFApplication); return returnValue; } virtual bool writePersistentPreferences(PersistentPreferencesInterface *preferences) const { bool returnValue = true; preferences->setInteger((int)m_posterSizeMode, preferencesKey_PosterSizeMode); preferences->setDouble(m_posterDimension, preferencesKey_PosterDimension); preferences->setBoolean(m_posterDimensionIsWidth, preferencesKey_PosterDimensionIsWidth); preferences->setInteger((int)m_posterHorizontalAlignment, preferencesKey_PosterHorizontalAlignment); preferences->setInteger((int)m_posterVerticalAlignment, preferencesKey_PosterVerticalAlignment); preferences->setBoolean(m_useCustomPaperSize, preferencesKey_UseCustomPaperSize); preferences->setInteger((int)m_paperFormat, preferencesKey_PaperFormat); preferences->setInteger((int)m_paperOrientation, preferencesKey_PaperOrientation); preferences->setDouble(m_paperBorderTop, preferencesKey_PaperBorderTop); preferences->setDouble(m_paperBorderRight, preferencesKey_PaperBorderRight); preferences->setDouble(m_paperBorderBottom, preferencesKey_PaperBorderBottom); preferences->setDouble(m_paperBorderLeft, preferencesKey_PaperBorderLeft); preferences->setDouble(m_customPaperWidth, preferencesKey_CustomPaperWidth); preferences->setDouble(m_customPaperHeight, preferencesKey_CustomPaperHeight); preferences->setDouble(m_overlappingWidth, preferencesKey_OverlappingWidth); preferences->setDouble(m_overlappingHeight, preferencesKey_OverlappingHeight); preferences->setInteger((int)m_overlappingPosition, preferencesKey_OverlappingPosition); preferences->setInteger((int)m_unitOfLength, preferencesKey_UnitOfLength); preferences->setInteger((int)m_posterOutputFormat, preferencesKey_PosterOutputFormat); preferences->setBoolean(m_launchPDFApplication, preferencesKey_LaunchPDFApplication); return returnValue; } PosteRazorImageIO *GetImageIO(void) { return m_imageIO; } double convertDistanceToCm(double distance) const { return UnitsOfLength::convertBetweenUnitsOfLength(distance, getUnitOfLength(), UnitsOfLength::eUnitOfLengthCentimeter); } double convertCmToDistance(double cm) const { return UnitsOfLength::convertBetweenUnitsOfLength(cm, UnitsOfLength::eUnitOfLengthCentimeter, getUnitOfLength()); } bool loadInputImage(const char *imageFileName, char *errorMessage, int errorMessageSize) { return m_imageIO->loadInputImage(imageFileName, errorMessage, errorMessageSize); } bool getIsImageLoaded(void) const { return m_imageIO->isImageLoaded(); } int getInputImageWidthPixels(void) const { return m_imageIO->getWidthPixels(); } int getInputImageHeightPixels(void) const { return m_imageIO->getHeightPixels(); } double getInputImageHorizontalDpi(void) const { return m_imageIO->getHorizontalDotsPerUnitOfLength(UnitsOfLength::eUnitOfLengthInch); } double getInputImageVerticalDpi(void) const { return m_imageIO->getVerticalDotsPerUnitOfLength(UnitsOfLength::eUnitOfLengthInch); } double getInputImageWidth(void) const { return m_imageIO->getWidth(m_unitOfLength); } double getInputImageHeight(void) const { return m_imageIO->getHeight(m_unitOfLength); } int getInputImageBitsPerPixel(void) const { return m_imageIO->getBitsPerPixel(); } ColorTypes::eColorTypes getInputImageColorType(void) const { return m_imageIO->getColorDataType(); } void setUnitOfLength(UnitsOfLength::eUnitsOfLength unit) { m_unitOfLength = unit; } UnitsOfLength::eUnitsOfLength getUnitOfLength(void) const { return m_unitOfLength; } const char* getUnitOfLengthName(void) const { return UnitsOfLength::getUnitOfLengthName(m_unitOfLength); } void setPaperFormat(PaperFormats::ePaperFormats format) { m_paperFormat = format; } void setPaperOrientation(PaperFormats::ePaperOrientations orientation) { m_paperOrientation = orientation; } void setPaperBorderTop(double border) { m_paperBorderTop = convertDistanceToCm(border); } void setPaperBorderRight(double border) { m_paperBorderRight = convertDistanceToCm(border); } void setPaperBorderBottom(double border) { m_paperBorderBottom = convertDistanceToCm(border); } void setPaperBorderLeft(double border) { m_paperBorderLeft = convertDistanceToCm(border); } PaperFormats::ePaperFormats getPaperFormat(void) const { return m_paperFormat; } PaperFormats::ePaperOrientations getPaperOrientation(void) const { return m_paperOrientation; } double getPaperBorderTop(void) const { return MINMAX(convertCmToDistance(m_paperBorderTop), 0, getMaximalHorizontalPaperBorder()); } double getPaperBorderRight(void) const { return MINMAX(convertCmToDistance(m_paperBorderRight), 0, getMaximalVerticalPaperBorder()); } double getPaperBorderBottom(void) const { return MINMAX(convertCmToDistance(m_paperBorderBottom), 0, getMaximalHorizontalPaperBorder()); } double getPaperBorderLeft(void) const { return MINMAX(convertCmToDistance(m_paperBorderLeft), 0, getMaximalVerticalPaperBorder()); } double getMaximalVerticalPaperBorder(void) const { return getPaperWidth() / 2.0 - convertCmToDistance(1.0); } double getMaximalHorizontalPaperBorder(void) const { return getPaperHeight() / 2.0 - convertCmToDistance(1.0); } void setCustomPaperWidth(double width) { m_customPaperWidth = convertDistanceToCm(width); } void setCustomPaperHeight(double height) { m_customPaperHeight = convertDistanceToCm(height); } double getCustomPaperWidth(void) const { return MINMAX(convertCmToDistance(m_customPaperWidth), getCustomMinimalPaperWidth(), getCustomMaximalPaperWidth()); } double getCustomPaperHeight(void) const { return MINMAX(convertCmToDistance(m_customPaperHeight), getCustomMinimalPaperHeight(), getCustomMaximalPaperHeight()); } double getCustomMinimalPaperWidth(void) const { return convertCmToDistance(4.0); } double getCustomMinimalPaperHeight(void) const { return convertCmToDistance(4.0); } double getCustomMaximalPaperWidth(void) const { return convertCmToDistance(500.0); // Maximum of PDF page } double getCustomMaximalPaperHeight(void) const { return convertCmToDistance(500.0); } void setUseCustomPaperSize(bool useIt) { m_useCustomPaperSize = useIt; } bool getUseCustomPaperSize(void) const { return m_useCustomPaperSize; } double getPaperWidth(void) const { return getUseCustomPaperSize()?getCustomPaperWidth():PaperFormats::getPaperWidth(getPaperFormat(), getPaperOrientation(), m_unitOfLength); } double getPaperHeight(void) const { return getUseCustomPaperSize()?getCustomPaperHeight():PaperFormats::getPaperHeight(getPaperFormat(), getPaperOrientation(), m_unitOfLength); } double getPrintablePaperAreaWidth(void) const { return getPaperWidth() - getPaperBorderLeft() - getPaperBorderRight(); } double getPrintablePaperAreaHeight(void) const { return getPaperHeight() - getPaperBorderTop() - getPaperBorderBottom(); } double convertBetweenAbsoluteAndPagesPosterDimension(double dimension, bool pagesToAbsolute, bool width) const { double posterDimension = dimension; const double printablePaperAreaWidth = getPrintablePaperAreaWidth(); const double printablePaperAreaHeight = getPrintablePaperAreaHeight(); const double printablePaperAreaDimension = convertDistanceToCm(width?printablePaperAreaWidth:printablePaperAreaHeight); const double overlappingDimension = convertDistanceToCm(width?getOverlappingWidth():getOverlappingHeight()); if (pagesToAbsolute) { double posterDimensionAbsolute = 0; if (posterDimension >= 1.0) { posterDimension -= 1.0; posterDimensionAbsolute += printablePaperAreaDimension; } else { posterDimensionAbsolute = posterDimension * printablePaperAreaDimension; posterDimension = 0; } if (posterDimension > 0) posterDimensionAbsolute += (posterDimension * (printablePaperAreaDimension - overlappingDimension)); posterDimension = posterDimensionAbsolute; } else { double posterDimensionPages = 0; if (posterDimension >= printablePaperAreaDimension) { posterDimension -= printablePaperAreaDimension; posterDimensionPages += 1.0; } else if (posterDimension < printablePaperAreaDimension) { posterDimensionPages = posterDimension / printablePaperAreaDimension; posterDimension = 0; } if (posterDimension > 0) posterDimensionPages += (posterDimension / (printablePaperAreaDimension - overlappingDimension)); posterDimension = posterDimensionPages; } return posterDimension; } // Since m_posterDimension holds only height or width of the poster, // here we calculate the other dimension considering the aspect ratio. double calculateOtherPosterDimension() const { double otherDimension = 0; if (getPosterSizeMode() != PosteRazorEnums::ePosterSizeModePercentual) { const double sourceReference = m_posterDimensionIsWidth?getInputImageWidth():getInputImageHeight(); const double targetReference = m_posterDimensionIsWidth?getInputImageHeight():getInputImageWidth(); const double aspectRatio = sourceReference/targetReference; if (getPosterSizeMode() != PosteRazorEnums::ePosterSizeModePages) { otherDimension = m_posterDimension / aspectRatio; } else { const double sourceAbsolute = convertBetweenAbsoluteAndPagesPosterDimension(m_posterDimension, true, m_posterDimensionIsWidth); const double targetAbsolute = sourceAbsolute/aspectRatio; otherDimension = convertBetweenAbsoluteAndPagesPosterDimension(targetAbsolute, false, !m_posterDimensionIsWidth); } } else otherDimension = m_posterDimension; return otherDimension; } void setPosterDimension(PosteRazorEnums::ePosterSizeModes mode, double dimension, bool dimensionIsWidth) { setPosterSizeMode(mode); if (getPosterSizeMode() == PosteRazorEnums::ePosterSizeModeAbsolute) dimension = convertDistanceToCm(dimension); m_posterDimension = dimension; m_posterDimensionIsWidth = dimensionIsWidth; } void setOverlappingWidth(double width) { m_overlappingWidth = convertDistanceToCm(width); } void setOverlappingHeight(double height) { m_overlappingHeight = convertDistanceToCm(height); } double getOverlappingWidth(void) const { return MINMAX(convertCmToDistance(m_overlappingWidth), 0, getMaximalOverLappingWidth()); } double getOverlappingHeight(void) const { return MINMAX(convertCmToDistance(m_overlappingHeight), 0, getMaximalOverLappingHeight()); } double getMaximalOverLappingWidth(void) const { return getPaperWidth() - getPaperBorderLeft() - getPaperBorderRight() - convertCmToDistance(1.0); } double getMaximalOverLappingHeight(void) const { return getPaperHeight() - getPaperBorderTop() - getPaperBorderBottom() - convertCmToDistance(1.0); } void setOverlappingPosition(PosteRazorEnums::eOverlappingPositions position) { m_overlappingPosition = position; } PosteRazorEnums::eOverlappingPositions getOverlappingPosition(void) const { return m_overlappingPosition; } void setPosterWidth(PosteRazorEnums::ePosterSizeModes mode, double width) { setPosterDimension(mode, width, true); } void setPosterHeight(PosteRazorEnums::ePosterSizeModes mode, double height) { setPosterDimension(mode, height, false); } void setPosterSizeMode(PosteRazorEnums::ePosterSizeModes mode) { m_posterSizeMode = mode; } double getPosterDimension(PosteRazorEnums::ePosterSizeModes mode, bool width) const { double posterDimension = (width==m_posterDimensionIsWidth)?m_posterDimension:calculateOtherPosterDimension(); posterDimension = MAX ( (mode == PosteRazorEnums::ePosterSizeModeAbsolute)?0.001 :(mode == PosteRazorEnums::ePosterSizeModePages)?0.001 :0.001 , posterDimension ); // anything to convert? if (getPosterSizeMode() != mode){ // These are needed for conversion from and to ePosterSizeModePercentual const double inputImageDimension = convertDistanceToCm(width?getInputImageWidth():getInputImageHeight()); // First convert to absolute size mode (cm) if (getPosterSizeMode() == PosteRazorEnums::ePosterSizeModePages) { posterDimension = convertBetweenAbsoluteAndPagesPosterDimension(posterDimension, true, width); } else if (getPosterSizeMode() == PosteRazorEnums::ePosterSizeModePercentual) { posterDimension *= inputImageDimension; posterDimension /= 100.0; } // Then convert to the wanted size mode if (mode == PosteRazorEnums::ePosterSizeModePages) { posterDimension = convertBetweenAbsoluteAndPagesPosterDimension(posterDimension, false, width); } else if (mode == PosteRazorEnums::ePosterSizeModePercentual) { posterDimension /= inputImageDimension; posterDimension *= 100.0; } } if (mode == PosteRazorEnums::ePosterSizeModeAbsolute) posterDimension = convertCmToDistance(posterDimension); return posterDimension; } double getPosterWidth(PosteRazorEnums::ePosterSizeModes mode) const { return getPosterDimension(mode, true); } double getPosterHeight(PosteRazorEnums::ePosterSizeModes mode) const { return getPosterDimension(mode, false); } PosteRazorEnums::ePosterSizeModes getPosterSizeMode(void) const { return m_posterSizeMode; } void setPosterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignments alignment) { m_posterHorizontalAlignment = alignment; } void setPosterVerticalAlignment(PosteRazorEnums::eVerticalAlignments alignment) { m_posterVerticalAlignment = alignment; } PosteRazorEnums::eHorizontalAlignments getPosterHorizontalAlignment(void) const { return m_posterHorizontalAlignment; } PosteRazorEnums::eVerticalAlignments getPosterVerticalAlignment(void) const { return m_posterVerticalAlignment; } void getPreviewSize(double imageWidth, double imageHeight, int boxWidth, int boxHeight, int &previewWidth, int &previewHeight, bool enlargeToFit) const { const double aspectRatio = imageWidth / imageHeight; if (enlargeToFit) { const double widthFactor = imageWidth/(double)boxWidth; const double heightFactor = imageHeight/(double)boxHeight; const double factor = widthFactor boxHeight) { previewWidth = (int)((double)boxHeight * aspectRatio); previewHeight = boxHeight; } } void getInputImagePreviewSize(int boxWidth, int boxHeight, int &previewWidth, int &previewHeight) const { getPreviewSize(getInputImageWidthPixels(), getInputImageHeightPixels(), boxWidth, boxHeight, previewWidth, previewHeight, false); } virtual void getPaperPreviewSize(int boxWidth, int boxHeight, int &previewWidth, int &previewHeight) const { getPreviewSize(getPaperWidth(), getPaperHeight(), boxWidth, boxHeight, previewWidth, previewHeight, true); } void getImage(PaintCanvasInterface *paintCanvas, double maxWidth, double maxHeight) const { int imageWidth; int imageHeight; getInputImagePreviewSize((int)maxWidth, (int)maxHeight, imageWidth, imageHeight); const size_t rgbDataBytesCount = imageWidth * imageHeight * 3; unsigned char *rgbData = new unsigned char[rgbDataBytesCount]; if (!m_imageIO->getImageAsRGB(rgbData, imageWidth, imageHeight)) // If preview fails because of low memory... memset(rgbData, 0x66, rgbDataBytesCount); paintCanvas->setImage(rgbData, imageWidth, imageHeight); delete[] rgbData; } void paintImageOnCanvas(PaintCanvasInterface *paintCanvas) const { if (getIsImageLoaded()) { double canvasWidth = 0, canvasHeight = 0; paintCanvas->getSize(canvasWidth, canvasHeight); int boxWidth = 0, boxHeight = 0; double x_offset, y_offset; getPreviewSize(getInputImageWidthPixels(), getInputImageHeightPixels(), (int)canvasWidth, (int)canvasHeight, boxWidth, boxHeight, false); x_offset = (canvasWidth - boxWidth) / 2; y_offset = (canvasHeight - boxHeight) / 2; // If the image is not downscaled, make sure that the coordinates are integers in order // to prevent unneeded blurring (especially in OpenGL) if (canvasWidth >= getInputImageWidthPixels() && canvasHeight >= getInputImageHeightPixels()) { x_offset = floor(x_offset); y_offset = floor(y_offset); } paintCanvas->drawImage(0 + x_offset, 0 + y_offset, boxWidth, boxHeight); } } void paintPaperOnCanvas(PaintCanvasInterface *paintCanvas, bool paintOverlapping) const { double canvasWidth = 0, canvasHeight = 0; paintCanvas->getSize(canvasWidth, canvasHeight); int boxWidth = 0, boxHeight = 0; const double paperWidth = getPaperWidth(); const double paperHeight = getPaperHeight(); getPreviewSize(paperWidth, paperHeight, (int)canvasWidth, (int)canvasHeight, boxWidth, boxHeight, true); const double x_offset = (canvasWidth - (double)boxWidth) / 2.0; const double y_offset = (canvasHeight - (double)boxHeight) / 2.0; const double UnitOfLengthToPixelfactor = (double)boxWidth/paperWidth; const double borderTop = getPaperBorderTop() * UnitOfLengthToPixelfactor; const double borderRight = getPaperBorderRight() * UnitOfLengthToPixelfactor; const double borderBottom = getPaperBorderBottom() * UnitOfLengthToPixelfactor; const double borderLeft = getPaperBorderLeft() * UnitOfLengthToPixelfactor; const double printableAreaWidth = boxWidth - borderLeft - borderRight; const double printableAreaHeight = boxHeight - borderTop - borderBottom; paintCanvas->drawFilledRect(0 + x_offset, 0 + y_offset, boxWidth, boxHeight, 128, 128, 128, 255); paintCanvas->drawFilledRect(0 + borderLeft + x_offset, 0 + borderTop + y_offset, printableAreaWidth, printableAreaHeight, 230, 230, 230, 255); if (paintOverlapping) { const double overlappingWidth = getOverlappingWidth() * UnitOfLengthToPixelfactor; const double overlappingHeight = getOverlappingHeight() * UnitOfLengthToPixelfactor; const PosteRazorEnums::eOverlappingPositions overlappingPosition = getOverlappingPosition(); const double overlappingTop = (overlappingPosition == PosteRazorEnums::eOverlappingPositionTopLeft || overlappingPosition == PosteRazorEnums::eOverlappingPositionTopRight)? borderTop :boxHeight - borderBottom - overlappingHeight; const double overlappingLeft = (overlappingPosition == PosteRazorEnums::eOverlappingPositionTopLeft || overlappingPosition == PosteRazorEnums::eOverlappingPositionBottomLeft)? borderLeft :boxWidth - borderRight - overlappingWidth; paintCanvas->drawFilledRect(borderLeft + x_offset, overlappingTop + y_offset, printableAreaWidth, overlappingHeight, 255, 128, 128, 255); paintCanvas->drawFilledRect(overlappingLeft + x_offset, borderTop + y_offset, overlappingWidth, printableAreaHeight, 255, 128, 128, 255); } } void paintPosterOnCanvas(PaintCanvasInterface *paintCanvas) const { double canvasWidth = 0, canvasHeight = 0; paintCanvas->getSize(canvasWidth, canvasHeight); int boxWidth = 0, boxHeight = 0; double pagePrintableAreaWidth = getPrintablePaperAreaWidth(); double pagePrintableAreaHeight = getPrintablePaperAreaHeight(); const int pagesHorizontal = (int)ceil(getPosterWidth(PosteRazorEnums::ePosterSizeModePages)); const int pagesVertical = (int)ceil(getPosterHeight(PosteRazorEnums::ePosterSizeModePages)); const double posterWidth = pagesHorizontal*pagePrintableAreaWidth - (pagesHorizontal-1)*getOverlappingWidth() + getPaperBorderLeft() + getPaperBorderRight(); const double posterHeight = pagesVertical*pagePrintableAreaHeight - (pagesVertical-1)*getOverlappingHeight() + getPaperBorderTop() + getPaperBorderBottom(); getPreviewSize(posterWidth, posterHeight, (int)canvasWidth, (int)canvasHeight, boxWidth, boxHeight, true); const double x_offset = (canvasWidth - boxWidth) / 2; const double y_offset = (canvasHeight - boxHeight) / 2; const double UnitOfLengthToPixelfactor = (double)boxWidth/posterWidth; const double borderTop = getPaperBorderTop() * UnitOfLengthToPixelfactor; const double borderRight = getPaperBorderRight() * UnitOfLengthToPixelfactor; const double borderBottom = getPaperBorderBottom() * UnitOfLengthToPixelfactor; const double borderLeft = getPaperBorderLeft() * UnitOfLengthToPixelfactor; const double posterPrintableAreaWidth = boxWidth - borderLeft - borderRight; const double posterPrintableAreaHeight = boxHeight - borderTop - borderBottom; paintCanvas->drawFilledRect(x_offset, y_offset, boxWidth, boxHeight, 128, 128, 128, 255); paintCanvas->drawFilledRect(borderLeft + x_offset, borderTop + y_offset, posterPrintableAreaWidth, posterPrintableAreaHeight, 230, 230, 230, 255); const double imageWidth = getPosterWidth(PosteRazorEnums::ePosterSizeModeAbsolute) * UnitOfLengthToPixelfactor; const double imageHeight = getPosterHeight(PosteRazorEnums::ePosterSizeModeAbsolute) * UnitOfLengthToPixelfactor; const PosteRazorEnums::eVerticalAlignments verticalAlignment = getPosterVerticalAlignment(); const PosteRazorEnums::eHorizontalAlignments horizontalAlignment = getPosterHorizontalAlignment(); paintCanvas->drawImage( ( horizontalAlignment == PosteRazorEnums::eHorizontalAlignmentLeft?borderLeft :horizontalAlignment == PosteRazorEnums::eHorizontalAlignmentCenter? MINMAX(((double)boxWidth - imageWidth) / 2, borderLeft, borderLeft + posterPrintableAreaWidth - imageWidth) :(borderLeft + posterPrintableAreaWidth - imageWidth) ) + x_offset, ( verticalAlignment == PosteRazorEnums::eVerticalAlignmentTop?borderTop :verticalAlignment == PosteRazorEnums::eVerticalAlignmentMiddle? MINMAX(((double)boxHeight - imageHeight) / 2, borderTop, borderTop + posterPrintableAreaHeight - imageHeight) :(borderTop + posterPrintableAreaHeight - imageHeight) ) + y_offset, imageWidth, imageHeight ); const double overlappingHeight = getOverlappingHeight() * UnitOfLengthToPixelfactor; const double overlappingWidth = getOverlappingWidth() * UnitOfLengthToPixelfactor; pagePrintableAreaWidth *= UnitOfLengthToPixelfactor; pagePrintableAreaHeight *= UnitOfLengthToPixelfactor; double overlappingRectangleYPosition = borderTop; for (int pagesRow = 0; pagesRow < pagesVertical - 1; pagesRow++) { overlappingRectangleYPosition += pagePrintableAreaHeight - overlappingHeight; paintCanvas->drawFilledRect(x_offset, overlappingRectangleYPosition + y_offset, boxWidth, overlappingHeight, 255, 128, 128, 128); } double overlappingRectangleXPosition = borderLeft; for (int pagesColumn = 0; pagesColumn < pagesHorizontal - 1; pagesColumn++) { overlappingRectangleXPosition += pagePrintableAreaWidth - overlappingWidth; paintCanvas->drawFilledRect(overlappingRectangleXPosition + x_offset, y_offset, overlappingWidth, boxHeight, 255, 128, 128, 128); } } void paintPosterPageOnCanvas(PaintCanvasInterface *paintCanvas, int page) const { const int columsCount = (int)(ceil(getPosterWidth(PosteRazorEnums::ePosterSizeModePages))); const int rowsCount = (int)(ceil(getPosterHeight(PosteRazorEnums::ePosterSizeModePages))); const int column = page % columsCount; const int row = ((int)(floor((double)page / (double)columsCount))); const double posterImageWidthCm = convertDistanceToCm(getPosterWidth(PosteRazorEnums::ePosterSizeModeAbsolute)); const double posterImageHeightCm = convertDistanceToCm(getPosterHeight(PosteRazorEnums::ePosterSizeModeAbsolute)); const double printablePaperAreaWidthCm = convertDistanceToCm(getPrintablePaperAreaWidth()); const double printablePaperAreaHeightCm = convertDistanceToCm(getPrintablePaperAreaHeight()); const double overlappingWidthCm = convertDistanceToCm(getOverlappingWidth()); const double overlappingHeightCm = convertDistanceToCm(getOverlappingHeight()); const double printablePosterAreaWidthCm = columsCount * printablePaperAreaWidthCm - (columsCount - 1) * overlappingWidthCm; const double printablePosterAreaHeightCm = rowsCount * printablePaperAreaHeightCm - (rowsCount - 1) * overlappingHeightCm; const double borderTopCm = convertDistanceToCm(getPaperBorderTop()); const double borderRightCm = convertDistanceToCm(getPaperBorderRight()); const double borderBottomCm = convertDistanceToCm(getPaperBorderBottom()); const double borderLeftCm = convertDistanceToCm(getPaperBorderLeft()); const double posterTotalWidthCm = printablePosterAreaWidthCm + borderLeftCm + borderRightCm; const double posterTotalHeightCm = printablePosterAreaHeightCm + borderTopCm + borderBottomCm; double imageOffsetFromLeftPosterBorderCm = ( getPosterHorizontalAlignment() == PosteRazorEnums::eHorizontalAlignmentRight?posterTotalWidthCm - posterImageWidthCm - borderLeftCm :getPosterHorizontalAlignment() == PosteRazorEnums::eHorizontalAlignmentCenter?(posterTotalWidthCm - posterImageWidthCm)/2 - borderLeftCm :-borderLeftCm ); imageOffsetFromLeftPosterBorderCm = MINMAX(imageOffsetFromLeftPosterBorderCm, 0.0, posterTotalWidthCm - posterImageWidthCm - borderLeftCm - borderRightCm); double imageOffsetFromTopPosterBorderCm = ( getPosterVerticalAlignment() == PosteRazorEnums::eVerticalAlignmentBottom?posterTotalHeightCm - posterImageHeightCm - borderTopCm :getPosterVerticalAlignment() == PosteRazorEnums::eVerticalAlignmentMiddle?(posterTotalHeightCm - posterImageHeightCm)/2 - borderTopCm :-borderTopCm ); imageOffsetFromTopPosterBorderCm = MINMAX(imageOffsetFromTopPosterBorderCm, 0.0, posterTotalHeightCm - posterImageHeightCm - borderTopCm - borderBottomCm); const double pageOffsetToImageFromLeftCm = column * (printablePaperAreaWidthCm - overlappingWidthCm) - imageOffsetFromLeftPosterBorderCm; const double pageOffsetToImageFromTopCm = row * (printablePaperAreaHeightCm - overlappingHeightCm) - imageOffsetFromTopPosterBorderCm; paintCanvas->drawImage(-pageOffsetToImageFromLeftCm, -pageOffsetToImageFromTopCm, posterImageWidthCm, posterImageHeightCm); } void paintOnCanvas(PaintCanvasInterface *paintCanvas, void* options = 0) const { const char* const state = (const char*)options; if (strcmp(state, "image") == 0) { paintImageOnCanvas(paintCanvas); } else if (strcmp(state, "paper") == 0 || strcmp(state, "overlapping") == 0) { paintPaperOnCanvas(paintCanvas, strcmp(state, "overlapping") == 0); } else if (strcmp(state, "poster") == 0) { paintPosterOnCanvas(paintCanvas); } else if (strncmp(state, "posterpage", strlen("posterpage")) == 0) { int page; sscanf(state, "posterpage %d", &page); paintPosterPageOnCanvas(paintCanvas, page); } } void setPosterOutputFormat(ImageIOTypes::eImageFormats format) { m_posterOutputFormat = format; } ImageIOTypes::eImageFormats getPosterOutputFormat(void) const { return m_posterOutputFormat; } int savePoster(const char *fileName) const { int err = 0; const int pagesCount = (int)(ceil(getPosterWidth(PosteRazorEnums::ePosterSizeModePages))) * (int)(ceil(getPosterHeight(PosteRazorEnums::ePosterSizeModePages))); err = m_imageIO->savePoster(fileName, getPosterOutputFormat(), this, pagesCount, convertDistanceToCm(getPrintablePaperAreaWidth()), convertDistanceToCm(getPrintablePaperAreaHeight())); if (!err && getLaunchPDFApplication()) { #if defined(WIN32) ShellExecute(HWND_DESKTOP, "open", fileName, NULL, NULL, SW_SHOW); #elif defined(__APPLE__) char commandStr[2048]; sprintf(commandStr, "open \"%s\"", fileName); system(commandStr); #endif } return err; } virtual void setLaunchPDFApplication(bool launch) {m_launchPDFApplication = launch;} virtual bool getLaunchPDFApplication(void) const {return m_launchPDFApplication;} }; PosteRazor* PosteRazor::createPosteRazor() { return (PosteRazor*)new PosteRazorImplementation(); } posterazor-1.5.1/src/FlDrawPaintCanvas.h0000644000175000017500000000401611041177230017606 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLDRAWPAINTCANVAS_H #define FLDRAWPAINTCANVAS_H #include #include "PaintCanvasBase.h" class Fl_RGB_Image; class Fl_Image; class FlDrawPaintCanvas: public Fl_Box, public PaintCanvasBase { private: unsigned char *m_imageRGBData; Fl_RGB_Image *m_image; Fl_Image *m_scaledImage; public: FlDrawPaintCanvas(int x, int y, int width, int height); ~FlDrawPaintCanvas(); virtual void draw(); virtual void drawFilledRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); virtual void drawRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); virtual void drawLine(double x1, double y1, double x2, double y2, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha); virtual void getSize(double &width, double &height) const; virtual void setImage(const unsigned char* rgbData, double width, double height); virtual void disposeImage(void); virtual void drawImage(double x, double y, double width, double height); }; #endif // FLDRAWPAINTCANVAS_H posterazor-1.5.1/src/TranslationSpanish.h0000644000175000017500000006076111041177230020134 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ Spanish translation by Hispanico Web http://hispanicoweb.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationSpanish_h #define TranslationSpanish_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define SPANISH_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN class TranslationSpanish: public TranslationInterface { public: const char* languageName(void) const {return "Espaol";} const char* absoluteSize(void) const {return "Tamao total:";} const char* allImageFormats(void) const {return "Todos los formatos de imagen";} const char* back(void) const {return "Atrs";} const char* borders(void) const {return "Mrgenes";} const char* bottom(void) const {return "Inferior";} const char* bottomLeft(void) const {return "Inferior izquierdo";} const char* bottomRight(void) const {return "Inferior derecho";} const char* cancel(void) const {return "Cancelar";} const char* colorType(void) const {return "Tipo de color:";} const char* custom(void) const {return "Personalizado";} const char* fileCouldNotBeLoaded(void) const {return "No se pudo cargar el archivo \"%s\".";} const char* fileCouldNotBeSaved(void) const {return "No se pudo guardar el archivo \"%s\".";} const char* format(void) const {return "Formato:";} const char* grayscale(void) const {return "Escala de grises";} const char* height(void) const {return "Altura:";} const char* imageAlignment(void) const {return "Alineacin de imagen";} const char* imageInformations(void) const {return "Informaciones de imagen";} const char* imageSize(void) const {return "Tamao de imagen";} const char* inputImage(void) const {return "Imagen de entrada";} const char* landscape(void) const {return "Horizontal";} const char* language(void) const {return "Idioma";} const char* languageExplanation(void) const {return "Escoja su idioma";} const char* launchPDFApplication(void) const {return "Ejecutar la aplicacin PDF tras guardar el poster";} const char* left(void) const {return "Izquierdo";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "Monocromo";} const char* next(void) const {return "Siguiente";} const char* orientation(void) const {return "Orientacin:";} const char* overlappingPosition(void) const {return "Posicin de superposicin";} const char* overlappingSize(void) const {return "Tamao de superposicin";} const char* overwriteFile(void) const {return "El archivo '%s' ya existe.\nDesea sobrescribirlo?";} const char* pages(void) const {return "pginas";} const char* paperFormat(void) const {return "Formato de papel";} const char* palette(void) const {return "Paleta";} const char* portrait(void) const {return "Vertical";} const char* posteRazorHelp(void) const {return "Ayuda de PosteRazor";} const char* posteRazorSettings(void) const {return #ifdef __APPLE__ // This seems to be the only problematic string on OSX. It is used for a window title. "Configuraci\x97n de PosteRazor" #else "Configuracin de PosteRazor" #endif ;} const char* posteRazorWebSiteURL(void) const {return SPANISH_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "Sitio web de PosteRazor";} const char* previewWithOpenGL(void) const {return "Previsualizar con OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL posibilita una previsualizacin fcil en los sistemas modernos. En sistemas antiguos puede ralentizar la previsualizacin.";} const char* resolution(void) const {return "Resolucin:";} const char* right(void) const {return "Derecho";} const char* saveThePoster(void) const {return "Guardar el pster";} const char* saveThePosterAs(void) const {return "Guardar el pster como";} const char* settings(void) const {return "Configuraciones...";} const char* Size(void) const {return "Tamao:";} const char* sizeInPages(void) const {return "Tamao en pginas:";} const char* sizeInPercent(void) const {return "Tamao en porcentaje:";} const char* sizeInPixels(void) const {return "Tamao (en px.):";} const char* sizeInUnitOfLength(void) const {return "Tamao (en %s):";} const char* standard(void) const {return "Estndar";} const char* stepXOfY(void) const {return "Paso %d de %d";} const char* top(void) const {return "Superior";} const char* topLeft(void) const {return "Superior izquierdo";} const char* topRight(void) const {return "Superior derecho";} const char* unitOfLength(void) const {return "Unidad de longitud";} const char* unitOfLengthExplanation(void) const {return "Escoja la unidad con la que desea trabajar";} const char* width(void) const {return "Anchura:";} #define SPANISH_POSTERAZORHELSTEP "Paso" #define SPANISH_POSTERAZORHELPABOUT "Acerca de PosteRazor" #define SPANISH_POSTERAZORHELPMANUAL "Manual" #define SPANISH_POSTERAZORHELPSETTINGS "Configuraciones" #define SPANISH_POSTERAZORHELPSTEPTITLE01 "Cargar una imagen de entrada" #define SPANISH_POSTERAZORHELPSTEPTITLE02 "Definir el formato del papel de impresora" #define SPANISH_POSTERAZORHELPSTEPTITLENOHTML03 "Definir la superposicin del mosaico de imagen" #define SPANISH_POSTERAZORHELPSTEPTITLE03 "Definir la superposición del mosaico de imagen" #define SPANISH_POSTERAZORHELPSTEPTITLENOHTML04 "Definir el tamao final del pster" #define SPANISH_POSTERAZORHELPSTEPTITLE04 "Definir el tamaño final del póster" #define SPANISH_POSTERAZORHELPSTEPTITLENOHTML05 "Guardar el pster" #define SPANISH_POSTERAZORHELPSTEPTITLE05 "Guardar el póster" #define SPANISH_POSTERAZORHELPINPUTFILEFORMATS "Archivos soportados para imagen de entrada" #define SPANISH_POSTERAZORHELPWHYPDFOUTPUT "¿Por qué un PDF de salida?" #define SPANISH_POSTERAZORHELPCODEFROMTHIRDPARTIES "Código de terceros" #define SPANISH_POSTERAZORHELPLICENSE "Licencia" const char* stepTitle01(void) const {return SPANISH_POSTERAZORHELPSTEPTITLE01;} const char* stepTitle02(void) const {return SPANISH_POSTERAZORHELPSTEPTITLE02;} const char* stepTitle03(void) const {return SPANISH_POSTERAZORHELPSTEPTITLENOHTML03;} const char* stepTitle04(void) const {return SPANISH_POSTERAZORHELPSTEPTITLENOHTML04;} const char* stepTitle05(void) const {return SPANISH_POSTERAZORHELPSTEPTITLENOHTML05;} const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

Ayuda de PosteRazor "POSTERAZORVERSION"

" POSTERAZORHELPENDLINE \ "

Contenidos

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, SPANISH_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "PosteRazor corta una imagen ráster en partes que puedan ser impresas con una impresora y que se puedan unir para formar un póster. Se puede utilizar como imagen de entrada ficheros ráster de varios formatos de archivo de imagen. En lugar de imprimir directamente el póster, PosteRazor produce un archivo PDF de varias páginas que contiene el mosaico del póster.
" POSTERAZORHELPENDLINE \ "Este es un programa de código abierto que depende de otros proyectos de código abierto. " POSTERAZORHELPENDLINE \ "PosteRazor está alojado en posterazor.sourceforge.net." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, SPANISH_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "PosteRazor tiene una interfáz de usuario organizada en un estilo de \"Asistente\". Todos los ajustes para la creación del póster pueden ser realizados en 5 Pasos. Los botones Atrás y Siguiente sirven para navegar a través de estos pasos.
" POSTERAZORHELPENDLINE \ "El botón ? abre una ventana de ayuda con una explicación del paso actual.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Todas las entradas y elecciones son recordadas hasta el siguiente uso de PosteRazor." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, SPANISH_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "Al pulsar el botón Configuraciones... de la parte inferior izquierda del diálogo principal se abre el diálogo de opciones de PosteRazor." POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Unidad de longitud: selecciona la unidad de longitud con la que trabajar. Cuando se cambia de unidad todos los valores predefinidos, y los que usted ya ha definido, son transformados a la nueva unidad.
  • " POSTERAZORHELPENDLINE \ "
  • Idioma: selecciona su idioma. PosteRazor no necesita ser reiniciado cuando se cambia el idioma.
  • " POSTERAZORHELPENDLINE \ "
  • Previsualizar con OpenGL: selecciona si PosteRazor debe usar OpenGL para la previsualización de la imagen. Normalmente, en los sistemas modernos OpenGL debería ser más rápido y dar una previsualización más precisa que en la forma no-OpenGL. Si el programa parece ralentizarse y no responde, verifique si funciona mejor sin el OpenGL.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, SPANISH_POSTERAZORHELSTEP " 1: " SPANISH_POSTERAZORHELPSTEPTITLE01) \ POSTERAZORHELPINDENTATION "Cargue una imagen haciendo clic sobre el botón del icono de Abrir y seleccione un archivo de imagen, o arrastre y suelte un archivo de imagen dentro de PosteRazor. La función arrastrar-y-soltar también opera en los demás pasos.
" POSTERAZORHELPENDLINE \ "Se pueden cargar muchos formatos de archivo y tipos de imagen. Después de cargar la imagen se presentan las informaciones más relevantes en los campos de Informaciones de imagen." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, SPANISH_POSTERAZORHELSTEP " 2: " SPANISH_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Defina el tamaño de la hoja de papel que usa su impresora. Puede seleccionar una hoja de papel de tamaño estándar desde el seleccionador Formato, así como también la Orientación de la hoja de papel. Alternativemente, puede definir un tamaño personalizado de papel en la pestaña Personalizado. (Por favor escríbame un email si echa de menos en el seleccionador su tamaño de papel estándar). " POSTERAZORHELPENDLINE \ "Los márgenes del papel son definidos en los campos Márgenes. Aún si su impresora no necesita márgenes de papel, podría ser necesario algún margen para pegar conjuntamente las últimas piezas del póster." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, SPANISH_POSTERAZORHELSTEP " 3: " SPANISH_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "La superposición del mosaico es necesaria para tener alguna tolerancia para cortar totalmente los bordes innecesarios de un lado. Además, como en los márgenes del paso anterior, se da más área para pegar conjuntamente las piezas finales del póster. " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "La Posición de superposición define los márgenes destinados a superponerse con las piezas de alrededor. Los márgenes de los lados opuestos son para ser cortados (excepto en las piezas más exteriores)." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, SPANISH_POSTERAZORHELSTEP " 4: " SPANISH_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Define el tamaño final del póster en uno de los siguientes tres modos que pueden ser seleccionados con los correspondientes botones:
" POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Tamaño total de la imagen: usted desea tener un tamaño determinado de póster.
  • " POSTERAZORHELPENDLINE \ "
  • Tamaño en páginas: usted quiere usar hojas de papel enteras y especificar cuántas de ellas desea usar.
  • " POSTERAZORHELPENDLINE \ "
  • Tamaño de imagen en porcentaje: su imagen de entrada tiene un cierto tamaño que es definido por el número de píxeles y dpi (puntos por pulgada) y usted quiere aumentar la imagen por un cierto factor.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "La proporción dimensional de anchura y altura es siempre 1:1 y es automáticamente calculada de nuevo. En el área de previsualización se pueden ver las áreas de superposición en rectángulos de color rojo claro. " POSTERAZORHELPENDLINE \ "La Alineación de imagen establece la alineación de la imagen en el total del papel del póster. Esto es útil si desea conservar el papel no usado." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, SPANISH_POSTERAZORHELSTEP " 5: " SPANISH_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Guarde el póster pulsando el botón Guardar y especificando un nombre para el archivo resultante. Marque o desmaque la opción Ejecutar la aplicación PDF tras guardar el poster para, una vez guardado el archivo PDF resultante, iniciar automáticamente la aplicación predeterminada en su sistema para el manejo de archivos PDF ." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, SPANISH_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "La mayoría de los formatos de imagen ráster soportados por FreeImage también son soportados por PosteRazor:
" POSTERAZORHELPENDLINE \ "BMP, archivos DDS, Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor distingue y maneja imágenes monocromas, de escala de grises, de paleta de 4-bit, de paleta de 8-bit, de 24 bit RGB, y CMYK (sólo desde TIF). Las imágenes RGB con un canal alfa son compuestas automáticamente encima de un fondo blanco." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, SPANISH_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "¿Por qué un PDF resultante y no la impresión directa? Lo primero de todo es que el desarrollador de este programa no conoce (aún) como \"enviar imágenes a la impresora\", en los diferentes sistemas operativos, que es a lo que PosteRazor aspira. También el PDF tiene sentido si se hace un póster en casa con todo el tiempo necesario y al día siguiente se imprime en la impresora laser a color de la oficina (después de que todo el mundo se haya ido a casa). " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "¿Por qué un PDF y no otros formatos ráster? El PDF da la posibilidad de implantar la imagen completa y cortarla virtualmente, y no sólo en píxeles, sino también con fracciones de píxeles. Además, parece más factible imprimir un archivo PDF de varias páginas en vez de múltiples archivos de imagen." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, SPANISH_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "
    " POSTERAZORHELPENDLINE \ "
  • FLTK es usado por la interfáz de usuario. Es pequeño (por tamaño), rápido, fácil y divertido de aprender y muy portable. www.fltk.org
  • " POSTERAZORHELPENDLINE \ "
  • FreeImage es usado para cargar y manejar la imagen. Hace que éstas operaciones sean sencillas de ejecutar y es portable a las platformas en las que PosteRazor funciona. Sitio web de FreeImage
  • " POSTERAZORHELPENDLINE \ "
  • Fl_Native_File_Chooser es usado para los diálogos de Abrir y Guardar en la apariencia y percepción del sistema nativo. Sitio web de Fl_Native_File_Chooser
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, SPANISH_POSTERAZORHELPLICENSE) \ "PosteRazor - ¡Haz tu propio póster!
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 11;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247, 0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,140,140,140,140,140,140,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,247,0,0,140,140,140,140,140,140,253,226,1,253,226,1,163,96,0,163,96,0, 163,96,0,163,96,0,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1, 253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,140,140,140,140,140, 140,253,226,1,0,0,0,253,226,1,117,104,0,117,104,0,253,226,1,0,0,0,253,226,1,253, 226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253, 226,1,253,226,1,140,140,140,140,140,140,253,226,1,254,96,96,174,14,14,174,14,14, 254,96,96,254,96,96,254,96,96,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1, 253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,140,140,140,140,140, 140,253,226,1,254,96,96,174,14,14,174,14,14,174,14,14,174,14,14,254,96,96,253, 226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253, 226,1,253,226,1,253,226,1,140,140,140,140,140,140,253,226,1,0,53,225,253,226,1, 174,14,14,174,14,14,253,226,1,0,53,225,253,226,1,253,226,1,253,226,1,253,226,1, 253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,254,227,1,140,140, 140,140,140,140,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 140,140,140,140,140,140,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140 }; return flagRGBData; } }; static TranslationSpanish spanish; #endif posterazor-1.5.1/src/Info.plist0000644000175000017500000000231111041177230016072 0ustar simrunsimrun CFBundleDevelopmentRegion English CFBundleExecutable PosteRazor CFBundleGetInfoString PosteRazor 1.5.1, Copyright 2005-2008 Alessandro Portale, GNU General Public License CFBundleIconFile PosteRazor CFBundleIdentifier de.casaportale.PosteRazor CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleShortVersionString 1.5.1 CFBundleSignature ???? CFBundleVersion 1.5.1 CSResourcesFileMapped NSHumanReadableCopyright Copyright 2005-2008 http://posterazor.sourceforge.net/ CFBundleDocumentTypes CFBundleTypeExtensions * posterazor-1.5.1/src/PersistentPreferencesInterface.h0000644000175000017500000000313711041177230022445 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef PERSISTENTPREFERENCESINTERFACE_H #define PERSISTENTPREFERENCESINTERFACE_H class PersistentPreferencesInterface { public: virtual ~PersistentPreferencesInterface() {} virtual void setInteger(int value, const char *key) = 0; virtual void setDouble(double value, const char *key) = 0; virtual void setBoolean(bool value, const char *key) = 0; virtual void setString(const char *value, const char *key) = 0; virtual int getInteger(const char *key, int defaultValue) = 0; virtual double getDouble(const char *key, double defaultValue) = 0; virtual bool getBoolean(const char *key, bool defaultValue) = 0; virtual const char *getString(const char *key, const char *defaultValue) = 0; }; #endif // PERSISTENTPREFERENCESINTERFACE_H posterazor-1.5.1/src/PosteRazor_Prefix.pch0000644000175000017500000000001311041177230020240 0ustar simrunsimrun#define OSXposterazor-1.5.1/src/TranslationEnglish.h0000644000175000017500000005415211041177230020115 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationEnglish_h #define TranslationEnglish_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define ENGLISH_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN class TranslationEnglish: public TranslationInterface { public: const char* languageName(void) const {return "English";} const char* absoluteSize(void) const {return "Absolute size:";} const char* allImageFormats(void) const {return "All image formats";} const char* back(void) const {return "Back";} const char* borders(void) const {return "Borders";} const char* bottom(void) const {return "Bottom";} const char* bottomLeft(void) const {return "Bottom left";} const char* bottomRight(void) const {return "Bottom right";} const char* cancel(void) const {return "Cancel";} const char* colorType(void) const {return "Color type:";} const char* custom(void) const {return "Custom";} const char* fileCouldNotBeLoaded(void) const {return "The File \"%s\" could not be loaded.";} const char* fileCouldNotBeSaved(void) const {return "The File \"%s\" could not be saved.";} const char* format(void) const {return "Format:";} const char* grayscale(void) const {return "Grayscale";} const char* height(void) const {return "Height:";} const char* imageAlignment(void) const {return "Image alignment";} const char* imageInformations(void) const {return "Image informations";} const char* imageSize(void) const {return "Image size";} const char* inputImage(void) const {return "Input image";} const char* landscape(void) const {return "Landscape";} const char* language(void) const {return "Language";} const char* languageExplanation(void) const {return "Choose your language";} const char* launchPDFApplication(void) const {return "Launch PDF application after the poster is saved";} const char* left(void) const {return "Left";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "Monochrome";} const char* next(void) const {return "Next";} const char* orientation(void) const {return "Orientation:";} const char* overlappingPosition(void) const {return "Overlapping position";} const char* overlappingSize(void) const {return "Overlapping size";} const char* overwriteFile(void) const {return "The file '%s' already exists.\nDo you want to overwrite it?";} const char* pages(void) const {return "pages";} const char* paperFormat(void) const {return "Paper format";} const char* palette(void) const {return "Palette";} const char* portrait(void) const {return "Portrait";} const char* posteRazorHelp(void) const {return "PosteRazor help";} const char* posteRazorSettings(void) const {return "PosteRazor settings";} const char* posteRazorWebSiteURL(void) const {return ENGLISH_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "PosteRazor website";} const char* previewWithOpenGL(void) const {return "Preview with OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL enables a smooth preview on modern systems. It could slow the preview down on old systems, though.";} const char* resolution(void) const {return "Resolution:";} const char* right(void) const {return "Right";} const char* saveThePoster(void) const {return "Save the poster";} const char* saveThePosterAs(void) const {return "Save the poster as";} const char* settings(void) const {return "Settings...";} const char* Size(void) const {return "Size:";} const char* sizeInPages(void) const {return "Size in pages:";} const char* sizeInPercent(void) const {return "Size in percent:";} const char* sizeInPixels(void) const {return "Size (in pixels):";} const char* sizeInUnitOfLength(void) const {return "Size (in %s):";} const char* standard(void) const {return "Standard";} const char* stepXOfY(void) const {return "Step %d of %d";} const char* top(void) const {return "Top";} const char* topLeft(void) const {return "Top left";} const char* topRight(void) const {return "Top right";} const char* unitOfLength(void) const {return "Unit of Length";} const char* unitOfLengthExplanation(void) const {return "Choose the distance unit you want to work with";} const char* width(void) const {return "Width:";} #define ENGLISH_POSTERAZORHELSTEP "Step" #define ENGLISH_POSTERAZORHELPABOUT "About the PosteRazor" #define ENGLISH_POSTERAZORHELPMANUAL "Manual" #define ENGLISH_POSTERAZORHELPSETTINGS "Settings" #define ENGLISH_POSTERAZORHELPSTEPTITLE01 "Load an input image" #define ENGLISH_POSTERAZORHELPSTEPTITLE02 "Define the printer paper format" #define ENGLISH_POSTERAZORHELPSTEPTITLE03 "Define the image tile overlapping" #define ENGLISH_POSTERAZORHELPSTEPTITLE04 "Define the final poster size" #define ENGLISH_POSTERAZORHELPSTEPTITLE05 "Save the Poster" #define ENGLISH_POSTERAZORHELPINPUTFILEFORMATS "Supported input image files" #define ENGLISH_POSTERAZORHELPWHYPDFOUTPUT "Why a PDF output?" #define ENGLISH_POSTERAZORHELPCODEFROMTHIRDPARTIES "Code from third parties" #define ENGLISH_POSTERAZORHELPLICENSE "License" const char* stepTitle01(void) const {return ENGLISH_POSTERAZORHELPSTEPTITLE01;} const char* stepTitle02(void) const {return ENGLISH_POSTERAZORHELPSTEPTITLE02;} const char* stepTitle03(void) const {return ENGLISH_POSTERAZORHELPSTEPTITLE03;} const char* stepTitle04(void) const {return ENGLISH_POSTERAZORHELPSTEPTITLE04;} const char* stepTitle05(void) const {return ENGLISH_POSTERAZORHELPSTEPTITLE05;} const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

PosteRazor "POSTERAZORVERSION" Help

" POSTERAZORHELPENDLINE \ "

Contents

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, ENGLISH_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "The PosteRazor cuts a raster image into pieces which can be printed on a printer and be put together to a poster. As an input image, raster files of various image file formats are supported. Instead of directly printing the poster, the PosteRazor produces a multi page PDF files which contains the poster tiles.
" POSTERAZORHELPENDLINE \ "It is an open source program which depends on other open source projects. " POSTERAZORHELPENDLINE \ "The PosteRazor is hostet on posterazor.sourceforge.net." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, ENGLISH_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "PosteRazor has its user interface organized in a \"Wizard\" fashion. All settings for the poster creation can be done in 5 Steps. The back and Next buttons navigate through these steps.
" POSTERAZORHELPENDLINE \ "The ? button opens a help window with an explanation of the current step.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "All entries and choices are remembered until the next usage of the PosteRazor." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, ENGLISH_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "By pressing the Settings... button on the lower left of the main dialog, the PosteRazor settings dialog is opened." POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Unit of Length: choose the unit of length that you a re used to work with. When a unit is changed, all predefined values and the values which You already defined are transformed to the new unit.
  • " POSTERAZORHELPENDLINE \ "
  • Language: choose your language. The PosteRazor does not need to be restarted when the language is changed.
  • " POSTERAZORHELPENDLINE \ "
  • Preview with OpenGL: choose, if the PosteRazor should use OpenGL for the image preview. Usually, on modern hardware OpenGL should be faster and give a more precise preview than the non-OpenGL preview. But if the PosteRazor seems to be slow and unresponsive, plese try if it works better with OpenGL switched off.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, ENGLISH_POSTERAZORHELSTEP " 1: " ENGLISH_POSTERAZORHELPSTEPTITLE01) \ POSTERAZORHELPINDENTATION "Load an image by clicking the button with the open icon and selecting an image file, or by drag & dropping an image file on the PosteRazor. The drag & drop also works in the other steps.
" POSTERAZORHELPENDLINE \ "Many file formats and image types can be loaded. After loading the image, the most important informations are listed in the Image informations fields." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, ENGLISH_POSTERAZORHELSTEP " 2: " ENGLISH_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Define the paper sheet size that you use in your printer. A standard paper sheet size can be selected from the Format chooser, along with the desired paper sheet Orientation. Alternatively, a custom paper sheet size can be define in the Custom tab. (Please write me an email, if you miss your standard paper size in the chooser). " POSTERAZORHELPENDLINE \ "Paper borders are defined in the Borders fileds. Even if your printer does need no (or small) paper borders, some border might be needed to have enough area for gluing the final poster tiles together." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, ENGLISH_POSTERAZORHELSTEP " 3: " ENGLISH_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "Image tile overlapping is needed to have some tolerance for cutting off the unneded borders from one side. Additionally, like the borders from the previous step, it gives more area for gluing together the final poster tiles. " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "The Overlapping position defines the borders that are intended to be overlapped by the neighbour tiles. The borders on the opposite sides are intended to be cut (except on the outermost tiles)." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, ENGLISH_POSTERAZORHELSTEP " 4: " ENGLISH_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Define the final poster size, in one of the following three modes which can be selected by the corresponding radio buttons:
" POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Absolute image size: You want to have a specific size of your poster.
  • " POSTERAZORHELPENDLINE \ "
  • Size in pages: you want to use whole paper sheets and specify how many of them of them you want to use.
  • " POSTERAZORHELPENDLINE \ "
  • Image size in percent: your input image has a certain size which is defined by the number of pixels and dpi (dots per Inch) and your want to enlarge the image by a certain factor.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "The aspect ratio of width and height is always 1:1 and is automatically recalculated. In the preview area, you can see the overlapping areas which are surrounded by light red rectangles. " POSTERAZORHELPENDLINE \ "Image alignment sets the alignment of the image on the total paper area of the poster. This is useful if you want to keep the unused paper." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, ENGLISH_POSTERAZORHELSTEP " 5: " ENGLISH_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Save the poster by clicking the save button and specifying a destination file name. Check or uncheck the Launch PDF application after the poster is saved, if the standard PDF handling application that is set in your operating system should be automatically started after the PDF file is saved." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, ENGLISH_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "Most of the raster image formats which are supported by FreeImage are also supported by the PosteRazor:
" POSTERAZORHELPENDLINE \ "BMP, DDS files, Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor distinguishes and handles monochrome, greyscale, 4-bit palette, 8-bit palette, 24 bit RGB, and CMYK (only from TIF) images. RGB images with an alpha channel are automatically composed onto a white background." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, ENGLISH_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "Why a PDF output and not direct printing? First of all the developer of this program does not know (yet) how to \"send images to the printer\", on the different operating systems, which PosteRazor is aimed for. Also, PDF makes sense, if a poster is razored at home with all the needed time and the day after it is printed on the color laser printer in the office (after everyone else went home). " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Why a PDF and not other raster formats as output? PDF gives the possibility to embed the whole image and virtually cut it, and not only between pixels but also with pixel fractions. Additionally, it seems more practicable to print a multi page PDF file instead of multiple image files." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, ENGLISH_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "
    " POSTERAZORHELPENDLINE \ "
  • FLTK is used for the user interface. It is a small (by size), fast, fun&easy to learn and very portable UI Toolkit. www.fltk.org
  • " POSTERAZORHELPENDLINE \ "
  • FreeImage is used for the image loading and handling. It makes image loading and handling really a no-brainer and is portable to the platforms, where the PosteRazor runs. FreeImage website
  • " POSTERAZORHELPENDLINE \ "
  • Fl_Native_File_Chooser is used for the file open and save dialog in the native system look and feel. Fl_Native_File_Chooser website
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, ENGLISH_POSTERAZORHELPLICENSE) \ "PosteRazor - Make your own poster!
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 11;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0, 153,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255, 0,0,140,140,140,140,140,140,0,0,153,255,255,255,0,0,153,255,255,255,0,0,153, 255,255,255,0,0,153,0,0,153,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,232,232,255,81,81,0,0,153,0,0,153,140,140,140,140,140, 140,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,255,0,0,255, 0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,255,255,255,255,255,255,255,255,255, 255,255,140,140,140,140,140,140,0,0,153,0,0,153,255,255,255,0,0,153,255,255,255, 0,0,153,255,255,255,0,0,153,255,255,255,255,255,255,255,232,232,255,81,81,255, 0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,0,0,153,0, 0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,0,0,153,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,221,202, 202,255,81,81,255,0,0,255,0,0,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,140,140,140,140,140,140,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,255,255,255,0,0,255,0,0,255, 255,255,255,255,255,255,0,0,255,0,0,255,0,0,0,0,153,0,0,153,0,0,153,140,140,140, 140,140,140,255,255,255,255,255,255,255,255,255,253,151,152,255,0,0,0,0,153,0,0, 153,255,255,255,255,0,0,255,0,0,255,255,255,0,0,153,255,255,255,255,255,255,255, 0,0,255,0,0,255,0,0,0,0,153,140,140,140,140,140,140,255,0,0,255,0,0,255,0,0,0, 0,153,0,0,153,0,0,153,0,0,153,255,255,255,255,0,0,255,0,0,255,255,255,0,0,153, 0,0,153,0,0,153,255,255,255,255,255,255,255,0,0,255,0,0,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140 }; return flagRGBData; } }; static const TranslationEnglish english; #endif posterazor-1.5.1/src/overlappingBottomLeft.png0000644000175000017500000000016311041177230021161 0ustar simrunsimrunPNG  IHDRt` PLTE~%IDATx^1 ARex?A%hRҪ3gX,rIENDB`posterazor-1.5.1/src/CMakeLists.txt0000644000175000017500000001105411041177230016666 0ustar simrunsimrunPROJECT(PosteRazor) IF (WIN32 OR APPLE) SET(POSTERAZOR_ENABLEGLPREVIEW TRUE) SET(POSTERAZOR_ENABLELAUNCHURLSORFILES TRUE) ENDIF (WIN32 OR APPLE) IF (MSVC) SET(POSTERAZOR_WIN32STATICRUNTIMES TRUE) SET(POSTERAZOR_DEFINITIONS ${POSTERAZOR_DEFINITIONS} -D_CRT_SECURE_NO_WARNINGS ) ENDIF (MSVC) SET(POSTERAZOR_CORESOURCES ImageIOTypes.cpp PosteRazor.cpp PosteRazorImageIO.cpp PosteRazorPDFOutput.cpp UnitsOfLength.cpp PaperFormats.cpp PaintCanvasBase.cpp ) SET(POSTERAZOR_UISOURCES Translations.cpp FlPaintCanvasGroup.cpp FlDrawPaintCanvas.cpp FlPersistentPreferences.cpp FlImageTextButton.cpp FlPosteRazorSpinner.cpp PosteRazorDialogController.cpp PosteRazorWizardDialogController.cpp FlPosteRazorDialog.cpp FlPosteRazorHelpDialog.cpp FlPosteRazorSettingsDialog.cpp FlPosteRazorDialogUI.cpp thirdparty/Fl_Native_File_Chooser/Fl_Native_File_Chooser.cxx ) SET(POSTERAZOR_INCLUDEDIRECTORIES thirdparty/Fl_Native_File_Chooser ) IF (POSTERAZOR_ENABLEGLPREVIEW) SET(POSTERAZOR_UISOURCES ${POSTERAZOR_UISOURCES} FlGlPaintCanvas.cpp ) ENDIF (POSTERAZOR_ENABLEGLPREVIEW) SET(POSTERAZOR_SOURCES ${POSTERAZOR_CORESOURCES} ${POSTERAZOR_UISOURCES} ) SET(POSTERAZOR_DEFINITIONS ${POSTERAZOR_DEFINITIONS} -DFREEIMAGE_LIB ) IF (NOT POSTERAZOR_ENABLEGLPREVIEW) SET(POSTERAZOR_DEFINITIONS ${POSTERAZOR_DEFINITIONS} -DNO_OPENGL_PREVIEW ) ENDIF (NOT POSTERAZOR_ENABLEGLPREVIEW) IF (NOT POSTERAZOR_ENABLELAUNCHURLSORFILES) SET(POSTERAZOR_DEFINITIONS ${POSTERAZOR_DEFINITIONS} -DNO_LAUNCH_URLS_OR_FILES ) ENDIF (NOT POSTERAZOR_ENABLELAUNCHURLSORFILES) IF (WIN32) SET(POSTERAZOR_EXECUTABLE WIN32 ${POSTERAZOR_SOURCES} PosteRazorUI.rc) SET(POSTERAZOR_INCLUDEDIRECTORIES ${POSTERAZOR_INCLUDEDIRECTORIES} thirdparty/FreeImage/Dist thirdparty/fltk-1.1 ) SET(POSTERAZOR_LINKDIRECTORIES thirdparty/FreeImage/Dist thirdparty/fltk-1.1/lib ) SET(POSTERAZOR_LINKLIBRARIES debug FreeImaged optimized FreeImage debug fltkd optimized fltk wsock32 comctl32 ) IF (POSTERAZOR_ENABLEGLPREVIEW) SET(POSTERAZOR_LINKLIBRARIES ${POSTERAZOR_LINKLIBRARIES} debug fltkgld optimized fltkgl glu32 opengl32 ) ENDIF (POSTERAZOR_ENABLEGLPREVIEW) IF (POSTERAZOR_WIN32STATICRUNTIMES) SET(POSTERAZOR_LINKLIBRARIES ${POSTERAZOR_LINKLIBRARIES} debug libcmtd optimized libcmt ) SET(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /RTCs /MTd /Zi /Od") SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /D NDEBUG") SET(POSTERAZOR_TARGET_PROPERTIES PROPERTIES LINK_FLAGS_DEBUG "/DEBUG") ELSE (POSTERAZOR_WIN32STATICRUNTIMES) SET(POSTERAZOR_TARGET_PROPERTIES PROPERTIES LINK_FLAGS_DEBUG "/nodefaultlib:LIBCMTD" LINK_FLAGS_RELEASE "/nodefaultlib:LIBCMT" ) ENDIF (POSTERAZOR_WIN32STATICRUNTIMES) ENDIF (WIN32) IF (APPLE) SET(POSTERAZOR_EXECUTABLE MACOSX_BUNDLE ${POSTERAZOR_SOURCES}) SET(POSTERAZOR_LINKLIBRARIES fltk fltk_gl freeimage "-framework Carbon -framework AGL -framework ApplicationServices -framework OpenGL -lz" ) ENDIF(APPLE) IF (UNIX AND NOT APPLE) SET(POSTERAZOR_EXECUTABLE ${POSTERAZOR_SOURCES}) SET(POSTERAZOR_LINKLIBRARIES fltk fltk_images freeimage X11 Xpm # Xft # Xinerama ) IF (POSTERAZOR_ENABLEGLPREVIEW) SET(POSTERAZOR_LINKLIBRARIES ${POSTERAZOR_LINKLIBRARIES} fltk_gl ) ENDIF (POSTERAZOR_ENABLEGLPREVIEW) ENDIF (UNIX AND NOT APPLE) LINK_DIRECTORIES(${POSTERAZOR_LINKDIRECTORIES}) ADD_EXECUTABLE(PosteRazor ${POSTERAZOR_EXECUTABLE}) IF (DEFINED POSTERAZOR_TARGET_PROPERTIES) SET_TARGET_PROPERTIES(PosteRazor ${POSTERAZOR_TARGET_PROPERTIES}) ENDIF (DEFINED POSTERAZOR_TARGET_PROPERTIES) ADD_DEFINITIONS(${POSTERAZOR_DEFINITIONS}) INCLUDE_DIRECTORIES(${POSTERAZOR_INCLUDEDIRECTORIES}) TARGET_LINK_LIBRARIES(PosteRazor ${POSTERAZOR_LINKLIBRARIES}) IF (APPLE) GET_TARGET_PROPERTY(MACOSX_BUNDLE_LOCATION PosteRazor LOCATION) SET(MACOSX_CONTENTS_PATH ${MACOSX_BUNDLE_LOCATION}.app/Contents) SET(MACOSX_RESOURCES_PATH ${MACOSX_CONTENTS_PATH}/Resources) ADD_CUSTOM_COMMAND(TARGET PosteRazor POST_BUILD COMMAND mkdir ARGS -p ${MACOSX_RESOURCES_PATH} COMMAND cp ARGS PosteRazor.icns ${MACOSX_RESOURCES_PATH} COMMAND cp ARGS Info.plist ${MACOSX_CONTENTS_PATH} COMMAND strip ARGS ${MACOSX_CONTENTS_PATH}/MacOS/PosteRazor ) FOREACH(language English German French Italian Dutch Spanish BrazilianPortuguese) ADD_CUSTOM_COMMAND(TARGET PosteRazor POST_BUILD COMMAND mkdir ARGS -p ${MACOSX_RESOURCES_PATH}/${language}.lproj) ENDFOREACH(language) ENDIF(APPLE) posterazor-1.5.1/src/ColorTypes.h0000644000175000017500000000214311041177230016401 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef COLORTYPES_H #define COLORTYPES_H class ColorTypes { public: enum eColorTypes { eColorTypeMonochrome, eColorTypeGreyscale, eColorTypePalette, eColorTypeRGB, eColorTypeRGBA, eColorTypeCMYK }; }; #endif // COLORTYPES_H posterazor-1.5.1/src/PosteRazorImageIO.cpp0000644000175000017500000002651611041177230020146 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FreeImage.h" #include "PosteRazorImageIO.h" #include "PosteRazorPDFOutput.h" #include "UnitsOfLength.h" #include #include static char FreeImageErrorMessage[1024]; void FreeImageErrorHandler(FREE_IMAGE_FORMAT /* fif */, const char *message) { strncpy(FreeImageErrorMessage, message, sizeof(FreeImageErrorMessage)); FreeImageErrorMessage[sizeof(FreeImageErrorMessage)-1] = '\0'; } class FreeImageInitializer { public: FreeImageInitializer() { FreeImage_Initialise(); FreeImage_SetOutputMessage(FreeImageErrorHandler); } ~FreeImageInitializer() { FreeImage_DeInitialise(); } }; static FreeImageInitializer initializer; class PosteRazorImageIOImplementation: public PosteRazorImageIO { private: FIBITMAP* m_bitmap; int m_widthPixels; int m_heightPixels; unsigned int m_horizontalDotsPerMeter; unsigned int m_verticalDotsPerMeter; char m_imageFileName[1024]; static bool isSystemLittleEndian(void) { // Endianness detection lines borrowed from: http://en.wikipedia.org/wiki/Endianness const long int i = 1; const char *p = (const char *) &i; return p[0] == 1; // Lowest address contains the least significant byte } static bool issRgbDataSwappingNeeded(void) { #ifdef __APPLE__ // It seems that OSX i386 interpretes image data just like OSX ppc return false; #else return isSystemLittleEndian(); #endif } // FreeImage_Convert[To|From]RawBits inverted the topdown parameter until v3.10 static BOOL hasFreeImageVersionCorrectTopDownInConvertBits(void) { const char *version = FreeImage_GetVersion(); int majorVersion; int minorVersion; const int readCount = sscanf(version, "%d.%d", &majorVersion, &minorVersion); return readCount == 2 && majorVersion >= 3 && minorVersion >= 10?TRUE:FALSE; } public: PosteRazorImageIOImplementation() : m_bitmap(NULL) , m_widthPixels(0) , m_heightPixels(0) , m_horizontalDotsPerMeter(0) , m_verticalDotsPerMeter(0) { m_imageFileName[0] = '\0'; } ~PosteRazorImageIOImplementation() { disposeImage(); } void disposeImage() { if (m_bitmap) { FreeImage_Unload(m_bitmap); m_bitmap = NULL; } } bool loadInputImage(const char *imageFileName, char *errorMessage, int errorMessageSize) { bool result = false; strcpy(FreeImageErrorMessage, ""); FIBITMAP* newImage = FreeImage_Load(FreeImage_GetFileType(imageFileName, 0), imageFileName, TIFF_CMYK); if (newImage) { result = true; disposeImage(); m_bitmap = newImage; m_widthPixels = FreeImage_GetWidth(m_bitmap); m_heightPixels = FreeImage_GetHeight(m_bitmap); m_horizontalDotsPerMeter = FreeImage_GetDotsPerMeterX(m_bitmap); m_verticalDotsPerMeter = FreeImage_GetDotsPerMeterY(m_bitmap); if (m_horizontalDotsPerMeter == 0) m_horizontalDotsPerMeter = 2835; // 72 dpi if (m_verticalDotsPerMeter == 0) m_verticalDotsPerMeter = 2835; strcpy(m_imageFileName, imageFileName); if ((getColorDataType() == eColorTypeRGB && getBitsPerPixel() == 32) // Sometimes, there are strange .PSD images like this (FreeImage bug?) || (getColorDataType() == eColorTypeRGBA)) // We can't export alpha channels to PDF, anyway (yet) { RGBQUAD white = { 255, 255, 255, 0 }; FIBITMAP *Image24Bit = FreeImage_Composite(m_bitmap, FALSE, &white); FreeImage_Unload(m_bitmap); m_bitmap = Image24Bit; } } strncpy(errorMessage, FreeImageErrorMessage, errorMessageSize); errorMessage[errorMessageSize-1] = '\0'; return result; } bool isImageLoaded(void) const {return (m_bitmap != NULL);} int getWidthPixels(void) const {return m_widthPixels;} int getHeightPixels(void) const {return m_heightPixels;} double getHorizontalDotsPerUnitOfLength(UnitsOfLength::eUnitsOfLength unit) const { return m_horizontalDotsPerMeter / UnitsOfLength::convertBetweenUnitsOfLength(1, UnitsOfLength::eUnitOfLengthMeter, unit); } double getVerticalDotsPerUnitOfLength(UnitsOfLength::eUnitsOfLength unit) const { return m_verticalDotsPerMeter / UnitsOfLength::convertBetweenUnitsOfLength(1, UnitsOfLength::eUnitOfLengthMeter, unit); } double getWidth(UnitsOfLength::eUnitsOfLength unit) const {return getWidthPixels() / getHorizontalDotsPerUnitOfLength(unit);} double getHeight(UnitsOfLength::eUnitsOfLength unit) const {return getHeightPixels() / getVerticalDotsPerUnitOfLength(unit);} #define MAX(a, b) ((a)>(b)?(a):(b)) bool getImageAsRGB(unsigned char *buffer) const { return getImageAsRGB(buffer, getWidthPixels(), getHeightPixels()); } bool getImageAsRGB(unsigned char *buffer, int width, int height) const { bool success = true; FIBITMAP* originalImage = m_bitmap; FIBITMAP* temp24BPPImage = NULL; FIBITMAP* scaledImage = NULL; if (getBitsPerPixel() != 24) { if (getColorDataType() == eColorTypeCMYK) { temp24BPPImage = FreeImage_Allocate(getWidthPixels(), getHeightPixels(), 24); const unsigned int scanlinesCount = getHeightPixels(); const unsigned int columnsCount = getWidthPixels(); for (unsigned int scanline = 0; scanline < scanlinesCount; scanline++) { const BYTE* const cmykBits = FreeImage_GetScanLine(m_bitmap, scanline); BYTE* const rgbBits = FreeImage_GetScanLine(temp24BPPImage, scanline); for (unsigned int column = 0; column < columnsCount; column++) { const unsigned int cmykColumn = column * 4; const unsigned int rgbColumn = column * 3; const BYTE cyan = cmykBits[cmykColumn]; const BYTE magenta = cmykBits[cmykColumn + 1]; const BYTE yellow = cmykBits[cmykColumn + 2]; const BYTE black = cmykBits[cmykColumn + 3]; const BYTE red = MAX(0, (255 - (unsigned char)((double)yellow/1.5) - (unsigned char)((double)black/1.5))); const BYTE green = MAX(0, (255 - (unsigned char)((double)magenta/1.5) - (unsigned char)((double)black/1.5))); const BYTE blue = MAX(0, (255 - (unsigned char)((double)cyan/1.5) - (unsigned char)((double)black/1.5))); rgbBits[rgbColumn] = red; rgbBits[rgbColumn + 1] = green; rgbBits[rgbColumn + 2] = blue; } } } else { temp24BPPImage = FreeImage_ConvertTo24Bits(originalImage); } originalImage = temp24BPPImage; } if (getWidthPixels() != width || getHeightPixels() != height) { scaledImage = FreeImage_Rescale(originalImage, width, height, FILTER_BOX); originalImage = scaledImage; } FreeImage_ConvertToRawBits(buffer, originalImage, width*3, 24, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, hasFreeImageVersionCorrectTopDownInConvertBits()); // Swapping RGB data if needed (like on Intel) if (issRgbDataSwappingNeeded()) { const unsigned int numberOfPixels = width * height; for (unsigned int pixelIndex = 0; pixelIndex < numberOfPixels; pixelIndex++) { unsigned char* pixelPtr = buffer + pixelIndex*3; const unsigned char temp = pixelPtr[0]; pixelPtr[0] = pixelPtr[2]; pixelPtr[2] = temp; pixelPtr+=3; } } if (temp24BPPImage) FreeImage_Unload(temp24BPPImage); if (scaledImage) FreeImage_Unload(scaledImage); return success; } int getBitsPerPixel(void) const { return FreeImage_GetBPP(m_bitmap); } eColorTypes getColorDataType(void) const { eColorTypes colorDatatype = eColorTypeRGB; const FREE_IMAGE_COLOR_TYPE imageColorType = FreeImage_GetColorType(m_bitmap); if (imageColorType == FIC_MINISBLACK || imageColorType == FIC_MINISWHITE) { colorDatatype = getBitsPerPixel()==1?eColorTypeMonochrome:eColorTypeGreyscale; } else { colorDatatype = imageColorType==FIC_PALETTE?eColorTypePalette: imageColorType==FIC_RGB?eColorTypeRGB: imageColorType==FIC_RGBALPHA?eColorTypeRGBA: /*imageColorType==FIC_CMYK?*/eColorTypeCMYK; } return colorDatatype; } int savePoster(const char *fileName, ImageIOTypes::eImageFormats /* format */, const PainterInterface *painter, int pagesCount, double widthCm, double heightCm) const { int err = 0; const unsigned int imageBytesCount = PosteRazorPDFOutput::getImageBytesCount(getWidthPixels(), getHeightPixels(), getBitsPerPixel()); unsigned char *imageData = new unsigned char[imageBytesCount]; const unsigned int bytesPerLineCount = PosteRazorPDFOutput::getImageBytesPerLineCount(getWidthPixels(), getBitsPerPixel()); FreeImage_ConvertToRawBits(imageData, m_bitmap, bytesPerLineCount, getBitsPerPixel(), FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, hasFreeImageVersionCorrectTopDownInConvertBits()); // Swapping RGB data if needed (like on Intel) if (getBitsPerPixel() == 24 && issRgbDataSwappingNeeded()) { const unsigned long numberOfPixels = getWidthPixels() * getHeightPixels(); for (unsigned int pixelIndex = 0; pixelIndex < numberOfPixels; pixelIndex++) { unsigned char *pixelPtr = imageData + pixelIndex*3; const unsigned char temp = pixelPtr[0]; pixelPtr[0] = pixelPtr[2]; pixelPtr[2] = temp; pixelPtr+=3; } } const RGBQUAD* const palette = FreeImage_GetPalette(m_bitmap); unsigned char rgbPalette[768]; // Compacting the palette if (palette) { const int count = FreeImage_GetColorsUsed(m_bitmap); for (int i = 0; i < count; i++) { const int offset = i*3; rgbPalette[offset] = palette[i].rgbRed; rgbPalette[offset + 1] = palette[i].rgbGreen; rgbPalette[offset + 2] = palette[i].rgbBlue; } } PosteRazorPDFOutput *pdfOutput = PosteRazorPDFOutput::createPosteRazorPDFOutput(); err = pdfOutput->startSaving(fileName, pagesCount, widthCm, heightCm); if (!err) { if (FreeImage_GetFileType(m_imageFileName, 0) == FIF_JPEG) err = pdfOutput->saveImage(m_imageFileName, getWidthPixels(), getHeightPixels(), getColorDataType()); else err = pdfOutput->saveImage(imageData, getWidthPixels(), getHeightPixels(), getBitsPerPixel(), getColorDataType(), rgbPalette, FreeImage_GetColorsUsed(m_bitmap)); } if (!err) { for (int page = 0; page < pagesCount; page++) { char paintOptions[1024]; sprintf(paintOptions, "posterpage %d", page); pdfOutput->startPage(); painter->paintOnCanvas(pdfOutput, paintOptions); pdfOutput->finishPage(); } err = pdfOutput->finishSaving(); } delete pdfOutput; if (imageData) delete[] imageData; return err; } }; PosteRazorImageIO* PosteRazorImageIO::createPosteRazorImageIO(void) { return (PosteRazorImageIO*) new PosteRazorImageIOImplementation(); } posterazor-1.5.1/src/TranslationGerman.h0000644000175000017500000005746411041177230017746 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationGerman_h #define TranslationGerman_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define GERMAN_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN"?lang=german" class TranslationGerman: public TranslationInterface { public: const char* languageName(void) const {return "Deutsch";} const char* absoluteSize(void) const {return "Absolute Mae:";} const char* allImageFormats(void) const {return "Alle Bildformate";} const char* back(void) const {return "Zurck";} const char* borders(void) const {return "Rnder";} const char* bottom(void) const {return "Unten";} const char* bottomLeft(void) const {return "Unten links";} const char* bottomRight(void) const {return "Unten rechts";} const char* cancel(void) const {return "Abbruch";} const char* colorType(void) const {return "Farbtyp:";} const char* custom(void) const {return "Eigenes";} const char* fileCouldNotBeLoaded(void) const {return "Die Datei \"%s\" konnte nicht geladen werden.";} const char* fileCouldNotBeSaved(void) const {return "Die Datei \"%s\" konnte nicht gespeichert werden.";} const char* format(void) const {return "Format:";} const char* grayscale(void) const {return "Graustufen";} const char* height(void) const {return "Hhe:";} const char* imageAlignment(void) const {return "Ausrichtung des Bildes";} const char* imageInformations(void) const {return "Bildinformationen";} const char* imageSize(void) const {return "Bildgre";} const char* inputImage(void) const {return "Ausgangsbild";} const char* landscape(void) const {return "Querformat";} const char* language(void) const {return "Sprache";} const char* languageExplanation(void) const {return "Whlen Sie ihre Sprache";} const char* launchPDFApplication(void) const {return "PDF-Applikation nach Speicherung des Posters starten";} const char* left(void) const {return "Links";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "Monochrom";} const char* next(void) const {return "Weiter";} const char* orientation(void) const {return "Ausrichtung:";} const char* overlappingPosition(void) const {return "berlappende Seiten";} const char* overlappingSize(void) const {return "Mae der berlappung";} const char* overwriteFile(void) const {return "Die Datei '%s' extistiert bereits.\nSoll sie berschrieben werden?";} const char* pages(void) const {return "Seiten";} const char* palette(void) const {return "Palette";} const char* paperFormat(void) const {return "Papierformat";} const char* portrait(void) const {return "Hochformat";} const char* posteRazorHelp(void) const {return "PosteRazor Hilfe";} const char* posteRazorSettings(void) const {return "PosteRazor Einstellungen";} const char* posteRazorWebSiteURL(void) const {return GERMAN_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "PosteRazor-Internetseite";} const char* previewWithOpenGL(void) const {return "Vorschau mit OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL ermglicht eine bessere Vorschau. Auf alter Hardware knnte OpenGL jedoch langsamer sein.";} const char* resolution(void) const {return "Auflsung:";} const char* right(void) const {return "Rechts";} const char* saveThePoster(void) const {return "Das Poster speichern";} const char* saveThePosterAs(void) const {return "Das Poster speichern unter";} const char* settings(void) const {return "Einstellungen...";} const char* Size(void) const {return "Gre:";} const char* sizeInPages(void) const {return "Gre in Seiten:";} const char* sizeInPercent(void) const {return "Prozentuelle Gre:";} const char* sizeInPixels(void) const {return "Gre (in Pixeln):";} const char* sizeInUnitOfLength(void) const {return "Gre (in %s):";} const char* standard(void) const {return "Standard";} const char* stepXOfY(void) const {return "Schritt %d von %d";} const char* top(void) const {return "Oben";} const char* topLeft(void) const {return "Oben links";} const char* topRight(void) const {return "Oben rechts";} const char* unitOfLength(void) const {return "Lngeneinheit";} const char* unitOfLengthExplanation(void) const {return "Whlen Sie die Lngeneinheit, mit der Sie arbeiten mchten";} const char* width(void) const {return "Breite:";} #define GERMAN_POSTERAZORHELSTEP "Schritt" #define GERMAN_POSTERAZORHELPABOUT "Über den PosteRazor" #define GERMAN_POSTERAZORHELPMANUAL "Bedienungsanleitung" #define GERMAN_POSTERAZORHELPSETTINGS "Einstellungen" #define GERMAN_POSTERAZORHELPSTEPTITLE01 "Ein Ausgangsbild laden" #define GERMAN_POSTERAZORHELPSTEPTITLENOHTML02 "Druckerpapier-Mae definieren" #define GERMAN_POSTERAZORHELPSTEPTITLE02 "Druckerpapier-Maße definieren" #define GERMAN_POSTERAZORHELPSTEPTITLENOHTML03 "berlappung der Bildabschnitte definieren" #define GERMAN_POSTERAZORHELPSTEPTITLE03 "Überlappung der Bildabschnitte definieren" #define GERMAN_POSTERAZORHELPSTEPTITLENOHTML04 "Die finale Postergre definieren" #define GERMAN_POSTERAZORHELPSTEPTITLE04 "Die finale Postergröße definieren" #define GERMAN_POSTERAZORHELPSTEPTITLE05 "Das Poster speichern" #define GERMAN_POSTERAZORHELPINPUTFILEFORMATS "Unterstützte Ausgangs-Bildformate" #define GERMAN_POSTERAZORHELPWHYPDFOUTPUT "Warum PDF als Ausgabeformat?" #define GERMAN_POSTERAZORHELPCODEFROMTHIRDPARTIES "Code von Drittanbietern" #define GERMAN_POSTERAZORHELPLICENSE "Lizenz" const char* stepTitle01(void) const {return GERMAN_POSTERAZORHELPSTEPTITLE01;} const char* stepTitle02(void) const {return GERMAN_POSTERAZORHELPSTEPTITLENOHTML02;} const char* stepTitle03(void) const {return GERMAN_POSTERAZORHELPSTEPTITLENOHTML03;} const char* stepTitle04(void) const {return GERMAN_POSTERAZORHELPSTEPTITLENOHTML04;} const char* stepTitle05(void) const {return GERMAN_POSTERAZORHELPSTEPTITLE05;} const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

PosteRazor "POSTERAZORVERSION" Hilfe

" POSTERAZORHELPENDLINE \ "

Inhaltsverzeichnis

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, GERMAN_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "Der PosteRazor schneidet ein Rasterbild in Stücke, die auf einem Drucker ausgedruckt und zu einem Poster zusammengefügt werden können. Als Ausgangsbilder werden Dateien in vielen Formaten unterstützt. Anstatt das Bild direkt zu drucken, generiert der PosteRazor ein mehrseitiges PDF-Dokument welches die Bildteile enthält.
" POSTERAZORHELPENDLINE \ "Es ist ein Open-Source-Programm, das seinerseits von Open-Source-Projekten abhängt. " POSTERAZORHELPENDLINE \ "Der PosteRazor ist unter posterazor.sourceforge.net zu finden." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, GERMAN_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "Der PosteRazor hat eine Benutzerführung im \"Assistenten\"-Stil. Alle Einstellungen für die Postererstellung werden in fünf Schritten erledigt. Die Weiter und Zurück-Knöpfe blättern durch diese Schritte.
" POSTERAZORHELPENDLINE \ "Der ?-Knopf öffnet ein Hilfefenster mit der Beschreibung des aktuellen Schrittes.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Der PosteRazor merkt sich jede Eingabe und Auswahl bis zur nächsten Benutzung des Programms." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, GERMAN_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "Durch klicken des Einstellungen...-Knopfes auf der unteren linken Seite des Hauptdialogs wird der Einstellungs-Dialog des PosteRazors geöffnet." POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Längeneinheit: wählen Sie die Einheit. mit der Sie Arbeiten werden. Wird die Einheit verändert, werden alle vorgegeben und die bereits selbst eingegeben Werte im Dialog in die neue Einheit umgerechnet.
  • " POSTERAZORHELPENDLINE \ "
  • Sprache: wählen Sie Ihre Sprache. Der PosteRazor braucht für die Änderung der Sprache nicht neu gestartet zu werden.
  • " POSTERAZORHELPENDLINE \ "
  • Vorschau mit OpenGL: bestimmen Sie, ob der PosteRazor OpenGL für die Bild-Vorschau nutzen soll. Üblicherweise bietet der OpenGL-Modus auf moderner Hardware mehr Geschwindigkeit und ein saubereres als der Modus ohne OpenGL. Aber falls der PosteRazor langsam und ruckelig wirkt, versuchen Sie bitte, ob das Ausschalten von OpenGL Besserung bringt.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, GERMAN_POSTERAZORHELSTEP " 1: " GERMAN_POSTERAZORHELPSTEPTITLE01) \ POSTERAZORHELPINDENTATION "Laden Sie ein Ausgangs-Bild, indem sie auf das \"Neu\"-Symbol klicken und eine Datei wählen, oder indem Sie eine Datei auf den PosteRazor fallen lassen (Drag & Drop). Die Drag & Drop-Funktion des Ausgangsbildes ist in allen Assistenten-Schritten vorhanden.
" POSTERAZORHELPENDLINE \ "Viele Bildformate können geladen werden. Nach dem Laden eines Bildes werden in dem Feld Bildinformationen die wichtigsten Angaben aufgelistet." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, GERMAN_POSTERAZORHELSTEP " 2: " GERMAN_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Definieren Sie, welches Papiermaß Ihr Drucker unterstützt. Ein Standard-Papierbogen-Format kann in der Format-Auswahl selektiert werden und ebenso die gewönschte Ausrichtung der Bögen. Alternativ können in dem Eigenes-Reiter selbstdefinierte Bogenmaße angegeben werden. (Bitte schreiben Sie mir eine E-Mail, Falls Sie Ihr Standard-Format in der Auswahl vermissen). " POSTERAZORHELPENDLINE \ "Papierränder können in den Ränder-Feldern angegeben werden. Auch wenn Ihr Drucker randlos druckt, wird später gegebenfalls etwas Rand als Klebefläche benötigt." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, GERMAN_POSTERAZORHELSTEP " 3: " GERMAN_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "Eine Überlappung der Bildabschnitte ist sehr hilfreich, da sie beim Schneiden der überfälligen Ränder und zusammenkleben der Teile eine gewisse Fehlertoleranz ins Spiel bringt. Zusätzlich bietet sie (ebenso wie die Ränder des vorangegangenen Schrittes) mehr Klebefläche für die Bildteile. " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Die Angabe Überlappende Seiten beschreibt, welche Seitenränder von den Nachbar-Bildabschnitten Überlagert werden sollen. Die Ränder auf den gegenüberliegenden Seiten sind zum Abschneiden gedacht (ausgenommen die auf den äußeren Bildabschnitten)." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, GERMAN_POSTERAZORHELSTEP " 4: " GERMAN_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Beschreiben Sie auf eine der drei folgenden Weisen die Maße des finalen Posters: Die entsprechende Eingabe-Weise muss per Radio-Button aktiviert sein.
" POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Absolute Maße: Sie wollen, dass das Poster ganz bestimmte Maße hat.
  • " POSTERAZORHELPENDLINE \ "
  • Größe in Seiten: Sie wollen die Druckbögen komplett nutzen und spezifizieren die Anzahl der Bögen.
  • " POSTERAZORHELPENDLINE \ "
  • Prozentuelle Größe: Ihr Ausgangsbild hat gewisse Maße, die von seiner Anzahl an Pixeln und der Auflösung (dpi, dots per Inch) bestimmt werden und sie wollen das Bild auf einen bestimmten Prozentsatz vergrößern.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Das Seitenverhältnis ist immer 1:1, bei der Editierung z.B. der Breite wird die Höhe automatisch errechnet. In dem Vorschaubereich können Sie die Überlappungen der Bildabschnitte als rötlich markierte Balken sehen. " POSTERAZORHELPENDLINE \ "Ausrichtung des Bildes beschreibt die Ausrichtung des Bildes auf der gesamten Papierfläche des Poster. Diese Eindtellung ist nur dann sinnvoll, wenn das überstehende Papier am Ende nicht abgeschnitten werden soll." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, GERMAN_POSTERAZORHELSTEP " 5: " GERMAN_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Speichern Sie das Poster, indem Sie auf den \"Speichern\"-Knopf klicken und einen Dateinamen und -ort definieren. Aktivieren oder deaktivieren Sie PDF-Applikation nach Speicherung des Posters starten, je nach dem, ob das Poster nach dem Speichern automatisch mit dem Standard-PDF-Programm gestartet werden soll." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, GERMAN_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "Die meisten der Raster-Bild-Formate, die von FreeImage unterstützt werden, können vom PosteRazor verarbeitet werden:
" POSTERAZORHELPENDLINE \ "BMP, DDS files, Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor unterscheidet und behandelt Monochrom-, Graustufen-, 4-bit Paletten-, 8-bit Paletten-, 24 bit RGB-, and CMYK-Bilder (CMYK nur im TIF-Format). RGB-Bilder mit einem Alphakanal/Transparenzen werden automatisch auf einen weißen Hintergrund reduziert." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, GERMAN_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "Warum PDF als Ausgabeformat, und nicht eine direkte ausgabe über einen Drucker? In erster Linie weiß der Entwickler dieses Programms (noch) nicht, wie man auf allen Betriebssystemen, auf denen der PosteRazor läuft, \"Bilder an den Drucker schickt\". Davon abgesehen ist PDF zum Beispiel sinnvoll, wenn ein Poster zu Hause vorbereited wurde, und es am nächsten Tag mit dem guten Drucker auf der Arbeit gedruckt werden soll (Natürlich erst, wenn Chef und Kollegen Feierabend haben)." POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Warum PDF und nicht andere Raster-Bildformate? PDF bietet die Möglichkeit, ein ganzes Bild einzubetten und es virtuell zu zerschneiden. Das Zerschneiden ist nicht nur zwischen Pixeln sondern mitten durch Pixel hindurch möglich. Außerdem ist es praktischer, ein mehrseitiges PDF-Dokument statt mehrerer einzelnder Bilddateien zu drucken." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, GERMAN_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "
    " POSTERAZORHELPENDLINE \ "
  • FLTK wird für die grafische Benutzerschnittstelle eingesetzt. Es ist eine kleine (speicherplatzbezogen), schnelle, angenehm einfach zu erlernende UI-Bibliothek. www.fltk.org
  • " POSTERAZORHELPENDLINE \ "
  • FreeImage wird für das Laden und Bearbeiten von Bildern genutzt. Diese Bibliothek macht das Laden, bearbeiten und Speuchern zu einem Kinderspiel und es is auf alle Plattformen portierbar, auf denen PosteRazor läuft. FreeImage website
  • " POSTERAZORHELPENDLINE \ "
  • Fl_Native_File_Chooser wird benutzt, um den Dateidialogen systemspezifisches Aussehen zu verleihen. Internetseite von Fl_Native_File_Chooser
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, GERMAN_POSTERAZORHELPLICENSE) \ "PosteRazor - Mach' Dein eigenes Poster!
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ "Der folgende Lizenztext ist in seiner englischen Originalfassung aufgeführt, da die deutsche Übersetzung nicht offiziell oder im rechtlichen Sinne anerkannt ist.
 
" POSTERAZORHELPENDLINE \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 11;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,140,140,140,140,140,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,140,140,140,140,140,140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 140,140,140,140,140,140,247,0,0,243,0,0,243,0,0,243,0,0,243,0,0,243,0,0,243,0,0, 243,0,0,243,0,0,243,0,0,243,0,0,243,0,0,243,0,0,243,0,0,243,0,0,243,0,0,243,0,0, 247,0,0,140,140,140,140,140,140,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0,247,0,0, 247,0,0,247,0,0,140,140,140,140,140,140,247,0,0,250,0,0,250,0,0,250,0,0,250,0,0, 250,0,0,250,0,0,250,0,0,250,0,0,250,0,0,250,0,0,250,0,0,250,0,0,250,0,0,250,0,0, 250,0,0,250,0,0,247,0,0,140,140,140,140,140,140,254,227,1,253,226,1,253,226,1, 253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1, 253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,253,226,1,254,227,1,140,140, 140,140,140,140,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254, 227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254, 227,1,254,227,1,254,227,1,254,227,1,140,140,140,140,140,140,254,227,1,254,227,1, 254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1, 254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1,254,227,1, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140 }; return flagRGBData; } }; static const TranslationGerman german; #endif posterazor-1.5.1/src/thirdparty/0000755000175000017500000000000011041320342016311 5ustar simrunsimrunposterazor-1.5.1/src/thirdparty/whatgoeshere.txt0000644000175000017500000000340211041177226021551 0ustar simrunsimrunPosteRazor needs FLTK and FreeImage which are not included in the PosteRazor source tree. The headers and libraries libraries need either to be installed on the system or in this folder. The Project files for Visual Studio .NET look into this folder for them. FLTK ("fltk-1.1") ================= You can get it from http://www.fltk.org either by download or SVN. PosteRazor was developed with FLTK 1.1.7. But any following 1.1.x FLTK should do it, since the backwards compatibility is usually kept. Fltk 1.1.7+ needs to be be installed into a folder "fltk-1.1" below this folder. PosteRazor requires the "FL" subfolder with the headers and the "lib" subfolder with the built static libraries in it. The project files of PosteRazor have relative paths that expect those folders to be here. For Visual Studio .Net 2003: Open the solution "fltk-1.1\vcnet\fltk.sln and" compile the project "fltk" in Release configuration. The resulting binary is "lib\fltk.lib". FreeImage ========= You can get it from http://freeimage.sourceforge.net/ either by download or CVS. FreeImage needs to be installed into a folder "FreeImage" below this folder. PosteRazor requires the "Dist" subfolder with the headers and built static libraries in it. The project files of PosteRazor have relative paths that expect those folders to be here. For Visual Studio .Net 2003: Open the solution "FreeImage\FreeImage.sln", set the "Properties->C/C++->Code Generation->Runtime Library" of the "FreeImageLib" project to "Multi-threaded DLL" in the release configuration. Do the same for the projects "LibJPEG", "LibMNG", "LibPNG", "LibTIFF" and "ZLib". Then compile the "FreeImageLib" project in release configuration. The result is a ca. 7mb big "FreeImage\Dist\FreeImage.lib".posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/0000755000175000017500000000000011041320342022601 5ustar simrunsimrunposterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/Fl_Native_File_Chooser_MAC.cxx0000644000175000017500000006013711041177226030317 0ustar simrunsimrun// // Fl_Native_File_Chooser_MAC.cxx -- FLTK native OS file chooser widget // // Copyright 2004 by Greg Ercolano. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Please keep code 80 column compliant. // // 10 20 30 40 50 60 70 // | | | | | | | // 4567890123456789012345678901234567890123456789012345678901234567890123456789 // // TODO: // o When doing 'open file', only dir is preset, not filename. // Possibly 'preset_file' could be used to select the filename. // #include #include #include "common.cxx" // strnew/strfree/strapp/chrcat // TRY TO CONVERT AN AEDesc TO AN FSSpec // As per Apple Technical Q&A QA1274 // eg: http://developer.apple.com/qa/qa2001/qa1274.html // Returns 'noErr' if OK, // or an 'OSX result code' on error. // static int AEDescToFSSpec(const AEDesc* desc, FSSpec* fsspec) { OSStatus err = noErr; AEDesc coerceDesc; // If AEDesc isn't already an FSSpec, convert it to one if ( desc->descriptorType != typeFSS ) { if ( ( err = AECoerceDesc(desc, typeFSS, &coerceDesc) ) == noErr ) { // Get FSSpec out of AEDesc err = AEGetDescData(&coerceDesc, fsspec, sizeof(FSSpec)); AEDisposeDesc(&coerceDesc); } } else { err = AEGetDescData(desc, fsspec, sizeof(FSSpec)); } return( err ); } // CONVERT AN FSSpec TO A PATHNAME static void FSSpecToPath(const FSSpec &spec, char *buff, int bufflen) { FSRef fsRef; FSpMakeFSRef(&spec, &fsRef); FSRefMakePath(&fsRef, (UInt8*)buff, bufflen); } // CONVERT REGULAR PATH -> FSSpec // If file does not exist, expect fnfErr. // Returns 'noErr' if OK, // or an 'OSX result code' on error. // static OSStatus PathToFSSpec(const char *path, FSSpec &spec) { OSStatus err; FSRef ref; if ((err = FSPathMakeRef((const UInt8*)path, &ref, NULL)) != noErr) { return(err); } // FSRef -> FSSpec if ((err = FSGetCatalogInfo(&ref, kFSCatInfoNone, NULL, NULL, &spec, NULL)) != noErr) { return(err); } return(noErr); } // NAVREPLY: CTOR Fl_Native_File_Chooser::NavReply::NavReply() { _valid_reply = 0; } // NAVREPLY: DTOR Fl_Native_File_Chooser::NavReply::~NavReply() { if ( _valid_reply ) { NavDisposeReply(&_reply); } } // GET REPLY FROM THE NAV* DIALOG int Fl_Native_File_Chooser::NavReply::get_reply(NavDialogRef& ref) { if ( _valid_reply ) { NavDisposeReply(&_reply); // dispose of previous _valid_reply = 0; } if ( ref == NULL || NavDialogGetReply(ref, &_reply) != noErr ) { return(-1); } _valid_reply = 1; return(0); } // RETURN THE BASENAME USER WANTS TO 'Save As' int Fl_Native_File_Chooser::NavReply::get_saveas_basename(char *s, int slen) { if (CFStringGetCString(_reply.saveFileName, s, slen-1, kCFStringEncodingUTF8) == false) { s[0] = '\0'; return(-1); } return(0); } // RETURN THE DIRECTORY NAME // Returns 0 on success, -1 on error. // int Fl_Native_File_Chooser::NavReply::get_dirname(char *s, int slen) { FSSpec fsspec; if ( AEDescToFSSpec(&_reply.selection, &fsspec) != noErr ) { // Conversion failed? Return empty name s[0] = 0; return(-1); } FSSpecToPath(fsspec, s, slen); return(0); } // RETURN MULTIPLE DIRECTORIES // Returns: 0 on success with pathnames[] containing pathnames selected, // -1 on error // int Fl_Native_File_Chooser::NavReply::get_pathnames(char **&pathnames, int& tpathnames) { // How many items selected? long count = 0; if ( AECountItems(&_reply.selection, &count) != noErr ) { return(-1); } // Allocate space for that many pathnames pathnames = new char*[count]; memset((void*)pathnames, 0, count*sizeof(char*)); tpathnames = count; // Walk list of pathnames selected for (short index=1; index<=count; index++) { AEKeyword keyWord; AEDesc desc; if (AEGetNthDesc(&_reply.selection, index, typeFSS, &keyWord, &desc) != noErr) { pathnames[index-1] = strnew(""); continue; } FSSpec fsspec; if (AEGetDescData(&desc, &fsspec, sizeof(FSSpec)) != noErr ) { pathnames[index-1] = strnew(""); continue; } char s[4096]; FSSpecToPath(fsspec, s, sizeof(s)-1); pathnames[index-1] = strnew(s); AEDisposeDesc(&desc); } return(0); } // FREE PATHNAMES ARRAY, IF IT HAS ANY CONTENTS void Fl_Native_File_Chooser::clear_pathnames() { if ( _pathnames ) { while ( --_tpathnames >= 0 ) { _pathnames[_tpathnames] = strfree(_pathnames[_tpathnames]); } delete [] _pathnames; _pathnames = NULL; } _tpathnames = 0; } // SET A SINGLE PATHNAME void Fl_Native_File_Chooser::set_single_pathname(const char *s) { clear_pathnames(); _pathnames = new char*[1]; _pathnames[0] = strnew(s); _tpathnames = 1; } // GET THE 'Save As' FILENAME // Returns -1 on error, errmsg() has reason, filename == "". // 0 if OK, filename() has filename chosen. // int Fl_Native_File_Chooser::get_saveas_basename(NavDialogRef& ref) { if ( ref == NULL ) { errmsg("get_saveas_basename: ref is NULL"); return(-1); } NavReply reply; OSStatus err; if ((err = reply.get_reply(ref)) != noErr ) { errmsg("NavReply::get_reply() failed"); clear_pathnames(); return(-1); } char pathname[4096] = ""; // Directory name.. // -2 leaves room to append '/' // if ( reply.get_dirname(pathname, sizeof(pathname)-2) < 0 ) { clear_pathnames(); errmsg("NavReply::get_dirname() failed"); return(-1); } // Append '/' int len = strlen(pathname); pathname[len++] = '/'; pathname[len] = '\0'; // Basename.. if ( reply.get_saveas_basename(pathname+len, sizeof(pathname)-len) < 0 ) { clear_pathnames(); errmsg("NavReply::get_saveas_basename() failed"); return(-1); } set_single_pathname(pathname); return(0); } // GET (POTENTIALLY) MULTIPLE FILENAMES // Returns: // -1 -- error, errmsg() has reason, filename == "" // 0 -- OK, pathnames()/filename() has pathname(s) chosen // int Fl_Native_File_Chooser::get_pathnames(NavDialogRef& ref) { if ( ref == NULL ) { errmsg("get_saveas_basename: ref is NULL"); return(-1); } NavReply reply; OSStatus err; if ((err = reply.get_reply(ref)) != noErr ) { errmsg("NavReply::get_reply() failed"); clear_pathnames(); return(-1); } // First, clear pathnames array of any previous contents clear_pathnames(); if ( reply.get_pathnames(_pathnames, _tpathnames) < 0 ) { clear_pathnames(); errmsg("NavReply::get_dirname() failed"); return(-1); } return(0); } // NAV CALLBACK EVENT HANDLER void Fl_Native_File_Chooser::event_handler( NavEventCallbackMessage callBackSelector, NavCBRecPtr cbparm, void *data) { OSStatus err; Fl_Native_File_Chooser *nfb = (Fl_Native_File_Chooser*)data; switch (callBackSelector) { case kNavCBStart: if ( nfb->directory() || nfb->preset_file() ) { const char *pathname = nfb->directory() ? nfb->directory() : nfb->preset_file(); FSSpec spec; if ( ( err = PathToFSSpec(pathname, spec) ) != noErr ) { fprintf(stderr, "PathToFSSpec(%s) failed: err=%d\n", pathname, (int)err); break; } AEDesc desc; if ((err = AECreateDesc(typeFSS, &spec, sizeof(FSSpec), &desc)) != noErr) { fprintf(stderr, "AECreateDesc() failed: err=%d\n", (int)err); } if ((err = NavCustomControl(cbparm->context, kNavCtlSetLocation, &desc)) != noErr) { fprintf(stderr, "NavCustomControl() failed: err=%d\n", (int)err); } AEDisposeDesc(&desc); } if ( nfb->_btype == BROWSE_SAVE_FILE && nfb->preset_file() ) { CFStringRef namestr = CFStringCreateWithCString(NULL, nfb->preset_file(), kCFStringEncodingASCII); NavDialogSetSaveFileName(cbparm->context, namestr); CFRelease(namestr); } NavCustomControl(cbparm->context, kNavCtlSetActionState, &nfb->_keepstate ); // Select the right filter in pop-up menu if ( nfb->_filt_value == nfb->_filt_total ) { // Select All Documents NavPopupMenuItem kAll = kNavAllFiles; NavCustomControl(cbparm->context, kNavCtlSelectAllType, &kAll); } else if (nfb->_filt_value < nfb->_filt_total) { // Select custom filter nfb->_tempitem.version = kNavMenuItemSpecVersion; nfb->_tempitem.menuCreator = 'extn'; nfb->_tempitem.menuType = nfb->_filt_value; *nfb->_tempitem.menuItemName = '\0'; // needed on 10.3+ NavCustomControl(cbparm->context, kNavCtlSelectCustomType, &(nfb->_tempitem)); } break; case kNavCBPopupMenuSelect: NavMenuItemSpecPtr ptr; // they really buried this one! ptr = (NavMenuItemSpecPtr)cbparm->eventData.eventDataParms.param; if ( ptr->menuCreator ) { // Gets index to filter ( menuCreator = 'extn' ) nfb->_filt_value = ptr->menuType; } else { // All docs filter selected ( menuCreator = '\0\0\0\0' ) nfb->_filt_value = nfb->_filt_total; } break; case kNavCBSelectEntry: NavActionState astate; switch ( nfb->_btype ) { // these don't need selection override case BROWSE_MULTI_FILE: case BROWSE_MULTI_DIRECTORY: case BROWSE_SAVE_FILE: break; // These need to allow only one item, so disable // Open button if user tries to select multiple files case BROWSE_SAVE_DIRECTORY: case BROWSE_DIRECTORY: case BROWSE_FILE: SInt32 selectcount; AECountItems((AEDescList*)cbparm-> eventData.eventDataParms.param, &selectcount); if ( selectcount > 1 ) { NavCustomControl(cbparm->context, kNavCtlSetSelection, NULL); astate = nfb->_keepstate | kNavDontOpenState | kNavDontChooseState; NavCustomControl(cbparm->context, kNavCtlSetActionState, &astate ); } else { astate= nfb->_keepstate | kNavNormalState; NavCustomControl(cbparm->context, kNavCtlSetActionState, &astate ); } break; } break; } } // CONSTRUCTOR Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) { _btype = val; NavGetDefaultDialogCreationOptions(&_opts); _opts.optionFlags |= kNavDontConfirmReplacement; // no confirms for "save as" _options = NO_OPTIONS; _ref = NULL; memset(&_tempitem, 0, sizeof(_tempitem)); _pathnames = NULL; _tpathnames = 0; _title = NULL; _filter = NULL; _filt_names = NULL; memset(_filt_patt, 0, sizeof(char*) * MAXFILTERS); _filt_total = 0; _filt_value = 0; _directory = NULL; _preset_file = NULL; _errmsg = NULL; _keepstate = kNavNormalState; } // DESTRUCTOR Fl_Native_File_Chooser::~Fl_Native_File_Chooser() { // _opts // nothing to manage if (_ref) { NavDialogDispose(_ref); _ref = NULL; } // _options // nothing to manage // _keepstate // nothing to manage // _tempitem // nothing to manage clear_pathnames(); _directory = strfree(_directory); _title = strfree(_title); _preset_file = strfree(_preset_file); _filter = strfree(_filter); //_filt_names // managed by clear_filters() //_filt_patt[i] // managed by clear_filters() //_filt_total // managed by clear_filters() clear_filters(); //_filt_value // nothing to manage _errmsg = strfree(_errmsg); } // SET THE TYPE OF BROWSER void Fl_Native_File_Chooser::type(int val) { _btype = val; } // GET TYPE OF BROWSER int Fl_Native_File_Chooser::type() const { return(_btype); } // SET OPTIONS void Fl_Native_File_Chooser::options(int val) { _options = val; } // GET OPTIONS int Fl_Native_File_Chooser::options() const { return(_options); } // SHOW THE BROWSER WINDOW // Returns: // 0 - user picked a file // 1 - user cancelled // -1 - failed; errmsg() has reason // int Fl_Native_File_Chooser::show() { // Make sure fltk interface updates before posting our dialog Fl::flush(); // BROWSER TITLE CFStringRef cfs_title; cfs_title = CFStringCreateWithCString(NULL, _title ? _title : "No Title", kCFStringEncodingASCII); _opts.windowTitle = cfs_title; _keepstate = kNavNormalState; // BROWSER FILTERS CFArrayRef filter_array = NULL; { // One or more filters specified? if ( _filt_total ) { // NAMES -> CFArrayRef CFStringRef tab = CFSTR("\t"); CFStringRef tmp_cfs; tmp_cfs = CFStringCreateWithCString(NULL, _filt_names, kCFStringEncodingASCII); filter_array = CFStringCreateArrayBySeparatingStrings( NULL, tmp_cfs, tab); CFRelease(tmp_cfs); CFRelease(tab); _opts.popupExtension = filter_array; _opts.optionFlags |= kNavAllFilesInPopup; } else { filter_array = NULL; _opts.popupExtension = NULL; _opts.optionFlags |= kNavAllFilesInPopup; } } // HANDLE OPTIONS WE SUPPORT if ( _options & SAVEAS_CONFIRM ) { _opts.optionFlags &= ~kNavDontConfirmReplacement; // enables confirm } else { _opts.optionFlags |= kNavDontConfirmReplacement; // disables confirm } // POST BROWSER int err = post(); // RELEASE _FILT_ARR if ( filter_array ) CFRelease(filter_array); filter_array = NULL; _opts.popupExtension = NULL; _filt_total = 0; // RELEASE TITLE if ( cfs_title ) CFRelease(cfs_title); cfs_title = NULL; return(err); } // POST BROWSER // Internal use only. // Assumes '_opts' has been initialized. // // Returns: // 0 - user picked a file // 1 - user cancelled // -1 - failed; errmsg() has reason // int Fl_Native_File_Chooser::post() { // INITIALIZE BROWSER OSStatus err; if ( _filt_total == 0 ) { // Make sure they match _filt_value = 0; // TBD: move to someplace more logical? } switch (_btype) { case BROWSE_FILE: case BROWSE_MULTI_FILE: //_keepstate = kNavDontNewFolderState; // Prompt user for one or more files if ((err = NavCreateGetFileDialog( &_opts, // options 0, // file types event_handler, // event handler 0, // preview callback filter_proc_cb, // filter callback (void*)this, // callback data &_ref)) != noErr ) { // dialog ref errmsg("NavCreateGetFileDialog: failed"); return(-1); } break; case BROWSE_DIRECTORY: case BROWSE_MULTI_DIRECTORY: _keepstate = kNavDontNewFolderState; //FALLTHROUGH case BROWSE_SAVE_DIRECTORY: // Prompts user for one or more files or folders if ((err = NavCreateChooseFolderDialog( &_opts, // options event_handler, // event callback 0, // filter callback (void*)this, // callback data &_ref)) != noErr ) { // dialog ref errmsg("NavCreateChooseFolderDialog: failed"); return(-1); } break; case BROWSE_SAVE_FILE: // Prompt user for filename to 'save as' if ((err = NavCreatePutFileDialog( &_opts, // options 0, // file types 0, // file creator event_handler, // event handler (void*)this, // callback data &_ref)) != noErr ) { // dialog ref errmsg("NavCreatePutFileDialog: failed"); return(-1); } break; } // SHOW THE DIALOG if ( ( err = NavDialogRun(_ref) ) != 0 ) { char msg[80]; sprintf(msg, "NavDialogRun: failed (err=%d)", (int)err); errmsg(msg); return(-1); } // WHAT ACTION DID USER CHOOSE? NavUserAction act = NavDialogGetUserAction(_ref); if ( act == kNavUserActionNone ) { errmsg("Nothing happened yet (dialog still open)"); return(-1); } else if ( act == kNavUserActionCancel ) { // user chose 'cancel' return(1); } else if ( act == kNavUserActionSaveAs ) { // user chose 'save as' return(get_saveas_basename(_ref)); } // TOO MANY FILES CHOSEN? int ret = get_pathnames(_ref); if ( _btype == BROWSE_FILE && ret == 0 && _tpathnames != 1 ) { char msg[80]; sprintf(msg, "Expected only one file to be chosen.. you chose %d.", (int)_tpathnames); errmsg(msg); return(-1); } return(err); } // SET ERROR MESSAGE // Internal use only. // void Fl_Native_File_Chooser::errmsg(const char *msg) { _errmsg = strfree(_errmsg); _errmsg = strnew(msg); } // RETURN ERROR MESSAGE const char *Fl_Native_File_Chooser::errmsg() const { return(_errmsg ? _errmsg : "No error"); } // GET FILENAME const char* Fl_Native_File_Chooser::filename() const { if ( _pathnames && _tpathnames > 0 ) return(_pathnames[0]); return(""); } // GET FILENAME FROM LIST OF FILENAMES const char* Fl_Native_File_Chooser::filename(int i) const { if ( _pathnames && i < _tpathnames ) return(_pathnames[i]); return(""); } // GET TOTAL FILENAMES CHOSEN int Fl_Native_File_Chooser::count() const { return(_tpathnames); } // PRESET PATHNAME // Value can be NULL for none. // void Fl_Native_File_Chooser::directory(const char *val) { _directory = strfree(_directory); _directory = strnew(val); } // GET PRESET PATHNAME // Returned value can be NULL if none set. // const char* Fl_Native_File_Chooser::directory() const { return(_directory); } // SET TITLE // Value can be NULL if no title desired. // void Fl_Native_File_Chooser::title(const char *val) { _title = strfree(_title); _title = strnew(val); } // GET TITLE // Returned value can be NULL if none set. // const char *Fl_Native_File_Chooser::title() const { return(_title); } // SET FILTER // Can be NULL if no filter needed // void Fl_Native_File_Chooser::filter(const char *val) { _filter = strfree(_filter); _filter = strnew(val); // Parse filter user specified // IN: _filter = "C Files\t*.{cxx,h}\nText Files\t*.txt" // OUT: _filt_names = "C Files\tText Files" // _filt_patt[0] = "*.{cxx,h}" // _filt_patt[1] = "*.txt" // _filt_total = 2 // parse_filter(_filter); } // GET FILTER // Returned value can be NULL if none set. // const char *Fl_Native_File_Chooser::filter() const { return(_filter); } // CLEAR ALL FILTERS // Internal use only. // void Fl_Native_File_Chooser::clear_filters() { _filt_names = strfree(_filt_names); for (int i=0; i<_filt_total; i++) { _filt_patt[i] = strfree(_filt_patt[i]); } _filt_total = 0; } // PARSE USER'S FILTER SPEC // Parses user specified filter ('in'), // breaks out into _filt_patt[], _filt_names, and _filt_total. // // Handles: // IN: OUT:_filt_names OUT: _filt_patt // ------------------------------------ ------------------ --------------- // "*.{ma,mb}" "*.{ma,mb} Files" "*.{ma,mb}" // "*.[abc]" "*.[abc] Files" "*.[abc]" // "*.txt" "*.txt Files" "*.c" // "C Files\t*.[ch]" "C Files" "*.[ch]" // "C Files\t*.[ch]\nText Files\t*.cxx" "C Files" "*.[ch]" // // Parsing Mode: // IN:"C Files\t*.{cxx,h}" // ||||||| ||||||||| // mode: nnnnnnn wwwwwwwww // \_____/ \_______/ // Name Wildcard // void Fl_Native_File_Chooser::parse_filter(const char *in) { clear_filters(); if ( ! in ) return; int has_name = strchr(in, '\t') ? 1 : 0; char mode = has_name ? 'n' : 'w'; // parse mode: n=title, w=wildcard char wildcard[1024] = ""; // parsed wildcard char name[1024] = ""; // Parse filter user specified for ( ; 1; in++ ) { //// DEBUG //// printf("WORKING ON '%c': mode=<%c> name=<%s> wildcard=<%s>\n", //// *in, mode, name, wildcard); switch (*in) { // FINISHED PARSING NAME? case '\t': if ( mode != 'n' ) goto regchar; mode = 'w'; break; // ESCAPE NEXT CHAR case '\\': ++in; goto regchar; // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS? case '\r': case '\n': case '\0': // TITLE // If user didn't specify a name, make one // if ( name[0] == '\0' ) { sprintf(name, "%.*s Files", (int)sizeof(name)-10, wildcard); } // APPEND NEW FILTER TO LIST if ( wildcard[0] ) { // Add to filtername list // Tab delimit if more than one. We later break // tab delimited string into CFArray with // CFStringCreateArrayBySeparatingStrings() // if ( _filt_total ) { _filt_names = strapp(_filt_names, "\t"); } _filt_names = strapp(_filt_names, name); // Add filter to the pattern array _filt_patt[_filt_total++] = strnew(wildcard); } // RESET wildcard[0] = name[0] = '\0'; mode = strchr(in, '\t') ? 'n' : 'w'; // DONE? if ( *in == '\0' ) return; // done else continue; // not done yet, more filters // Parse all other chars default: // handle all non-special chars regchar: // handle regular char switch ( mode ) { case 'n': chrcat(name, *in); continue; case 'w': chrcat(wildcard, *in); continue; } break; } } //NOTREACHED } // STATIC: FILTER CALLBACK Boolean Fl_Native_File_Chooser::filter_proc_cb(AEDesc *theItem, void *info, void *callBackUD, NavFilterModes filterMode) { return((Fl_Native_File_Chooser*)callBackUD)->filter_proc_cb2( theItem, info, callBackUD, filterMode); } // FILTER CALLBACK // Return true if match, // false if no match. // Boolean Fl_Native_File_Chooser::filter_proc_cb2(AEDesc *theItem, void *info, void *callBackUD, NavFilterModes filterMode) { // All files chosen or no filters if ( _filt_value == _filt_total ) return(true); FSSpec fsspec; char pathname[4096]; // On fail, filter should return true by default if ( AEDescToFSSpec(theItem, &fsspec) != noErr ) { return(true); } FSSpecToPath(fsspec, pathname, sizeof(pathname)-1); if ( fl_filename_isdir(pathname) ) return(true); if ( fl_filename_match(pathname, _filt_patt[_filt_value]) ) return(true); else return(false); } // SET PRESET FILE // Value can be NULL for none. // void Fl_Native_File_Chooser::preset_file(const char* val) { _preset_file = strfree(_preset_file); _preset_file = strnew(val); } // PRESET FILE // Returned value can be NULL if none set. // const char* Fl_Native_File_Chooser::preset_file() { return(_preset_file); } posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/Fl_Native_File_Chooser.cxx0000644000175000017500000000227511041177226027636 0ustar simrunsimrun// // Fl_Native_File_Chooser.cxx -- FLTK native OS file chooser widget // // Copyright 2004 by Greg Ercolano. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Use Windows' chooser #ifdef _WIN32 #include "Fl_Native_File_Chooser_WIN32.cxx" #endif // Use Apple's chooser #ifdef __APPLE__ #include "Fl_Native_File_Chooser_MAC.cxx" #endif // All else falls back to FLTK's own chooser #if ! defined(__APPLE__) && !defined(_WIN32) #include "Fl_Native_File_Chooser_FLTK.cxx" #endif posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/common.cxx0000644000175000017500000000237511041177226024637 0ustar simrunsimrun// COPY A STRING WITH 'new' // Value can be NULL // static char *strnew(const char *val) { if ( val == NULL ) return(NULL); char *s = new char[strlen(val)+1]; strcpy(s, val); return(s); } // FREE STRING CREATED WITH strnew(), NULLS OUT STRING // Value can be NULL // static char *strfree(char *val) { if ( val ) delete [] val; return(NULL); } // 'DYNAMICALLY' APPEND ONE STRING TO ANOTHER // Returns newly allocated string, or NULL // if s && val == NULL. // 's' can be NULL; returns a strnew(val). // 'val' can be NULL; s is returned unmodified. // // Usage: // char *s = strnew("foo"); // s = "foo" // s = strapp(s, "bar"); // s = "foobar" // static char *strapp(char *s, const char *val) { if ( ! val ) { return(s); // Nothing to append? return s } if ( ! s ) { return(strnew(val)); // New string? return copy of val } char *news = new char[strlen(s)+strlen(val)+1]; strcpy(news, s); strcat(news, val); delete [] s; // delete old string return(news); // return new copy } // APPEND A CHARACTER TO A STRING static void chrcat(char *s, char c) { char tmp[2] = { c, '\0' };; strcat(s, tmp); } posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/COPYING0000644000175000017500000006645411041177226023666 0ustar simrunsimrun Fl_Native_File_Chooser License January 25, 2005 The Fl_Native_File_Chooser library and included programs are provided under the terms of the GNU Library General Public License (LGPL) with the following exceptions: 1. Modifications to the Fl_Native_File_Chooser configure script, config header file, and makefiles by themselves to support a specific platform do not constitute a modified or derivative work. The authors do request that such modifications be contributed to the Fl_Native_File_Chooser project - send all contributions to "erco [at] seriss [dot] com". 2. Widgets that are subclassed from Fl_Native_File_Chooser widgets do not constitute a derivative work. 3. Static linking of applications and widgets to the Fl_Native_File_Chooser library does not constitute a derivative work and does not require the author to provide source code for the application or widget, use the shared Fl_Native_File_Chooser libraries, or link their applications or widgets against a user-supplied version of Fl_Native_File_Chooser. If you link the application or widget to a modified version of Fl_Native_File_Chooser, then the changes to Fl_Native_File_Chooser must be provided under the terms of the LGPL in sections 1, 2, and 4. 4. You do not have to provide a copy of the Fl_Native_File_Chooser license with programs that are linked to the Fl_Native_File_Chooser library, nor do you have to identify the Fl_Native_File_Chooser license in your program or documentation as required by section 6 of the LGPL. However, programs must still identify their use of Fl_Native_File_Chooser. The following example statement can be included in user documentation to satisfy this requirement: [program/widget] is based in part on the work of the Fl_Native_File_Chooser project (http://seriss.com/people/erco/fltk/Fl_Native_File_Chooser/) ----------------------------------------------------------------------- GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/README.txt0000644000175000017500000001005211041177226024310 0ustar simrunsimrun===Fl_Native_File_Chooser=== A library to simplify creation of user-friendly file and directory choosers. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // ===LOG=== 2/Apr/2005 took Greg Ercolano's version 0.62, added FLTK support, changed API and added multiple filter selection 4/Apr/2005 Win32 nullncat fix applied, improved input filter checking 9/Apr/2005 a lot of Mac filter work done, yet no setting initial filter 14/Apr/2005 Mac set initial filter, disallow multi-select by disabling 'Choose' button 15/Apr/2005 Win32 disable non-folder locations, got set of initial filter working 20/Apr/2005 Passed event handler to all Mac choosers to fix modal problems, minor Mac tidies 21/Apr/2005 Some minor fixes to Win32 code. Thanks Don! 3/May/2005 Added one line to enable setting selected filter on 10.3 14/May/2005 Added preset_file which enables setting a default filename**, added AWOL ctor on Mac, made FLTK browser (usually***) keep its place 20/July/2005 Made FLTK-side preset_file not apply to directories, since that was weird looking 20/Aug/2005 merged Ian MacArthur's fix and makefile with my current tree. much thanks a.rburgers and Ian for taking the time to create makefiles! 26/Aug/2005 fixed another warning, removed a CFString.h include, thanks again Ian! 30/Aug/2005 fixed another little bug in the Win32 code, thanks Alessandro! 10/Oct/2005 updated documentation 11/Oct/2005 Fixed bug that could return bad value from the FLTK ::filename() method 11/Oct/2005 Fixed nativefc.cxx to include proper file 26/Oct/2005 Modified makefile 27/Oct/2005 fixed missing return in FLTK filename(int) method 27/Oct/2005 shushed signedness warning in _FLTK chooser for loop TBD: ensure Windows code will both compile and run across all platforms ( tested a WinXP-compiled version on Win98 with no trouble ) TBD?: implement multi-folder selection on Win32 if possible TBD?: enable preset selection on Mac OS X open dialogs TBD: try working around ugly inactive filtered OS X items, again* TBD: tidy code if possible (there might be some debug/development leftovers) TBD: make sure errmsg is always set to suitable end-user messages TBD: add a fuller constructor TBD: make sure directory() reports the directory the dialog will display TBD: test, test, test. ===USE=== If you have compiled and installed the FLTK source, you should be able to compile this package using 'make' The package does not install any files, but will build an object file and tester for your platform. Your platform's header file will be copied to Fl_Native_File_Chooser.H To compile into your program, include the header file and link with Fl_Native_File_Chooser.o ===NOTES / KNOWN ISSUES=== OS X: *A glitch in Mac OS X (pre-Tiger) causes only the icons to activate/deactivate after the initial filter selection. The names of files keep their original higlights. A few attempts at a workaround failed, patches welcome! *On OS X, using preset_filename() only works for saving files now. *Some apparent bugs in Apple's Spotlight code cause trouble with the leftmost Spotlight results column: - even when the Native_Chooser is supposed to be allowing only single selection, it is unable to catch multiple selections there - (!) if a directory is picked from that column, the Native_Chooser seems to be told that there were NO PATHNAMES RETURNED FLTK: *If preset_filename() and a NULL directory() is used with the FLTK browser, the cwdir rather than the previous directory will be used This library is almost beta, see the TBD's above. This library may have undiscovered bugs, use at your own risk. I suppose one place for bug reports would be via the fltk.general newsgroup, although this library is not currently an official part of FLTK. Feel free to e-mail me. Enjoy! -natevw (at yahoo dot com) http://homepages.dordt.edu/~nthnlvnd/projects.html posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/FL/0000755000175000017500000000000011041320342023102 5ustar simrunsimrunposterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/FL/Fl_Native_File_Chooser_MAC.H0000644000175000017500000001143511041177226030202 0ustar simrunsimrun// // Fl_Native_File_Chooser_MAC.H -- FLTK native OS file chooser widget // // Copyright 2004 by Greg Ercolano. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // 10 20 30 40 50 60 70 // | | | | | | | // 4567890123456789012345678901234567890123456789012345678901234567890123456789 // OSX-SPECIFIC NATIVE BROWSER #ifdef __APPLE_CC__ #include #else #include #endif #include #define MAXFILTERS 80 class Fl_Native_File_Chooser { public: enum Type { BROWSE_FILE = 0, BROWSE_DIRECTORY, BROWSE_MULTI_FILE, BROWSE_MULTI_DIRECTORY, BROWSE_SAVE_FILE, BROWSE_SAVE_DIRECTORY }; enum Option { NO_OPTIONS = 0x0000, // no options enabled SAVEAS_CONFIRM = 0x0001, // Show native 'Save As' overwrite // confirm dialog (if supported) NEW_FOLDER = 0x0002, // Show 'New Folder' icon // (if supported) PREVIEW = 0x0004, // enable preview mode }; protected: NavDialogCreationOptions _opts; // file navigation options private: int _btype; // kind-of browser to show() int _options; // general options NavDialogRef _ref; // file navigation reference NavActionState _keepstate; // holds button permissions NavMenuItemSpec _tempitem; // Popup menu selection char **_pathnames; // array of pathnames int _tpathnames; // total pathnames char *_directory; // default pathname to use char *_title; // title for window char *_preset_file; // the 'save as' filename char *_filter; // user-side search filter, eg: // C Files\t*.[ch]\nText Files\t*.txt" char *_filt_names; // filter names (tab delimited) // eg. "C Files\tText Files" char *_filt_patt[MAXFILTERS]; // array of filter patterns, eg: // _filt_patt[0]="*.{cxx,h}" // _filt_patt[1]="*.txt" int _filt_total; // parse_filter() # of filters loaded int _filt_value; // index of the selected filter char *_errmsg; // error message // PRIVATE CLASS TO HANDLE NAVIGATION DIALOG REPLY STRUCT // Class-ified, mainly to ensure proper cleanup. // class NavReply { int _valid_reply; NavReplyRecord _reply; public: NavReply(); ~NavReply(); int get_reply(NavDialogRef& ref); int get_saveas_basename(char *s, int slen); int get_dirname(char *s, int slen); int get_pathnames(char **&pathnames, int& tpathnames); }; // Private methods void errmsg(const char *msg); void clear_pathnames(); void set_single_pathname(const char *s); int get_saveas_basename(NavDialogRef& ref); int get_pathnames(NavDialogRef& ref); static void event_handler(NavEventCallbackMessage callBackSelector, NavCBRecPtr cbparm, void *data); void clear_filters(); void add_filter(const char *, const char *); void parse_filter(const char *from); static Boolean filter_proc_cb(AEDesc *, void *, void *, NavFilterModes); Boolean filter_proc_cb2(AEDesc*, void*, void*, NavFilterModes); int post(); public: Fl_Native_File_Chooser(int val = BROWSE_FILE); ~Fl_Native_File_Chooser(); // Public methods void type(int); int type() const; void options(int); int options() const; int count() const; const char *filename() const; const char *filename(int i) const; void directory(const char *); const char *directory() const; void title(const char *); const char *title() const; const char *filter() const; void filter(const char *); void filter_value(int i) { _filt_value = i; } int filter_value() { return(_filt_value); } int filters() { return(_filt_total); } void preset_file(const char *); const char *preset_file(); const char *errmsg() const; int show(); }; posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/FL/Fl_Native_File_Chooser_WIN32.H0000644000175000017500000000745011041177226030406 0ustar simrunsimrun// // Fl_Native_File_Chooser_WINDOWS.H -- FLTK native OS file chooser widget // // Copyright 2004 by Greg Ercolano. // April 2005 - API changes, improved filter processing by Nathan Vander Wilt // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // #ifndef _FL_NATIVE_FILE_BROWSER_H #define _FL_NATIVE_FILE_BROWSER_H // #define _WIN32_WINNT 0x0501 // needed for OPENFILENAME's 'FlagsEx' #include #include // malloc #include #include // OPENFILENAME, GetOpenFileName() #include // BROWSEINFO, SHBrowseForFolder() #define MAXFILTERS 80 class Fl_Native_File_Chooser { public: enum Type { BROWSE_FILE = 0, BROWSE_DIRECTORY, BROWSE_MULTI_FILE, BROWSE_MULTI_DIRECTORY, BROWSE_SAVE_FILE, BROWSE_SAVE_DIRECTORY }; enum Option { NO_OPTIONS = 0x0000, // no options enabled SAVEAS_CONFIRM = 0x0001, // Show native 'Save As' overwrite // confirm dialog (if supported) NEW_FOLDER = 0x0002, // Show 'New Folder' icon // (if supported) PREVIEW = 0x0004, // enable preview mode }; private: int _btype; // kind-of browser to show() int _options; // general options OPENFILENAME _ofn; // GetOpenFileName() & GetSaveFileName() struct BROWSEINFO _binf; // SHBrowseForFolder() struct char **_pathnames; // array of pathnames int _tpathnames; // total pathnames char *_directory; // default pathname to use char *_title; // title for window char *_filter; // user-side search filter char *_parsedfilt; // filter parsed for Windows dialog int _nfilters; // number of filters parse_filter counted char *_preset_file; // the file to preselect char *_errmsg; // error message // Private methods void errmsg(const char *msg); void clear_pathnames(); void set_single_pathname(const char *s); void add_pathname(const char *s); void FreePIDL(ITEMIDLIST *pidl); void ClearOFN(); void ClearBINF(); void Win2Unix(char *s); void Unix2Win(char *s); int showfile(); static int CALLBACK Dir_CB(HWND win, UINT msg, LPARAM param, LPARAM data); int showdir(); void parse_filter(const char *); void clear_filters(); void add_filter(const char *, const char *); public: Fl_Native_File_Chooser(int val = BROWSE_FILE); ~Fl_Native_File_Chooser(); // Public methods void type(int val); int type() const; void options(int); int options() const; int count() const; const char *filename() const; const char *filename(int i) const; void directory(const char *val); const char *directory() const; void title(const char *val); const char *title() const; const char *filter() const; void filter(const char *val); int filters() const { return _nfilters; } void filter_value(int i); int filter_value() const; void preset_file(const char *); const char *preset_file() const; const char *errmsg() const; int show(); }; #endif /*_FL_NATIVE_FILE_BROWSER_H*/ posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/FL/Fl_Native_File_Chooser.H0000644000175000017500000000245111041177226027520 0ustar simrunsimrun// // Fl_Native_File_Chooser.H -- FLTK native OS file chooser widget // // Copyright 2004 by Greg Ercolano. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // #ifndef FL_NATIVE_FILE_CHOOSER_H #define FL_NATIVE_FILE_CHOOSER_H // Use Windows' chooser #ifdef _WIN32 #include #endif // Use Apple's chooser #ifdef __APPLE__ #include #endif // All else falls back to FLTK's own chooser #if ! defined(__APPLE__) && !defined(_WIN32) #include #endif #endif /*FL_NATIVE_FILE_CHOOSER_H*/ posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/FL/Fl_Native_File_Chooser_FLTK.H0000644000175000017500000000542411041177226030343 0ustar simrunsimrun// // Fl_Native_File_Chooser_DEFAULT.H -- FLTK native OS file chooser widget // // Copyright 2005 by Nathan Vander Wilt. // March 2005 - wrapper around Fl_File_Chooser // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Use FLTK BROWSER #include #include class Fl_Native_File_Chooser { public: enum Type { BROWSE_FILE = 0, BROWSE_DIRECTORY, BROWSE_MULTI_FILE, BROWSE_MULTI_DIRECTORY, BROWSE_SAVE_FILE, BROWSE_SAVE_DIRECTORY }; enum Option { NO_OPTIONS = 0x0000, // no options enabled SAVEAS_CONFIRM = 0x0001, // Show native 'Save As' overwrite // confirm dialog (if supported) NEW_FOLDER = 0x0002, // Show 'New Folder' icon // (if supported) PREVIEW = 0x0004, // enable preview mode }; private: int _btype; // kind-of browser to show() int _options; // general options char *_filter; // user supplied filter char *_parsedfilt; // parsed filter int _filtvalue; // selected filter char *_preset_file; char *_prevvalue; // Returned filename char *_directory; char *_errmsg; // error message Fl_File_Chooser *file_chooser; int _nfilters; // Private methods void errmsg(const char *msg); int type_fl_file(int); void parse_filter(); void keeplocation(); public: Fl_Native_File_Chooser(int val=BROWSE_FILE); ~Fl_Native_File_Chooser(); // Public methods void type(int); int type() const; void options(int); int options() const; int count() const; const char *filename() const; const char *filename(int i) const; void directory(const char *val); const char *directory() const; void title(const char *); const char* title() const; const char *filter() const; void filter(const char *); int filters() const { return(_nfilters); } void filter_value(int i); int filter_value() const; void preset_file(const char*); const char* preset_file() const; const char *errmsg() const; int show(); }; posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/CREDITS0000644000175000017500000000025011041177226023631 0ustar simrunsimrunGreg Ercolano -- initial version for mac/win32 Ian MacArthur -- various fixes, additions Nathan Vander Wilt -- filter code for WIN32 and Mac, FLTK chooser posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/Fl_Native_File_Chooser_WIN32.cxx0000644000175000017500000005377111041177226030527 0ustar simrunsimrun// // Fl_Native_File_Chooser_WINDOWS.cxx -- FLTK native OS file chooser widget // // Copyright 2004 by Greg Ercolano. // April 2005 - API changes, improved filter processing by Nathan Vander Wilt // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Please keep code 80 column compliant. // // 10 20 30 40 50 60 70 // | | | | | | | // 4567890123456789012345678901234567890123456789012345678901234567890123456789 // // http://www.codeproject.com/dialog/selectfolder.asp - any application to multi-folder implementation? #include #include // debugging #include "common.cxx" // strnew/strfree/strapp/chrcat #define LCURLY_CHR '{' #define RCURLY_CHR '}' #define LBRACKET_CHR '[' #define RBRACKET_CHR ']' // STATIC: PRINT WINDOWS 'DOUBLE NULL' STRING (DEBUG) static void dnullprint(char *wp) { if ( ! wp ) return; for ( int t=0; true; t++ ) { if ( wp[t] == '\0' && wp[t+1] == '\0' ) { printf("\\0\\0"); fflush(stdout); return; } else if ( wp[t] == '\0' ) { printf("\\0"); } else { printf("%c",wp[t]); } } } // RETURN LENGTH OF DOUBLENULL STRING // Includes single nulls in count, excludes trailing doublenull. // // 1234 567 // |||/\||| // IN: "one\0two\0\0" // OUT: 7 // static int dnulllen(const char *wp) { int len = 0; while ( ! ( *(wp+0) == 0 && *(wp+1) == 0 ) ) { ++wp; ++len; } return(len); } // STATIC: Append a string to another, leaving terminated with DOUBLE NULL. // Automatically handles extending length of string. // wp can be NULL (a new wp will be allocated and initialized). // string must be NULL terminated. // The pointer wp may be modified on return. // static void dnullcat(char*&wp, const char *string, int n = -1 ) { //DEBUG printf("DEBUG: dnullcat IN: <"); dnullprint(wp); printf(">\n"); int inlen = ( n < 0 ) ? strlen(string) : n; if ( ! wp ) { wp = new char[inlen + 4]; *(wp+0) = '\0'; *(wp+1) = '\0'; } else { int wplen = dnulllen(wp); // Make copy of wp into larger buffer char *tmp = new char[wplen + inlen + 4]; memcpy(tmp, wp, wplen+2); // copy of wp plus doublenull delete [] wp; // delete old wp wp = tmp; // use new copy //DEBUG printf("DEBUG: dnullcat COPY: <"); dnullprint(wp); printf("> (wplen=%d)\n", wplen); } // Find end of double null string // *wp2 is left pointing at second null. // char *wp2 = wp; if ( *(wp2+0) != '\0' && *(wp2+1) != '\0' ) { for ( ; 1; wp2++ ) if ( *(wp2+0) == '\0' && *(wp2+1) == '\0' ) { wp2++; break; } } if ( n == -1 ) n = strlen(string); strncpy(wp2, string, n); // Leave string double-null terminated *(wp2+n+0) = '\0'; *(wp2+n+1) = '\0'; //DEBUG printf("DEBUG: dnullcat OUT: <"); dnullprint(wp); printf(">\n\n"); } // CTOR Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) { _btype = val; _options = NO_OPTIONS; memset((void*)&_ofn, 0, sizeof(OPENFILENAME)); _ofn.lStructSize = sizeof(OPENFILENAME); _ofn.hwndOwner = NULL; memset((void*)&_binf, 0, sizeof(BROWSEINFO)); _pathnames = NULL; _tpathnames = 0; _directory = NULL; _title = NULL; _filter = NULL; _parsedfilt = NULL; _nfilters = 0; _preset_file = NULL; _errmsg = NULL; } // DTOR Fl_Native_File_Chooser::~Fl_Native_File_Chooser() { //_pathnames // managed by clear_pathnames() //_tpathnames // managed by clear_pathnames() _directory = strfree(_directory); _title = strfree(_title); _filter = strfree(_filter); //_parsedfilt // managed by clear_filters() //_nfilters // managed by clear_filters() _preset_file = strfree(_preset_file); _errmsg = strfree(_errmsg); clear_filters(); clear_pathnames(); ClearOFN(); ClearBINF(); } // SET TYPE OF BROWSER void Fl_Native_File_Chooser::type(int val) { _btype = val; } // GET TYPE OF BROWSER int Fl_Native_File_Chooser::type() const { return( _btype ); } // SET OPTIONS void Fl_Native_File_Chooser::options(int val) { _options = val; } // GET OPTIONS int Fl_Native_File_Chooser::options() const { return(_options); } // PRIVATE: SET ERROR MESSAGE void Fl_Native_File_Chooser::errmsg(const char *val) { _errmsg = strfree(_errmsg); _errmsg = strnew(val); } // FREE PATHNAMES ARRAY, IF IT HAS ANY CONTENTS void Fl_Native_File_Chooser::clear_pathnames() { if ( _pathnames ) { while ( --_tpathnames >= 0 ) { _pathnames[_tpathnames] = strfree(_pathnames[_tpathnames]); } delete [] _pathnames; _pathnames = NULL; } _tpathnames = 0; } // SET A SINGLE PATHNAME void Fl_Native_File_Chooser::set_single_pathname(const char *s) { clear_pathnames(); _pathnames = new char*[1]; _pathnames[0] = strnew(s); _tpathnames = 1; } // ADD PATHNAME TO EXISTING ARRAY void Fl_Native_File_Chooser::add_pathname(const char *s) { if ( ! _pathnames ) { // Create first element in array ++_tpathnames; _pathnames = new char*[_tpathnames]; } else { // Grow array by 1 char **tmp = new char*[_tpathnames+1]; // create new buffer memcpy((void*)tmp, (void*)_pathnames, sizeof(char*)*_tpathnames); // copy old delete [] _pathnames; // delete old _pathnames = tmp; // use new ++_tpathnames; } _pathnames[_tpathnames-1] = strnew(s); } // FREE A PIDL (Pointer to IDentity List) void Fl_Native_File_Chooser::FreePIDL(ITEMIDLIST *pidl) { IMalloc *imalloc = NULL; if ( SUCCEEDED(SHGetMalloc(&imalloc)) ) { imalloc->Free(pidl); imalloc->Release(); imalloc = NULL; } } // CLEAR MICROSOFT OFN (OPEN FILE NAME) CLASS void Fl_Native_File_Chooser::ClearOFN() { int temp; // Free any previously allocated lpstrFile before zeroing out _ofn if ( _ofn.lpstrFile ) { _ofn.lpstrFile = strfree((char*)_ofn.lpstrFile); } if ( _ofn.lpstrInitialDir ) { _ofn.lpstrInitialDir = (LPCSTR)strfree((char*)_ofn.lpstrInitialDir); } if ( _ofn.lpstrFile ) { _ofn.lpstrFile = strfree(_ofn.lpstrFile); } _ofn.lpstrFilter = NULL; // (deleted elsewhere) temp = _ofn.nFilterIndex; // keep the filter_value memset((void*)&_ofn, 0, sizeof(_ofn)); _ofn.lStructSize = sizeof(OPENFILENAME); _ofn.nFilterIndex = temp; } // CLEAR MICROSOFT BINF (BROWSER INFO) CLASS void Fl_Native_File_Chooser::ClearBINF() { if ( _binf.pidlRoot ) { FreePIDL((ITEMIDLIST*)_binf.pidlRoot); _binf.pidlRoot = NULL; } memset((void*)&_binf, 0, sizeof(_binf)); } // CONVERT WINDOWS BACKSLASHES TO UNIX FRONTSLASHES void Fl_Native_File_Chooser::Win2Unix(char *s) { for ( ; *s; s++ ) if ( *s == '\\' ) *s = '/'; } // CONVERT UNIX FRONTSLASHES TO WINDOWS BACKSLASHES void Fl_Native_File_Chooser::Unix2Win(char *s) { for ( ; *s; s++ ) if ( *s == '/' ) *s = '\\'; } // SHOW FILE BROWSER int Fl_Native_File_Chooser::showfile() { ClearOFN(); clear_pathnames(); size_t fsize = 2048; _ofn.Flags |= OFN_NOVALIDATE; // prevent disabling of front slashes _ofn.Flags |= OFN_HIDEREADONLY; // hide goofy readonly flag // USE NEW BROWSER _ofn.Flags |= OFN_EXPLORER; // use newer explorer windows // // USE OLD BROWSER // _ofn.lpfnHook = MyHook; // _ofn.Flags |= OFN_ENABLEHOOK; switch ( _btype ) { case BROWSE_DIRECTORY: case BROWSE_MULTI_DIRECTORY: case BROWSE_SAVE_DIRECTORY: abort(); // never happens: handled by showdir() case BROWSE_FILE: fsize = 65536; // XXX: there must be a better way break; case BROWSE_MULTI_FILE: _ofn.Flags |= OFN_ALLOWMULTISELECT; fsize = 65536; // XXX: there must be a better way break; case BROWSE_SAVE_FILE: // TBD break; } // SPACE FOR RETURNED FILENAME _ofn.lpstrFile = new char[fsize]; _ofn.nMaxFile = fsize-1; _ofn.lpstrFile[0] = '\0'; if (_preset_file) { sprintf(_ofn.lpstrFile, "%.*s", _ofn.nMaxFile, _preset_file); } // PARENT WINDOW _ofn.hwndOwner = GetForegroundWindow(); // DIALOG TITLE _ofn.lpstrTitle = _title ? _title : NULL; // FILTER _ofn.lpstrFilter = _parsedfilt ? _parsedfilt : NULL; // PRESET FILE // If set, supercedes _directory. See KB Q86920 for details // if ( _preset_file ) { int len = strlen(_preset_file); char *strfile = new char[MAX_PATH]; // as per KB 222003 >8( strcpy(strfile, _preset_file); strfile[len+0] = '\0'; // (multiselect needs dnull) strfile[len+1] = '\0'; Unix2Win(strfile); _ofn.lpstrFile = strfile; _ofn.nMaxFile = MAX_PATH; // as per KB 222003 >8( } else { // PRESET DIR // XXX: See KB Q86920 for doc bug: // http://support.microsoft.com/default.aspx?scid=kb;en-us;86920 // if ( _directory ) { _ofn.lpstrInitialDir = strnew(_directory); Unix2Win((char*)_ofn.lpstrInitialDir); } } // OPEN THE DIALOG WINDOW int err; if ( _btype == BROWSE_SAVE_FILE ) { err = GetSaveFileName(&_ofn); } else { err = GetOpenFileName(&_ofn); } if ( err == 0 ) { // EXTENDED ERROR CHECK int err = CommDlgExtendedError(); // CANCEL? if ( err == 0 ) return(1); // user hit 'cancel' // AN ERROR OCCURRED char msg[80]; sprintf(msg, "CommDlgExtendedError() code=%d", err); errmsg(msg); return(-1); } // PREPARE PATHNAMES FOR RETURN switch ( _btype ) { case BROWSE_FILE: case BROWSE_SAVE_FILE: set_single_pathname(_ofn.lpstrFile); Win2Unix(_pathnames[_tpathnames-1]); break; case BROWSE_MULTI_FILE: { // EXTRACT MULTIPLE FILENAMES const char *dirname = _ofn.lpstrFile; int dirlen = strlen(dirname); if ( dirlen > 0 ) { char pathname[2048]; // WALK STRING SEARCHING FOR 'DOUBLE-NULL' // eg. "/dir/name\0foo1\0foo2\0foo3\0\0" // for ( const char *s = _ofn.lpstrFile + dirlen + 1; *s; s+= (strlen(s)+1)) { strcpy(pathname, dirname); strcat(pathname, "\\"); strcat(pathname, s); add_pathname(pathname); Win2Unix(_pathnames[_tpathnames-1]); } } // XXX // Work around problem where pasted forward-slash pathname // into the file browser causes new "Explorer" interface // not to grok forward slashes, passing back as a 'filename'..! // if ( _tpathnames == 0 ) { add_pathname(dirname); Win2Unix(_pathnames[_tpathnames-1]); } break; } case BROWSE_DIRECTORY: case BROWSE_MULTI_DIRECTORY: case BROWSE_SAVE_DIRECTORY: abort(); // not here } return(0); } // Used by SHBrowseForFolder(), sets initial selected dir. // Ref: Usenet: microsoft.public.vc.mfc, Dec 8 2000, 1:38p David Lowndes // Subject: How to specify to select an initial folder .." // int CALLBACK Fl_Native_File_Chooser::Dir_CB(HWND win, UINT msg, LPARAM param, LPARAM data) { switch (msg) { case BFFM_INITIALIZED: if (data) ::SendMessage(win, BFFM_SETSELECTION, TRUE, data); break; case BFFM_SELCHANGED: TCHAR path[MAX_PATH]; if ( SHGetPathFromIDList((ITEMIDLIST*)param, path) ) { ::SendMessage(win, BFFM_ENABLEOK, 0, 1); } else { //disable ok button if not a path ::SendMessage(win, BFFM_ENABLEOK, 0, 0); } break; case BFFM_VALIDATEFAILED: // we could pop up an annoying message here. // also needs set ulFlags |= BIF_VALIDATE break; default: break; } return(0); } // SHOW DIRECTORY BROWSER int Fl_Native_File_Chooser::showdir() { OleInitialize(NULL); // init needed by BIF_USENEWUI ClearBINF(); clear_pathnames(); // PARENT WINDOW _binf.hwndOwner = GetForegroundWindow(); // DIALOG TITLE _binf.lpszTitle = _title ? _title : NULL; // FLAGS _binf.ulFlags =0; // initialize // TBD: make sure matches to runtime system, if need be. //( what if _WIN32_IE doesn't match system? does the program not run? ) // TBD: match all 3 types of directories #if defined(BIF_NONEWFOLDERBUTTON) // Version 6.0 if ( _btype == BROWSE_DIRECTORY ) _binf.ulFlags |= BIF_NONEWFOLDERBUTTON; _binf.ulFlags |= BIF_USENEWUI | BIF_SHAREABLE | BIF_RETURNONLYFSDIRS; #elif defined(BIF_USENEWUI) // Version 5.0 if ( _btype == BROWSE_DIRECTORY ) _binf.ulFlags |= BIF_EDITBOX; else if ( _btype == BROWSE_SAVE_DIRECTORY ) _binf.ulFlags |= BIF_USENEWUI; _binf.ulFlags |= BIF_SHAREABLE | BIF_RETURNONLYFSDIRS; #elif defined(BIF_EDITBOX) // Version 4.71 _binf.ulFlags |= BIF_RETURNONLYFSDIRS | BIF_EDITBOX; #else // Version Old _binf.ulFlags |= BIF_RETURNONLYFSDIRS; #endif // BUFFER char displayname[MAX_PATH]; _binf.pszDisplayName = displayname; // PRESET DIR char presetname[MAX_PATH]; if ( _directory ) { strcpy(presetname, _directory); Unix2Win(presetname); _binf.lParam = (LPARAM)presetname; } else _binf.lParam = 0; _binf.lpfn = Dir_CB; // OPEN BROWSER ITEMIDLIST *pidl = SHBrowseForFolder(&_binf); // CANCEL? if ( pidl == NULL ) return(1); // GET THE PATHNAME(S) THE USER SELECTED // TBD: expand NetHood shortcuts from this PIDL?? // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shbrowseforfolder.asp TCHAR path[MAX_PATH]; if ( SHGetPathFromIDList(pidl, path) ) { Win2Unix(path); add_pathname(path); } FreePIDL(pidl); if ( !strlen(path) ) return(1); // don't return empty pathnames return(0); } // RETURNS: // 0 - user picked a file // 1 - user cancelled // -1 - failed; errmsg() has reason // int Fl_Native_File_Chooser::show() { if ( _btype == BROWSE_DIRECTORY || _btype == BROWSE_MULTI_DIRECTORY || _btype == BROWSE_SAVE_DIRECTORY ) return(showdir()); else return(showfile()); } // RETURN ERROR MESSAGE const char *Fl_Native_File_Chooser::errmsg() const { return(_errmsg ? _errmsg : "No error"); } // GET FILENAME const char* Fl_Native_File_Chooser::filename() const { if ( _pathnames && _tpathnames > 0 ) return(_pathnames[0]); return(""); } // GET FILENAME FROM LIST OF FILENAMES const char* Fl_Native_File_Chooser::filename(int i) const { if ( _pathnames && i < _tpathnames ) return(_pathnames[i]); return(""); } // GET TOTAL FILENAMES CHOSEN int Fl_Native_File_Chooser::count() const { return(_tpathnames); } // PRESET PATHNAME // Can be NULL if no preset is desired. // void Fl_Native_File_Chooser::directory(const char *val) { _directory = strfree(_directory); _directory = strnew(val); } // GET PRESET PATHNAME // Can return NULL if none set. // const char *Fl_Native_File_Chooser::directory() const { return(_directory); } // SET TITLE // Can be NULL if no title desired. // void Fl_Native_File_Chooser::title(const char *val) { _title = strfree(_title); _title = strnew(val); } // GET TITLE // Can return NULL if none set. // const char *Fl_Native_File_Chooser::title() const { return(_title); } // SET FILTER // Can be NULL if no filter needed // void Fl_Native_File_Chooser::filter(const char *val) { _filter = strfree(_filter); clear_filters(); if ( val ) { _filter = strnew(val); parse_filter(_filter); } add_filter("All Files", "*.*"); // always include 'all files' option #ifdef DEBUG nullprint(_parsedfilt); #endif /*DEBUG*/ } // GET FILTER // Can return NULL if none set. // const char *Fl_Native_File_Chooser::filter() const { return(_filter); } // CLEAR FILTERS void Fl_Native_File_Chooser::clear_filters() { _nfilters = 0; _parsedfilt = strfree(_parsedfilt); } // ADD A FILTER void Fl_Native_File_Chooser::add_filter( const char *name_in, // name of filter (optional: can be null) const char *winfilter // windows style filter (eg. "*.cxx;*.h") ) { // No name? Make one.. char name[1024]; if ( !name_in || name_in[0] == '\0' ) { sprintf(name, "%.*s Files", sizeof(name)-10, winfilter); } else { sprintf(name, "%.*s", sizeof(name)-10, name_in); } dnullcat(_parsedfilt, name); dnullcat(_parsedfilt, winfilter); //DEBUG printf("DEBUG: ADD FILTER name=<%s> winfilter=<%s>\n", name, winfilter); } // CONVERT FLTK STYLE PATTERN MATCHES TO WINDOWS 'DOUBLENULL' PATTERN // Handles: // IN OUT // ----------- ----------------------------- // *.{ma,mb} "*.{ma,mb} Files\0*.ma;*.mb\0\0" // *.[abc] "*.[abc] Files\0*.a;*.b;*.c\0\0" // *.txt "*.txt Files\0*.txt\0\0" // C Files\t*.[ch] "C Files\0*.c;*.h\0\0" // // Example: // IN: "*.{ma,mb}" // OUT: "*.ma;*.mb Files\0*.ma;*.mb\0All Files\0*.*\0\0" // --------------- --------- --------- --- // | | | | // Title Wildcards Title Wildcards // // Parsing Mode: // IN:"C Files\t*.{cxx,h}" // ||||||| ||||||||| // mode: nnnnnnn ww{{{{{{{ // \_____/ \_______/ // Name Wildcard // void Fl_Native_File_Chooser::parse_filter(const char *in) { clear_filters(); if ( ! in ) return; int has_name = strchr(in, '\t') ? 1 : 0; const char *savein = in; char mode = has_name ? 'n' : 'w'; // parse mode: n=name, w=wildcard int nwildcards = 0; char wildcards[MAXFILTERS][1024]; // parsed wildcards (can be several) char wildprefix[512] = ""; char name[512] = ""; // Init int t; for ( t=0; t name=<%s> wildprefix=<%s> nwildcards=%d wildcards[n]=<%s>\n", //// *in, mode, name, wildprefix, nwildcards, wildcards[nwildcards]); switch (*in) { case ',': case '|': if ( mode == LCURLY_CHR ) { // create new wildcard, copy in prefix strcat(wildcards[nwildcards++], wildprefix); continue; } else { goto regchar; } continue; // FINISHED PARSING A NAME? case '\t': if ( mode != 'n' ) goto regchar; // finish parsing name? switch to wildcard mode mode = 'w'; break; // ESCAPE NEXT CHAR case '\\': ++in; goto regchar; // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS? case '\r': case '\n': case '\0': { if ( mode == 'w' ) { // finished parsing wildcard? if ( nwildcards == 0 ) { strcpy(wildcards[nwildcards++], wildprefix); } // Append wildcards in Microsoft's "*.one;*.two" format char comp[4096] = ""; for ( t=0; t 0 ) { chrcat(wildcards[nwildcards-1], *in); } continue; case 'n': chrcat(name, *in); continue; case 'w': chrcat(wildprefix, *in); for ( t=0; t WIN32 o Mods to getcwd() macros in test-browser.cxx for MINGW o Tar forces owner/group to 0/0, fixed perms on images dir 0.83a -- 01/06/2006 erco: small patches from Ian ------------------------------------------------ o Makefile.fltkconfig patch o Enforce correct perms on files in tar file 0.83 -- 12/06/2005 erco: misc ----------------------------------------------- o Windows: Added preset_file() support o Linux: missing filters() method o All: Added options() to API, removed macosx_*() o Added options() to the API with flags: o NEW_FOLDER o PREVIEW o SAVEAS_CONFIRM o Removed macosx_*() stuff -- bad idea 0.82 -- 12/05/2005 erco: misc fixes after merge ----------------------------------------------- o win32 filter fixes for Alessandro's 11/29 report o Rellocated Macos reference links from code to REFERENCE-MAC.txt o Made sure all #ifdefs use _WIN32 instead of other variants. o Fixed problem with FLTK chooser not showing its icons (natevw) o Added macosx_*() platform specific accessors TODO: See ./TODO for outstanding items 0.81 -- 11/28/2005 erco: linux version cleanup ---------------------------------------------- o Support documented filters o free/strdup -> new/delete o added #ifndef at top of FL/Fl_Native_File_Chooser.H to prevent recursion 0.80 -- 11/27/2005 erco+nate: code merge, cleanup ------------------------------------------------- o Merge in Nathan's changes o Updated docs for all changes noted here o Rewrote mac's filter code to support old "*.a" and new "Desc1\t*.a\nDesc2\t*.b" syntax o Changed Nathan's set_filter() -> filter_value() (consistent with FLTK's own chooser) o Renamed test program to test-browser.cxx o Code cleanup: variable + method naming, 80 column conformance, indents, strdup/malloc -> new TODO: Linux version needs code cleanup (strdup -> new, etc) 0.70 -- 08/04/05 erco: general cleanup -------------------------------------- o Implemented Linux. This was easy -- just use Fl_File_Chooser. o Removed references to non-existant size() method from docs; the correct method name is total_filenames() 0.62 -- 02/02/2005 ------------------ o Added Ian's mods to main.cxx to use getcwd() instead of fixed path o Added #include/#define's to support getcwd() under Windows VS 0.61 -- 01/26/2005 ------------------ o Applied Ian MacArthur's 01/26/2005 fixes, and Makefile.fltkconfig, including tab fixes and line 90 .obj -> .o fix. o Enabled /Wall on Windows VS7.x, and fixed all problems related to Fl_Native* (mainly, ctor type value was being ignored) posterazor-1.5.1/src/thirdparty/Fl_Native_File_Chooser/Fl_Native_File_Chooser_FLTK.cxx0000644000175000017500000002326211041177226030455 0ustar simrunsimrun// // Fl_Native_File_Chooser_DEFAULT.cxx -- FLTK native OS file chooser widget // March 2005 - wrapper around Fl_File_Chooser by natevw // // Copyright 2005 by Nathan Vander Wilt. // // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Library General Public // License as published by the Free Software Foundation; either // version 2 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Library General Public License for more details. // // You should have received a copy of the GNU Library General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 // USA. // // Please keep code 80 column compliant. // // 10 20 30 40 50 60 70 // | | | | | | | // 4567890123456789012345678901234567890123456789012345678901234567890123456789 // #include #include #include "common.cxx" static int G_init = 0; // 'first time' initialize flag // CTOR Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) { if ( G_init == 0 ) { // Initialize when instanced for first time Fl_File_Icon::load_system_icons(); // OK to call more than once G_init = 1; // eg. if app already called from main() } _btype = val; _options = NO_OPTIONS; _filter = NULL; _parsedfilt = NULL; _preset_file = NULL; _prevvalue = NULL; _directory = NULL; _errmsg = NULL; file_chooser = new Fl_File_Chooser(NULL, NULL, 0, NULL); type(val); // do this after file_chooser created _nfilters = 0; } // DTOR Fl_Native_File_Chooser::~Fl_Native_File_Chooser() { delete file_chooser; _filter = strfree(_filter); _parsedfilt = strfree(_parsedfilt); _preset_file = strfree(_preset_file); _prevvalue = strfree(_prevvalue); _directory = strfree(_directory); _errmsg = strfree(_errmsg); } // PRIVATE: SET ERROR MESSAGE void Fl_Native_File_Chooser::errmsg(const char *msg) { _errmsg = strfree(_errmsg); _errmsg = strnew(msg); } // PRIVATE: translate Native types to Fl_File_Chooser types int Fl_Native_File_Chooser::type_fl_file(int val) { switch (val) { case BROWSE_FILE: return(Fl_File_Chooser::SINGLE); case BROWSE_DIRECTORY: return(Fl_File_Chooser::SINGLE | Fl_File_Chooser::DIRECTORY); case BROWSE_MULTI_FILE: return(Fl_File_Chooser::MULTI); case BROWSE_MULTI_DIRECTORY: return(Fl_File_Chooser::DIRECTORY | Fl_File_Chooser::MULTI); case BROWSE_SAVE_FILE: return(Fl_File_Chooser::SINGLE | Fl_File_Chooser::CREATE); case BROWSE_SAVE_DIRECTORY: return(Fl_File_Chooser::DIRECTORY | Fl_File_Chooser::SINGLE | Fl_File_Chooser::CREATE); default: return(Fl_File_Chooser::SINGLE); } } void Fl_Native_File_Chooser::type(int val) { _btype = val; file_chooser->type(type_fl_file(val)); } int Fl_Native_File_Chooser::type() const { return(_btype); } // SET OPTIONS void Fl_Native_File_Chooser::options(int val) { _options = val; } // GET OPTIONS int Fl_Native_File_Chooser::options() const { return(_options); } // Show chooser, blocks until done. // RETURNS: // 0 - user picked a file // 1 - user cancelled // -1 - failed; errmsg() has reason // int Fl_Native_File_Chooser::show() { // FILTER if ( _parsedfilt ) { file_chooser->filter(_parsedfilt); } // FILTER VALUE // Set this /after/ setting the filter // file_chooser->filter_value(_filtvalue); // DIRECTORY if ( _directory && _directory[0] ) { file_chooser->directory(_directory); } else { file_chooser->directory(_prevvalue); } // PRESET FILE if ( _preset_file ) { file_chooser->value(_preset_file); } // OPTIONS: PREVIEW file_chooser->preview( (options() & PREVIEW) ? 1 : 0); // OPTIONS: NEW FOLDER if ( options() & NEW_FOLDER ) file_chooser->type(file_chooser->type() | Fl_File_Chooser::CREATE); // on // SHOW file_chooser->show(); while ( file_chooser->shown() ) { Fl::wait(); // block while shown } if ( file_chooser->value() && file_chooser->value()[0] ) { _prevvalue = strfree(_prevvalue); _prevvalue = strnew(file_chooser->value()); _filtvalue = file_chooser->filter_value(); // update filter value // HANDLE SHOWING 'SaveAs' CONFIRM if ( options() & SAVEAS_CONFIRM && type() == BROWSE_SAVE_FILE ) { struct stat buf; if ( stat(file_chooser->value(), &buf) != -1 ) { if ( buf.st_mode & S_IFREG ) { // Regular file + exists? if ( fl_choice("File exists. Are you sure you want to overwrite?", "Cancel", " OK ", NULL) == 0 ) { return(1); } } } } } if ( file_chooser->count() ) return(0); else return(1); } // RETURN ERROR MESSAGE const char *Fl_Native_File_Chooser::errmsg() const { return(_errmsg ? _errmsg : "No error"); } // GET FILENAME const char* Fl_Native_File_Chooser::filename() const { if ( file_chooser->count() > 0 ) return(file_chooser->value()); return(""); } // GET FILENAME FROM LIST OF FILENAMES const char* Fl_Native_File_Chooser::filename(int i) const { if ( i < file_chooser->count() ) return(file_chooser->value(i+1)); // convert fltk 1 based to our 0 based return(""); } // SET TITLE // Can be NULL if no title desired. // void Fl_Native_File_Chooser::title(const char *val) { file_chooser->label(val); } // GET TITLE // Can return NULL if none set. // const char *Fl_Native_File_Chooser::title() const { return(file_chooser->label()); } // SET FILTER // Can be NULL if no filter needed // void Fl_Native_File_Chooser::filter(const char *val) { _filter = strfree(_filter); _filter = strnew(val); parse_filter(); } // GET FILTER const char *Fl_Native_File_Chooser::filter() const { return(_filter); } // SET SELECTED FILTER void Fl_Native_File_Chooser::filter_value(int val) { _filtvalue = val; } // RETURN SELECTED FILTER int Fl_Native_File_Chooser::filter_value() const { return(_filtvalue); } // GET TOTAL FILENAMES CHOSEN int Fl_Native_File_Chooser::count() const { return(file_chooser->count()); } // PRESET PATHNAME // Can be NULL if no preset is desired. // void Fl_Native_File_Chooser::directory(const char *val) { _directory = strfree(_directory); _directory = strnew(val); } // GET PRESET PATHNAME // Can return NULL if none set. // const char *Fl_Native_File_Chooser::directory() const { return(_directory); } // Convert our filter format to Fl_File_Chooser's format // FROM TO (FLTK) // ------------------------- -------------------------- // "*.cxx" "*.cxx Files(*.cxx)" // "C Files\t*.{cxx,h}" "C Files(*.{cxx,h})" // "C Files\t*.{cxx,h}\nText Files\t*.txt" "C Files(*.{cxx,h})\tText Files(*.txt)" // // Returns a modified version of the filter that the caller is responsible // for freeing with strfree(). // void Fl_Native_File_Chooser::parse_filter() { _parsedfilt = strfree(_parsedfilt); // clear previous parsed filter (if any) _nfilters = 0; char *in = _filter; if ( !in ) return; int has_name = strchr(in, '\t') ? 1 : 0; char mode = has_name ? 'n' : 'w'; // parse mode: n=title, w=wildcard char wildcard[1024] = ""; // parsed wildcard char name[1024] = ""; // Parse filter user specified for ( ; 1; in++ ) { /*** DEBUG printf("WORKING ON '%c': mode=<%c> name=<%s> wildcard=<%s>\n", *in, mode, name, wildcard); ***/ switch (*in) { // FINISHED PARSING NAME? case '\t': if ( mode != 'n' ) goto regchar; mode = 'w'; break; // ESCAPE NEXT CHAR case '\\': ++in; goto regchar; // FINISHED PARSING ONE OF POSSIBLY SEVERAL FILTERS? case '\r': case '\n': case '\0': // APPEND NEW FILTER TO LIST if ( wildcard[0] ) { // OUT: "name(wild)\tname(wild)" char comp[2048]; sprintf(comp, "%s%.511s(%.511s)", ((_parsedfilt)?"\t":""), name, wildcard); _parsedfilt = strapp(_parsedfilt, comp); _nfilters++; //DEBUG printf("DEBUG: PARSED FILT NOW <%s>\n", _parsedfilt); } // RESET wildcard[0] = name[0] = '\0'; mode = strchr(in, '\t') ? 'n' : 'w'; // DONE? if ( *in == '\0' ) return; // done else continue; // not done yet, more filters // Parse all other chars default: // handle all non-special chars regchar: // handle regular char switch ( mode ) { case 'n': chrcat(name, *in); continue; case 'w': chrcat(wildcard, *in); continue; } break; } } //NOTREACHED } // SET PRESET FILENAME void Fl_Native_File_Chooser::preset_file(const char* val) { _preset_file = strfree(_preset_file); _preset_file = strnew(val); } // GET PRESET FILENAME const char* Fl_Native_File_Chooser::preset_file() const { return(_preset_file); } posterazor-1.5.1/src/PosteRazor.xpm0000644000175000017500000000072611041177230016770 0ustar simrunsimrun/* XPM */ static char *posteRazorXpm[] = { /* columns rows colors chars-per-pixel */ "16 16 3 1", " c black", ". c gray", "X c None", /* pixels */ "XXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXX", "XX XX", "XX .......... XX", "XXX ........ XXX", " .......... ", " ... . . ... ", " .. XX.XX.XX .. ", " .. XX.XX.XX .. ", " ... . . ... ", " .......... ", "XXX ........ XXX", "XX .......... XX", "XX XX", "XXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXX" }; posterazor-1.5.1/src/licenseText.txt0000644000175000017500000000153711041177230017163 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ posterazor-1.5.1/src/PosteRazor.ico0000644000175000017500000000157611041177230016742 0ustar simrunsimrunh(  posterazor-1.5.1/src/TranslationItalian.h0000644000175000017500000005753611041177230020116 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ Italian translation by Stefano Nosei - kluster[at]imente[dot]org This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationItalian_h #define TranslationItalian_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define ITALIAN_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN class TranslationItalian: public TranslationInterface { public: const char* languageName(void) const {return "Italiano";} const char* absoluteSize(void) const {return "Dimensioni assolute:";} const char* allImageFormats(void) const {return "Tutti i formati immagine";} const char* back(void) const {return "Indietro";} const char* borders(void) const {return "Bordi";} const char* bottom(void) const {return "Inferiore";} const char* bottomLeft(void) const {return "Inferiore sinistro";} const char* bottomRight(void) const {return "Inferiore destro";} const char* cancel(void) const {return "Cancella";} const char* colorType(void) const {return "Tipo di colore:";} const char* custom(void) const {return "Personalizzato";} const char* fileCouldNotBeLoaded(void) const {return "Il file \"%s\" non pu essere caricato.";} const char* fileCouldNotBeSaved(void) const {return "Il file \"%s\" non pu essere salvato.";} const char* format(void) const {return "Formato:";} const char* grayscale(void) const {return "Scala di grigi";} const char* height(void) const {return "Altezza:";} const char* imageAlignment(void) const {return "Allineamento immagine";} const char* imageInformations(void) const {return "Informazioni immagine";} const char* imageSize(void) const {return "Dimensione immagine";} const char* inputImage(void) const {return "Immagine sorgente";} const char* landscape(void) const {return "Landscape";} const char* language(void) const {return "Linguaggio";} const char* languageExplanation(void) const {return "Selezione il tuo linguaggio";} const char* launchPDFApplication(void) const {return "Lancia l'applicazione PDF dopo che il poster stato salvato";} const char* left(void) const {return "Sinistra";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "Monocromatico";} const char* next(void) const {return "Successivo";} const char* orientation(void) const {return "Orientamento:";} const char* overlappingPosition(void) const {return "Posizione del sovrapposizionamento";} const char* overlappingSize(void) const {return "Dimensione del sovrapposizionamento";} const char* overwriteFile(void) const {return "Il file '%s' esiste gi.\nVuoi sovrascriverlo?";} const char* pages(void) const {return "pagine";} const char* paperFormat(void) const {return "Formato carta";} const char* palette(void) const {return "Paletta colori";} const char* portrait(void) const {return "Portrait";} const char* posteRazorHelp(void) const {return "Guida PosteRazor";} const char* posteRazorSettings(void) const {return "Impostazioni PosteRazor";} const char* posteRazorWebSiteURL(void) const {return ITALIAN_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "Sito Web PosteRazor";} const char* previewWithOpenGL(void) const {return "Anteprima con OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL permette una pi accurata anteprima sui sistemi moderni, sebbene possa risultare pi lenta nei computer meno recenti";} const char* resolution(void) const {return "Risoluzione:";} const char* right(void) const {return "Destra";} const char* saveThePoster(void) const {return "Salva il poster";} const char* saveThePosterAs(void) const {return "Salva il poster come";} const char* settings(void) const {return "Impostazioni...";} const char* Size(void) const {return "Dimensione:";} const char* sizeInPages(void) const {return "Dimensione in pagine";} const char* sizeInPercent(void) const {return "Dimensione in percentuale:";} const char* sizeInPixels(void) const {return "Dimens. (in pixels):";} const char* sizeInUnitOfLength(void) const {return "Dimensione (in %s):";} const char* standard(void) const {return "Standard";} const char* stepXOfY(void) const {return "Passaggio %d di %d";} const char* top(void) const {return "Superiore";} const char* topLeft(void) const {return "Superiore sinistro";} const char* topRight(void) const {return "Superiore destro";} const char* unitOfLength(void) const {return "Unit di misura";} const char* unitOfLengthExplanation(void) const {return "Scegli l'unit di misura della distanza con cui intendi lavorare";} const char* width(void) const {return "Larghezza:";} #define ITALIAN_POSTERAZORHELSTEP "Passaggio" #define ITALIAN_POSTERAZORHELPABOUT "Informazioni su PosteRazor" #define ITALIAN_POSTERAZORHELPMANUAL "Manuale" #define ITALIAN_POSTERAZORHELPSETTINGS "Impostazioni" #define ITALIAN_POSTERAZORHELPSTEPTITLE01 "Carica in immagine" #define ITALIAN_POSTERAZORHELPSTEPTITLE02 "Definisci il formato pagina della stampante" #define ITALIAN_POSTERAZORHELPSTEPTITLE03 "Definisci le suddivisioni dell'immagine" #define ITALIAN_POSTERAZORHELPSTEPTITLE04 "Definisci le dimensioni finali del poster" #define ITALIAN_POSTERAZORHELPSTEPTITLE05 "Salva il Poster" #define ITALIAN_POSTERAZORHELPINPUTFILEFORMATS "Immagine supportate" #define ITALIAN_POSTERAZORHELPWHYPDFOUTPUT "Perchè un output in PDF?" #define ITALIAN_POSTERAZORHELPCODEFROMTHIRDPARTIES "Codice da Terze Parti" #define ITALIAN_POSTERAZORHELPLICENSE "Licenza" const char* stepTitle01(void) const {return ITALIAN_POSTERAZORHELPSTEPTITLE01;} const char* stepTitle02(void) const {return ITALIAN_POSTERAZORHELPSTEPTITLE02;} const char* stepTitle03(void) const {return ITALIAN_POSTERAZORHELPSTEPTITLE03;} const char* stepTitle04(void) const {return ITALIAN_POSTERAZORHELPSTEPTITLE04;} const char* stepTitle05(void) const {return ITALIAN_POSTERAZORHELPSTEPTITLE05;} const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

PosteRazor "POSTERAZORVERSION" Aiuto

" POSTERAZORHELPENDLINE \ "

Contenuti

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, ITALIAN_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "PosteRazor permette di tagliare un immagine raster in vari pezzi che possono essere stampati e successivamente riuniti creando un poster. Come immagine di ingresso sono supportati svariati formati immagine. Invece di stampare direttamente il poster, PosteRazor produce un PDF multipagina che contiene le singole sezioni del poster.
" POSTERAZORHELPENDLINE \ "PosteRazor è un programma open source che dipende da altri progetti open source. " POSTERAZORHELPENDLINE \ "PosteRazor è ospitato su posterazor.sourceforge.net." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, ITALIAN_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "PosteRazor ha la un interfaccia utente organizzata in facili procedure guidate (\"Wizard\"). Le procedure per creare il poster possono essere effettuate in 5 passaggi. I tasti Precedente and Successivo permettono di navigare attraverso i passaggi.
" POSTERAZORHELPENDLINE \ "Il tasto ? apre una finestra di aiuto con una spiegazione sulle operazioni del passaggio corrente.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Tutte le impostazioni e le scelte effettuate dall'utente sono registrate dal programma e rimarranno tali nelle successive riaperture di PosteRazor." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, ITALIAN_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "Premendo il tasto Impostazioni... in basso a sinistra nella finestra principale, si aprirà la finestra di configurazione di PosteRazor." POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Unità di Misura: scegli l'unità di misura che intendi utilizzare nel tuo lavoro. Quando un'unità viene cambiata, tutti i valori predefiniti e quelli precedentemente impostati vengono automaticamente ricalcolati nella nuova unità.
  • " POSTERAZORHELPENDLINE \ "
  • Linguaggio: scegli il tuo linguaggio. PosteRazor non necessita di essere riavviato quando viene modificato il linguaggio.
  • " POSTERAZORHELPENDLINE \ "
  • Anteprima con OpenGL: indica a PosteRazor di utilizzare OpenGL per l'anteprima dell'immagine. Di solito, su hardware recente, OpenGL dovrebbe visualizzare l'anteprima in maniera più veloce ed accurata rispetto al metodo non-OpenGL. In ogni caso se PosteRazor dovesse risultare più lento e/o instabile, è indicato disabilitare la modalità OpenGL.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, ITALIAN_POSTERAZORHELSTEP " 1: " ITALIAN_POSTERAZORHELPSTEPTITLE01) \ POSTERAZORHELPINDENTATION "Carica l'immagine premendo il bottone con l'icona a forma di cartella e seleziona l'immagine di origine. L'immagine può essere anche trascinata all'interno della finestra tramite drag & drop. La procedura di drag & drop funziona anche nei successivi passaggi
" POSTERAZORHELPENDLINE \ "Possono essere caricati svariati formati di files e tipi di immagini . Dopo il caricamento dell'immagine, le informazioni di dettaglio sono elencate nella casella Informazioni immagine." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, ITALIAN_POSTERAZORHELSTEP " 2: " ITALIAN_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Definisce la dimensione del foglio di stampa che viene utilizzato dalla tua stampante. I principali formati standard per stampante possono essere selezionati dalla casella di scelta Formato, così come per l'Orientamento. In alternativa, può essere definito un foglio di stampa personalizzato selezionando la scheda Personalizzato. (Vi prego di comunicarmi via mail, se l'operazione vi facesse perdere il formato foglio standard nella casella di scelta). " POSTERAZORHELPENDLINE \ "I bordi del foglio sono definiti nella casella Bordi. Sebbene la vostra stampante possa specificatamente stampare senza margini vi consigliamo di lasciare un piccolo bordo per facilitare la successiva incollatura dei pezzi per comporre il poster finale." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, ITALIAN_POSTERAZORHELSTEP " 3: " ITALIAN_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "La sovrapposizione delle sezioni dell'immagine è utile per avere un intervallo di tolleranza per tagliare i bordi non necessari sui lati. In aggiunta, come specificato per i bordi nel passo precedente, può permettere un'area più ampia per l'incollatura finale del poster. " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "La Posizione del Sovrapposizionamento difinisce i bordi che saranno sovrapposti dalle singole sezioni contigue dell'immagine. I bordi sui lati opposti sono quelli che si intendono tagliare per l'incollatura (ad eccezione delle sezioni di margine esterno)." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, ITALIAN_POSTERAZORHELSTEP " 4: " ITALIAN_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Definisci la dimensione finale del poster, in uno dei seguenti tre metodi che possono essere selezionati marcando i corrispondenti tasti di scelta:
" POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Dimensioni assolute dell'immagine: imposta una dimensione specifica per il tuo poster.
  • " POSTERAZORHELPENDLINE \ "
  • Dimensioni in pagine: imposta in quante pagine totali verrà ripartita l'immagine da stampare.
  • " POSTERAZORHELPENDLINE \ "
  • Dimensioni immagine in percentuale: l'immagine sorgente selezionata avrà una specifica dimensione in pixel e in dpi (punti per pollice). Selezionando questa opzione l'immagine sarà ingrandita in base al fattore percentuale inserito.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "La proporzione tra la larghezza e l'altezza è sempre 1:1 ed è automaticamente ricalcolata. Nell'area di Anteprima, puoi vedere le aree di sovrapposizionamento che sono marcate da triangoli di color rosso chiaro. " POSTERAZORHELPENDLINE \ "Allineamento immagine imposta l'allineamento dell'immagine nell'area totale di stampa del poster. Ciò è utile se vuoi mantenere parti di pagina non utilizzate." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, ITALIAN_POSTERAZORHELSTEP " 5: " ITALIAN_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Salva il poster premendo il bottone con l'icona a forma di floppy e specifica un nome file di destinazione. Marca o smarca il segno di spunta Lancia l'applicazione PDF dopo che il poster è stato salvato, e l'applicazione impostata come predefinita per il formato PDF verrà avviata automaticamente dopo il salvataggio del file" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, ITALIAN_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "La maggior parte delle immagini raster che sono supportate da FreeImage sono supportate anche da PosteRazor:
" POSTERAZORHELPENDLINE \ "BMP, file DDS , Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor distingue e supporta immagini monocromatiche, a scala di grigi, con palette a 4-bit ,8-bit, 24 bit RGB, e quadricromia CMYK (solo per il formato Tif). Le immagini RGB con un canale alpha sono automaticamente composte con sfondo bianco." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, ITALIAN_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "Perchè creare un PDF invece di stampare direttamente? Prima di tutto lo sviluppatore di questo programma non sa (ancora) il metodo per \"inviare immagini alla stampante\" sui differenti sistemi operativi per i quali PosteRazor è pensato . Inoltre, il formato PDF ha l'utilità della portabilità, quindi per esempio il poster può essere tagliato in casa con tutto il tempo necessario ed il giorno dopo può essere stampato con la stampante laser a colori in ufficio (dopo che tutti i colleghi se ne sono andati). " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Perchè PDF e non altri formati immagine raster? Perchè un PDF dà la possibilità di allegare l'intera immagine e di tagliarla virtualmente con suddivisioni ben più piccole rispetto ai pixel. In aggiunta, è molto più pratico stampare un singolo file multipagina PDF, che un file con immagini multiple." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, ITALIAN_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "
    " POSTERAZORHELPENDLINE \ "
  • FLTK è usato per l'interfaccia utente. E' un piccola (per dimensione), veloce e \"fun&easy\" UI Toolkit applicazione portabile. www.fltk.org
  • " POSTERAZORHELPENDLINE \ "
  • FreeImage è usato per il caricamento e la gestione delle immagini. Rende la gestione delle immagini veramente semplice, togliendo tanti grattacapi agli sviluppatori, ed oltretutto è portabile nei sistemi operativi per cui PosteRazor è pensato. FreeImage website
  • " POSTERAZORHELPENDLINE \ "
  • Fl_Native_File_Chooser è usato per l'apertura ed il salvataggio dei file nei nativi sistemi operativi utilizzati. Fl_Native_File_Chooser website
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, ITALIAN_POSTERAZORHELPLICENSE) \ "PosteRazor - Crea il tuo poster!
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 11;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,0,0,255, 0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,0,204,0,0,204,0,0,204,0,0, 204,0,0,204,0,0,204,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140, 140,140,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,140,140,140,140,140,140,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0, 0,204,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,0, 204,0,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,140,140,140,140,140,140,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,0,204,0,0,204,0, 0,204,0,0,204,0,0,204,0,0,204,0,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140, 140,140,140,140,140,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,0,204,0,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,0,0,255, 0,0,255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,0,204,0,0,204,0,0,204,0,0, 204,0,0,204,0,0,204,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140 }; return flagRGBData; } }; static const TranslationItalian italian; #endif posterazor-1.5.1/src/TranslationInterface.h0000644000175000017500000001075311041177230020423 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationInterface_h #define TranslationInterface_h class TranslationInterface { public: virtual ~TranslationInterface() {} virtual const char* languageName(void) const = 0; virtual const char* absoluteSize(void) const = 0; virtual const char* allImageFormats(void) const = 0; virtual const char* back(void) const = 0; virtual const char* borders(void) const = 0; virtual const char* bottom(void) const = 0; virtual const char* bottomLeft(void) const = 0; virtual const char* bottomRight(void) const = 0; virtual const char* cancel(void) const = 0; virtual const char* colorType(void) const = 0; virtual const char* custom(void) const = 0; virtual const char* fileCouldNotBeLoaded(void) const = 0; virtual const char* fileCouldNotBeSaved(void) const = 0; virtual const char* format(void) const = 0; virtual const char* grayscale(void) const = 0; virtual const char* height(void) const = 0; virtual const char* imageAlignment(void) const = 0; virtual const char* imageInformations(void) const = 0; virtual const char* imageSize(void) const = 0; virtual const char* inputImage(void) const = 0; virtual const char* landscape(void) const = 0; virtual const char* language(void) const = 0; virtual const char* languageExplanation(void) const = 0; virtual const char* launchPDFApplication(void) const = 0; virtual const char* left(void) const = 0; virtual const char* loadAnInputImage(void) const = 0; virtual const char* monochrome(void) const = 0; virtual const char* next(void) const = 0; virtual const char* orientation(void) const = 0; virtual const char* overlappingSize(void) const = 0; virtual const char* overlappingPosition(void) const = 0; virtual const char* overwriteFile(void) const = 0; virtual const char* pages(void) const = 0; virtual const char* palette(void) const = 0; virtual const char* paperFormat(void) const = 0; virtual const char* portrait(void) const = 0; virtual const char* posteRazorHelp(void) const = 0; virtual const char* posteRazorSettings(void) const = 0; virtual const char* posteRazorWebSiteURL(void) const = 0; virtual const char* posteRazorWebSite(void) const = 0; virtual const char* previewWithOpenGL(void) const = 0; virtual const char* previewWithOpenGLExplanation(void) const = 0; virtual const char* resolution(void) const = 0; virtual const char* right(void) const = 0; virtual const char* saveThePoster(void) const = 0; virtual const char* saveThePosterAs(void) const = 0; virtual const char* settings(void) const = 0; virtual const char* Size(void) const = 0; virtual const char* sizeInPages(void) const = 0; virtual const char* sizeInPercent(void) const = 0; virtual const char* sizeInPixels(void) const = 0; virtual const char* sizeInUnitOfLength(void) const = 0; virtual const char* standard(void) const = 0; virtual const char* stepXOfY(void) const = 0; virtual const char* top(void) const = 0; virtual const char* topLeft(void) const = 0; virtual const char* topRight(void) const = 0; virtual const char* unitOfLength(void) const = 0; virtual const char* unitOfLengthExplanation(void) const = 0; virtual const char* width(void) const = 0; virtual const char* stepTitle01(void) const = 0; virtual const char* stepTitle02(void) const = 0; virtual const char* stepTitle03(void) const = 0; virtual const char* stepTitle04(void) const = 0; virtual const char* stepTitle05(void) const = 0; virtual const char* helpHtml(void) const = 0; virtual const int flagImageWidth(void) const = 0; virtual const int flagImageHeight(void) const = 0; virtual const unsigned char* flagImageRGBData(void) const = 0; }; #endif posterazor-1.5.1/src/PosteRazorDialogController.h0000644000175000017500000000753211041177230021601 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef POSTERAZORDIALOGCONTROLLER_H #define POSTERAZORDIALOGCONTROLLER_H #include "PosteRazor.h" class PosteRazorDialogInterface: public PosteRazorSettersInterface { public: virtual ~PosteRazorDialogInterface() {} virtual void updatePreview(void) = 0; virtual void showImageFileName(const char *fileName) = 0; virtual void updateImageInfoFields(int imageWidthInPixels, int imageHeightInPixels, double imageWidth, double imageHeight, UnitsOfLength::eUnitsOfLength unitOfLength, double verticalDpi, double horizontalDpi, ColorTypes::eColorTypes colorType, int bitsPerPixel) = 0; }; class PosteRazorDialogController: public PosteRazorSettersInterface, public PosteRazorActionsInterface { public: PosteRazorDialogController(); virtual ~PosteRazorDialogController() {} void setPosteRazorModel(PosteRazor *model); virtual void updateDialog(void); void setPosteRazorDialog(PosteRazorDialogInterface *dialog); void setPaperFormatByName(const char *name); void updatePreview(void); void setUnitOfLength(UnitsOfLength::eUnitsOfLength unit); void setPaperFormat(PaperFormats::ePaperFormats format); void setPaperOrientation(PaperFormats::ePaperOrientations orientation); void setPaperBorderTop(double border); void setPaperBorderRight(double border); void setPaperBorderBottom(double border); void setPaperBorderLeft(double border); void setCustomPaperWidth(double width); void setCustomPaperHeight(double height); void setUseCustomPaperSize(bool useIt); void setOverlappingWidth(double width); void setOverlappingHeight(double height); void setOverlappingPosition(PosteRazorEnums::eOverlappingPositions position); void setPosterWidth(PosteRazorEnums::ePosterSizeModes mode, double width); void setPosterHeight(PosteRazorEnums::ePosterSizeModes mode, double height); void setPosterSizeMode(PosteRazorEnums::ePosterSizeModes mode); void setPosterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignments alignment); void setPosterVerticalAlignment(PosteRazorEnums::eVerticalAlignments alignment); void setPosterOutputFormat(ImageIOTypes::eImageFormats format); void setLaunchPDFApplication(bool launch); bool readPersistentPreferences(PersistentPreferencesInterface *preferences); bool writePersistentPreferences(PersistentPreferencesInterface *preferences) const; bool loadInputImage(const char *imageFileName, char *errorMessage, int errorMessageSize); int savePoster(const char *fileName) const; protected: PosteRazor *m_PosteRazor; PosteRazorDialogInterface *m_Dialog; void setDialogSaveOptions(void); void setDialogPosterSizeMode(void); void setDialogPosterOptions(void); void setDialogPosterDimensions(PosteRazorEnums::ePosterSizeModes excludedMode, bool widthExcluded); void setDialogPaperOptions(void); void setDialogPaperBorders(void); void setDialogCustomPaperDimensions(void); void setDialogImageInfoFields(void); void setDialogOverlappingDimensions(void); void setDialogOverlappingOptions(void); }; #endif // POSTERAZORDIALOGCONTROLLER_H posterazor-1.5.1/src/flagGreek.png0000644000175000017500000000023011041177230016515 0ustar simrunsimrunPNG  IHDR k:_IDATx^ 0 ,5X$k$d,A@( _?%g?vtrc4j:TNLY\۫zI9d]IENDB`posterazor-1.5.1/src/FlDrawPaintCanvas.cpp0000644000175000017500000000752711041177230020153 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "FlDrawPaintCanvas.h" #include #include #include #define BORDER 9 FlDrawPaintCanvas::FlDrawPaintCanvas(int x, int y, int width, int height) : Fl_Box(x, y, width, height) , PaintCanvasBase() , m_imageRGBData(NULL) , m_image(NULL) , m_scaledImage(NULL) { } FlDrawPaintCanvas::~FlDrawPaintCanvas() { disposeImage(); } void FlDrawPaintCanvas::draw() { Fl_Box::draw(); drawFilledRect(-BORDER, -BORDER, w(), h(), m_backgroundColor[0], m_backgroundColor[1], m_backgroundColor[2], 255); m_painter->paintOnCanvas(this, m_stateString); } void FlDrawPaintCanvas::drawFilledRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) { if (alpha < 255) { drawRect(x, y, width, height, red, green, blue, alpha); } else { fl_color(red, green, blue); fl_rectf((int)(x + Fl_Box::x() + BORDER), (int)(y + Fl_Box::y() + BORDER), (int)width, (int)height); } } void FlDrawPaintCanvas::drawRect(double x, double y, double width, double height, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) { if (height < 1) { drawLine(x, y, x+width, y, red, green, blue, alpha); } else if (width < 1) { drawLine(x, y, x, y+height, red, green, blue, alpha); } else { fl_color(red, green, blue); fl_rect((int)(x + Fl_Box::x() + BORDER), (int)(y + Fl_Box::y() + BORDER), (int)width, (int)height); } } void FlDrawPaintCanvas::drawLine(double x1, double y1, double x2, double y2, unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha) { fl_color(red, green, blue); fl_line((int)(x1 + Fl_Box::x() + BORDER), (int)(y1 + Fl_Box::y() + BORDER), (int)(x2 + Fl_Box::x() + BORDER), (int)(y2 + Fl_Box::y() + BORDER)); } void FlDrawPaintCanvas::getSize(double &width, double &height) const { width = w() - BORDER - BORDER; height = h() - BORDER - BORDER; } void FlDrawPaintCanvas::setImage(const unsigned char* rgbData, double width, double height) { disposeImage(); m_imageRGBData = new unsigned char[(int)width * (int)height * 3]; memcpy(m_imageRGBData, rgbData, (int)width * (int)height * 3); m_image = new Fl_RGB_Image(m_imageRGBData, (int)width, (int)height); redraw(); } void FlDrawPaintCanvas::disposeImage(void) { if (m_image) { delete(m_image); m_image = NULL; } if (m_scaledImage) { delete(m_scaledImage); m_scaledImage = NULL; } if (m_imageRGBData) { delete[] m_imageRGBData; m_imageRGBData = NULL; } } void FlDrawPaintCanvas::drawImage(double x, double y, double width, double height) { if (m_image) { if (m_scaledImage && (width != m_scaledImage->w() || height != m_scaledImage->h())) { delete m_scaledImage; m_scaledImage = NULL; } if (!m_scaledImage) m_scaledImage = m_image->copy((int)width, (int)height); if (m_scaledImage) m_scaledImage->draw((int)(x + Fl_Box::x() + BORDER), (int)(y + Fl_Box::y() + BORDER)); } } posterazor-1.5.1/src/TranslationDutch.h0000644000175000017500000005644611041177230017603 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ Dutch/Belgian translation by Erik Wijkamp This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef TranslationDutch_h #define TranslationDutch_h #include "TranslationInterface.h" #include "TranslationConstants.h" #define DUTCH_POSTERAZORWEBSITEURL POSTERAZORWEBSITEDOMAIN"?lang=dutch" class TranslationDutch: public TranslationInterface { public: const char* languageName(void) const {return "Nederlands";} const char* absoluteSize(void) const {return "Absolute grootte:";} const char* allImageFormats(void) const {return "Alle beeldformaten";} const char* back(void) const {return "Terug";} const char* borders(void) const {return "Marges";} const char* bottom(void) const {return "Onder";} const char* bottomLeft(void) const {return "Linksonder";} const char* bottomRight(void) const {return "Rechtsonder";} const char* cancel(void) const {return "Afbreken";} const char* colorType(void) const {return "Kleurinformatie:";} const char* custom(void) const {return "Op maat";} const char* fileCouldNotBeLoaded(void) const {return "Het bestand \"%s\" kan niet geopend worden.";} const char* fileCouldNotBeSaved(void) const {return "The File \"%s\" could not be saved.";} const char* format(void) const {return "Formaat:";} const char* grayscale(void) const {return "Grijstinten";} const char* height(void) const {return "Hoogte:";} const char* imageAlignment(void) const {return "Afbeelding uitlijnen";} const char* imageInformations(void) const {return "Afbeeldinginformatie";} const char* imageSize(void) const {return "Afbeeldinggrootte";} const char* inputImage(void) const {return "Afbeelding";} const char* landscape(void) const {return "Landschap";} const char* language(void) const {return "Taal";} const char* languageExplanation(void) const {return "Kies uw taal";} const char* launchPDFApplication(void) const {return "De PDF-applicatie opstarten nadat de poster is opgeslagen";} const char* left(void) const {return "Links";} const char* loadAnInputImage(void) const {return stepTitle01();} const char* monochrome(void) const {return "Monochroom";} const char* next(void) const {return "Volgende";} const char* orientation(void) const {return "Orintatie:";} const char* overlappingPosition(void) const {return "Overlappende zijden";} const char* overlappingSize(void) const {return "Overlapping";} const char* overwriteFile(void) const {return "Het bestand '%s' bestaat reeds.\nMoet dit worden overschreven?";} const char* pages(void) const {return "Pagina's";} const char* palette(void) const {return "Palet";} const char* paperFormat(void) const {return "Papierformaat";} const char* portrait(void) const {return "Portret";} const char* posteRazorHelp(void) const {return "PosteRazor Help";} const char* posteRazorSettings(void) const {return "PosteRazor instellingen";} const char* posteRazorWebSiteURL(void) const {return DUTCH_POSTERAZORWEBSITEURL;} const char* posteRazorWebSite(void) const {return "PosteRazor website";} const char* previewWithOpenGL(void) const {return "Schermvoorbeeld met OpenGL";} const char* previewWithOpenGLExplanation(void) const {return "OpenGL zorgt voor een beter schermvoorbeeld. Bij oude hardware vertraagt OpenGL deze werking.";} const char* resolution(void) const {return "Resolutie:";} const char* right(void) const {return "Rechts";} const char* saveThePoster(void) const {return "De poster opslaan";} const char* saveThePosterAs(void) const {return "De poster opslaan als";} const char* settings(void) const {return "Instellingen...";} const char* Size(void) const {return "Grootte:";} const char* sizeInPages(void) const {return "Grootte in pagina's:";} const char* sizeInPercent(void) const {return "Grootte in percentage:";} const char* sizeInPixels(void) const {return "Formaat (in pixels):";} const char* sizeInUnitOfLength(void) const {return "Formaat (in %s):";} const char* standard(void) const {return "Standaard";} const char* stepXOfY(void) const {return "Stap %d van %d";} const char* top(void) const {return "Boven";} const char* topLeft(void) const {return "Linksboven";} const char* topRight(void) const {return "Rechtsboven";} const char* unitOfLength(void) const {return "Lengtemaat";} const char* unitOfLengthExplanation(void) const {return "Kies de lengtemaat waarmee gewerkt moet worden";} const char* width(void) const {return "Breedte:";} #define DUTCH_POSTERAZORHELSTEP "Stap" #define DUTCH_POSTERAZORHELPABOUT "Over PosteRazor" #define DUTCH_POSTERAZORHELPMANUAL "Gebruiksaanwijzing" #define DUTCH_POSTERAZORHELPSETTINGS "Instellingen" #define DUTCH_POSTERAZORHELPSTEPTITLE01 "Kies een afbeelding" #define DUTCH_POSTERAZORHELPSTEPTITLENOHTML02 "Papierafmeting definiren" #define DUTCH_POSTERAZORHELPSTEPTITLE02 "Papierafmeting definiëren" #define DUTCH_POSTERAZORHELPSTEPTITLENOHTML03 "Overlapping definiren" #define DUTCH_POSTERAZORHELPSTEPTITLE03 "Overlapping definiëren" #define DUTCH_POSTERAZORHELPSTEPTITLENOHTML04 "Postergrootte definiren" #define DUTCH_POSTERAZORHELPSTEPTITLE04 "Postergrootte definiëren" #define DUTCH_POSTERAZORHELPSTEPTITLE05 "Poster opslaan" #define DUTCH_POSTERAZORHELPINPUTFILEFORMATS "Ondersteunde bestandsformaten" #define DUTCH_POSTERAZORHELPWHYPDFOUTPUT "Waarom PDF als eindbestand?" #define DUTCH_POSTERAZORHELPCODEFROMTHIRDPARTIES "Code van derden" #define DUTCH_POSTERAZORHELPLICENSE "Licentie" const char* stepTitle01(void) const {return DUTCH_POSTERAZORHELPSTEPTITLE01;}; const char* stepTitle02(void) const {return DUTCH_POSTERAZORHELPSTEPTITLENOHTML02;}; const char* stepTitle03(void) const {return DUTCH_POSTERAZORHELPSTEPTITLENOHTML03;}; const char* stepTitle04(void) const {return DUTCH_POSTERAZORHELPSTEPTITLENOHTML04;}; const char* stepTitle05(void) const {return DUTCH_POSTERAZORHELPSTEPTITLE05;}; const char* helpHtml(void) const { return "" POSTERAZORHELPENDLINE \ "" POSTERAZORHELPENDLINE \ "

PosteRazor "POSTERAZORVERSION" Help

" POSTERAZORHELPENDLINE \ "

Inhoud

" POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORABOUT, DUTCH_POSTERAZORHELPABOUT) \ POSTERAZORHELPINDENTATION "PosteRazor deelt gerasterde afbeeldingen op in stukken die, na op een printer te zijn afgedrukt, tot een poster samengevoegd kunnen worden. Als afbeeldingbestand worden verschillende bestandsformaten geaccepteerd. In plaats van een directe afdruk maakt PosteRazor eerst een uit meerdere bladzijden bestaand document waarin alle pagina's zijn opgeslagen.
" POSTERAZORHELPENDLINE \ "Het is een Open-Source-Programma, dat op zijn beurt weer van Open-Source-Projecten afhankelijk is. " POSTERAZORHELPENDLINE \ "PosteRazor is onder posterazor.sourceforge.net op internet terug te vinden." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUAL, DUTCH_POSTERAZORHELPMANUAL) \ POSTERAZORHELPINDENTATION "PosteRazor heeft een gebruikersinterface in de \"Wizard\"-stijl. Alle instellingen voor een poster worden in 5 stappen uitgevoerd. De Volgende en Terug knoppen leiden de gebruiker door het programma.
" POSTERAZORHELPENDLINE \ "De ?-knop opent het helpvenster met een omschrijving van de op dat moment gebruikte functie.
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "PosteRazor houdt elke instelling en selectie vast en onthoudt ze tot een volgend gebruik van het programma." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORSETTINGS, DUTCH_POSTERAZORHELPSETTINGS) \ POSTERAZORHELPINDENTATION "Door te klikken op de Instellingen...-knop, linksonder in het hoofdvenster, wordt het PosteRazor Instellingenmenu geopend." POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Lengte-eenheid: kies de lengte-eenheid waarmee gewerkt moet worden. Als deze wordt veranderd dan worden alle reeds ingestelde maten omgerekend naar de nieuwe maatvoering.
  • " POSTERAZORHELPENDLINE \ "
  • Taal: kies de taal van de gebruikersinterface. Na het wijzigen van de taal hoeft er niet opnieuw te worden opgestart.
  • " POSTERAZORHELPENDLINE \ "
  • Schermvoorbeeld met OpenGL: kies of OpenGL voor het schermvoorbeeld gebruikt moet worden. Bij gebruik van recente hardware wordt het beeld beter weergegeven. Verschijnt het beeld echter haperend dan moet er niet voor OpenGL gekozen worden. Het beeld mag dan kwalitatief wat minder zijn, de werking van de hardware is beter betrouwbaar.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP01, DUTCH_POSTERAZORHELSTEP " 1: " DUTCH_POSTERAZORHELPSTEPTITLE01) \ POSTERAZORHELPINDENTATION "Kies een afbeelding door op het icoon van de open map te klikken en te zoeken naar de plaats van de afbeelding, of maak gebruik van \"Drag and Drop\". Sleep dan het afbeeldingbestand naar de PosteRazor. Dit \"Drag and Drop\" principe werkt ook bij de andere functies binnen PosteRazor.
" POSTERAZORHELPENDLINE \ "Veel bestands- en grafische formaten kunnen worden gebruikt. Na het kiezen van het invoerbestand worden de belangrijkste gegevens getoond in het Afbeeldinginformatie venster." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP02, DUTCH_POSTERAZORHELSTEP " 2: " DUTCH_POSTERAZORHELPSTEPTITLE02) \ POSTERAZORHELPINDENTATION "Kies het papierformaat dat gebruikt wordt in de printer. Standaardafmetingen kunnen bij voorbaat al aangeklikt worden in het Formaat venster, evenals de Oriëntatie in de lengte of breedte. Eventueel kan een afwijkend formaat gebruikt worden bij de keuze Op maat. (Stuur anders even een email als een bepaalde standaardmaat hier niet bij staat)." POSTERAZORHELPENDLINE \ "Papiermarges worden vastgelegd in de optie Marges. Ook al heeft een printer geen -of een heel kleine- papiermarge, een redelijke ruimte is toch altijd nog nodig om de vellen aan elkaar te lijmen." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP03, DUTCH_POSTERAZORHELSTEP " 3: " DUTCH_POSTERAZORHELPSTEPTITLE03) \ POSTERAZORHELPINDENTATION "Gedeeltelijke overlapping is nodig om ruimte te krijgen aan een papierkanzijde. Dit geeft ruimte om de verschillende vellen te verlijmen. " POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "De Overlappende zijden geven de hoeken aan die door het naastliggende vel papier bedekt worden. De tegenoverliggende randen van de opvolgende vellen dienen te worden afgesneden of -geknipt (zonder de buitenmarge dus)." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP04, DUTCH_POSTERAZORHELSTEP " 4: " DUTCH_POSTERAZORHELPSTEPTITLE04) \ POSTERAZORHELPINDENTATION "Bepaal de uiteindelijke grootte van de poster met gebruikmaking van de volgende instellingen, die via de knoppen gekozen kunnen worden:
" POSTERAZORHELPENDLINE \ "
    " POSTERAZORHELPENDLINE \ "
  • Absolute grootte: bepaal de maximale grootte van de poster.
  • " POSTERAZORHELPENDLINE \ "
  • Grootte in pagina's: maak gebruik van hele vellen papier en bepaal hoeveel er gebruikt moeten worden.
  • " POSTERAZORHELPENDLINE \ "
  • Grootte in percentage: een afbeelding heeft een zekere grootte, afhankelijk van de hoeveelheid pixels en DPI (dots per Inch). Dit kan vergroot worden met een zekere factor.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "De breedte-hoogte verhouding is altijd 1:1 en wordt automatisch herberekend. In het schermvoorbeeld venster worden de overlappende zijden helderrood gemarkeerd. " POSTERAZORHELPENDLINE \ "Afbeelding uitlijnen bepaalt de positie van de poster ten opzichte van het totale oppervlak van alle vellen. Dit kan handig zijn voor papierbesparing van het overgebleven papier." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORMANUALSTEP05, DUTCH_POSTERAZORHELSTEP " 5: " DUTCH_POSTERAZORHELPSTEPTITLE05) \ POSTERAZORHELPINDENTATION "Sla de poster op door te klikken op de brede knop en het ingeven van een nieuwe, voor opslag geschikte bestandsnaam. Vink De PDF-applicatie opstarten.. aan als de opgeslagen poster in de voor het besturingssysteem tot standaard gemaakte PDF-applicatie moet worden opgestart." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORINPUTFILEFORMATS, DUTCH_POSTERAZORHELPINPUTFILEFORMATS) \ POSTERAZORHELPINDENTATION "De meeste bestandsformaten die ondersteund worden bij FreeImage, worden ook ondersteund in PosteRazor:
" POSTERAZORHELPENDLINE \ "BMP, DDS files, Dr. Halo, GIF, ICO, IFF, JBIG, JPEG/JIF, KOALA, LBM, Kodak PhotoCD, PCX, PBM, PGM, PNG, PPM, PhotoShop PSD, Sun RAS, TARGA, TIFF, WBMP, XBM, XPM.
" POSTERAZORHELPENDLINE \ "PosteRazor herkent ook de volgende bestandsformaten en kan ze gebruiken: monochroom, grijstinten, 4-bit palet, 8-bit palet, 24 bit RGB, en CMYK (alleen bij TIF) afbeeldingen. RGB afbeeldingen met een alpha kanaal worden automatisch geconverteerd en getoond op een witte achtergrond." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORWHYPDFOUTPUT, DUTCH_POSTERAZORHELPWHYPDFOUTPUT) \ POSTERAZORHELPINDENTATION "Waarom een PDF bestand en niet direct printen? Allereerst weet de ontwerper van dit programma nog niet hoe dit \"send images to the printer\" werkt op verschillende platformen en besturingssystemen waar PosteRazor voor is bedoeld. Echter, het PDF formaat geeft ook een uitstekend resultaat als de poster thuis \"gerazored\" is en als PDF bestand meegenomen wordt naar het werk, om daar op de kleuren laserprinter te worden uitgedraaid (en natuurlijk iedereen al naar huis is...)." POSTERAZORHELPENDLINE \ POSTERAZORHELPINDENTATION "Waarom PDF en geen ander bestandsformaat als eindresultaat? PDF geeft de mogelijkheid om meer dan de benodigde gegevens in één bestand op te slaan. PDF geeft ook nog eens de mogelijkheid om hele bestanden in één totaalbestand op te nemen en virtueel te delen, niet alleen in pixels maar ook in fracties van pixels. Ook is het printen van één -uit meerdere pagina's bestaand- PDF bestand handiger dan meerdere losse afbeeldingen in meerdere bestanden." POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORCODEFROMTHIRDPARTIES, DUTCH_POSTERAZORHELPCODEFROMTHIRDPARTIES) \ "
    " POSTERAZORHELPENDLINE \ "
  • FLTK wordt gebruikt in de gebruikersinterface. Het is een klein (in opslag), snel, leuk, eenvoudig te leren en bijzonder uitwisselbare UI Toolkit. Het is te vinden op de www.fltk.org website.
  • " POSTERAZORHELPENDLINE \ "
  • FreeImage wordt gebruikt voor de grafische afhandeling. Dat maakt het tonen van bestanden en een grafische weergave simpel en is uitwisselbaar op meerdere platformen waar PosteRazor ook op werkt. Het is te vinden op de FreeImage website.
  • " POSTERAZORHELPENDLINE \ "
  • Fl_Native_File_Chooser wordt gebruikt voor het openen en opslaan van bestanden in de vertrouwde \"look and feel\" stijl. Het is te vinden op: Fl Native File Chooser website.
  • " POSTERAZORHELPENDLINE \ "
" POSTERAZORHELPENDLINE \ POSTERAZORHELPSECTIONHEADER(POSTERAZORHELPANCHORLICENSE, DUTCH_POSTERAZORHELPLICENSE) \ "PosteRazor - Make your own poster!
" POSTERAZORHELPENDLINE \ "posterazor.sourceforge.net
" POSTERAZORHELPENDLINE \ POSTERAZORCOPYRIGHT \ POSTERAZORTRANSLATIONCREDITSSTART \ POSTERAZORTRANSLATIONCREDITSDUTCH \ POSTERAZORTRANSLATIONCREDITSFRENCH \ POSTERAZORTRANSLATIONCREDITSPOLISH \ POSTERAZORTRANSLATIONCREDITSITALIAN \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSSPANISH \ POSTERAZORTRANSLATIONCREDITSBRAZILIANPORTUGUESE \ POSTERAZORTRANSLATIONCREDITSEND \ " 
" \ POSTERAZORLICENSE \ "" POSTERAZORHELPENDLINE \ ""; } const int flagImageWidth(void) const {return 20;} const int flagImageHeight(void) const {return 11;} const unsigned char *flagImageRGBData(void) const { static const unsigned char flagRGBData[] = { 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255, 0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,140,140,140,140,140,140,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,140,140,140,140,140,140,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0, 255,0,0,255,0,0,255,0,0,140,140,140,140,140,140,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,140,140,140,140,140,140,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,140,140,140,140,140,140,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,140,140,140,140,140,140,28,82,255,28,82,255,28,82,255, 28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82, 255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,140, 140,140,140,140,140,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255, 28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82, 255,28,82,255,28,82,255,28,82,255,28,82,255,140,140,140,140,140,140,28,82,255, 28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82, 255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82,255,28,82, 255,28,82,255,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, 140,140,140,140,140,140,140 }; return flagRGBData; } }; static const TranslationDutch dutch; #endif posterazor-1.5.1/src/overlappingTopLeft.png0000644000175000017500000000016311041177230020457 0ustar simrunsimrunPNG  IHDRt` PLTE~%IDATx^1 10q~ЃJ ]z9,wIIENDB`posterazor-1.5.1/src/flagBrazilianPortuguese.svg0000644000175000017500000001014711041177230021501 0ustar simrunsimrun image/svg+xml posterazor-1.5.1/src/Translations.cpp0000644000175000017500000003144711041177230017323 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "Translations.h" #include "TranslationEnglish.h" #include "TranslationGerman.h" #include "TranslationFrench.h" #ifdef WIN32 #include "TranslationPolish.h" #endif #include "TranslationItalian.h" #include "TranslationDutch.h" #include "TranslationSpanish.h" #include "TranslationBrazilianPortuguese.h" #if defined (WIN32) #include #elif defined (__APPLE__) #include #endif #include // for NULL static const struct { const TranslationInterface &translation; Translations::eLanguages language; } TranslationsMap[] = { {english, Translations::eLanguageUndefined} ,{english, Translations::eLanguageEnglish} ,{german, Translations::eLanguageGerman} ,{french, Translations::eLanguageFrench} #ifdef WIN32 ,{polish, Translations::eLanguagePolish} #endif ,{italian, Translations::eLanguageItalian} ,{dutch, Translations::eLanguageDutch} ,{spanish, Translations::eLanguageSpanish} ,{brazilianPortuguese, Translations::eLanguageBrazilianPortuguese} }; static const int TranslationsMapItemsCount = sizeof(TranslationsMap) / sizeof(TranslationsMap[0]); class TranslationSwitcher: public Translations { private: mutable const TranslationInterface *m_selectedTranslation; mutable eLanguages m_language; public: TranslationSwitcher() { selectLangue(eLanguageUndefined); } void selectLangue(eLanguages language) const { m_language = language; m_selectedTranslation = &getTranslationOfLanguage(m_language); } eLanguages getSelectedLanguage(void) const { return m_language; } const char* languageName(void) const {return m_selectedTranslation->languageName();} const char* absoluteSize(void) const {return m_selectedTranslation->absoluteSize();} const char* allImageFormats(void) const {return m_selectedTranslation->allImageFormats();} const char* back(void) const {return m_selectedTranslation->back();} const char* borders(void) const {return m_selectedTranslation->borders();} const char* bottom(void) const {return m_selectedTranslation->bottom();} const char* bottomLeft(void) const {return m_selectedTranslation->bottomLeft();} const char* bottomRight(void) const {return m_selectedTranslation->bottomRight();} const char* cancel(void) const {return m_selectedTranslation->cancel();} const char* colorType(void) const {return m_selectedTranslation->colorType();} const char* custom(void) const {return m_selectedTranslation->custom();} const char* fileCouldNotBeLoaded(void) const {return m_selectedTranslation->fileCouldNotBeLoaded();} const char* fileCouldNotBeSaved(void) const {return m_selectedTranslation->fileCouldNotBeSaved();} const char* format(void) const {return m_selectedTranslation->format();} const char* grayscale(void) const {return m_selectedTranslation->grayscale();} const char* height(void) const {return m_selectedTranslation->height();} const char* imageAlignment(void) const {return m_selectedTranslation->imageAlignment();} const char* imageInformations(void) const {return m_selectedTranslation->imageInformations();} const char* imageSize(void) const {return m_selectedTranslation->imageSize();} const char* inputImage(void) const {return m_selectedTranslation->inputImage();} const char* landscape(void) const {return m_selectedTranslation->landscape();} const char* language(void) const {return m_selectedTranslation->language();} const char* languageExplanation(void) const {return m_selectedTranslation->languageExplanation();} const char* launchPDFApplication(void) const {return m_selectedTranslation->launchPDFApplication();} const char* left(void) const {return m_selectedTranslation->left();} const char* loadAnInputImage(void) const {return m_selectedTranslation->loadAnInputImage();} const char* monochrome(void) const {return m_selectedTranslation->monochrome();} const char* next(void) const {return m_selectedTranslation->next();} const char* orientation(void) const {return m_selectedTranslation->orientation();} const char* overlappingPosition(void) const {return m_selectedTranslation->overlappingPosition();} const char* overlappingSize(void) const {return m_selectedTranslation->overlappingSize();} const char* overwriteFile(void) const {return m_selectedTranslation->overwriteFile();} const char* pages(void) const {return m_selectedTranslation->pages();} const char* palette(void) const {return m_selectedTranslation->palette();} const char* paperFormat(void) const {return m_selectedTranslation->paperFormat();} const char* portrait(void) const {return m_selectedTranslation->portrait();} const char* posteRazorHelp(void) const {return m_selectedTranslation->posteRazorHelp();} const char* posteRazorSettings(void) const {return m_selectedTranslation->posteRazorSettings();} const char* posteRazorWebSiteURL(void) const {return m_selectedTranslation->posteRazorWebSiteURL();} const char* posteRazorWebSite(void) const {return m_selectedTranslation->posteRazorWebSite();} const char* previewWithOpenGL(void) const {return m_selectedTranslation->previewWithOpenGL();} const char* previewWithOpenGLExplanation(void) const {return m_selectedTranslation->previewWithOpenGLExplanation();} const char* resolution(void) const {return m_selectedTranslation->resolution();} const char* right(void) const {return m_selectedTranslation->right();} const char* saveThePoster(void) const {return m_selectedTranslation->saveThePoster();} const char* saveThePosterAs(void) const {return m_selectedTranslation->saveThePosterAs();} const char* settings(void) const {return m_selectedTranslation->settings();} const char* Size(void) const {return m_selectedTranslation->Size();} const char* sizeInPages(void) const {return m_selectedTranslation->sizeInPages();} const char* sizeInPercent(void) const {return m_selectedTranslation->sizeInPercent();} const char* sizeInPixels(void) const {return m_selectedTranslation->sizeInPixels();} const char* sizeInUnitOfLength(void) const {return m_selectedTranslation->sizeInUnitOfLength();} const char* standard(void) const {return m_selectedTranslation->standard();} const char* stepXOfY(void) const {return m_selectedTranslation->stepXOfY();} const char* top(void) const {return m_selectedTranslation->top();} const char* topLeft(void) const {return m_selectedTranslation->topLeft();} const char* topRight(void) const {return m_selectedTranslation->topRight();} const char* unitOfLength(void) const {return m_selectedTranslation->unitOfLength();} const char* unitOfLengthExplanation(void) const {return m_selectedTranslation->unitOfLengthExplanation();} const char* width(void) const {return m_selectedTranslation->width();} const char* stepTitle01(void) const {return m_selectedTranslation->stepTitle01();} const char* stepTitle02(void) const {return m_selectedTranslation->stepTitle02();} const char* stepTitle03(void) const {return m_selectedTranslation->stepTitle03();} const char* stepTitle04(void) const {return m_selectedTranslation->stepTitle04();} const char* stepTitle05(void) const {return m_selectedTranslation->stepTitle05();} const char* helpHtml(void) const {return m_selectedTranslation->helpHtml();} const int flagImageWidth(void) const {return m_selectedTranslation->flagImageWidth();} const int flagImageHeight(void) const {return m_selectedTranslation->flagImageHeight();} const unsigned char* flagImageRGBData(void) const {return m_selectedTranslation->flagImageRGBData();} }; const Translations& Translations::instance(void) { static const TranslationSwitcher switcher; return switcher; } Translations::eLanguages Translations::getSystemLanguage(void) { eLanguages systemLanguage = eLanguageUndefined; #if defined (WIN32) const LANGID langID = GetSystemDefaultLangID(); const WORD primaryLangID = PRIMARYLANGID(langID); const WORD subLangID = SUBLANGID(langID); systemLanguage = (primaryLangID == LANG_ENGLISH)?eLanguageEnglish: (primaryLangID == LANG_GERMAN)?eLanguageGerman: (primaryLangID == LANG_FRENCH)?eLanguageFrench: (primaryLangID == LANG_POLISH)?eLanguagePolish: (primaryLangID == LANG_ITALIAN)?eLanguageItalian: (primaryLangID == LANG_DUTCH)?eLanguageDutch: (primaryLangID == LANG_SPANISH)?eLanguageSpanish: (primaryLangID == LANG_PORTUGUESE && subLangID == SUBLANG_PORTUGUESE_BRAZILIAN)?eLanguageBrazilianPortuguese: eLanguageUndefined; #elif defined (__APPLE__) CFBundleRef mainBundle = CFBundleGetMainBundle(); CFArrayRef locArray = CFBundleCopyBundleLocalizations(mainBundle); CFArrayRef preferredLanguages = CFBundleCopyPreferredLocalizationsFromArray(locArray); CFStringRef language = (CFStringRef)CFArrayGetValueAtIndex(preferredLanguages, 0); CFStringRef languageEnglish = CFSTR("English"); CFStringRef languageGerman = CFSTR("German"); CFStringRef languageFrench = CFSTR("French"); CFStringRef languageItalian = CFSTR("Italian"); CFStringRef languageDutch = CFSTR("Dutch"); CFStringRef languageSpanish = CFSTR("Spanish"); CFStringRef languageBrazilianPortuguese = CFSTR("BrazilianPortuguese"); systemLanguage = (CFStringCompare(language, languageEnglish, 0) == kCFCompareEqualTo)?eLanguageEnglish: (CFStringCompare(language, languageGerman, 0) == kCFCompareEqualTo)?eLanguageGerman: (CFStringCompare(language, languageFrench, 0) == kCFCompareEqualTo)?eLanguageFrench: (CFStringCompare(language, languageItalian, 0) == kCFCompareEqualTo)?eLanguageItalian: (CFStringCompare(language, languageDutch, 0) == kCFCompareEqualTo)?eLanguageDutch: (CFStringCompare(language, languageSpanish, 0) == kCFCompareEqualTo)?eLanguageSpanish: (CFStringCompare(language, languageBrazilianPortuguese, 0) == kCFCompareEqualTo)?eLanguageBrazilianPortuguese: eLanguageUndefined; CFRelease(languageEnglish); CFRelease(languageGerman); CFRelease(languageFrench); CFRelease(languageItalian); CFRelease(languageDutch); CFRelease(languageSpanish); CFRelease(languageBrazilianPortuguese); CFRelease(preferredLanguages); CFRelease(locArray); #endif return systemLanguage; } int Translations::getLanguagesCount(void) { return TranslationsMapItemsCount - 1; } Translations::eLanguages Translations::getLanguageForIndex(int index) { return TranslationsMap[index + 1].language; } const TranslationInterface& Translations::getTranslationOfLanguage(eLanguages language) { const TranslationInterface* foundTranslation = NULL; for (int i = 0; i < TranslationsMapItemsCount; i++) { if(TranslationsMap[i].language == language) { foundTranslation = &TranslationsMap[i].translation; break; } } if (!foundTranslation) foundTranslation = &TranslationsMap[0].translation; return *foundTranslation; } posterazor-1.5.1/src/alignmentMiddle.png0000644000175000017500000000021511041177230017726 0ustar simrunsimrunPNG  IHDR29 PLTE-WBtRNS@f/IDATx^}̱ C9Y2CTм"w? i9zۜ1YSD|IENDB`posterazor-1.5.1/src/FlPosteRazorDialogUI.cpp0000644000175000017500000031367611041177230020621 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ // generated by Fast Light User Interface Designer (fluid) version 1.0107 #include "FlPosteRazorDialogUI.h" void PosteRazorDialogUI::cb_m_settingsButton_i(FlImageTextButton*, void*) { openSettingsDialog(); } void PosteRazorDialogUI::cb_m_settingsButton(FlImageTextButton* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()))->cb_m_settingsButton_i(o,v); } #include static unsigned char idata_settingsIcon[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140, 140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140, 140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,140,140,140,255,1,198,5,255,1,198,5,255,1,198,5,255,1,198,5,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,255,0,0,255, 255,0,0,255,255,0,0,255,140,140,140,255,0,0,0,0,140,140,140,255,140,140,140,255, 140,140,140,255,140,140,140,255,0,0,0,0,140,140,140,255,140,140,140,255,140,140, 140,255,0,0,0,0,0,0,0,0,140,140,140,255,140,140,140,255,140,140,140,255,140,140, 140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140, 140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,1,198,5, 255,1,198,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,140,140,140,255,140,140,140,255, 46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,140,140,140,255,66,66,66, 255,66,66,66,255,140,140,140,255,0,0,0,0,0,0,0,0,140,140,140,255,60,60,255,255, 172,172,255,255,60,60,255,255,172,172,255,255,60,60,255,255,255,0,0,255,255,0,0, 255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,140,140,140,255,1,198,5,255, 1,198,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,140,140,140,255,46,46,46,255,46, 46,46,255,46,46,46,255,46,46,46,255,140,140,140,255,140,140,140,255,66,66,66, 255,140,140,140,255,0,0,0,0,140,140,140,255,140,140,140,255,140,140,140,255,172, 172,255,255,60,60,255,255,172,172,255,255,60,60,255,255,172,172,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,140,140,140,255,1,198,5,255,1,198,5,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,0,0,255,255,0,0,255,255,0,0,255,140,140,140, 255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,140,140,140,255,0,0,0,0, 140,140,140,255,66,66,66,255,66,66,66,255,140,140,140,255,66,66,66,255,140,140, 140,255,140,140,140,255,60,60,255,255,172,172,255,255,60,60,255,255,172,172,255, 255,60,60,255,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255, 255,0,0,255,140,140,140,255,1,198,5,255,1,198,5,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,0,0,255,255,0,0,255,140,140,140,255,46, 46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,140, 140,140,255,66,66,66,255,66,66,66,255,66,66,66,255,66,66,66,255,66,66,66,255, 140,140,140,255,140,140,140,255,172,172,255,255,60,60,255,255,172,172,255,255, 60,60,255,255,172,172,255,255,255,255,255,255,255,255,255,255,140,140,140,255, 140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255, 140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255, 140,140,140,255,140,140,140,255,255,0,0,255,140,140,140,255,46,46,46,255,46,46, 46,255,140,140,140,255,46,46,46,255,140,140,140,255,66,66,66,255,66,66,66,255, 66,66,66,255,140,140,140,255,140,140,140,255,140,140,140,255,0,0,0,0,140,140, 140,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255, 255,0,0,255,140,140,140,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255, 46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255, 46,46,46,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255, 140,140,140,255,0,0,0,0,140,140,140,255,66,66,66,255,66,66,66,255,66,66,66,255, 140,140,140,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,140,140,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,140,140,140,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46, 255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46,255,46,46,46, 255,46,46,46,255,140,140,140,255,0,0,0,0,0,0,0,0,140,140,140,255,140,140,140, 255,140,140,140,255,66,66,66,255,66,66,66,255,66,66,66,255,140,140,140,255,46, 46,46,255,140,140,140,255,0,0,0,0,0,0,0,0,0,0,0,0,140,140,140,255,255,0,0,255, 255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,140,140, 140,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255, 255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,140,140,140,255,0,0, 0,0,140,140,140,255,66,66,66,255,66,66,66,255,66,66,66,255,66,66,66,255,66,66, 66,255,140,140,140,255,46,46,46,255,46,46,46,255,46,46,46,255,140,140,140,255, 0,0,0,0,0,0,0,0,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140, 255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140, 255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255, 0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,255,0,0,255,140,140,140,255,0,0,0, 0,140,140,140,255,66,66,66,255,140,140,140,255,66,66,66,255,66,66,66,255,140, 140,140,255,0,0,0,0,140,140,140,255,46,46,46,255,46,46,46,255,46,46,46,255,140, 140,140,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,140,140,140,255,252,255,0,255,252,255,0,255,252,255,0,255,252,255,0,255, 252,255,0,255,252,255,0,255,252,255,0,255,252,255,0,255,252,255,0,255,252,255,0, 255,252,255,0,255,140,140,140,255,0,0,0,0,140,140,140,255,140,140,140,255,0,0,0, 0,140,140,140,255,66,66,66,255,140,140,140,255,0,0,0,0,0,0,0,0,140,140,140, 255,46,46,46,255,140,140,140,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,140,140,255,252,255,0,255,252,255,0,255, 252,255,0,255,252,255,0,255,252,255,0,255,252,255,0,255,252,255,0,255,252,255,0, 255,252,255,0,255,252,255,0,255,252,255,0,255,140,140,140,255,0,0,0,0,0,0,0,0,0, 0,0,0,140,140,140,255,66,66,66,255,66,66,66,255,140,140,140,255,0,0,0,0,0,0,0, 0,0,0,0,0,140,140,140,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,140,140,255,140,140,140,255,140,140, 140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140, 140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140,140,255,140,140, 140,255,0,0,0,0,0,0,0,0,0,0,0,0,140,140,140,255,140,140,140,255,140,140,140,255, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static Fl_RGB_Image image_settingsIcon(idata_settingsIcon, 35, 14, 4, 0); void PosteRazorDialogUI::cb_m_prevButton_i(Fl_Button*, void*) { prev(); } void PosteRazorDialogUI::cb_m_prevButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()))->cb_m_prevButton_i(o,v); } void PosteRazorDialogUI::cb_m_nextButton_i(Fl_Button*, void*) { next(); } void PosteRazorDialogUI::cb_m_nextButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()))->cb_m_nextButton_i(o,v); } void PosteRazorDialogUI::cb_m_imageLoadButton_i(Fl_Button*, void*) { loadInputImage(0); } void PosteRazorDialogUI::cb_m_imageLoadButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_imageLoadButton_i(o,v); } void PosteRazorDialogUI::cb_m_paperFormatTypeTabs_i(Fl_Tabs*, void*) { handlePaperSizeChangement(m_paperFormatTypeTabs); } void PosteRazorDialogUI::cb_m_paperFormatTypeTabs(Fl_Tabs* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()))->cb_m_paperFormatTypeTabs_i(o,v); } void PosteRazorDialogUI::cb_m_paperOrientationPortraitRadioButton_i(Fl_Round_Button*, void*) { handlePaperSizeChangement(m_paperOrientationPortraitRadioButton); } void PosteRazorDialogUI::cb_m_paperOrientationPortraitRadioButton(Fl_Round_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()->parent()))->cb_m_paperOrientationPortraitRadioButton_i(o,v); } void PosteRazorDialogUI::cb_m_paperOrientationLandscapeRadioButton_i(Fl_Round_Button*, void*) { handlePaperSizeChangement(m_paperOrientationLandscapeRadioButton); } void PosteRazorDialogUI::cb_m_paperOrientationLandscapeRadioButton(Fl_Round_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()->parent()))->cb_m_paperOrientationLandscapeRadioButton_i(o,v); } void PosteRazorDialogUI::cb_m_paperCustomWidthInput_i(FlPosteRazorSpinner*, void*) { handlePaperSizeChangement(m_paperCustomWidthInput); } void PosteRazorDialogUI::cb_m_paperCustomWidthInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_paperCustomWidthInput_i(o,v); } void PosteRazorDialogUI::cb_m_paperCustomHeightInput_i(FlPosteRazorSpinner*, void*) { handlePaperSizeChangement(m_paperCustomHeightInput); } void PosteRazorDialogUI::cb_m_paperCustomHeightInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_paperCustomHeightInput_i(o,v); } void PosteRazorDialogUI::cb_m_paperBorderTopInput_i(FlPosteRazorSpinner*, void*) { handlePaperSizeChangement(m_paperBorderTopInput); } void PosteRazorDialogUI::cb_m_paperBorderTopInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_paperBorderTopInput_i(o,v); } void PosteRazorDialogUI::cb_m_paperBorderRightInput_i(FlPosteRazorSpinner*, void*) { handlePaperSizeChangement(m_paperBorderRightInput); } void PosteRazorDialogUI::cb_m_paperBorderRightInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_paperBorderRightInput_i(o,v); } void PosteRazorDialogUI::cb_m_paperBorderBottomInput_i(FlPosteRazorSpinner*, void*) { handlePaperSizeChangement(m_paperBorderBottomInput); } void PosteRazorDialogUI::cb_m_paperBorderBottomInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_paperBorderBottomInput_i(o,v); } void PosteRazorDialogUI::cb_m_paperBorderLeftInput_i(FlPosteRazorSpinner*, void*) { handlePaperSizeChangement(m_paperBorderLeftInput); } void PosteRazorDialogUI::cb_m_paperBorderLeftInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_paperBorderLeftInput_i(o,v); } void PosteRazorDialogUI::cb_m_overlappingWidthInput_i(FlPosteRazorSpinner*, void*) { handleOverlappingChangement(m_overlappingWidthInput); } void PosteRazorDialogUI::cb_m_overlappingWidthInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_overlappingWidthInput_i(o,v); } void PosteRazorDialogUI::cb_m_overlappingHeightInput_i(FlPosteRazorSpinner*, void*) { handleOverlappingChangement(m_overlappingHeightInput); } void PosteRazorDialogUI::cb_m_overlappingHeightInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_overlappingHeightInput_i(o,v); } void PosteRazorDialogUI::cb_m_overlappingPositionTopLeftButton_i(Fl_Button*, void*) { handleOverlappingChangement(m_overlappingPositionTopLeftButton); } void PosteRazorDialogUI::cb_m_overlappingPositionTopLeftButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_overlappingPositionTopLeftButton_i(o,v); } static unsigned char idata_overlappingTopLeft[] = {132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132}; static Fl_RGB_Image image_overlappingTopLeft(idata_overlappingTopLeft, 24, 26, 3, 0); void PosteRazorDialogUI::cb_m_overlappingPositionTopRightButton_i(Fl_Button*, void*) { handleOverlappingChangement(m_overlappingPositionTopRightButton); } void PosteRazorDialogUI::cb_m_overlappingPositionTopRightButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_overlappingPositionTopRightButton_i(o,v); } static unsigned char idata_overlappingTopRight[] = {132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132}; static Fl_RGB_Image image_overlappingTopRight(idata_overlappingTopRight, 24, 26, 3, 0); void PosteRazorDialogUI::cb_m_overlappingPositionBottomLeftButton_i(Fl_Button*, void*) { handleOverlappingChangement(m_overlappingPositionBottomLeftButton); } void PosteRazorDialogUI::cb_m_overlappingPositionBottomLeftButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_overlappingPositionBottomLeftButton_i(o,v); } static unsigned char idata_overlappingBottomLeft[] = {132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132}; static Fl_RGB_Image image_overlappingBottomLeft(idata_overlappingBottomLeft, 24, 26, 3, 0); void PosteRazorDialogUI::cb_m_overlappingPositionBottomRightButton_i(Fl_Button*, void*) { handleOverlappingChangement(m_overlappingPositionBottomRightButton); } void PosteRazorDialogUI::cb_m_overlappingPositionBottomRightButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_overlappingPositionBottomRightButton_i(o,v); } static unsigned char idata_overlappingBottomRight[] = {132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230,228,228,230,228, 228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,228,230,228,228,230, 228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228,230,228,228, 230,228,228,230,228,228,230,228,228,230,228,228,230,228,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,252,130,132,252,130, 132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252, 130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132,252,130,132, 252,130,132,252,130,132,252,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132, 132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130, 132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132,130,132,132, 130,132,132,130,132,132,130,132,132,130,132,132,130,132}; static Fl_RGB_Image image_overlappingBottomRight(idata_overlappingBottomRight, 24, 26, 3, 0); void PosteRazorDialogUI::cb_m_posterSizeAbsoluteRadioButton_i(Fl_Round_Button*, void*) { updatePosterSizeGroupsState(); } void PosteRazorDialogUI::cb_m_posterSizeAbsoluteRadioButton(Fl_Round_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_posterSizeAbsoluteRadioButton_i(o,v); } void PosteRazorDialogUI::cb_m_posterAbsoluteWidthInput_i(FlPosteRazorSpinner*, void*) { updatePosterSizeFields(m_posterAbsoluteWidthInput); } void PosteRazorDialogUI::cb_m_posterAbsoluteWidthInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAbsoluteWidthInput_i(o,v); } void PosteRazorDialogUI::cb_m_posterAbsoluteHeightInput_i(FlPosteRazorSpinner*, void*) { updatePosterSizeFields(m_posterAbsoluteHeightInput); } void PosteRazorDialogUI::cb_m_posterAbsoluteHeightInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAbsoluteHeightInput_i(o,v); } void PosteRazorDialogUI::cb_m_posterSizeInPagesRadioButton_i(Fl_Round_Button*, void*) { updatePosterSizeGroupsState(); } void PosteRazorDialogUI::cb_m_posterSizeInPagesRadioButton(Fl_Round_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_posterSizeInPagesRadioButton_i(o,v); } void PosteRazorDialogUI::cb_m_posterPagesWidthInput_i(FlPosteRazorSpinner*, void*) { updatePosterSizeFields(m_posterPagesWidthInput); } void PosteRazorDialogUI::cb_m_posterPagesWidthInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterPagesWidthInput_i(o,v); } void PosteRazorDialogUI::cb_m_posterPagesHeightInput_i(FlPosteRazorSpinner*, void*) { updatePosterSizeFields(m_posterPagesHeightInput); } void PosteRazorDialogUI::cb_m_posterPagesHeightInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterPagesHeightInput_i(o,v); } void PosteRazorDialogUI::cb_m_posterSizePercentualRadioButton_i(Fl_Round_Button*, void*) { updatePosterSizeGroupsState(); } void PosteRazorDialogUI::cb_m_posterSizePercentualRadioButton(Fl_Round_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_posterSizePercentualRadioButton_i(o,v); } void PosteRazorDialogUI::cb_m_posterPercentualSizeInput_i(FlPosteRazorSpinner*, void*) { updatePosterSizeFields(m_posterPercentualSizeInput); } void PosteRazorDialogUI::cb_m_posterPercentualSizeInput(FlPosteRazorSpinner* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterPercentualSizeInput_i(o,v); } void PosteRazorDialogUI::cb_m_posterAlignmentTopButton_i(Fl_Button*, void*) { handlePosterImageAlignment(); } void PosteRazorDialogUI::cb_m_posterAlignmentTopButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAlignmentTopButton_i(o,v); } static unsigned char idata_alignmentTop[] = {128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255, 255,255,255,0,255,255,255,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0, 0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,255,255,255,0,128,128,128, 255,128,128,128,255,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255, 128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255, 128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128, 255,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255, 128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0, 0,255,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255, 0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,255, 128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255,255, 255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0, 0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0, 255,0,0,0,255,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128, 128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128, 255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255, 128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128, 128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255}; static Fl_RGB_Image image_alignmentTop(idata_alignmentTop, 15, 19, 4, 0); void PosteRazorDialogUI::cb_m_posterAlignmentMiddleButton_i(Fl_Button*, void*) { handlePosterImageAlignment(); } void PosteRazorDialogUI::cb_m_posterAlignmentMiddleButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAlignmentMiddleButton_i(o,v); } static unsigned char idata_alignmentMiddle[] = {128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,0,0,0,255, 0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0, 255,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0, 255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,255,128, 128,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0, 255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,0,0,0, 255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128, 255,255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,128, 128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128, 255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128, 255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,128,128,128,255,128, 128,128,255,255,255,255,0,255,255,255,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255, 0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,255,255,255,0, 128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128, 255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128, 255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128, 255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128, 255,128,128,128,255,128,128,128,255}; static Fl_RGB_Image image_alignmentMiddle(idata_alignmentMiddle, 15, 19, 4, 0); void PosteRazorDialogUI::cb_m_posterAlignmentBottomButton_i(Fl_Button*, void*) { handlePosterImageAlignment(); } void PosteRazorDialogUI::cb_m_posterAlignmentBottomButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAlignmentBottomButton_i(o,v); } static unsigned char idata_alignmentBottom[] = {128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128, 255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128, 128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128, 255,255,255,255,0,255,255,255,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0, 255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,255,255,255,0,128,128, 128,255,128,128,128,255,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255, 255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255, 255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255, 255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255, 0,0,0,255,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255, 255,0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255, 255,128,128,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255, 255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255, 255,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0, 0,255,0,0,0,255,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255}; static Fl_RGB_Image image_alignmentBottom(idata_alignmentBottom, 15, 19, 4, 0); void PosteRazorDialogUI::cb_m_posterAlignmentLeftButton_i(Fl_Button*, void*) { handlePosterImageAlignment(); } void PosteRazorDialogUI::cb_m_posterAlignmentLeftButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAlignmentLeftButton_i(o,v); } static unsigned char idata_alignmentLeft[] = {128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128, 128,255,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255, 0,0,0,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,0,0,0,255,255,128,128, 255,255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128, 128,128,255,128,128,128,255,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128, 255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,0,0,0,255, 255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128, 255,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0, 0,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,128,128,128,255,128,128,128,255,255,255,255,0,0,0,0,255,255,128,128,255, 255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255, 255,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128, 255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255}; static Fl_RGB_Image image_alignmentLeft(idata_alignmentLeft, 19, 15, 4, 0); void PosteRazorDialogUI::cb_m_posterAlignmentCenterButton_i(Fl_Button*, void*) { handlePosterImageAlignment(); } void PosteRazorDialogUI::cb_m_posterAlignmentCenterButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAlignmentCenterButton_i(o,v); } static unsigned char idata_alignmentCenter[] = {128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0, 255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255, 128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128, 128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255, 128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,255,255, 128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128, 128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255, 0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0, 0,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255, 255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255, 128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255, 128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255, 128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255, 128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255, 128,128,128,255,128,128,128,255,128,128,128,255}; static Fl_RGB_Image image_alignmentCenter(idata_alignmentCenter, 19, 15, 4, 0); void PosteRazorDialogUI::cb_m_posterAlignmentRightButton_i(Fl_Button*, void*) { handlePosterImageAlignment(); } void PosteRazorDialogUI::cb_m_posterAlignmentRightButton(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()->parent()))->cb_m_posterAlignmentRightButton_i(o,v); } static unsigned char idata_alignmentRight[] = {128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,255, 0,0,0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,128,128,128,255,128,128, 128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255, 255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255, 255,128,128,255,0,0,0,255,255,255,255,0,128,128,128,255,128,128,128,255,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,255,255, 128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,128,128,128, 255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0, 255,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255, 128,128,255,255,128,128,255,0,0,0,255,255,255,255,0,128,128,128,255,128,128,128, 255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 0,0,0,255,255,128,128,255,255,128,128,255,255,128,128,255,0,0,0,255,255,255, 255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,0,0,0,255,255,128,128,255,255,128,128,255,255, 128,128,255,0,0,0,255,255,255,255,0,128,128,128,255,128,128,128,255,255,255,255, 0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,0,0,0,255,0,0, 0,255,0,0,0,255,0,0,0,255,0,0,0,255,255,255,255,0,128,128,128,255,128,128,128, 255,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,128,128,128,255,128,128,128,255,255,255,255,0,255,255,255,0,255,255,255,0, 255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255, 255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255,255,255,0,255, 255,255,0,255,255,255,0,255,255,255,0,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128,128,255,128,128, 128,255,128,128,128,255,128,128,128,255}; static Fl_RGB_Image image_alignmentRight(idata_alignmentRight, 19, 15, 4, 0); void PosteRazorDialogUI::cb_14filesave_i(Fl_Button*, void*) { savePoster(); } void PosteRazorDialogUI::cb_14filesave(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_14filesave_i(o,v); } void PosteRazorDialogUI::cb_m_setLaunchPDFApplicationCheckButton_i(Fl_Check_Button*, void*) { setLaunchPDFApplication(); } void PosteRazorDialogUI::cb_m_setLaunchPDFApplicationCheckButton(Fl_Check_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()->parent()->parent()))->cb_m_setLaunchPDFApplicationCheckButton_i(o,v); } void PosteRazorDialogUI::cb__i(Fl_Button*, void*) { openHelpDialog(); } void PosteRazorDialogUI::cb_(Fl_Button* o, void* v) { ((PosteRazorDialogUI*)(o->parent()->parent()))->cb__i(o,v); } PosteRazorDialogUI::PosteRazorDialogUI(int X, int Y, int W, int H, const char *L) : Fl_Double_Window(X, Y, W, H, L) { _PosteRazorDialogUI(); } PosteRazorDialogUI::PosteRazorDialogUI(int W, int H, const char *L) : Fl_Double_Window(0, 0, W, H, L) { clear_flag(16); _PosteRazorDialogUI(); } void PosteRazorDialogUI::_PosteRazorDialogUI() { PosteRazorDialogUI *w = this; PosteRazorDialogUI *o = this; o->box(FL_FLAT_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NO_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->user_data((void*)(this)); o->align(FL_ALIGN_TOP); o->when(FL_WHEN_RELEASE); { Fl_Group* o = new Fl_Group(10, 420, 600, 25); { Fl_Box* o = new Fl_Box(295, 420, 15, 25); Fl_Group::current()->resizable(o); } { FlImageTextButton* o = m_settingsButton = new FlImageTextButton(10, 420, 220, 25, "Settings..."); o->box(FL_UP_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_GRAY0); o->callback((Fl_Callback*)cb_m_settingsButton); o->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE); o->when(FL_WHEN_RELEASE); } { Fl_Box* o = m_settingsButtonLabel = new Fl_Box(230, 420, 40, 25); o->image(image_settingsIcon); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); o->hide(); } { Fl_Button* o = m_prevButton = new Fl_Button(380, 420, 110, 25, "@-2<- Back"); o->labelcolor(FL_GRAY0); o->callback((Fl_Callback*)cb_m_prevButton); } { Fl_Button* o = m_nextButton = new Fl_Button(500, 420, 110, 25, "Next @-2->"); o->labelcolor(FL_GRAY0); o->callback((Fl_Callback*)cb_m_nextButton); } o->end(); } { Fl_Wizard* o = m_wizard = new Fl_Wizard(315, 45, 295, 365); o->box(FL_THIN_DOWN_BOX); o->user_data((void*)(this)); { Fl_Group* o = m_loadInputImageStep = new Fl_Group(315, 45, 295, 365); o->color(FL_LIGHT1); o->hide(); { Fl_Group* o = m_imageLoadGroup = new Fl_Group(325, 69, 275, 25, "Input Image"); { Fl_Box* o = m_inputFileNameLabel = new Fl_Box(325, 69, 250, 25); o->box(FL_THIN_DOWN_BOX); o->color((Fl_Color)55); o->align(68|FL_ALIGN_INSIDE); Fl_Group::current()->resizable(o); } { Fl_Button* o = m_imageLoadButton = new Fl_Button(575, 69, 25, 25, "@+1fileopen"); o->labelcolor((Fl_Color)134); o->callback((Fl_Callback*)cb_m_imageLoadButton); } o->end(); } { Fl_Group* o = m_imageInfoGroup = new Fl_Group(325, 120, 275, 85, "Image information"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); { Fl_Box* o = m_imageInfoKeysLabel = new Fl_Box(325, 130, 135, 65); o->align(FL_ALIGN_TOP_RIGHT|FL_ALIGN_INSIDE); } { Fl_Box* o = m_imageInfoValuesLabel = new Fl_Box(460, 130, 135, 65); o->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE); } o->end(); } { Fl_Box* o = new Fl_Box(315, 410, 295, 0); Fl_Group::current()->resizable(o); } o->end(); } { Fl_Group* o = m_paperSizeStep = new Fl_Group(315, 45, 295, 365); { Fl_Tabs* o = m_paperFormatTypeTabs = new Fl_Tabs(325, 70, 275, 140, "Paper size"); o->callback((Fl_Callback*)cb_m_paperFormatTypeTabs); { Fl_Group* o = m_paperFormatStandardGroup = new Fl_Group(325, 95, 275, 115, "Standard"); o->box(FL_THIN_UP_BOX); o->selection_color((Fl_Color)40); o->hide(); { Fl_Choice* o = m_paperFormatChoice = new Fl_Choice(425, 105, 165, 25, "Format:"); o->down_box(FL_BORDER_BOX); } { Fl_Group* o = m_paperOrientationGroup = new Fl_Group(425, 140, 165, 60, "Orientation:"); o->box(FL_THIN_DOWN_BOX); o->color((Fl_Color)43); o->align(FL_ALIGN_LEFT); { Fl_Round_Button* o = m_paperOrientationPortraitRadioButton = new Fl_Round_Button(460, 145, 125, 25, "Portrait"); o->type(102); o->down_box(FL_ROUND_DOWN_BOX); o->callback((Fl_Callback*)cb_m_paperOrientationPortraitRadioButton); } { Fl_Round_Button* o = m_paperOrientationLandscapeRadioButton = new Fl_Round_Button(460, 170, 125, 25, "Landscape"); o->type(102); o->down_box(FL_ROUND_DOWN_BOX); o->callback((Fl_Callback*)cb_m_paperOrientationLandscapeRadioButton); } o->end(); } o->end(); } { Fl_Group* o = m_paperFormatCustomGroup = new Fl_Group(325, 95, 275, 115, "Custom"); o->box(FL_THIN_UP_BOX); o->selection_color((Fl_Color)40); { FlPosteRazorSpinner* o = m_paperCustomWidthInput = new FlPosteRazorSpinner(425, 122, 95, 25, "Width:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_paperCustomWidthInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } { Fl_Box* o = m_paperCustomWidthDimensionUnitLabel = new Fl_Box(520, 122, 75, 25, "cm"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } { FlPosteRazorSpinner* o = m_paperCustomHeightInput = new FlPosteRazorSpinner(425, 157, 95, 25, "Height:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_paperCustomHeightInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } { Fl_Box* o = m_paperCustomHeightDimensionUnitLabel = new Fl_Box(520, 157, 75, 25, "cm"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } o->end(); } o->end(); } { Fl_Group* o = m_paperBordersGroup = new Fl_Group(325, 235, 275, 135, "Borders (cm)"); o->box(FL_THIN_DOWN_BOX); o->color((Fl_Color)43); { FlPosteRazorSpinner* o = m_paperBorderTopInput = new FlPosteRazorSpinner(422, 260, 80, 25, "Top"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_paperBorderTopInput); o->align(FL_ALIGN_TOP); o->when(FL_WHEN_CHANGED); o->end(); } { FlPosteRazorSpinner* o = m_paperBorderRightInput = new FlPosteRazorSpinner(502, 290, 80, 25, "Right"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_paperBorderRightInput); o->align(FL_ALIGN_TOP_RIGHT); o->when(FL_WHEN_CHANGED); o->end(); } { FlPosteRazorSpinner* o = m_paperBorderBottomInput = new FlPosteRazorSpinner(422, 320, 80, 25, "Bottom"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_paperBorderBottomInput); o->align(FL_ALIGN_BOTTOM); o->when(FL_WHEN_CHANGED); o->end(); } { FlPosteRazorSpinner* o = m_paperBorderLeftInput = new FlPosteRazorSpinner(342, 290, 80, 25, "Left"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_paperBorderLeftInput); o->align(FL_ALIGN_TOP_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } o->end(); } { Fl_Box* o = new Fl_Box(315, 400, 295, 10); Fl_Group::current()->resizable(o); } o->end(); } { Fl_Group* o = m_overlappingStep = new Fl_Group(315, 45, 295, 365); o->hide(); { Fl_Group* o = m_overlappingSizeGroup = new Fl_Group(325, 70, 275, 75, "Overlapping size"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); o->selection_color(FL_LIGHT3); { FlPosteRazorSpinner* o = m_overlappingWidthInput = new FlPosteRazorSpinner(430, 80, 90, 25, "Width:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_overlappingWidthInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } { Fl_Box* o = m_overlappingWidthDimensionUnitLabel = new Fl_Box(520, 80, 75, 25, "cm"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } { FlPosteRazorSpinner* o = m_overlappingHeightInput = new FlPosteRazorSpinner(430, 110, 90, 25, "Height:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_overlappingHeightInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } { Fl_Box* o = m_overlappingHeightDimensionUnitLabel = new Fl_Box(520, 110, 75, 25, "cm"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } o->end(); } { Fl_Box* o = new Fl_Box(315, 410, 290, 0); Fl_Group::current()->resizable(o); } { Fl_Group* o = m_overlappingPositionGroup = new Fl_Group(325, 170, 275, 190, "Overlapping position"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); o->selection_color(FL_LIGHT3); { Fl_Button* o = m_overlappingPositionTopLeftButton = new Fl_Button(335, 180, 120, 80, "Top left"); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_overlappingTopLeft); o->callback((Fl_Callback*)cb_m_overlappingPositionTopLeftButton); o->align(FL_ALIGN_WRAP); } { Fl_Button* o = m_overlappingPositionTopRightButton = new Fl_Button(470, 180, 120, 80, "Top right"); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_overlappingTopRight); o->callback((Fl_Callback*)cb_m_overlappingPositionTopRightButton); o->align(FL_ALIGN_WRAP); } { Fl_Button* o = m_overlappingPositionBottomLeftButton = new Fl_Button(335, 270, 120, 80, "Bottom left"); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_overlappingBottomLeft); o->callback((Fl_Callback*)cb_m_overlappingPositionBottomLeftButton); o->align(FL_ALIGN_WRAP); } { Fl_Button* o = m_overlappingPositionBottomRightButton = new Fl_Button(470, 270, 120, 80, "Bottom right"); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_overlappingBottomRight); o->callback((Fl_Callback*)cb_m_overlappingPositionBottomRightButton); o->align(FL_ALIGN_WRAP); } o->end(); } o->end(); } { Fl_Group* o = m_posterSizeStep = new Fl_Group(315, 45, 295, 365); o->hide(); { Fl_Group* o = m_posterSizeGroup = new Fl_Group(325, 70, 275, 250, "Image size"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); o->selection_color(FL_LIGHT3); { Fl_Round_Button* o = m_posterSizeAbsoluteRadioButton = new Fl_Round_Button(335, 80, 260, 20, "Absolute image size"); o->type(102); o->down_box(FL_ROUND_DOWN_BOX); o->callback((Fl_Callback*)cb_m_posterSizeAbsoluteRadioButton); } { Fl_Group* o = m_posterSizeAbsoluteGroup = new Fl_Group(335, 105, 260, 55); { FlPosteRazorSpinner* o = m_posterAbsoluteWidthInput = new FlPosteRazorSpinner(430, 105, 90, 25, "Width:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_posterAbsoluteWidthInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } { Fl_Box* o = m_posterAbsoluteWidthDimensionUnitLabel = new Fl_Box(520, 105, 70, 25, "cm"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } { FlPosteRazorSpinner* o = m_posterAbsoluteHeightInput = new FlPosteRazorSpinner(430, 135, 90, 25, "Height:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_posterAbsoluteHeightInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } { Fl_Box* o = m_posterAbsoluteHeightDimensionUnitLabel = new Fl_Box(520, 135, 70, 25, "cm"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } o->end(); } { Fl_Round_Button* o = m_posterSizeInPagesRadioButton = new Fl_Round_Button(335, 170, 260, 20, "Size in pages"); o->type(102); o->down_box(FL_ROUND_DOWN_BOX); o->callback((Fl_Callback*)cb_m_posterSizeInPagesRadioButton); } { Fl_Group* o = m_posterSizeInPagesGroup = new Fl_Group(335, 195, 260, 55); { FlPosteRazorSpinner* o = m_posterPagesWidthInput = new FlPosteRazorSpinner(430, 195, 90, 25, "Width:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_posterPagesWidthInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->setSpinnerVisible(true); o->end(); } { Fl_Box* o = m_posterPagesWidthLabel = new Fl_Box(520, 195, 70, 25, "pages"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } { FlPosteRazorSpinner* o = m_posterPagesHeightInput = new FlPosteRazorSpinner(430, 225, 90, 25, "Height:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_posterPagesHeightInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->setSpinnerVisible(true); o->end(); } { Fl_Box* o = m_posterPagesHeightLabel = new Fl_Box(520, 225, 70, 25, "pages"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } o->end(); } { Fl_Round_Button* o = m_posterSizePercentualRadioButton = new Fl_Round_Button(335, 260, 260, 20, "Image size in percent"); o->type(102); o->down_box(FL_ROUND_DOWN_BOX); o->callback((Fl_Callback*)cb_m_posterSizePercentualRadioButton); } { Fl_Group* o = m_posterSizePercentualGroup = new Fl_Group(335, 285, 260, 25); { FlPosteRazorSpinner* o = m_posterPercentualSizeInput = new FlPosteRazorSpinner(430, 285, 90, 25, "Size:"); o->box(FL_NO_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->callback((Fl_Callback*)cb_m_posterPercentualSizeInput); o->align(FL_ALIGN_LEFT); o->when(FL_WHEN_CHANGED); o->end(); } { Fl_Box* o = m_posterPercentualWidthLabel = new Fl_Box(520, 285, 70, 25, "%"); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); } o->end(); } o->end(); } { Fl_Group* o = m_imageAlignmentGroup = new Fl_Group(325, 345, 275, 51, "Image alignment"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); o->selection_color(FL_DARK2); { Fl_Group* o = new Fl_Group(335, 355, 113, 31); { Fl_Button* o = m_posterAlignmentTopButton = new Fl_Button(335, 355, 31, 31); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_alignmentTop); o->callback((Fl_Callback*)cb_m_posterAlignmentTopButton); } { Fl_Button* o = m_posterAlignmentMiddleButton = new Fl_Button(376, 355, 31, 31); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_alignmentMiddle); o->callback((Fl_Callback*)cb_m_posterAlignmentMiddleButton); } { Fl_Button* o = m_posterAlignmentBottomButton = new Fl_Button(417, 355, 31, 31); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_alignmentBottom); o->callback((Fl_Callback*)cb_m_posterAlignmentBottomButton); } o->end(); } { Fl_Group* o = new Fl_Group(477, 355, 113, 31); { Fl_Button* o = m_posterAlignmentLeftButton = new Fl_Button(477, 355, 31, 31); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_alignmentLeft); o->callback((Fl_Callback*)cb_m_posterAlignmentLeftButton); } { Fl_Button* o = m_posterAlignmentCenterButton = new Fl_Button(518, 355, 31, 31); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_alignmentCenter); o->callback((Fl_Callback*)cb_m_posterAlignmentCenterButton); } { Fl_Button* o = m_posterAlignmentRightButton = new Fl_Button(559, 355, 31, 31); o->type(102); o->color(FL_DARK1); o->selection_color((Fl_Color)55); o->image(image_alignmentRight); o->callback((Fl_Callback*)cb_m_posterAlignmentRightButton); } o->end(); } o->end(); } { Fl_Box* o = new Fl_Box(315, 410, 295, 0); Fl_Group::current()->resizable(o); } o->end(); } { Fl_Group* o = m_savePosterStep = new Fl_Group(315, 45, 295, 365); o->hide(); { Fl_Group* o = m_savePosterGroup = new Fl_Group(325, 70, 275, 85, "Save the Poster"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); { Fl_Button* o = new Fl_Button(335, 80, 255, 25, "@+14filesave"); o->labelcolor((Fl_Color)37); o->callback((Fl_Callback*)cb_14filesave); } { Fl_Check_Button* o = m_setLaunchPDFApplicationCheckButton = new Fl_Check_Button(335, 110, 255, 40, "Launch PDF application after saving"); o->down_box(FL_DOWN_BOX); o->callback((Fl_Callback*)cb_m_setLaunchPDFApplicationCheckButton); o->align(132|FL_ALIGN_INSIDE); } o->end(); } { Fl_Box* o = new Fl_Box(315, 410, 295, 0); Fl_Group::current()->resizable(o); } o->end(); } o->end(); } { FlPaintCanvasGroup* o = m_paintCanvasGroup = new FlPaintCanvasGroup(10, 45, 300, 365); o->box(FL_FLAT_BOX); o->color(FL_DARK2); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NORMAL_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor((Fl_Color)30); o->align(FL_ALIGN_TOP); o->when(FL_WHEN_RELEASE); o->end(); Fl_Group::current()->resizable(o); } { Fl_Group* o = new Fl_Group(10, 10, 600, 25); { Fl_Box* o = m_stepInfoBox = new Fl_Box(10, 10, 570, 25, "Step 1 of 8: Load an image"); o->box(FL_THIN_UP_BOX); o->color((Fl_Color)10); o->labelfont(1); o->labelsize(15); o->labelcolor(FL_GRAY0); o->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); Fl_Group::current()->resizable(o); } { Fl_Button* o = new Fl_Button(585, 10, 25, 25, "?"); o->color((Fl_Color)10); o->labelfont(1); o->labelsize(15); o->labelcolor(FL_GRAY0); o->callback((Fl_Callback*)cb_); } o->end(); } // ****** Load input image step: // ****** Paper size step: // ****** Overlapping step: // ****** Poster size step: // ****** Save poster step: size_range(this->w(), this->h()); end(); } void PosteRazorHelpDialogUI::cb_OK_i(Fl_Return_Button*, void*) { hide(); } void PosteRazorHelpDialogUI::cb_OK(Fl_Return_Button* o, void* v) { ((PosteRazorHelpDialogUI*)(o->parent()->parent()))->cb_OK_i(o,v); } void PosteRazorHelpDialogUI::cb_m_homepageButton_i(Fl_Button*, void*) { handleHomepageButtonClick(); } void PosteRazorHelpDialogUI::cb_m_homepageButton(Fl_Button* o, void* v) { ((PosteRazorHelpDialogUI*)(o->parent()->parent()))->cb_m_homepageButton_i(o,v); } PosteRazorHelpDialogUI::PosteRazorHelpDialogUI(int X, int Y, int W, int H, const char *L) : Fl_Double_Window(X, Y, W, H, L) { _PosteRazorHelpDialogUI(); } PosteRazorHelpDialogUI::PosteRazorHelpDialogUI(int W, int H, const char *L) : Fl_Double_Window(0, 0, W, H, L) { clear_flag(16); _PosteRazorHelpDialogUI(); } void PosteRazorHelpDialogUI::_PosteRazorHelpDialogUI() { PosteRazorHelpDialogUI *w = this; PosteRazorHelpDialogUI *o = this; o->box(FL_FLAT_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NO_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->user_data((void*)(this)); o->align(FL_ALIGN_TOP); o->when(FL_WHEN_RELEASE); { Fl_Help_View* o = m_help_view = new Fl_Help_View(10, 10, 480, 345); o->labelsize(8); Fl_Group::current()->resizable(o); o->textsize(14); o->textfont(FL_HELVETICA); } { Fl_Group* o = new Fl_Group(10, 365, 480, 25); { Fl_Return_Button* o = new Fl_Return_Button(405, 365, 85, 25, "OK"); o->callback((Fl_Callback*)cb_OK); } { Fl_Button* o = m_homepageButton = new Fl_Button(10, 365, 185, 25, "Homepage"); o->callback((Fl_Callback*)cb_m_homepageButton); } { Fl_Box* o = new Fl_Box(333, 365, 10, 25); o->labelsize(8); Fl_Group::current()->resizable(o); } o->end(); } size_range(300, 150); end(); } void PosteRazorHelpDialogUI::setHomepageButtonLabel(const char *label) { m_homepageButton->label(label); } void PosteRazorSettingsDialogUI::cb_m_useOpenGLCheckButton_i(Fl_Check_Button*, void*) { handleUseOpenGLChangement(); } void PosteRazorSettingsDialogUI::cb_m_useOpenGLCheckButton(Fl_Check_Button* o, void* v) { ((PosteRazorSettingsDialogUI*)(o->parent()->parent()->parent()))->cb_m_useOpenGLCheckButton_i(o,v); } void PosteRazorSettingsDialogUI::cb_m_okButton_i(Fl_Return_Button*, void*) { m_okWasPressed = true; hide(); } void PosteRazorSettingsDialogUI::cb_m_okButton(Fl_Return_Button* o, void* v) { ((PosteRazorSettingsDialogUI*)(o->parent()->parent()))->cb_m_okButton_i(o,v); } void PosteRazorSettingsDialogUI::cb_m_cancelButton_i(Fl_Button*, void*) { hide(); } void PosteRazorSettingsDialogUI::cb_m_cancelButton(Fl_Button* o, void* v) { ((PosteRazorSettingsDialogUI*)(o->parent()->parent()))->cb_m_cancelButton_i(o,v); } PosteRazorSettingsDialogUI::PosteRazorSettingsDialogUI(int X, int Y, int W, int H, const char *L) : Fl_Double_Window(X, Y, W, H, L) { _PosteRazorSettingsDialogUI(); } PosteRazorSettingsDialogUI::PosteRazorSettingsDialogUI(int W, int H, const char *L) : Fl_Double_Window(0, 0, W, H, L) { clear_flag(16); _PosteRazorSettingsDialogUI(); } void PosteRazorSettingsDialogUI::_PosteRazorSettingsDialogUI() { PosteRazorSettingsDialogUI *w = this; PosteRazorSettingsDialogUI *o = this; o->box(FL_FLAT_BOX); o->color(FL_BACKGROUND_COLOR); o->selection_color(FL_BACKGROUND_COLOR); o->labeltype(FL_NO_LABEL); o->labelfont(0); o->labelsize(14); o->labelcolor(FL_FOREGROUND_COLOR); o->user_data((void*)(this)); o->align(FL_ALIGN_TOP); o->when(FL_WHEN_RELEASE); { Fl_Group* o = m_backgroudGroup = new Fl_Group(10, 10, 365, 345); o->box(FL_THIN_DOWN_BOX); o->labelsize(8); { Fl_Group* o = m_unitOfLengthGroup = new Fl_Group(20, 35, 345, 85, "Units"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); { Fl_Group* o = m_unitOfLengthButtonsGroup = new Fl_Group(30, 45, 325, 25); o->end(); } { Fl_Box* o = m_unitOfLengthExplanationBox = new Fl_Box(30, 80, 325, 30, "Choose the distance unit you want to work with"); o->align(132|FL_ALIGN_INSIDE); } o->end(); } { Fl_Group* o = m_useOpenGLGroup = new Fl_Group(20, 145, 345, 105, "Preview with OpenGL"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); { Fl_Check_Button* o = m_useOpenGLCheckButton = new Fl_Check_Button(30, 154, 325, 20, "use OpenGL"); o->down_box(FL_DOWN_BOX); o->callback((Fl_Callback*)cb_m_useOpenGLCheckButton); } { Fl_Box* o = m_useOpenGLExplanationBox = new Fl_Box(30, 179, 325, 60, "OpenGL enables a smooth preview on modern systems. It could slow the preview \ down on old systems, though."); o->align(132|FL_ALIGN_INSIDE); } o->end(); } { Fl_Group* o = m_languageGroup = new Fl_Group(20, 275, 345, 70, "Language"); o->box(FL_THIN_DOWN_BOX); o->color(FL_DARK2); { Fl_Group* o = m_languageButtonsGroup = new Fl_Group(30, 285, 325, 25); o->end(); } { Fl_Box* o = m_languageExplanationBox = new Fl_Box(30, 315, 325, 20, "Choose your language"); o->align(132|FL_ALIGN_INSIDE); } o->end(); } o->end(); } { Fl_Group* o = m_confirmButtonsGroup = new Fl_Group(10, 365, 365, 25); { Fl_Return_Button* o = m_okButton = new Fl_Return_Button(280, 365, 95, 25, "OK"); o->callback((Fl_Callback*)cb_m_okButton); } { Fl_Button* o = m_cancelButton = new Fl_Button(175, 365, 95, 25, "Cancel"); o->callback((Fl_Callback*)cb_m_cancelButton); } { Fl_Box* o = new Fl_Box(10, 365, 10, 25); o->labelsize(8); Fl_Group::current()->resizable(o); } o->end(); } m_okWasPressed = false; set_modal(); end(); } bool PosteRazorSettingsDialogUI::show_modal(void) { m_okWasPressed = true; show(); while(visible()) Fl::wait(); return m_okWasPressed; } posterazor-1.5.1/src/PaperFormats.h0000644000175000017500000000347011041177230016705 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef PAPERFORMATS_H #define PAPERFORMATS_H #include "UnitsOfLength.h" class PaperFormats { public: enum ePaperFormats { ePaperFormatA4, ePaperFormatA3, ePaperFormatLegal, ePaperFormatLetter, ePaperFormatTabloid }; enum ePaperOrientations { ePaperOrientationPortrait, ePaperOrientationLandscape }; static int getPaperFormatsCount(void); static ePaperFormats getPaperFormatForIndex(int index); static const char* getPaperFormatName(ePaperFormats format); static ePaperFormats getPaperFormatForName(const char* name); static double getPaperDimension(ePaperFormats format, ePaperOrientations orientation, UnitsOfLength::eUnitsOfLength unit, bool width); static double getPaperWidth(ePaperFormats format, ePaperOrientations orientation, UnitsOfLength::eUnitsOfLength unit); static double getPaperHeight(ePaperFormats format, ePaperOrientations orientation, UnitsOfLength::eUnitsOfLength unit); }; #endif // PAPERFORMATS_H posterazor-1.5.1/src/FlImageTextButton.h0000644000175000017500000000232411041177230017644 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef FLIMAGETEXTBUTTON_H #define FLIMAGETEXTBUTTON_H #include class Fl_Image; class FlImageTextButton: public Fl_Button { public: FlImageTextButton(int x, int y, int w, int h, const char* label = 0); void labelImage(Fl_Image *image); private: Fl_Image *m_labelImage; virtual void draw(); }; #endif // FLIMAGETEXTBUTTON_H posterazor-1.5.1/src/ImageIOTypes.cpp0000644000175000017500000000611011041177230017126 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "ImageIOTypes.h" static const char* const g_imageFormats[] = { "Windows, OS/2 Bitmap", // 0 "Dr. Halo", "DirectDraw Surface", "Graphic Interchange Format", "Windows Icon", // 4 "Amiga IFF", "JBIG", "Independent JPEG Group", "Commodore 64 Koala", "Portable Bitmap", // 9 "Kodak PhotoCD", "PC Paintbrush Bitmap", "Portable Graymap", "Portable Network Graphics", "Portable Pixelmap", // 14 "Photoshop Document", "Sun Raster Graphic", "Targa", "Tagged Image File Format", "Wireless Bitmap", // 19 "X11 Bitmap", "X11 Pixmap" }; static const int g_imageFormatsCount = sizeof(g_imageFormats)/sizeof(g_imageFormats[0]); static const struct { const char* const name; int imageFormatIndex; } g_fileExtensions[] = { {"BMP", 0}, {"CUT", 1}, {"DDS", 2}, {"GIF", 3}, {"ICO", 4}, {"IFF", 5}, {"LBM", 5}, {"JBIG", 6}, {"JPG", 7}, {"JPEG", 7}, {"JPE", 7}, {"JIF", 7}, {"KOA", 8}, {"PBM", 9}, {"PCD", 10}, {"PCX", 11}, {"PGM", 12}, {"PNG", 13}, {"PPM", 14}, {"PSD", 15}, {"RAS", 16}, {"TGA", 17}, {"TIF", 18}, {"TIFF", 18}, {"WBMP", 19}, {"XBM", 20}, {"XPM", 21} }; static const int g_fileExtensionsCount = sizeof(g_fileExtensions)/sizeof(g_fileExtensions[0]); int ImageIOTypes::getInputImageFormatsCount(void) { return g_imageFormatsCount; } const char* ImageIOTypes::getInputImageFormat(int imageFormatIndex) { return g_imageFormats[imageFormatIndex]; } int ImageIOTypes::getFileExtensionsCount(int imageFormatIndex) { int result = 0; for(int i = 0; i < g_fileExtensionsCount; i++) { if (g_fileExtensions[i].imageFormatIndex == imageFormatIndex) { result++; } } return result; } const char* ImageIOTypes::getFileExtensionForFormat(int extensionIndex, int imageFormatIndex) { const char *result = g_fileExtensions[0].name; int nthFoundExtension = 0; for (int i = 0; i < g_fileExtensionsCount; i++) { if (imageFormatIndex == g_fileExtensions[i].imageFormatIndex) { result = g_fileExtensions[i].name; if (extensionIndex == nthFoundExtension) break; nthFoundExtension++; } } return result; } posterazor-1.5.1/src/PosteRazorCmdLine.cpp0000644000175000017500000000303311041177230020174 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "PosteRazor.h" int main(int argc, char *argv[]) { int error = 0; if (argc < 3) return 1; // This is no real main program, yet. It is just testing the PosteRazor API. PosteRazor* prz = PosteRazor::createPosteRazor(); char errorMessage[1024]; bool loaded = prz->loadInputImage(argv[1], errorMessage, sizeof(errorMessage)); if (loaded) { prz->setPosterWidth(PosteRazorEnums::ePosterSizeModePages, 2.5); prz->setPosterVerticalAlignment(PosteRazorEnums::eVerticalAlignmentMiddle); prz->setPosterHorizontalAlignment(PosteRazorEnums::eHorizontalAlignmentCenter); int err = prz->savePoster(argv[2]); int huhu= 1; } delete prz; return error; } posterazor-1.5.1/src/flagPolish.png0000644000175000017500000000016211041177230016722 0ustar simrunsimrunPNG  IHDR buh PLTE9$IDATx^uA  L`b* GcAP=CFIENDB`posterazor-1.5.1/src/UnitsOfLength.cpp0000644000175000017500000000661111041177230017366 0ustar simrunsimrun/* PosteRazor - Make your own poster! Copyright (C) 2005-2008 by Alessandro Portale http://posterazor.sourceforge.net/ This file is part of PosteRazor PosteRazor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PosteRazor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with PosteRazor; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include "UnitsOfLength.h" #include typedef struct { UnitsOfLength::eUnitsOfLength unit; char *name; double multipleOfCentimeter; } UnitsOfLengthStruct; // Needs to have the same order as the eUnitsOfLength enum!!! static const UnitsOfLengthStruct g_UnitsOfLength[] = { {UnitsOfLength::eUnitOfLengthMeter, "m", 100}, {UnitsOfLength::eUnitOfLengthMillimeter, "mm", 0.1}, {UnitsOfLength::eUnitOfLengthCentimeter, "cm", 1.0}, {UnitsOfLength::eUnitOfLengthInch, "in", 2.54}, {UnitsOfLength::eUnitOfLengthFeet, "ft", 2.54 * 12.0}, {UnitsOfLength::eUnitOfLengthPoints, "pt", 2.54 / 72.0} }; static const int g_UnitsOfLengthCount = sizeof(g_UnitsOfLength)/sizeof(g_UnitsOfLength[0]); int UnitsOfLength::getUnitsOfLengthCount(void) { return g_UnitsOfLengthCount; } UnitsOfLength::eUnitsOfLength UnitsOfLength::getUnitOfLengthForIndex(int index) { return g_UnitsOfLength[index].unit; } int UnitsOfLength::getUnitOfLengthIndex(eUnitsOfLength unit) { int index = 0; for (int i = 0; i < g_UnitsOfLengthCount; i++) { if (unit == g_UnitsOfLength[i].unit) { index = i; break; } } return index; } const char* UnitsOfLength::getUnitOfLengthName(eUnitsOfLength unit) { const int UnitOfLengthIndex = getUnitOfLengthIndex(unit); return g_UnitsOfLength[UnitOfLengthIndex].name; } UnitsOfLength::eUnitsOfLength UnitsOfLength::getUnitOfLengthForName(const char* name) { eUnitsOfLength unitOfLength = eUnitOfLengthCentimeter; for (int i = 0; i < g_UnitsOfLengthCount; i++) { if (0 == strcmp(name, g_UnitsOfLength[i].name)) { unitOfLength = g_UnitsOfLength[i].unit; break; } } return unitOfLength; } double CentimeterToUnitOfLength(double cm, UnitsOfLength::eUnitsOfLength unit) { cm /= g_UnitsOfLength[UnitsOfLength::getUnitOfLengthIndex(unit)].multipleOfCentimeter; return cm; } double UnitOfLengthToCentimeter(double distance, UnitsOfLength::eUnitsOfLength unit) { distance *= g_UnitsOfLength[UnitsOfLength::getUnitOfLengthIndex(unit)].multipleOfCentimeter; return distance; } double UnitsOfLength::convertBetweenUnitsOfLength(double distance, eUnitsOfLength sourceUnit, eUnitsOfLength targetUnit) { double convertedDistance = distance; if (sourceUnit != targetUnit) { if (sourceUnit != eUnitOfLengthCentimeter) convertedDistance = UnitOfLengthToCentimeter(convertedDistance, sourceUnit); if (targetUnit != eUnitOfLengthCentimeter) convertedDistance = CentimeterToUnitOfLength(convertedDistance, targetUnit); } return convertedDistance; } posterazor-1.5.1/CHANGES0000644000175000017500000000577011041177230014342 0ustar simrunsimrunPosteRazor 1.5.1 ================ - Fixed: Compile errors with GCC 4.3. On Ubuntu 8.10 PosteRazor 1.5 ============== - Added: Brazilian Portuguese translation by Ederson Gomes dos Santos - Added: PosteRazor is now also available as an installer on Win32 - Fixed: The image file open dialog does now show image files on Windows Vista. - Fixed: Startup problem on some Windows systems seems to be gone - Fixed: A crash on some Leopard systems after image loading is gone - Changed: PosteRazors binary OSX package is now a universal binary - Changed: Upgraded Fltk used for OSX package to version 1.1.9 - Changed: Upgraded FreeImage to version 3.10 - Changed: Switched license from GPL v2 to GPL v3 - Changed: Simplified source structure PosteRazor 1.4 ============== - Added: PosteRazor builds on Linux! - Added: Italian translation by Stefano Nosei - Added: Dutch translation by Erik Wijkamp - Added: Spanish translation by Cristobal from Hispanicoweb.net - Fixed: PosteRazors image preview tries not to crash if an image with high resolution is loaded. PosteRazor 1.3 ============== This version was skipped. A few web sites offered version 1.2 labelled as 1.3. This was probably just a mistake which is fixed by skipping this version. PosteRazor 1.2 ============== - Added: Polish translation by Grzegorz Wacikowski This translation is included only in the Win32 version - Added: French translation by Martin Loyer - Added: +/- Spin buttons for poster size in pages - Changed: Numbers in input fields are selected instead of changed on mouse drags. Should be more standard conformant. Display precision of numbers is 4 pos. after dec. point PosteRazor 1.1 ============== - Fixed: Step 1, information fields are not updated when changing the unit while still no Image is loaded. - Fixed: Dropping of images on the PosteRazor caused a crash on OSX - Fixed: Fixed a small memory leak that occurred when the help dialog was opened more than once - Added: When saving a poster, the ".pdf" extension is automati- cally appended if it was omitted - Added: The user is warned if he overwrites an existing .pdf file - Added: The open input image and save poster file chooser have usable file extensions in their choosers - Added: PosteRazor remembers the directories where the input image was loaded and the poster was saved - Added: The poster preview is (optionally) rendered using OpenGL PosteRazor can still be compiled and used without OpenGL - Added: PosteRazor is now multilingual (English, German) The language is set automatically - Added: PosteRazor has a settings dialog for setting units of lenth, UI language and usage of OpenGL - Added: An input image can be specified by command line (or drag and drop on the program icon). It is loaded at startup.posterazor-1.5.1/README0000644000175000017500000000070211041177230014215 0ustar simrunsimrunDescription: PosteRazor cuts raster images into multipage PDF documents Homepage: http://posterazor.sourceforge.net/ Maintainer: Alessandro Portale Translators: French: Martin Loyer Polish: Grzegorz Wacikowski Italian: Stefano Nosei Dutch: Erik Wijkamp Spanish: Cristobal from Hispanicoweb.net Brazilian Portuguese: Ederson Gomes dos Santos