From b3d63e9f22fdb166790a57b323a33432f9525a1b Mon Sep 17 00:00:00 2001 From: bancika Date: Thu, 20 Apr 2017 14:12:00 +0200 Subject: [PATCH] show selection bounds on rulers --- .../org/diylc/common/ISelectionProcessor.java | 21 ++++++++++++++--- .../src/org/diylc/presenter/Presenter.java | 22 ++++++++++++++++++ diylc/diylc-swing/lib/swing-framework.jar | Bin 139965 -> 139997 bytes diylc/diylc-swing/library/main.jar | Bin 403011 -> 403011 bytes .../swing/plugins/canvas/CanvasPlugin.java | 10 ++++++++ diylc/diylc-swing/update.xml | 16 +++++++++++++ 6 files changed, 66 insertions(+), 3 deletions(-) diff --git a/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java b/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java index 153ac2ef..edba8cc0 100644 --- a/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java +++ b/diylc/diylc-core/src/org/diylc/common/ISelectionProcessor.java @@ -1,6 +1,7 @@ package org.diylc.common; import java.awt.Point; +import java.awt.geom.Rectangle2D; import java.util.Collection; import java.util.List; @@ -25,7 +26,8 @@ public interface ISelectionProcessor { void updateSelection(Collection> newSelection); /** - * Finds all components at the specified location, sorted by z-index from top to bottom. + * Finds all components at the specified location, sorted by z-index from top to bottom. Location + * depends on the current zoom level. * * @param point * @return @@ -54,7 +56,7 @@ public interface ISelectionProcessor { * @param direction 1 for clockwise, -1 for counter-clockwise */ void rotateSelection(int direction); - + /** * Groups all selected components. */ @@ -64,6 +66,19 @@ public interface ISelectionProcessor { * Ungroups all selected components. */ void ungroupSelectedComponents(); - + + /** + * Mirrors selected components in the given axis. + * + * @param direction + */ void mirrorSelection(int direction); + + /** + * Returns the minimum rectangle containing all selected components, or null if none exists. + * Rectangle is scaled by the current zoom level. + * + * @return + */ + Rectangle2D getSelectionBounds(); } diff --git a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java index 7f223075..29d3afc9 100644 --- a/diylc/diylc-core/src/org/diylc/presenter/Presenter.java +++ b/diylc/diylc-core/src/org/diylc/presenter/Presenter.java @@ -6,8 +6,10 @@ import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.dnd.DnDConstants; +import java.awt.geom.AffineTransform; import java.awt.geom.Area; import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; @@ -813,6 +815,26 @@ public class Presenter implements IPlugInPort { messageDispatcher.dispatchMessage(EventType.REPAINT); } + @Override + public Rectangle2D getSelectionBounds() { + if (selectedComponents == null || selectedComponents.isEmpty()) + return null; + + Area totalArea = new Area(); + for (IDIYComponent c : selectedComponents) { + Area compArea = drawingManager.getComponentArea(c); + if (compArea != null) + totalArea.add(compArea); + else + LOG.info("Area is null"); + } + if (drawingManager.getZoomLevel() != 1) { + totalArea + .transform(AffineTransform.getScaleInstance(drawingManager.getZoomLevel(), drawingManager.getZoomLevel())); + } + return totalArea.getBounds2D(); + } + @Override public VersionNumber getCurrentVersionNumber() { return CURRENT_VERSION; diff --git a/diylc/diylc-swing/lib/swing-framework.jar b/diylc/diylc-swing/lib/swing-framework.jar index 12160eb70fec036fcd8aaca785ad85d802ff3b88..cf4c326e4d1d7fa47f5baea3aa4a90fc4daead52 100644 GIT binary patch delta 6697 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 KzPd{42JwHsM=dD; delta 6665 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 diff --git a/diylc/diylc-swing/library/main.jar b/diylc/diylc-swing/library/main.jar index 2d8ef19443a3dff5933995845c24a7187a2bbe38..48e19981c471cc59da3e6e6ab0db0e65922e62aa 100644 GIT binary patch delta 4603 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 delta 4603 zcmY*bX;f547Jl#5tJmE?0}VD?gS2dJN0BIkqZ1k8Hf|xJs9+RLR9w&)3^6(yamg`p zV!&3*IT#g9j9WwxIxhsX=_DG*7*P{rbOaIN#wMUF3QWCw%Q+5z`aAc2_q$8geZ}eX z0jJLgSd+#O)lHJjlC*e*E6>`4EaE@$ACgS|b2b!y?nm0VakTW@pWT%wKOf8euHo`v zBiI!~qL_CTHMx$;ZeaLI{xkfx%ZdLZeAFbHT#FSXl#!@y(-rz$Er!lCcP@VkHvuyOnU)f38c2GOwR1dPBk5(@$TY9AwS(Ma_Z8-QASGV$b=(W%j=(%w`h z=?gO}*dRODm`WO1^ikm7RG@iwy@g3?_^f3Lp1!8`l|2nD+%pB?umSyXzJpjzj zTj&np*BuTO7E9b(rb2%x>ufuVCCHbIHND7R`!W;m!vU)to{O~3od&6V6ZzBb8^O+ zi@{b&S{B0c_7W_HJ*}ahMQ=4n!SwWZkc(_(W7M_ecU+tS4W_c4T2WW3}FWnxb||DEy*{u z8)+{+IZGamI=kPJ8-1XhZ5!k?RQz=Er!-J653X~luR$hVYJZ30sn_I#_v)V%MG5lmS@&RY zg^}$Ta5#cwc|wje>psYyz`sFFzQz`Z>q-5|8(8os%R+M6_??)q;s*1A&5XOvdg~D4 zg*xs-$x0m3#zZm?ZOy~TId9OumHg(p0{({7+Fc1}pkp&DP9#>AVA9OGDTN$z1DCU2Qb1_VH} z(W}WLETj8cQh_t^c%RInkm$XE;WLaSJPreOu-(3zmws>)Ny89x9;r7OFN6MMJIPQ0 z&B-T~h{o+C11Z?v+e;c8fL44%0^9*@<2&!>X*@rRm#@>ugn3&vo8ESX z)S*K4@5F~doP3kCp?*g>iShwk_eSC{fmXw)boLwnq|dUsO2=Zo?5U?_(bu+-3Nw&1 zhmbw&ebF$S$OnGRN zx(sbmd1}5N^d{}gZCIzEP z;)|-UUVlm5jf#^>f300L!tdm7ULqE zU87uevLh+97fbS>c9!YT%HZR5MN z)e~RXsl>N0|H1l%(BAB>Q*&ZF+BoV!)sXvJ zXY}N%!@StBP#S4)0`!G1(?QtJ{uH_liFo~Gv)8M zF`MOEsTW@5zi+2yXj_y|hxvl{#1U%g1L(W!ls{-Zf-SsBjme-dO8a%4fQk~z@&%t zH6%Zz3jp+N5P&s^LY_1{8(yR6<8q@A9NZ+r3z~$*@i`Xod+QbrF4WdW4aYx4)^PkKvWABpstC&(MZ-z_u4u`SupiOz_T&@6=^!F%ma5@V z|EOwscf%;AVmVYxgYYscbYe9Phr~22i#0z3lTAYBYm>GJqN2^B)GcNWm#Wq*3L9Y& z^&GQ^db+r2)8RQdGH|lf!OFZeJIi&`5@CgZant4lNOb2(jD0`g&Py|Z$%9v9fO#Ig zAp`v6!6gmQ&nke+DqPK0UbW$x>?xv(J+&!d>EfkL2k@4cAYbzm27b4w8LAJ zKhLJ&2c*=dy$0cNK7zc{hj(w}BEH%j01JJE>+&=3r!IoCs|(jL$R@kc$+Qd0FLo^z zTrc=(69K&MCyIaY%#!HOkIo3s_ZO~qe-S=AKy>kafZ%iuGvTdE?a@-n3Z0rCD-G80yBr=Oq&I~Kc2kHL>y)nI zR7$#vi3f*@DddC-S7oRmk8+BB4m!mR@b9K&z&*KWJ@4$soDP0ZKJKQCg(9oFi6SS4 xiLQ@_iH<_TMf=&|;>1hC`K>hC?;Rn)`Uo-ViU@Jg36Ww}+apD1_an8b{{_A1m`wlx diff --git a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java index 9fbb040d..06595ec1 100644 --- a/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java +++ b/diylc/diylc-swing/src/org/diylc/swing/plugins/canvas/CanvasPlugin.java @@ -550,6 +550,16 @@ public class CanvasPlugin implements IPlugIn, ClipboardOwner { break; case REPAINT: canvasPanel.repaint(); + // Refresh selection bounds after we're done with painting to ensure we have traced the + // component areas + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + if (ConfigurationManager.getInstance().readBoolean(IPlugInPort.SHOW_RULERS_KEY, true)) + scrollPane.setSelectionRectangle(plugInPort.getSelectionBounds()); + } + }); break; } // } diff --git a/diylc/diylc-swing/update.xml b/diylc/diylc-swing/update.xml index 07dd47a3..9c8abb80 100644 --- a/diylc/diylc-swing/update.xml +++ b/diylc/diylc-swing/update.xml @@ -1692,6 +1692,22 @@ https://github.com/bancika/diy-layout-creator/releases + + + + 3 + 39 + 0 + + 2017-04-20 20:00:00.000 CET + + + + NEW_FEATURE + Red ticks on both rulers track selection bounds, blue tick tracks cursor position + + + https://github.com/bancika/diy-layout-creator/releases \ No newline at end of file