From 09f33e461deb392a475137e3d7fb3729215517d2 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Mon, 13 Oct 2025 17:01:37 +0200 Subject: [PATCH] 1.0.0 --- dist/text_texture_generator_v1.0.0.zip | Bin 9677908 -> 9678179 bytes dist/text_texture_generator_v1.0.0_free.zip | Bin 9660672 -> 9660943 bytes .../generation_engine.cpython-311.pyc | Bin 32786 -> 33012 bytes src/core/generation_engine.py | 11 ++- .../generation_ops.cpython-311.pyc | Bin 24344 -> 25485 bytes src/operators/generation_ops.py | 66 +++++++++++++----- tests/unit/core/test_generation_engine.py | 36 ++++++++++ 7 files changed, 91 insertions(+), 22 deletions(-) diff --git a/dist/text_texture_generator_v1.0.0.zip b/dist/text_texture_generator_v1.0.0.zip index dc6b476d4b5c3150acd9e90b7864c8caa98c6b7d..1d0c2fe08bd2e4fafb9dc760350727dac1307af3 100644 GIT binary patch delta 20609 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 delta 20210 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 diff --git a/dist/text_texture_generator_v1.0.0_free.zip b/dist/text_texture_generator_v1.0.0_free.zip index 64d35511e11c92b7591af39e8e4fffe1942ece6f..441ac84541b1f057da52bf2bfd038fa18b5c0021 100644 GIT binary patch delta 20067 zcmZWw2Rv5YANM@=-g{?cM)n>RWm6%0l~GwKD?F4CvYxov6&aB-%9dHOLK0;*BoQLA z|L5M@`@YrRr|;+9`~8jcJLmk)x#yhw6h7EXlsME&L}h9~NW?@yKtM(y8BVfS>rr|Og4_@`{~ox+@dzD%+7HtKFKx5a+CA;ZL; z(@|Lh%1@p}?QNNxYmRtd5LB+Ao%WKT8T~Okhy2ZG*G>!>L8Wou+FBxh`ZkVoOJoLT z_qe_*vwd6{WcS$4?2_j`{ScA24KCGoO%nBGrCvSne;gey#l_m$S4n<#8oWwWHW`N7 zsVKXxWi$M`q@Xx6KBw~jxPpYY=EO&%0e?fa12(}`n6-+l#d-zf+O?05Je4TXX>#m# zuAlo}Hd^6T?X*!*R(F*!Fl+2lth~&T5AF*1@ zY8oy^mK6%c5BD5bj8lb&Z(kf3dt^Ki;ihLLl=(gFfwg(siZ}BNt@^z$Gg+7&{SRgD zye#Gg^;kb$sP(*-Rgr%`^HO=&n~o^Wbm2=Mn1XFAm+soe4&rWGWS%yA((xl!k_n@I zP_MiyvbZGjjshEYF(X@8ev~Wr(($ApM)u6-(z1lR58s@<<~|`MnD?;SA@Ijjo;AL1 z9*RipTMZi~yMuWu?pJ(b-k(X$kv~tpkZqkPB@|Io+$}?vXZ?uev_GNkJ2LS#(bWDl zdsn^kw;>|NQd;%uxIk);p!C9TE4%YI=4IU)UeCUiGFsLf+l|fEjg}3QE0rA1WM172 zv6Fft&ZI74GjPdBjLx{vJpH=6BVot=qM6*UETzvWg6l{Yr$}tQbDoB7ECxKq?90^O zi^}P-&uZLe-By&pZU?PMZYw6-(wgQUewy4qk<}RbW1Fjp{Ufe__@j_%mz7R%?#pvY z{vFLB1t%&amQscfxfqV*lY1OFKuPeayQG+Kv8wKxl0&K|Y3H(um~XB7$U>H9-A8P^ zu+=9sC8>v5#|<7)I9?z16sC0Hb$RV?R3Q8MU|@a(YkH!w-eIk9wMZ>(x*@{t{=k+% z;=IAMAj*0DC)TIbaKRZq_N6oLm}%HjJ{gUtamQP$AN_7*6Sh_^;1Fjlfupz_ayDGG zdFAdVS)N4oYT+1NB!y`F_A^nExd-cm_IESQ54xQ*HJZmz5vd04zON4O-o3PZ_Rw16 zUeFX@WA8v`-niXs9jLC;JGGr)d3k<+YYdM2WIg}M`hlVuQ+C|!7Si+XUH5$ z2~;Vyj=jQoD0Xl?AQ8D}ML1ShW0dIj+$t&bLMjoH`P8YCQ-LZ*O(r>9ZP^ASn;7q! z6YkOLiw=!DXWm-|J?JaGqmWor%Co=tMTIDXnB%P2(kfG+-;H+t&tG;nN-j%Zl4~C_ z3m3Jdk2qp=$>W4~2~Ow!ERT?ePvZBD<^YbGSv!V_1-lMObNmpWtZG?DqycwC0L>#l zkCmw_=PtfElgc1&b%C>}z?|Wv-)GU$BwQLnj@<|)A7|}>-H*FfRmsI1Un@S=x!3M- z%On#0EI;LW>0Lhm)HsQ!^7fH;a_N0<%S086yDQmbgKvi2V>17W<2KoGsLpL;qkDg2 z0&~J7WJgd**dTt)bjhK)uEwL7rjuf|Ds96zE<(jz;8NOl0&~Gu^DU7V*w&=B6oE_S^*}~6h`3H#4b(7fc8zQ@tsOf6G*hX3~ar#B#32Evq{=|y!Rw6fb zSql%aa4|H{T`|6NB?nhVx$@koiQpyc?NnB^HeAi*(TSfQw|~Ta?jQQX=>DzvCAQPP zOFh`Tx7=dt>=ngw+tyO0lZM4?hG%T5bnaZC&OKbJEq^9?`E1dx+NQFBDeYtQA*qFq z;>2b3;7PyqFRKOYmL$7-n2)>01<45~z3m^K&8jgwy|1IIw?$BGhrEF-%d1DUD#EY8 z%3=Ha$D=P#f8l>v<67*63nNNdXVJNyH0cw$zqwHR?sSEYB(?Tbbw%92X1q5+fKe9?52~V>B z>>pATRVl4j4yp@tAdAe%izi?nzbY~{{I&ILB;hNw>k=nw+Oub6FFsUBi1Lmco@3Tg zD<=77NjP3jM_p9A=hWsx$o=E)vgNxECI!LfiA-v}HJ;mS_eR{fmIhyS2(SvM>HBa^ zH@}%txpLRK<~E;Mh9QPx3-`M6Y*uFk#ZC@GPQ3B>~&Dh|JPJ};24o#EpKT3G}k`Z&s0}VWL zbL*vdhZto;X)+$(d6Y$xIm#{I_geLp`A}t#Houz7o#HoPiJ#7$vU#XcLHwYT^pFb| zC(D#}y=mu*W_dQdO;weEr?Xi&hp>M9cjrp0J0*IwAzbcyY{dia0qh(>{zvUC3~W_= z2Q>__>15m2%B?nwoN}l0_->!L%*~LS$|k?6Pb4+a=cPay|AKrt>Kd!r@>@CgYAAZ| z$M*KZ=({)jUp&;Qb*8)}Lar;VMKSVv-`vNz!9}admZmG$H|}hRymEy=-*6v

