vassalengine-svn Mailing List for VASSAL Engine (Page 3)
Brought to you by:
rodneykinney,
uckelman
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
(187) |
Nov
(124) |
Dec
(101) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(51) |
Feb
(91) |
Mar
(139) |
Apr
(84) |
May
(151) |
Jun
(125) |
Jul
(54) |
Aug
(49) |
Sep
(89) |
Oct
(111) |
Nov
(19) |
Dec
(189) |
2008 |
Jan
(150) |
Feb
(231) |
Mar
(218) |
Apr
(111) |
May
(199) |
Jun
(71) |
Jul
(178) |
Aug
(149) |
Sep
(68) |
Oct
(204) |
Nov
(219) |
Dec
(121) |
2009 |
Jan
(288) |
Feb
(192) |
Mar
(255) |
Apr
(99) |
May
(142) |
Jun
(111) |
Jul
(84) |
Aug
(102) |
Sep
(70) |
Oct
(152) |
Nov
(114) |
Dec
(53) |
2010 |
Jan
(71) |
Feb
(134) |
Mar
(50) |
Apr
(168) |
May
(123) |
Jun
(44) |
Jul
(99) |
Aug
(85) |
Sep
(126) |
Oct
(160) |
Nov
(85) |
Dec
(80) |
2011 |
Jan
(41) |
Feb
(14) |
Mar
(22) |
Apr
(5) |
May
(1) |
Jun
(5) |
Jul
(41) |
Aug
(64) |
Sep
(63) |
Oct
(112) |
Nov
(54) |
Dec
(3) |
2012 |
Jan
(33) |
Feb
(32) |
Mar
(25) |
Apr
(31) |
May
(49) |
Jun
(17) |
Jul
(46) |
Aug
(54) |
Sep
(79) |
Oct
(34) |
Nov
(9) |
Dec
(103) |
2013 |
Jan
(6) |
Feb
(22) |
Mar
(50) |
Apr
(62) |
May
(61) |
Jun
(43) |
Jul
(27) |
Aug
(7) |
Sep
(33) |
Oct
(40) |
Nov
(62) |
Dec
(13) |
2014 |
Jan
(33) |
Feb
(23) |
Mar
(13) |
Apr
|
May
|
Jun
(87) |
Jul
(25) |
Aug
(10) |
Sep
(7) |
Oct
|
Nov
|
Dec
(12) |
2015 |
Jan
|
Feb
|
Mar
(5) |
Apr
(2) |
May
(12) |
Jun
|
Jul
|
Aug
|
Sep
(4) |
Oct
(1) |
Nov
(1) |
Dec
|
2016 |
Jan
(3) |
Feb
|
Mar
(2) |
Apr
(14) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(6) |
Nov
(10) |
Dec
(3) |
2017 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(3) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(33) |
Nov
(5) |
Dec
|
2020 |
Jan
|
Feb
|
Mar
(43) |
Apr
(41) |
May
(70) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
From: <uck...@us...> - 2020-05-23 21:57:51
|
Revision: 9404 http://sourceforge.net/p/vassalengine/svn/9404 Author: uckelman Date: 2020-05-23 21:57:46 +0000 (Sat, 23 May 2020) Log Message: ----------- Merge branch 'master' of github.com:uckelman/vassal Modified Paths: -------------- VASSAL-src/trunk/.gitignore VASSAL-src/trunk/src/VASSAL/build/AbstractBuildable.java VASSAL-src/trunk/src/VASSAL/build/AutoConfigurable.java VASSAL-src/trunk/src/VASSAL/build/Builder.java VASSAL-src/trunk/src/VASSAL/build/GameModule.java VASSAL-src/trunk/src/VASSAL/build/module/DieManager.java VASSAL-src/trunk/src/VASSAL/build/module/GlobalOptions.java VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java VASSAL-src/trunk/src/VASSAL/build/module/Map.java VASSAL-src/trunk/src/VASSAL/build/module/MultiRoll.java VASSAL-src/trunk/src/VASSAL/build/module/ObscurableOptions.java VASSAL-src/trunk/src/VASSAL/build/module/PlayerRoster.java VASSAL-src/trunk/src/VASSAL/build/module/PrivateMap.java VASSAL-src/trunk/src/VASSAL/build/module/SpecialDiceButton.java VASSAL-src/trunk/src/VASSAL/build/module/ToolbarMenu.java VASSAL-src/trunk/src/VASSAL/build/module/WizardSupport.java VASSAL-src/trunk/src/VASSAL/build/module/dice/BonesDiceServer.java VASSAL-src/trunk/src/VASSAL/build/module/dice/DieServer.java VASSAL-src/trunk/src/VASSAL/build/module/dice/RollSet.java VASSAL-src/trunk/src/VASSAL/build/module/dice/ShadowDiceDieServer.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/FontStyleConfigurer.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/InstanceConfigurer.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/MedianCut.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SizeConfigurer.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/StringEnumConfigurer.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SwatchComboBox.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/Symbol.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SymbolConfigurer.java VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/TextBoxItem.java VASSAL-src/trunk/src/VASSAL/build/module/map/BoardPicker.java VASSAL-src/trunk/src/VASSAL/build/module/map/CompoundPieceCollection.java VASSAL-src/trunk/src/VASSAL/build/module/map/CounterDetailViewer.java VASSAL-src/trunk/src/VASSAL/build/module/map/MapShader.java VASSAL-src/trunk/src/VASSAL/build/module/map/MassKeyCommand.java VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java VASSAL-src/trunk/src/VASSAL/build/module/map/MovementReporter.java VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/BoardSlot.java VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/GridEditor.java VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/RegularGridNumbering.java VASSAL-src/trunk/src/VASSAL/build/module/noteswindow/SecretNotesController.java VASSAL-src/trunk/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java VASSAL-src/trunk/src/VASSAL/build/module/turn/ListTurnLevel.java VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnLevel.java VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java VASSAL-src/trunk/src/VASSAL/build/widget/TabWidget.java VASSAL-src/trunk/src/VASSAL/chat/Compressor.java VASSAL-src/trunk/src/VASSAL/chat/HybridClient.java VASSAL-src/trunk/src/VASSAL/chat/ServerAddressBook.java VASSAL-src/trunk/src/VASSAL/chat/ServerStatus.java VASSAL-src/trunk/src/VASSAL/chat/jabber/JabberClient.java VASSAL-src/trunk/src/VASSAL/chat/node/NodeClient.java VASSAL-src/trunk/src/VASSAL/chat/node/PlayerNode.java VASSAL-src/trunk/src/VASSAL/chat/node/Protocol.java VASSAL-src/trunk/src/VASSAL/chat/node/ServerNode.java VASSAL-src/trunk/src/VASSAL/chat/peer2peer/ClientTest.java VASSAL-src/trunk/src/VASSAL/chat/peer2peer/DirectPeerPool.java VASSAL-src/trunk/src/VASSAL/chat/peer2peer/EchoClient.java VASSAL-src/trunk/src/VASSAL/chat/peer2peer/IpWatch.java VASSAL-src/trunk/src/VASSAL/chat/peer2peer/P2PClient.java VASSAL-src/trunk/src/VASSAL/chat/peer2peer/TextClient.java VASSAL-src/trunk/src/VASSAL/command/ChangePiece.java VASSAL-src/trunk/src/VASSAL/command/CommandFilter.java VASSAL-src/trunk/src/VASSAL/command/ConditionalCommand.java VASSAL-src/trunk/src/VASSAL/configure/AutoConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/BooleanConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/ChooseComponentPathDialog.java VASSAL-src/trunk/src/VASSAL/configure/ConfigureTree.java VASSAL-src/trunk/src/VASSAL/configure/FileConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/FontConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/FormattedStringConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/KeyStrokeArrayConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/NamedKeyStrokeArrayConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/SavedGameUpdaterDialog.java VASSAL-src/trunk/src/VASSAL/configure/SimpleConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/StringArrayConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/StringEnumConfigurer.java VASSAL-src/trunk/src/VASSAL/configure/TableConfigurer.java VASSAL-src/trunk/src/VASSAL/counters/BasicPiece.java VASSAL-src/trunk/src/VASSAL/counters/Deck.java VASSAL-src/trunk/src/VASSAL/counters/Decorator.java VASSAL-src/trunk/src/VASSAL/counters/DragBuffer.java VASSAL-src/trunk/src/VASSAL/counters/Embellishment.java VASSAL-src/trunk/src/VASSAL/counters/Embellishment0.java VASSAL-src/trunk/src/VASSAL/counters/FreeRotator.java VASSAL-src/trunk/src/VASSAL/counters/GlobalCommand.java VASSAL-src/trunk/src/VASSAL/counters/Immobilized.java VASSAL-src/trunk/src/VASSAL/counters/Labeler.java VASSAL-src/trunk/src/VASSAL/counters/Marker.java VASSAL-src/trunk/src/VASSAL/counters/MassPieceDefiner.java VASSAL-src/trunk/src/VASSAL/counters/MassPieceLoader.java VASSAL-src/trunk/src/VASSAL/counters/MovementMarkable.java VASSAL-src/trunk/src/VASSAL/counters/MultiImagePicker.java VASSAL-src/trunk/src/VASSAL/counters/Obscurable.java VASSAL-src/trunk/src/VASSAL/counters/PlaceMarker.java VASSAL-src/trunk/src/VASSAL/counters/PropertiesPieceFilter.java VASSAL-src/trunk/src/VASSAL/counters/ReportState.java VASSAL-src/trunk/src/VASSAL/counters/RestrictCommands.java VASSAL-src/trunk/src/VASSAL/counters/Restricted.java VASSAL-src/trunk/src/VASSAL/counters/SendToLocation.java VASSAL-src/trunk/src/VASSAL/counters/SetGlobalProperty.java VASSAL-src/trunk/src/VASSAL/i18n/LocaleConfigurer.java VASSAL-src/trunk/src/VASSAL/i18n/TranslateVassalWindow.java VASSAL-src/trunk/src/VASSAL/i18n/TranslateWindow.java VASSAL-src/trunk/src/VASSAL/launch/BasicModule.java VASSAL-src/trunk/src/VASSAL/launch/ModuleManager.java VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java VASSAL-src/trunk/src/VASSAL/launch/TilingHandler.java VASSAL-src/trunk/src/VASSAL/script/ExpressionInterpreter.java VASSAL-src/trunk/src/VASSAL/script/JavaNameConfigurer.java VASSAL-src/trunk/src/VASSAL/script/expression/FunctionBuilder.java VASSAL-src/trunk/src/VASSAL/script/proxy/Map.java VASSAL-src/trunk/src/VASSAL/tools/ComponentPathBuilder.java VASSAL-src/trunk/src/VASSAL/tools/ImprovedAveragingScaleFilter.java VASSAL-src/trunk/src/VASSAL/tools/MTRandom.java VASSAL-src/trunk/src/VASSAL/tools/Obfuscator.java VASSAL-src/trunk/src/VASSAL/tools/RotateFilter.java VASSAL-src/trunk/src/VASSAL/tools/SavedGameUpdater.java VASSAL-src/trunk/src/VASSAL/tools/ScrollPane.java VASSAL-src/trunk/src/VASSAL/tools/SequenceEncoder.java VASSAL-src/trunk/src/VASSAL/tools/concurrent/listener/EventAccumulator.java VASSAL-src/trunk/src/VASSAL/tools/image/GeneralFilter.java VASSAL-src/trunk/src/VASSAL/tools/imageop/ScaleOpTiledBitmapImpl.java VASSAL-src/trunk/src/VASSAL/tools/imports/ImportAction.java VASSAL-src/trunk/src/VASSAL/tools/imports/adc2/ADC2Module.java VASSAL-src/trunk/src/VASSAL/tools/imports/adc2/MapBoard.java VASSAL-src/trunk/src/VASSAL/tools/io/CompositeInputStream.java VASSAL-src/trunk/src/VASSAL/tools/io/Tailer.java VASSAL-src/trunk/src/VASSAL/tools/logging/LoggedOutputStream.java VASSAL-src/trunk/src/VASSAL/tools/swing/EDTExecutorService.java Modified: VASSAL-src/trunk/.gitignore =================================================================== --- VASSAL-src/trunk/.gitignore 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/.gitignore 2020-05-23 21:57:46 UTC (rev 9404) @@ -3,3 +3,7 @@ javadoc/ lib/Vengine.jar tmp/ + +# IntelliJ +*.iml +.idea/ Modified: VASSAL-src/trunk/src/VASSAL/build/AbstractBuildable.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/AbstractBuildable.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/AbstractBuildable.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -167,10 +167,10 @@ public org.w3c.dom.Element getBuildElement(org.w3c.dom.Document doc) { Element el = doc.createElement(getClass().getName()); String[] names = getAttributeNames(); - for (int i = 0; i < names.length; ++i) { - String val = getAttributeValueString(names[i]); + for (String name : names) { + String val = getAttributeValueString(name); if (val != null) { - el.setAttribute(names[i], val); + el.setAttribute(name, val); } } Modified: VASSAL-src/trunk/src/VASSAL/build/AutoConfigurable.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/AutoConfigurable.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/AutoConfigurable.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -88,10 +88,10 @@ AutoConfigurable parent) { Element el = doc.createElement(parent.getClass().getName()); String[] names = parent.getAttributeNames(); - for (int i = 0; i < names.length; ++i) { - String val = parent.getAttributeValueString(names[i]); + for (String name : names) { + String val = parent.getAttributeValueString(name); if (val != null) { - el.setAttribute(names[i], val); + el.setAttribute(name, val); } } return el; Modified: VASSAL-src/trunk/src/VASSAL/build/Builder.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/Builder.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/Builder.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -246,7 +246,7 @@ } } - public static void main(String args[]) { + public static void main(String[] args) { Document doc = createNewDocument(); Element e = doc.createElement("test"); //$NON-NLS-1$ Element e1 = doc.createElement("sub1"); //$NON-NLS-1$ Modified: VASSAL-src/trunk/src/VASSAL/build/GameModule.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/GameModule.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/GameModule.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -488,9 +488,9 @@ * @return */ public GamePiece createPiece(String type) { - for (int i = 0; i < commandEncoders.length; ++i) { - if (commandEncoders[i] instanceof BasicCommandEncoder) { - GamePiece p = ((BasicCommandEncoder) commandEncoders[i]).createPiece(type); + for (CommandEncoder commandEncoder : commandEncoders) { + if (commandEncoder instanceof BasicCommandEncoder) { + GamePiece p = ((BasicCommandEncoder) commandEncoder).createPiece(type); if (p != null) { return p; } @@ -500,9 +500,9 @@ } public GamePiece createPiece(String type, GamePiece inner) { - for (int i = 0; i < commandEncoders.length; ++i) { - if (commandEncoders[i] instanceof BasicCommandEncoder) { - GamePiece p = ((BasicCommandEncoder) commandEncoders[i]).createDecorator(type, inner); + for (CommandEncoder commandEncoder : commandEncoders) { + if (commandEncoder instanceof BasicCommandEncoder) { + GamePiece p = ((BasicCommandEncoder) commandEncoder).createDecorator(type, inner); if (p != null) { return p; } Modified: VASSAL-src/trunk/src/VASSAL/build/module/DieManager.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/DieManager.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/DieManager.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -173,7 +173,7 @@ return null; } else { - String s[] = new String[servers.size()]; + String[] s = new String[servers.size()]; int i = 0; for (DieServer d : servers.values()) { s[i++] = d.getDescription(); Modified: VASSAL-src/trunk/src/VASSAL/build/module/GlobalOptions.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/GlobalOptions.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/GlobalOptions.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -122,7 +122,7 @@ final IntConfigurer initHeapConf = new IntConfigurer( INITIAL_HEAP, Resources.getString("GlobalOptions.initial_heap"), //$NON-NLS-1$ - Integer.valueOf(256) + 256 ); prefs.addOption(initHeapConf); @@ -130,7 +130,7 @@ final IntConfigurer maxHeapConf = new IntConfigurer( MAXIMUM_HEAP, Resources.getString("GlobalOptions.maximum_heap"), //$NON-NLS-1$ - Integer.valueOf(512) + 512 ); prefs.addOption(maxHeapConf); Modified: VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -452,8 +452,7 @@ } final ArrayList<String> path = new ArrayList<String>(); - for (int i = 0; i < groupBy.length; i++) - path.add(groupBy[i]); + for (String value : groupBy) path.add(value); results = new CounterInventory( new Counter(this.getConfigureName()), path, sortPieces); @@ -467,9 +466,9 @@ final GamePiece p = pi.nextPiece(); if (p instanceof Decorator || p instanceof BasicPiece) { - for (int i = 0; i < groupBy.length; i++) { - if (groupBy[i].length() > 0) { - String prop = (String) p.getProperty(groupBy[i]); + for (String s : groupBy) { + if (s.length() > 0) { + String prop = (String) p.getProperty(s); if (prop != null) groups.add(prop); } @@ -815,8 +814,8 @@ protected boolean enabledForPlayersSide() { if (sides == null || sides.length == 0) return true; - for (int i = 0; i < sides.length; i++) { - if (sides[i].equalsIgnoreCase(PlayerRoster.getMySide())) + for (String side : sides) { + if (side.equalsIgnoreCase(PlayerRoster.getMySide())) return true; } return false; @@ -862,8 +861,8 @@ final TreePath[] tp = tree.getSelectionPaths(); // set to not get duplicates HashSet<GamePiece> pieces = new HashSet<GamePiece>(); - for (int i = 0; i < tp.length; i++) { - CounterNode node = (CounterNode) tp[i].getLastPathComponent(); + for (TreePath treePath : tp) { + CounterNode node = (CounterNode) treePath.getLastPathComponent(); if (node.isLeaf()) { pieces.add(node.getCounter().getPiece()); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/Map.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -1566,17 +1566,17 @@ g2d.setComposite( AlphaComposite.getInstance(AlphaComposite.SRC_OVER, pieceOpacity)); final GamePiece[] stack = pieces.getPieces(); - for (int i = 0; i < stack.length; ++i) { - final Point pt = mapToDrawing(stack[i].getPosition(), os_scale); - if (stack[i].getClass() == Stack.class) { + for (GamePiece gamePiece : stack) { + final Point pt = mapToDrawing(gamePiece.getPosition(), os_scale); + if (gamePiece.getClass() == Stack.class) { getStackMetrics().draw( - (Stack) stack[i], pt, g, this, dzoom, visibleRect + (Stack) gamePiece, pt, g, this, dzoom, visibleRect ); } else { - stack[i].draw(g, pt.x, pt.y, c, dzoom); - if (Boolean.TRUE.equals(stack[i].getProperty(Properties.SELECTED))) { - highlighter.draw(stack[i], g, pt.x, pt.y, c, dzoom); + gamePiece.draw(g, pt.x, pt.y, c, dzoom); + if (Boolean.TRUE.equals(gamePiece.getProperty(Properties.SELECTED))) { + highlighter.draw(gamePiece, g, pt.x, pt.y, c, dzoom); } } /* @@ -1602,11 +1602,11 @@ Composite oldComposite = g2d.getComposite(); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, pieceOpacity)); GamePiece[] stack = pieces.getPieces(); - for (int i = 0; i < stack.length; ++i) { - Point pt = mapToDrawing(stack[i].getPosition(), os_scale); - stack[i].draw(g, pt.x + xOffset, pt.y + yOffset, theMap, getZoom()); - if (Boolean.TRUE.equals(stack[i].getProperty(Properties.SELECTED))) { - highlighter.draw(stack[i], g, pt.x - xOffset, pt.y - yOffset, theMap, getZoom()); + for (GamePiece gamePiece : stack) { + Point pt = mapToDrawing(gamePiece.getPosition(), os_scale); + gamePiece.draw(g, pt.x + xOffset, pt.y + yOffset, theMap, getZoom()); + if (Boolean.TRUE.equals(gamePiece.getProperty(Properties.SELECTED))) { + highlighter.draw(gamePiece, g, pt.x - xOffset, pt.y - yOffset, theMap, getZoom()); } } g2d.setComposite(oldComposite); Modified: VASSAL-src/trunk/src/VASSAL/build/module/MultiRoll.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/MultiRoll.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/MultiRoll.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -290,8 +290,8 @@ menuItem.addActionListener(this); popup.add(menuItem); - for (int i = 0; i < aBook.length; i++) { - menuItem = new JMenuItem(aBook[i]); + for (String s : aBook) { + menuItem = new JMenuItem(s); menuItem.addActionListener(this); popup.add(menuItem); } @@ -432,8 +432,8 @@ col3.setEnabled(false); // Number of Dice - int allowableDice[] = dieManager.getServer().getnDiceList(); - String diceData[] = new String[allowableDice.length]; + int[] allowableDice = dieManager.getServer().getnDiceList(); + String[] diceData = new String[allowableDice.length]; int defaultNDIdx = 0; for (int i = 0; i < diceData.length; i++) { diceData[i] = allowableDice[i] + ""; @@ -446,7 +446,7 @@ col4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox) e.getSource(); - rolls[myRow].setNumDice(Integer.valueOf((String) cb.getSelectedItem())); + rolls[myRow].setNumDice(Integer.parseInt((String) cb.getSelectedItem())); } }); col4.setEnabled(false); @@ -453,7 +453,7 @@ // Number of Sides int[] allowableSides = dieManager.getServer().getnSideList(); - String sideData[] = new String[allowableSides.length]; + String[] sideData = new String[allowableSides.length]; int defaultNSIdx = 0; for (int i = 0; i < sideData.length; i++) { sideData[i] = allowableSides[i] + ""; @@ -466,7 +466,7 @@ col5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox) e.getSource(); - rolls[myRow].setNumSides(Integer.valueOf((String) cb.getSelectedItem())); + rolls[myRow].setNumSides(Integer.parseInt((String) cb.getSelectedItem())); } }); col5.setEnabled(false); @@ -479,7 +479,7 @@ col6.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent e) { try { - rolls[myRow].setPlus(Integer.valueOf(col3.getText())); + rolls[myRow].setPlus(Integer.parseInt(col3.getText())); } catch (NumberFormatException ev) { // TODO use IntConfigurer for col3 Modified: VASSAL-src/trunk/src/VASSAL/build/module/ObscurableOptions.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/ObscurableOptions.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/ObscurableOptions.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -180,7 +180,7 @@ se.append(""); } else { - se.append(override.booleanValue()); + se.append(override); } se.append(allowed.size()); for (String who : allowed) { Modified: VASSAL-src/trunk/src/VASSAL/build/module/PlayerRoster.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/PlayerRoster.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/PlayerRoster.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -636,8 +636,8 @@ untranslatedSides = sides.toArray(new String[sides.size()]); String[] s = StringArrayConfigurer.stringToArray((String) value); sides = new ArrayList<String>(s.length); - for (int i = 0; i < s.length; i++) { - sides.add(s[i]); + for (String item : s) { + sides.add(item); } } else { Modified: VASSAL-src/trunk/src/VASSAL/build/module/PrivateMap.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/PrivateMap.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/PrivateMap.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -216,8 +216,8 @@ * @see PlayerRoster */ public boolean isAccessibleTo(String playerSide) { - for (int i = 0; i < owners.length; ++i) { - if (owners[i].equals(playerSide)) { + for (String owner : owners) { + if (owner.equals(playerSide)) { return true; } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/SpecialDiceButton.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/SpecialDiceButton.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/SpecialDiceButton.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -517,8 +517,8 @@ return ""; //$NON-NLS-1$ } final SequenceEncoder se = new SequenceEncoder(','); - for (int i = 0; i < ia.length; ++i) { - se.append(String.valueOf(ia[i])); + for (int value : ia) { + se.append(String.valueOf(value)); } return se.getValue(); } @@ -657,10 +657,10 @@ g.fillRect(x, y, width, height); } int offset = 0; - for (int i = 0; i < icons.length; ++i) { - if (icons[i] != null) { - icons[i].paintIcon(c, g, x + offset, y); - offset += icons[i].getIconWidth(); + for (Icon icon : icons) { + if (icon != null) { + icon.paintIcon(c, g, x + offset, y); + offset += icon.getIconWidth(); } } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/ToolbarMenu.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/ToolbarMenu.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/ToolbarMenu.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -225,8 +225,8 @@ toolbarMenu.addContainerListener(this); JMenu subMenu = new JMenu(b.getText()); Component[] items = toolbarMenu.getComponents(); - for (int i = 0; i < items.length; i++) { - final JMenuItem otherItem = (JMenuItem) items[i]; + for (Component component : items) { + final JMenuItem otherItem = (JMenuItem) component; JMenuItem myItem = new JMenuItem(otherItem.getText(), otherItem.getIcon()); myItem.addActionListener(new ActionListener() { Modified: VASSAL-src/trunk/src/VASSAL/build/module/WizardSupport.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/WizardSupport.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/WizardSupport.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -329,7 +329,7 @@ show.setSelected(wizardConf.booleanValue()); show.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - wizardConf.setValue(Boolean.valueOf(show.isSelected())); + wizardConf.setValue(show.isSelected()); } }); box.add(show); Modified: VASSAL-src/trunk/src/VASSAL/build/module/dice/BonesDiceServer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/dice/BonesDiceServer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/dice/BonesDiceServer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -54,14 +54,14 @@ StringBuilder query = new StringBuilder("req="); // format is "{{ xdy + n }}" - for (int i = 0; i < rolls.length; ++i) { + for (DieRoll roll : rolls) { query.append("{{") - .append(rolls[i].getNumDice()) - .append("D") - .append(rolls[i].getNumSides()); + .append(roll.getNumDice()) + .append("D") + .append(roll.getNumSides()); - if (rolls[i].getPlus() != 0) { - query.append("+").append(rolls[i].getPlus()); + if (roll.getPlus() != 0) { + query.append("+").append(roll.getPlus()); } query.append("}}\n"); Modified: VASSAL-src/trunk/src/VASSAL/build/module/dice/DieServer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/dice/DieServer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/dice/DieServer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -154,8 +154,7 @@ */ public void doInbuiltRoll(RollSet mroll) { DieRoll[] rolls = mroll.getDieRolls(); - for (int i = 0; i < rolls.length; i++) { - DieRoll roll = rolls[i]; + for (DieRoll roll : rolls) { String desc = roll.getDescription(); int nSides = roll.getNumSides(); int nDice = roll.getNumDice(); @@ -232,8 +231,7 @@ public void reportResult(RollSet mroll, FormattedString format) { DieRoll[] rolls = mroll.getDieRolls(); - for (int i = 0; i < rolls.length; i++) { - DieRoll roll = rolls[i]; + for (DieRoll roll : rolls) { int nDice = roll.getNumDice(); boolean reportTotal = roll.isReportTotal(); @@ -255,7 +253,7 @@ if (reportTotal) val += total; - val = formatResult(rolls[i].getDescription(), val, format); + val = formatResult(roll.getDescription(), val, format); GameModule.getGameModule().getChatter().send(val); } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/dice/RollSet.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/dice/RollSet.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/dice/RollSet.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -27,8 +27,8 @@ public int getMaxDescLength() { int len = 0; - for (int i = 0; i < dieRolls.length; i++) { - len = Math.max(len, dieRolls[i].getDescription().length()); + for (DieRoll dieRoll : dieRolls) { + len = Math.max(len, dieRoll.getDescription().length()); } return len; } Modified: VASSAL-src/trunk/src/VASSAL/build/module/dice/ShadowDiceDieServer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/dice/ShadowDiceDieServer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/dice/ShadowDiceDieServer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -52,15 +52,14 @@ int mLen = toss.getMaxDescLength(); DieRoll[] rolls = toss.getDieRolls(); - for (int i = 0; i < rolls.length; i++) { - s += hexify(rolls[i].getDescription()); - for (int j = 0; j < mLen - rolls[i].getDescription().length(); j++) { + for (DieRoll roll : rolls) { + s += hexify(roll.getDescription()); + for (int j = 0; j < mLen - roll.getDescription().length(); j++) { s += ' '; } s += ' ' + HASH; - int nd = rolls[i].getNumDice(); - int ns = rolls[i].getNumSides(); -// int p = rolls[i].getPlus(); + int nd = roll.getNumDice(); + int ns = roll.getNumSides(); for (int j = 0; j < nd; j++) { s += LSQUARE + "1d" + ns + RSQUARE; } Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/FontStyleConfigurer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/FontStyleConfigurer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/FontStyleConfigurer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -91,8 +91,8 @@ fonts = new JComboBox(); String[] s = FontManager.getFontManager().getFontNames(); - for (int i = 0; i < s.length; i++) { - fonts.addItem(s[i]); + for (String item : s) { + fonts.addItem(item); } fonts.setSelectedItem(value == null ? "Default" : ((FontStyle) value).getConfigureName()); //$NON-NLS-1$ fontPanel.add(fonts); Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/InstanceConfigurer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/InstanceConfigurer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/InstanceConfigurer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -133,21 +133,21 @@ GamePieceImage defn) { ArrayList<ItemInstance> props = new ArrayList<ItemInstance>(); String[] p = StringArrayConfigurer.stringToArray(s); - for (int i = 0; i < p.length; i++) { - if (p[i].startsWith(SymbolItem.TYPE)) { - props.add(new SymbolItemInstance(p[i], defn)); + for (String item : p) { + if (item.startsWith(SymbolItem.TYPE)) { + props.add(new SymbolItemInstance(item, defn)); } - else if (p[i].startsWith(TextBoxItem.TYPE)) { - props.add(new TextBoxItemInstance(p[i], defn)); + else if (item.startsWith(TextBoxItem.TYPE)) { + props.add(new TextBoxItemInstance(item, defn)); } - else if (p[i].startsWith(TextItem.TYPE)) { - props.add(new TextItemInstance(p[i], defn)); + else if (item.startsWith(TextItem.TYPE)) { + props.add(new TextItemInstance(item, defn)); } - else if (p[i].startsWith(ShapeItem.TYPE)) { - props.add(new ShapeItemInstance(p[i], defn)); + else if (item.startsWith(ShapeItem.TYPE)) { + props.add(new ShapeItemInstance(item, defn)); } - else if (p[i].startsWith(ImageItem.TYPE)) { - props.add(new ImageItemInstance(p[i], defn)); + else if (item.startsWith(ImageItem.TYPE)) { + props.add(new ImageItemInstance(item, defn)); } } return props; Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/MedianCut.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/MedianCut.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/MedianCut.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -323,7 +323,7 @@ } - void quickSort(int a[], int lo0, int hi0) { + void quickSort(int[] a, int lo0, int hi0) { // Based on the QuickSort method by James Gosling from Sun's SortDemo applet int lo = lo0; Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SizeConfigurer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SizeConfigurer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SizeConfigurer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -49,8 +49,8 @@ public SizeComboBox() { String[] s = Symbol.NatoUnitSymbolSet.getSymbolSizes(); - for (int i = 0; i < s.length; ++i) { - addItem(s[i]); + for (String item : s) { + addItem(item); } SizeRenderer renderer = new SizeRenderer(); setRenderer(renderer); Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/StringEnumConfigurer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/StringEnumConfigurer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/StringEnumConfigurer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -84,8 +84,8 @@ } public boolean isValidValue(Object o) { - for (int i = 0; i < validValues.length; ++i) { - if (validValues[i].equals(o)) { + for (String validValue : validValues) { + if (validValue.equals(o)) { return true; } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SwatchComboBox.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SwatchComboBox.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SwatchComboBox.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -40,8 +40,8 @@ public SwatchComboBox() { String[] s = ColorManager.getColorManager().getColorNames(); - for (int i = 0; i < s.length; ++i) { - addItem(s[i]); + for (String value : s) { + addItem(value); } SwatchRenderer renderer = new SwatchRenderer(); setRenderer(renderer); Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/Symbol.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/Symbol.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/Symbol.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -177,9 +177,9 @@ } protected static SizeOption findSize(String name) { - for (int i = 0; i < SIZES.length; i++) { - if (name.equals(SIZES[i].getName())) { - return SIZES[i]; + for (SizeOption size : SIZES) { + if (name.equals(size.getName())) { + return size; } } return SIZES[0]; Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SymbolConfigurer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SymbolConfigurer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/SymbolConfigurer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -53,8 +53,8 @@ public SymbolComboBox() { String[] s = Symbol.NatoUnitSymbolSet.getSymbolNames(); - for (int i = 0; i < s.length; ++i) { - addItem(s[i]); + for (String item : s) { + addItem(item); } SymbolRenderer renderer = new SymbolRenderer(); setRenderer(renderer); Modified: VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/TextBoxItem.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/TextBoxItem.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/gamepieceimage/TextBoxItem.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -73,7 +73,7 @@ } public Class<?>[] getAttributeTypes() { - final Class<?> c[] = ArrayUtils.insert( + final Class<?>[] c = ArrayUtils.insert( super.getAttributeTypes(), 2, new Class<?>[] { Integer.class, Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/BoardPicker.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/BoardPicker.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/BoardPicker.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -212,7 +212,7 @@ } try { - slotScale = Double.valueOf(e.getAttribute(SCALE)); + slotScale = Double.parseDouble(e.getAttribute(SCALE)); } catch (NumberFormatException ex) { // Use default values if attribute doesn't parse. Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/CompoundPieceCollection.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/CompoundPieceCollection.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/CompoundPieceCollection.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -70,8 +70,8 @@ } public void clear() { - for (int i=0;i<layers.length;++i) { - layers[i].clear(); + for (SimplePieceCollection layer : layers) { + layer.clear(); } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/CounterDetailViewer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/CounterDetailViewer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/CounterDetailViewer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -298,10 +298,9 @@ Object owner = null; int borderOffset = borderWidth; double graphicsZoom = graphicsZoomLevel; - for (int i = 0; i < pieces.size(); i++) { + for (GamePiece piece : pieces) { // Draw the next piece // pt is the location of the left edge of the piece - GamePiece piece = pieces.get(i); Rectangle pieceBounds = getBounds(piece); if (unrotatePieces) piece.setProperty(Properties.USE_UNROTATED_SHAPE, Boolean.TRUE); g.setClip(dbounds.x - 3, dbounds.y - 3, dbounds.width + 5, dbounds.height + 5); @@ -552,8 +551,8 @@ // Include pieces on named layers only else if (displayWhat.equals(INC_LAYERS)) { - for (int i = 0; i < displayLayers.length; i++) { - if (layerName.equals(displayLayers[i])) { + for (String displayLayer : displayLayers) { + if (layerName.equals(displayLayer)) { return true; } } @@ -561,8 +560,8 @@ // Exclude pieces from named layers. else if (displayWhat.equals(EXC_LAYERS)) { - for (int i = 0; i < displayLayers.length; i++) { - if (layerName.equals(displayLayers[i])) { + for (String displayLayer : displayLayers) { + if (layerName.equals(displayLayer)) { return false; } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/MapShader.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/MapShader.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/MapShader.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -681,7 +681,7 @@ if (value instanceof String) { value = Boolean.valueOf((String)value); } - scaleImage = ((Boolean)value).booleanValue(); + scaleImage = (Boolean) value; } else if (BORDER.equals(key)) { if (value instanceof String) { Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/MassKeyCommand.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/MassKeyCommand.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/MassKeyCommand.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -479,8 +479,8 @@ else { filter = new PieceFilter() { public boolean accept(GamePiece piece) { - for (int j = 0; j < names.length; ++j) { - if (Decorator.getInnermost(piece).getName().equals(names[j])) { + for (String s : names) { + if (Decorator.getInnermost(piece).getName().equals(s)) { return true; } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -103,7 +103,7 @@ */ public static JPopupMenu createPopup(GamePiece target, boolean global) { JPopupMenu popup = new JPopupMenu(); - KeyCommand c[] = (KeyCommand[]) target.getProperty(Properties.KEY_COMMANDS); + KeyCommand[] c = (KeyCommand[]) target.getProperty(Properties.KEY_COMMANDS); if (c != null) { ArrayList<JMenuItem> commands = new ArrayList<JMenuItem>(); ArrayList<KeyStroke> strokes = new ArrayList<KeyStroke>(); @@ -115,14 +115,14 @@ HashMap<String,ArrayList<JMenuItem>> commandNames = new HashMap<String,ArrayList<JMenuItem>>(); - for (int i = 0; i < c.length; ++i) { - c[i].setGlobal(global); - KeyStroke stroke = c[i].getKeyStroke(); + for (KeyCommand keyCommand : c) { + keyCommand.setGlobal(global); + KeyStroke stroke = keyCommand.getKeyStroke(); JMenuItem item = null; - if (c[i] instanceof KeyCommandSubMenu) { - JMenu subMenu = new JMenu(c[i].getLocalizedMenuText()); + if (keyCommand instanceof KeyCommandSubMenu) { + JMenu subMenu = new JMenu(keyCommand.getLocalizedMenuText()); subMenu.setFont(POPUP_MENU_FONT); - subMenus.put((KeyCommandSubMenu) c[i], subMenu); + subMenus.put((KeyCommandSubMenu) keyCommand, subMenu); item = subMenu; commands.add(item); strokes.add(KeyStroke.getKeyStroke('\0')); @@ -135,11 +135,11 @@ String commandName = (String) command.getAction().getValue(Action.NAME); if (commandName == null || - commandName.length() < c[i].getName().length()) { - item = new JMenuItem(c[i].getLocalizedMenuText()); - item.addActionListener(c[i]); + commandName.length() < keyCommand.getName().length()) { + item = new JMenuItem(keyCommand.getLocalizedMenuText()); + item.addActionListener(keyCommand); item.setFont(POPUP_MENU_FONT); - item.setEnabled(c[i].isEnabled()); + item.setEnabled(keyCommand.isEnabled()); commands.set(strokes.indexOf(stroke), item); } } @@ -146,20 +146,20 @@ } else { strokes.add(stroke != null ? stroke : KeyStroke.getKeyStroke('\0')); - item = new JMenuItem(c[i].getLocalizedMenuText()); - item.addActionListener(c[i]); + item = new JMenuItem(keyCommand.getLocalizedMenuText()); + item.addActionListener(keyCommand); item.setFont(POPUP_MENU_FONT); - item.setEnabled(c[i].isEnabled()); + item.setEnabled(keyCommand.isEnabled()); commands.add(item); } } - if (c[i].getName() != null && - c[i].getName().length() > 0 && - item != null) { - ArrayList<JMenuItem> l = commandNames.get(c[i].getName()); + if (keyCommand.getName() != null && + keyCommand.getName().length() > 0 && + item != null) { + ArrayList<JMenuItem> l = commandNames.get(keyCommand.getName()); if (l == null) { l = new ArrayList<JMenuItem>(); - commandNames.put(c[i].getName(), l); + commandNames.put(keyCommand.getName(), l); } l.add(item); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/MovementReporter.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/MovementReporter.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/MovementReporter.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -84,8 +84,8 @@ } } Command[] sub = c.getSubCommands(); - for (int i = 0; i < sub.length; i++) { - extractMoveCommands(sub[i]); + for (Command command : sub) { + extractMoveCommands(command); } } @@ -381,8 +381,7 @@ public String getPieceName() { final StringBuilder names = new StringBuilder(); boolean first = true; - for (Iterator<GamePiece> i = pieces.iterator(); i.hasNext(); ) { - GamePiece piece = i.next(); + for (GamePiece piece : pieces) { if (piece instanceof Stack) { for (Iterator<GamePiece> j = ((Stack) piece).getPiecesIterator(); j.hasNext(); ) { GamePiece p = j.next(); Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -347,8 +347,8 @@ public void actionPerformed(ActionEvent e) { final GamePiece[] p = map.getAllPieces(); final Command c = new NullCommand(); - for (int i = 0; i < p.length; ++i) { - c.append(markMoved(p[i], false)); + for (GamePiece gamePiece : p) { + c.append(markMoved(gamePiece, false)); } GameModule.getGameModule().sendAndLog(c); map.repaint(); @@ -609,9 +609,9 @@ // into an expanded Stack and the merge order must be reversed to // maintain the order of the merging pieces. if (mergeWith instanceof Stack) { - for (int i = 0; i < draggedPieces.size(); ++i) { - comm = comm.append(movedPiece(draggedPieces.get(i), mergeWith.getPosition())); - comm = comm.append(map.getStackMetrics().merge(mergeWith, draggedPieces.get(i))); + for (GamePiece draggedPiece : draggedPieces) { + comm = comm.append(movedPiece(draggedPiece, mergeWith.getPosition())); + comm = comm.append(map.getStackMetrics().merge(mergeWith, draggedPiece)); } } else { Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -389,9 +389,9 @@ protected Stack initializeContents() { Stack s = createStack(); Configurable[] c = getConfigureComponents(); - for (int i = 0; i < c.length; ++i) { - if (c[i] instanceof PieceSlot) { - PieceSlot slot = (PieceSlot) c[i]; + for (Configurable configurable : c) { + if (configurable instanceof PieceSlot) { + PieceSlot slot = (PieceSlot) configurable; GamePiece p = slot.getPiece(); p = PieceCloner.getInstance().clonePiece(p); GameModule.getGameModule().getGameState().addPiece(p); Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/BoardSlot.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/BoardSlot.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/BoardSlot.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -61,7 +61,7 @@ boards = new JComboBox(); boards.addItem(prompt); - final String lbn[] = picker.getAllowableLocalizedBoardNames(); + final String[] lbn = picker.getAllowableLocalizedBoardNames(); for (String s : lbn) { boards.addItem(s); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/GridEditor.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/GridEditor.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/GridEditor.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -175,7 +175,7 @@ numberingButton = new JButton(NUMBERING); numberingButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - ((RegularGridNumbering) grid.getGridNumbering()).setAttribute(RegularGridNumbering.VISIBLE, Boolean.valueOf(! grid.getGridNumbering().isVisible())); + ((RegularGridNumbering) grid.getGridNumbering()).setAttribute(RegularGridNumbering.VISIBLE, !grid.getGridNumbering().isVisible()); repaint(); } }); @@ -210,7 +210,7 @@ setMode = false; grid.setVisible(saveGridVisible); if (grid.getGridNumbering() != null && saveNumberingVisible) { - ((RegularGridNumbering) grid.getGridNumbering()).setAttribute(RegularGridNumbering.VISIBLE, Boolean.valueOf(saveNumberingVisible)); + ((RegularGridNumbering) grid.getGridNumbering()).setAttribute(RegularGridNumbering.VISIBLE, saveNumberingVisible); } repaint(); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -58,13 +58,13 @@ } protected void reset() { - MouseListener ml[] = getMouseListeners(); + MouseListener[] ml = getMouseListeners(); // get rid of all the mouse listeners floating around for (MouseListener i: ml) removeMouseListener(i); - MouseMotionListener mml[] = getMouseMotionListeners(); + MouseMotionListener[] mml = getMouseMotionListeners(); for (MouseMotionListener i: mml) removeMouseMotionListener(i); Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/RegularGridNumbering.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/RegularGridNumbering.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/RegularGridNumbering.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -369,8 +369,8 @@ public Configurer getConfigurer() { AutoConfigurer c = (AutoConfigurer) super.getConfigurer(); String[] s = getAttributeNames(); - for (int i = 0; i < s.length; ++i) { - c.getConfigurer(s[i]).addPropertyChangeListener(new PropertyChangeListener() { + for (String value : s) { + c.getConfigurer(value).addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { visualizer.repaint(); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/noteswindow/SecretNotesController.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/noteswindow/SecretNotesController.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/noteswindow/SecretNotesController.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -350,7 +350,7 @@ case COL_NAME: return note.getName(); case COL_REVEALED: - return Boolean.valueOf(!note.isHidden()); + return !note.isHidden(); default: return null; } Modified: VASSAL-src/trunk/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/properties/PropertyChangerConfigurer.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -153,7 +153,7 @@ protected void updateValue() { PropertyChanger p; - switch (descriptionToCode.get(typeConfig.getValueString()).charValue()) { + switch (descriptionToCode.get(typeConfig.getValueString())) { case PROMPT_CODE: p = new PropertyPrompt(constraints, promptConfig.getValueString()); break; @@ -177,7 +177,7 @@ PropertyChanger propChanger = getPropertyChanger(); SequenceEncoder se = new SequenceEncoder(','); if (propChanger != null) { - switch (typeToCode.get(propChanger.getClass()).charValue()) { + switch (typeToCode.get(propChanger.getClass())) { case PROMPT_CODE: se.append(PROMPT_CODE) .append(((PropertyPrompt) propChanger).getPrompt()); Modified: VASSAL-src/trunk/src/VASSAL/build/module/turn/ListTurnLevel.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/turn/ListTurnLevel.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/turn/ListTurnLevel.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -101,7 +101,7 @@ se.append(current); se.append(currentSubLevel); se.append(first); - String s[] = new String[active.length]; + String[] s = new String[active.length]; for (int i = 0; i < s.length; i++) { s[i] = active[i] + ""; //$NON-NLS-1$ } @@ -151,9 +151,9 @@ */ protected String getLongestValueName() { String s = "X"; //$NON-NLS-1$ - for (int i = 0; i < list.length; i++) { - if (list[i].length() > s.length()) { - s = list[i]; + for (String value : list) { + if (value.length() > s.length()) { + s = value; } } return s; @@ -211,8 +211,8 @@ /* A list turn level is active only if at least one item is active */ protected boolean isActive() { - for (int i = 0; i < active.length; i++) { - if (active[i]) { + for (boolean b : active) { + if (b) { return true; } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnLevel.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnLevel.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnLevel.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -215,7 +215,7 @@ p.add(Box.createRigidArea(FILLER)); if (getTurnLevelCount() > 1) { - String s[] = new String[getTurnLevelCount()]; + String[] s = new String[getTurnLevelCount()]; for (int i = 0; i < s.length; i++) { s[i] = getTurnLevel(i).getConfigureName(); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -364,7 +364,7 @@ protected void setDocked(boolean dock) { final GameModule g = GameModule.getGameModule(); - g.getPrefs().setValue(DOCKED, Boolean.valueOf(dock)); + g.getPrefs().setValue(DOCKED, dock); launch.setVisible( !dock && ( getAttributeValueString(BUTTON_TEXT).length() > 0 || @@ -459,7 +459,7 @@ public static class TurnFormatConfig implements TranslatableConfigurerFactory { public Configurer getConfigurer(AutoConfigurable c, String key, String name) { TurnTracker t = (TurnTracker) c; - String s[] = new String[t.getLevelCount()]; + String[] s = new String[t.getLevelCount()]; for (int i = 0; i < s.length; i++) { s[i] = LEVEL+(i+1); } @@ -1096,7 +1096,7 @@ p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); p.setBorder(BorderFactory.createLineBorder(Color.black)); - String s[] = new String[getTurnLevelCount()]; + String[] s = new String[getTurnLevelCount()]; for (int i = 0; i < s.length; i++) { s[i] = getTurnLevel(i).getConfigureName(); } Modified: VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -298,7 +298,7 @@ if (kind instanceof HTML.Tag && element.getName().equals("img")) { final String imageName = (String) element.getAttributes().getAttribute(HTML.Attribute.SRC); - if (imageName.indexOf("/") < 0) { + if (!imageName.contains("/")) { return new ImageComponentView(element); } } Modified: VASSAL-src/trunk/src/VASSAL/build/widget/TabWidget.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/widget/TabWidget.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/build/widget/TabWidget.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -103,8 +103,7 @@ if (tab == null) { rebuild(); tab = new JTabbedPane(); - for (int i = 0; i < widgets.size(); ++i) { - final Widget w = widgets.get(i); + for (final Widget w : widgets) { w.addPropertyChangeListener(this); tab.addTab(w.getConfigureName(), new JPanel()); } Modified: VASSAL-src/trunk/src/VASSAL/chat/Compressor.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/chat/Compressor.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/chat/Compressor.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -70,7 +70,7 @@ } } - public static void main(String args[]) throws Exception { + public static void main(String[] args) throws Exception { if (args.length == 0) { final Frame f = new Frame(); final TextField tf = new TextField(60); Modified: VASSAL-src/trunk/src/VASSAL/chat/HybridClient.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/chat/HybridClient.java 2020-05-23 21:57:05 UTC (rev 9403) +++ VASSAL-src/trunk/src/VASSAL/chat/HybridClient.java 2020-05-23 21:57:46 UTC (rev 9404) @@ -121,8 +121,8 @@ newDelegate.setUserInfo(oldDelegate.getUserInfo()); } PropertyChangeListener[] listeners = propSupport.getPropertyChangeListeners(); - for (int i = 0; i < listeners.length; i++) { - newDelegate.addPropertyChangeListener(((PropertyChangeListenerProxy) listeners[i]).getPropertyName(), listeners[i]); + for (PropertyChangeListener listener :... [truncated message content] |
From: <uck...@us...> - 2020-05-23 21:57:07
|
Revision: 9403 http://sourceforge.net/p/vassalengine/svn/9403 Author: uckelman Date: 2020-05-23 21:57:05 +0000 (Sat, 23 May 2020) Log Message: ----------- "x instanceof C" is guaranteed to be false by the language specification when x is null, so checking "x != null" first is unnecessary. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/build/module/BasicLogger.java VASSAL-src/trunk/src/VASSAL/build/module/ExtensionsManager.java VASSAL-src/trunk/src/VASSAL/build/module/GameState.java VASSAL-src/trunk/src/VASSAL/build/module/Map.java VASSAL-src/trunk/src/VASSAL/chat/jabber/JabberClient.java VASSAL-src/trunk/src/VASSAL/counters/MassPieceLoader.java VASSAL-src/trunk/src/VASSAL/launch/ModuleManager.java VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java VASSAL-src/trunk/src/VASSAL/launch/Player.java VASSAL-src/trunk/test/VASSAL/tools/swing/ProgressDialogTest.java Modified: VASSAL-src/trunk/src/VASSAL/build/module/BasicLogger.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/BasicLogger.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/build/module/BasicLogger.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -359,7 +359,7 @@ // warn user if overwriting log from an old version if (file.exists()) { final AbstractMetaData md = MetaDataFactory.buildMetaData(file); - if (md != null && md instanceof SaveMetaData) { + if (md instanceof SaveMetaData) { if (Info.hasOldFormat(md.getVassalVersion())) { final int result = Dialogs.showConfirmDialog( Modified: VASSAL-src/trunk/src/VASSAL/build/module/ExtensionsManager.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/ExtensionsManager.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/build/module/ExtensionsManager.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -165,7 +165,7 @@ else { for (File file : files) { final AbstractMetaData metadata = MetaDataFactory.buildMetaData(file); - if (metadata != null && metadata instanceof ExtensionMetaData) { + if (metadata instanceof ExtensionMetaData) { extensions.add(file); } } Modified: VASSAL-src/trunk/src/VASSAL/build/module/GameState.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/GameState.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/build/module/GameState.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -439,7 +439,7 @@ if (f.exists()) { // warn user if overwriting a save from an old version final AbstractMetaData md = MetaDataFactory.buildMetaData(f); - if (md != null && md instanceof SaveMetaData) { + if (md instanceof SaveMetaData) { if (Info.hasOldFormat(md.getVassalVersion())) { return Dialogs.showConfirmDialog( GameModule.getGameModule().getFrame(), Modified: VASSAL-src/trunk/src/VASSAL/build/module/Map.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -784,7 +784,7 @@ Board b = findBoard(p); if (b != null) { MapGrid grid = b.getGrid(); - if (grid != null && grid instanceof ZonedGrid) { + if (grid instanceof ZonedGrid) { Rectangle r = b.bounds(); p.translate(-r.x, -r.y); // Translate to Board co-ords return ((ZonedGrid) grid).findZone(p); Modified: VASSAL-src/trunk/src/VASSAL/chat/jabber/JabberClient.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/chat/jabber/JabberClient.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/chat/jabber/JabberClient.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -947,7 +947,7 @@ if (p.getType().equals(Presence.Type.available)) { PacketExtension ext = p.getExtension(QUERY_USER); JabberRoom room = null; - if (ext != null && ext instanceof MUCUser){ + if (ext instanceof MUCUser){ final String affiliation = ((MUCUser) ext).getItem().getAffiliation(); final String jid = playerMgr.getPlayer(getAbsolutePlayerJID(p.getFrom())).getJid(); String roomJid = (String) p.getProperty(ROOM_JID); Modified: VASSAL-src/trunk/src/VASSAL/counters/MassPieceLoader.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/counters/MassPieceLoader.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/counters/MassPieceLoader.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -488,7 +488,7 @@ ArrayList<Decorator> traits = new ArrayList<Decorator>(); // Reverse the order of the traits to innermost out - while (template != null && template instanceof Decorator) { + while (template instanceof Decorator) { traits.add(0, (Decorator) template); template = ((Decorator) template).getInner(); } Modified: VASSAL-src/trunk/src/VASSAL/launch/ModuleManager.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/launch/ModuleManager.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/launch/ModuleManager.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -518,7 +518,7 @@ if (lr.module == null && lr.game != null) { // attempt to find the module for the saved game or log final AbstractMetaData data = MetaDataFactory.buildMetaData(lr.game); - if (data != null && data instanceof SaveMetaData) { + if (data instanceof SaveMetaData) { // we found save metadata final String moduleName = ((SaveMetaData) data).getModuleName(); if (moduleName != null && moduleName.length() > 0) { Modified: VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -1237,7 +1237,7 @@ protected void loadMetaData() { AbstractMetaData data = MetaDataFactory.buildMetaData(file); - if (data != null && data instanceof ModuleMetaData) { + if (data instanceof ModuleMetaData) { setValid(true); metadata = (ModuleMetaData) data; } @@ -1482,7 +1482,7 @@ protected void loadMetaData() { AbstractMetaData data = MetaDataFactory.buildMetaData(file); - if (data != null && data instanceof ExtensionMetaData) { + if (data instanceof ExtensionMetaData) { setValid(true); metadata = (ExtensionMetaData) data; } @@ -1723,7 +1723,7 @@ protected void loadMetaData() { AbstractMetaData data = MetaDataFactory.buildMetaData(file); - if (data != null && data instanceof SaveMetaData) { + if (data instanceof SaveMetaData) { metadata = (SaveMetaData) data; setValid(true); } Modified: VASSAL-src/trunk/src/VASSAL/launch/Player.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/launch/Player.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/src/VASSAL/launch/Player.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -152,7 +152,7 @@ public void actionPerformed(ActionEvent e) { // don't permit loading of VASL saved with 3.1 or earlier final AbstractMetaData data = MetaDataFactory.buildMetaData(lr.module); - if (data != null && data instanceof ModuleMetaData) { + if (data instanceof ModuleMetaData) { final ModuleMetaData md = (ModuleMetaData) data; if (Info.compareVersions(md.getVassalVersion(), "3.2.0") < 0) { if ("VASL".equals(md.getName())) { Modified: VASSAL-src/trunk/test/VASSAL/tools/swing/ProgressDialogTest.java =================================================================== --- VASSAL-src/trunk/test/VASSAL/tools/swing/ProgressDialogTest.java 2020-05-22 23:26:22 UTC (rev 9402) +++ VASSAL-src/trunk/test/VASSAL/tools/swing/ProgressDialogTest.java 2020-05-23 21:57:05 UTC (rev 9403) @@ -99,7 +99,7 @@ // } ///* // -// if (value != null && value instanceof Font) { +// if (value instanceof Font) { // UIManager.put(key, null); // final Font font = UIManager.getFont(key); // if (font != null) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-22 23:26:24
|
Revision: 9402 http://sourceforge.net/p/vassalengine/svn/9402 Author: uckelman Date: 2020-05-22 23:26:22 +0000 (Fri, 22 May 2020) Log Message: ----------- Whitespace. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/build/module/Map.java Modified: VASSAL-src/trunk/src/VASSAL/build/module/Map.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-22 21:22:11 UTC (rev 9401) +++ VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-22 23:26:22 UTC (rev 9402) @@ -612,7 +612,6 @@ return toolBar; } - /** * Add a {@link Drawable} component to this map * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-22 21:22:13
|
Revision: 9401 http://sourceforge.net/p/vassalengine/svn/9401 Author: uckelman Date: 2020-05-22 21:22:11 +0000 (Fri, 22 May 2020) Log Message: ----------- All of the member functions in ComponentSplitter can be static; don't create ComponentSplitter instances as they do nothing. Removed cruft. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/build/module/Map.java VASSAL-src/trunk/src/VASSAL/build/module/PieceWindow.java VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java VASSAL-src/trunk/src/VASSAL/tools/ComponentSplitter.java Modified: VASSAL-src/trunk/src/VASSAL/build/module/Map.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-19 23:45:20 UTC (rev 9400) +++ VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-22 21:22:11 UTC (rev 9401) @@ -169,11 +169,6 @@ import VASSAL.tools.menu.MenuManager; import VASSAL.tools.swing.SwingUtils; -/* -import org.jdesktop.swinghelper.layer.JXLayer; -import org.jdesktop.swinghelper.layer.demo.DebugPainter; -*/ - /** * The Map is the main component for displaying and containing {@link GamePiece}s during play. Pieces are displayed on * a Map and moved by clicking and dragging. Keyboard events are forwarded to selected pieces. Multiple map windows are @@ -675,17 +670,9 @@ final IntConfigurer config = new IntConfigurer(MAIN_WINDOW_HEIGHT, null, -1); Prefs.getGlobalPrefs().addOption(null, config); - final ComponentSplitter splitter = new ComponentSplitter(); -/* -final JXLayer<JComponent> jxl = new JXLayer<JComponent>(layeredPane); -final DebugPainter<JComponent> dp = new DebugPainter<JComponent>(); -jxl.setPainter(dp); -mainWindowDock = splitter.splitBottom(splitter.getSplitAncestor(GameModule.getGameModule().getControlPanel(), -1), jxl, true); -*/ - - mainWindowDock = splitter.splitBottom( - splitter.getSplitAncestor(g.getControlPanel(), -1), + mainWindowDock = ComponentSplitter.splitBottom( + ComponentSplitter.getSplitAncestor(g.getControlPanel(), -1), layeredPane, true ); Modified: VASSAL-src/trunk/src/VASSAL/build/module/PieceWindow.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/PieceWindow.java 2020-05-19 23:45:20 UTC (rev 9400) +++ VASSAL-src/trunk/src/VASSAL/build/module/PieceWindow.java 2020-05-22 21:22:11 UTC (rev 9401) @@ -202,7 +202,7 @@ if (!hidden) { String key = PositionOption.key + getConfigureName(); if ("PieceWindow0".equals(id) && GlobalOptions.getInstance().isUseSingleWindow()) { //$NON-NLS-1$ - mainWindowDock = new ComponentSplitter().splitLeft(GameModule.getGameModule().getControlPanel(), root, false); + mainWindowDock = ComponentSplitter.splitLeft(GameModule.getGameModule().getControlPanel(), root, false); } else { final Window w = initFrame(); Modified: VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java 2020-05-19 23:45:20 UTC (rev 9400) +++ VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java 2020-05-22 21:22:11 UTC (rev 9401) @@ -221,7 +221,7 @@ public void toggleVisible() { if (controlPanel.getTopLevelAncestor() == null) { if (GlobalOptions.getInstance().isUseSingleWindow()) { - splitter = new ComponentSplitter().splitRight(GameModule.getGameModule().getControlPanel(), controlPanel, false); + splitter = ComponentSplitter.splitRight(GameModule.getGameModule().getControlPanel(), controlPanel, false); splitter.revalidate(); final Runnable runnable = new Runnable() { public void run() { Modified: VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java 2020-05-19 23:45:20 UTC (rev 9400) +++ VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java 2020-05-22 21:22:11 UTC (rev 9401) @@ -421,7 +421,7 @@ serverStatusControls.setBorder( new TitledBorder(Resources.getString("Chat.server_status"))); - serverStatusView = new ComponentSplitter().splitRight( + serverStatusView = ComponentSplitter.splitRight( moduleControls, serverStatusControls, false); serverStatusView.revalidate(); Modified: VASSAL-src/trunk/src/VASSAL/tools/ComponentSplitter.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/ComponentSplitter.java 2020-05-19 23:45:20 UTC (rev 9400) +++ VASSAL-src/trunk/src/VASSAL/tools/ComponentSplitter.java 2020-05-22 21:22:11 UTC (rev 9401) @@ -66,7 +66,7 @@ * shown or hidden * @return the {@link SplitPane} containing the two components */ - public SplitPane splitRight(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { + public static SplitPane splitRight(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { return split(base, hideableComponent, SplitPane.HIDE_RIGHT, resizeOnVisibilityChange); } @@ -83,7 +83,7 @@ * shown or hidden * @return the {@link SplitPane} containing the two components */ - public SplitPane splitLeft(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { + public static SplitPane splitLeft(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { return split(base, hideableComponent, SplitPane.HIDE_LEFT, resizeOnVisibilityChange); } @@ -100,7 +100,7 @@ * shown or hidden * @return the {@link SplitPane} containing the two components */ - public SplitPane splitBottom(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { + public static SplitPane splitBottom(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { return split(base, hideableComponent, SplitPane.HIDE_BOTTOM, resizeOnVisibilityChange); } @@ -116,7 +116,7 @@ * shown or hidden * @return the {@link SplitPane} containing the two components */ - public SplitPane splitTop(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { + public static SplitPane splitTop(Component base, Component hideableComponent, boolean resizeOnVisibilityChange) { return split(base, hideableComponent, SplitPane.HIDE_TOP, resizeOnVisibilityChange); } @@ -129,7 +129,7 @@ * If -1, return the last {@link SplitPane} ancestor * @return the {@link SplitPane} ancestor, or the original component if none is found */ - public Component getSplitAncestor(Component c, int index) { + public static Component getSplitAncestor(Component c, int index) { Component next = SwingUtilities.getAncestorOfClass(SplitPane.class, c); int count = -1; while (next != null && (index < 0 || count++ < index)) { @@ -139,7 +139,7 @@ return c; } - private SplitPane split(Component base, final Component newComponent, int hideablePosition, boolean resize) { + private static SplitPane split(Component base, final Component newComponent, int hideablePosition, boolean resize) { int index = -1; Container parent = base.getParent(); if (base.getParent() != null) { @@ -594,10 +594,9 @@ JTextField input = new JTextField(60); input.setMaximumSize(new Dimension(input.getMaximumSize().width, input.getPreferredSize().height)); text.add(input); - ComponentSplitter splitter = new ComponentSplitter(); - final SplitPane splitRight = splitter.splitRight(main, smallRight, false); - final SplitPane splitLeft = splitter.splitLeft(main, smallLeft, false); - final SplitPane splitBottom = splitter.splitBottom(splitter.getSplitAncestor(main, -1), new ScrollPane(large), true); + final SplitPane splitRight = ComponentSplitter.splitRight(main, smallRight, false); + final SplitPane splitLeft = ComponentSplitter.splitLeft(main, smallLeft, false); + final SplitPane splitBottom = ComponentSplitter.splitBottom(ComponentSplitter.getSplitAncestor(main, -1), new ScrollPane(large), true); splitBottom.setResizeWeight(0.0); main.add(text, BorderLayout.CENTER); toolbar.add(new AbstractAction("Left") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-19 23:45:25
|
Revision: 9400 http://sourceforge.net/p/vassalengine/svn/9400 Author: uckelman Date: 2020-05-19 23:45:20 +0000 (Tue, 19 May 2020) Log Message: ----------- Reinstate explicit unboxing in the few places it's needed. Modified Paths: -------------- VASSAL-src/trunk/test/VASSAL/tools/concurrent/listener/EventAccumulatorTest.java VASSAL-src/trunk/test/VASSAL/tools/swing/EDTExecutorServiceTest.java VASSAL-src/trunk/test/VASSAL/tools/swing/EDTRunnableFutureTest.java Modified: VASSAL-src/trunk/test/VASSAL/tools/concurrent/listener/EventAccumulatorTest.java =================================================================== --- VASSAL-src/trunk/test/VASSAL/tools/concurrent/listener/EventAccumulatorTest.java 2020-05-19 23:37:34 UTC (rev 9399) +++ VASSAL-src/trunk/test/VASSAL/tools/concurrent/listener/EventAccumulatorTest.java 2020-05-19 23:45:20 UTC (rev 9400) @@ -36,7 +36,7 @@ int i = 0; for (Pair<Object,Integer> e : ea.events()) { assertSame(this, e.first); - assertEquals(i, e.second); + assertEquals(i, e.second.intValue()); ++i; } } Modified: VASSAL-src/trunk/test/VASSAL/tools/swing/EDTExecutorServiceTest.java =================================================================== --- VASSAL-src/trunk/test/VASSAL/tools/swing/EDTExecutorServiceTest.java 2020-05-19 23:37:34 UTC (rev 9399) +++ VASSAL-src/trunk/test/VASSAL/tools/swing/EDTExecutorServiceTest.java 2020-05-19 23:45:20 UTC (rev 9400) @@ -118,7 +118,7 @@ } }); - assertEquals((byte) 0xfe, f.get()); + assertEquals((byte) 0xfe, f.get().byteValue()); } @Test @@ -130,7 +130,7 @@ } }); - assertEquals(3, f.get()); + assertEquals(3, f.get().shortValue()); } @Test @@ -165,7 +165,7 @@ } for (Future<Character> f : ex.invokeAll(tasks)) { - assertEquals('x', f.get()); + assertEquals('x', f.get().charValue()); } } @@ -185,7 +185,7 @@ } for (Future<Character> f : ex.invokeAll(tasks, 1L, TimeUnit.NANOSECONDS)) { - if (!f.isCancelled()) assertEquals('x', f.get()); + if (!f.isCancelled()) assertEquals('x', f.get().charValue()); } } Modified: VASSAL-src/trunk/test/VASSAL/tools/swing/EDTRunnableFutureTest.java =================================================================== --- VASSAL-src/trunk/test/VASSAL/tools/swing/EDTRunnableFutureTest.java 2020-05-19 23:37:34 UTC (rev 9399) +++ VASSAL-src/trunk/test/VASSAL/tools/swing/EDTRunnableFutureTest.java 2020-05-19 23:45:20 UTC (rev 9400) @@ -32,7 +32,7 @@ }; r.run(); - assertEquals(42, r.get()); + assertEquals(42, r.get().intValue()); } @Test(expected=ExecutionException.class) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-19 23:37:37
|
Revision: 9399 http://sourceforge.net/p/vassalengine/svn/9399 Author: uckelman Date: 2020-05-19 23:37:34 +0000 (Tue, 19 May 2020) Log Message: ----------- Bug 12817: Replace MouseEvent.isMetaDown() with getButton() == 3 for mouse events which aren't triggering popup menus. Modified Paths: -------------- VASSAL-src/trunk/CHANGES VASSAL-src/trunk/src/VASSAL/build/module/Map.java VASSAL-src/trunk/src/VASSAL/build/module/map/KeyBufferer.java VASSAL-src/trunk/src/VASSAL/build/module/map/MapCenterer.java VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java VASSAL-src/trunk/src/VASSAL/counters/PropertySheet.java Modified: VASSAL-src/trunk/CHANGES =================================================================== --- VASSAL-src/trunk/CHANGES 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/CHANGES 2020-05-19 23:37:34 UTC (rev 9399) @@ -1,6 +1,7 @@ 3.3.0-beta4 - ??? * 12861: Improved behavior of Zone editor +* 12817: Right-clicking on unexpanded stacks no longer selects top piece * 12805: Upgraded Batik from 1.12 to 1.13 3.3.0-beta3 - 12 May 2020 Modified: VASSAL-src/trunk/src/VASSAL/build/module/Map.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-19 23:37:34 UTC (rev 9399) @@ -1419,7 +1419,7 @@ * The map scrolls when dragging the mouse near the edge. */ public void mouseDragged(MouseEvent e) { - if (!e.isMetaDown()) { + if (e.getButton() != 3) { scrollAtEdge(e.getPoint(), SCROLL_ZONE); } else { Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/KeyBufferer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/KeyBufferer.java 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/KeyBufferer.java 2020-05-19 23:37:34 UTC (rev 9399) @@ -89,6 +89,7 @@ if (e.isConsumed()) { return; } + GamePiece p = map.findPiece(e.getPoint(), PieceFinder.PIECE_IN_STACK); // Don't clear the buffer until we find the clicked-on piece // Because selecting a piece affects its visibility @@ -107,8 +108,12 @@ // while not selected, then select all of the pieces in the stack // RFE 1659481 - Control clicking only deselects if (!e.isControlDown()) { - if (movingStacksPickupUnits || p.getParent() == null || p.getParent().isExpanded() || e.isMetaDown() - || Boolean.TRUE.equals(p.getProperty(Properties.SELECTED))) { + if (movingStacksPickupUnits || + p.getParent() == null || + p.getParent().isExpanded() || + e.getButton() == 3 || + Boolean.TRUE.equals(p.getProperty(Properties.SELECTED))) + { KeyBuffer.getBuffer().add(p); } else { Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/MapCenterer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/MapCenterer.java 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/MapCenterer.java 2020-05-19 23:37:34 UTC (rev 9399) @@ -71,7 +71,7 @@ } public void mouseReleased(MouseEvent e) { - if (e.isMetaDown()) { + if (e.getButton() == 3) { GamePiece found = map.findPiece(e.getPoint(), finder); if (found != null) { EventFilter filter = (EventFilter) found.getProperty(Properties.SELECT_EVENT_FILTER); Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/PieceMover.java 2020-05-19 23:37:34 UTC (rev 9399) @@ -705,7 +705,7 @@ protected boolean canHandleEvent(MouseEvent e) { return !e.isShiftDown() && !e.isControlDown() && - !e.isMetaDown() && + e.getButton() != 3 && e.getClickCount() < 2 && !e.isConsumed(); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java 2020-05-19 23:37:34 UTC (rev 9399) @@ -1092,7 +1092,7 @@ // Scroll map if necessary public void mouseDragged(MouseEvent e) { - if (!e.isMetaDown()) { + if (e.getButton() != 3) { scrollAtEdge(e.getPoint(), 15); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-19 23:37:34 UTC (rev 9399) @@ -226,7 +226,7 @@ selected = -1; double minDist = Float.MAX_VALUE; - if (!e.isMetaDown()) { + if (e.getButton() != 3) { // move an existing vertex for (int i = 0; i < polygon.npoints; ++i) { double dist = Point2D.distance(polygon.xpoints[i], polygon.ypoints[i], e.getX(), e.getY()); Modified: VASSAL-src/trunk/src/VASSAL/counters/PropertySheet.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/counters/PropertySheet.java 2020-05-19 23:37:27 UTC (rev 9398) +++ VASSAL-src/trunk/src/VASSAL/counters/PropertySheet.java 2020-05-19 23:37:34 UTC (rev 9399) @@ -1258,7 +1258,7 @@ public void mouseClicked(MouseEvent event) { - if ((event.isMetaDown() || event.isShiftDown()) && panelType != TICKS_VALMAX) { + if ((event.getButton() == 3 || event.isShiftDown()) && panelType != TICKS_VALMAX) { new EditTickLabelValueDialog(this); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-19 23:37:29
|
Revision: 9398 http://sourceforge.net/p/vassalengine/svn/9398 Author: uckelman Date: 2020-05-19 23:37:27 +0000 (Tue, 19 May 2020) Log Message: ----------- Added bugfix note. Modified Paths: -------------- VASSAL-src/trunk/CHANGES Modified: VASSAL-src/trunk/CHANGES =================================================================== --- VASSAL-src/trunk/CHANGES 2020-05-19 23:37:22 UTC (rev 9397) +++ VASSAL-src/trunk/CHANGES 2020-05-19 23:37:27 UTC (rev 9398) @@ -1,5 +1,6 @@ 3.3.0-beta4 - ??? +* 12861: Improved behavior of Zone editor * 12805: Upgraded Batik from 1.12 to 1.13 3.3.0-beta3 - 12 May 2020 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-19 23:37:25
|
Revision: 9397 http://sourceforge.net/p/vassalengine/svn/9397 Author: uckelman Date: 2020-05-19 23:37:22 +0000 (Tue, 19 May 2020) Log Message: ----------- Whitespace and logic. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-19 23:37:17 UTC (rev 9396) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-19 23:37:22 UTC (rev 9397) @@ -54,21 +54,21 @@ public PolygonEditor(Polygon p) { polygon = p; - // reset(); // too much of this happening + // reset(); // too much of this happening } protected void reset() { - MouseListener ml[] = getMouseListeners(); - - // get rid of all the mouse listeners floating around - for (MouseListener i: ml) - removeMouseListener(i); - - MouseMotionListener mml[] = getMouseMotionListeners(); - - for (MouseMotionListener i: mml) - removeMouseMotionListener(i); - + MouseListener ml[] = getMouseListeners(); + + // get rid of all the mouse listeners floating around + for (MouseListener i: ml) + removeMouseListener(i); + + MouseMotionListener mml[] = getMouseMotionListeners(); + + for (MouseMotionListener i: mml) + removeMouseMotionListener(i); + if (polygon == null || polygon.npoints == 0) { setupForCreate(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-19 23:37:19
|
Revision: 9396 http://sourceforge.net/p/vassalengine/svn/9396 Author: uckelman Date: 2020-05-19 23:37:17 +0000 (Tue, 19 May 2020) Log Message: ----------- Fixed unintuitive behaviour in PolygonEditor. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-19 23:37:10 UTC (rev 9395) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-19 23:37:17 UTC (rev 9396) @@ -30,6 +30,8 @@ import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.Point2D; @@ -52,10 +54,21 @@ public PolygonEditor(Polygon p) { polygon = p; - reset(); + // reset(); // too much of this happening } protected void reset() { + MouseListener ml[] = getMouseListeners(); + + // get rid of all the mouse listeners floating around + for (MouseListener i: ml) + removeMouseListener(i); + + MouseMotionListener mml[] = getMouseMotionListeners(); + + for (MouseMotionListener i: mml) + removeMouseMotionListener(i); + if (polygon == null || polygon.npoints == 0) { setupForCreate(); } @@ -210,26 +223,88 @@ // implements java.awt.event.MouseListener public void mousePressed(MouseEvent e) { - selected = -1; - double minDist = Float.MAX_VALUE; - for (int i = 0; i < polygon.npoints; ++i) { - double dist = Point2D.distance(polygon.xpoints[i], polygon.ypoints[i], e.getX(), e.getY()); - if (dist < minDist) { - minDist = dist; - selected = i; - } - } - if (e.isMetaDown()) { - polygon.addPoint(e.getX(), e.getY()); - if (selected >= 0) { - for (int i = polygon.npoints - 1; i > selected; --i) { - polygon.xpoints[i] = polygon.xpoints[i - 1]; - polygon.ypoints[i] = polygon.ypoints[i - 1]; - } - polygon.xpoints[selected] = e.getX(); - polygon.ypoints[selected] = e.getY(); - } - } + selected = -1; + double minDist = Float.MAX_VALUE; + + if (!e.isMetaDown()) { + // move an existing vertex + for (int i = 0; i < polygon.npoints; ++i) { + double dist = Point2D.distance(polygon.xpoints[i], polygon.ypoints[i], e.getX(), e.getY()); + if (dist < minDist) { + minDist = dist; + selected = i; + } + } + } + else { + // find closest segment/vertex + selected = -1; + minDist = Float.MAX_VALUE; + boolean isVertex = false; + + int x0 = e.getX(); + int y0 = e.getY(); + + for (int i = 0; i < polygon.npoints; ++i) { + + int x1 = polygon.xpoints[i]; + int y1 = polygon.ypoints[i]; + int x2, y2; + if (i == polygon.npoints-1) { + x2 = polygon.xpoints[0]; + y2 = polygon.ypoints[0]; + } + else { + x2 = polygon.xpoints[i+1]; + y2 = polygon.ypoints[i+1]; + } + + if (y2 == y1 && x2 == x1) // two verteces on top of each other: skip + continue; + + double d = Point2D.distance(x1, y1, x2, y2); // segment length + double comp = ((x2-x1)*(x0-x1) + (y2-y1)*(y0-y1)) / d; // component of projection of selection on segment + double dist; // orthogonal distance to segment + + if (comp <= 0.0) { // too far out beyond first vertex: just move that vertex if it's closest + dist = Point2D.distance(x1, y1, x0, y0); + if (dist < minDist) { + isVertex = true; + minDist = dist; + selected = i; + } + } + else if (comp >= d) { // too far out beyond second vertex: just move that vertex: just move that virtex if it's closest + dist = Point2D.distance(x0, y0, x2, y2); + if (dist < minDist) { + isVertex = true; + minDist = dist; + selected = i+1; + } + } + else { // calculate orthogonal distance to segment + dist = Math.abs((y2-y1)*e.getX() - (x2-x1)*e.getY() + x2*y1 - y2*x1) / + Math.sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1)); + if (dist < minDist) { + isVertex = false; + minDist = dist; + selected = i+1; + } + } + } + + if (!isVertex) { // insert a point near segment + polygon.addPoint(e.getX(), e.getY()); + if (selected >= 0) { + for (int i = polygon.npoints - 1; i > selected; --i) { + polygon.xpoints[i] = polygon.xpoints[i - 1]; + polygon.ypoints[i] = polygon.ypoints[i - 1]; + } + polygon.xpoints[selected] = e.getX(); + polygon.ypoints[selected] = e.getY(); + } + } + } } public void scrollAtEdge(Point evtPt, int dist) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-19 23:37:13
|
Revision: 9395 http://sourceforge.net/p/vassalengine/svn/9395 Author: uckelman Date: 2020-05-19 23:37:10 +0000 (Tue, 19 May 2020) Log Message: ----------- Bug 12817: Use MouseEvent.isPopupTrigger() to check for popup menu display. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java VASSAL-src/trunk/src/VASSAL/chat/ui/RoomInteractionControlsInitializer.java VASSAL-src/trunk/src/VASSAL/configure/ConfigureTree.java VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java Modified: VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/build/module/Inventory.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -253,8 +253,16 @@ } }); tree.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent e) { + maybePopup(e); + } + public void mouseReleased(MouseEvent e) { - if (showMenu && e.isMetaDown()) { + maybePopup(e); + } + + private void maybePopup(MouseEvent e) { + if (showMenu && e.isPopupTrigger()) { final TreePath path = tree.getPathForLocation(e.getX(), e.getY()); if (path != null) { if (path.getLastPathComponent() instanceof CounterNode) { Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/MenuDisplayer.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -201,8 +201,16 @@ return popup; } + public void mousePressed(MouseEvent e) { + maybePopup(e); + } + public void mouseReleased(MouseEvent e) { - if (!e.isMetaDown()) { + maybePopup(e); + } + + protected void maybePopup(MouseEvent e) { + if (!e.isPopupTrigger()) { return; } Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/SetupStack.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -815,29 +815,28 @@ } public void keyReleased(KeyEvent e) { - } public void keyTyped(KeyEvent e) { - } public void mouseClicked(MouseEvent e) { - } public void mouseEntered(MouseEvent e) { - } public void mouseExited(MouseEvent e) { - } - public void mousePressed(MouseEvent e) { + protected void maybePopup(MouseEvent e) { + if (!e.isPopupTrigger() || myPiece == null) { + return; + } + Rectangle r = getPieceBoundingBox(); r.translate(pos.x, pos.y); - if (myPiece != null && e.isMetaDown() && r.contains(e.getPoint())) { + if (r.contains(e.getPoint())) { JPopupMenu popup = MenuDisplayer.createPopup(myPiece); popup.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { @@ -855,11 +854,13 @@ } } + public void mousePressed(MouseEvent e) { + maybePopup(e); + } + public void mouseReleased(MouseEvent e) { - - + maybePopup(e); } - } public ComponentI18nData getI18nData() { Modified: VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/build/module/map/boardPicker/board/RegionGrid.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -829,11 +829,7 @@ final Point p = e.getPoint(); lastClick = p; - if (e.isMetaDown()) { // Right click...menu - doPopupMenu(e); - } - else if (lastClickedRegion != null) { - + if (lastClickedRegion != null) { if (e.getClickCount() >= 2) { // Double click show properties if (lastClickedRegion.getConfigurer() != null) { final Action a = @@ -847,7 +843,6 @@ } } } - } view.repaint(); // Clean up selection } @@ -951,7 +946,6 @@ } } } - } /* @@ -991,8 +985,6 @@ } w.toFront(); } - - } protected void select(Region r) { @@ -1047,34 +1039,42 @@ } public void mousePressed(MouseEvent e) { - final Point p = e.getPoint(); - lastClick = p; - lastClickedRegion = grid.getRegion(p); - - if (!e.isShiftDown() && !e.isControlDown() && - (lastClickedRegion==null || !lastClickedRegion.isSelected())) { - unSelectAll(); + if (e.isPopupTrigger()) { + doPopupMenu(e); } + else { + final Point p = e.getPoint(); + lastClick = p; + lastClickedRegion = grid.getRegion(p); - if (lastClickedRegion == null) { - anchor = p; - selectionRect = new Rectangle(anchor.x, anchor.y, 0, 0); - } - else { - if (e.isControlDown()) { - unselect(lastClickedRegion); + if (!e.isShiftDown() && !e.isControlDown() && + (lastClickedRegion==null || !lastClickedRegion.isSelected())) { + unSelectAll(); } + + if (lastClickedRegion == null) { + anchor = p; + selectionRect = new Rectangle(anchor.x, anchor.y, 0, 0); + } else { - select(lastClickedRegion); + if (e.isControlDown()) { + unselect(lastClickedRegion); + } + else { + select(lastClickedRegion); + } } } } - public void mouseReleased(MouseEvent evPt) { - if (selectionRect != null) { + public void mouseReleased(MouseEvent e) { + if (e.isPopupTrigger()) { + doPopupMenu(e); + } + else if (selectionRect != null) { for (Region r : grid.regionList.values()) { if (selectionRect.contains(r.getOrigin())) { - if (evPt.isControlDown()) { + if (e.isControlDown()) { unselect(r); } else { Modified: VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/build/module/turn/TurnTracker.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -940,23 +940,24 @@ } public void mouseClicked(MouseEvent e) { - if (e.isMetaDown()) { - doPopup(e.getPoint()); - } } public void mouseEntered(MouseEvent e) { - } public void mouseExited(MouseEvent e) { - } public void mousePressed(MouseEvent e) { + if (e.isPopupTrigger()) { + doPopup(e.getPoint()); + } } public void mouseReleased(MouseEvent e) { + if (e.isPopupTrigger()) { + doPopup(e.getPoint()); + } } public void doPopup(Point p) { @@ -965,11 +966,9 @@ popup.show(this, p.x, p.y); } } - } protected void buildPopup() { - popup = new JPopupMenu(); popup.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { Modified: VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/build/widget/HtmlChart.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -203,8 +203,8 @@ return null; } - public void mousePressed(MouseEvent event) { - if (event.isMetaDown()) { + protected void maybePopup(MouseEvent event) { + if (event.isPopupTrigger()) { final JPopupMenu popup = new JPopupMenu(); final JMenuItem item = new JMenuItem("Return to default page"); @@ -222,6 +222,14 @@ } } + public void mousePressed(MouseEvent e) { + maybePopup(e); + } + + public void mouseReleased(MouseEvent e) { + maybePopup(e); + } + public void mouseClicked(MouseEvent e) { } @@ -231,9 +239,6 @@ public void mouseExited(MouseEvent e) { } - public void mouseReleased(MouseEvent e) { - } - public class HtmlChartHyperlinkListener implements HyperlinkListener { public void hyperlinkUpdate(HyperlinkEvent event) { if (event.getEventType() != HyperlinkEvent.EventType.ACTIVATED) { Modified: VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -250,18 +250,6 @@ } } - public void mousePressed(MouseEvent e) { - KeyBuffer.getBuffer().clear(); - Map.clearActiveMap(); - if (getPiece() != null) { - KeyBuffer.getBuffer().add(getPiece()); - } - - clearExpandedPiece(); - panel.requestFocus(); - panel.repaint(); - } - // Puts counter in DragBuffer. Call when mouse gesture recognized protected void startDrag() { @@ -283,25 +271,46 @@ } } - public void mouseReleased(MouseEvent e) { - if (getPiece() != null && e.isMetaDown()) { - JPopupMenu popup = MenuDisplayer.createPopup(getPiece()); - popup.addPopupMenuListener(new PopupMenuListener() { - public void popupMenuCanceled(PopupMenuEvent evt) { - panel.repaint(); - } + protected void doPopup(MouseEvent e) { + JPopupMenu popup = MenuDisplayer.createPopup(getPiece()); + popup.addPopupMenuListener(new PopupMenuListener() { + public void popupMenuCanceled(PopupMenuEvent evt) { + panel.repaint(); + } - public void popupMenuWillBecomeInvisible(PopupMenuEvent evt) { - clearExpandedPiece(); - panel.repaint(); - } + public void popupMenuWillBecomeInvisible(PopupMenuEvent evt) { + clearExpandedPiece(); + panel.repaint(); + } - public void popupMenuWillBecomeVisible(PopupMenuEvent evt) { - } - }); - popup.show(panel, e.getX(), e.getY()); + public void popupMenuWillBecomeVisible(PopupMenuEvent evt) { + } + }); + popup.show(panel, e.getX(), e.getY()); + } + + public void mousePressed(MouseEvent e) { + if (e.isPopupTrigger()) { + doPopup(e); } + else { + KeyBuffer.getBuffer().clear(); + Map.clearActiveMap(); + if (getPiece() != null) { + KeyBuffer.getBuffer().add(getPiece()); + } + clearExpandedPiece(); + panel.requestFocus(); + panel.repaint(); + } + } + + public void mouseReleased(MouseEvent e) { + if (getPiece() != null && e.isPopupTrigger()) { + doPopup(e); + } + clearExpandedPiece(); } Modified: VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/chat/ui/ChatServerControls.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -135,11 +135,19 @@ ServerAddressBook.editCurrentServer(!client.isConnected()); }}); configServerButton.addMouseListener(new MouseAdapter(){ - public void mouseClicked(MouseEvent e) { - if (!client.isConnected() && e.isMetaDown()) { + private void maybePopup(MouseEvent e) { + if (!client.isConnected() && e.isPopupTrigger()) { showChangeServerMenu(); } } + + public void mousePressed(MouseEvent e) { + maybePopup(e); + } + + public void mouseReleased(MouseEvent e) { + maybePopup(e); + } }); toolbar.add(configServerButton); } Modified: VASSAL-src/trunk/src/VASSAL/chat/ui/RoomInteractionControlsInitializer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/chat/ui/RoomInteractionControlsInitializer.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/chat/ui/RoomInteractionControlsInitializer.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -63,9 +63,17 @@ public void initializeControls(final ChatServerControls controls) { currentRoomPopupBuilder = new MouseAdapter() { + public void mousePressed(MouseEvent evt) { + maybePopup(evt); + } + public void mouseReleased(MouseEvent evt) { - JTree tree = (JTree) evt.getSource(); - if (evt.isMetaDown()) { + maybePopup(evt); + } + + private void maybePopup(MouseEvent evt) { + if (evt.isPopupTrigger()) { + JTree tree = (JTree) evt.getSource(); TreePath path = tree.getPathForLocation(evt.getX(), evt.getY()); if (path != null) { Object target = ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); @@ -84,31 +92,22 @@ }; controls.getCurrentRoom().addMouseListener(currentRoomPopupBuilder); roomPopupBuilder = new MouseAdapter() { + public void mousePressed(MouseEvent evt) { + if (evt.isPopupTrigger()) { + maybePopup(evt); + } + } + public void mouseReleased(MouseEvent evt) { - JTree tree = (JTree) evt.getSource(); - TreePath path = tree.getPathForLocation(evt.getX(), evt.getY()); - if (path != null) { - Object target = ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); - if (target instanceof Player) { - if (evt.isMetaDown()) { - JPopupMenu popup = buildPopupForPlayer((SimplePlayer) target, tree); - for (int i = 0, n = popup.getComponentCount(); i < n; ++i) { - popup.getComponent(i).setFont(POPUP_MENU_FONT); - } - popup.show(tree, evt.getX(), evt.getY()); - } - } - else if (target instanceof SimpleRoom) { - if (evt.isMetaDown()) { - JPopupMenu popup = buildPopupForRoom((VASSAL.chat.Room) target, tree); - if (popup != null) { - for (int i = 0, n = popup.getComponentCount(); i < n; ++i) { - popup.getComponent(i).setFont(POPUP_MENU_FONT); - } - popup.show(tree, evt.getX(), evt.getY()); - } - } - else if (evt.getClickCount() == 2) { + if (evt.isPopupTrigger()) { + maybePopup(evt); + } + else if (evt.getClickCount() == 2) { + JTree tree = (JTree) evt.getSource(); + TreePath path = tree.getPathForLocation(evt.getX(), evt.getY()); + if (path != null) { + Object target = ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); + if (target instanceof SimpleRoom) { int row = tree.getRowForLocation(evt.getX(), evt.getY()); if (tree.isCollapsed(row)) { tree.expandRow(row); @@ -121,6 +120,29 @@ } } } + + private void maybePopup(MouseEvent evt) { + JTree tree = (JTree) evt.getSource(); + TreePath path = tree.getPathForLocation(evt.getX(), evt.getY()); + if (path != null) { + Object target = ((DefaultMutableTreeNode) path.getLastPathComponent()).getUserObject(); + JPopupMenu popup = null; + + if (target instanceof Player) { + popup = buildPopupForPlayer((SimplePlayer) target, tree); + } + else if (target instanceof SimpleRoom) { + popup = buildPopupForRoom((VASSAL.chat.Room) target, tree); + } + + if (popup != null) { + for (int i = 0, n = popup.getComponentCount(); i < n; ++i) { + popup.getComponent(i).setFont(POPUP_MENU_FONT); + } + popup.show(tree, evt.getX(), evt.getY()); + } + } + } }; controls.getRoomTree().addMouseListener(roomPopupBuilder); roomCreator = new ActionListener() { Modified: VASSAL-src/trunk/src/VASSAL/configure/ConfigureTree.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/configure/ConfigureTree.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/configure/ConfigureTree.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -860,36 +860,50 @@ return null; } + protected void maybePopup(MouseEvent e) { + Configurable target = getTarget(e.getX(), e.getY()); + if (target == null) { + return; + } + + setSelectionRow(getClosestRowForLocation(e.getX(), e.getY())); + JPopupMenu popup = buildPopupMenu(target); + popup.show(ConfigureTree.this, e.getX(), e.getY()); + popup.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { + public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { + repaint(); + } + + public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) { + repaint(); + } + + public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { + } + }); + } + public void mousePressed(MouseEvent e) { + if (e.isPopupTrigger()) { + maybePopup(e); + } } public void mouseReleased(MouseEvent e) { - Configurable target = getTarget(e.getX(), e.getY()); - if (target != null) { - if (e.getClickCount() == 2 && !e.isMetaDown()) { - if (target.getConfigurer() != null) { - Action a = buildEditAction(target); - if (a != null) { - a.actionPerformed(new ActionEvent(e.getSource(), ActionEvent.ACTION_PERFORMED, "Edit")); - } - } + if (e.isPopupTrigger()) { + maybePopup(e); + } + else if (e.getClickCount() == 2) { + Configurable target = getTarget(e.getX(), e.getY()); + if (target == null) { + return; } - else if (e.isMetaDown()) { - setSelectionRow(getClosestRowForLocation(e.getX(), e.getY())); - JPopupMenu popup = buildPopupMenu(target); - popup.show(ConfigureTree.this, e.getX(), e.getY()); - popup.addPopupMenuListener(new javax.swing.event.PopupMenuListener() { - public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) { - repaint(); - } - public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) { - repaint(); - } - - public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) { - } - }); + if (target.getConfigurer() != null) { + Action a = buildEditAction(target); + if (a != null) { + a.actionPerformed(new ActionEvent(e.getSource(), ActionEvent.ACTION_PERFORMED, "Edit")); + } } } } Modified: VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java 2020-05-17 19:47:32 UTC (rev 9394) +++ VASSAL-src/trunk/src/VASSAL/launch/ModuleManagerWindow.java 2020-05-19 23:37:10 UTC (rev 9395) @@ -608,16 +608,24 @@ } @Override + public void mousePressed(MouseEvent e) { + maybePopup(e); + } + + @Override public void mouseReleased(MouseEvent e) { - final TreePath path = - tree.getPathForLocation(e.getPoint().x, e.getPoint().y); - if (path == null) return; + maybePopup(e); + } - selectedNode = (MyTreeNode) path.getLastPathComponent(); + private void maybePopup(MouseEvent e) { + if (e.isPopupTrigger()) { + final TreePath path = + tree.getPathForLocation(e.getPoint().x, e.getPoint().y); + if (path == null) return; - if (e.isMetaDown()) { final int row = tree.getRowForPath(path); if (row >= 0) { + selectedNode = (MyTreeNode) path.getLastPathComponent(); tree.clearSelection(); tree.addRowSelectionInterval(row, row); final AbstractInfo target = This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-15 23:14:51
|
Revision: 9388 http://sourceforge.net/p/vassalengine/svn/9388 Author: uckelman Date: 2020-05-15 23:14:47 +0000 (Fri, 15 May 2020) Log Message: ----------- Bug 12805: Upgraded Batik from 1.12 to 1.13 Modified Paths: -------------- VASSAL-src/trunk/CHANGES Added Paths: ----------- VASSAL-src/trunk/lib/batik-anim-1.13.jar VASSAL-src/trunk/lib/batik-awt-util-1.13.jar VASSAL-src/trunk/lib/batik-bridge-1.13.jar VASSAL-src/trunk/lib/batik-codec-1.13.jar VASSAL-src/trunk/lib/batik-constants-1.13.jar VASSAL-src/trunk/lib/batik-css-1.13.jar VASSAL-src/trunk/lib/batik-dom-1.13.jar VASSAL-src/trunk/lib/batik-ext-1.13.jar VASSAL-src/trunk/lib/batik-extension-1.13.jar VASSAL-src/trunk/lib/batik-gui-util-1.13.jar VASSAL-src/trunk/lib/batik-gvt-1.13.jar VASSAL-src/trunk/lib/batik-i18n-1.13.jar VASSAL-src/trunk/lib/batik-parser-1.13.jar VASSAL-src/trunk/lib/batik-script-1.13.jar VASSAL-src/trunk/lib/batik-svg-dom-1.13.jar VASSAL-src/trunk/lib/batik-svggen-1.13.jar VASSAL-src/trunk/lib/batik-swing-1.13.jar VASSAL-src/trunk/lib/batik-transcoder-1.13.jar VASSAL-src/trunk/lib/batik-util-1.13.jar VASSAL-src/trunk/lib/batik-xml-1.13.jar VASSAL-src/trunk/lib/licenses/batik-1.13/ VASSAL-src/trunk/lib/licenses/batik-1.13/LICENSE VASSAL-src/trunk/lib/licenses/batik-1.13/LICENSE.xmlgraphics-commons-2.4.txt VASSAL-src/trunk/lib/licenses/batik-1.13/README.xml-apis-ext-1.3.04.txt VASSAL-src/trunk/lib/xmlgraphics-commons-2.4.jar Removed Paths: ------------- VASSAL-src/trunk/lib/batik-anim-1.12.jar VASSAL-src/trunk/lib/batik-awt-util-1.12.jar VASSAL-src/trunk/lib/batik-bridge-1.12.jar VASSAL-src/trunk/lib/batik-codec-1.12.jar VASSAL-src/trunk/lib/batik-constants-1.12.jar VASSAL-src/trunk/lib/batik-css-1.12.jar VASSAL-src/trunk/lib/batik-dom-1.12.jar VASSAL-src/trunk/lib/batik-ext-1.12.jar VASSAL-src/trunk/lib/batik-extension-1.12.jar VASSAL-src/trunk/lib/batik-gui-util-1.12.jar VASSAL-src/trunk/lib/batik-gvt-1.12.jar VASSAL-src/trunk/lib/batik-i18n-1.12.jar VASSAL-src/trunk/lib/batik-parser-1.12.jar VASSAL-src/trunk/lib/batik-script-1.12.jar VASSAL-src/trunk/lib/batik-svg-dom-1.12.jar VASSAL-src/trunk/lib/batik-svggen-1.12.jar VASSAL-src/trunk/lib/batik-swing-1.12.jar VASSAL-src/trunk/lib/batik-transcoder-1.12.jar VASSAL-src/trunk/lib/batik-util-1.12.jar VASSAL-src/trunk/lib/batik-xml-1.12.jar VASSAL-src/trunk/lib/licenses/batik-1.12/LICENSE VASSAL-src/trunk/lib/licenses/batik-1.12/LICENSE.xmlgraphics-commons-2.4.txt VASSAL-src/trunk/lib/licenses/batik-1.12/README.xml-apis-ext-1.3.04.txt VASSAL-src/trunk/lib/xmlgraphics-commons-2.3.jar Modified: VASSAL-src/trunk/CHANGES =================================================================== --- VASSAL-src/trunk/CHANGES 2020-05-13 12:54:19 UTC (rev 9387) +++ VASSAL-src/trunk/CHANGES 2020-05-15 23:14:47 UTC (rev 9388) @@ -1,3 +1,7 @@ +3.3.0-beta4 - ??? + +* 12805: Upgraded Batik from 1.12 to 1.13 + 3.3.0-beta3 - 12 May 2020 * 12732: Use all available rendering hints for text Deleted: VASSAL-src/trunk/lib/batik-anim-1.12.jar =================================================================== --- VASSAL-src/trunk/lib/batik-anim-1.12.jar 2020-05-13 12:54:19 UTC (rev 9387) +++ VASSAL-src/trunk/lib/batik-anim-1.12.jar 2020-05-15 23:14:47 UTC (rev 9388) @@ -1,4015 +0,0 @@ -PK ---\xBE\x89e\xA9y -\xC6z\xC6z\x96 -)\xBA^)\xD9 ;,\xF4⍀\xF1r-----------\xD1n^-U\xF8\x86YT \x83\xF8\x9D&e\xF61\x8E۶\x8Dd\x8B\xC8\xF14\xBA\xA8\x8C\xA4\x99 \xB5\xF1|Q\xB9\xA3s\xEE\xC9U -\xF6\x9Ak{<\xC0\x92\x8C'tS\xC3d\xFF\xB0\x9CBN\xAElj\x84\xB2\xA6F`s8"\xDB^3M\x8B\xED -&\xC9f\xDD]\xA6 \x8D\x82\xDD\xEB\x8C\xD8\xF4l̵у\xDB$M\xFEmme:ӏ)+ظB퇩ٕ\xD8\x96\x93N\xE9\xF7\xB1ַ\xA9O9\xCA!+\xA5\x93\xFB\xE1*\xE7\xDCxNV\x9B|\xF5pㅺ\x98\xEE٢\x9F\x96\xA4kY\xF01\x9AL\xA5)\x88G\xF4\xA7@\xB6\x8E\xBAp\xC4u+\xA1{\x8Dr\x87\xA8\xC4\xF7\xE5\xFCɾ\x95\x9E*\x83C\xEA\xFEU\x8D\xE2\xEBʏ\xE8\xAFd\x94Q\xDBA\xDC\xC7\xF6\xDA\xC5BPK --\xACr\x8Fy1\xFC@\xF2\xBF\xD6\xDB\xD1\xD2\xEF\xE0\x96Fe\xF0q\xB3\xF9\x84©\xEA\xB2;\xF0w\xE0\x8E\xB1\xA1\xFC\xA8\xADi\xE1\xC7r';\xD0:$DE\xE7\xF0I\x8A\xBEi\xFC\xC7ZH\xC1\xE6!q\xC5\xF4\x80^\xC6\xD11!mz\x8D eH9\xCC-D\x9C\xBE\x9E8G/8\xE9\xA3\xB7C9\x9C\xBB\xAD\xAA\xB4áϏ\xFD\xC1؏'\xA0\xB0\x87/Ic\xC2!\x8C\xB4\x94\xBALj \xC0\xA6\xF3\xC7je@\xF2 u#7M\xC8\xFF\x97 -DS\xC0R\xFAP\x92\xBA\x81\xE0\xE1ol)xX\x93Y\xE50`m!m\xBD\x888\x80z\x94m;\xC3B\x80vs^\x88O.\xFA^\xC1Ώ\x90L\x8D\xD9_&+\)\xAB\xC0\x8AJ\xA0A\xDC\xEC8p\x8F\xF36\xF0\xA7\xF7\x92\xD8A\xF1\x8Dt輎R\xB1\xC2=0\xFA!z\xABp+r\xE6\xC2~\xA7\xCB]\xE0\xACj->i v\xA6D ?\xA9\xE6\xBE\xFF\xC3 -C\xB7+ \xC7z\x8C\xE3\xA4KpޏXV\x84@\xED \x81\xBF\x9D\xB9\xD4:\xFA\xC6\x8B\xBCo\xCBi~\xC4b"\xCB';\x9E)\xE7\x84-젯3\xDDJ\xDD\xFF\xEF\\xC02\xD5\x98`\xD0r\x81"\x81\x82\x8E\xA2K\xD1\xF3Y3\xEF]a;\xF9\xA0\x88\xE5\x85\xA8\x8F6u\x8D<\x8A\x80j-\xBBʾo\xB0\xDD48\x9D\xAC\x8C\xD8\xE5U+\xA9\xC1\xDE\xFClv8\xB0" ɭq\xB3\x83\xECuNZM\xD9Y[@\x9F\xD0\xD1(j_\x9E\xF8\xEE\xDA`\xD3)_\xFE\x80\x91DVOˎ\x84q\x87\xEB\xAB-\xA8\xCF$o\xAA\x9C\xDFb\x8F\xAE\xB5n.\x965\xFA?\xF6B\x90 -c::e\xD0[VAn%\xFEL \xE7\xF7\x8BT\xB0"\xB7\xB6ƹd0<FiF\xE4O\xFC</E#\xF7n\xD4\xB5Q[.`\xB1\xA0|\xE2G\xA8\xF8\xC0QM`ŝo\xB5\x93\x9C29\xE7\x8E\xFC\xD1S1LŦ\x91(ShF}\xA6\x84F#\xE5\x98/y\x81Uqu\xC0E\xEF\x85X\x91.\xB6 -\xBE\xC1\xADҰO\xAC -\xBE\x99\x8B;\x95O\x86\xE6\xB4u+ َQpPn3\xC1\xA3gX\xB9i#l6\xC8Q!\xA3\x81\xFF7\xB1"O\xDBf.\xE1O Y\x91Z!2H -\xADV)\xF6rm艸\xBE\xECz\xEA셼䓎i[\xD4\xD5\xE3~ܪ\xE1\x88Z9\xF5\x8D\xDD!\xFE\x9DTR}8\xEE$\xBE\xA72\xF6\xDCd{\xF2\xE0&Qi죰硎\xC5\x82\xF6Aw'\xDC=\xBAl{\x84\xB8\xD2([\xF7-C\xB1\x9C\xE9\xCEe\xB6\xB3U$Xxs\xD6\xC2Sw-yS\x91\x91 -\xD1!\xA5\x9B?\x8F \xCE\xE8s\xA9\xF8\x97\x98\xA3g\x90A\xCAU\x86-T<&\x9A\x933\xCE\xA9p\xF1INK\xF5\xD4h\xD5%\x82V\xF4\xBFo\xFC\xD0ճ\xD5\xCD\xFD\xF2\xCD\xF5\x92\xEFq {c\xDA\xF9=\x90rg\xFB\xE4ٕA\xC0\x99L9\xB1,\xF9+ZO >\x94\xF5\x98)\xE8\xD4Y\xB3"(I\x9C\xF3fb<\xA82\xF0A\xE8\xC5\xE7\xD85s\xDE\xC2g\xEDJ\xC12%\xB6S\xF9\x94\xDE/I\xD9 -\xC46}ԔA\xC7d\xEBd\xA1IT\xB9gu\xF8>\xF3I\x90\xE5y=@ ]'\x9C\xC1\x92\xB9M\xF0T\xBE\xB1ũ\x95e\xE0zٔ\xCB\xF7g\xACTe -\xE8-\xB6\xBEG\xE4g\xA2~ -\xC7U\xA5\xBAjlm\x9DDL-\xF1\xE7\xC8UƑ\x9CF\xD6:a\xB9g|흹2b1\xD9]\x91\xA9\xCFhS\xA4\xB4\xA9\xA9Y<<ъ\xE4ӹ\x98J$\xB7ΦyI\x81\x93۪I\x8E\xACg\xC9D\xA51\x8E&c\x99ةu\x87|K͎\xBF \xE0^5\xB1@7\xEF;\xA8\xA2\x8E\x9C\xA6a\xA3Rc\xFBK\xB3\x928\xDF8\xB3\xC8l\x98\x95\x8D\xB1\x9E]%\xA6\x8F;r\x98\xEAm\xF2\xE9\xF3Ӛy\x9AEjf\xC3"\x98\xBAV\xE1\xF6\x91ׯ̀\x8B\xE2\xED -\x8D\xE1\xA6\xD3vK\xED\x96R͍P\x9C\xAA_ad.\xF11\xBB\xE0)X1\xB6D[\xE8\xE9(\xF0>C\xA8#S\x8F\xAA\xCC \x9E\x807Ī\xAD\xB4|\xAFt\xDC{\xF8\xBB\x80?\xE23]B)wv#\x84\x86\xF7jL_\xC25\x86lqn -N\xBD\x94}\xC0\x99\xBE\xFF:\xF9\xE6\x87C\xD0\x8DC\xA4\xA46ժ\xDFG\xEDo\x8F\xB0\xA0;\xF0 \x96tr)~\xD3\xE2\xF54jV\xDEQ\xC2\xBD+bӁ\x93ړ\xF9lȦ\xE07_ -Δ-\xB1`\xCC\xFB\xE5\xFD\xBB\xEB\xAC\xBEz\xB1\\xBD\xBD[\xAE~\xBC\xFE\xF9zu_\x88\x9F\xAF\xEF\xDE\xFCZ.~X\xBE[\xDE\xFFB!\xF4vy\xBF\xBA^\xF3\xEB/\xE3vq{\xFFnq'n\xDF\xDF\xDDެ\xAF\xB9\xDA\xF2ma\x837\xA0\x9Bj\xBAu\xA0\x9B\xEE -\xA7\xE1\x9E\xB3\xA6\xB7\xE99\xB8\x86\xE8\xC2G(\xFE\xE2f\xF3R\x9E6:\x9C\x8F\xE0Z;BvgJ\xDBdu\xCFJ\xD3\xD8\xFC\xA2\xF5\xB4\x99\xE5\xD8\xFB\xEB>\x93\xE2\xA2wZntC\x97\xE7K\xAC\xBC\xE8O7\x90,\xBEjh\xD8 :B\xA7\x9D\x8DZ\xC2MА\x8F:\xB5m4\xB0\xAFR]\x8Cr\xE3\xE4\xE7\x93\xF1~\xC1Dg\xFA\x8D\xDE\xA1#\xE5\xB68\x8F\x88\xF7a\xCB\xDF@pt;~>?='\xE5\x872\xC1e\x8D\xA6\x8D\xFDD\x80\+[\xB9\x9D\xCE\xF0qux% \xBD\xE0z\x85w\xEB\xD9\xED3$[\xBEJ@\xC33]\xBC\x90\xF3BB\xE3\xCC -\xF4\xC6q\xB5\xE5;s\xAC\xE2\xB1V\xE3\xAD\xF1q\xA3K\xD6#ƌ\xFC\x8D\xEE\xBC33\\xCD'\xCFމ\xAD\xF0؍\xE1\x80\xDDS\xEDu\x93\xCF?BQ6}/qJ\x88\x9C`D\xC5k\xA9\x9B\xD1r5\x92M=v\x89\xDCP<\xF3&\xDE`\xF0\xE6\xF6\xE0\x8D\x95\x83\xC0\xC18D\x82~<\x88\xF32\xE20]V\x9A.Ik\xFF\xFAd\x807Bx\xB9\xC1\x8B\xE7\xF8n.%\xD6\xB4B@^\xDCy\x91 -u\x96vHݧ\xE9z|Y\xF8\xECu[`\xA1\xE5\xCE\x9E\x82Ҥsr\xD9N3W\xE0m\xB5"<\xA8# -eW*>D\xCFcP\x8F~\x8A;\xD5v\xF8jI\x88\xB1Y\x9B\xA0\xBB0\x9B\xC6O\xA1\x88\xB7\xBCD\xD8A\xE6\xCBW-p\xCC\xDF_造\xB1\xC1\xF8\xC9\xEC\xB1\xE2V2\x8C\xEC\x99 N\xE7\xA37Z\xBA&\xBB -\x89\x9C\xDB_\x8B\xD0\xD7\x8D@\x9A`\x94\xF4%\xA6\x93nQ\xA2\xA7IQ~&\x8C=\x93\xAE\x9F1\xE19\xDF\xC96u\xB4M\xA5jhWx0\xE3\xEA\xCC\xE8\ږ\x90(\x90\xEBhŔΣ\xB5\xE9\xB6\xCCO\x8E\x93\xA1+\xC7f\x95\x87\xA8\xC5\xE9\xDCxs\xF0d#\xE8\x80H6\x8Dd~\x9FEcF\xA3.\xC0+\xAC\xAB\xE7^\x83\xA3\xDF\xB7\xB7\xF0\xC8\xF2\x9F\xAFх4--"s\xF6\xEBo\xB3|4\x99\xF0\xD5\xEE\x82\x89P\xD5w}Y'=W\xA6\xFBS|_ \xCB\xD1 \xFC\x97\x82\xBAujS\xD0\x88\xA0\xF8Q\xDFde;\xBB\x9B\xC5\q\xC0\xF3\xC7xJM=+--\xB5+s\xA6c\x97\x8EvJ\xC3\xDDY\x9B\xA6\xA1\xA7䐭\xB8V\xBDV\xFC*3^2v\xB5BU\xD0\xDD1`X]\x86\xB5\xE6\xE3\xB4v\xAC\xAA -\x91\xBCk/L\x9A5I\x8F@ZPqR\xC5:\x86\xF0E\xDBqNY5\xC7,q"I}Z\xD30\xCB5\xC7*\xE5̆;e:M\xDA\xE0\x89\xAC(cwݪY\xA6\x9B%\xA6\x92C\xB0;Fy\x99\x8CӚ\xD4ZA\x84J)\xE4E\x8C\xE7z\x8BC\xCD:\x91\xEB>\xD39\xA0$<\x8CP\xBEڬ\xAD\x8C-\xB2\xE1\xC9\xC5:oΙ:\x9E\xC5)1\xF4\xEA\xE8\xC3:\x866"\xAEc\xE2۟\\xAC\xB1Bí\x9BE\xB7\xC6\xD0c\xBAn\xDD.4]k\xA8l:\xEFV\xEB\xD4 \xAA\x86\xB8$\xED\x98ԛ\xE3\x85\xF3V\x91\x88\xF6\xAF\x80l\xBA\xB6\x93\xCEOfs\xE3\xD5J\xC35+nCG\xA7\x9F\xBA\xF2Iѱ\x8D3:\xF6`/C\xF2?+\x84ap5j$\xF5\xADB:\xD3\xFF۳)\xD5T\xAC\x93\x98\xAC\x89KE\xAB\xE6ew2\x91\xFB\xA7\xDAyjFeft:\xF7xF\x93O\xB9\xAAóI\xEA'\xB5\xC9)\xBE\x85^\x85*\xBDW\xE0B1dq!9홚!g\x92\x90\x9C7\xC9Y\xA3m\xA6q\xE0\xBBL8!\x80\x8D\xA7\xE2\x8B\xF0\xA5\xBE\xCAP\xC1S\xB1\xC0"\x94TL]D X\xC0Cy\x80\xB0\xA1\xDCWk\xF3\xE8\x88j\xCA=\xCF\xFAY\xFE,\x8F\x86\xF3\xB7\xA1\xFF\x9C\x9B\xCE=D\xD1\xE5\xD1b\x9A\\xDF\xC4X\xEAGtŴ\xBB\x88\x9C\xED\xEA2\x94\x98\xA6\xCE\xE2\xCD\xFC\x9DeK\xE9X\xB2\xBA\xBB\xEF\xA0;Uc\xB7\xDD5\xF8,^\x9C\xDF@$\xB8-\xAE,`\xB3\xC1\xEF+\xDF`\xD0\xE0\xFE\xE1\xF0-\xF4\x9C<\xBC4\xACӢ7\xDEB\x8C\x96\xF3н\xFDy\xB8Ȩ\x85\xBD|$\xD2\xDEM\xEC4x,8\xBE\xF6%6\x9C\xD3\xC1\xAF\xD0#]b \xA4k\xD7\xA4S\xB7\xBC\xA4D~\x8Di+\x88\xAF\x91\xC4\xA0\xE2\xFA\xF1\x8Du*9p\x8C\x9Asa\x9C\xC0Z\x9C\xA4朢\xF2\xE7я3H` -\xBB\xF0:&\xF0\xB2x\x93<o\xA1\x80\xB7Ѣy3\xF8\xB3\xF86~C -\xBF\xDAh\xE0!\\xC7ی\x8B\xAC -\x96\xC46\x84\xF7\xD8>\xBC\xCF\xE2#\xC2E\x87 \xF1\xB6\x92 4\xFC\x89\x97\xA5$\xAC\x9E\xA7\xDB5\xD1hl\xC3v\x8AVI\x92\x81\xB0R\x80OZBL~i 9qi A)\xD2R -HK\x88I\xC5 \x8D \xF2\x88\xE8h*v\xA8R\x91f*\x86\xE9\xCF\xBAg ]\xEC!/\xA1\x97m\x8C\x{25A0C94}\xF2\xF4\xD8/`\xA7'C\xA4\x99\xC2!\x91(-\xA8\xFC\xB8\xFF\xFBNAr\xF3cIR\xF7\xDB4\xA5\xA2}\xE1\xF4j\xA7\x8F\x8C\x97\xDAx\xFB\xE9 \xF1\x81\x9A\xD27\xDC\xC6Z\xD1\x9FD -I\xF7\xA7\x84\xF8\x99D\xEB\xF5\x8BB\xD6.\xF2 \xB0*\x9F\xF69\x81}\xAC\xDF\xED!Yû)=\xADke7O\xF5\xF1x\xDF˴WF\xCEN\x8Br\xBCN_1_S\xF9nȻ\xF6ѭ!\x8AۍWDa\xE9\xF9\\xBEu=^%\x93\xD6(Y>i풭\x88Rۼ\x832?_d \xDCǹxÊ6\xAC \xB7\xFFoPK --\xB1\x80-B>\xA2\xDC۔i\x8BxL?\xE0\xF9\xF4-\xDAS\xF5\x99\xF6\x94C{JC\x85NW\xB0ZThU\xA8\xAA\xFF\xC6\xE7Q\xA9\x9A>\xDCթ\x9D!\xA0H\xCDp\x97JȕI\xF2\xF3R\xF2.\x97\x90\xCDI\xF2\x9BR\xF2\x95Q凄V1GUV \xBE\xA3:\x99\xE3\xEDXg\x94\xE3\xAAF]\xFBPK --,\x96G\x8B\xD5$>\xD3\xF2z\xBC(\xF9,e\xE7 X\xCC=\x81\xE5^\xA0\x9D=!\xF5\x9D\xC26 -\xDBa|\x85\x84\xD4\xD0G6K,\xD0jе+d\xB4\x8Cj\xF7觺\xD5d\xC3---\x82ZDA-\xB0\xE0J\xC1\xAC\x9A\x98TM\\xE0\x82ğ\xD3v\xD3.,\xBB\xCD\xEEVo\xE1pm\x98x\xE1\xA5\xBE\x85\x8F\xE0\xA0s\x96\x9F\x95\xA4ܜ\x999;\xF3\xCD7?{~~\xFD\xE0.+\x98R\xA1b:\x81\xF4fT\x8C`VwTr\xB8\x97\xA0㾂9<d\x88u\xCB\x9DaH\x97\\xAF\xA6\xF3\xAF\xD4M\xBD\xCCkS玵\xA5/\xD3A\x96\xEB<uj\x96c.PȢ\xE5XA\x9E!3\xDEf\xCC\xC4\x83\t\xAB&Cw\x89.^6\xB7ʦ\xB7\xC2\xCB6\xDD\xF4\x96\xDC -\xB7g \xFB\xF8R\xB4\xE2%\xCBL\xC7\xF4\xB4\xE7ɢ\xCD}ߤ/3\xED\xA5= \xDE\xC92\xF7\xCD5n7\xCDb\x9D;5\xB3\xCA`\x9CWA\xD5=\xB5½\x9A,\x946\xF8\xAE\xDB\xAA\x81g9\xB5\xFFܬ\x8BRY\xC0\x90\xBD--\xCAMy)\xC3\xA9\xCAL\x94\x8A\x87ѫ\xD1\x8Fu\x85\xE2\xC9}\xD6!\x8C\x9Fۺa\xA6\xC00Lj\xDESGY>Jΰ\xF2\x93\xB9#\xE4-\xED[\xD8\xCB;\x99\x8A28\\x95Ńɘ\xD8 -Dzusy\xEB\xCEP\x9B\x9C\x97ۜ\xB6\xED\x82,J\xAD:_\x8EXGLE8E$\x85Q);ǍuG푫5\x84ó\xCFZ\x8C\x84\xA2\xEDA9Kk\x87Ԍ\xCB\xF0\x84keG\xBB\xBA\xE4Ͱz\xF0\xBA\xBC;\x87\xA5Y~\x83\xE9zL'M;\xCB\xEAe\x9E\x85\x8E\xF4]\xF8a\xBB#ۃ\xC8u\xDB\xDBS\x9A`\xFAP\xD9\xA8\xB8\xF9|bf\xED\xB7&\x92\xF1`[2E\xD3\xF2\x97\xE4\xBE.0\xAD\x89_kA\xF0\xE3\x94\xC5L3GL\xAA\x927V\x88\0«\xCF -\xC0K\x90\x90\xD5\xE0\xB5\xF1Pglw(C;\xC3ighi|\xD1\xD0\xDE\xE4\xCA\xF0\x8E\x8EP\\xE7\xB5H\xB1PZ:\x98\xDF\xFC\xFF\xAE\xEAa\xB54\xBC\xE6\x82xfR\xD9v!L\x8D\xF4\xBC,\xCF\xF2c8(\xE1]}j\xFD\xA7nT+ܶ\xEEVV\xBFY\xDCA\xEEf\x9A5\xADݒ06Iqe\x95AA$\x98X\x8F\xD0\x8F샾U\xF11\xA3V\x8F\x84\xA3\xBBԬgO0l{_\xAE\xB9$\xB6\x85C FC\xC0\xCC2\xA9\x82\xAC\x8C\x98}\xDF\xB5\x90\x98@\xDC*\x95\xD7\xFCm\xB1\xE8n\x94\x89+\xBAbm\xA5\xCEj\xC1v\xF9i\xB3,\xB5rD\xE9. -\x85<8iyG8\x82\xE3f\x8D-_\xC5\xC1$.\xA1\xB5;jʮ\xA6S\xF3 -\xE9 -\xDA\xD1\xD5 -\xF6\x95\x9Do\xB6\xE7\xCFi\xDB\xDE`\xDA\xD5\xF3\xF6\xCB\xF0\xFD|f\xCEȒDf|ȱ\xEC̖\xD6\xDB\x8C\xEF\xAA\xA3\xF8:Ktĺ#\xED\xEB\xBB\xDA\xC0\xAA*\xC0W\x8F\x88\xD52?}bC.̏%3\xE5\x80ɹ\xA1Ю\x96\x98|)\x8A\xD5\xC6\xE3A\xF0[V\xB6erC\xCCaS8a)\xC5\xC8\xF2X\xA7|=i\xB7C\xC1\xECa\x8Deغ`Tv]`*;\xC8\x8B\xBA\x95:kl\xC1^\xBA~Dn}al\x891\x8E\xB2\x8E[kQ\xB1O[>\xD4iL\xDBoѾ\\xAE\xC6&\xD0?P\xD4x[\xD3\x8D\xE9e\xA1\xED\xB1x\xE8B\xDDi3\xDC}\xB7E\xDA]f\xA3gg:\xE7dZJW\x91|@6\xA9\x9DBĴ]>Z\xD2<wd<\x87\xF1\xBC3\xE3y9:b\xEC\xE0\xA8z !\xD5\x97\xAA>i\xF7\xC0\x99\xE8K -\xA07A\xE3Z\xBA\xED\x87\xF0t#\xDEk\xE8\xE7\x97?C\~\x94\xB4Mϐ\xA3\x8F\x9C\xE9\xA1C\xF7&\xBC\xD6\xFB\xC8S\xE8#oyy?\xF9\xFA(\xE7)\xC5\xC9\xF5h'\x92\x8E\xB6\xB4\xEA(\x9FV\xD18j\xA2\xE9\xD4BZO\xF3h݀\xB7\xA3\xADs\xE8\xC38\x93\xD4\xE8&\xF0\x8F\xA2\x86n\xA6\xFD7Z\xB9(\xEF\xDE*\xEF%g?G(\x97\xA9!p\x84\xF2\x98z\xE8\xC7\xE435V\xBC@\xFE\xA6\xCA#T\xC0-m\xA3J\xBA\x9Aav\xB5Q\xAC\xA3 \xF7\xFFA\xDC+\xAC#\xEB\xD8 -\xAB\xB8Vq7\xF4xl\xE01X\xC0a\xD8@?,\xE08\xEE\xFEX\xC0q\xFB\xA7h/\xFDw\xFF&\xEE]n\xE2\xCA\x9Dj\xF4\xC1\xBD\xB5R\xDDJ\xB7\x914\xA7\xD0\xEDyAy,\xDDA\x85U\xF6S\xD6݉uǩ\x94\xA8u\xAF\xD0\xF5\xF5'\xE8.\xBCu\x80ף\x90a\x8B\xE8+t/\xF8q\x81\xEF\xCF\xD3\xFD\xF41rC\xA2\xEF\xD0\x{120C80}\xB7lx\xBF\x8B\xC9s\x9Aru\xFA\xF89\x98\x83\xAE\xD3'0ԩG\xA7\x83:}R\xA7\x87\xF1H\xF4\xAD\xD1\xF2ޣ\xBAsخYk\x88\xFE\x86\xF4n\xDBqNf\xF4\xD0\xEE$\xEF\xC9W\xFE,M\xEE\xA3Ii\xF5\xE6\x91C\xBC\x86\xE7\xC7FQ\x85am\xCA`\xC9A\xEC\xC7\xE4\xA3)\xCA\xFBAY6\x96Y\x94{h29\xFD4\xA5\xE1Y5\x9C\xBA\xFD\x92\x80?\xAF\xA4\x9F\xA6\x96{\xB3\xC9 \x9A\xF2BW\xD0\xD2x\xE8o -\xF45z\x92\xC3'a]\xFC\xE2S\xB89\xC6[\x83>M\x8F+\x95e34\xAF?C\x9F\xB5\xAA\xB3E\xCD`Hw"\xA7\xE3\x89Թn\xF5\xFA\xC1\xF33\xE8\xB9H\xCB]*n\x87JȦ8W\xB9!\xC1\xBD\x95dӞL9\xB6E\xEA\xE1R\x9B\xD3!\xFA\x82\xBD\xFF\xDB\xE0\xC8%\x9Cest \xE2\xC4t[YM\xD2Ca\xFD4c\x91\xB3ҟ7\xC6Y\xBA\xBD\xB0l\xE7\x9D\xD0Z \xD6c\xE5\xCC\xF2R\xB8|\xF9\x93)1\xA6Cq\xB9\xF3!\xF9(p;\xFC^\x84Sg\xE0\xDC\xF4/\xB4\xC6~ =\xA1x\x9Bo\x9D\x9F -.ux\xDC\xE5c\xE5\xB1F\xC3\xEE\x99J\xD1\xEC\x9F@_\xC2[\xA7RG.9\xA0\x8E\xB34\x8BuzRl\xEA˰_%7\x83\xA8K嶺\x9F\xFDTQ.\x83J\x89-ְM\xEE\xAD]P\xFA]\xE8\xA5\xEAƊ\xA4W\xF4\xD3\xE2r\xCC\xD4\xC8\xCC \xBCG'\xAA\x93\xB9ʦ\xF2\xCA^\x9A\x83\xDF,\xFC\xAA\xF0\x9B-Jv\x9ANh0\xF0y*F\xA4\xDDI\xBB\xD0t\xE2r\x96\xA4W\x83H@(os\xE8\xE7\x88\xAF\x81\xF1\xD7\xEE~ \xABx\x83\xA6\xD2!\x9E\x82G\xFCB\xFC\x8E\xAE\xA0\xDF\xD3Fέ[m\xF4\xC7[kO)\xAA])-\xDC\x87Ӟύ\xCB\xE2\xA6\xCE\xE6\xA6ܬhT\xF3Cs3\xDC\n&\x81\x9B\xC9\xE0\xA6tn,[\xB5\xB8yf7ς\x9B:7\xEE٠; -\x89\xE0k❥\xC8o\xF5\xF56,{\x9A.;B+5\xE8q\xFE\xC4\xEDy\xABv;\xAA\xF5b\xBD\xD8\xFD\xB8v\x87\xE9*\xD6\xE7yR0\xCD+c\xA7)\xA4\xA5pZ\x8E\x99c#\xA9\xEF\xC9\xC8\xC6i\x86i\xD88-WF -\xA7\xE5\xC9H\xE1\xB4|3\xBF\x97\x96\xA4\xD1\xD2\xCF?AS}/\xAD\xEE\xA1۹\xC6\xEF\xA8.P5\x85f\xE1 g\xF6Ӛ\xBFL-\xEC\xA7\xBC,\xAA]]\\xD0CSer\xC2A*1\xBDf\xAE\x99g\xBEF\x99\xF9\xD1\xF4₃4Y\xAD\xEA!3k\xD5DYB\xACY\xD3\x84\x9A\x9C\xD6ԒC\xE7*D\xC04^LK\xF9zJJ\xBFH\x99\xB92\xB6\xF1b\x9E\x99g˗\xA7\xE4\xFB\x82\xEA\x95|\x8FpM\xBE\xA3گ&j -\xCC\x91\xAF@\xE4˗)%\x9F\xDF,P\xF2\xF9{\xA8T&!\xDFx\xD3\xCBf\xAE3-^\x9E%b\xFFA\x9A\xA4\xF5\xD0\xD8\xCCE"]\x9EH'drED>B\x97;H=f\xFE \xCASb\xE7\xABI\xB5BO\xA1\x97 -!t\xF7?!\xF4\xA5i\xA1\xE7\xB1%\xDE|ܢ\xFF์-\xA1\xFD"\xEA-z\x89\xEB\xE9e\xBE\x8C\xFE\x8DW\xD2x5\xBD\xC1k\xE8mn\xA4\xF7\xB8\x89=|9\x8F\xE5+x"7s\x80[xo\xE0\xF9\xBC\x89\x97\xF3fn\xE4-]\xC9!\xDE\xCA\xD7\xF0U|\x80\x83|\xB7\xF2\xFD\xDC\xC6=\xDCΏ\xE2\xCD\xE7x;\xE6\xFCe\xEE\xE0>\xDE\xC9\xC7y\xBFʝ\xFC\x8E\xF2o8\xC6\xC1\xCEӜИ\x93Z\xEF֊y\x8F6\x89\xF7i\xD3\xF9:m&ߠ-\xE2k\xCB\xF8F\xAD\x89o\xD26\xF3\xCD\xDAvޯ\xDDķj\xB7\xF0mڝ|\xBBv/ߡ\xE4\x8Fj\x8F\xF1\xED\x8B|\x97\xF6ߣ\xF5\xF2\\xED9\xBEO\xA2-\xC0\xF9|\xB0\xBAP\xC9\xE7\xFBQ-\x91U\xF8CvC\xA2\xAB"#{2\xBB\x80A&$\xFF\xF0t\xFA\xAEN\xAF\xA8\xBF#\x84\xD4Y\xA6è-yV-\xD8ָ\xCAs͑f\x964U\xD2(t\xAB\x8Et\xEBUU\xC7\xFC\x80*\xBCꈌ\xBA \xC8I|\x8A\xFC"\xE9\xFC\x94\xF9%Z\xC9O\xD3\xFCU\xDAȽt}\xD4\xCE\xFDt\xCFP\xA2z7?d\xF65\xBA\x89\x9FG\xFA<Fw\xF3\xD7\xE9~\x81z\xF8\xF40\xA7O\xF1\x8B\xF48\xBFD\x87\xF8=\xC9'\xE9[\xFC2\xBD\xCAߡ\xF1w\xE95~\x85~ů\xAA\xCB\xD9g\xDB\xC0\xFB\xEF\xAA\xD8 -\x84\xF8\xB9\x8F\x97\xA0\xC2\xE8\xC3\xF5>I\xD5 -\xBBJR8\xEFT\xEA:O\xD9\xD7\xE9\xA2_\xC0Q\x88\xEB\xD4\xCF\x849h\xFF\x94~\xF7\xB4\x80t\x80\xBCgɧ\xD3\xC2\y\ଘ\xEE\xF3֟\xEF*\xD5\xCE\xD0|^\xBF\xAB\xAA֟`\xB3e\x95\xB7\xDAVY*f\xB8.\x80\xAEE\xCC@{T-\xF95ï\xC34\xB0\xF5F\x86y\x96\xA6\xE4)M\x99g\xA9\xFCk\x9A -\xB6P\xCFO\xC1\xE4\xCF씂\xF2]\xBDi\xF1$\xFEa\xF12P-\xCBԚ*\xA5b+?IΧ,;˫\x94gX\xDA!ʓ\xEB\xA9Z:y\x84aW\xAA\xBC\x9D#\x9D\x98~\xA0ҪfE\x96\xEAJ\xCC\xCCOk\xF4R\xA0r\xE2?\x91\x9B\xFFL\xE3\xF9\xAF4\x89ߡ\xFC.\x95\xF1{T,Z\x83\x82|DY\xAB1m\xD44ڦ9i\x87\xE6\xA2\x9C\xFA\x91\xB5ܒ"%kܖ\xD5MeeR\xF2oTV\xE6Pz\xCF#\xE7 \x90b>\xBB_O\xE9d\xB6]\x88\xEE\xB7du>\xF5>\xBAQni\xF1 =\x9C\xA0\x82u@O\x95\xF2Y`\xBER&\x94\xB1PB\x81he\xA1\xAC\x97RV\xB4\xB2\xB0r-ݬMͨ[\xF7\xA7\xB6\xDFVXu\xDB -+\xA5\xABm\x85ͤ\xCDp\xC2>\xDB\xDD -\xC8\xE9\xC1\x85X\xBA+ö_\xA2\\xB6\xB8\xD66`\xAF]\xC6oN\xAC\xFC\xD7l\xD2\xCA\xC1 \xC3@\xBD)\xBC\xA8\xB7\xA5\xBE>\x9D\x96ܖ\xC1\xE4\xE6\x80\xDC\xDC@\xEE\xD7\xF4\x9B\xDC6\xFB\xE3\x9470uZ1n\xED\xCA\xC1䖂\m\x86\x862\xC9 -8\xB0\x97~\xAB\xF2\x8B\x8C~\xA7\xB0\x81\x8C~O\x8F\xABoqo\xD2[\xF6a+\xED\xF8\xE2\xA0^\xDA:\xF8\xA4\xD5\xE4\xD2\xD6d\x84 -w\xEA$w\xEA$\xB7\xA2\xAA9\x9D\xF2\x9FBTm\xF6\xC7ԧ\xC8Ij\xE6ϓ\xFF\xABt\x99\xD0\xE7\xF4w:`\\x8D\xFEG\x9D\xF9\xBF\xB8I\xF9\xAE'c\x96B\xEERD\x83\x8Aз\xA2w\xA3o\xF7~\xE7{\xDD^3/Н\xF7\xEFPK ---!\xB4\x{121989}\x8F\xB3۱\xEC\xCE6\xB3\xB3\x8A\xBE\xF8\x97\xF4\x89D\xE3\xB3?\xCAxg[cl+\x86ė\xB93w\xEE9wΙ\x99\xEF?>\xB0\x85\xB5" -Xtp\xC3\xC1\xCD"2Xrp\xDB\xC1\xCB\x85m\xA9\xA4yʐ]\xDF\xE80\xE4v\xA2\xAE`\x98mH%\x93\xD0\xFA%\xF7\xCAT\x91σ\xD7Ү\x87ɜ9\x921\xC3R]\xEC\xF1$\x8E%W/\x82D\xD7 -e\xEA\xDC7\x91~\xC7P\xDAWJ蝀DZ\xA0\xEAf#\xD2=\x97\xF7\xB9$\\x8Fy\xE2r%C\xB7\x85n\xBB\xB3\xB7\xDBj\xEE\x87\xFDmFj\xE5<\xF6*)\xF0\xB5\xE0\x86N\xF3l\xBDq\xCC\xDFp7\xE0\xAA綍\x96\xAAWM{\xBD\xDD\xF2S\xF6\xDD\xC8O,\xB6\xBA\xF1Gz\xC8h\xA9\xFAZ\xBC\x96\xA7V\xED9ԍ|\x86\x85ɔ\xC5v\x94h_ԥufq\x92\x92MKZ\xC2\xA6\x9E\x9CkB\xABY\xAFMͰ:\xB3\x88\xE7^l4\xF2\xEB4\xB6\xC7}+\xFF\xD1k\x86\xB9߮\xB4\xBCc\xE1\xAB\xE4\xFB\xC43\xD5N\x8DP\xB1\xA4w2\xDEe\x94wf4\xB1\xFD\xB7\xAB\xFC\xA7\xF4\xAA}śS\xCD\xF0\xF8\xA2\xB0\x8C<}*\x87~X\x86"]*\x8DEZ\xB9\xC5\xFC\x833\xB0O\xE9\xF6%m1\xB2\xEFQ\xA2yiP\x802\xE6(2\Fe>@Y\x8A\xE5/ȼz\xF8\xE8\xB2g\xC8}!\xF9\x90\x92\xDCI\xEClWR\xE22\xAEb\x81\K\x91\xD71K\xB1B\xB3<na\x86\xD0\xA1\xEF\xA6PK --\xBBIO2,\xB4\x94\x96φq(\xCDsF䩵\xC1\xA3.7ʭ\xC7=P)\xC3R \x83\xA1\x8F\x9B\x91\x8C\xA5\xB661\xEF*{ZK\xB3\xF14\x95\xB4\xD3\xF7\xF9\x80\x8B\xE9\x87ܪW>\xD7*\xF6{I\xECw\xBAO\xED\xFD\xBDx0B\xD0f\xA2\xD7fb\xEBT\xB30\x92[:\xFF\xE1F됿\xE1~\xC4u\xDF\xEFX\xA3t\xBF\x9E\xF2v[d\xD8F"\x86.\xB7\xBE\xF9\x9B{Lt\xA8\x81\x91/Ց\xD37E\xA2\x9E\xF4\xC1\xB0<\xC9P\xEE$C#d\xA0\/VfI\xD8r\xD0 -Na\x8E\xE1\xDE_շ\xF7\x83\xE6\xAFj֧\xE2]\xE8\xA30\xB5\x86:\xF1\xA3\xBF\xE9a\x8D\xA1\xF1?\xBA˰\xF8\xB3\xED\xF0P -\xEBa\x9D:=\xB3\x98摕:U\xF4\xA6\xF1\x93\xDC\xF9I\xC7Ο.\xEB\xEE\xA5n\x9DL.\xC3\xFD\x93J\xC0*\x8A\xF4q<\xFAE9\xB2t\x8D4\x96i\xE5\x93ed\x8B\xB7\x8F\xC1>dۧit\xC1\xC8G\xA8м2 -@\x8BdΠ6N~\x8A\xF2d\xAB\x9F\x90{q\xE7\xEE\xE4\x8FQx?y\x9DA\xAE\x8F\xC77;\x8Bs\xB8\x8A%,SF\xE7\xB3\xCCX [\xA3YW0O\xD9e\xDF(\xCD}PK --\xC7-\x86\xC9P*\xD1.Ҟ\xC8?\xF1^B\x99F\x98E<\xE9\xF2\\x9A\xFF2\xE9\xE8#\xD9gh\x85Y\xFC\x94GG"\xE8q-O\xAEdfi\xD0\xE9~\xF8xpP$Z\xEE\xA7<{\x89H\x85қ[\xCD\xF0\x98\xE5A\xC2Utt.U\xBC9\xCE1\x88\x9D^_\xE7<\xD2ﲨ\xB0\xC5ƨ{\x9A\x8B/\xF2\xCC\xC30T\xB3\x819\xC3\xE2?\xEA\xB1ж\xC56O\xA9\xB3\xFBͥ븞\x83\xB6\x9D\x90\xF6`#\xB2H\x93%\x81\xDFɊ<\xEF\xA5\xCF\xFC\xF5ͯp5\xDC2\xCB$Ë1\x93\x85\x96\x89ݫ\xD6n\xA6\xFA\x9A+Mc\xF6\xD3\x89\xE1\xE5\xFF\x8E\x9Ca\xF5ƒ\x8E\xFE\x96\x98[-\xE5xNOă\xF9 -2r`\xA3----*4\xAFP\xC5<E\x86\xD4F\xE0C\x90\xA7X\xFD\x82\xDC\xEB\xBF!\x8A\xC2\xC71\x92gɝa\xE1\x88\xC4\xCD.\xE1rF\\xC5,"\x87\xAB\xF2\xE6(\xD6hV\xC4M\xCC\xDA#\xF4\xDD\xD2\xCCOPK ---\x86\xB3\xC1\xA6!\xD5\xC8ě\xDCr\xEF*nY\xD4\x86\xCFH</\xAC\xA2nf|\x97<y\xB1\x93;W\xA8\xB9\xD7\xDD[\xDF\xF6\xC0\xC0'\xF2Ѫc\xBC\xBB{\xC72\x86\xA1s&`Yt\xA1\x90i\x91%\xC3];V\x91\xDEd*\xA8&*\xE6\x9Ae\xE9\xA7\xED\x9CKۮ\xB1B\xE6 -n\x8A\xCFR\xC5\xE1Ow*C\xEC1\xCB\xD8Y\xF3\x8A\xD2\xEB\xC3w&u O)\xA0\xA3f\xB8G\xDB`*y\xF1>\x90\xA61\xBAxG\xE98W\xE6Lŧ6U7\xD1d\xF3\xF9%\xE1\xD4\xDClY\x98Ebλ\\xDFZ\xE5U\xBFu\xBA\xEA!9ވ\x88\xE7\xEDmG7\x96\x84\xFC\xDC\xDB\xD27c\xD2w\xDD\xE8\x91\xC33\xEDPUt@eH\x9D\xBB\xF9$\xB4_E'\xBAbx\xAEb\x83*Rd9\x9D"\xBF\xB9\xBC\xEC\xF0jY\xE85\x9F\x85a\xE6\xFF;X=~QG\xEBui\xBA\x89\xBB\xF4f\xC4\xE9\x91 C\x91F\xD0J\x91^x3ݎ\xE68\xAD\xC8,Џ\xEB=FT^\x9A#\xE9C\xB0o\xB4\xE1\xB2\xA21C\xA1S襕Z\xC2\xF4\xD1̤[>A\x95REhN\xA4\x87GJ\x8F\xEE#\x9CP\xF6\xA14\xD9\xC4\xCC#\x8A,\x89Z\xA0\xE4\x8Bk\xA6\x8E\xF4Y\xE5ꪟ)\x81\\xF34$p\x9D\xCE\xC2\xDE\xEA\xAD\xFA~\xB7\xFC\xECZC\xFEw\x84\xF7 \xA3\xDE\xE1\x8B@\xE9\xB7\xC1J+x=-n07e\xA0\xADU\xD6\xD7@Y#^\xD4\xE8?PK --\xF4"X\xCB-\x90hJK\xF1\x82\x93\xE44\x9A\xCC\xC4ɤiA\xC0""\x82˵|\xF3A\x97o*H\xBB\x96]\xFA\xE6\x8B\xCB7\xFF\x8F\xCB}\xA6C\x93\xA1\xB6\xAE\xAE\xCE>\xFB\x9C\xF3}g\xCF\xDE\xFB|\x93?\xFE\xFE\xE57-\xFA\\xC3+2\xDEUpU\xC15\xD7\xBC\xA7\xE0}(\xF8P\xC1G -n(\xB8\xA9\xE0c\xB7d\xDCfX3\x9DI\x8Fغ\xE1\x84\xCD \xCB\xCE\xE8\x8Ea\x99\xA1\x88e'5=\xAB\xC7S\\x8B\xD1䤖w\x8C\xB4v\xC4\xCA\xC7\xD23a3\xC1\xA7ybD\x8F\xA5y/C\x93\xEE8\xB6\xCB;<l\x8E\xA1\xA7\x8D\xCB\xDCf\xE8\xAA\xE4\xD0M#\xA3%\xAC\x8C\xD6\xEF\x83 &6͠-\x8B\x8E?=\xD8O\x9E\xEE\xF0D\x84\x9BI'%P3\xD5#\xE1\xA4jR\xDCH\xA6z\xAF\xAC\xCDsܞ\xE2\xFD\xB9,\x8F;\xC3\xE2\xC5\xFA\x96K~\xA6M'\xD5\xF4\xEF!\x86\xAAֶQi\xC0Jp\x86ƈa\xF2\xA1|&\xC6m7%jĊ\xEB\xE9Q\xDD6\x84\xEFMJN\xCA\xC81t\xFCWጞ\xE4G\xD3<\xC3M\x87\xCE\xECk\x8D\ҧt-\xAD\x9BI-Ji3\x93\xBD\x95nRc9\xC7\xD6\xE3\xCE+\x9Ew\xC1"\xC6\xCAÄ1-b\xAA\xA0\xA1\xB4YS\xD4j\xD726Ŋ\xF5\xA7\xD3\x83R\xF4\xB4\x96\xF4r͋\xAB\xE5K\xC1$wܴ\xE9\xCAFSk\x9B_@\xED:ϰ\x83VED\x85}q7\x90\xDCTR$\xA7\xA2\xF4b\xFB8\x83Bfl\xA1jix\xC2\xEB\x81u4\xF6)$\xC3ޥ\xE9\xFD\x8B\xBF\x9E\xD8\xFC\xFAv\x91nE\xBD.\x9B\xBC0\xE4\xF6OSY4b\x9664\xD3y\xE57\xD3k\xA5v\xBF\x9F}A\x95\xBEx\xDAk\Fi D\xAD\xBC\xE7\xC7A\xB5\xAE\xA2\xE7:EY\x828\x84\xC3\xE2q4\x88Sbt\x87\xB6\xF9J\x96\x99stӡB\xB3.j\xF2\xDD\xE1 >\xC1\x9D \xE0`\xDD\xE2\xD1#\xBD\xE2\xF1)\xEEчW\xA8U -c/c?\xC3\xEEܡ \xC9\xF4K\xAD\xCBM\x98x\xEB\xCFH\x9F}D\xA5^n~fbFf\xB2\xA2\xFBۖ\xE87nqm*\xB98\xFE^\x9F\xE3>C\xE7ʺJ@\xBF`\xA8\x9F4\xE3\xF4ߒ\xE1\x82\xEF2l\xF7\xBD\xE0n\x94\xE7#\xD1|6k\xD9\xD4\x9BR\x8E\x93\xEDѴB\xA1\xD0Y\xD8瞿\xB7\xAB\xABK\xA3\xAF\x84\x99\xD3\xEA\xDCA\xCF4\xF5\xD3$\xC3\xCE%HI'\x8B\xB4+i\xF7twwkO\xB5g%\x87\xB2E\x9A\x9532YW2s)\xAB@˜\xB45AW\x86\xA4(OmC;,3b\xE94up\xC9F87\xE6\xDC\xE6f\x9C\xB7\xF5lʈ缮`\xD8\xE2\xA3A5\xEDנ\xE0zI\x9C\xB5\xF9*\xF1!\xF0\x88\xEES\xCA\xC4\xDA@(\xC4\xD4U\xAE\xAE\x9AE\xED\x84[\xA7\xCA҂n=\xAB\x96\\xAFAx\x8DLZ\xF0V\x87B\xB3x\xEE \xD4\xC5B\xF4V\xC0 -:\xF0&q\x8B~\xDC\xDE\xC6f\xDC\xC1N\xDCE;\xEEQ}\xEESPhK\xC2(\xA61\x82A/\xBC\xEF=\xAB\xD45?\xE9kܩ\xAFK\xA0UE\xE8N{P\xADX(\xE3[\xBE3\xBE\xE0`9\xF8{_\xF0Y_pC9\xF8_\xF0\xB0/xu9x\xD6ňX-\xFF\xEA\x96p\xA3\xB8\xD3K\x8F\xD0T\x8E\xFD\xBD+\xB1c8\xEFa\xF7\xD2n\xB1\xA6\xCCc\xED\xF8֕\xE3\xFF,\xC1+E\xFC8.T\x9E\xBD\xBE\xFB\x97\xCF\xD9 -^\xDA\xC2Lxb\xED\xBBy4\x8F?\xC2\xF3sx\xE1\x94h\xE6yl\x97j\xA49l\x9EŖ1\xD1\xCF3Ջ3\xF5{\xCB\xF6<\xC6\xFAy\xB4\x8C+s\xD8\xFAM\x94\xC6\xD4mꋳ\xD8Ncu'Sw\xA9m\x9EӦ\x86\xD4\xDDj{\x89סv\x96x\x9A\xDAE\xDE\xE2-ُz\xB7du\xA4]\x9BHq4R\xAC~R\xAB()\xD5\x8Db\xF4\xDE& \xCA\xBA\xFF\xB7\xE9\xEEE\xF7\xE2[j\xF0\xA7٨#\xFF -W\xEB\xDEtY\xDF\xFAPK --\xED_\xC4T~\xEB1\x8A\x8Au\x8A\xA6\xA4\xCA&̢C\xD0\xF3ye\xF7ZF\xB1\xA8\x98\xA7\xEFe\xCDiY\xAD\x94\xFDkLۊ\xB9\xFAF\x86\xFAo\xA6Ռc\xF2\x84\x9EH21e\xCCq\xCB\xC8g\xE3I\xC7\xE6\xB8v])\xBBIM\xA9\xB4\xD3\xD5\xE6\xDA0$\x{D896}\xEB\xE8_f\xD8%J\xAA\xA7Ղx\xBCJ'sv\x96\xBD\xD9\A{\xC986\xBA̸\x81\xFFd\q./\xD7\xC3\xDA\xC3Y\xE5\x8C֬\xEA.zZ["m\x95\x8Dt\xDBMY\x99\xC6n\xBE\xE3\xB7MI\xC7HO3n -5\xB03 -E\xE5ȫ\x99\x9Au\x94\x8B@\xD8Y\xADX\xEA\xA3fN\xDE5p\x82C\xB6*\xE4\xB0E\x84\xA3\xB5B\xE1\x95y4訜Wi&\x9F\xFB\x9E\xCFMڊq͌!0Zjִ2\x8Aܿ\xB6\xAC\x94K\x8F\xC7\xC7\xF2\xC4b̚1좲㣲\x95G\x9A\x8Af\xB9\x9F\xDD^\xE5\x93\x85Y;\xADL\xA9\xF9\x9D\xAB\xF5\xA0DK\xC7>\xBC\xA6\xA3=\xE6t\xCC㦆p\x90m}N\xF9\xF7[*\xA7\xF2\x8E\x8EcxC\xC7-t\xE8\xB8-\xCB\xDC\xD5q\x9C)\xA2S\xC7Gh\xD6\xF11>\xD1э\xAF -\xB9W\x96n\xF4\xEA\xF8TN\xC7\xD1Ihy\x91\xE0\x88\xB5\x9F\xE9\xF8_\xE8\xF8_\xE9\xF8\xDF\xE8\xF8\xDFU\xB2\xB8b\xBC\xB8\xDCJ\x99uL+\xDEm\xDBƂ\xA8\xBD\xDFsg\xFE\xFF\xA6'\xC4\xD7t\xA4;Utl#\x{DB14}\xAF,\xFCe#\xDDr\x9B\xB4\xF3\xDE-H\xCBᰌ\xA6k\xC1 -\x8BV^\xF73uU\xFC\xA3\xB1G\xA0\xE8cT-2U\x85\xD7y\xDD\xC0<\xA0&D\xF8\xBC\xCD\xE3B\xDA\xF7$\xDAUf\x8E\xAFk\x9C\xA9---\xE1\(\x94\x83 --+5\\xD1 - \xCAQچ\x8B\xA2 -.\x9D\x8DI\xBBv\xE4x \x8FW\x91@\xE2x(\xC4\xD8]UQv\xA4\xF1x\xF4ϧ\x99Y\xFF\xF8\xF9\xF5;\x80V\x9A\x88\xB0\xE4\xDC\xE5WX\x8Ep\xB5\x89:\x96"\c\xB7\xA5\x92\xF6!C\xAD\xBD\xBA\xCF\xEC\xE8\xBE`XL\xA5ݲ\xE8 \xF3\x9A\xF7rʴR\x9D\xF1|\x9F\xE9\xEEU2\xB0C9f\xB8\x9Fj3H\xF8\x88gC\x91\xF4\xB8\x95\xAEd\x91\xF4u\x91\xBCy\x9C\xBE\xDA}\xC1U?\xE6\xB9\xD1\xE5\xE8i. -\xA1\xEC\xC3v;}\xCF?\xF2$\xE7j\x90\xECY#\xD5`k\x9E\xE4 \x8Fzckxf\x9F\xE8\xAC\xF4Ů\xD5pd\xC4;\xF9ɵ6\x87a\xA8\xEB\x89\x86\xE1\xCE?⁰~\xC8./h\xB6\xB3\xED\xD5\xDFq#%&]\xBF#'p\xECI'\xF3H\x97%AsO\x97&Ϥ[\xD0\xF2\x9Fƿ\xE7\xD018\xE6\xDC"Í\xB96K+s\xB7\xBE\xADƖ+K\x8B\x8E\x873$\x86\xCD\xFF_;\xC3\xED\xBFUB\\xA7'\xC1}5 -\x9A\xCD?(F\xD4צ`_(X\xC0q\xF2M:\x81\x9B$\xBD\x85\x98\xA2\xF8@\x848I'sCV\x80\x97\xA8\x91\xD1\xDA\xDD\xF5)\x8E"\xD6b\xC3#Vd\xC2E\xA7p\xDAc#\xB4p\x86\xD4\xF4p\xAE\xC2nT}\xD5Z\xC1\xE7Cd\xE8S\x9D\x99\x8Ej.\xC0y\\xA8J7= -h|C\xFD\xED\xE1\xD1\xFA3\xF5\x8DÉ.zե_PK --ς\x9C"\xB3(\xD2\xEFbp\xE8\xAB\xE5(ҽ\xD2X\xA6\x95K\x91Q,\xDE9\xFB\x90n\x9F\xA5\xD1\x83}C\x85\xE6\x95~\xAA\x98\xA4\xC8p\xB5x\xE4)V?!\xF7\xF2\xEE\xBD/\xC8\xA3\xF0~\x88\xE4{Jr\xB3_8 \xB1\xB3\xF3\xB8\x90WqS\x84\xC8\xE1R\x8A\xBC\x8C \x8A5\x9A1\x83qB;\x84\x9E+\x8D\xFDPK ----\xB4\x82\xB1\xA4XL \xA6\xA8\xB8I\xB6aa\xB3w7\xA5E\xC4(\x8E\x8E3^\xDF|\xD4'\xA4\x9D\xB1\xA3>\xF8\xA6\x8F\xBE\xF9\xBF\xE8x\xCEfm\xDAd\xB1a\x9C\xCC|\xE7\xF2}\xE7w\xCE\xF7\x9DK\xF6\xB7\xBF\xFC\xC0˳\x86h\x80'\x8DKiȸ\x94F\x8CK=zأG<zԥ\xAB\x89\xA31G\xA8ϸm42\x89\xF3\xBE'f\x8E\xD1! -Xt\xD4\xC6q\xF08s\xE1Y\xA4\(\x91\xC0yt\xD0\x88&v\xEF\x99\xC7*\x82\xE9h\xC0t\xBA[7\xA2\xD1\xC1-\xAA\xAF~܃bn'\\xF8(\xD2%\xCB--\xEF\xE3\x81\xEAx\xC4\xF19G.\x85V\xE4\xF0\x98\xE3^\x92\x9E\xAB:֤\xFD@\xC7z -il\xE8\xD8\xE4\xF8\x82\xA3\xA0\xE3 \xC7S\xB9V\xE4\xD8\xE2(qls<\xE3\xF8\x92c\x87\xA3\xACcW\xC7s\x86 Kߩt\x84]p\xE1XM\xE7'\xDBg\xC8=\xBFnZm\xABڰ͊%\x9CC\xD3r\x9D\x96Y\xF3Z\xE6JL\xC4Cb\xD9!\xFB!\xC3hff\x8FA[\xF5j6\xC3\xF9\xA2\xE3ڥN\xABb\xFB\xBBV\xA5I+FѫZ\xCD=\xCBw\xA4.j\xA2\xE1go[\xDE\xDB\xDC\xDEZi\x8A\xCD\xE6\xCBvc\xBDi\xB7lWж˙\xE2\x8F֑e6-\xB7n\x96\x89\x99[_FQ\xBC+\x81\xF0\xAD\xAAX\xF3\xAA,i&ھ}\xE0\xF4$\xAD!\x861\xAF\xEB\xCAr\xDC|CD\x86t\xDD*\xC1\x92բ\xBC&23q\xB8\xE3\xE4\xA5\xF2ر\xC8 -\xFA\xAD1 I\xA6\xBC\xB9\xA4\xD6{U\xBB-\xCF -tЫ$\xC1mx~\xCB4\xFE\x9D'\xC2\xC9%r\x88k\xC3<|\xEBV\xEB\xAE\xDD-\xA9\xF6N\x84\xE1݅\xAA -\x90\xAB\xE4\xC0\x97\xAB\xCDP -\xA9\xB2\xD7\xF1\xAB\xF6\x86#\xDB|9\xAE\x89Y\x99n\xE1\x9A\xA6\xA6\x86u\x84ӔX\xA5\x8C\x85\xE5 -\x92 -\xB7B\x944\xBE4\xF6\xF1uW\xF1!C\xF6\xED4tf@\$\xCBon\xC4JB1}\xB1U,w\xDAm\xCF'\xF0\xAB -!ڋ\xA6\xD9\xEDv\xB3\xDD\xB5\xD5|.\x973{\xAD\xA6\x98\xD4|5Y\xECQ\xBD\xA6\xCF-'\x8Do\xF1\xA97\xD5\xC4\xCB6?8\xAD\xB6:lA\xC3\xEBJq\x8B\x86\x94\x80N -\xEEXBzxnѳj\x8F\xCE,\xE1\xF3\x9D\xC9\xD0\xF6m\xB7j\xEF\xDA=\xF1\xCC)FRjTө~UGu7T\xF8\xC9~\xA7\xB5\xED\xADH\xD6\xE7\xFA[*3;\xE7\xC3%\xB0\xF2o\x84\xB5LA>\xD2V\xADa2<\xFD\x9F\x88q{\xE0:\xE4\xDF>\xF5Xݤi\xFA \xA4\xA0\xC9B+\xD7\xD5\xE7\x81\xD1\x8C͞\x80\xBD\xA2\xC9\xA6\x94\xD3\x8Dr}\x82\x8Fi\x96>u\xC2 -|BO&OWP\xC0(]\x80>;w\xEB#\x83;H\xA0\xAC \xAE\x9D\xBA\x85rv\xABc\xB3\xE4\xCD0\x87[!\xEC\xED\x90ר\xA1\xFDA&\xD4\xD2~\xA3ш\xD1\xED(t\x9EV\xE5;>ˌ\xB1c$\xE3\xE8\x8B\xE7Q|&y\xC9\xF8\xCAZRO\xCA\xF8\xB9c\xE8\x839\xD5)\xAC\xA1@.\x9E:F9%\x91S9ݡ\xB9F\xCFy\xBAb\x89\xF1bn,\xB1\xBB\xB1\xC4x\xB1\x85\xFD\xB1{\xC44|\x8A\xCFBbٰ\xD8\xDAoH\x92\xFA\xB9\x8F\x94\xE2i\xB8\x8F|\x94\xD4\xC8)\xE1\xD7H\xED\x9F`|0\xFE\x97\x98\xA48#z\xA4*\xF9[}\x8D\xF4\xBE~\x82w~G\x92h\xE7\x99\xF1\xAEa\xE3=iƄq\xC1\xB8\xD8g]2&\xFB\xAC\xCB\xC6\xB2^\xA9zɭ\xAF\xD0栺\x8F\x93,&\xA9'\xD3D\xF3.]\x8F)i\x86%Eq\xF9PK --\xBD\xC4=\xF9A疬\xE9e\xBB\xA6/\x95\\xCFᆷQ|QVū\xCEqAZ\xD2[d\x98\xCE\\x8A\x99-2Ė\xED\xB2`\xE8*HK\xBCީ\x95\x84\xB3\xC9K&\xED\xA4 -\xB6\xC1\xCD"w\xA4\x9F\x9B1\xDF"Õg\xE2=\xDF1\xBDe\xDB\xF2ľǠ\xBD\xB2,\xE1,\x9B\xDCu\x9D/\\xC6F\xFA\xA4\xBD\x8FZ\xDEsSԄE\xD2}\x99l]mo֨\xF3\x83\x82\xF5l]\xEE\xF3 -\xBD\xFD\xA6\xBD*MSք'\x86h&\xBBB\xAE\x8E--:\x8C\xF5\xDA\xC5\xDC\xEA>4RX\xEA\xE4\xE5F\xEDD\xBC~$t\xC7oZC\x88JZ\xE9\xC3v\x98r\xEF\xC5\xE1\xC0a+\x9B\x84G\x8C\x8E\xAAo\xE4[u\xEA&\x9D`"u\xDAqȰ0\x9D\x92\xA1،&\x94ʩ\xB28m\x8E-G\xEA\xE1 -f\x9E\xFFU\x82F}\xCA\xC8\xEB \x97\xFF*H\xAC!9~\xF5\xE2*\xACr\xAC1T\xFF\x9B\xCE\xF3\xBFi'2\xB4\xEB\xA4\xF9Ԏ\xF6O\xADԉ\xA2\xF71Yc\x9Cwv<\xB0s\xD15\xFEs\xF0\x8A{\xBD[\x97\x9B\x99\xE1\xD9eG\xC02\xF2\xF4\x998\xFD\xACY\xBAPZ\x8B\xB4\xF3\xC92\xB2\xF9\xC7\xE7`\x9F\xD2㫴\xBAd\xE49<\xF2\xBDaJ\x98'\xCBp -\xE5\xF89dɖ\xBE \xF3\xE6\xC9\xD3oȞ#\xF7q\x8C\xC4KIG$λ\x8E)q 7\xB1@\x88n\xA5\xC8ۘ#[&/\x8F{\x98%4'\xF4Ja\xE6'PK ---^V\x95@B\xACy(\xC4\xF1$H\xA8b\xE3c\x9F\xCB\xE7s\xB1\xBF~\xFB\xF8\xC0\xEE\x95PĢ\x8Fk>\xAE\x97\xE0ᆏ[>\x96|,3\xB7\xA5\x92\xF6Cnm\xBDÐ\xAF\xEB\xAE`\x98kJ%\x9E -\x92P\x98\xE7<\x8CISm\xEA\x88\xC7n\xA4;\x8F\x94y{$S\xB25\xC4a\xBA\x8BD(\xBB\xC7#\xAB\xCD\x86\xF2\xBER\xC2\xD4c\x9E\xA6\x82|\xEAMmz\xEF\xF3\xE8H!\xB7\xF2e\xC0\x95L\x82\xAEN\x82v\xE7I\xA3u\xB0\x9F\xF4\x872j\xB52ɬQ\xB6\x91\xDC\xD2͏ך\xC7\xFCb\xAEzA\xDB\xA9z\xB5\xEC\x86\xD7[Q\xC6l\xE8h\xE0bk뿩GD\x87\xEAq(O\e$\xEAFWGӑ\xA5\xB6\x98H\xECIׅ\xC5i\xF9o:h\xE70ð\xF1\xD7\xD2[\xBF\x94ʰ:\xE1\xEC\xFCv\xC2\xD4jÏ\xF9\xAE\x8F\x86\x9D\xFF\xEE+\xC3\xFC\xCF\xB4\xC2cY\xAB\xD4㩙\xEC\x9EX\xA1RI\xF3\x9Fd\x8Fsg\xC7\xDB\xDB?\xAE\xB9y\xB6Z\x9E\xB5,\xA3@\x9F\x85\xC1\xA7\x9F㑤\xD2Z\xA2S@\x92\x91,l\x9C\x82}\xC8\xCC\xE7iu\xCE\xF0ޢL\xFB\xF2\xD0̓d\xB8\x80\xEA(\xF8)\xF2ȑ\xAC|\x82\xF7\xE2\xFE\x83/ȝ"\xFF~\xF2.\x83\xDC:\x8E nw\x972p\x97\xB1@\xAEd\x91W1G\xB2J\xBBnb\x96\xA2}\x8A\xBES\x9C\xF9PK ---\x84ڴ\xAAH R\xAAH\xBD\x93\xB8ݵ#\xAF\xE1_\xC1\xA9H\x88s\xFFA/\xFC\xC4x\x84HB\x8F=\x9E\xF7\xF1\xCC\xD8>\xFD\xFE\xE9\x80M<(\xA2\x80%\xD7=\xDC("\x83\x9Bn{\xB8\xE3a\x99\xA1\xB0%\x95\xB4O\xB2k\xEB-\x86ܶn\x86\xB9\xBAT\xE2e?\x849\xE4AD\x9EJ]\x87<jq#\xDDz\xE4\xCCٮL\xC5\xC0\xBE\xE2\xB6[\x8BD,\x94\xDD\xE5\xA1\xD5\xE6=Ci_)a\xB6#\x9E$\x82\xE2\xF6\xEA\xDAt|\xDE\xE3aW\xF8\xB7\xF2\xD8\xE7J\xC6~[\xC7~\xB3\xB5\xB7\xD38؏{Cmj\xB52\x9D[\xA5\xACC#\xB8\xA5\x9E\xADՏ\xF8[\xEEG\u\xFC\xA65Ru\xAA\xE9)\xEF6Ô\xBB\xA3þ\xD3V\xD7s\x8F\x88\xD53\xE2\x8D\xB8 -'Hԕ\xB6\xA9\xC0\xE9H\x86bS\xF7M(v\xA5\xEB\xC6Ҵ6\xB4\x84\x98a\xD88\xB7\xFC\xC6\xC1X\xB9\xAB\xFB<H\xAC\xA1V\xFC\xCC\xC3\xD1\xEF{Xa\xA8\xFD\x97\xFE2\xCC\xFF\xEAD#8\xA1\xF5\xB0J\xBD\x9E\x9AMm`\x85J$\xBD\x87I\xFE8wvܱ\xF5\xA7\xEB\xFBk\xD1U\xF7Z\xCFo\xE8D>O\xFE\xB5,#O\x9F\x87\xC1\xA3\x9F\x94!KIc\x91V>YF6\xFF\xF0\xECc\xBA}\x91F\x8C\xFCJ4/ -P\xC6<Y\x86K\xA8\x8C\xC4/\x90C\x96l\xF932\xAF=\xFE\x8A\xEC r\xC6 \xDFR\xC8\xDDa\xE0\xE2f\xB8\x9C\x82˸\x82ERdp5U^\xC3\xD9 -\xCD\xF2\xB8\x85YR{\xA4\xBEW\x98\xF9PK -->,\x96T\xD0%\x87\x91\xBF\x9D5\x9F\x80\xF5\xB0\xD1\xD4qR\xF4\xC7\xEBs\x9D.[\xBAW\x80ՕߐJ\xD7ZO\x8BS!\xF9p\x9DJu\xDF\xD0\xFC~o\xEA\xC1"_#U\x8F"\xBB\xD4ʺZ\xDCf%\xF7z7'\x9DG8O\xFF\xBC/P5\xBD\x8B(\xFC\xFA\xA7\xDFgy\xD3\xE5\xFD\xEC\xAF\xD4ȴ\xF6ю\xE6ݞ\xF6E\xD0|\xA1\xB57\xBD\xE17\xDA\xF4 C\xCF\xAD@\x81\xAEn\xE0\xDA\xC9\xF5K\xB8\x82\xAB\xE0e;\xE99\xC1=D\xE8\x8Fhӗ'\xF7\xD1C4\x91&̀oz\x84\xA5\xE6S\x8DׯT|7\x8Bk>}>\xC4G\x84\x8C\xF2\x81\xD0_\xF4ʼn8F^\xA1\xEB[\x90hr5u\xC6\xF2>\xFE:c\xBEm4\x9D\x92\xB1W_B\xE2\xDB\xF8\xD1W\xE8{ \xB9I\x9D$R\xC0&EU\xFA\xE5\xE3`\xB5\xFA\xD1F>\xF5\xF5q\xFA\xA9@g$\xD9\xFFk\x83\xA6\xEE\xF1Y4Ҁ\xCE\xE1\xB3--\x8A\x9F `\xC0ք\xCB\x8D\xA1\xAD!{Q\xD2\xC4\xCB\xD9\xEDPvg\x9B٩\xE2\xBF\xD2Ą\xA8\x89\xF1\xDAe<\xB3\xAD1\x85UC\xE2͜\x993\xE7<s\xDE33\xDF|\xFE -`\xF7K(b\xD1\xC5 -7Kpp\xCB\xC5w],3\xB7\xA5\x92\xE6)Cn}\xA3ː߉{\x82a\xB6%\x95x5\x8C|\xA1\xF7\xB9\x92\xA7ڊv\xB9\x96v=v\xE6͡L\xE6a(\x89h\x84"\xCA4y`b\x{4E87CAD4}\xD0;!OAa\xCDV\xAC\xFB\xF0\xE0Px>7\xF2\xD8\xE3JF^/\x8E\xBCN\xF7E\xBD\xBD\xB7 -Fڌ\xD5j&\xB6F5ZpC\xE7?[o\xF17\xDC\xB9\xEA{\xA3\xA5\xEA\xD7\xD2C\xDEn)\xB6C\x9B[ۘp\x8F\x895\xD0\xE2@\x9EX}\xE7Hԓ^0,d#J\x9Dx\xA8є\xB6\x8BY6-\xB4\x8C)L3<\xFE\xAB\xFA\xF6ޤZ\x86\xB5s\xF16\xF4\xB9\x9FM\x9D\xF8U\x86\x85\xAF\xB8Xe\xA8\xFF\x8F\xEE2\xCC\xFD\xEEC\xDB?\x81q\xB1F\x9D\xCE,\xA6qb\x84J$\xBD\x85,\xFC$w\xE6\xACc\xFBO\x97\xF7O\xCD5\xFBR7/&\x97\xE1\xC9E%`\xFA8.\xFD"\x87,]#\x8D%Zyd\xD9S\xB0\xE9\xF6%m0\x9C\x8F(Ӽ< -@sd.\xA3:N~\x89<rd+_\xE0\xBC~\xF8\xE8r\xA7ȿ?\xF9\x94B\x96F\x81c\x88\x9D]\xC1\xD5\\xC1<(\xC3\xC1\xB54\xF3:f\xC9ViV\xC0m\xCCP\xB6K\xD9\xF7\x8A\xD3?PK ---\x8FEd}\xACQ\x9F\xA7\xD6\xD28\xB1B\xA5\x92\xDE\xC1$}\x9C;;\xEE\xD8\xF9\xD3\xD5\xFDSrͽҭ\xF3\xA9ext^ XA\x81> -\x83O?\xC8#K\x97Hc\x89VYF\xB6\xF0\xE0\xECS\xB6}\x91F\xEF=\xCA4/P\xC1<Y\x86TG\xC9ϑG\x8El\xE5\xBCW7\xBF!w\x8A\xFC\xC71ȇrg8\x82\xB8\xD9%,f\xE0 -.c\x892<\\xC92\xAFb\x8El\x95f\xDC\xC4,e\xFB\x94}\xB78\xF3PK --\xA4yÃ\x90<\x95F,x\xD8\xE6F\xB9\xF5Й\xB3\xC7*aXl \xA3z\xB6\xCAHj\xBBυ\x8D\xCD\x86ҁ\xD6\xD2\xD4B\x9E$\x92\xA2\xEA\x8D\xD8t}\xDE\xE3\xE2X\xFA\xB7\xEA\xD4\xE7ZE~'\x8E\xFCV\xFB\xE5^\xF3\xF0 \xEA -\xB4\xEB\xD5I\xD4*U,\x8C\xE4\x96N\xBE\xD18\xE1g\xDC\xB9\xEE\xFA-k\x94\xEEV\xD33\xDE\xBA\x8B\xBE˭n^r\x89\xD53\xF2H\x9D;uc$\xEAH'K\x93\x91\xC5V\xDC7B\xEE+\xE5I -\xB6\xB4\x84)L3l\xFDU|\xF3\xF0\x92X\x86\xB5\xB1p\xF9"H\xAC\xA1F\xFC\xAA±yXe\xA8\xFD\x87\xDE2\xCC\xFD\xEEB38\x91\xC2zX\xA3>O\xAC\xA5~n\xA5N\xBD\x83q\xFA(wfԱ\xFB\xA7\xAB\xFB\xA7\xE4\xAA{\xA5\xDBWS\xCB\xF0\xF4\xAA\xB0\x82<}\x8F~P\x86,]"\x8DEZ\xF9d\xD9\xFC\xE3\xB0O\xE9\xF65]0\xF2\xEFP\xA2yi\x802\xE6\xC82̣2L~\x85\xB2d\xCB_\x90y\xFBd\xEB\xB2\xC8}\x81\x9C\xA5\x90\x83\xC0!\xC4\xCD\xB0\x98\x82˸\x8E%\xCA\xC8\xE0F\x9Ay\xB3d+4\xCB\xE3.f(ۣ쇅\xE9\x9FPK --6\xA6C\xB5GS\xAD\\x96\xA3z\xBD\x98\xB27I\x93\xEDQ\xEFҴ\xFDgr\x88\xE4\xDD\x9B2--%9u\x94vQ\xC6T\xB3\xB0\xA6\xEFa \xD5\xDA\xD5|\xB1<I\xDEI<\x9Bve\xE6\xFA\xC0\x9E\xB8\xEE\xA49\x89\x9C\x8C\xD9\xEAI2TS\x91\xD5\xCA\xFC\\x83^\xFD -\x8Epo-^\xC6_\xFC\x8Dw\xA9\xE6A{\x81\x8C\xBF+\xB8 -\xFFPp;\x8B;X܉*\xB8 -WK\x95Al\xCDQz.n\xB9ŵȺ\xA2120\x95\xE1\xD6\\xE2շ}iG{\x96\xEE-\xC6\xCA&s\xEEk}O\xE85\xD4He\x86\x85\xA5e'6\xCC/\xC3 -\xDD]\xBF\xAAz\x8E\xA3\xB1\x92\xCA \xDCf\xE9\xE7\x9C\x91\xE6\xC5CT\xD9%\xD8|:ɿ\x91\xF3\xC6)\xEC\xCF/\x89fWjW\x8AR\xBA\xE7Jw\x97L\xA8E\xEBg\xA2\xA3&%贗rXq6l\xE1HIO\xBB\xFC\xCBe2\xE9,ߟs\xAB\x93y\xA7raRl\x8AJ\x9D\xF1T\xBE\x94\xDBVd\xB2d}\xD6v!JN-\xB6\xA6\x98N\x8F'/\xB8\xF7\xA2\x85+\x93|3T\xF4(==l\x82\xE2\xE7$co\xD6\xF7v\xAE\xA5\xA3`a\xA7\xB0\x8A\xDAUQs\x9B\x8A\xAA\xAD\xA5T3\xDC\xDCG\xEF\xE7βR\x87\xB8*sʱX\xFE\xF1Z\xFC\xFE\xB8\xCC4\xA0\x99\x96Y\xA0\xBF\xA3\xE3\xF3\x95ha\xB1\xA2\xB8\xF8\xDA"\x88\xF9bE\x95\xFD'Xh\xB87Ɲ*\xEA4\xFA\xD6\xD3_\xF7{-?F2nC]\x92_\xEE@q\xEF\x81Hv\xEF0b\xA4\xE9\xE3\x92ρ\xDF\xED\xF0\xAB&`\x9F<I\xCB\xC7\xC0\xCD.\x9E\xD5x\x90\xD0}4\xCAs}\xE1\xB0T篜\x86|\xEEW\x9FF\xD07\x8D\x9A\xB3P\xC2sX2\xC4cK\xAB|3X~\xB5\xE1'PG\x9F\xD4\xD4Nc\xC5Qn\xE9w峨\x9Fƪi\\xB4\xC0f#\xE1\xB7\xD0QMba\xA1'шIl\xC1\xFD\xE4\xA0Sd\xFA\x88Ճ.\x96}K \x838갌\xDCA;=V-\x8A.L \xFA\xD5p\xC2\xDFE-\x87\xB2?\xDC8\x8BF\xAFQ^\xB0\xB1W\xE5W\xB0\xFD\xB6qT\x8C\xD8\xE4E|\xB1l\xC41 -]\xE2Z/\xE2Ke#\x8E\xD3% \xAE\xF3Z\xF4\xE5\xB2u\xA4\xF7\x92\xFDy}m\xB8\xE5I\,\x81\xE4%f\xB1~!T\xF29\xE3\x92\xAF\xBA6\xA8-lPi;P2tO* -\xB0\xBE\xBFԛ\x80\xFEC\xAC\xFE\xFB\xFC\x9F\xA5K\xB8\xF8N<\xA6\xA5QdZ\xC8 \xC2\xFAu^\xE5j\xA1\xF2IL8\xCA\xFB\x88 -\x9F!\xAE\xBB\xACnc\xCB46yN'-G\xB5T\xEB2U\xB0p\xBA %\x8E\xEB\xECͧ\x84dB^2 \xC9\xDC*&\xD3,"\xB3\x8E\xC8\\\x84\xCC2\xB7\xE1M2a/\x99\x90\x90\xCC\xEDB\xE5\xAF\xF2V\xA1\xF2B\xE5\xCD^\xE5v\xA1\xF2\x9D\xB8\xCBQ^\xB8-\xB3\xD8\xE2\xC9r\xD2\xDE"\xF7\xE2\xCD\xF6\xF1}x\xDE\xEA\xE0\xB4:$|\xA7\xD1\xEA\xE5\xB0\xDF\xC5\xC1\xE7\xA0\xF0\xB6\xC2Ct\x8A\xBEx\xEE\xD8"C\xA7\xB1um\xD7\xF2\x933\x87mC>\xBFW\xD8/ -=L\xF6\xC8\xF2e3\xD8\xE1\x8C\xF8\xF3#m\xF3#g\xD0\xEAWUֵdž|u;cCUu\xBBbg\pn\xB1\xB6\xD1\xDBz9\xD6b\x99\xAF\x9D\xAA\x83]\x94t\xF7x\xD6\xD0\xF7\xDDv\xEDP\x81{ly/^o;\x9E\xFE\xA2\xB0m\x80\xFFPK ---J -\xD2f -ML\x9F.\xCB-ną\xD9]M\xF39\xFA\xAA\xDF!\x93If\xF20\xED\x8B\xF6}?T'\xE7\xEE.B\xA5\xC6f\x9CaϽ\xF7\xEC\xEF\x9E.\xF8\xF7?\xFC `\x95aL`)\x8AI|1\x8C/\x91\x91ֲ\xB4V\xA2XEv9,˽5i\xADIk]Z\xEB\xD2\xCAK+/\x9Do\x87\xF1U\x85(\x8Aؐ'\xA50\xBE\xE3\x86!w\xDBtf\xAF0\xDC,4\xECZ\x8A7\xB9\xB1-R\xEE\x9A;)n\x99\xBB\xA9jc7\xA5\x97\xD7J\xC5\xAD\xB8+\xAAEn\xEF\xBBd\x9B\xC2r˼\xBE'\xD2DY4-\xD3]b\xB8\xA5\x93(3(+\x8D\xAA`/\x98\x96\xD8\xD8ۭ{\x93W\xEA\xB4/4^/s۔\xEB`S\x91\xC13\xA8\x92I\xF0\x8CU\x93\xBBj\x84\xBDR\xE7\x8E#\xE8t\xED\xD8\xCDvr)ˑ\x9Ap\xEFR\x9E\x9B\x8F\x9B$3\xA0%t\x86Q\xDD\xE5\xC6N\x917\x83\x90"\xE4\xE3\xBD\xEC9\xE4\xA6[yKo -\xC3\xFC\xD9U \xA1\xC8b\xAD\xA3\x8C\xA3\xBB\xB6i\xD5&\xB5D\xE1!\xDF\xE7\xA9:\xB7j)\x97\x94#N\x9B\xAAh9Y\xA8\xC1}\xC9H"\x9A\xFD\xC5M\xD7lX\x9Dv\xD7sz\xF4Nh\xBDr\xFF\xB7(\xA6,\xF1\xC8{\xBF<\xA8\xE9^P\xCA\xAD)&\xAA\xCBI\xA3a\xED\xDB\xDDlt;+\x9A.}e0\xAD\xCA\xA9 -jy\xE3zfy\xAA!\xA5I \xEA\x8D=\xDB9SV\xF8b\xFF\xA6\xCD\xCB\xC0U\x9C\xC0\x94\x8A\x93\xB8\x86\xAEbwU\xCC༊2\xEE\x85q_\xC5\x84\x98UqI~|\x88\xCB*\xBE\xC7TA9/\x8FoBVK\xC5vu\xC6l\xC1\xAB -\xAB\xFEx\x9E˙\xE3G?\x81\xE4\xAE\xE2C\xF6\x9De\xD8Ñg\xBF\xD6\xC2x^4^T\xAB\xC7դ\xAAnsG\x97e\x89\xD9\xCD2\x9C\x85\xD1\xCC\xC1\xF5\xFA\xFF\xBBIm\x8DR\xEEݐ( \xBAC\xCB\xDC^\xA7\xE9\xF6t6/(YKt\xFA\xB03\x86\xB0\xA8\x8B]\xD2`\x98\xEB\x93d\xA6\xE2\xB867ܬ\xEFL\xC8đ\x9D\xE9N4=\xAE88Q˚\xDE{\xD5tl\x95*\x85\xE1\xA6&\xD6\xC9H\xE3<\xFDBLҏ\x8B\xC5\xE4ܓ5\x85\x86\xEF\xD3j !\xFA\xA2ɹ\x97`\xC9\xD7=\xA7U\xD0\xE7\xF9\x80\x8D\xE2\xD9S\xBEN\xE3\xE0Y\x92F\xB3!\xEFN\xC0\xDA\xF2\xD6\xC0\xB9\xE4\xB0\xF8 -*O\xFC\xE5\xE0+\xFD\x8E0\xC3r\xF0\xC6\xE8 6\x81(\x9B\xC48\x9B\xF2\x84T]\xF0|\xD98m\xD2u\xEC\xAByک3\xCC\xF0\xB4K\xE7\xE9\x9C%\x9D\x99\xFE:\x97\xFEC'z@g\xA4W\xE72\xE9h\xA4\x93\xEC\xAFC_*}u\xD4g\x9D:\xA3Ϻt\xAE\x92\xCE5ҹ\xDE_GC\x82z'u֩\xF3\xB2\x8B1<\xC7c\xEC\xDE\xFB\xAB\xDD\xF1\xA8<gi\xA8l\xB1\xA3\xEB\xB1v\xD7cHb\x8E\x98\x91\xAD\xD0S\xF2?~k~\x96\xF8\xB9#\xF3\xE7\x91zK\xFE\xF1K\x87\xF2\xAFt\xF1\xE9\xEB9\xE8\xC3\xDA8\xFF\xF1\xEF{\xFC߿\x83\xBF\x80\xEB^#\xFCLBd\x82O\xFEQ\xE3\xAF\xDF8$~\x9F\xAF\xE03\xDC\xA8\xB7)E$y\xEA\xD7\xD9?\xEF\xA2\xEDН\xABwDi\xD3"\xF87\xBDh#H{ц\xB0\xE8\xBD}g\xE9'k\x82\xFEA<Cz\xAB\xF4\xFC\xCAPK --\xAA\xC4\xC5\xE3\xCF{3\xF3l\xFF\xF1\xF9+\x80u\xDC-\xA1\x88\x9A\x8F+>\xAE\x96\x90\xC357|\xDC\xF4\xB1\xC8PܐJ\xDA\xC7\xF9\x95\xD5\x83\xB7\xA9\xBB\x82a\xAE)\x95x5HBa^\xF30\xA6H\xB5\xA9#w\xB8\x91\xCE=\xBB/S\x86ZC+\xDB\xE0\x91xc\xE4v,\x91yV\x9B\xE5\xA5\x84ٌy\x9A -J}\xD1Ԧ\xF0>\x8F\xF6Er+\xAEdtu\xB4;϶Z\xBB;IHA\x87Z-\x9DH]\xA7\xDE##\xB8\xA5>\x9E\xAC4\xF8;\xC4\\xF5\x82\xB65R\xF5\xEAY\xA1\xF7\xEBQF\xBD\xA5\xA3\x81\xC3\xD6W\xFF\x8FU߈=y\xE4\xE6\x9C`"m\xBA:bX\x98N\xC9Pj끉DC:Mj\xD3\xC6Xs\xA4e\x9C\xC1ã\xBF*\xD0ڝ\x9C\x98ay\xE3ҟ\x86\xA95\xA4ƯV\\x81;>\x96\x9E\xFF/\x95\xE6\xEB\xD1 -Dd},\x93\xE2S\xDA>\xB2B\xA5\x92\xDE\xC6d\x89q\xDE\xD9\xF1\xC0\xC6I\x97\xF8Ϲ\xEB\xEE宝nd\x86\x87\xA7\x8B(\xD0Gb\xF0\xE9W\xE5\xC8\xD2u\xD2Z"/ \xCB\xC8\xEE\x83}ʎ\xCF\xD2\xEA\x92\xE1\xED\xA1L\xFB\xF20̓e8\x87\xEA\xFC\xF2d+_\x90{{\xFF\xC17\xE4\x8F\xE1}#9\xCCHn -G$nw2\xE2 -.b\x819\ʐ\x971G\xB6J\xBB\xAEc\x96\xD0>\xA1og~PK ---BZҒ\xB8qMF1\x8A\xE5V\xB0*\xE3}a\xBC.ㆌÀ\xBBa8f\x8A\x96]\xCBh -M\xDF\xE0\x99\x8A\xE6\xF72\x9Aile\xAA\xD6V&Wq\[\xD3\xDDR\xF9j\x8Et\x9A˫En\xD6܍,\6Lý\xC2pI=B)Uf\x90\xF2V\x953 -\x93\xAFloU\xB8\xBD\xA6U\xEA\xA4)Z\xBAV/k\xB6!R13 $\xF4\x81\x94\x82ir;_\xD7\x87\x939\x94p&`Rz\x83U\xC3\xE6\xBAkX&\xA3z\xC5k\xDC]\xA7\x84\xD74(\x92\xB0\x9A"\xDDP\xC9\xD5\xF4{\xCBZ#\x88/J>e\xAD\xBE\xED;,0\x8C5\xB3\xD4\xE0\xBA\xF1\xA9\xC1\xAB\x84\xA2L4M9\xA7\xE4چYcH\xAA\xA9⦶\xA3e\xEA\x9AY\xCB\xF8Z\x8A$\xEA\xB4P%uAT-\xB2\xE3Q\xC4\xE6?\xD3yC\xC4I\xA0cNw>\xE7\xDFq\xF50\x9D\x80\xF9\xB7(FM~\xDF QK^P\xD26\x9DN薹\xC3mw\xCD\xEAt\x94T\xAF\xE5IJ<\xE78\x96n\x88\xEA\xCF\xD7\xF97\xE9^\x9A\x92\xEF\xDE7\xEA\xCC\xEAr\xE0\x9B\xF5\x93i\xF6/(MD-\xF8a\xB8^\x83X\x81z@e\xA2\x95\xACm[\xE7\x86\xE8Й\xAE0%rVp\xA3 -Nࢌ5\xEB(+x/)\xB8\x89[2>P\xF02\xCE)8/>*R -n\xE3]\x84}Z\xF7\x9D\xA30\x9B -\xA1\xB9\xB6\xB9V\xB5\xCC\xFA\x83\xA9\xBAG"\xE3C\xE1c\x86s\xFD\xE5\xAA\xD03\xF0C\xEEO4\xC3d_M\xEF\xE9#0R\xAD74G\xE8ʢ\xF0\xEC6)\xA8ٳ\x9A\xC3=\xC5\xE9\xA0\xC5\xCDZ9;\xB5L\xFBʝ\xECjd\x90ysP&\xFBX\xEF'\x93\x92\xEAۙ\xE6^\xA7v\xB9\xFC`g\xD5\xD2\xE1u\xB8ӦZ\xADl\xD2;\x91=\x98Z;F/\xD0;\x9E\xA4'\x9D%b\xC0HR@\x9B\x821\xFA\x9E\xA4\xD3u\x84\xA6\xFFxz\xF2g\xB0\xF4\xF8>B\x8F\xE8\xC2s\xF4=&L,\x8F\x9BC\x8C\xCD\xE3\xE9\xCE\xFA\xEE\xC7\xF3\x80' X\xE6Ig\x89.D2\xCDm---'i[RXr\xC1%\xA6)|ư9\xCB\xF0>\xD2D|\x83\x90D֑e\x9E\xFB\xEB\xFA\x8CWy\xCC\xE4V!\x96\x96e\xC3*\xB3\x92^\xCA0x\x93v^0t\xA6K<\xAE\x94\xB2\xA2\xBCʳ&\xADSv\x8E\x9B^6Լ\xBE\xE8U\xF53L\x9E\x9C}x\x82\xEA\xF7\xB5\x91\xC3'(\x84\xA1\xC5r\x99#\xF4\xE9\x8Bid\xDE(\xD3٤is-\x9BN\xB3@\xB5\x84\xAC\x9FZ\x86\x9B\xA2}62t\x80\x9F\xE7\xB8#ȋ\xA1\x9F|\xAF\xE7\xF1\x9C\xCBĩT-5-L+qH\x9E\xDBX\xE6\x9B\xF5\xAD\xF0\xA7\xEDJ9' -5\xE9\xFBG\xD5c*+1Z\xB0r\xA6\xEDP\xD6e!\x8Bv^\xC3mw0\xA5#\x803:\x82\xB8\xAB\xE34:uLcF\xC3=\xB3\xB8\xAF\xE3\x92\x89&v:|@\xC7:\xE61\xA0\x92,\x90l\x9B@k\xB5w^\x9D\xA05.E~\xAF{&N\x9C\x8B\xA1G\xF5\x87\xC1McK\xA4\x8C\xAAHH:\xAAlE\xAA\xE6\xF4D\x94\W5N\xF3]"%$\xED\xD2&\xA5\xCA\xEF\xBF(\xE9"C\xE0p\x83VU\xCAZY\xA7\xD0\xC8\xE2\xB1\xE2Ҳ5ei \x84%\xB3?jbH\xFEGG\xB64|-\xF5dZU\xDF@c\xFFI\x83P7/\xD0B)\x94\xB6i\xE6\xA1'\x88.P\x92\xF5>\xBA\x80i%:\xBC\xED\xF5\x86ZC\xBE]\xB4|t\xA3C\xF4\xF6\xBB([\xFD\xE7\xC8zX\x8B@7z-*\xDAC\xF4j?\x8D\xACt--\xEE\xB8\xA2\x8C\xB5-P%\xD2 \xBC'i\x8E\x8BU\xCFD\xB8\x84%:\x99]Bx\x89l=x8\xC6\xC2,\xE2#||r\x88\xF53Y\x81\xB0\xD12j\xE0 -VH\xCDp\xD7 -\xECv\xD1W\xA9\xE6}\x9D }\x97\xFA<\xD5Q\xA9\xC0y\xB8\x8EE\xE9c\x87*?P~;\x86?[\xFFe\xAA\xBE2\x99hթn\xFEPK --\xA9a-þ\xF4\xD5\xC3R\xBA\xE9 -G \x91YdH\x8C%\xCA\xF4\xB8\xEBK1\xBBZ]\xE1_\xAE\xD0N\x97x\xBC\xB2\xC8C_\xFF\xAEo&Ԋ\xD15\xA7\xA4\xE1x\x85G\x91\x88\xBD\x97Y\\xADՂP\xF5ݡ{%\xCAB\xBDb\x88\xA73T\x9EXM1\x9Cr\xDF\xF25\xEE\xF0\xF7\xCA)r\x9A|\xA9\xEEN\xD4m\x97h\x8A\x8CK"]\xD093\xEAJ2\xBF\xF2m\x93\xFB@\xA9r\xFA\xEB!\x97ћ \xAC2<ܬ\xDE\xFB!\xAF\xB1h3\xC6,\x97\xD9\xEB̄\xD7 -\xD8d1\x9C;\x80@\xA9\x83\xD5\xD0_W\xA8{\xFB\x85\xF5\xC5(\xAB\xBC\xF4*A\xE4\xCB\xF2\x8CP+A\xC9\xC2s\xA3\xB3щ\xE36R8a\xA3\xDD6z0naB\x9F\xE5-l\x9CǤ\x8D˘d8ݘ\xC2\xC4\xDC\xCC\xD6\xFD:C\xC1K\x81\xAC|\xAC\xE9\xCC-\xBC\xB01\x85i\x86l\xF3}aH\x99T\xB8,;s\xCBo\x85\xA7v\xC4l,C\xBAY4\x81\xA9\x87\xC6kT\xB9B\x96\xF5\x9B0\xB5\x87\xA2\xF7\xD7i\xE1\xC0.\x91\x8EH\xFDM\xBE!gID\xFB\xEA\xED\xE4\x9E&\xC8\xC4a\xF5ܖ4\xBD@\xB5E\x89\xED\xADK\xDD\xFFu.\x92\x82d9\xF7\xDA\xDDY\xFA\xBAld\xE4p\x9B\xBEf6:O\xA5\xB4\x80-\xAE\xD2Y\xAF\xB1N\xAB\xA2\xC6SVW\xFB\x8A\xE4\xAF\xC8)\xB4a\xBA\xD9QG\xEA\xD55*.C\xAD4\xB7\xD2s\xFDh\xF0Y\x82\xCF\xED\xBF\xB1ޏt\xBD&M\xC1\x8B_\xD8\x9EA\x96Pq\x9F\x9B\xB8e\xC2\xC2\xC1Y\xE3O\xFFvƲ\xF5/PK ---1\xDE!\x92P\x84\xC4\xC5c\x8F\xE7}<3\xB6\xBF}\xFF\xF4\xC06\x90Ǣ\x8B[.n\x90\xC1\xF7\\xDCw\xB1ĐߑJ\x9A\xA7\xD9\xF5\x8D\x83\xB3\xB7\xC3l]*\xF1\xB2\xF9B\xBF\xE2~H\x9Er=x\xD8\xE2Z\xDA\xF5\xD0阮Lj\xE1y\xAF{$\x8E\xAB\xA1\x88\x842\xFB<0\xB1>g((%\xF4nȓDP\\xAD\xEB\x8E\xC7{<\xE8 -\xCF\xE7F\x9Ez\\xC9\xC8kǑ\xD7l\xD5\xF6\x87Qo\x80\xA0\xCDX\xADN\xE6V(\xEB@n(\x83g\xEB\xF5\xFE\x86{!W\xAFi\xB4T\x9DJz\xCA\xDB\xED \xE5\xEE\xC5A\xDFj+\xBF\xB9\x87D\x8B\xEAiq,\xCFl\x85c$\xEAJ;\xA8\xC0\xC9H\x86B3\xEE\xEB@\xECKۍ\xC5I5lYhS\x98fغ\xB4\xFC\xC6\xE1H\xB9kc\xFB\xDCO\x8C\xA6V\xFC\xCC\xC3\xD2W\\xAC2T\xFFK\xE6~u\xA2ៈ\xC0\xB8X\xA3^O̦zf\x84J$\xBD\x87q\xFE(wfԱ\xF3\xA7\xEB\xFBk\xD1\xFBZ/o\xE8X>O\xFE\xB5,!G\x9F\x87\xC1\xA5\x9F\x94!KIc\x81VYF6\xB7y\xF61ݾB\xA3 -\x86\xF3E\x9A(a\x8E,\xC3U\x94\x87\xE2p\x90%[\xFA\x8C\xCC\xEBG\x8F\xBF"{\xE7\xC3\xE4} -y0B\xECl\xD7Rp ױ@\x8An\xA4ʛ\x98%[\xA6Yw1Cj\x97\xD4\xCB\xF9\xE9PK --\xBC\xCCgaj\x96yߘ\xB1\xAC\xAC\xB9c\xCCx\xC4V\xA8zms\xB0>\xDB<\xA5\x94oE \x95L\xF9k\xEDN\xEA\xFE\x95\x9D@\xE0-2d\x95D\x92\x99\xABIK\xD7#{O\xDE\xE83螺\xC7>\xC6\xEBZ\xD5\xF2V\xF2\x9AU%\xF8 \x82KC䪌$Ws:\xCB+\x93\xDA\xCC\xEA\xE8\xB4nɄ\x9E@<\xE7T]ݸn2\xD5\xF0\xFF\xE4\xC2U1\x86qn&U\xBCǽw1.p6xy"\x9Bu슧\xD9^E\xC5\xAE -\x8C?W5\xA9XGI\xC59\x9CW1\x8B\xAB*Fq^-\x8A\x99\x92r3G\xF7\xF2\xF1ߎ \xFB\xCE\xE1\x81\xE0\xEEf\xF0\x8F\x81\xE0\xC1}\xCD\xE0\x9F\xC1W\xC1\x89f\xF0ρ\xE0\xE9TZ\xC1'\x9B\xC1\xF3\x90>7<.\xC1\xA1Do3\xF4\x97h\xE8:\xDB\xF4\xD7@\xE8\xAEI脄*q\xAA\xBB߀U$6\x8A\xEBG\xF9\x88F<g?\xC1\xE9Շ<\xC0K\xB787\x9F\xE0̪\xD2ף\xE0\xD5}-svJWg\xDD\xD5\xD3\xD5\xDF5p\xE8\xEA>\xC0k\xBE\xE7\x9C\xAA'\xECYZT\xC9]\xA4f\x88\xB4\xB2\xC29*\xC6e*C\x93J\xB0L\xD5\xF3\xDF\xBA\xA8\x80o\xF8ό\xA0f\x86\xF9PK --\xB7\xAD\x94ct.;k~qy\xD33e) -\xC9B\xE5Ւ\xE5t\xED2\xAF\x80\xB8۔\xE8\xE6\xE9\xDA\x96\xB7e\xBF6;!p\xA0\xBB\xA7\x94\xB0\xFB\xB0\xC0<=\xFF\xCE\xEB\xF4d\x9A\x96\x8AS8ָ\xA2\xE2\xD9\xC5Ԍ\xE9\xB8V\xFE\xDAl\x9A\x9Eʒcz[\xC63s\xF7'\xCD/)Tj\x92ʬ\xBD\x9C\xC9d\xEA\xF4\xEFn\xE5U\x8A -y\xB6'\xC5Z\xB6\xF26鎘E\xCFrJ\xA6G[K^֥\xE4}\xB0J\xD6\x84Ք\xF5\xBA\xF0D3\xEA\xCFdt\xD3\xF3j\xAE\xA3Ɯ_\xDD\xD3]b!\xB26om\x85\xE1:\xFF)V\xDA\xC1^l\5\xD8Dz -\x96!\xC6V]\xCB\xF1t\xB0\x89\\xA5\xBE\xF4\xD1G9kEj\xDAUq\x8F+J\xD6\xEA\x94\xDFOW\xCF\xE6\xFCݓV\x86\xD43劓\xB3\xC6l\x89\xADk\xE7V9%\xD3x\xC7\xE4\xA5\xCB\xC0}\x90\xC0\xAE]\xAA\xC4\xC02J\xCAXQ\xF1\xC0\x80\xD2ؾ\xBD\x81\xA3;HH\xA6f\xAC -R\xDE\xC4Qͳyr\xBF<Ī\x81GXS\xF1\x99\x81\xC7\xF8\x9C;\xBEf\x91\x8C'\xBE\xC0\x97\xBE\x81+\xA0\xF6\xFFϑ!зC߽bYr\x99m\xA8\xEDۡ\xFAM\x99\x9E\xDC\xDC\xE0Z\x9BL\xCB3c\x83^zo\xDB\xE5\xBA\xF64\xE8\xBDɠ\xC0\xF1f -\xD5Щr\x91kU\xF2\xE5a\x8A\xDE\xCEV<˕\xEA\xEBi\xAA\xFD\xFD -F\xB2_\x90\xED{\xB2^\xAF\xD3\xD9{V\xCE\xE8i4 \x9Cor\x9EmC\xD5\\xF9\x9AWސO\xD8zP1\x8B\xEE\xB6.\xD9ȺX\xA3b\xB3\xA3y\xC8\xEDp\xB6\xD47\xFF\x89]9\xF2\xF5\xB5"\xF1֟`\xB7\xFFSe\xBB?\xF4N\xEEΓ\xD5\xF3\xDE:\x95\xEEE\x9F?Z\xE7䱉c|\xA9\x81\xC0\xFC+\xB2\xBF\xF8]\xE6\x8C=O\xCB\xDB\xFEW\xCFL\x8E\xA1\xF8:\xC4O\x9C\xEC\xC1q^u\x8E\xC09\xBA\x9E\xC7;\x9C5'\x9C\xC0I\x8EB\x9EA\x809\xFA(\xB5x\xA27\xB9\x8E=\xDBcA\xC5\xFB~\x8Cx\xCD/\x88!g\xDD\xE8\xF1\xE3j|\x96\xF0\xBD5\xF4"\x89ZO!d\xF81Ȑ\x8CW\xD1\xF2J:QEh\x927\xE1\xA8Z\x85\xF6\x91\xA9\xDE\xDF\xD1\xFE\xFA\x82D\xD0Z\x85\xF1,\xF9\x8CZ|\x87Y10\xCA\xD0ch\xC38\x89 &\xFC\xA8V2\x80%Ὃ\xD3L\xDD\xC6"ϐ\x9F=\с>Bm!!\xC0^\x88\x97H\xA88\xAF₊\xF7\xE8y\xFD5\xA8\xE2 c\xB5\xD2\xE7i\xFCg\xB4\xFD\x81\xEF$\xC8t"\xBA\xB7s2\xBA\xAF\xB7\x8A\xF6PID\xF7\xC8\xD1hm֯$6\xCA\xE9%\xA2\xC14ݯ\xC6\xF84ԯ\xC92cZ,\xC4B\xFB#\xD2v\xA0_\x8F\xC7\xF4X$\xA6Tq\xF0\xB4\xC9\xD4\xD1\xCEX\x98\x99\xAAxM\xDE%\xAB8$Gɉ\xE2s\xF2!\xDAy\x9D\xE5\xD6d\xB8\xB5s\xE8\xE4\x97\xE4Q\g\x8D7X\xE97lWq\x93Ooqv\xDCA\x89\x9F\x8E\x8Fa\xE2[d\xF1=,\x9F\xBBVۃ%\xF8\xEC\xF4\xD1s\x903\x85\xEBg}\xC6B\x8C2\x8EK\x9C\x85k\x88\xBF\xD3̹\x88\xF48K\xAEd\xFF\xCE"\x8C~\xC3ĥ\xCF7\xB8\x8C2\xDA\xC9|\xA3\+\x85\xF14؟\xB1@\x8C5\xAFq\xCE\xCE\xF9\xC2\x94\x90o\xBAKՌs\x94[\xE3\x89u\xC4\xE2\x82\xCClIs/т/\xB0\xF3\xEA|\x87\xC9Z:k\xEE\x9B\xF2l -\xE4y\xD5gMP- -ҘDy\x86t\x9F\xE3\xF0\xC2:^\xB6;\xEC\xDB+um\xA3m\xB6͔\xEF5\xFD7PK --SkU\xA1\xB9;>3\xC3\xF2ƥ?SkH\x8F_7=,1<\xFDJ3\xCC\xFE֤\x88\xC8zX&\xD5'\xB6\xB4}h\x85J%\xBD\x90\xF1\xA3\xBCӣ\x81\x8D\xE3.\xF2\xC4\xC9\xEB\xEE\xFD\xDE\xFFס'AN\x8B(҇b\xF0\xE8w\xE5\xC8ҕ\xD2Z\xA6\x9DO\x96\x91-\xDE>\xFB\x94\x9F\xA6\xD5%\x83\xBDG\x85\xFC\xCA U̒e8\x83\xDA\xFC\xE4\xC9V\xBF \xF7\xEA\xCE\xDDo\xC8\xA1\xF0q\x84\xE4CFr}\x908$q\xDEY\x9Cˈ\xAB8\x8F9B\xE4p!C^\xC4\xD9yE\\xC14\xA1=B\xDF(M\xFDPK @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mk...@us...> - 2020-05-13 12:54:21
|
Revision: 9387 http://sourceforge.net/p/vassalengine/svn/9387 Author: mkiefte Date: 2020-05-13 12:54:19 +0000 (Wed, 13 May 2020) Log Message: ----------- Whitespace and logic. Modified Paths: -------------- VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java Modified: VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java =================================================================== --- VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-13 10:09:53 UTC (rev 9386) +++ VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-13 12:54:19 UTC (rev 9387) @@ -54,21 +54,21 @@ public PolygonEditor(Polygon p) { polygon = p; - // reset(); // too much of this happening + // reset(); // too much of this happening } protected void reset() { - MouseListener ml[] = getMouseListeners(); - - // get rid of all the mouse listeners floating around - for (MouseListener i: ml) - removeMouseListener(i); - - MouseMotionListener mml[] = getMouseMotionListeners(); - - for (MouseMotionListener i: mml) - removeMouseMotionListener(i); - + MouseListener ml[] = getMouseListeners(); + + // get rid of all the mouse listeners floating around + for (MouseListener i: ml) + removeMouseListener(i); + + MouseMotionListener mml[] = getMouseMotionListeners(); + + for (MouseMotionListener i: mml) + removeMouseMotionListener(i); + if (polygon == null || polygon.npoints == 0) { setupForCreate(); } @@ -223,88 +223,86 @@ // implements java.awt.event.MouseListener public void mousePressed(MouseEvent e) { - selected = -1; - double minDist = Float.MAX_VALUE; + selected = -1; + double minDist = Float.MAX_VALUE; - if (!e.isMetaDown()) { - // move an existing vertex - for (int i = 0; i < polygon.npoints; ++i) { - double dist = Point2D.distance(polygon.xpoints[i], polygon.ypoints[i], e.getX(), e.getY()); - if (dist < minDist) { - minDist = dist; - selected = i; - } - } - } - else { - // find closest segment/vertex - selected = -1; - minDist = Float.MAX_VALUE; - boolean isVertex = false; + if (!e.isMetaDown()) { + // move an existing vertex + for (int i = 0; i < polygon.npoints; ++i) { + double dist = Point2D.distance(polygon.xpoints[i], polygon.ypoints[i], e.getX(), e.getY()); + if (dist < minDist) { + minDist = dist; + selected = i; + } + } + } + else { + // find closest segment/vertex + boolean isVertex = false; - int x0 = e.getX(); - int y0 = e.getY(); + int x0 = e.getX(); + int y0 = e.getY(); - for (int i = 0; i < polygon.npoints; ++i) { + for (int i = 0; i < polygon.npoints; ++i) { - int x1 = polygon.xpoints[i]; - int y1 = polygon.ypoints[i]; - int x2, y2; - if (i == polygon.npoints-1) { - x2 = polygon.xpoints[0]; - y2 = polygon.ypoints[0]; - } - else { - x2 = polygon.xpoints[i+1]; - y2 = polygon.ypoints[i+1]; - } + int x1 = polygon.xpoints[i]; + int y1 = polygon.ypoints[i]; + int x2, y2; + if (i == polygon.npoints-1) { + x2 = polygon.xpoints[0]; + y2 = polygon.ypoints[0]; + } + else { + x2 = polygon.xpoints[i+1]; + y2 = polygon.ypoints[i+1]; + } - if (y2 == y1 && x2 == x1) // two verteces on top of each other: skip - continue; + if (y2 == y1 && x2 == x1) // two vertices on top of each other: skip + continue; - double d = Point2D.distance(x1, y1, x2, y2); // segment length - double comp = ((x2-x1)*(x0-x1) + (y2-y1)*(y0-y1)) / d; // component of projection of selection on segment - double dist; // orthogonal distance to segment + double d = Point2D.distance(x1, y1, x2, y2); // segment length + double comp = ((x2-x1)*(x0-x1) + (y2-y1)*(y0-y1)) / d; // component of projection of selection on segment + double dist; // orthogonal distance to segment - if (comp <= 0.0) { // too far out beyond first vertex: just move that vertex if it's closest - dist = Point2D.distance(x1, y1, x0, y0); - if (dist < minDist) { - isVertex = true; - minDist = dist; - selected = i; - } - } - else if (comp >= d) { // too far out beyond second vertex: just move that vertex: just move that virtex if it's closest - dist = Point2D.distance(x0, y0, x2, y2); - if (dist < minDist) { - isVertex = true; - minDist = dist; - selected = i+1; - } - } - else { // calculate orthogonal distance to segment - dist = Math.abs((y2-y1)*e.getX() - (x2-x1)*e.getY() + x2*y1 - y2*x1) / - Math.sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1)); - if (dist < minDist) { - isVertex = false; - minDist = dist; - selected = i+1; - } - } - } + if (comp <= 0.0) { // too far out beyond first vertex: just move that vertex if it's closest + dist = Point2D.distance(x1, y1, x0, y0); + if (dist < minDist) { + isVertex = true; + minDist = dist; + selected = i; + } + } + else if (comp >= d) { // too far out beyond second vertex: just move that virtex if it's closest + dist = Point2D.distance(x0, y0, x2, y2); + if (dist < minDist) { + isVertex = true; + minDist = dist; + selected = i+1; + } + } + else { // calculate orthogonal distance to segment + dist = Math.abs((y2-y1)*x0 - (x2-x1)*y0 + x2*y1 - y2*x1) / + Math.sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1)); // only zero when two points on top of each other (skipped above) + if (dist < minDist) { + isVertex = false; + minDist = dist; + selected = i+1; + } + } + } - if (!isVertex) { // insert a point near segment - polygon.addPoint(e.getX(), e.getY()); - if (selected >= 0) { - for (int i = polygon.npoints - 1; i > selected; --i) { - polygon.xpoints[i] = polygon.xpoints[i - 1]; - polygon.ypoints[i] = polygon.ypoints[i - 1]; - } - polygon.xpoints[selected] = e.getX(); - polygon.ypoints[selected] = e.getY(); - } - } - } + if (!isVertex) { // insert a point near segment + polygon.addPoint(x0, y0); + if (selected >= 0) { + for (int i = polygon.npoints - 1; i > selected; --i) { + polygon.xpoints[i] = polygon.xpoints[i - 1]; + polygon.ypoints[i] = polygon.ypoints[i - 1]; + } + polygon.xpoints[selected] = x0; + polygon.ypoints[selected] = y0; + } + } + } } public void scrollAtEdge(Point evtPt, int dist) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mk...@us...> - 2020-05-13 10:09:55
|
Revision: 9386 http://sourceforge.net/p/vassalengine/svn/9386 Author: mkiefte Date: 2020-05-13 10:09:53 +0000 (Wed, 13 May 2020) Log Message: ----------- Fixed unintuitive behaviour in PolygonEditor. Modified Paths: -------------- VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java Modified: VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java =================================================================== --- VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-12 21:43:43 UTC (rev 9385) +++ VASSAL-src/branches/kiefte/src/VASSAL/build/module/map/boardPicker/board/mapgrid/PolygonEditor.java 2020-05-13 10:09:53 UTC (rev 9386) @@ -30,6 +30,8 @@ import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.Point2D; @@ -52,10 +54,21 @@ public PolygonEditor(Polygon p) { polygon = p; - reset(); + // reset(); // too much of this happening } protected void reset() { + MouseListener ml[] = getMouseListeners(); + + // get rid of all the mouse listeners floating around + for (MouseListener i: ml) + removeMouseListener(i); + + MouseMotionListener mml[] = getMouseMotionListeners(); + + for (MouseMotionListener i: mml) + removeMouseMotionListener(i); + if (polygon == null || polygon.npoints == 0) { setupForCreate(); } @@ -210,26 +223,88 @@ // implements java.awt.event.MouseListener public void mousePressed(MouseEvent e) { - selected = -1; - double minDist = Float.MAX_VALUE; - for (int i = 0; i < polygon.npoints; ++i) { - double dist = Point2D.distance(polygon.xpoints[i], polygon.ypoints[i], e.getX(), e.getY()); - if (dist < minDist) { - minDist = dist; - selected = i; - } - } - if (e.isMetaDown()) { - polygon.addPoint(e.getX(), e.getY()); - if (selected >= 0) { - for (int i = polygon.npoints - 1; i > selected; --i) { - polygon.xpoints[i] = polygon.xpoints[i - 1]; - polygon.ypoints[i] = polygon.ypoints[i - 1]; - } - polygon.xpoints[selected] = e.getX(); - polygon.ypoints[selected] = e.getY(); - } - } + selected = -1; + double minDist = Float.MAX_VALUE; + + if (!e.isMetaDown()) { + // move an existing vertex + for (int i = 0; i < polygon.npoints; ++i) { + double dist = Point2D.distance(polygon.xpoints[i], polygon.ypoints[i], e.getX(), e.getY()); + if (dist < minDist) { + minDist = dist; + selected = i; + } + } + } + else { + // find closest segment/vertex + selected = -1; + minDist = Float.MAX_VALUE; + boolean isVertex = false; + + int x0 = e.getX(); + int y0 = e.getY(); + + for (int i = 0; i < polygon.npoints; ++i) { + + int x1 = polygon.xpoints[i]; + int y1 = polygon.ypoints[i]; + int x2, y2; + if (i == polygon.npoints-1) { + x2 = polygon.xpoints[0]; + y2 = polygon.ypoints[0]; + } + else { + x2 = polygon.xpoints[i+1]; + y2 = polygon.ypoints[i+1]; + } + + if (y2 == y1 && x2 == x1) // two verteces on top of each other: skip + continue; + + double d = Point2D.distance(x1, y1, x2, y2); // segment length + double comp = ((x2-x1)*(x0-x1) + (y2-y1)*(y0-y1)) / d; // component of projection of selection on segment + double dist; // orthogonal distance to segment + + if (comp <= 0.0) { // too far out beyond first vertex: just move that vertex if it's closest + dist = Point2D.distance(x1, y1, x0, y0); + if (dist < minDist) { + isVertex = true; + minDist = dist; + selected = i; + } + } + else if (comp >= d) { // too far out beyond second vertex: just move that vertex: just move that virtex if it's closest + dist = Point2D.distance(x0, y0, x2, y2); + if (dist < minDist) { + isVertex = true; + minDist = dist; + selected = i+1; + } + } + else { // calculate orthogonal distance to segment + dist = Math.abs((y2-y1)*e.getX() - (x2-x1)*e.getY() + x2*y1 - y2*x1) / + Math.sqrt((y2-y1)*(y2-y1) + (x2-x1)*(x2-x1)); + if (dist < minDist) { + isVertex = false; + minDist = dist; + selected = i+1; + } + } + } + + if (!isVertex) { // insert a point near segment + polygon.addPoint(e.getX(), e.getY()); + if (selected >= 0) { + for (int i = polygon.npoints - 1; i > selected; --i) { + polygon.xpoints[i] = polygon.xpoints[i - 1]; + polygon.ypoints[i] = polygon.ypoints[i - 1]; + } + polygon.xpoints[selected] = e.getX(); + polygon.ypoints[selected] = e.getY(); + } + } + } } public void scrollAtEdge(Point evtPt, int dist) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-12 21:43:46
|
Revision: 9385 http://sourceforge.net/p/vassalengine/svn/9385 Author: uckelman Date: 2020-05-12 21:43:43 +0000 (Tue, 12 May 2020) Log Message: ----------- Updated for 3.3.0-beta3. Modified Paths: -------------- VASSAL-src/trunk/CHANGES VASSAL-src/trunk/Makefile VASSAL-src/trunk/NOTES-bgg VASSAL-src/trunk/NOTES-csw VASSAL-src/trunk/NOTES-news VASSAL-src/trunk/NOTES-vassalforum VASSAL-src/trunk/src/VASSAL/Info.java VASSAL-src/trunk/src/VASSAL/tools/version/VassalVersionTokenizer.java Modified: VASSAL-src/trunk/CHANGES =================================================================== --- VASSAL-src/trunk/CHANGES 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/CHANGES 2020-05-12 21:43:43 UTC (rev 9385) @@ -1,4 +1,4 @@ -3.3.0-beta3 - ?? +3.3.0-beta3 - 12 May 2020 * 12732: Use all available rendering hints for text * 12731: javax.sound.samples.Clip fails to convert WAV files it can play Modified: VASSAL-src/trunk/Makefile =================================================================== --- VASSAL-src/trunk/Makefile 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/Makefile 2020-05-12 21:43:43 UTC (rev 9385) @@ -59,7 +59,7 @@ #SVNVERSION:=$(shell svnversion | perl -pe 's/(\d+:)?(\d+[MS]?)/$$2/; s/(\d+)M/$$1+1/e') SVNVERSION:=$(shell git svn log -1 --oneline | grep -oP '^r\K\d+') #VERSION:=$(VNUM)-svn$(SVNVERSION) -VERSION:=$(VNUM)-beta2 +VERSION:=$(VNUM)-beta3 #CLASSPATH:=$(CLASSDIR):$(LIBDIR)/* Modified: VASSAL-src/trunk/NOTES-bgg =================================================================== --- VASSAL-src/trunk/NOTES-bgg 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/NOTES-bgg 2020-05-12 21:43:43 UTC (rev 9385) @@ -1,5 +1,5 @@ -[size=18][b]VASSAL 3.3.0-beta2 released[/b][/size] -The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta2. +[size=18][b]VASSAL 3.3.0-beta3 released[/b][/size] +The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta3. [size=16][b]IMPORTANT[/b][/size] * This is a beta release. Things may be broken which worked in 3.2.17. If you find a bug introduced since 3.2.17, please report it. @@ -9,21 +9,26 @@ * Some modules containing custom drawing code may render incorrectly on HiDPI displays. If you are the maintainer of such a module, let us know and we can advise you about what needs updating for 3.3 in your code. (We are aware already that VASL has this problem and are working with its maintainers to update it.) [size=16][b]Download[/b][/size] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-linux.tar.bz2]Linux[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-macosx.dmg]Mac OS X[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-windows.exe]Windows[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-other.zip]Other[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-src.zip]Source code[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-linux.tar.bz2]Linux[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-macosx.dmg]Mac OS X[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-windows.exe]Windows[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-other.zip]Other[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-src.zip]Source code[/url] [size=16][b]New in 3.3.0[/b][/size] Features: -* 12557: Compatibility with Java 9+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 9 or later. +* 12557, 12613: Compatibility with Java 11+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 11 or later. -* 12558: Bundle Java with VASSAL: The Mac and Windows packages now include Java 13. It is no longer necessary to install Java separately when using one of these packages. +* 12558, 12724: Bundle Java with VASSAL: The Mac and Windows packages now include Java 14. It is no longer necessary to install Java separately when using one of these packages. * 12559: HiDPI support: VASSAL now has support for displays with a high pixel density (e.g., Retina displays). On such displays, you should now see correctly sized interface elements and sharper image rendering. +Bug fixes in 3.3.0-beta3: + +* 12732: Use all available rendering hints for text +* 12731: javax.sound.samples.Clip fails to convert WAV files it can play + Bug fixes in 3.3.0-beta2: * 12579: Don't bundle Java on Linux @@ -35,7 +40,7 @@ For changes prior to 3.3.0-beta1, see the change log. [size=16][b]Minimum Requirements[/b][/size] -VASSAL 3.3 requires Java 9 or later. +VASSAL 3.3 requires Java 11 or later. The Windows and Mac packages have an appropriate version of Java bundled with them, so there is no need to install Java separately on those operating systems. Modified: VASSAL-src/trunk/NOTES-csw =================================================================== --- VASSAL-src/trunk/NOTES-csw 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/NOTES-csw 2020-05-12 21:43:43 UTC (rev 9385) @@ -1,4 +1,4 @@ -The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta2. +The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta3. <h3>IMPORTANT</h3> * This is a beta release. Things may be broken which worked in 3.2.17. If you find a bug introduced since 3.2.17, please report it. @@ -8,21 +8,26 @@ * Some modules containing custom drawing code may render incorrectly on HiDPI displays. If you are the maintainer of such a module, let us know and we can advise you about what needs updating for 3.3 in your code. (We are aware already that VASL has this problem and are working with its maintainers to update it.) <h3>Download</h3> -* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-linux.tar.bz2' target='_new'>Linux</a> -* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-macosx.dmg' target='_new'>Mac OS X</a> -* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-windows.exe' target='_new'>Windows</a> -* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-other.zip' target='_new'>Other</a> -* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-src.zip' target='_new'>Source code</a> +* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-linux.tar.bz2' target='_new'>Linux</a> +* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-macosx.dmg' target='_new'>Mac OS X</a> +* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-windows.exe' target='_new'>Windows</a> +* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-other.zip' target='_new'>Other</a> +* <a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-src.zip' target='_new'>Source code</a> <h3>New in 3.3.0</h3> Features: -* 12557: Compatibility with Java 9+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 9 or later. +* 12557, 12613: Compatibility with Java 11+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 11 or later. -* 12558: Bundle Java with VASSAL: The Mac and Windows packages now include Java 13. It is no longer necessary to install Java separately when using one of these packages. +* 12558, 12724: Bundle Java with VASSAL: The Mac and Windows packages now include Java 14. It is no longer necessary to install Java separately when using one of these packages. * 12559: HiDPI support: VASSAL now has support for displays with a high pixel density (e.g., Retina displays). On such displays, you should now see correctly sized interface elements and sharper image rendering. +Bug fixes in 3.3.0-beta3: + +* 12732: Use all available rendering hints for text +* 12731: javax.sound.samples.Clip fails to convert WAV files it can play + Bug fixes in 3.3.0-beta2: * 12579: Don't bundle Java on Linux @@ -34,7 +39,7 @@ For changes prior to 3.3.0-beta1, see the change log. <h3>Minimum Requirements</h3> -VASSAL 3.3 requires Java 9 or later. +VASSAL 3.3 requires Java 11 or later. The Windows and Mac packages have an appropriate version of Java bundled with them, so there is no need to install Java separately on those operating systems. Modified: VASSAL-src/trunk/NOTES-news =================================================================== --- VASSAL-src/trunk/NOTES-news 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/NOTES-news 2020-05-12 21:43:43 UTC (rev 9385) @@ -1,5 +1,5 @@ <p> -The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta2. +The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta3. </p> <h2>IMPORTANT</h2> <ul> @@ -10,11 +10,11 @@ <h2>Download</h2> <ul> - <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-linux.tar.bz2' target='_new'>Linux</a></li> - <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-macosx.dmg' target='_new'>Mac OS X</a></li> - <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-windows.exe' target='_new'>Windows</a></li> - <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-other.zip' target='_new'>Other</a></li> - <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-src.zip' target='_new'>Source code</a></li> + <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-linux.tar.bz2' target='_new'>Linux</a></li> + <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-macosx.dmg' target='_new'>Mac OS X</a></li> + <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-windows.exe' target='_new'>Windows</a></li> + <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-other.zip' target='_new'>Other</a></li> + <li><a href='https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-src.zip' target='_new'>Source code</a></li> </ul> <h2>New in 3.3.0</h2> @@ -21,12 +21,19 @@ <p> Features: <ul> - <li>12557: Compatibility with Java 9+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 9 or later.</li> - <li>12558: Bundle Java with VASSAL: The Mac and Windows packages now include Java 13. It is no longer necessary to install Java separately when using one of these packages.</li> + <li>12557, 12613: Compatibility with Java 9+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 11 or later.</li> + <li>12558, 12724: Bundle Java with VASSAL: The Mac and Windows packages now include Java 14. It is no longer necessary to install Java separately when using one of these packages.</li> <li>12559: HiDPI support: VASSAL now has support for displays with a high pixel density (e.g., Retina displays). On such displays, you should now see correctly sized interface elements and sharper image rendering.</li> </ul> </p> <p> +Bug fixes in 3.3.0-beta3: +<ul> + <li>12732: Use all available rendering hints for text</li> + <li>12731: javax.sound.samples.Clip fails to convert WAV files it can play</li> +</ul> +</p> +<p> Bug fixes in 3.3.0-beta2: <ul> <li>12579: Don't bundle Java on Linux</li> @@ -44,7 +51,7 @@ <h2>Minimum Requirements</h2> <p> -VASSAL 3.3 requires Java 9 or later. +VASSAL 3.3 requires Java 11 or later. </p> <p> The Windows and Mac packages have an appropriate version of Java bundled with them, so there is no need to install Java separately on those operating systems. Modified: VASSAL-src/trunk/NOTES-vassalforum =================================================================== --- VASSAL-src/trunk/NOTES-vassalforum 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/NOTES-vassalforum 2020-05-12 21:43:43 UTC (rev 9385) @@ -1,6 +1,6 @@ -[size=200][b]VASSAL 3.3.0-beta2 released[/b][/size] +[size=200][b]VASSAL 3.3.0-beta3 released[/b][/size] -The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta2. +The VASSAL Team is happy to announce the release of VASSAL 3.3.0-beta3. [size=150][b]IMPORTANT[/b][/size] @@ -13,22 +13,27 @@ [size=150][b]Download[/b][/size] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-linux.tar.bz2]Linux[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-macosx.dmg]Mac OS X[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-windows.exe]Windows[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-other.zip]Other[/url] -[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta2/VASSAL-3.3.0-beta2-src.zip]Source code[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-linux.tar.bz2]Linux[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-macosx.dmg]Mac OS X[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-windows.exe]Windows[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-other.zip]Other[/url] +[url=https://github.com/vassalengine/vassal/releases/download/3.3.0-beta3/VASSAL-3.3.0-beta3-src.zip]Source code[/url] [size=150][b]New in 3.3.0[/b][/size] Features: -* 12557: Compatibility with Java 9+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 9 or later. +* 12557, 12613: Compatibility with Java 9+: VASSAL 3.2 would not run with anything newer than Java 8. VASSAL 3.3 now requires Java 11 or later. -* 12558: Bundle Java with VASSAL: The Mac and Windows packages now include Java 13. It is no longer necessary to install Java separately when using one of these packages. +* 12558, 12724: Bundle Java with VASSAL: The Mac and Windows packages now include Java 13. It is no longer necessary to install Java separately when using one of these packages. * 12559: HiDPI support: VASSAL now has support for displays with a high pixel density (e.g., Retina displays). On such displays, you should now see correctly sized interface elements and sharper image rendering. +Bug fixes in 3.3.0-beta3: + +* 12732: Use all available rendering hints for text +* 12731: javax.sound.samples.Clip fails to convert WAV files it can play + Bug fixes in 3.3.0-beta2: * 12579: Don't bundle Java on Linux @@ -41,7 +46,7 @@ [size=150][b]Minimum Requirements[/b][/size] -VASSAL 3.3 requires Java 9 or later. +VASSAL 3.3 requires Java 11 or later. The Windows and Mac packages have an appropriate version of Java bundled with them, so there is no need to install Java separately on those operating systems. Modified: VASSAL-src/trunk/src/VASSAL/Info.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/Info.java 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/src/VASSAL/Info.java 2020-05-12 21:43:43 UTC (rev 9385) @@ -35,7 +35,7 @@ * Class for storing release-related information */ public final class Info { - private static final String VERSION = "3.3.0-beta2"; //$NON-NLS-1$ + private static final String VERSION = "3.3.0-beta3"; //$NON-NLS-1$ // Do not allow editing of modules with this revision or later private static final String EXPIRY_VERSION = "3.4"; //$NON-NLS-1$ Modified: VASSAL-src/trunk/src/VASSAL/tools/version/VassalVersionTokenizer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/version/VassalVersionTokenizer.java 2020-05-12 16:39:25 UTC (rev 9384) +++ VASSAL-src/trunk/src/VASSAL/tools/version/VassalVersionTokenizer.java 2020-05-12 21:43:43 UTC (rev 9385) @@ -70,6 +70,7 @@ // 3.3.0 tags.put("beta1", 9367); tags.put("beta2", 9373); + tags.put("beta3", 9384); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mk...@us...> - 2020-05-12 16:39:27
|
Revision: 9384 http://sourceforge.net/p/vassalengine/svn/9384 Author: mkiefte Date: 2020-05-12 16:39:25 +0000 (Tue, 12 May 2020) Log Message: ----------- Added Paths: ----------- VASSAL-src/branches/kiefte/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-09 23:41:21
|
Revision: 9383 http://sourceforge.net/p/vassalengine/svn/9383 Author: uckelman Date: 2020-05-09 23:41:19 +0000 (Sat, 09 May 2020) Log Message: ----------- Fixed Bug 12732: Use all available rendering hints for text Modified Paths: -------------- VASSAL-src/trunk/CHANGES VASSAL-src/trunk/src/VASSAL/build/module/Chatter.java VASSAL-src/trunk/src/VASSAL/build/module/Map.java VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java VASSAL-src/trunk/src/VASSAL/tools/ColorButton.java VASSAL-src/trunk/src/VASSAL/tools/swing/SwingUtils.java Modified: VASSAL-src/trunk/CHANGES =================================================================== --- VASSAL-src/trunk/CHANGES 2020-05-09 22:41:37 UTC (rev 9382) +++ VASSAL-src/trunk/CHANGES 2020-05-09 23:41:19 UTC (rev 9383) @@ -1,5 +1,7 @@ 3.3.0-beta3 - ?? +* 12732: Use all available rendering hints for text +* 12731: javax.sound.samples.Clip fails to convert WAV files it can play * 12724: Bundle Java 14 with Windows and Mac packages * 12613: Advance maximum custom class version to Java 11 Modified: VASSAL-src/trunk/src/VASSAL/build/module/Chatter.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Chatter.java 2020-05-09 22:41:37 UTC (rev 9382) +++ VASSAL-src/trunk/src/VASSAL/build/module/Chatter.java 2020-05-09 23:41:19 UTC (rev 9383) @@ -24,7 +24,6 @@ import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; -import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; @@ -63,6 +62,7 @@ import VASSAL.tools.ErrorDialog; import VASSAL.tools.KeyStrokeSource; import VASSAL.tools.ScrollPane; +import VASSAL.tools.swing.SwingUtils; /** * The chat window component. Displays text messages and @@ -368,8 +368,7 @@ g.setColor(getColor(elem)); final Graphics2D g2d = (Graphics2D) g; - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + g2d.addRenderingHints(SwingUtils.FONT_HINTS); return Utilities.drawTabbedText(s, x, y, g, ex, p0); } Modified: VASSAL-src/trunk/src/VASSAL/build/module/Map.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-09 22:41:37 UTC (rev 9382) +++ VASSAL-src/trunk/src/VASSAL/build/module/Map.java 2020-05-09 23:41:19 UTC (rev 9383) @@ -2670,6 +2670,9 @@ } final Graphics2D g2d = (Graphics2D) g; + + g2d.addRenderingHints(SwingUtils.FONT_HINTS); + final double os_scale = g2d.getDeviceConfiguration().getDefaultTransform().getScaleX(); // HDPI: We may get a transform where scale != 1. This means we Modified: VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java 2020-05-09 22:41:37 UTC (rev 9382) +++ VASSAL-src/trunk/src/VASSAL/build/widget/PieceSlot.java 2020-05-09 23:41:19 UTC (rev 9383) @@ -216,6 +216,8 @@ g.setColor(c); if (getExpandedPiece() == null) { + g2d.addRenderingHints(SwingUtils.FONT_HINTS); + final FontMetrics fm = g.getFontMetrics(); g.drawRect(0, 0, size.width - 1, size.height - 1); g.setFont(FONT.deriveFont((float)(FONT.getSize() * os_scale))); Modified: VASSAL-src/trunk/src/VASSAL/tools/ColorButton.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/ColorButton.java 2020-05-09 22:41:37 UTC (rev 9382) +++ VASSAL-src/trunk/src/VASSAL/tools/ColorButton.java 2020-05-09 23:41:19 UTC (rev 9383) @@ -101,6 +101,7 @@ } else { // paint no color and a "nil" if the color is null + g2d.addRenderingHints(SwingUtils.FONT_HINTS); g.setColor(UIManager.getColor("controlText")); final Font font = FONT.deriveFont((float)(FONT.getSize() * os_scale)); g.setFont(font); Modified: VASSAL-src/trunk/src/VASSAL/tools/swing/SwingUtils.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/swing/SwingUtils.java 2020-05-09 22:41:37 UTC (rev 9382) +++ VASSAL-src/trunk/src/VASSAL/tools/swing/SwingUtils.java 2020-05-09 23:41:19 UTC (rev 9383) @@ -18,7 +18,9 @@ */ package VASSAL.tools.swing; +import java.awt.Toolkit; import java.awt.geom.AffineTransform; +import java.util.Map; public class SwingUtils { public static AffineTransform descaleTransform(AffineTransform t) { @@ -28,4 +30,6 @@ t.getTranslateX(), t.getTranslateY() ); } + + public static final Map<?,?> FONT_HINTS = (Map<?,?>) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-09 22:41:39
|
Revision: 9382 http://sourceforge.net/p/vassalengine/svn/9382 Author: uckelman Date: 2020-05-09 22:41:37 +0000 (Sat, 09 May 2020) Log Message: ----------- Fixed Bug 12731: javax.sound.samples.Clip unhelpfully fails to convert WAV files it can play Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/tools/AudioSystemClip.java Modified: VASSAL-src/trunk/src/VASSAL/tools/AudioSystemClip.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/AudioSystemClip.java 2020-05-09 22:33:44 UTC (rev 9381) +++ VASSAL-src/trunk/src/VASSAL/tools/AudioSystemClip.java 2020-05-09 22:41:37 UTC (rev 9382) @@ -19,10 +19,8 @@ package VASSAL.tools; import java.io.BufferedInputStream; -import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.net.URISyntaxException; import java.net.URL; import javax.sound.sampled.AudioInputStream; @@ -35,68 +33,95 @@ import VASSAL.tools.io.IOUtils; public class AudioSystemClip implements AudioClip { - protected Clip clip; + protected Clip the_clip; - public AudioSystemClip(URL url) throws IOException { - AudioInputStream ais = null; + protected Clip getClip(InputStream in) throws IOException { + if (!in.markSupported()) { + // AudioInputStream requires a stream which is markable + in = new BufferedInputStream(in); + } + + // try to get a Clip + Clip clip = null; try { try { - ais = AudioSystem.getAudioInputStream(url.openStream()); - } - catch (UnsupportedAudioFileException e) { - throw new IOException(e); - } - - try { clip = AudioSystem.getClip(); - clip.open(ais); } catch (IllegalArgumentException e) { throw new IOException(e); } catch (LineUnavailableException e) { - throw new IOException(e); + throw new IOException(e); } - } - finally { - IOUtils.closeQuietly(ais); - } - } + catch (SecurityException e) { + throw new IOException(e); + } - public AudioSystemClip(InputStream in) throws IOException { - final BufferedInputStream bis = new BufferedInputStream(in); - try { + // wrap the input stream AudioInputStream ais = null; try { try { - ais = AudioSystem.getAudioInputStream(bis); + ais = AudioSystem.getAudioInputStream(in); } catch (UnsupportedAudioFileException e) { throw new IOException(e); } + // convert the audio stream to the type the clip wants + AudioInputStream cais = null; try { - clip = AudioSystem.getClip(); - clip.open(ais); + try { + cais = AudioSystem.getAudioInputStream(clip.getFormat(), ais); + } + catch (IllegalArgumentException e) { + throw new IOException(e); + } + + try { + clip.open(cais); + return clip; + } + catch (IllegalArgumentException e) { + throw new IOException(e); + } + catch (LineUnavailableException e) { + throw new IOException(e); + } + catch (SecurityException e) { + throw new IOException(e); + } } - catch (IllegalArgumentException e) { - throw new IOException(e); + finally { + IOUtils.closeQuietly(cais); } - catch (LineUnavailableException e) { - throw new IOException(e); - } } finally { IOUtils.closeQuietly(ais); } } + catch (Exception e) { + IOUtils.closeQuietly(clip); + throw e; + } + } + + public AudioSystemClip(URL url) throws IOException { + InputStream in = null; + try { + in = url.openStream(); + the_clip = getClip(in); + } finally { - IOUtils.closeQuietly(bis); + IOUtils.closeQuietly(in); } } + public AudioSystemClip(InputStream in) throws IOException { + the_clip = getClip(in); + } + public void play() { - clip.setFramePosition(0); - clip.start(); + the_clip.setFramePosition(0); + the_clip.start(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-09 22:33:46
|
Revision: 9381 http://sourceforge.net/p/vassalengine/svn/9381 Author: uckelman Date: 2020-05-09 22:33:44 +0000 (Sat, 09 May 2020) Log Message: ----------- Everything on which we want to call closeQuietly() is an AutoCloseable now, so we can be rid of the other overloads. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/tools/io/IOUtils.java Modified: VASSAL-src/trunk/src/VASSAL/tools/io/IOUtils.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/io/IOUtils.java 2020-05-09 13:52:00 UTC (rev 9380) +++ VASSAL-src/trunk/src/VASSAL/tools/io/IOUtils.java 2020-05-09 22:33:44 UTC (rev 9381) @@ -22,14 +22,9 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.ObjectInput; -import java.io.ObjectOutput; import java.io.OutputStream; import java.nio.channels.FileChannel; -import java.util.zip.ZipFile; -import javax.imageio.stream.ImageInputStream; - /** * General I/O stream manipulation utilities. This class provides static * utility methods to reduce boilerplate I/O code. @@ -116,84 +111,19 @@ } /** - * Close an {@link ObjectInput} unconditionally. Equivalent to - * calling <code>o.close()</code> when <code>o</code> is nonnull. - * {@link IOException}s are swallowed, as there is generally - * nothing that can be done about exceptions on closing. + * Close an {@link AutoCloseable} unconditionally. Equivalent to + * calling <code>c.close()</code> when <code>c</code> is nonnull. * - * @param o a (possibly <code>null</code>) <code>ObjectInput</code> + * @param c a (possibly <code>null</code>) <code>AutoCloseable</code> */ - public static void closeQuietly(ObjectInput o) { - if (o == null) return; + public static void closeQuietly(AutoCloseable c) { + if (c == null) return; try { - o.close(); + c.close(); } - catch (IOException e) { + catch (Exception e) { // ignore } } - - /** - * Close an {@link ObjectOutput} unconditionally. Equivalent to - * calling <code>o.close()</code> when <code>o</code> is nonnull. - * {@link IOException}s are swallowed, as there is generally - * nothing that can be done about exceptions on closing. - * - * @param o a (possibly <code>null</code>) <code>ObjectOutput</code> - */ - public static void closeQuietly(ObjectOutput o) { - if (o == null) return; - - try { - o.close(); - } - catch (IOException e) { - // ignore - } - } - - /** - * Close a {@link ZipFile} unconditionally. Equivalent to - * calling <code>z.close()</code> when <code>z</code> is nonnull. - * {@link IOException}s are swallowed, as there is generally - * nothing that can be done about exceptions on closing. - * - * @param z a (possibly <code>null</code>) <code>ZipFile</code> - */ - // Why doesn't ZipFile implement Closeable? Argh! - public static void closeQuietly(ZipFile z) { - if (z == null) return; - - try { - z.close(); - } - catch (IOException e) { - // ignore - } - } - - /** - * Close an {@link ImageInputStream} unconditionally. Equivalent to - * calling <code>s.close()</code> when <code>s</code> is nonnull. - * {@link IOException}s are quietly logged, as there is generally - * nothing that can be done about exceptions on closing. - * - * @param s a (possibly <code>null</code>) <code>ImageInputStream</code> - */ - // Why doesn't ImageInputStream implement Closeable? Argh! - public static void closeQuietly(ImageInputStream s) { - if (s == null) return; - - try { - s.close(); - } - catch (IOException e) { - // ignore - - // Note that ImageInputStreamImpl.close() rather ridiculously throws - // an IOException if the stream is already closed. This is always done - // via ImageInputStreamImpl.checkClosed(). - } - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-09 13:52:02
|
Revision: 9380 http://sourceforge.net/p/vassalengine/svn/9380 Author: uckelman Date: 2020-05-09 13:52:00 +0000 (Sat, 09 May 2020) Log Message: ----------- Issue 12724: Bundle Java 14 with Windows and Mac packages Modified Paths: -------------- VASSAL-src/trunk/CHANGES VASSAL-src/trunk/Makefile Modified: VASSAL-src/trunk/CHANGES =================================================================== --- VASSAL-src/trunk/CHANGES 2020-05-09 11:38:54 UTC (rev 9379) +++ VASSAL-src/trunk/CHANGES 2020-05-09 13:52:00 UTC (rev 9380) @@ -1,5 +1,6 @@ 3.3.0-beta3 - ?? +* 12724: Bundle Java 14 with Windows and Mac packages * 12613: Advance maximum custom class version to Java 11 3.3.0-beta2 - 29 April 2020 Modified: VASSAL-src/trunk/Makefile =================================================================== --- VASSAL-src/trunk/Makefile 2020-05-09 11:38:54 UTC (rev 9379) +++ VASSAL-src/trunk/Makefile 2020-05-09 13:52:00 UTC (rev 9380) @@ -49,11 +49,11 @@ DOCDIR:=doc DISTDIR:=dist -JDOCLINK:=file:///usr/share/javadoc/java-13-openjdk-13.0.0.33-1.rolling.fc30.x86_64/api +JDOCLINK:=file:///usr/share/javadoc/java/api WINJMODS:=jdk-win/jmods OSXJMODS:=jdk-osx/Contents/Home/jmods -LINJMODS:=/usr/lib/jvm/java-13-openjdk-13.0.2.8-1.rolling.fc31.x86_64/jmods +LINJMODS:=/usr/lib/jvm/java-14/jmods VNUM:=3.3.0 #SVNVERSION:=$(shell svnversion | perl -pe 's/(\d+:)?(\d+[MS]?)/$$2/; s/(\d+)M/$$1+1/e') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-09 11:38:56
|
Revision: 9379 http://sourceforge.net/p/vassalengine/svn/9379 Author: uckelman Date: 2020-05-09 11:38:54 +0000 (Sat, 09 May 2020) Log Message: ----------- Updated Linux starup script to check for Java 11. Modified Paths: -------------- VASSAL-src/trunk/dist/linux/VASSAL.sh Modified: VASSAL-src/trunk/dist/linux/VASSAL.sh =================================================================== --- VASSAL-src/trunk/dist/linux/VASSAL.sh 2020-05-06 19:58:11 UTC (rev 9378) +++ VASSAL-src/trunk/dist/linux/VASSAL.sh 2020-05-09 11:38:54 UTC (rev 9379) @@ -12,7 +12,7 @@ exit 1 fi -# Check the Java vesion; we require Java 9+. +# Check the Java vesion; we require Java 11+. VERSION=$("$JAVA" -version 2>&1 | head -1 | sed -e 's/.* version "//; s/".*//') # Java 8 and earlier formats version x.y as 1.x.y @@ -25,13 +25,13 @@ # Check that the major version we found is an integer MAJOR=$(echo "$MAJOR" | sed -e 's/[^0-9]//g') if [ -z "$MAJOR" ]; then - echo "Error: VASSAL requires Java 9 or later. The Java you are using ($JAVA) has an unrecognizable version '$VERSION'." 2>&1 + echo "Error: VASSAL requires Java 11 or later. The Java you are using ($JAVA) has an unrecognizable version '$VERSION'." 2>&1 exit 1 fi -# Check that the major version we found is >= 9 -if [ "$MAJOR" -lt 9 ]; then - echo "Error: VASSAL requires Java 9 or later. The Java you are using ($JAVA) is Java $MAJOR." 2>&1 +# Check that the major version we found is >= 11 +if [ "$MAJOR" -lt 11 ]; then + echo "Error: VASSAL requires Java 11 or later. The Java you are using ($JAVA) is Java $MAJOR." 2>&1 exit 1 fi This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-06 19:58:13
|
Revision: 9378 http://sourceforge.net/p/vassalengine/svn/9378 Author: uckelman Date: 2020-05-06 19:58:11 +0000 (Wed, 06 May 2020) Log Message: ----------- We no longer support Java < 9, so there's no point in checking for Java 5 or 6. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/tools/image/FallbackImageTypeConverter.java Modified: VASSAL-src/trunk/src/VASSAL/tools/image/FallbackImageTypeConverter.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/image/FallbackImageTypeConverter.java 2020-05-06 19:58:03 UTC (rev 9377) +++ VASSAL-src/trunk/src/VASSAL/tools/image/FallbackImageTypeConverter.java 2020-05-06 19:58:11 UTC (rev 9378) @@ -21,8 +21,6 @@ import java.awt.image.BufferedImage; -import org.apache.commons.lang3.SystemUtils; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -74,35 +72,16 @@ this.file_converter = file_converter; } - private boolean tryConvertingInMemory(Reference<BufferedImage> ref) { - /* - * Having an OutOfMemoryException while converting in memory is - * apparently catastrophic on Apple's Java 6 JVM (and possibly also - * on their Java 5 JVM as well). In-memory tiling also uses far more - * memory than it should on Apple's Java 6 JVM due to - * Graphics2D.drawImage making an intermediate copy of the image data. - * Hence, we ensure that when using Java 5 or 6 on Mac OS X, we never - * try in-memory conversion for images which can't comfortably have - * three copies existing simultaneously in memory. - */ - return !SystemUtils.IS_OS_MAC_OSX || - (!SystemUtils.IS_JAVA_1_6 && !SystemUtils.IS_JAVA_1_5) || - 4*ref.obj.getHeight()*ref.obj.getWidth() <= - Runtime.getRuntime().maxMemory()/4; - } - /** {@inheritDoc} */ public BufferedImage convert(Reference<BufferedImage> ref, int type) throws ImageIOException { - if (tryConvertingInMemory(ref)) { - try { - return memory_converter.convert(ref, type); - } - catch (OutOfMemoryError e) { - // This is ok, we just don't have enough free heap for the conversion. - logger.info("Switching to FileImageTypeConverter..."); - } + try { + return memory_converter.convert(ref, type); } + catch (OutOfMemoryError e) { + // This is ok, we just don't have enough free heap for the conversion. + logger.info("Switching to FileImageTypeConverter..."); + } // Try converting on disk instead. return file_converter.convert(ref, type); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-05-06 19:58:05
|
Revision: 9377 http://sourceforge.net/p/vassalengine/svn/9377 Author: uckelman Date: 2020-05-06 19:58:03 +0000 (Wed, 06 May 2020) Log Message: ----------- Whitespace. Modified Paths: -------------- VASSAL-src/trunk/src/VASSAL/configure/SoundConfigurer.java Modified: VASSAL-src/trunk/src/VASSAL/configure/SoundConfigurer.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/configure/SoundConfigurer.java 2020-04-30 18:53:10 UTC (rev 9376) +++ VASSAL-src/trunk/src/VASSAL/configure/SoundConfigurer.java 2020-05-06 19:58:03 UTC (rev 9377) @@ -96,8 +96,7 @@ new Dimension(textField.getMaximumSize().width, textField.getPreferredSize().height)); textField.setEditable(false); - textField.setText(DEFAULT.equals(clipName) ? - defaultResource : clipName); + textField.setText(DEFAULT.equals(clipName) ? defaultResource : clipName); controls.add(textField); } return controls; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-04-30 18:53:11
|
Revision: 9376 http://sourceforge.net/p/vassalengine/svn/9376 Author: uckelman Date: 2020-04-30 18:53:10 +0000 (Thu, 30 Apr 2020) Log Message: ----------- Typo. Modified Paths: -------------- VASSAL-src/trunk/NOTES-vassalforum Modified: VASSAL-src/trunk/NOTES-vassalforum =================================================================== --- VASSAL-src/trunk/NOTES-vassalforum 2020-04-30 18:53:06 UTC (rev 9375) +++ VASSAL-src/trunk/NOTES-vassalforum 2020-04-30 18:53:10 UTC (rev 9376) @@ -29,7 +29,7 @@ * 12559: HiDPI support: VASSAL now has support for displays with a high pixel density (e.g., Retina displays). On such displays, you should now see correctly sized interface elements and sharper image rendering. -Bug fixes in 3.3.0-beta1: +Bug fixes in 3.3.0-beta2: * 12579: Don't bundle Java on Linux This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <uck...@us...> - 2020-04-30 18:53:08
|
Revision: 9375 http://sourceforge.net/p/vassalengine/svn/9375 Author: uckelman Date: 2020-04-30 18:53:06 +0000 (Thu, 30 Apr 2020) Log Message: ----------- Issue 12613: Advanced maximum custom class version to Java 11. Modified Paths: -------------- VASSAL-src/trunk/CHANGES VASSAL-src/trunk/Makefile VASSAL-src/trunk/src/VASSAL/tools/DataArchive.java Modified: VASSAL-src/trunk/CHANGES =================================================================== --- VASSAL-src/trunk/CHANGES 2020-04-30 00:23:28 UTC (rev 9374) +++ VASSAL-src/trunk/CHANGES 2020-04-30 18:53:06 UTC (rev 9375) @@ -1,3 +1,7 @@ +3.3.0-beta3 - ?? + +* 12613: Advance maximum custom class version to Java 11 + 3.3.0-beta2 - 29 April 2020 * 12579: Don't bundle Java on Linux Modified: VASSAL-src/trunk/Makefile =================================================================== --- VASSAL-src/trunk/Makefile 2020-04-30 00:23:28 UTC (rev 9374) +++ VASSAL-src/trunk/Makefile 2020-04-30 18:53:06 UTC (rev 9375) @@ -67,7 +67,7 @@ JAVAPATH:=/usr/bin JC:=$(JAVAPATH)/javac -JCFLAGS:=-d $(CLASSDIR) -Xlint:all -Xmaxwarns 10000 -classpath $(CLASSPATH) -sourcepath $(SRCDIR) --add-exports java.desktop/sun.java2d.cmm=ALL-UNNAMED --add-exports java.desktop/java.awt.peer=ALL-UNNAMED --add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --add-exports java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED --add-exports java.desktop/sun.java2d.cmm=ALL-UNNAMED -source 1.9 -target 1.9 +JCFLAGS:=-d $(CLASSDIR) -Xlint:all -Xmaxwarns 10000 -classpath $(CLASSPATH) -sourcepath $(SRCDIR) --add-exports java.desktop/sun.java2d.cmm=ALL-UNNAMED --add-exports java.desktop/java.awt.peer=ALL-UNNAMED --add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --add-exports java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED --add-exports java.desktop/sun.java2d.cmm=ALL-UNNAMED -source 11 -target 11 #JCFLAGS:=-d $(CLASSDIR) -nowarn -classpath $(CLASSPATH) -sourcepath $(SRCDIR) --add-exports java.desktop/sun.java2d.cmm=ALL-UNNAMED --add-exports java.desktop/java.awt.peer=ALL-UNNAMED --add-exports java.desktop/com.sun.java.swing.plaf.windows=ALL-UNNAMED --add-exports java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED --add-exports java.desktop/sun.java2d.cmm=ALL-UNNAMED -source 1.9 -target 1.9 JAR:=$(JAVAPATH)/jar Modified: VASSAL-src/trunk/src/VASSAL/tools/DataArchive.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/tools/DataArchive.java 2020-04-30 00:23:28 UTC (rev 9374) +++ VASSAL-src/trunk/src/VASSAL/tools/DataArchive.java 2020-04-30 18:53:06 UTC (rev 9375) @@ -458,7 +458,7 @@ final int minor = (data[4] << 8) | data[5]; final int major = (data[6] << 8) | data[7]; - if (major > 53 || (major == 53 && minor != 0)) { + if (major > 55 || (major == 55 && minor != 0)) { ProblemDialog.showDisableable( JOptionPane.WARNING_MESSAGE, null, @@ -466,7 +466,7 @@ cs, "Incompatible Custom Code", "The Custom Code In This Module Should Be Recompiled", - "This module contains custom Java code (" + name + ") which was not compiled to be Java 9 compatible. As a result, this module will not run on all versions of Java which VASSAL itself supports.\n\nPlease check whether there is an updated version of this module. If not, please contact the maintainer of this module and request that it be fixed." + "This module contains custom Java code (" + name + ") which was not compiled to be Java 11 compatible. As a result, this module will not run on all versions of Java which VASSAL itself supports.\n\nPlease check whether there is an updated version of this module. If not, please contact the maintainer of this module and request that it be fixed." ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <swa...@us...> - 2020-04-30 00:23:30
|
Revision: 9374 http://sourceforge.net/p/vassalengine/svn/9374 Author: swampwallaby Date: 2020-04-30 00:23:28 +0000 (Thu, 30 Apr 2020) Log Message: ----------- HiDPI fixes. Initial Utah fixes. Modified Paths: -------------- VSQL-src/trunk/tdc/AttackWizard.java VSQL-src/trunk/tdc/CommandRangeChecker.java VSQL-src/trunk/tdc/EdgeBlockingTerrain.java VSQL-src/trunk/tdc/HexBlockingTerrain.java VSQL-src/trunk/tdc/TdcCommandEncoder.java VSQL-src/trunk/tdc/TdcCounterDetailViewer.java VSQL-src/trunk/tdc/TdcHighlighter.java VSQL-src/trunk/tdc/TdcLeader.java VSQL-src/trunk/tdc/TdcProperties.java VSQL-src/trunk/tdc/UnitInfo.java VSQL-src/trunk/tdc/WizardThread.java Added Paths: ----------- VSQL-src/trunk/tdc/Info.java Modified: VSQL-src/trunk/tdc/AttackWizard.java =================================================================== --- VSQL-src/trunk/tdc/AttackWizard.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/AttackWizard.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -42,7 +42,6 @@ import javax.swing.KeyStroke; import javax.swing.SwingUtilities; -import VASSAL.Info; import VASSAL.build.AbstractConfigurable; import VASSAL.build.Buildable; import VASSAL.build.GameModule; @@ -164,6 +163,7 @@ // User has asked for an Attack Wizard. Use a modified LOS Thread to select a // target hex public void launch(GamePiece source) { + launch(source, null); } @@ -172,7 +172,6 @@ } public void launch(GamePiece source, GamePiece artilleryPark, int addRange) { - final double os_scale = Info.getSystemScaling(); isAirDefence = false; this.addRange = addRange; specialAttackType = NO_SPECIAL_ATTACK; @@ -555,7 +554,8 @@ // User has selected a target hex containing an enemy Artillery Park, Add the // units from the Arty Park as targets (Ignore the Assault Force counters) public void addArtilleryParkUnits(GamePiece p) { - if (TdcProperties.DIVISION_NAVAL.equals(p.getProperty(TdcProperties.DIVISION))) { + if (TdcProperties.DIVISION_NAVAL.equals(p.getProperty(TdcProperties.DIVISION)) || + TdcProperties.NAVAL_PERNELLE_RANGE.equals(p.getProperty(TdcProperties.ARTILLERY_PARK_ID))) { return; } @@ -764,7 +764,8 @@ public void draw(Graphics g, Map map) { if (image != null) { - g.drawImage(image, bounds.x, bounds.y, map.getView()); + final double os_scale = Info.getSystemScaling(); + g.drawImage(image, (int) (bounds.x * os_scale), (int) (bounds.y * os_scale), map.getView()); } } Modified: VSQL-src/trunk/tdc/CommandRangeChecker.java =================================================================== --- VSQL-src/trunk/tdc/CommandRangeChecker.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/CommandRangeChecker.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -59,7 +59,7 @@ protected boolean canBeActivated; // Game Piece can be activated (i.e. is a // combat unit) protected boolean alwaysInCommand; - protected boolean targetHasTelephoneCapbility; + protected boolean targetHasTelephoneCapability; protected String leaderFormationType = ""; protected String leaderFormationValue = ""; @@ -118,7 +118,7 @@ && !Boolean.TRUE.equals(piece.getProperty(Properties.OBSCURED_TO_ME)) && !"Leader".equals(piece.getProperty("Type")); alwaysInCommand = isAlwaysInCommand(); if (canBeActivated && !alwaysInCommand) { - targetHasTelephoneCapbility = hasTelephoneCapability(piece); + targetHasTelephoneCapability = hasTelephoneCapability(piece); String unitClass = (String) piece.getProperty(TdcProperties.CLASS); if (unitClass != null) { @@ -411,7 +411,7 @@ * Regardless of command range, American units in certain hexes are in * command if their leader is also in a telephone hex */ - if (targetHasTelephoneCapbility && hasTelephoneCapability(p)) { + if (targetHasTelephoneCapability && hasTelephoneCapability(p)) { inCommand = true; matches.add(p); } Modified: VSQL-src/trunk/tdc/EdgeBlockingTerrain.java =================================================================== --- VSQL-src/trunk/tdc/EdgeBlockingTerrain.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/EdgeBlockingTerrain.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -62,6 +62,8 @@ final Point2D.Float p1 = map.componentCoordinates2D(end1); final Point2D.Float p2 = map.componentCoordinates2D(end2); final Graphics2D g2 = (Graphics2D) g; + + final double os_scale = Info.getSystemScaling(); if (terrainName.equals(TdcProperties.RIDGE)) { g2.setColor(ridgeColor); @@ -71,10 +73,10 @@ } final Stroke saveStroke = g2.getStroke(); - g2.setStroke(new BasicStroke((float) (6.0f * map.getZoom()), BasicStroke.CAP_ROUND, + g2.setStroke(new BasicStroke((float) (6.0f * map.getZoom() * os_scale), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - g2.drawLine(Math.round(p1.x), Math.round(p1.y), Math.round(p2.x), Math.round(p2.y)); + g2.drawLine((int) Math.round(p1.x * os_scale), (int) Math.round(p1.y * os_scale), (int) Math.round(p2.x * os_scale), (int) Math.round(p2.y * os_scale)); g2.setStroke(saveStroke); } Modified: VSQL-src/trunk/tdc/HexBlockingTerrain.java =================================================================== --- VSQL-src/trunk/tdc/HexBlockingTerrain.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/HexBlockingTerrain.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -95,7 +95,7 @@ g2.setClip(getZoomedShape()); g2.setColor(isPossiblyBlocking() ? possibleColor : blockColor); - g2.setStroke(new BasicStroke((float) (20.0f * map.getZoom()), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + g2.setStroke(new BasicStroke((float) (20.0f * map.getZoom() * Info.getSystemScaling()), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); g2.draw(getZoomedShape()); g2.setStroke(saveStroke); g2.setClip(saveClip); @@ -162,12 +162,13 @@ } shape = new Area(mapShape); - - if (map.getZoom() < .999 || map.getZoom() < 1.001) { + final double os_scale = Info.getSystemScaling(); + + // if (map.getZoom() < .999 || map.getZoom() > 1.001) { final AffineTransform scale = new AffineTransform(); - scale.scale(map.getZoom(), map.getZoom()); + scale.scale(map.getZoom() * os_scale, map.getZoom() * os_scale); shape.transform(scale); - } + // } lastZoom = map.getZoom(); } Added: VSQL-src/trunk/tdc/Info.java =================================================================== --- VSQL-src/trunk/tdc/Info.java (rev 0) +++ VSQL-src/trunk/tdc/Info.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -0,0 +1,39 @@ +/* + * $Id: Info.java 9184 2015-03-17 21:08:43Z uckelman $ + * + * Copyright (c) 2003 by Rodney Kinney + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License (LGPL) as published by the Free Software Foundation. + * + * 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, copies are available + * at http://www.opensource.org. + */ +package tdc; + +import java.awt.GraphicsEnvironment; + +/** + * Class for storing release-related information + */ +public final class Info { + + /** This class should not be instantiated */ + private Info() { } + + public static double getSystemScaling() { + return GraphicsEnvironment.isHeadless() ? 1.0 : + GraphicsEnvironment.getLocalGraphicsEnvironment() + .getDefaultScreenDevice() + .getDefaultConfiguration() + .getDefaultTransform() + .getScaleX(); + } +} Modified: VSQL-src/trunk/tdc/TdcCommandEncoder.java =================================================================== --- VSQL-src/trunk/tdc/TdcCommandEncoder.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/TdcCommandEncoder.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -18,10 +18,10 @@ */ package tdc; -import terrain.TerrainCommandEncoder; import VASSAL.counters.BasicPiece; import VASSAL.counters.Decorator; import VASSAL.counters.GamePiece; +import terrain.TerrainCommandEncoder; public class TdcCommandEncoder extends TerrainCommandEncoder { Modified: VSQL-src/trunk/tdc/TdcCounterDetailViewer.java =================================================================== --- VSQL-src/trunk/tdc/TdcCounterDetailViewer.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/TdcCounterDetailViewer.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -99,8 +99,7 @@ * @author David Sullivan * @version 1.0 */ -public class TdcCounterDetailViewer extends AbstractConfigurable implements Drawable, - DragSourceMotionListener, MouseMotionListener, MouseListener, KeyListener { +public class TdcCounterDetailViewer extends AbstractConfigurable implements Drawable, DragSourceMotionListener, MouseMotionListener, MouseListener, KeyListener { public static final String LATEST_VERSION = "2"; public static final String USE_KEYBOARD = "ShowCounterDetails"; @@ -167,11 +166,9 @@ protected boolean showNonMovable = false; protected String displayWhat = TOP_LAYER; protected String[] displayLayers = new String[0]; - protected FormattedString summaryReportFormat = new FormattedString("$" - + BasicPiece.LOCATION_NAME + "$"); + protected FormattedString summaryReportFormat = new FormattedString("$" + BasicPiece.LOCATION_NAME + "$"); protected FormattedString counterReportFormat = new FormattedString(""); - protected FormattedString emptyHexReportFormat = new FormattedString("$" - + BasicPiece.LOCATION_NAME + "$"); + protected FormattedString emptyHexReportFormat = new FormattedString("$" + BasicPiece.LOCATION_NAME + "$"); protected String version = ""; protected Color fgColor = Color.black; protected Color bgColor; @@ -180,6 +177,9 @@ protected PropertyExpression propertyFilter = new PropertyExpression(); protected Rectangle bounds; + protected Rectangle dbounds; + protected double os_scale; + protected boolean mouseInView = true; protected List<GamePiece> displayablePieces = null; @@ -209,20 +209,8 @@ validator = new SingleChildInstance(map, getClass()); map.addDrawComponent(this); String keyDesc = hotkey == null ? "" : "(" + HotKeyConfigurer.getString(hotkey) + ")"; - GameModule - .getGameModule() - .getPrefs() - .addOption( - Resources.getString("Prefs.general_tab"), - new BooleanConfigurer(USE_KEYBOARD, Resources.getString( - "CounterDetailViewer.use_prompt", keyDesc), Boolean.FALSE)); - GameModule - .getGameModule() - .getPrefs() - .addOption( - Resources.getString("Prefs.general_tab"), - new IntConfigurer(PREFERRED_DELAY, Resources - .getString("CounterDetailViewer.delay_prompt"), new Integer(delay))); + GameModule.getGameModule().getPrefs().addOption(Resources.getString("Prefs.general_tab"), new BooleanConfigurer(USE_KEYBOARD, Resources.getString("CounterDetailViewer.use_prompt", keyDesc), Boolean.FALSE)); + GameModule.getGameModule().getPrefs().addOption(Resources.getString("Prefs.general_tab"), new IntConfigurer(PREFERRED_DELAY, Resources.getString("CounterDetailViewer.delay_prompt"), new Integer(delay))); view.addMouseMotionListener(this); view.addMouseListener(this); @@ -235,8 +223,7 @@ } public void draw(Graphics g, Map map) { - if (currentMousePosition != null - && view.getVisibleRect().contains(currentMousePosition.getPoint())) { + if (currentMousePosition != null && view.getVisibleRect().contains(currentMousePosition.getPoint())) { draw(g, currentMousePosition.getPoint(), view); } } @@ -252,6 +239,7 @@ } bounds = new Rectangle(pt.x, pt.y, 0, 0); + os_scale = Info.getSystemScaling(); if (graphicsVisible) { drawGraphics(g, pt, comp, displayablePieces); @@ -296,227 +284,222 @@ bounds.height *= 2; // Double height for ratings display } - if (bounds.width > 0) { + if (bounds.width <= 0) { + return; + } - final boolean hasHoverText = pieces.get(0).getProperty(TdcProperties.HOVER_TEXT) != null; + final boolean hasHoverText = pieces.get(0).getProperty(TdcProperties.HOVER_TEXT) != null; - Rectangle visibleRect = comp.getVisibleRect(); - bounds.x = Math.min(bounds.x, visibleRect.x + visibleRect.width - bounds.width); - if (bounds.x < visibleRect.x) - bounds.x = visibleRect.x; - bounds.x += 10; - bounds.y = Math.min(bounds.y, visibleRect.y + visibleRect.height - bounds.height) - - (isTextUnderCounters() ? 15 : 0); - int minY = visibleRect.y + (textVisible ? g.getFontMetrics().getHeight() + 6 : 0); - if (bounds.y < minY) - bounds.y = minY; + dbounds = new Rectangle(bounds); + dbounds.x *= os_scale; + dbounds.y *= os_scale; + dbounds.width *= os_scale; + dbounds.height *= os_scale; - if (!hasHoverText) { - if (bgColor != null) { - g.setColor(bgColor); - g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height); - } - if (fgColor != null) { - g.setColor(fgColor); - g.drawRect(bounds.x - 1, bounds.y - 1, bounds.width + 1, bounds.height + 1); - g.drawRect(bounds.x - 2, bounds.y - 2, bounds.width + 3, bounds.height + 3); - } + Rectangle visibleRect = comp.getVisibleRect(); + visibleRect.x *= os_scale; + visibleRect.y *= os_scale; + visibleRect.width *= os_scale; + visibleRect.height *= os_scale; + + dbounds.x = Math.min(dbounds.x, visibleRect.x + visibleRect.width - dbounds.width); + if (dbounds.x < visibleRect.x) + dbounds.x = visibleRect.x; + dbounds.x += 10; + dbounds.y = Math.min(dbounds.y, visibleRect.y + visibleRect.height - dbounds.height) - (isTextUnderCounters() ? 15 : 0); + int minY = visibleRect.y + (textVisible ? g.getFontMetrics().getHeight() + 6 : 0); + if (dbounds.y < minY) + dbounds.y = minY; + + if (!hasHoverText) { + if (bgColor != null) { + g.setColor(bgColor); + g.fillRect(dbounds.x, dbounds.y, dbounds.width, dbounds.height); } - Shape oldClip = g.getClip(); + if (fgColor != null) { + g.setColor(fgColor); + g.drawRect(dbounds.x - 1, dbounds.y - 1, dbounds.width + 1, dbounds.height + 1); + g.drawRect(dbounds.x - 2, dbounds.y - 2, dbounds.width + 3, dbounds.height + 3); + } + } + Shape oldClip = g.getClip(); - rubble = false; - int borderOffset = borderWidth; - double graphicsZoom = graphicsZoomLevel; - for (int i = 0; i < pieces.size(); i++) { + rubble = false; + int borderOffset = borderWidth; + double graphicsZoom = graphicsZoomLevel; + for (int i = 0; i < pieces.size(); i++) { - final GamePiece piece = pieces.get(i); - final Rectangle pieceBounds = getBounds(piece); - final String hover = (String) piece.getProperty(TdcProperties.HOVER_TEXT); + final GamePiece piece = pieces.get(i); + final Rectangle piecebounds = getBounds(piece); + final String hover = (String) piece.getProperty(TdcProperties.HOVER_TEXT); - // Draw the next piece - // pt is the location of the left edge of the piece + // Draw the next piece + // pt is the location of the left edge of the piece - if (!hasHoverText) { - String type = (String) piece.getProperty(TdcProperties.TYPE); - if (TdcProperties.TYPE_RUBBLE.equals(type)) { - rubble = true; - } + if (!hasHoverText) { + String type = (String) piece.getProperty(TdcProperties.TYPE); + if (TdcProperties.TYPE_RUBBLE.equals(type)) { + rubble = true; + } - if (unrotatePieces) - piece.setProperty(Properties.USE_UNROTATED_SHAPE, Boolean.TRUE); - g.setClip(bounds.x - 3, bounds.y - 3, bounds.width + 5, bounds.height + 5); - piece.draw(g, bounds.x - (int) (pieceBounds.x * graphicsZoom) + borderOffset, bounds.y - - (int) (pieceBounds.y * graphicsZoom) + borderWidth, comp, graphicsZoom); - if (unrotatePieces) - piece.setProperty(Properties.USE_UNROTATED_SHAPE, Boolean.FALSE); - g.setClip(oldClip); + if (unrotatePieces) + piece.setProperty(Properties.USE_UNROTATED_SHAPE, Boolean.TRUE); + g.setClip(dbounds.x - 3, dbounds.y - 3, dbounds.width + 5, dbounds.height + 5); + piece.draw(g, dbounds.x - (int) (piecebounds.x * graphicsZoom * os_scale) + borderOffset, dbounds.y - (int) (piecebounds.y * graphicsZoom * os_scale) + borderWidth, comp, graphicsZoom * os_scale); + if (unrotatePieces) + piece.setProperty(Properties.USE_UNROTATED_SHAPE, Boolean.FALSE); + g.setClip(oldClip); - if (isTextUnderCounters()) { - String text = counterReportFormat.getLocalizedText(piece); - if (text.length() > 0) { - int x = bounds.x - (int) (pieceBounds.x * graphicsZoom) + borderOffset; - int y = bounds.y + bounds.height + 10; - drawLabel(g, new Point(x, y), text, Labeler.CENTER, Labeler.CENTER); - } + if (isTextUnderCounters()) { + String text = counterReportFormat.getLocalizedText(piece); + if (text.length() > 0) { + int x = dbounds.x - (int) (piecebounds.x * graphicsZoom * os_scale) + borderOffset; + int y = dbounds.y + dbounds.height + 10; + drawLabel(g, new Point(x, y), text, Labeler.CENTER, Labeler.CENTER); + } - } } - else { - // Hover Text Display - if (hover != null) { - final JTextArea text = new JTextArea(); - final int textWidth = 250; - final int textHeight = 100; - text.setText(hover); - text.setLineWrap(true); - text.setWrapStyleWord(true); - text.setForeground(Color.BLACK); - text.setBackground(Color.WHITE); - text.setSize(textWidth, textHeight); - text.setBorder(BorderFactory.createEtchedBorder()); + } + else { + // Hover Text Display + if (hover != null) { + final JTextArea text = new JTextArea(); + final int textWidth = 250; + final int textHeight = 100; + text.setText(hover); + text.setLineWrap(true); + text.setWrapStyleWord(true); + text.setForeground(Color.BLACK); + text.setBackground(Color.WHITE); + text.setSize(textWidth, textHeight); + text.setBorder(BorderFactory.createEtchedBorder()); - final BufferedImage image = new BufferedImage(text.getWidth(), text.getHeight(), - BufferedImage.TYPE_INT_RGB); - final Graphics2D imageGraphics = image.createGraphics(); - // panel.paint(imageGraphics); - text.paint(imageGraphics); - int x = Math.min(bounds.x, visibleRect.x + visibleRect.width - textWidth); - if (x < visibleRect.x) - x = visibleRect.x; - int y = Math.min(bounds.y, visibleRect.y + visibleRect.height - textHeight); - if (y < visibleRect.y) y = visibleRect.y; - if (x == 0) { - x = 1; - } - g.drawImage(image, x, y, null); + final BufferedImage image = new BufferedImage(text.getWidth(), text.getHeight(), BufferedImage.TYPE_INT_RGB); + final Graphics2D imageGraphics = image.createGraphics(); + // panel.paint(imageGraphics); + text.paint(imageGraphics); + int x = Math.min(dbounds.x, visibleRect.x + visibleRect.width - textWidth); + if (x < visibleRect.x) + x = visibleRect.x; + int y = Math.min(dbounds.y, visibleRect.y + visibleRect.height - textHeight); + if (y < visibleRect.y) + y = visibleRect.y; + if (x == 0) { + x = 1; } + g.drawImage(image, x, y, null); } + } - // Ratings Display - if (TdcProperties.DEBUG) { - @SuppressWarnings("unchecked") - final HashMap<String, String> ratings = (HashMap<String, String>) piece - .getProperty(TdcProperties.RATINGS); - if (ratings != null) { - boolean hasStepLoss = "true".equals(piece.getProperty("Step_Active")); + // Ratings Display + if (TdcProperties.DEBUG) { + @SuppressWarnings("unchecked") + final HashMap<String, String> ratings = (HashMap<String, String>) piece.getProperty(TdcProperties.RATINGS); + if (ratings != null) { + boolean hasStepLoss = "true".equals(piece.getProperty("Step_Active")); - final String fireRating = convertRating(ratings.get(TdcRatings.FIRE_RATING), - hasStepLoss); + final String fireRating = convertRating(ratings.get(TdcRatings.FIRE_RATING), hasStepLoss); - final String fireColor = (String) ratings.get(TdcRatings.FIRE_COLOUR); - if ("No".equals(fireRating)) { - Labeler.drawLabel(g, "No", bounds.x, bounds.y + 87, FONT_SML, Labeler.RIGHT, - Labeler.CENTER, COLOR_RED, COLOR_BLACK, COLOR_RED); - } - else { - fg = TdcRatings.getFireFg(fireColor); - bg = TdcRatings.getFireBg(fireColor); - Labeler.drawLabel(g, fireRating, bounds.x, bounds.y + 87, FONT_LG, Labeler.RIGHT, - Labeler.CENTER, fg, bg, COLOR_BLACK); - } + final String fireColor = (String) ratings.get(TdcRatings.FIRE_COLOUR); + if ("No".equals(fireRating)) { + Labeler.drawLabel(g, "No", dbounds.x, dbounds.y + 87, FONT_SML, Labeler.RIGHT, Labeler.CENTER, COLOR_RED, COLOR_BLACK, COLOR_RED); + } + else { + fg = TdcRatings.getFireFg(fireColor); + bg = TdcRatings.getFireBg(fireColor); + Labeler.drawLabel(g, fireRating, dbounds.x, dbounds.y + 87, FONT_LG, Labeler.RIGHT, Labeler.CENTER, fg, bg, COLOR_BLACK); + } - final String range = ratings.get(TdcRatings.RANGE); - if (range != null && !range.equals("1")) { - Labeler.drawLabel(g, range, bounds.x + 18, bounds.y + 83, FONT_LG, Labeler.RIGHT, - Labeler.CENTER, Color.black, null, null); - } + final String range = ratings.get(TdcRatings.RANGE); + if (range != null && !range.equals("1")) { + Labeler.drawLabel(g, range, dbounds.x + 18, dbounds.y + 83, FONT_LG, Labeler.RIGHT, Labeler.CENTER, Color.black, null, null); + } - final String assaultRating = convertRating(ratings.get(TdcRatings.ASSAULT_RATING), - hasStepLoss); - final String assaultColor = (String) ratings.get(TdcRatings.ASSAULT_COLOUR); - final String assaultDouble = (String) ratings.get(TdcRatings.ASSAULT_DOUBLE); - if (assaultRating != null && !assaultRating.equals("No")) { - fg = TdcRatings.getFireFg(assaultColor); - bg = TdcRatings.getFireBg(assaultColor); - if ("true".equals(assaultDouble)) { - fg = COLOR_RED; - } - Labeler.drawLabel(g, assaultRating, bounds.x + 20, bounds.y + 100, FONT_SML, - Labeler.RIGHT, Labeler.CENTER, fg, bg, COLOR_BLACK); + final String assaultRating = convertRating(ratings.get(TdcRatings.ASSAULT_RATING), hasStepLoss); + final String assaultColor = (String) ratings.get(TdcRatings.ASSAULT_COLOUR); + final String assaultDouble = (String) ratings.get(TdcRatings.ASSAULT_DOUBLE); + if (assaultRating != null && !assaultRating.equals("No")) { + fg = TdcRatings.getFireFg(assaultColor); + bg = TdcRatings.getFireBg(assaultColor); + if ("true".equals(assaultDouble)) { + fg = COLOR_RED; } + Labeler.drawLabel(g, assaultRating, dbounds.x + 20, dbounds.y + 100, FONT_SML, Labeler.RIGHT, Labeler.CENTER, fg, bg, COLOR_BLACK); + } - final String flakRating = ratings.get(TdcRatings.FLAK_RATING); - if (!("No".equals(flakRating))) { - Labeler.drawLabel(g, flakRating, bounds.x + 2, bounds.y + 110, FONT_SML, - Labeler.RIGHT, Labeler.CENTER, COLOR_BLACK, COLOR_BLUE, COLOR_BLACK); + final String flakRating = ratings.get(TdcRatings.FLAK_RATING); + if (!("No".equals(flakRating))) { + Labeler.drawLabel(g, flakRating, dbounds.x + 2, dbounds.y + 110, FONT_SML, Labeler.RIGHT, Labeler.CENTER, COLOR_BLACK, COLOR_BLUE, COLOR_BLACK); + } + final String defRating = (String) ratings.get(TdcRatings.DEF_RATING); + final String armoured = (String) ratings.get(TdcRatings.ARMOURED); + if (defRating != null) { + if ("true".equals(armoured)) { + bg = COLOR_BLACK; + fg = COLOR_WHITE; } - final String defRating = (String) ratings.get(TdcRatings.DEF_RATING); - final String armoured = (String) ratings.get(TdcRatings.ARMOURED); - if (defRating != null) { - if ("true".equals(armoured)) { - bg = COLOR_BLACK; - fg = COLOR_WHITE; - } - else { - fg = COLOR_BLACK; - bg = COLOR_WHITE; - } - Labeler.drawLabel(g, defRating, bounds.x, bounds.y + 130, FONT_SML, Labeler.RIGHT, - Labeler.CENTER, fg, bg, COLOR_BLACK); + else { + fg = COLOR_BLACK; + bg = COLOR_WHITE; } + Labeler.drawLabel(g, defRating, dbounds.x, dbounds.y + 130, FONT_SML, Labeler.RIGHT, Labeler.CENTER, fg, bg, COLOR_BLACK); + } - final String tqrRating = convertRating(ratings.get(TdcRatings.TQR_RATING), hasStepLoss); - final boolean isRedTqr = "true".equals(ratings.get(TdcRatings.RED_TQR)); - Labeler.drawLabel(g, tqrRating, bounds.x + 75, bounds.y + 83, FONT_LG, Labeler.LEFT, - Labeler.CENTER, isRedTqr ? COLOR_RED : COLOR_BLACK, null, null); + final String tqrRating = convertRating(ratings.get(TdcRatings.TQR_RATING), hasStepLoss); + final boolean isRedTqr = "true".equals(ratings.get(TdcRatings.RED_TQR)); + Labeler.drawLabel(g, tqrRating, dbounds.x + 75, dbounds.y + 83, FONT_LG, Labeler.LEFT, Labeler.CENTER, isRedTqr ? COLOR_RED : COLOR_BLACK, null, null); - final String moveRating = (String) ratings.get(TdcRatings.MOVE_RATING); - final String moveColour = (String) ratings.get(TdcRatings.MOVE_COLOUR); - if ("Black".equals(moveColour)) { - bg = null; - fg = COLOR_BLACK; - } - else if ("Red".equals(moveColour)) { - bg = null; - fg = COLOR_RED; - } - else if ("White".equals(moveColour)) { - bg = Color.LIGHT_GRAY; - fg = COLOR_WHITE; - } - Labeler.drawLabel(g, moveRating, bounds.x + 75, bounds.y + 103, - ("No".equals(moveRating) ? FONT_SML : FONT_LG), Labeler.LEFT, Labeler.CENTER, fg, - bg, null); + final String moveRating = (String) ratings.get(TdcRatings.MOVE_RATING); + final String moveColour = (String) ratings.get(TdcRatings.MOVE_COLOUR); + if ("Black".equals(moveColour)) { + bg = null; + fg = COLOR_BLACK; + } + else if ("Red".equals(moveColour)) { + bg = null; + fg = COLOR_RED; + } + else if ("White".equals(moveColour)) { + bg = Color.LIGHT_GRAY; + fg = COLOR_WHITE; + } + Labeler.drawLabel(g, moveRating, dbounds.x + 75, dbounds.y + 103, ("No".equals(moveRating) ? FONT_SML : FONT_LG), Labeler.LEFT, Labeler.CENTER, fg, bg, null); - String steps = (String) piece.getProperty(TdcProperties.STEP); - final String organic = (String) ratings.get(TdcRatings.ORGANIC); - if ("true".equals(organic)) { - g.setColor(COLOR_BLACK); - g.fillRect(bounds.x + 40, bounds.y + 78, 15, 9); - } - if ("1".equals(steps)) { - g.setColor(COLOR_RED); - g.fillOval(bounds.x + 46, bounds.y + 80, 5, 5); - } - else if ("2".equals(steps)) { - g.setColor(COLOR_RED); - g.fillOval(bounds.x + 42, bounds.y + 80, 5, 5); - g.fillOval(bounds.x + 49, bounds.y + 80, 5, 5); - } - // has Telephone? - if ("true".equals(piece.getProperty(TdcProperties.HAS_TELEPHONE))) { - Labeler.drawLabel(g, "P", bounds.x, bounds.y + 110, FONT_SML, Labeler.RIGHT, - Labeler.CENTER, Color.white, Color.red, null); - } - // Independent? - final boolean isBlackStripe = "true".equals(piece - .getProperty(TdcProperties.BLACK_STRIPE_IND)); - if ("true".equals(piece.getProperty(TdcProperties.IS_INDEPENDENT))) { - Labeler.drawLabel(g, " ", bounds.x + 14, bounds.y + 142, - FONT_VSML, Labeler.RIGHT, Labeler.CENTER, isBlackStripe ? Color.black - : Color.white, isBlackStripe ? Color.black : Color.white, COLOR_BLACK); - } + String steps = (String) piece.getProperty(TdcProperties.STEP); + final String organic = (String) ratings.get(TdcRatings.ORGANIC); + if ("true".equals(organic)) { + g.setColor(COLOR_BLACK); + g.fillRect(dbounds.x + 40, dbounds.y + 78, 15, 9); } + if ("1".equals(steps)) { + g.setColor(COLOR_RED); + g.fillOval(dbounds.x + 46, dbounds.y + 80, 5, 5); + } + else if ("2".equals(steps)) { + g.setColor(COLOR_RED); + g.fillOval(dbounds.x + 42, dbounds.y + 80, 5, 5); + g.fillOval(dbounds.x + 49, dbounds.y + 80, 5, 5); + } + // has Telephone? + if ("true".equals(piece.getProperty(TdcProperties.HAS_TELEPHONE))) { + Labeler.drawLabel(g, "P", dbounds.x, dbounds.y + 110, FONT_SML, Labeler.RIGHT, Labeler.CENTER, Color.white, Color.red, null); + } + // Independent? + final boolean isBlackStripe = "true".equals(piece.getProperty(TdcProperties.BLACK_STRIPE_IND)); + if ("true".equals(piece.getProperty(TdcProperties.IS_INDEPENDENT))) { + Labeler.drawLabel(g, " ", dbounds.x + 14, dbounds.y + 142, FONT_VSML, Labeler.RIGHT, Labeler.CENTER, isBlackStripe ? Color.black : Color.white, isBlackStripe ? Color.black : Color.white, COLOR_BLACK); + } } - /* - * ---------------------------------------------------------------------- - * ------------------------- - */ + } + /* + * ---------------------------------------------------------------------- + * ------------------------- + */ - bounds.translate((int) (pieceBounds.width * graphicsZoom), 0); - borderOffset += borderWidth; - } + dbounds.translate((int) (piecebounds.width * graphicsZoom * os_scale), 0); + borderOffset += borderWidth; } + } protected static final Font FONT_LG = new Font("Dialog", Font.BOLD, 16); @@ -533,8 +516,7 @@ for (GamePiece piece : pieces) { final Dimension pieceBounds = getBounds(piece).getSize(); bounds.width += (int) Math.round(pieceBounds.width * graphicsZoomLevel) + borderWidth; - bounds.height = Math.max(bounds.height, - (int) Math.round(pieceBounds.height * graphicsZoomLevel) + borderWidth * 2); + bounds.height = Math.max(bounds.height, (int) Math.round(pieceBounds.height * graphicsZoomLevel) + borderWidth * 2); } bounds.width += borderWidth; @@ -573,8 +555,8 @@ String weather = null; String time = null; int steps = 0; - int x = bounds.x - bounds.width; - int y = bounds.y - 5; + int x = (int) (bounds.x * os_scale - bounds.width * os_scale); + int y = (int) (bounds.y * os_scale - 5 * os_scale); while (pi.hasMoreElements()) { GamePiece piece = pi.nextPiece(); @@ -631,8 +613,7 @@ boolean hill = "true".equals(hgrid.getProperty(TdcProperties.HILL, snapPt)); boolean inGermany = "true".equals(hgrid.getProperty(TdcProperties.IN_GERMANY, snapPt)); boolean inBirHachiem = "true".equals(hgrid.getProperty(TdcProperties.BIR_HACHEIM, snapPt)); - boolean minefieldDoor = "true".equals(hgrid.getProperty(TdcProperties.MINEFIELD_DOOR, - snapPt)); + boolean minefieldDoor = "true".equals(hgrid.getProperty(TdcProperties.MINEFIELD_DOOR, snapPt)); boolean raised = "true".equals(hgrid.getProperty(TdcProperties.RAISED_ROAD, snapPt)) || "true".equals(hgrid.getProperty(TdcProperties.RAISED_RAILROAD, snapPt)); boolean embank = "true".equals(hgrid.getProperty(TdcProperties.EMBANKMENT_ROAD, snapPt)) || "true".equals(hgrid.getProperty(TdcProperties.EMBANKMENT_RAILROAD, snapPt)); boolean sunken = "true".equals(hgrid.getProperty(TdcProperties.SUNKEN_ROAD, snapPt)) || "true".equals(hgrid.getProperty(TdcProperties.SUNKEN_RAILROAD, snapPt)); @@ -640,13 +621,12 @@ if (terrain.equals(TdcProperties.TERRAIN_BOCAGE)) { terrain = TdcProperties.TERRAIN_HEDGEROW; } - - + // Convert to Beach terrain if hex is on overlay beach hex and the overlay is active final String overlay = (String) hgrid.getProperty(TdcProperties.OVERLAY, snapPt); // Is hex on an overlay? final boolean isBeach = "true".equals(hgrid.getProperty(TdcProperties.TERRAIN_BEACH, snapPt)); // Is it an overlay beach hex? if (isBeach) { - final String overlay_level = (String) GameModule.getGameModule().getProperty("Overlay-"+overlay); + final String overlay_level = (String) GameModule.getGameModule().getProperty("Overlay-" + overlay); if ("2".equals(overlay_level)) { // Is overlay active? terrain = TdcProperties.TERRAIN_BEACH; // Convert to Beach terrain } @@ -653,7 +633,7 @@ } final String basicTerrain = terrain; - + if (terrain == null || terrain.equals("null")) { terrain = ""; } @@ -660,9 +640,7 @@ else { terrain = " " + terrain; } - if (op - && (!rubble || (!TdcProperties.CITY.equals(basicTerrain) && !TdcProperties.FORTIFIED - .equals(basicTerrain)))) + if (op && (!rubble || (!TdcProperties.CITY.equals(basicTerrain) && !TdcProperties.FORTIFIED.equals(basicTerrain)))) terrain += ", OP"; if (strongpoint && (!rubble || !TdcProperties.FORTIFIED.equals(basicTerrain))) terrain += ", Strongpoint"; @@ -673,7 +651,7 @@ if (embank) terrain += ", Embankment Road/RR"; if (sunken) - terrain += ", Sunken Road/RR"; + terrain += ", Sunken Road/RR"; if (minefieldDoor) terrain += ", Minefield Door"; if (inGermany) @@ -683,9 +661,9 @@ String poi = (String) hgrid.getProperty(TdcProperties.TERRAIN_POI, snapPt); if (poi != null) { - terrain += "("+poi+")"; + terrain += "(" + poi + ")"; } - + time = (String) GameModule.getGameModule().getProperty(TdcProperties.TIME); if (time == null) time = ""; @@ -718,6 +696,11 @@ final Font f = new Font("Dialog", Font.PLAIN, fontSize); g.setFont(f); + // If + if (! displayablePieces.isEmpty()) { + x += 10 + 75 * displayablePieces.size() * os_scale; + } + drawLabel(g, new Point(x, y), locationName, Labeler.RIGHT, Labeler.BOTTOM); int xx = x; @@ -724,13 +707,12 @@ // Don't display weather in Crete, always the same xx += g.getFontMetrics().stringWidth(locationName + " ") + 2; - if (weather != null && ! UnitInfo.isCreteRules()) { - drawLabel(g, new Point(xx, y), weather, Labeler.RIGHT, Labeler.BOTTOM, getWeatherFg(weather), - getWeatherBg(weather)); + if (weather != null && !UnitInfo.isCreteRules()) { + drawLabel(g, new Point(xx, y), weather, Labeler.RIGHT, Labeler.BOTTOM, getWeatherFg(weather), getWeatherBg(weather)); xx += g.getFontMetrics().stringWidth(weather + " ") + 2; } - if (TdcProperties.TIME_NIGHT.equals(time)) { + if (TdcProperties.TIME_NIGHT.equals(time)) { drawLabel(g, new Point(xx, y), time, Labeler.RIGHT, Labeler.BOTTOM, Color.white, Color.black); } @@ -737,8 +719,7 @@ } protected static Color getWeatherFg(String weather) { - if (TdcProperties.WEATHER_RAIN.equals(weather) - || TdcProperties.WEATHER_OVERCAST.equals(weather)) { + if (TdcProperties.WEATHER_RAIN.equals(weather) || TdcProperties.WEATHER_OVERCAST.equals(weather)) { return Color.white; } else { @@ -779,17 +760,13 @@ drawLabel(g, pt, label, Labeler.RIGHT, Labeler.BOTTOM); } - protected void drawLabel(Graphics g, Point pt, String label, int hAlign, int vAlign, Color fg, - Color bg) { + protected void drawLabel(Graphics g, Point pt, String label, int hAlign, int vAlign, Color fg, Color bg) { if (label != null) { Graphics2D g2d = ((Graphics2D) g); - g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); - Labeler.drawLabel(g, label, pt.x, pt.y, new Font("Dialog", Font.PLAIN, fontSize), hAlign, - vAlign, fg, bg, Color.black); - g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); + Labeler.drawLabel(g, label, pt.x, pt.y, new Font("Dialog", Font.PLAIN, fontSize), hAlign, vAlign, fg, bg, Color.black); + g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } } @@ -813,9 +790,7 @@ if (displayablePieces.size() < minimumDisplayablePieces) { if (displayablePieces.size() > 0) { graphicsVisible = zoom < zoomLevel; - textVisible = zoom < zoomLevel - && (summaryReportFormat.getFormat().length() > 0 || counterReportFormat.getFormat() - .length() > 0); + textVisible = zoom < zoomLevel && (summaryReportFormat.getFormat().length() > 0 || counterReportFormat.getFormat().length() > 0); } else { textVisible = (minimumDisplayablePieces == 0 && emptyHexReportFormat.getFormat().length() > 0); @@ -824,9 +799,7 @@ } else { graphicsVisible = drawPieces; - textVisible = showText - && (summaryReportFormat.getFormat().length() > 0 || counterReportFormat.getFormat() - .length() > 0); + textVisible = showText && (summaryReportFormat.getFormat().length() > 0 || counterReportFormat.getFormat().length() > 0); } // For VP display, force text off, graphics on to get hover @@ -850,8 +823,7 @@ rubble = false; GamePiece[] allPieces = map.getPieces(); // All pieces from bottom up - Visitor visitor = new Visitor(new Filter(), map, map.mapCoordinates(currentMousePosition - .getPoint())); + Visitor visitor = new Visitor(new Filter(), map, map.mapCoordinates(currentMousePosition.getPoint())); DeckVisitorDispatcher dispatcher = new DeckVisitorDispatcher(visitor); /* @@ -988,8 +960,7 @@ } public Object visitStack(Stack s) { - boolean addContents = foundPieceAt == null ? super.visitStack(s) != null : foundPieceAt - .equals(s.getPosition()); + boolean addContents = foundPieceAt == null ? super.visitStack(s) != null : foundPieceAt.equals(s.getPosition()); if (addContents) { for (Iterator<GamePiece> i = s.getPiecesIterator(); i.hasNext();) { apply(i.next()); @@ -999,8 +970,7 @@ } public Object visitDefault(GamePiece p) { - if (foundPieceAt == null ? super.visitDefault(p) != null : foundPieceAt.equals(p - .getPosition())) { + if (foundPieceAt == null ? super.visitDefault(p) != null : foundPieceAt.equals(p.getPosition())) { apply(p); } return null; @@ -1095,8 +1065,7 @@ } public void keyPressed(KeyEvent e) { - if (hotkey != null - && Boolean.TRUE.equals(GameModule.getGameModule().getPrefs().getValue(USE_KEYBOARD))) { + if (hotkey != null && Boolean.TRUE.equals(GameModule.getGameModule().getPrefs().getValue(USE_KEYBOARD))) { if (hotkey.equals(KeyStroke.getKeyStrokeForEvent(e))) { showDetails(); } @@ -1144,8 +1113,7 @@ minimumDisplayablePieces = 2; } - fgColor = map.getHighlighter() instanceof ColoredBorder ? ((ColoredBorder) map.getHighlighter()) - .getColor() : Color.black; + fgColor = map.getHighlighter() instanceof ColoredBorder ? ((ColoredBorder) map.getHighlighter()).getColor() : Color.black; bgColor = new Color(255 - fgColor.getRed(), 255 - fgColor.getGreen(), 255 - fgColor.getBlue()); @@ -1153,42 +1121,22 @@ } public String[] getAttributeNames() { - return new String[] { VERSION, DELAY, HOTKEY, BG_COLOR, FG_COLOR, MINIMUM_DISPLAYABLE, - ZOOM_LEVEL, DRAW_PIECES, DRAW_PIECES_AT_ZOOM, GRAPH_SINGLE_DEPRECATED, BORDER_WIDTH, - SHOW_TEXT, SHOW_TEXT_SINGLE_DEPRECATED, FONT_SIZE, SUMMARY_REPORT_FORMAT, - COUNTER_REPORT_FORMAT, EMPTY_HEX_REPORT_FORMAT, DISPLAY, LAYER_LIST, PROPERTY_FILTER, - SHOW_NOSTACK, SHOW_MOVE_SELECTED, SHOW_NON_MOVABLE, UNROTATE_PIECES, SHOW_DECK }; + return new String[] { VERSION, DELAY, HOTKEY, BG_COLOR, FG_COLOR, MINIMUM_DISPLAYABLE, ZOOM_LEVEL, DRAW_PIECES, DRAW_PIECES_AT_ZOOM, GRAPH_SINGLE_DEPRECATED, BORDER_WIDTH, SHOW_TEXT, SHOW_TEXT_SINGLE_DEPRECATED, FONT_SIZE, + SUMMARY_REPORT_FORMAT, COUNTER_REPORT_FORMAT, EMPTY_HEX_REPORT_FORMAT, DISPLAY, LAYER_LIST, PROPERTY_FILTER, SHOW_NOSTACK, SHOW_MOVE_SELECTED, SHOW_NON_MOVABLE, UNROTATE_PIECES, SHOW_DECK }; } public String[] getAttributeDescriptions() { - return new String[] { - "Version", // Not displayed - "Recommended Delay before display (ms): ", - "Keyboard shortcut to display: ", - "Background color: ", - "Border/text color: ", - "Display when at least this many pieces will be included: ", - "Always display when zoom level less than: ", - "Draw pieces?", - "Draw pieces using zoom factor: ", - "Display unit graphics for single counter?", // Obsolete - "Width of gap between pieces: ", - "Display text?", - "Display text report for single counter?",// Obsolete - "Font size: ", "Summary text above pieces: ", "Text below each piece: ", - "Text for empty location: ", "Include individual pieces: ", "Listed layers", - "Piece selection property filter: ", "Include non-stacking pieces?", - "Include move-when-selected pieces?", "Include non-movable pieces?", - "Show pieces in un-rotated state?", "Include top piece in Deck?" }; + return new String[] { "Version", // Not displayed + "Recommended Delay before display (ms): ", "Keyboard shortcut to display: ", "Background color: ", "Border/text color: ", "Display when at least this many pieces will be included: ", + "Always display when zoom level less than: ", "Draw pieces?", "Draw pieces using zoom factor: ", "Display unit graphics for single counter?", // Obsolete + "Width of gap between pieces: ", "Display text?", "Display text report for single counter?", // Obsolete + "Font size: ", "Summary text above pieces: ", "Text below each piece: ", "Text for empty location: ", "Include individual pieces: ", "Listed layers", "Piece selection property filter: ", "Include non-stacking pieces?", + "Include move-when-selected pieces?", "Include non-movable pieces?", "Show pieces in un-rotated state?", "Include top piece in Deck?" }; } public Class<?>[] getAttributeTypes() { - return new Class<?>[] { String.class, Integer.class, KeyStroke.class, Color.class, Color.class, - MinConfig.class, Double.class, Boolean.class, Double.class, Boolean.class, Integer.class, - Boolean.class, Boolean.class, Integer.class, ReportFormatConfig.class, - CounterFormatConfig.class, EmptyFormatConfig.class, DisplayConfig.class, String[].class, - PropertyExpression.class, Boolean.class, Boolean.class, Boolean.class, Boolean.class, - Boolean.class }; + return new Class<?>[] { String.class, Integer.class, KeyStroke.class, Color.class, Color.class, MinConfig.class, Double.class, Boolean.class, Double.class, Boolean.class, Integer.class, Boolean.class, Boolean.class, Integer.class, + ReportFormatConfig.class, CounterFormatConfig.class, EmptyFormatConfig.class, DisplayConfig.class, String[].class, PropertyExpression.class, Boolean.class, Boolean.class, Boolean.class, Boolean.class, Boolean.class }; } public static class DisplayConfig extends StringEnum { @@ -1205,15 +1153,13 @@ public static class EmptyFormatConfig implements ConfigurerFactory { public Configurer getConfigurer(AutoConfigurable c, String key, String name) { - return new FormattedStringConfigurer(key, name, new String[] { BasicPiece.LOCATION_NAME, - BasicPiece.CURRENT_MAP, BasicPiece.CURRENT_BOARD, BasicPiece.CURRENT_ZONE }); + return new FormattedStringConfigurer(key, name, new String[] { BasicPiece.LOCATION_NAME, BasicPiece.CURRENT_MAP, BasicPiece.CURRENT_BOARD, BasicPiece.CURRENT_ZONE }); } } public static class ReportFormatConfig implements ConfigurerFactory { public Configurer getConfigurer(AutoConfigurable c, String key, String name) { - return new FormattedStringConfigurer(key, name, new String[] { BasicPiece.LOCATION_NAME, - BasicPiece.CURRENT_MAP, BasicPiece.CURRENT_BOARD, BasicPiece.CURRENT_ZONE, SUM }); + return new FormattedStringConfigurer(key, name, new String[] { BasicPiece.LOCATION_NAME, BasicPiece.CURRENT_MAP, BasicPiece.CURRENT_BOARD, BasicPiece.CURRENT_ZONE, SUM }); } } @@ -1490,8 +1436,7 @@ } }; } - else if (FONT_SIZE.equals(name) || SUMMARY_REPORT_FORMAT.equals(name) - || COUNTER_REPORT_FORMAT.equals(name)) { + else if (FONT_SIZE.equals(name) || SUMMARY_REPORT_FORMAT.equals(name) || COUNTER_REPORT_FORMAT.equals(name)) { return new VisibilityCondition() { public boolean shouldBeVisible() { return showText; @@ -1498,8 +1443,7 @@ } }; } - else if (DRAW_PIECES.equals(name) || SHOW_TEXT.equals(name) || SHOW_NOSTACK.equals(name) - || SHOW_DECK.equals(name) || DISPLAY.equals(name)) { + else if (DRAW_PIECES.equals(name) || SHOW_TEXT.equals(name) || SHOW_NOSTACK.equals(name) || SHOW_DECK.equals(name) || DISPLAY.equals(name)) { return new VisibilityCondition() { public boolean shouldBeVisible() { return true; @@ -1538,8 +1482,7 @@ * The following fields are not to be displayed. They are either obsolete or * maintained for backward compatibility */ - else if (VERSION.equals(name) || SHOW_TEXT_SINGLE_DEPRECATED.equals(name) - || GRAPH_SINGLE_DEPRECATED.equals(name)) { + else if (VERSION.equals(name) || SHOW_TEXT_SINGLE_DEPRECATED.equals(name) || GRAPH_SINGLE_DEPRECATED.equals(name)) { return new VisibilityCondition() { public boolean shouldBeVisible() { return false; Modified: VSQL-src/trunk/tdc/TdcHighlighter.java =================================================================== --- VSQL-src/trunk/tdc/TdcHighlighter.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/TdcHighlighter.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -69,15 +69,16 @@ Color oldColor = getColor(); int oldThickness = getThickness(); + Rectangle r = p.getShape().getBounds(); + /* Out of command/formation color display and label */ if (!info.isInCommand()) { setColor(Color.red); setThickness(3); - Rectangle r = p.getShape().getBounds(); - int x1 = x + (int) (zoom * r.x) - 1; - int y2 = y + (int) (zoom * (r.y + r.height)); - int x2 = x1 + (int) (zoom * r.width); - int y1 = y2 - (int) (zoom * 75); + int x1 = x + (int) (zoom * r.x) - 1; + int y2 = y + (int) (zoom * (r.y + r.height)); + int x2 = x1 + (int) (zoom * r.width); + int y1 = y2 - (int) (zoom * 75); g.setColor(Color.red); g.drawLine(x1, y2, x2, y1); } @@ -110,7 +111,7 @@ else { color = Color.blue; } - Labeler.drawLabel(g, info.getTqrAdjustmentString(), x + (int) (51 * zoom), y - (int) (28 * zoom), numberFont, + Labeler.drawLabel(g, info.getTqrAdjustmentString(), x + (int) (52 * zoom), y - (int) (28 * zoom), numberFont, Labeler.CENTER, Labeler.CENTER, color, Color.WHITE, Color.BLACK); } @@ -118,7 +119,7 @@ if (numberFont == null || lastZoom != zoom) { numberFont = new Font("Dialog", Font.BOLD, (int) (16 * zoom)); } - Labeler.drawLabel(g, info.getAdjustedMove(), x + (int) (70 * zoom), y - (int) (6 * zoom), numberFont, + Labeler.drawLabel(g, info.getAdjustedMove(), x + (int) (71 * zoom), y - (int) (6 * zoom), numberFont, Labeler.LEFT, Labeler.CENTER, Color.BLACK, Color.WHITE, Color.BLACK); } @@ -126,7 +127,7 @@ if (numberFont == null || lastZoom != zoom) { numberFont = new Font("Dialog", Font.BOLD, (int) (14 * zoom)); } - Labeler.drawLabel(g, info.getFireAdjustmentString(), x - (int) (53 * zoom), y - (int) (30 * zoom), numberFont, + Labeler.drawLabel(g, info.getFireAdjustmentString(), x - (int) (51 * zoom), y - (int) (30 * zoom), numberFont, Labeler.CENTER, Labeler.CENTER, Color.BLACK, Color.WHITE, Color.BLACK); } @@ -134,7 +135,7 @@ if (numberFont == null || lastZoom != zoom) { numberFont = new Font("Dialog", Font.BOLD, (int) (14 * zoom)); } - Labeler.drawLabel(g, info.getAssaultAdjustmentString(), x - (int) (53 * zoom), y - (int) (10 * zoom), numberFont, + Labeler.drawLabel(g, info.getAssaultAdjustmentString(), x - (int) (51 * zoom), y - (int) (10 * zoom), numberFont, Labeler.CENTER, Labeler.CENTER, Color.BLACK, Color.WHITE, Color.BLACK); } @@ -142,7 +143,7 @@ if (numberFont == null || lastZoom != zoom) { numberFont = new Font("Dialog", Font.BOLD, (int) (14 * zoom)); } - Labeler.drawLabel(g, info.getDefenceAdjustmentString(), x - (int) (52 * zoom), y + Labeler.drawLabel(g, info.getDefenceAdjustmentString(), x - (int) (51 * zoom), y + (int) (15 * zoom), numberFont, Labeler.CENTER, Labeler.CENTER, Color.BLACK, Color.WHITE, Color.BLACK); } Modified: VSQL-src/trunk/tdc/TdcLeader.java =================================================================== --- VSQL-src/trunk/tdc/TdcLeader.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/TdcLeader.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -163,21 +163,23 @@ public void draw(Graphics g, int x, int y, Component obs, double zoom) { piece.draw(g, x, y, obs, zoom); + final double os_scale = Info.getSystemScaling(); + if (isShowingInfo && Boolean.TRUE.equals(getProperty(Properties.SELECTED))) { buildInfoImage(); - g.drawImage(infoImage, x - (int) (infoImage.getWidth() / 2), y + (int) (zoom * 37.5), null); + g.drawImage(infoImage, x - (int) (infoImage.getWidth() * os_scale / 2), y + (int) (zoom * os_scale * 37.5), null); } if (zoom != lastZoom) { lastZoom = zoom; - displayFont = new Font("Dialog", Font.BOLD, (int) (16 * zoom)); - displayFont2 = new Font("Dialog", Font.BOLD, (int) (14 * zoom)); + displayFont = new Font("Dialog", Font.BOLD, (int) (16 * zoom * os_scale)); + displayFont2 = new Font("Dialog", Font.BOLD, (int) (14 * zoom * os_scale)); } // Draw replacement values? if (isReplacement()) { - Labeler.drawLabel(g, String.valueOf(getCurrentCommandRange()), x + (int) (30 * zoom), y + (int) (-12 * zoom), displayFont2, Labeler.CENTER, Labeler.CENTER, Color.BLACK, Color.RED, Color.WHITE); - Labeler.drawLabel(g, String.valueOf(getCurrentActivateLimit()), x + (int) (30 * zoom), y + (int) (7 * zoom), displayFont2, Labeler.CENTER, Labeler.CENTER, Color.BLACK, Color.WHITE, Color.BLACK); + Labeler.drawLabel(g, String.valueOf(getCurrentCommandRange()), x + (int) (30 * zoom * os_scale), y + (int) (-12 * zoom * os_scale), displayFont2, Labeler.CENTER, Labeler.CENTER, Color.BLACK, Color.RED, Color.WHITE); + Labeler.drawLabel(g, String.valueOf(getCurrentActivateLimit()), x + (int) (30 * zoom * os_scale), y + (int) (7 * zoom * os_scale), displayFont2, Labeler.CENTER, Labeler.CENTER, Color.BLACK, Color.WHITE, Color.BLACK); g.setColor(Color.RED); // int x1 = 1, y1 = -5, cs = 15; // g.drawLine(x+(int) (x1*zoom), y+(int)(y1*zoom), x + (int) ((x1+cs) * zoom), y+(int)((y1+cs)*zoom)); @@ -194,7 +196,7 @@ } - Labeler.drawLabel(g, getActivateCountString(), x + (int) (30 * zoom), y + (int) (26 * zoom), displayFont2, Labeler.CENTER, Labeler.CENTER, Color.BLUE, Color.WHITE, Color.BLACK); + Labeler.drawLabel(g, getActivateCountString(), x + (int) (30 * zoom * os_scale), y + (int) (26 * zoom * os_scale), displayFont2, Labeler.CENTER, Labeler.CENTER, Color.BLUE, Color.WHITE, Color.BLACK); } Modified: VSQL-src/trunk/tdc/TdcProperties.java =================================================================== --- VSQL-src/trunk/tdc/TdcProperties.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/TdcProperties.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -188,6 +188,7 @@ public static final String TERRAIN_HEDGEROW = "Hedgerow"; // Display name for Bocage public static final String TERRAIN_MARSH = "Marsh"; public static final String TERRAIN_HILL = "Hill"; + public static final String TERRAIN_FLOODED = "Flooded"; // TINIAN public static final String TERRAIN_RUNWAY = "Runway"; Modified: VSQL-src/trunk/tdc/UnitInfo.java =================================================================== --- VSQL-src/trunk/tdc/UnitInfo.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/UnitInfo.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -641,7 +641,7 @@ terrainInfo.put(TdcProperties.TERRAIN_CLEAR, new TerrainInfo(TdcProperties.TERRAIN_CLEAR, 0)); terrainInfo.put(TdcProperties.TERRAIN_POLDER, new TerrainInfo(TdcProperties.TERRAIN_POLDER, 0)); terrainInfo.put(TdcProperties.TERRAIN_OOIJ_POLDER, new TerrainInfo(TdcProperties.TERRAIN_OOIJ_POLDER, 0)); - terrainInfo.put(TdcProperties.TERRAIN_ORCHARD, new TerrainInfo(TdcProperties.TERRAIN_ORCHARD, -1)); + terrainInfo.put(TdcProperties.TERRAIN_ORCHARD, new TerrainInfo(TdcProperties.TERRAIN_ORCHARD, isTgdRules() ? -2 : -1)); terrainInfo.put(TdcProperties.TERRAIN_SCRUB, new TerrainInfo(TdcProperties.TERRAIN_SCRUB, -1)); terrainInfo.put(TdcProperties.TERRAIN_WOODS, new TerrainInfo(TdcProperties.TERRAIN_WOODS, -2)); terrainInfo.put(TdcProperties.TERRAIN_BRUSHWOODS, new TerrainInfo(TdcProperties.TERRAIN_BRUSHWOODS, -2)); @@ -654,6 +654,7 @@ terrainInfo.put(TdcProperties.TERRAIN_BOCAGE, new TerrainInfo(TdcProperties.TERRAIN_HEDGEROW, -2)); terrainInfo.put(TdcProperties.TERRAIN_HILL, new TerrainInfo(TdcProperties.TERRAIN_HILL, -2)); terrainInfo.put(TdcProperties.TERRAIN_VILLAGE, new TerrainInfo(TdcProperties.TERRAIN_VILLAGE, -1)); + terrainInfo.put(TdcProperties.TERRAIN_FLOODED, new TerrainInfo(TdcProperties.TERRAIN_FLOODED, 0)); if (isTinianRules()) { terrainInfo.put(TdcProperties.TERRAIN_BEACH, new TerrainInfo(TdcProperties.TERRAIN_BEACH, 0)); @@ -681,7 +682,7 @@ terrainInfoArmoured.put(TdcProperties.TERRAIN_WOODS, new TerrainInfo(TdcProperties.TERRAIN_WOODS, -2)); terrainInfoArmoured.put(TdcProperties.TERRAIN_BRUSHWOODS, new TerrainInfo(TdcProperties.TERRAIN_BRUSHWOODS, -2)); terrainInfoArmoured.put(TdcProperties.TERRAIN_SWAMP, new TerrainInfo(TdcProperties.TERRAIN_SWAMP, 1)); - terrainInfoArmoured.put(TdcProperties.TERRAIN_SAND_DUNES, new TerrainInfo(TdcProperties.TERRAIN_SAND_DUNES, -1)); + terrainInfoArmoured.put(TdcProperties.TERRAIN_SAND_DUNES, new TerrainInfo(TdcProperties.TERRAIN_SAND_DUNES, isTgdRules() ? 0 : -1)); terrainInfoArmoured.put(TdcProperties.TERRAIN_CITY, new TerrainInfo(TdcProperties.TERRAIN_CITY, -2)); terrainInfoArmoured.put(TdcProperties.TERRAIN_FORTIFIED, new TerrainInfo(TdcProperties.TERRAIN_FORTIFIED, -3)); terrainInfoArmoured.put(TdcProperties.TERRAIN_DESERT, new TerrainInfo(TdcProperties.TERRAIN_DESERT, 0)); @@ -689,6 +690,7 @@ terrainInfoArmoured.put(TdcProperties.TERRAIN_HEDGEROW, new TerrainInfo(TdcProperties.TERRAIN_HEDGEROW, -1)); terrainInfoArmoured.put(TdcProperties.TERRAIN_HILL, new TerrainInfo(TdcProperties.TERRAIN_HILL, -1)); terrainInfoArmoured.put(TdcProperties.TERRAIN_VILLAGE, new TerrainInfo(TdcProperties.TERRAIN_VILLAGE, 0)); + terrainInfoArmoured.put(TdcProperties.TERRAIN_FLOODED, new TerrainInfo(TdcProperties.TERRAIN_FLOODED, 0)); if (isTinianRules()) { terrainInfoArmoured.put(TdcProperties.TERRAIN_BEACH, new TerrainInfo(TdcProperties.TERRAIN_BEACH, 0)); Modified: VSQL-src/trunk/tdc/WizardThread.java =================================================================== --- VSQL-src/trunk/tdc/WizardThread.java 2020-04-29 19:19:52 UTC (rev 9373) +++ VSQL-src/trunk/tdc/WizardThread.java 2020-04-30 00:23:28 UTC (rev 9374) @@ -197,6 +197,8 @@ protected boolean ctrlKeyDepressed = false; + protected double os_scale; + public WizardThread(Wizard w) { myWizard = w; @@ -552,7 +554,9 @@ public void draw(java.awt.Graphics g, Map m) { if (!visible) return; - + + os_scale = Info.getSystemScaling(); + int r = calculateRange(); g.setColor(getColor(r)); final Point mapAnchor = map.componentCoordinates(anchor); @@ -559,10 +563,10 @@ final Point mapArrow = map.componentCoordinates(arrow); // Draw LOS - g.drawLine(mapAnchor.x, mapAnchor.y, mapArrow.x, mapArrow.y); + g.drawLine((int) (mapAnchor.x * os_scale), (int) (mapAnchor.y * os_scale), (int) (mapArrow.x * os_scale), (int) (mapArrow.y * os_scale)); // Draw Target - imagePainter.draw(g, mapArrow.x - 16, mapArrow.y - 16, 1.0d, m.getView()); + imagePainter.draw(g, (int) (os_scale * (mapArrow.x - 16)), (int) (os_scale * (mapArrow.y - 16)), 1.0d * os_scale, m.getView()); final boolean blocksStartShowing = blocksStartShowingConfig.getValueBoolean(); if ((blocksStartShowing && !ctrlKeyDepressed) || (!blocksStartShowing && ctrlKeyDepressed)) { @@ -959,14 +963,14 @@ wid = fm.stringWidth(" " + "In Range" + " "); x0 = mapArrow.x + (int) ((wid / 2 + 20) * w / Math.sqrt(w * w + h * h)); y0 = mapArrow.y + (int) ((hgt / 2 + 20) * h / Math.sqrt(w * w + h * h)); - g.fillRect(x0 - wid / 2, y0 + hgt / 2 - fm.getAscent(), wid, hgt); + g.fillRect((int) (os_scale* (x0 - wid / 2)), (int) (os_scale* (y0 + hgt / 2 - fm.getAscent())), (int) (os_scale* (wid)), (int) (os_scale* (hgt))); g.setColor(Color.white); - g.drawString("In Range", x0 - wid / 2 + fm.stringWidth(" "), y0 + hgt / 2 - 1); + g.drawStrin... [truncated message content] |