From 5b2a9c0e43e01c8d8867ce7d1e978c2cdc859f40 Mon Sep 17 00:00:00 2001 From: Branislav Stojkovic Date: Wed, 16 Jan 2019 23:55:52 +0100 Subject: [PATCH] Better color band rendering on resistors and smarter label positioning --- .../components/AbstractLeadedComponent.java | 4 +- .../diylc/components/passive/Resistor.java | 64 +++++++++--------- diylc/diylc-swing/library/main.jar | Bin 541851 -> 541954 bytes diylc/diylc-swing/update.xml | 20 +++++- 4 files changed, 52 insertions(+), 36 deletions(-) diff --git a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java index e36e3699..d2f61b01 100644 --- a/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java +++ b/diylc/diylc-library/src/org/diylc/components/AbstractLeadedComponent.java @@ -260,7 +260,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp } Rectangle2D textRect = fontMetrics.getStringBounds(label, g2d); // Don't offset in outline mode. - int offset = outlineMode ? 0 : getLabelOffset((int) length, (int) textRect.getWidth()); + int offset = outlineMode ? 0 : getLabelOffset((int) length, (int) width, (int) textRect.getWidth()); // Adjust label angle if needed to make sure that it's readable. if ((theta >= Math.PI / 2 && theta <= Math.PI) || (theta < -Math.PI / 2 && theta > -Math.PI)) { g2d.rotate(Math.PI, length / 2, width / 2); @@ -348,7 +348,7 @@ public abstract class AbstractLeadedComponent extends AbstractTransparentComp return false; } - protected int getLabelOffset(int bodyWidth, int labelWidth) { + protected int getLabelOffset(int bodyLength, int bodyWidth, int labelLength) { return 0; } diff --git a/diylc/diylc-library/src/org/diylc/components/passive/Resistor.java b/diylc/diylc-library/src/org/diylc/components/passive/Resistor.java index 8a1261c0..16a9e473 100644 --- a/diylc/diylc-library/src/org/diylc/components/passive/Resistor.java +++ b/diylc/diylc-library/src/org/diylc/components/passive/Resistor.java @@ -24,10 +24,12 @@ package org.diylc.components.passive; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; +import java.awt.Stroke; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; +import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; - + import org.diylc.common.ObjectCache; import org.diylc.common.ResistorColorCode; import org.diylc.common.SimpleComponentTransformer; @@ -171,43 +173,41 @@ public class Resistor extends AbstractLeadedComponent { @Override protected void decorateComponentBody(Graphics2D g2d, boolean outlineMode) { - // int width = getWidth().convertToPixels(); if (colorCode == ResistorColorCode.NONE || outlineMode || value == null) { return; - } + } + Area body = new Area(getBodyShape()); + Stroke stroke = ObjectCache.getInstance().fetchZoomableStroke(2); int width = getClosestOdd(getWidth().convertToPixels()); - if (getShape() == ResistorShape.Standard) { - int x = width + FIRST_BAND; - Color[] bands = value.getColorCode(colorCode); - g2d.setStroke(ObjectCache.getInstance().fetchZoomableStroke(2)); - for (int i = 0; i < bands.length; i++) { - g2d.setColor(bands[i]); - g2d.drawLine(x, width / 10 + 2, x, width * 8 / 10 + 1); - x += BAND_SPACING; - } - } else { - int x = -FIRST_BAND; - int height = getClosestOdd(getWidth().convertToPixels()); - Color[] bands = value.getColorCode(colorCode); - g2d.setStroke(ObjectCache.getInstance().fetchZoomableStroke(2)); - for (int i = 0; i < bands.length; i++) { - g2d.setColor(bands[i]); - g2d.drawLine(x, 1, x, height - 1); - x += BAND_SPACING; - } - } + int x = getShape() == ResistorShape.Standard ? width + FIRST_BAND : -FIRST_BAND; + Color[] bands = value.getColorCode(colorCode); + for (int i = 0; i < bands.length; i++) { + g2d.setColor(bands[i]); + Area line = new Area(stroke.createStrokedShape(new Line2D.Double(x, 0, x, width))); + line.intersect(body); + g2d.fill(line); + x += BAND_SPACING; + } } @Override - protected int getLabelOffset(int bodyWidth, int labelWidth) { - if (value == null || getColorCode() == ResistorColorCode.NONE || getLabelOriantation() != AbstractLeadedComponent.LabelOriantation.Directional) - return 0; - int width = getClosestOdd(getWidth().convertToPixels()); - Color[] bands = value.getColorCode(colorCode); - int bandArea = - getShape() == ResistorShape.Standard ? width + FIRST_BAND + BAND_SPACING * (bands.length - 1) : -FIRST_BAND - + BAND_SPACING * (bands.length - 1); - + protected int getLabelOffset(int bodyLength, int bodyWidth, int labelLength) { + if (value == null || getColorCode() == ResistorColorCode.NONE || getLabelOriantation() != AbstractLeadedComponent.LabelOriantation.Directional) + return 0; + Color[] bands = value.getColorCode(colorCode); + + int bandLenght = FIRST_BAND + BAND_SPACING * (bands.length - 1); + + if (getShape() == ResistorShape.Standard) { + if (labelLength < bodyLength - 2 * bodyWidth - bandLenght) + return bandLenght; + } else { + if (labelLength < bodyLength - bandLenght) + return bandLenght; + } + + int bandArea = getShape() == ResistorShape.Standard ? bodyWidth + bandLenght : -bandLenght; + return bandArea / 2; } diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 4b66254033af4c85bea9ee151519dd7aa39db59f..9484ecd7dc8476c4764fc1d99d3bce2344c13545 100644 GIT binary patch delta 22135 zcmZvE2RzmP_y1k)z4j)1WoGZaS7bzHN|drk$cn2nBB7+WWM*ZPvWp}NNmND>*`q=- zqyPKf_x&oL-{0d=_w78->zwmCuk#x3b6(f|IG(HVJe20fNE8_ihK0cTS!Vm z15%VS;Zq+aNBE3DiQzwMDp0K`!h;{_9t9OhF;&=fg16AZVATRCId9ogmQAoVIZVT} z1g6VE<_N;WTahvZftz~9Vb6^n2CLKr;9Up;J8)(d!-y+TCJjFE;lu1`h>V0x$glwE z>nJ^%JIPr1i93;o*4LvBCr6^0*#%P0osp)$ARziN{7U15J)^@X5jQIbb2QCHtp(uz z+1}$x?SoTgL+e4Mj9s|iaG&#IqNJ`{<6}GDFRuH4R|*PVX-U!`fepO$qN=BSA)>!j z#e!k?<*TU0y&>66LZT`rww_#ah@D-X3sY52GMM%Ehbu5&^rux|{zkXSqxoOojDB%1I(5H( zcqwuv_&(C7Q{~XB%+b;5)~1zM)eSzCy+c1H=r>kpnY?jmj!pXCZcNQ>9vds2yCUjm zI?Fe?6{w}6VmW+O)!UltTqg52(~xy%?`Q-`mSv7EeVy^ceD4sf54o+8ZL#8pd4D!- zL*vDp8j-yo_|KJE&)-UWR|m6Z&nJ0RgpVq4{7NxqnUml+{F?bt>y6)AbV;W#jaM!+ zdY_(t>*)WJ6<7JJ_YIrfrhw(%-S`&2R+i0^S(oqM|FY5%#J(AJ8PNDrLmy=_>N)dP zL(>1p&$%Q!UyRQ#y#kk_uSCQv)}8D3HA**`F{ta5?tAIcxXC>oOhf`MXk1WPYsXU% zSMGl%Oj$lypo6{~*G2XRleG7GZtvxrKQ5COHXAs+J0)^XKv<;0AHV<;M+?7nMLYQ(*7&ZuVL)36+5K-*PdmFbsB+^)o2tk$ z!)dQ(ZWYF}TTPYlQp0H;7izY$mHcda;pAh>xP{$%^PTZD&g0cAmF_65qok&#lSKG7 z5US&}eY*byE-A8zd+I$2asumha$%i1xI89^`)Xc8Zec{oDG&ce=a{k$M|(OH%v!JSk!%IFag; z4XWwmQFoe0HYlA_hY`Eo6BoYUq;C4M_+7fg9grCP5mc!oWXxM$DRJmw$>3mGnRiQN zOJ-F6H2GR`+TB~Q-);ysB^F(rbF){`fu~^7U}bCuZLrk2f)KCc4u1y>1&k*=XD;P(bZAs)+`Nw( zn z!N`0T z0_eP3?mwf^Pml7r9-mP7rrhTZ@0BO>Y;PhHKBx-+Id3V{ihHt_bk2vmrky#ZBt^HK zeu_JSiPuBn>&HOnuWC&yhpvmR>1&@mbClQPSkF&47O^2edT)bm9(v~zyDa6^Tfz?# zEV)U1$S(!OK7IVAU*;)!u43Lz%b{O~@5vo;4Q>*Yzlx;&xUJ3N`#$3HcUq&^RqXBa zHjk*e6IAl=(^N9};^O$IovMv;OCM-5np!cGJTPQ@dFOtyb5w?KZiXIXL5c5ivYdEn ztAzZMCmHh$9TVUn0Kkyv>(_kT$1d2{uAZF3eR{OR zGUG)${l8TfuQEixVjEJn?~avfd|@yBX**w_S2Xk*a!-8ze$3tYwrw$n#Lo{J3#RG5 zY^%B2)|NLH7soj%DvETpU27gT`(PRAId4>*dKqE<hqjKLiy=Pv37idS1Mg3a3>YAPr-=Aq)?moAww|SKxBRF}} z_hTMv^m4Y+p;=pGF_Yrq5`zXa{G9?s1psZ2ux4?+~Hju zxf+ojD{p#cPWY?3N;zIebBm^u6qm#OIc zb`jJTZOvka@2b0#s^mSH-{~hppXnqz=1dkG^`tJ zRCT1|4U;!#w3ZcnL0lfrsR^CrM<30Ro`!9b9Xd*B+98}SRD|Z_K5Y9kuiTgGW%P^U zvbk-}XBGVqtFrSaPGl55zp;EfhTpbiLYFm;?09kfS!bHBHs05=0~ia*gS5kaH9sDg z56_tpQATICday1{&iF~)qZ2eaMr)OxCQ|6;+?ZAve^$;fL-91d46dEDMDaMi%u%YL z7}=5zrSvrZ^QB)8kLhp;z9>ykJK`=x<09fLWHO*Dwlt{Aq3}y|9DNlfA(M2 zNvn(#@QW8E)!XD$A^UuxxXFe00J?J^JzoCNC!a(5KGMGsX!p#l1{-WxnBZ zQC8ZL!`bi}osdbub^adQuBVA8W0Ct;*>}ZpF1k!ilUS1s@!mdPWj=`y?f1^f2FG|B z)(kx#Q8yMHY#+Y*=t=YGFAv}fom($YkcH@^+w!Oe6jRyxOOA+}1nboagz8qt7<>&j zIwvUUN zdo5b3P79{8IRBR$LZlz7*k30%RvXaIR!^8}N-zF=Ns?Y~?x1_`v4D7ox`_j?_y=Fn zM9Y^h>GkX$a@D6j``S00>I5oiY}~(!q+iQ^RG!_M{+l%HwRNxwqm9Q`*6QQ*gYkiD&^@K_M z{q*aM!00dE>|WLdn|SH?FIhbbct{cXz5Z@`H09%#F=pO2LmzLE&T`Jgsn>G(hYe!9 zO8gGV2~shvycqM%e^PqGr#rOQ*f<6|Fm+`5*RRm6;@6%s6}M<#vxI#m?Oa&j*s%Eh z+`ciC`C~?Hb76y5#7!0hN*|o$l`er-CRc2Q)f$_N-=UO4eu}ESmgNu^eybZ(Mo*7m zzrOi#^W&Ts|u# zl6^;9C{t%k=EOo`z06Ee?~1>>wEiljGf9k%f@0XIP`4C8FQvY)J`mK&&b$FPm6LQ>)z9p@G60&TeyZ(?jm>g zE}t!RQ-4xeqxQlhAjTlWv!dx*mMvq}dSqTFb)~^GE7L4$|EbrSB}A#CKw+BchL79QKjfHn^EZ<`;L( z-EY{E-!z=R+T88{Pgq~^l`em=Tz>j z_VLHMTuc6-iZ%Mlr+ZAo0ml5oaM+P5@A{}-)-Z6??_ejJXDcmv!yhFg!~O$mGW&e_G9E-e%8aMa@U&nh<{v~Uz5glf6cTBFBY#BTLhtRg zz%*XU8iFOBgr_LWgq&A>0&1RW7-8G`)T&~*TQt*TC zQtOb`Cpy-fpQ0vReT3(QrpLvC9@uL+x;$ox=DRQy^kUOgS;~oi{+Kr_stFe{Bc)g} zyZ1FYk0#@FD|IH-QB>2p{umUExcd;;U?{!6C<1N^M4(g_YXfK*tac}nx}9j zob4DVDivlHr)^cxO&eXDTH$G5@X}4iDcyftUQwQ`Qw`Z^Gs|8>d480fYQc1<&A{yN z5x;3&r}Izbv3W9OB~d3zKZ=~f*;9o6ntRg@>wev){m3-XhWExP71WXeYGi^wb51sC_l#@&6`bZx9}2&I*O+I1 zGSkuT7{fvd`6Zq3St{3umpZh(g#wqNI{HVgvTn+dO}?65QVp+lRp|L~Yzb$!BrHA( z?rU^DCE}NqSRNhuV%1D;N;@@9{-BS&C_9Jod0W;w)%Yt0jz?b>wEGFiMwi}BSOb;Z+cUc&?eW$WL{Oie~0^d&xTC_K6 z&z`3WGCn^;Y0-1N&EnCgdrGp3sW?nXqqNARcD%pudQ87+@tykjUq#mxg{tk zbrvXXA1jibxH@5yCcyso1;=^gLKf%fvL)x*F&737vo9zlyGY=s^f7A{6Z!%rwvdvl z_qW2jGbQyGCO>}44OYl_H!l)UovV1M_1?AdJ2Iv=xl)#=bY(NFPC3kr#J8>DjBM^Q z1WDa|t?=t@eAm0dU$45IBbu@CE1Aft z_0HB8CN>PsELBVeZQst9=_NdoM1J(<@bC_F;!m;G`@M03St+dahTF%ZLETJ^K@Y~+ zqG;cjk0R}Q$F!85NRyR1H~l`TX_A4P|AZL0q!XDT{mLM(?}ut^I>oG;JQm>I>l{QIzwVHrKHCcB0AId|xr7Er-`}r$daGP^p*T zofZgw_lV@QfWn_t7wTr`5X@<-i{pbvJk5pmzm0u@hYrVlHIO z0{EC!`nXyF{g@5!@|8#Eb&eKPoi*gU`G4H&?NjW}hoT&|z zn6ce(s`w?-Q!{<`nU^%v&|T-;a{3#d9==iEE(iFTUgc^%(f`IUnB;Ucdw()XgvskX zedXPZ?9!W4Yk|SnR&Qa1{KDzSu6p+87=MXv>O;3&`J%1vHk)%ymE6$4vF+2c3eNX- z;U4w}%^mIj!5hnAtciEK7o_U@ok{westg?zXJQ^kDo zr~=gk7l|ob)VmGX%~iwo3(sShX%&wm$;aQyiX2wE)8_c97Iam6Y@m7@Ba!~q_$J07|!}F(wa8FEPj#eei1*~BN@&! zTOUG=~}z%r4GJrPMXI@^}fMa9vSI7 znoU+}y{`WF?u>@Z!b2%1yL+0+3{+p0aLFldCNCWpR#9;wqb<)Hxw_^SVGOpSJ5G_y z;?l0&95YofZ|jb`wX^Md9hds!amYmtCP<~Xl8==1e)t3_Y5fwxm^pm&{nW1#+u-E) z-&7em0#58r=N+@;`Lz&{^Y(%DsF}FE`6?v^d(?`~YckZIfOibXM|@|q|uAFg6HMX zCwK!G7$#jGwn~{Not-$wjwxL+tf%VizU@g>t#zz@^rn7H)4S^&r(e;=@{q(&sIv5U znrkt0V`M&@Xg}pse|J1PE08B{o}r#y7x!Y$*@a$F;7HTBGu%Pb^|PRT^++wHcy6U} zp6@V&_|m*G3F(bLM~<@W-Z%Wix+!&1neG|EO!usSHw9gfTa=Bhm6F9$g1bJgoy(Fo3lrtZ=t{ti z2>y6r%(3={{+Qjv5Zp=C*o4_b4DW>3C*GZT85cl*>?&_rBwbn5up$eqADQgL3EQ}V z+@$Z>rOUd(hzo6;86-a@j#e?xwtf-H+hp(<_bPeer1d7K8bXuRnM_BcyCv>yP9#`$Undc04z0&7;6A zM`(8)Z#!DN%9uZYM6o=BJ^IL7(-6vBwyYJaxu(g@jDW!i{#=#mn?h69e;D5&t&vIG znp+EE=4Tvmi~aTe!7`Y^e9uOe<(F2~_4;CZYLf+zWL|Zeje=WXtt@YSDKh@G6!GVm+VmD1K=V9qpFmPk)-IOYwI z+;s@KW|0_xAfe(po^7J`V`^0ymvp(cIVM|l{>T+sn~p1sbJEW^FRtj*_VHzF`qEm(Qh64qp0bgz z7u8s1S^JpH-_Dk$COz*sG5zH{!t*Aww(Hy=#Sm*)T03i*9BhzPfd9u#kp<5eFS=wg z6U|!1W@V%Afx+aIQofnlau-A0)0zf#OK_}$Rxi=>!lZrf>;ZheH%^v`Ukg}ld5ik6 zgex|ml&De6{!Y!YAdEgi)-_mYv6D<%K^I$^|J>@Uui0}F^yoDAIn<2J`?BK$!ttj8 zcZQ@Z$h!Mi123`b$$!Rh9qk*YyQgG(q4Snl!l#Ivxq3%5#0oA}cjxPRq|;I68OnXf zF)i53u+{OUCJDZ-&t`3_=i+RuzxBr_6CQ56kgdkPKsx#$p{>v2x!RvoQPpXU>pkEv z(JQ>9lLb6cE3cB<=5o@qO~c(pepPbH|9W{ll-#lf1&F_}T#==|)ITMysz%RMP<**r z>vFRait9Jh`n-DYt5*hgB3wQ=X7%12Lh80z z+%}FvYqyr?a}HaW^ytjXZ7*@0SAOODPrqdvHPnkf{l4*MUj9cxZ|o5nDVvP0(ZP1y zC@$tqBJR$cp3#zE&I{HiPF*enqOmN?zlQ+*rB~m~)3nRXpNl+-;l7JI+NoFr|&IYMxBS!l}ZnyTIM6E(8Ir5HAq8{>tUzCY#bT`;5DLJlu2LoPa}WK>CN z36WkjGWQq0QhJ5gNKHVSqu~{=W(@7GL2t{W$nk(FzHJeMbK+WVV8Z%oUv}v=R={gKDRKVYi_NbVM%nP!gHIMBq^Z zlnM3TnoGIeq=fovpvzUq@1!u81$_$bXI@}^14CUCS-MF|U=MrZ0##up)j2C%m|?I@ zDZrNp&X&>_iK(HfzsgMDN`31M*@XT)Moys2&QU-%tuMEr36%N`MI=FAz|@;Kc2J)Y zE#wAj1Sx>q#!%Hr?uZhU);Xf!RD{-bz7%i{LbvOZY2afJ&5s4Xg29WdbK!v}5js=1 zaRmMtLMvq907Ns?0ITB!jp|L=P3hz?*q1{DjX>WnhPkdq8(u=Nwa(KN4%M9NTFl`g zkQfy^csZnG@eEv>;KMq}v+!(cfaGemW7)2!kn$0#emzwtXIoI)z8@ zbVh={`)@=aqyN#DgTyk{@w|f5KqBTpXJ;!i!C*)+z})(OB0wI>x{xloAt7+;+Q;E! zP}kl~!u=pS^=9CQpy4^Q0Iy*ube9Q(uw^7X`LQExAii!+ga;u~>XhUW6p$1{CB#n% zRaZsKLr)?ah#ctYjTXX+mEeK?9~N?_LDQR3Xd(y>U;ov!QxA?wVA^+)2A{myvj^7_~2;$ZZM5sdsT}eRj&=K1Csb7bq!9jIL13U#p zC)9n;LI^mKtjECe25r;1j>~no^cX-z5W_u0nvb@d~G4y*1 z@sMy&qpoNJ@de_G+eS!2I+}M8(M$wmQ1us_U|=VdkbtHfk`H*wge0vCV?feEO_G?9 zzo90HtVo+f1jTdGNF$;#a>#Sg5M&r3iN>rPLtchj_?jb&AU;-0BpMntJ|E;4YJwCJ z9I^~cFu{(ihpQblfrID|{B4oCFR{oKC}wI%A1yrtr*Qyd3XLBd;VuaPq7-#xH;}#1 zJpObCnG4NDTs9I~(CXelKxR`BG+nAjT0s`|K1SZ4#@~0Tb7)6CBPm!Pd)KQaYK%}#g6iU z`Y+tcXIcWbY9@igj37CZ1xsJ2%Y}Ld@h~;nQ&)hCW`;DtV};@aK$s42WW}QEjCoP@ zPynKpQ718kj;4PTEW-zGG-{ulvMyT-#RiSmQytU`=;@k1Dvhu!)Nvj|{el)OCMy&( z4Z*LHE+`Sm4X3-{Zg7n!df^!dmI_y3OM01MHV|hv@_G0ar8b=? zH;q1ecuo>~)<4a-vjTM^`mixVl$}q%iO=oKlbT^Wzj`IuWi7Co~qt_bs zqZp~;zR7#NdM9A=cFlC)$UJSG$y>$h9h^)}taXznTf|&b%f{0mf5tX&KI=Cs!x!{; zM|x+ku1SXD_%u7`E0JpoYjyqGD#Cl}nqTsLjxKT`WKI7FmE&%I%`VuiWvDbA>E8{S-;2%O8!-FBnE&Szx@9tK{$$WIWv1ar0)~HdzNCJuG+GR^ zxa^oa$ROaj!TRVAi5t>}WS*+RdT4R6!e2l9^P7fwCftRQ*f(XUp|^11s}}EHrIBql zAB(padeL3*kh~u@Xk4ll&-l!{>$R63YrTBsod)w{n-zEAkJl6Q9c~Vaj56eNR+LQq zx*VJFOlv0HWjE8plVVxG8(w%BXbb9obw2uJ_$kMr)ERkiYG2G3zEIDVz^6+IJ0Tu4 z?m1 z^!bimKGf89zQ4=$b&r&oR8iPxHfaIg@Le?nOou?C0pHo!wC{%`2L>|zCbfA#vd9dC z&X!f!`MZ5yV3*?@*pU7(BhS8YgHu(ugJFpyKEW(17LAM1_x;`K_O0w=ab|Zw%$ult z9q1=Pu7~>-ZlBCuU#HL)(2oskd-wdBxi}f=?z>y>s!8viSW@)efDfA&G5 zf=kxGKtcBf%kvgy=gWE-&PeqxWWIPr)_sjuE%oDBd;KICxx^lRnU1oEo~ne`QDZ5` z(pkiiLy?mrvp8N-F{RITLrBtyomQ<~_JNpqk(osDc2raqi{r)IVLO@OdonJHbw=Xn zlrDYt`$;}sTPu1Iv$XL|=C=L}%rem9laxS`|K=*3ub8^`jp@R?6lIW$`yt7*%k-3E zSD&fOz3w?w|9j?>3R_Y6;~5KKnapZ^r{wxu8S2hlu{CBmSc%)`6@|j4lb^ibW}P$w z+(=3T)?eOC5K_*Nw+vPG*BYh$?%Xa1Kc1y2?9GpeG3kCaPG*o%lQg{^f2zFs(fyM? z1~yuCJV7raWH_YCPG~p5j`k z8cbfF)%ZuOhj6?jAE&4uJ>BTNpLRGXL9qA@S?AF13~f$YMhttYZEr`HD`Vn%=fFsV zYtJ$1axXF8_UDi9rb{`0Tz@s@dg7y%nNQ~niqunA>il}IUpPNLDbpyWmI4oRjclq4 zwpX~I64u`s^Q7Bv__}(*8-D4|%u{a^8mf%F1EWolp%?8h;ffEDF`r(cBex3e)M^@F zuL&yt$jeh8a75xo2W3%{Zp)(ev*Wku+U*>8ntUci8P8o8LFiVpw2T|MzY1x9Wea9U z-C(`;T8-Oe$n{iQxV~h3?5#epl$fu|qHu4@**mvnTHj1Ror-$nMw-mhD>)uNSQ^xJbhTT2f;}G=OUwZZv9vjYp}d|p ze7M*-5^3r|n?hldg$}3{E9v#2M>|T}7^!bL{ds2Fc9Z~ygMAE@;F%YGVXnbapziuj$Sos`A+rN;oFy8%PHP4=DGcTKYJh-T<${+dwqQZU zYXfVX`dNmfWxjQ7Y9bpKZKtmrE=)$GQcK_Nh$)~bGjtwwSedTV?NL&hTvnnSO`tYj z$!SBr(q{HqG9E9sjrJ1Zn$Sv(J@>1si#kr8&mzG{s)M?OA@69atZ-I=qxqIl__67; zmmQ{K3*>qQPekB!Ten>r^OxC9MBFheQGH%?LfTcopom2w4HY70t^4RREOh zyI6TyuOE3yrK&Gw$k;@(XJkY^=P2;$k8MvpT+3TKd(1@PhB=wwiLB}Tw!$vqh&&it z&_e#(80YsNNe?}xj%jpWxc9wLEd4^`>>q8|v5j4g2bebZVqDV|n6YgGDsR<}VrbX= zttM`MSP=I zxu{*w?wZK(BwOE0i<#_i!>t~&=eu=%d1v*?v#jesU&_)_Qd25RjamihdAPNAU9d%7 zI&-pR2JD0P`1ALacvONj+UUY=0ISo59&2e;I5Kf>mfcIT11?0$>kt67(C^L^6bIZ>GBEU|iJp%?pEwCi1_ zU1Lh(zzf~{e)~|QTKrH1-BXeDoXB?Lo!N@ClYD_yi^6sK*K0gpRFod3t@fDW7D`$7 zF)I9h5nU`ChK`Fn#V1(paqjR#o3otvD7wh!o{~n7@jBkr$BQ-JgapCLx_4S-MJNr*kW{Z#BzdwF6f`0GOV@{ptWkZ{Z zD~pevF7wNs9c6AAI$^_xYq>s#@N&p82~)kvdEqGe-O*_N_#W?$KP2uiu8KZkwwC=+ zymG^3FhDl+(fcbhKWOC^+?Q%H7VhNrFoiw%c<-TD`jETXdlmX$dh{j7u8;O2Tz5|- zN$YjPdqrAnXb%sd)0HT0AB{XeMj0O>VK~DVxoA_(NA9XYZP6Q1>Bimf;Rg4fie|I8u%8hA{JY|$%G}$$&=~dOy;`Xjm~iSSRlDa}(c^mb zm%SR&DH|U@L!^^QjXw%y~hGJnq6Q`lS0sPv4q*4Pcy3qn@#GpJ`wY z7>iw`IGwlK{V3o}Qqdff%2Qm3=ZEB=tVUC{BhHP|D&f4^QRj=pk}RGMaIGqcNT{1& zR9I7!aZTN4w6)YGdA_`~{~g^7E7%|*v$>VS;YtyCl9%HqT+;lNf?0UcrR}WcpEZ>d z4!y`ASb|o405-^8&!&|vJD;l2sOdQkwN}s3#u(HriDXyN__slLXVD6-R|9EV32y~F zHH#u!Qy$YbWj`7yguhDTY00_0Q8~NHzRI3|VIrK3mXx_Fk9Ag!%1r_`_<32&>5xQk z1cP92D@yQ|ltX86yw}yhDe`w70WI3u$LI8@etMip8sDbFG26w(o-TCsr>vn;^Benl zb#m5K&i8xWw;GD_Yd-_#a4f6Vjv{E5r~#5>RyB#xuQEmPq61YCnRRXgoU0w#h1TvMQd?h;a2$P9LyX!L!m@JO?aIC zT-`h>oP~K$ry;dck?Zea-Oz7Z#?Z($Tq%X(d&@o>Q=b%|$tgS@`qm>|OCcs1cRZg)i(v zmoLV(m+P(3zxpBp6Md#jaoi{O%SAm#2A$j1Ml&b7g=R3x4YHw3zOP!c7G)!05mT&` zZw8hTY5~#T17q~#V`}Aa38(V%Y=m5A(VZ2^3oY8=fnS=mPXS(6Q?Ct=ccpeocZ>CK z`Z(`*j(v{$bK={f6jwHBm)tv}J629ze9%O@w5B}Slxjb8c2KR^l-Yeum-=Tw(BvP) zfn06fFb&|v?q@ep{ZQ&6B^?z3r7jqG^j`xxpMf*|i*>F3@Y5*REIOlyh&v|K3ey5tE|9h4O?nnhiJawo4V z>TYO)DTT*`lmgpbJ}h_L_7aMiCo=ef`T`|6g*Q;dyk*EXss!qgz%EJ`N^^O^N$7bA z$+(`29gG~HywJN{2zDUShJ>cBfsX`AlGH8plL$dxVG|~ifJ`wFCt2bk*sgkvgbm8K z+S`zDL;eYOB9TTDav$0uvX7pFg5Qzgb02Jg?<|VCZuSDnC}c~AJIQY-lkpZ8V3|n= zgXIfBxm*I{win40D2X@v_3-@$Gz|8L0^rIb$^qPku{3oXkt8pm)Y8*f5-wa5af0IqroNH1K*_{H6grHU)w!4S3&RG3wJ1ZGU%W4XaSb#@oeKud%0_T(g?-Cw zZm?rX$p7-Z;6=+ovbPSSNCVfd(KW^sLdHkTM5N)&@^e`c4?R(K{ki6p`(0&NQ9AKDOPKyFf zFa>CoQS3mDGM1-~VhEiG@nw#o-J!N*6KFn2p5z?b8=~bdpie#Apy6%oZ^cgoi7O7>K7~5u-$4{BQ6qqDOdOT*eT-feBbG6QKvonBxR! zeHmj*csRa-aU?v{tYEweQMLaqM?icPW66czGyc{KVKC``zIT}q-et*I#b^4A>#RE)l@BYL<{WJQBVM8ofq)Z^0Q_fgpfta5d!V(5#;Q%r|x`G8bCfOZXYlwkX*HLx|^89-_i!JXaEBB>piVplVjW+{kfodn!2+$n zh&tZlC0z>p2YwjF2nerZCs-JBnuP;=KZ(g;6J%J%Mk!vkc^J zfdVhfFl~Az6Zgzs2bP&gxk0eO6`wEKj2W+dX15Tg3cf zgoFOq2g648fK`5``;91pY*RQL&RACmVWep3AUK`5sKXTYL1 z!stF86DCyD0dlZX4mmyK_M;T=8|RID|6R|@GWYrEfiMJdnTkh%YJf^SbOaE41SbPV z|0n8ixgD&|9vF(v>V1A1fCEJoWsd|!4R_)pd7vDLWgyJOzZLiY8l(h_BeBo|D~bY} zz8;4R{5=k*p*A;$BN&kQKN>)|QUctE zb{fq<{AwgvK?18&dB49i_zimsbr?+k0ISOa#9B^*C5#Nv4L%^)Fu-#x=wnk1f{_rT zgf3;L)@!1`7&QZx9^8p80mso;Xe+vp2HW>>LhZxQU_>mSvCvZX2M?*sLy#T@%Sy2A zR*g$p4k%R{JOdq+YNCW^l?JLY#6fmBuE&!IvQ~qvng_a}qYAO&R1q|Pw+N-sIz~N^ z|2w!v9OReK*yl$BH?UYHLI*o3@n2&~vY=+*eF&z%yZIGzP$KyQJj4tv zQ-G)NZgS#aboV_xQw&DJ1Q>n?_utd`|L}`aV7UohG@}4ToqPBXbpIiO0Vt;+PNQZ# zu3Wm03lUneQG(Q+*ANx|S1y3y9t0IYN{eM6;9+>&yyqa!08mg8r4Hlq=CA+Y-c(pD zz)nT%1!)pX?OAXqDCGxVvk!z6eEMJ`!V5ZZg9?;aw($>?NDYqGmkn^EYrtTkqsdaq z@YE0(cTE3hGfmw7Z%c7%EVKh3y6+vL299$Tcs>$4V9E2{gN=xTO$}OdlmYN#28V{= znPw&=8PG|KB^Zq$NvWLGagz$_75a(g8U~mjOjo; z(EJ~~+#LDOnX?g(b6M`=9Dm23l^%qId>{zC;DQFse8Af!4)nzM@WA6_xPAOEq3?fh z#{74hG{o++k^q0`u@Z#7OEG{_hT{K$@E2u(I$mPmZ{YFqI}qN&fQ1fmV|Z#*_CKxu zJV25FmD!+y=`6%pdabMvcLdLKtK2Xc7^C|?`B#P?9BfJc_cW1z&Z3hR95+!g0EPFP z;7@a5)&DeVVI(g4pTP&jz~h4u=I#?D8ra+gPblEKnrV7^bbTZ!FAV(0cR;37`#%jm zn6S`k&V)YtycD=lzoYo?y2aa#=jR4mnXm!`_suhb>WlmE)Wi5YKZ1nS_`RWv`yRNs z+y)mq7rMo^Snx z_`$nF+yv2oZw>u-2jAKyu;Q-}0iEDgBSI&}4uPHUhXGD3SS}D@11LC%$E>~TvM_v3 zEg2jUaA(>7$-i;n+_i00lw*gP?I9j zYpEfr^j6?l-U1IMLi_gP4;*2~3J}IJ$lT>pCpDN- z0VC(&Sb~{AcA~+7HL{h%;DB?31Ag$7BIg3h+hQj!Hf$WA7H4lfl^bZ`z+wPL4&t!= zy$SW-^ZlOhK0kEU{DhYx6S+^t09>3{=xDFZ2}1pG|3DF(SY|?8Owc{Md<~qDnq2=q zsvk)q!f?ny)JZ&~ky znVn6Z|Hkx44#fYR3(G^W<)_!?ay~dHOW^g;gBgUE)ex&GH<4A<>)gUIFap=W`FrqK z+t3WLg1Kl$;ISfc{}|>54RmPThXnp^9Y#DL6yClMF#zdcs+-W+N<7p)20>uL8UtjH zp|F2nSx9+7ym?|Drv!$66W?Z>@KF9N9%9C)hlK!jX<}&h;32AS1PDxVixN~x@PWkK zAO9oL0k|J13c^e$z{z;{+Q$E28o+S_#Y6~c0=$KX2e$vhmD?x|;Qs$Kx*Z1L$lbp% z*qRz>K1__iF+AJ}2jC)D0pK(qlH|wI5kh@GgAV%o;E;RrO=83{l_&4o!Yzz=?6P(SxzNd5#KI8TCOeQ@vsh4=Xx0e1nS!$Jf=`-;T(AvDk? zKwLZ;UZ|1ufMW8&kU99KdG{E^KQ0Jfz2p)k2C9-EDC)7zKhPCH;=5WV9vXDohX@Cg zyFwt5!WANd34U6Dn~%7RY$w+sO2J;^>lz0qIJXDHzvE6q2V{Y%1cI0TmID6kN-l4R zpG=te7V)<%@ZVlhT!C1@8UeKJ#tDN4GGE72g@L!iM7O|&mW-o7yBI;&$Q)SWly2c! zp>g|LMS#In4scNccrHP};~oh$kS0Q$L=_^SuB3bW5C=eggg8W;M?mOE<~~FP_#PqJ z@{r&A;twz~^#0HKF7pV_F91+I0{w*F)CjRWj~8{R0fIzDvAhK8aZ!+J-vUt`J4nz# zx+rn4s>VYd&;Nn8K?=d=p6@tpEe^q8d7u*{5A-mqW1pV_cm+lpfqz{zf-V!Zbrjs@ z55C?U{sQs;86#o&JC!HIK-KIs5QHy_0Mg<_tB#6;kn7w&1id#@;;9{r5EWnh0QSU* zM~pMMHH=>1k@+}i=)sLu{rf-sE)vAi2$KLs!AJnOBvuZ1BSCyqZ`d!g{C93e+?B*a zxn*NXu;nN(zNIvfE=km{V)QNY;PytN0o7Az z`oF7M2_7#w_YWR^4*ky(43`0M5pXUN+fxE44>axH2}$94By1Vnp}WA{>EOB25}c64 zM)ZU%Ga&>U@$%w>_8~NIDhN$YSn>(Mqcjrx2Y)iU0j`w?*CHz%)Tl%j+zcFLvGjzs zwOXy@^<{7w%mOFrK_|2Ww`7S<_$&)5O^exY&jbj`5qBpwIS^6-=N#TtY$lqKuuBt6 zxqRG1upKnx0(h2rhKOb6v3Ts1J21pd1USm<^4hyo}ivig5S2Ea^_DC3(2gFRkGCMZMofPHoK zkj_2@tT4grzwtt(n)a!Tf29nGk9D(yQf`4#4ki-}+VK3)S+q+L6wuI)CrAT1?O+&j zDG`?%aU~Fv?}21{DiOEh`*`Z(UWiK3gFXZ_DHH8hF=tNa{Qqh!{Q&WoC}U{>@isIT zh*TqL@l*!oaSiR`P{O?rPu&;;s#UOj0F4T9Ys9!oVn2Wrg9$v69bCB2P3*H$05}!m z{tWBn;l;Zk5p==9NgEGTsSrJ|h0ks7Ea2Nq5&A-Ktb-~@J-JGddRGlg323hVYjrCg z?ppgF%teSRRdTjbe8II4RCjQvuiwFQ@&ZXaXs*9qPf`Pg$nWh#%!Du^sNV)5WHWdy zs9r$x;7f$i0_mU*l9S27lpQ5T4yXhxhdlU{=@~xiwl2^w{op2YaITP35qMSp8C4BX zsTd=Wqm5+;z#8Hq0H;A5ibOp0lOKX4HNjlRTYd}^A%{%p-^7&JlpXj2MhPZS4yMy{ zh4vdk84GhwP?QcBQFtwJn#7}2DV`dj22nM%z%TwRYZ4bt`)ksB4?*8mf&22oE_~G3 z=Z6l1-ddoPkJ|fGYM@q&c!24{LwEJ}A##90o46hbYlBd>Galjq&Vv6DR++!0&i_`5 znt^O>EL17_jBlFigKsJb@aPcNZe<;iT6htnM(7aV7`85LW@5pY8fk(5t}U^Fcvb=6 zlMd0MWxRmF>wu#!mJ#69C0dm0`by^yxIq5C2!kCyF!|?!)4Es%w8$d3Y{C8?xhN(o delta 22219 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 diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index dda26e6b..5605237c 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -2203,7 +2203,7 @@ 49 0 - 2018-12-26 00:00:00.000 CET + 2019-01-16 00:00:00.000 CET @@ -2236,7 +2236,7 @@ IMPROVEMENT - Use hardware acceleration for rendering to improve performance + Use hardware acceleration for rendering to improve performance and reduce memory usage IMPROVEMENT @@ -2248,6 +2248,22 @@ https://github.com/bancika/diy-layout-creator/releases + + + + 3 + 50 + 0 + + 2019-01-16 00:00:00.000 CET + + + + IMPROVEMENT + Better color band rendering on resistors and smarter label positioning + + + https://github.com/bancika/diy-layout-creator/releases