From 027f923010a227b3357fc0fb9f6d38bff57b19bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Sun, 28 Sep 2014 13:04:17 +0200 Subject: [PATCH] internal viewer - zoom to 1:1, zoom to fit new icons for zoom --- .../decompiler/flash/gui/ImagePanel.java | 74 +++++++++++++----- .../flash/gui/graphics/zoomfit16.png | Bin 0 -> 1605 bytes .../flash/gui/graphics/zoomin16.png | Bin 725 -> 792 bytes .../flash/gui/graphics/zoomnone16.png | Bin 0 -> 1617 bytes .../flash/gui/graphics/zoomout16.png | Bin 708 -> 790 bytes .../flash/gui/locales/MainFrame.properties | 4 +- 6 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/zoomfit16.png create mode 100644 src/com/jpexs/decompiler/flash/gui/graphics/zoomnone16.png diff --git a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index 4a0438057..2111239dd 100644 --- a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -74,6 +74,8 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis static final String ACTION_SELECT_BKCOLOR = "SELECTCOLOR"; static final String ACTION_ZOOMIN = "ZOOMIN"; static final String ACTION_ZOOMOUT = "ZOOMOUT"; + static final String ACTION_ZOOMFIT = "ZOOMFIT"; + static final String ACTION_ZOOMNONE = "ZOOMNONE"; private Timelined timelined; private boolean stillFrame = false; @@ -335,10 +337,22 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis zoomOutButton.setActionCommand(ACTION_ZOOMOUT); zoomOutButton.setToolTipText(AppStrings.translate("button.zoomout.hint")); + JButton zoomFitButton = new JButton(View.getIcon("zoomfit16")); + zoomFitButton.addActionListener(this); + zoomFitButton.setActionCommand(ACTION_ZOOMFIT); + zoomFitButton.setToolTipText(AppStrings.translate("button.zoomfit.hint")); + + JButton zoomNoneButton = new JButton(View.getIcon("zoomnone16")); + zoomNoneButton.addActionListener(this); + zoomNoneButton.setActionCommand(ACTION_ZOOMNONE); + zoomNoneButton.setToolTipText(AppStrings.translate("button.zoomnone.hint")); + buttonsPanel.add(percentLabel); updateZoom(); buttonsPanel.add(zoomInButton); buttonsPanel.add(zoomOutButton); + buttonsPanel.add(zoomNoneButton); + buttonsPanel.add(zoomFitButton); buttonsPanel.add(selectColorButton); bottomPanel.add(buttonsPanel, BorderLayout.EAST); add(bottomPanel, BorderLayout.SOUTH); @@ -422,19 +436,18 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis }); } - - private static double roundZoom(double realZoom,int mantisa){ + private static double roundZoom(double realZoom, int mantisa) { double l10 = Math.log10(realZoom); - int lg = (int)(-Math.floor(l10)+mantisa-1); - if(lg<0){ + int lg = (int) (-Math.floor(l10) + mantisa - 1); + if (lg < 0) { lg = 0; - } - BigDecimal bd = new BigDecimal(String.valueOf(realZoom)).setScale(lg, BigDecimal.ROUND_HALF_UP); - return bd.doubleValue(); + } + BigDecimal bd = new BigDecimal(String.valueOf(realZoom)).setScale(lg, BigDecimal.ROUND_HALF_UP); + return bd.doubleValue(); } - + private void updateZoom() { - double pctzoom = roundZoom(realZoom*100, 3); + double pctzoom = roundZoom(realZoom * 100, 3); String r = "" + pctzoom; zoom = pctzoom / 100.0; if (r.endsWith(".0")) { @@ -462,15 +475,46 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis break; case ACTION_ZOOMIN: realZoom *= ZOOM_MULTIPLIER; - updateZoom(); + updateZoom(); break; case ACTION_ZOOMOUT: - realZoom /= ZOOM_MULTIPLIER; - updateZoom(); + realZoom /= ZOOM_MULTIPLIER; + updateZoom(); + break; + case ACTION_ZOOMNONE: + realZoom = 1.0; + updateZoom(); + break; + case ACTION_ZOOMFIT: + realZoom = zoomToFit(); + updateZoom(); break; } } + private double zoomToFit() { + if (timelined instanceof BoundedTag) { + RECT bounds = ((BoundedTag) timelined).getRect(new HashSet()); + double w1 = bounds.getWidth() / SWF.unitDivisor; + double h1 = bounds.getHeight() / SWF.unitDivisor; + + double w2 = getWidth(); + double h2 = getHeight(); + + double w; + double h; + h = h1 * w2 / w1; + if (h > h2) { + w = w1 * h2 / h1; + h = h2; + } else { + w = w2; + } + return (double) w / (double) w1; + } + return 1; + } + public void setImage(byte[] data) { setBackground(View.swfBackgroundColor); if (timer != null) { @@ -627,12 +671,6 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis } } } - /*drawable.getTimeline().getObjectsOutlines(frame, frame, stateUnderCursor, mouseButton, m, dss, os); - - //gg.setTransform(AffineTransform.getTranslateInstance(0, 0)); - for(Shape s:os){ - gg.draw(SHAPERECORD.twipToPixelShape(s)); - }*/ img = image; } diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/zoomfit16.png b/src/com/jpexs/decompiler/flash/gui/graphics/zoomfit16.png new file mode 100644 index 0000000000000000000000000000000000000000..168bcd5ba67395333a1503956009b496cdcc2a00 GIT binary patch literal 1605 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh*)icxGNo zet9uiy|1s8XI^nhVqS8pr;Du;&;-5A%oHm}b2n3CM-x*=b5l!0Lsvs56DK1lLq}sX zQ&%T*H)m&$o&6x?nx!Kqgt=oo!a#3DsBObD2IKumbD1#;jCKQ#}S+KYh6dhV;1-3$y&J3U<- zLn>}f3C{Hh4wR^Sw|DpK+ka#{ma42sSg>G*L{`{jh2P>X7sLbYxwM@>8gDt`!tvW- zd1PSY7iA_#mheeU69m$3s3;wp!qlGUm%GFA`L^GsR^c%g-3!?7owj^mdH;FsyWjH; z3pgDx;5qc7?#q(UiBF?m^>h7xQ90r1j^EeUO*2ij4rwybnR~Zyp}DgQ&ySN~9wqiZ ze_#FlR-?9N!QD$w4aCJ&Q=dIs_<1dNnLkI>yu(QjPK8lAdQWG6s4Nm%{QjQx>eX74 zlts2g%Wa8T8}>+8B*@;tKW*=+w%)Vsp7(p^oAmrs`Ks)#q9U9myFtj*ZqE5t@__=c z_}=Qfd|$!+RQ05WO|@)m`m2qrG6G^R_uT8--O+b-Vfm@{W>;2$mVj86#x*B)MFcac z$ufpc*5W=te_LXtz{P}}yslva!fTKA#JkD#F0KYDlVXT$2|Ir9rSQeiJ9_`^=2*X^ z;kr@A+nwyqjm?4QnI}1LYjvn7aEW-fO-oPw?x~@j-!T8-0`n|E@%0CLxwjg)e15RF zqGJ)0XQC2khZD>3ChqF;k3Y5uG_@rcF5e_*HJ8m)J^N~6IS2$Uk4qacM z@YEoBT~XQNv&$xaxpL)5Q*EV($xO3+&F0kY(vOAB&RE76%=VrzaVqoLe5TFoqYva% zbKji4eoDBC%8YY@0=g&OAAhj8x8Kv#yZM|zKeJ}so0C1qe{}cRbA+e_-WJUJpq7$# zC&7E;*$vk6&vw+^;C)v2yyx+c`yBsT_w0*aYSwyTWx%h8{og+S_uk;RDfRE$=?u&a Ys{$g$UpYK@1}fM+UHx3vIVCg!0L)HgC;$Ke literal 0 HcmV?d00001 diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/zoomin16.png b/src/com/jpexs/decompiler/flash/gui/graphics/zoomin16.png index cdf0a52fe03715dcdf399e59c8071c4572dc51f7..73924a771970a0aa2f79316ad65b80a8d86387f9 100644 GIT binary patch delta 734 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 iH(Mq zn;&cvK@U8fbKdv={Lb?{@ADF*+4qo-I1gg7BzI{rff`zbe|!*Y{^_OKTc0g|1&sBaTeQ_Qm~)Od;>CC#JV6~a z8Ujwk;w#s#cCkGMmjx0HDf3lABp z6lGO)Na`~Hs-p0W(SWa^JXDuvV?zL9;2>~Xh*{g7Z_r>yC<2>rfI{`@08Ub98>Be2 zS{7g#TxjoxhGW6f1`=AMEXlb0><$uSTbI(O0~Cd!8xlAge>4{s(fj-+Vhn>A%Yn~k zz))^1sz4(qbt27RA3#=#AcR)5r%cP32x?)-1>!VHuctx0CUp`D1==-ph=*1nNMtjk z2Mgx(dIVxc;LZ}ExNGjrS6_F@t8Gs8TnDF?Z&th^j0N34L9?klLtHH@} zJhi<+IX{oEf5;<};IXmAp)l%4i}0Gxz!)MC5zZz%M&0%5-k|P0D+fBALsqNFRC%%t z+4(tiN|e-gbR&u%zTenfSwQ2N62RUJgooi7`ia^bLxkG_OkU|4cDdWnb_8ZuuhQ;o zcYi^Lb(1zCx4C2*SO}y}3KcDo)v1gOcFjz^C|O$CQkqPi?SFF7+idj$hCIyb9B-F? z&0ltOd?fn;|FWw7$4%bkY;cT%58ndUUcI00`yW6GlJ-7BFH`i700RKCE){NBT=GEx O0000-K}|sb0I$e51&ZmBAt--VNkl=dV#j&aWqOgE~4pNU_-giktFk zY-J5_XDlv`7+j?n3mXtxgadILp+c<9cr~t!x1LM6m69Z~V#pLL22Cs~BoIdtZHTjo z7Q|_U0a2OmSF=gCGFB$RVZIP(pixmBqE&wspAp44g&k3ybk)!)w~Ch-l)@GvKSbf~ z$A0Vja|E2I38zSOD~MFDT9A$qGz(dujt~p6@T6$gEZ$iW)cp=Qk#s4g2Knm-K0Bbr zBPc|n{d;Q*d~=+DuSYDfq}9WsTmhdpZ-Wo(H-f}q)~84BtiwyJMCcJVEdG+4fTe%Q zIDEc$2Nt6vun_RWyH)F?2ANB>z5KS@6Nr>5IUeSHrF5tre25%v{({B4Uh7 z$>U`)&Ke=!vG-%5TM3URdf@fL8}M&tJ_wHzT@bbI6e5-_6@M7~jnPxPjOqS^@NC8d z+=Bo-&t8VS-wZtp;>ofMFt_d7jf}Gv=EvG$ZmbhBUOhyc$oI=Oz}&Qv#$aO=jCU!} h2;{4vY12x4{{xY7zoSyv$>RV3002ovPDHLkV1k5#GS~nB diff --git a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties index a5c187174..1afd4d3c9 100644 --- a/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties +++ b/src/com/jpexs/decompiler/flash/gui/locales/MainFrame.properties @@ -507,4 +507,6 @@ binarydata.swfInside = It looks like there is SWF inside this binary data tag. C #after version 3.0.0 button.zoomin.hint = Zoom in -button.zoomout.hint = Zoom out \ No newline at end of file +button.zoomout.hint = Zoom out +button.zoomfit.hint = Zoom to fit +button.zoomnone.hint = Zoom to 1:1 \ No newline at end of file