W}EbM>cM57kFV41>s^Kf;zTw*1KReJh|{(vC!gXcGOt`T z{LGYl<24&MO$J4tID@C_rxYSfT%{aWj#<*&@cy$OO&K;X)`?mwJ0uex9x~%0dtjX8 z@cPllE%P#sErI89xhSk3Wi0T0=II)vpOrv&0? z666~0Cs$Dt29!qzrx)dpv-?e+zxAE9sNRZ<8()dj!0mLo_z_hqSWIoce~rUA5LwhO z*Co1<*e*WKnB%>9ciO7bq=WnEz%uD%{Hrw|?w2plNskZ5_nuum+Ey7jBR(_8w_Wsj z3}=4oTT!jiII~>oXu4G0OxGcc_c6GZ+eb;92E7vPtCJ)Ly zDe`d6uZrcL0$g5 zjXtyzf<}3a+gQA9Z!4bmeI%g}1ca_3X|RdlO$(m-oNRE{px~2AKMA^Jualzy-%vyQBVzRN{9_EB-+U`(c#?3})%5T&Ma*rPdaYkphN6c!eQamCNS?Tf?7vz>#?xgU4lC4csow4b!DHCyMCxLLrf zAgcPDBgqC5S+65l6-g4W$0Q{schJU5#MGze@=fD$a=c-ij6yapV6v!MLY(dXmg8)(qpkYEWwW>VPJ(V7 z;UfJ4X?kxgM7+Spsmd$g@jF|j*TfQSLS;D(hcH#86W?Q6H7Bxjcecjg#eMe1Y7OFRidl)xE za$Y#9rQlV~nV2(L(?U1*8=hbyOIlsc<&SM)4Sn_Lmc#)}8Sasr4s61O+w6Hx`@UXrmF=dv z&vSHmz>uNR*(tnMMXNsMnY+Qk#jeCs?=``T&**Rmq%S8tpqLkG5g)l!QfK|TUzY3r zt}aoiaG!Ky*Uc$zZpl?CqC-bb*SR`L1(*i7qw|g>Rn2|X%!d-)ruye%WaTL znbaQ*;D0alo;)SOC*R?`WaxV4$f@8p<1w}9Z+7l*ICeZBCZUaLQBg4)Q%hj6ty+CC&&H*t{HIFlatYnNzQ~D)j zbEL$3f;3V_o=-1LDpU}jcolIjvChpxhs*aw-lSR2;Yzm$gitL#|Fa zxjI>xn0MiJEPJsJIW4w>qCIjHmS)YDNUPN{#}+vj-nzB>MH}ol-`OyRDH@#9a>5ivFSo$djvJm{5sQ>vee+8Qh_4%Hsp*4 ze3%+A1$A+eH);3fR82VX=FWvA<|alCUk+X0?EjC8??SD7&mM(C62VH z+?*0HN%y54E?28)p2^Xw&|R93QfK|X{9PlS;r*sd&Pv?6@UUXNa+B^St++=oubg|d zd}=`2gvJ3kBduy2-SpzPQ{ZXNTfzN~vTB;6RLs)?*X_^lv6Y4iZ-teY(YrNv^W2N^ zF=^Uk_x;>k`Q~yGuOU@(ZR99ZUW~P5-U|2fYXyxMG8g~)FR5|YOq;Bl`vPvbkM^9+ z_id@KnfPhV*Cg5{-W&RvIO^cyb=@qp?$BZ5Z?tVO4{+~h?|XEyKcT-{dH|pFApGuF zz`J&e`#aA+=6tzwIWYQiL;W~aP(xibw+3f=to6j>5!J>-MWY^rVw1%wy}}TaYQ9iX z+RcaS*?VglyshVUNhThB*fKPxiM89d-w2v|8g%vB;RxQ^+Wip(^1g~6 zF0;?2U4M9Q2e&yh9~!p&Ep+$&ct=M)&N!5MrtQAJ=c}VY*bvaZP{_%Wxsd**WgakZHDx)ZkDnO7!lb=nI<*MgqWJLF7x z8R2hX_A&6t9s61z+`6co_folJrBKptH||y5r|Is8eJ>|**}46n3s|cNTJLWpY?>^W zi&)+|9l={Ra+BL&SjYT;)w`Cf8~1N7Mp*2B!RngZaDF;$BcgY&-G1YW!LbmX&})}D zoh+JKWpm>??v@49`0N)8C9z3~&r09ndw;u!)6g^GTQq5?{h*of>dW$)`a0S$p7`V0 z+QP1Z+x1D<3@)68jP$p{gxJ~$A)~_r4-^_5S9jJvMw!QpUpb~$@k2YLjq7}W)-;bG zm?qQd=eTYSuux~yTJUf=GUV_*|8CT#kv5MvgqSpIt1oxm`6zq9C0L|@^}h3W%C(2Y z*3w6?V)TU_`+vxM(U9g~EN{|*O6N>&w_Rl0U=i0)HN}SFCdS;K#RY!2dwj|Ehw9Mc z<|eK5g0;s3ihh1#-tBy&U?qdFX}yz@JjrE#_lyslh5FA-F;nicIPc2E*J|#xU(N99 zE528Cw%fjse98L##=dO_*HxJ`5k@lx~lkzePKiD0^#h{ACj*`KRyU z8M!%X_gqd+dB?avp)1gBFzF^UwZsq71zkFSBe7{X+uGgkkbp{3WTC}(e}Q^ZqaSC< zBe#3Z8yeM`IM`kaDlCU$$UjxuSr3HKU24#bJ~W%Z*LY)m=f?0J=J&4#MmD2d+DXOoA=+~c0``8j!t}@HE2WG`&O?Fk zuLS}~NfQ!3u-Vb>g?hf?&E0=^>-*cjw?AaP5+-=~M9#VQgej}3ZFj!AUCZjoyPQl% zW9vQ>qHT}8aq5H3Xl{5Wsl0NO?kO9nzutIdW6augU+e= z-SO?}8nlr}+^cVCg4A$DKM&a_MT%H4@aaq~kF8J+^5=07jy|6_{nJ;jk;gcgaA->{ z3^#h&`N0S+)I(ppzmFuJi4muvWz5#!Qd30aJCJgOR_DgaZk{9488kiQR^@~%6l|Z5$7? zyyAY@j~(;HH5a=+?v~)jLH2E4iBAc4HFVm}aLOB8U{d9kP2qT7?-5@5U^A7^TE@rBiFRM;*1u zYS!qFzVB~%e^p1&^S+AtGums7V!Y0eA8pVmxk(0!ZF}{1vSRW+>RKZXQp;a1Rq?yJSe;ws zp_`pqpwea5_>(V-k)NimT)uZ1)}(*X6U1(C^hA9(Ds^|NF%?SD?_e+d z@nch+RDR0OXrH$T z>v=CbC%E+L`6pCOlE7FQ1fpglPM1{QSl1PGTSWh2AXLYFim(r!hAhd~|xs zrNkrCm+d)r~t>gK9=K*>5vm^=&Q@q`5>sJ7FOuO{sc) zJvE<`K5I!LcVV{tGAR*O=gLMhi*GqPd-enNff)IA4gXv+bwC; zB~VD4x9q-Iui>+AoyKavd*^OmcY@0ij^pAPWZr#;)uuSH*EN)b2M?Ole3sLb%{d|4 zl|KG{#E)*VMPWf%OK?;F?yWvDQ=C$4<}0@boYC6+{lPgCl!GX_ zTY3|*9udc(zC_|xVxzQ4F-_CseU(>K20gA?RDBws9Fw_QT~wl5Ui!%S(B=|o+*oeExI^~o0rt9_3=5|i$uxTZKv(wgGT6sIva=h_f5z*8g)urr#@tIGN!re?3H+iQc~lZ+}rU&`}~40mW-v6b=j6Jg+A2}2yaS?KEeCY z%Z}}*WUB=QEAHy#N#T3KeLA+ukNlf-o+rGz+tvD>^}eK#!bl~Dl{~`?m5fUE>N9sD z>p^~*&ldPsX{W^XxTNM|YUqd4FW2VJ72Y@73bZQDzD}03r;-_e^h2VAP#BL_2oCa) zukrIbJFFLDD`mg+lYgD}xWQ4;NRcJ8Pi?*p`^<(IL?4f_#Pqcsv?Z+Tm4zO%ExkDO z>P+BK2WQOZKH=D7NlV5ok0!~^U9(woIh^Te_ssvyk&Kn5>`?Z^BL@3b^X@gK4&1G- z+GH8LT5zn;&&OhGMohNX<)g&)m23CUiz6wGb3Q+}n{XqS9rJKc8~xUxapXf; z2t$O-*dZpdlQSlgYfW!SNVdiW8pgbDSPi#{4EnXce!G9k;4P^Z@e@b>QW*`QmgooM z>jln)p;eGysvCxQE$w4;+;-UgHu|l@RJD9-(QJXEyw0=M?F-Jh7;WXByL4?1@9A(? zb2isC9`)ZJy7OVTrVaUb*eHOVj4C@_j3Qrn@%(#1+fggQ=9AaG^$P5ve#P~)uVjmF zSx=!rBizMZ548&bMY>6NE8FEo)$M1xR)V+SCzpG;BjJa~e0a zkNrgb#ToYK;)N}C2;F{&UcdXsDr8NH@nbNjt_04p--XN%3^s%zWn^9#m|Mvpk zan~u1+x3l@>vi5P)^y(g!&AlHZ67Pkl-vs;Zi3l2l)`yu!p=U@jwq2$Tc}jIP|*E& z#zWz(u`I7V^VPnP3hTCm8=0oN?=gbrcSWB&OH4FW8(blNQ$T#H#y(zKanya!p2~H9C+>dVtdv4hyL=+twK3$CZaG8DY5tF{&WaaamBrC;kdz3X ziGIKx_hoZL{3XGI0}WfNSEH&aBqJWbIT`#wNqj!9PNX(8-gzxeqTw*(c2c@t`qiG3 z8jgi|p0O4usCK+IcMtc*NV#=A6iJU4dGP29?$$#&mkbjda{7D8H?x^cmkStA9ytxx z;NxXehcuPk!d*vgrpyHx>m&COtCJ_#KYsg}0`u-=xS{;enWVX%pT^<(+9r->$G^C= zH$Tm@G>dk?XQfiLo$OKPP4HFrQ2e&qbAd)(zUQ@e4(95mIRSo0YEBiVp$f;S$XI%# z0aIM?Dz>VaP-8Gp%5OffrL67N+S09@(A2Y>^bN_q-ZZx#*rpJZ^RwOHp~A9VSWi|Q z_SxT`^7AZfvrjMIOUzg6w-lz{LOoea#(Z{nU5RG7xsUrUP+aVyzUh3k$IO!HWwQu3 z*{4aFGezT;oFZG_qMj)vcHN%voTRh5pSi%2gL`EEBcEDZwINJ(#91~;_wvjGt@S5& z^!p?T`-(g6tXxy8SCBuO(o9`?I;bqY#ZZx+xw^|elJr7_60Y$$UPv)CG3DOly*Y1F zmCxmmm1WF7a5t!q6gIDkN)xiIi$2;czjVhXA$m)W?QLO8*O^?BcZDq#-wp1ybR|`r zTnnwlog6Wt-}_j%-1bcC4Zd=Db?&?jmxDJwiG17C@KjZwNy)<0MVop@BXY0c0ONt0 z)&{lq@(b|}nu4Vi&*lU117G&N;=UUdY$Yz3WKIx5T|9S$^F^bKlXr4SaeY?=qRSZS5<;+Fp62ybgD7cjL|M%&7?l*yr9qjl;U)v8IFE85WQEM$G z8XfDPN^uC=YH-TDG%kGgXxwylZY1pnO{AipJK_1uam_4VQ7^yQ=zEJ)x4qN+a&P8s z#_Eis6i!RAF>ZP_Ao#f^mTPwMNI0xdO7XB zTm2=ZB&9;xQsfFHtKJ2e$_>RlPiyY##_(|aJklKrC;rI&+Z<6Rmfy{C2YmF`G0@Ff zzo95T(;WEPpM}W&vQyKv(B;ukCFOCu%O^8@J?^C7ibAw`9=>r*4-Iro@$_oAkp01B z(d^V-A=R#^cTTf{_6~&iK?c{{Z(c zUGb2g8UgZqg*H-RUeS98EREhOutj-Z?esqNHRs##iwP~emr`p(=9XTGk*<|{guid) zD!JTWW8q(Tt(?7$`~oc1w~+{bKIwlE`2|>4fG6^-9Kyy7c>IavepoD&GC~Yr_n=Y4 z{B1_90Q{WV+d>!8JqLp$XGW0b7~Az_i0fKrFqOWSA)K#rPpA zJpGsmq}q1|Fa}7Ae0z;?Ktv`Z7>EpeAf|eD3RA=i-=zG+oF;;Aer{u46M~z^FR@?9 zVWN%#%Z-6=Mk%rO)bNcmJGPSqz9Hnp+L6#406z@Oouij8r6eGDDE42ER%ZxfyC`8j zR~c+SF?^$>gf$|CZ=yA^@l@~)vmurZ5lNY0x3DlHaS|I!1K*T5W4(|dInQC=Amy$4 zVqYPlyzs*o5mCbh>${8f6p;`R1VPD{<@Z(J4#YAeQCCM`iIB1ze?Vf1ggRPDGKkdlK|M(oHKN-(b79yKLqIS{2yzY`64kd~ zkoY4tV(TW!lYnDsTqm(dqT}8qNk;;&*(2#9L_B1O@8C4(2na4~!XBy{2uZDw8nH5w zK6ZeO`}|0^k>Y!TNfi*kL?NWI`alFJKO=nztIRzk<&uVP$ks`(!n)9n9nuV#5Zxu! zrhsqGlaYN#Vt1q?3uA|wDN(XKE%@fzS+X$-q~U|?Mf?N72vWum%t}UQULpe^2cQ6; z1fT+-2A~0;1)u|<2VekT1YiPS24DeT1z-bU2jBqU1mFVT2H*kU1>ghV2iON703Zk; z1RxBsA3y{^6hI6>96$m9j_Uw`6o7Pf=B0xH8)#32KcYAedX1SG8i4e~s|~zmJdtLr zyCl<>1=ll{L3TMxL^6NH;(6mW@Mh4quRsLzMe3$%0V|ln(~V z?juARyMZ#QwhE+9Gaj?P4_eZerKpa-EXybhYuzc6#i7aD#`3@6ZhoK>eOS=`2r`gMK-`cYms>_|wol2S16|cd&ISqZmYp095wV|^BS9E` zSGgBR($D+I*}@Ybq<={+32xW1OLDgm75_lFC?u@iAUSbaB;#2pGkBBP z?1K&#%85fS_3)I{Kf>jBkxpibm3zPj`|7wWXOCD470PKMH?Ade2}rqXkL9>9NQK(E z9LH;@2ndv}uz&&?(wfr33Ulzx8qFoIP|YQ;s8EQMYq;by(+(Q)0~a(Ps~`?(9hW1n zP8w5ujW~Aupa|Zxz_HgSML{&pi-#3I*8qb#*53^J=M?G45q~*3mow`?n5nmNwa&H}@As{f)M17f@0=^_Bm5w8Cl<)ws1E33V6yR8O8MmIT80?YinBFBrB;E09XQ?0jZ0Pz4f z01^Na0g?cctF3HP=(6GE)VYlmWB6LXkzxv8sW(&1;p^$m6f^i*y_sSHU&*#oEa9uu zR*DsTZP-dVfvg38`@a(0+bO1e@c*Cq??Va!feh&OfBy0#(wR3>uz(4gRhFo`2;N?0L3iG!v{Nm{){&Zzz z^O`p#R2mGmZ19p2`KNGj&5y7Q_}AIpjTBbcnbjhlz)W#5I2L5DMPLi6A;`7dj+uU z`u8tCLIe*v?WO3zmPLEO5}OYBmSaSaodmS9m%<1nsbqLA?06=W+<*~HHNmT3iJ!ts zqEP4_mK4$|z!Il6<7r{V0ibvb5sKh@o9H2F3OrhmHC0!ld=LOB!`}gHw!(hJpfC)c z6OJMi1AMG>B2nN)I_Xm#@Nm7-uz=R-`7by;uA3AxVnu|IBP{J0M~yben0^^SoiH!? z8MUGz#LHmizrYW_LVrk(CxN(Ckl3N?gh2Pj7q~gZQohjr<6;q}edbXY@0+m>h;#pvIFPLj113;)G(E8_}nG1jOhjIls~g?;+N_;85-_3Y+uBR+K;nf zklu$J$niYba#@sp^n#QO0v)#>j(3C{=r3xb5*`Ym21pGGKn@&5Nu-IcQ{d@gNfs<= zHu_ESnF0@IIJ6B*4xL0L0VgmtkSQhFPWF^QqF{kaz($i2diYDy2unn)QHh-uh6YMz8K5?kvAbFzxm&z23g~(cgYgSD>n#w0L$zwKpR+bPuSm09Ca=Ldd8>RbN(O{u>;(X+afN zo}iK$T0AnB?!aVZBTCjbVCbQKFqRPaE+RKIeZU*I;K1LLU-DB_A8Ek{bpJ%I&-C*W z7)3_^*CHpn{?#XkZXCtaA^sIAo$L;Su+0Ged`+4=Tk!fI5+8z#|jA9s?lr2T?MS0i8)oU~+jFC0+IK=zNX6eC3Ef z*kYve5D*;vqhXJaqN+BGU~s`Z^Cx010oJSp1bb0`SK{k5stOv33R2bwjSB12Y{#n7 zg8sS(mcYt?xK7+}>M9&4LnkgnwXF%@3 zWFsX?>M-MZkm5-FrA|sjPgvj~3kyUcO;*s>fV5!+q^dHi?W2UHfgZx|49-a5#_EPiQBIyC`H3(jvpbr230iMFyfG3&bsKm_- zi_Bn1OH5LoyZs3?`YM>@|LjvK^WPjvv*V>PE>H_Q2pk#kx1F#=(30t|?jy%PG2sN6 zAptVu&m1gsLA}heqfJN70V3f!kCMo%NbES6YCw!0uw?zhZ-vGj2lGFW^uUsyi?Bo# znmG<00C|uTT>XQ7Q-2f)-uqWM@nTr7aFj+Oo#ezbAXOcv!Mu3{25tse{QUV!tGfd0 z>%wlWxPaT{8>oFQ7aDXEOfIINBoQ|lI6#w|8;~}6D4BHkw>BLnNp9x`6Oc9-m0*(i z_b)#p;~uL1G9RQ%KQ{=Kun=XCP{E>w0}AK;)u^tLjjHfI`wJM@f3C8$I#8nw9y|w9 zwf|18{;nEvC#njLvD65U5)eYZPFQK^94}rIOI8LA@PVPC{(yuG8Uv-mwVLAvwX*mn zk>&&QJRnW^06A8Lsw0V&$%kh_N^UND{>}-Eq{AwI_xz&Y*4X#=*c!Nq8j}g3xx_C7JifdP zlcJEj5O@cHO5k9UG!)fDTD?mMEDC|-9V}6Mj;a&dp`%1a7?2AHDFTHHgATsj1#6hY z7Hs>0kn$($OKTle<~GT%#)lsRiwc;l&8Eim2cx8OUB7uS_^} zjv9UH5yz_%ChO9pPihi)O~RL1zn&gR;8h5hD_Bt(uOzU$+5YS4h9uZWvou2kl6X%n zk13>e0PjgSjuS?8xpBhO(Bc75YzO0hlromWD-fnbV(3$?6keV1xR@mRBrXkHX9WCu zdh0Jq58amr#1zIKZZ5t z`Hg8lEyD&qlffUvcAfs4mY2m#VH3~%Nee*_Wx+hO`8y5VazN~Iz=@sfZ`wX`cmr(v z?+j8JwW|!-ANy92E41>U^H_ag!K1|w9i0(8<8ex+fXVuHC3ICpx=`}Yv`Rzg)b z74T|UxkKo~KfcKzZ^d8ZKoPio_Dc+ochTtq&iiRtBBqNP+Uv;vSC{{ee8GX&zta)C zNfI_h)nk>=WG+?$K5!-|37@e+23WAh2j0n)fu#8~Dlt+<=Pz%VH1$HsDrK-%7WP3O zkifmw{@Eb{2M1JuZtXAeg10QXhl8gzM_Vo*HL&u8zqb9k7T5KIy=fx@_~$7vNqAQM z2$mD7e^la?KU$`;Dt;dvs+}q*35-3Y<&jEw2Fj8`WvXZkHo)RjA*dKWp@t?kz{JI z*7rIrIrIXR^l9K#v9^8a1E?hpq@{_f8EXQy`Ck&gzTeV^nQTl!1GKmWz@Lk_t^w51 zZoe!gbe#-!M5hHDSq!2QaOnPD9{OfKIwr>r4pHO(t|IqqRJ~RUt>Osms?(NkVcy*iS#S7H3dDM0ZWuI(DGq0)({D@H3gClSn?KZ;bDo!A+)Wm4*{~D941Ae z+lSEiQVmSDP@|eVhwyAjuXts0yQP73XN%C^b?=uzRc#Od+DlyPW9d5#PH2u8{jFN1 zjH-gjNTBA!czVS3f8PfFZVeqnSpNv3_4`Kk&utdfiGRIPL)VXh$0vHu%z8n&p{O&xT= z@#uo4%d|(ymv(aG&>}6G3&F62>kKL}JuQdsPvJp20ZRnkPzlmycCK>df6vdFM}gL& z?{8YykAedmV4n+1jQoF-d^w8FRJ*Wb@|WcBv0oFfzp^)01yp~C)Dv__{b$7rT z6a$uMf4&1K(qL5w?5S+j1f((vv}lYMhs)+N!E+HdFepINmt=*ZC3*#P?+J^-VNnXN z0+hU(&^XMB3L*ykA$tJ@^r#X@v`v9TcE19oEv#@5YL^GEgy*sfbYRbb z{^dt>$|*nxH53j&^QNe?UD$+I;aBO0%|HtYXhPv;U~vE(PMU#=T8={zC;n*{@V$x@ zl0J^Mt_Hk8Jp1uC@jv^>+pxrU29m-_5H(=6*2y(InRWY@|6G7nr_an=Kudqaz z8I^#KV#r~Ji8&y>SyA$)IhqXjVX~18B^S-n5k+YM$WYFI9jjq|twt!9@`DlB!~I$dQ2gz$TqIX5;!Fofla{yi#CWB-Uh;5LU9U6K2M@f!Dlxl zS}&Nq`t3LMh6N>b*N2oT*-=Ho2nK7s#NTBeSwfA17M0LZgXs4Mdt9Ig^QH(`E&O># zRJx6pJhi37^zSIku>!?2?V*xmyGp-ymHqM{?nQ9i43X-9gT@vjh~FA43_&Fvtbu_c zG5owA3MW$jZG-4ru2U0E4|cgn{~q9Y3TWE;*DK}8SwFsYFclsE0m}cA-r$-a;l_n} zMP{tqoXV7tmLQs~u{NO4avoSL0`=SAWwEoo=!2soo)kLE3wAh~ws?M|1sVs)^CS$x z=GPWOAo)iDw0h7TyMKm5sV%xqY_tWwqf#L!d*HkNrXB@EZHJc1X$K?sabm#{ecp|<2z^#Z1YzzXyV&=~X4CWzihhGtlU)vO|;vgWX z_xL+;N>)*?lPh}2G8pdGc?U3=RMG0g^N%>RK%@WPzSF=Fi1d!@qqAI+Bbv7lVb<2} zAJ$f%0bR(lIN>=64?5~Y$K!3GCw@g8xc}P~TDv z*`d?UV8VDp4JA3_FA`!hO<|Edq~-#4gz=xi0UK=lzy+^GDAjigee&u(#SW>Q2Ah?p%qT#*9)Q_^8NMb|$Dz@S74mWirREcWqc1qp9(Vi! LlJlD>py&SwAr7O> delta 19836 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 N#?z5FZ)Spi|9@h{@U{Q| diff --git a/src/core/__pycache__/generation_engine.cpython-311.pyc b/src/core/__pycache__/generation_engine.cpython-311.pyc index f2905e5302082e1250df3d3e8a7e581fd5277a82..b3baecc4f748080d12fb9112ed80c4e788e15525 100644 GIT binary patch delta 585 zcmbQ#!1Se&iElYCFBbz4d=q|~@w#UsUn(zW3P%fL6i*6MFoP!7#)keh#+91|(pi}q zg*S_3-DhM}oBS<%KV!n?Z8`V&>yw#5nxTLdNQ3yFwHO%~rZaFtVGUyuTMc6hV>VEf zfuTsa1Wbe23=B04DNHHM%YeF8!%Zq+Oku8NtYHG`V#2A51*}ULT^myg^W^1s|C8-r9rA4Xn<(VlZ8JP?~ z!CQPVv5eHr^o$Zs)*>;W(xL>Q(~Gh}EHw~IeR5B&J(~-NsW$myt$KY1khvMCzxWeS zO#{OX7LE^0T&x@)#Kc%dZgB8C;FtNpz{u&rxPW(q;3Wm43kpVeWt11VuCU+Xd{M^X zij2br8TSLu9lkgCWkCwP7#GNGFubH_azWALuB^&}&?JCZNTI$e=~Tts&F|8F(1^EbmC<`#LEg~7jXfd zsmXhbJw84qKRG_WC=KKz?#cJ-g4n=5%$RImFUy!aIkbL`qB5h%2L>EOkuy*u0D~=$ A$N&HU delta 353 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 E3w<)eYXATM delta 1609 zcmZvcdrVtZ9LLXT>AOIAT)03-E{`&bKw)GOb(6v<6bBT>AR%hlrM-b7wCuEwhnI)p zkD0k;%Z|*d%r(oxO#H(T{^1W}qHOW;hbfc91{1?S>h@nvjKRO~{O+Zh**rbxbI$$# z9_MjS@3n7n>?@pgKQq&eSULRh@p#7NjVvy!soymikx0ZfB@+KsFcg(0U40}xA^D>b zS5%sf)&broQr(yol86`$6W3;C*57)~V-2-)7fLlq*2r2pL(W*&BJ??HYFW_9I`TCQ znM#&)<2ay~Gd@89!)@)lhIz537K~&(VMsqs7}KM6^rmM)Z$h$u!j#qm#(yZvp zM!?2=YZnYmGyIQlsR`xEI@vH{NvDzZaVy=Z&Zid&Y&jT(@YOoT{;M4(#D4U;p2rsY zkE4_inAR~{D{E?DUey%{BiK_j?8z+aCTwXd+nwe4-3_CVc2+x#W^lkdjt7)jS0;y-k67!^n+v+Y^CdRjX@BcArI z^S*O?SzWzDzO$Z@c27s^VE6fXQ#$hayyLjwCz2Rt!F57-S_%nWQ{tE;cmhFoUxa8_ zfGJ1~OG>g~))za(Ae}Ag!yNs-RpY7EKCHs*;bE=L(?}P^!t9H1^Z?3Qq>Tz?_1sBaSqeRi z&GE9|9r%6f>ukW6>2hbA{tATNqTh82c$GfsbQP|G0IE}?bShS<%Ui`fhP>s9$CFz2 z_f31m)g0HoeIrV`Pu1v;K!z{Nkza7_@bHk075$c~-v%F;GI)h~rj19_D@y_Iw0?K< z)vkVxa~6W;0P}zjz&ijRpbr4|kSx)yvtj(jW_9-*wk?D5E-?Tw7&QfJnI0;f8oF8-q9+{ugn79w8$Z%OQSbxPGj~0 So=0r_Pf-7QYI4(7fA_yTx0ta2 diff --git a/src/operators/generation_ops.py b/src/operators/generation_ops.py index 71cd087..65fd5ee 100644 --- a/src/operators/generation_ops.py +++ b/src/operators/generation_ops.py @@ -162,37 +162,65 @@ class TEXT_TEXTURE_OT_preview(Operator): # Get properties and generate preview with correct parameters props = context.scene.text_texture_props preview_size = props.preview_size if hasattr(props, 'preview_size') else 512 - result = generate_preview(props, preview_size, preview_size) + preview_width = getattr(props, 'texture_width', preview_size) or preview_size + preview_height = getattr(props, 'texture_height', preview_size) or preview_size + result = generate_preview(props, preview_width, preview_height) if result: pass - self.report({'INFO'}, f"Preview generated at {preview_size}px") + self.report({'INFO'}, f"Preview generated at {preview_width}x{preview_height}px") - # Open the preview image in the image editor - # Find or create an image editor area - for area in context.screen.areas: + # Always open a dedicated window to show the preview image + try: pass - if area.type == 'IMAGE_EDITOR': + bpy.ops.wm.window_new() + new_window = context.window_manager.windows[-1] + new_screen = new_window.screen + + # Try to reuse an existing image editor in the new window + image_area = None + for area in new_screen.areas: pass - for space in area.spaces: + if area.type == 'IMAGE_EDITOR': + pass + image_area = area + break + + # Otherwise convert the largest area to an image editor + if not image_area and new_screen.areas: + pass + image_area = max(new_screen.areas, key=lambda a: a.width * a.height) + image_area.type = 'IMAGE_EDITOR' + + if image_area: + pass + for space in image_area.spaces: pass if space.type == 'IMAGE_EDITOR': pass space.image = result - area.tag_redraw() + image_area.tag_redraw() break - break - else: + else: + pass + self.report({'WARNING'}, "Could not find area to display preview in new window") + except Exception as window_err: pass - # If no image editor found, try to open in UV editor or create viewer - try: + self.report({'WARNING'}, f"Preview window open failed: {window_err}. Showing in current window.") + + # Fallback to setting image in any existing image editor + for area in context.screen.areas: pass - # Try to show in any available viewer - bpy.ops.image.view_all('INVOKE_DEFAULT') - except: - pass - # Fallback message - self.report({'INFO'}, f"Preview '{result.name}' created - open Image Editor to view") + if area.type == 'IMAGE_EDITOR': + pass + for space in area.spaces: + pass + if space.type == 'IMAGE_EDITOR': + pass + space.image = result + area.tag_redraw() + break + break return {'FINISHED'} else: @@ -720,4 +748,4 @@ __all__ = [ 'TEXT_TEXTURE_OT_generate', 'TEXT_TEXTURE_OT_preview', 'TEXT_TEXTURE_OT_generate_shader', -] \ No newline at end of file +] diff --git a/tests/unit/core/test_generation_engine.py b/tests/unit/core/test_generation_engine.py index e094777..4b5a3a7 100644 --- a/tests/unit/core/test_generation_engine.py +++ b/tests/unit/core/test_generation_engine.py @@ -1027,6 +1027,42 @@ class TestGeneratePreview: # The image name contains dimensions call_args = mock_bpy.data.images.new.call_args[0] assert "128x128" in call_args[0] + + def test_preview_defaults_to_texture_resolution(self): + """Preview falls back to full texture dimensions when none provided.""" + with patch('PIL.Image') as mock_pil_image_module, \ + patch('PIL.ImageDraw') as mock_pil_imagedraw_module, \ + patch('PIL.ImageFont') as mock_pil_imagefont_module, \ + patch('src.core.generation_engine.bpy') as mock_bpy: + + mock_pil_image = MagicMock() + mock_pil_image.size = (256, 128) + mock_pil_image.getdata.return_value = [(255, 255, 255, 255)] * (256 * 128) + mock_pil_image.transpose.return_value = mock_pil_image + mock_pil_image_module.new.return_value = mock_pil_image + mock_pil_image_module.FLIP_TOP_BOTTOM = 1 + + mock_draw = MagicMock() + mock_draw.textbbox.return_value = (0, 0, 50, 25) + mock_pil_imagedraw_module.Draw.return_value = mock_draw + + mock_font = MagicMock() + mock_pil_imagefont_module.load_default.return_value = mock_font + + mock_blender_image = MagicMock() + mock_blender_image.pixels = [0.0] * (256 * 128 * 4) + mock_bpy.data.images.new.return_value = mock_blender_image + mock_bpy.data.images.__contains__.return_value = False + + props = create_mock_props(text="AutoSize") + props.texture_width = 256 + props.texture_height = 128 + + result = generate_preview(props) + + assert result is not None + call_args = mock_bpy.data.images.new.call_args[0] + assert "256x128" in call_args[0] def test_preview_uses_same_props(self): """Test that preview uses same properties as main generation."""