diff --git a/.gitattributes b/.gitattributes index 7207aefec84..90a30ba8bbd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1092,6 +1092,7 @@ forge-gui-mobile/src/forge/Forge.java -text forge-gui-mobile/src/forge/GuiMobile.java -text forge-gui-mobile/src/forge/assets/FImage.java -text forge-gui-mobile/src/forge/assets/FSkin.java -text +forge-gui-mobile/src/forge/assets/FSkinBorder.java -text forge-gui-mobile/src/forge/assets/FSkinColor.java -text forge-gui-mobile/src/forge/assets/FSkinFont.java -text forge-gui-mobile/src/forge/assets/FSkinImage.java -text diff --git a/forge-gui-mobile/src/forge/assets/FSkinBorder.java b/forge-gui-mobile/src/forge/assets/FSkinBorder.java new file mode 100644 index 00000000000..f18fb26d3bd --- /dev/null +++ b/forge-gui-mobile/src/forge/assets/FSkinBorder.java @@ -0,0 +1,29 @@ +package forge.assets; + +import forge.Forge.Graphics; + +public class FSkinBorder { + private final FSkinColor color; + private final float thickness; + + public FSkinBorder(FSkinColor color0, float thickness0) { + color = color0; + thickness = thickness0; + } + + public FSkinColor getColor() { + return color; + } + + public float getThickness() { + return thickness; + } + + public void draw(Graphics g, float x, float y, float w, float h) { + x -= thickness; + y -= thickness; + w += 2 * thickness; + h += 2 * thickness; + g.fillRect(color, x, y, w, h); //draw filled rectangle behind object + } +} diff --git a/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java b/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java index 460f2b5896b..81851d92ed4 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VAssignDamage.java @@ -17,6 +17,10 @@ */ package forge.screens.match.views; +import forge.Forge.KeyInputAdapter; +import forge.assets.FSkinBorder; +import forge.assets.FSkinColor; +import forge.assets.FSkinColor.Colors; import forge.game.GameEntity; import forge.game.card.Card; import forge.game.card.CounterType; @@ -85,35 +89,6 @@ public class VAssignDamage extends FDialog { throw new RuntimeException("Asking to assign damage to object which is not present in defenders list"); } - // Mouse actions - /*private final MouseAdapter mad = new MouseAdapter() { - @Override - public void pressed(float x, float y) { - Card source = ((FCardPanel) evt.getSource()).getCard(); - if (!damage.containsKey(source)) source = null; // to get player instead of fake card - - FSkin.Colors brdrColor = VAssignDamage.canAssignTo(source) ? FSkin.Colors.CLR_ACTIVE : FSkin.Colors.CLR_INACTIVE; - ((FCardPanel) evt.getSource()).setBorder(new FSkin.LineSkinBorder(FSkin.getColor(brdrColor), 2)); - } - - @Override - public void released(float x, float y) { - //((FCardPanel) evt.getSource()).setBorder((Border)null); - } - - @Override - public void tap(float x, float y, int count) { - Card source = ((FCardPanel) evt.getSource()).getCard(); // will be NULL for player - - boolean meta = evt.isControlDown(); - boolean isLMB = SwingUtilities.isLeftMouseButton(evt); - boolean isRMB = SwingUtilities.isRightMouseButton(evt); - - if (isLMB || isRMB) - assignDamageTo(source, meta, isLMB); - } - };*/ - /** Constructor. * * @param attacker0 {@link forge.game.card.Card} @@ -203,7 +178,7 @@ public class VAssignDamage extends FDialog { DamageTarget dt = new DamageTarget(c, new FLabel.Builder().text("0").fontSize(18).align(HAlignment.CENTER).build()); damage.put(c, dt); defenders.add(dt); - add(new FCardPanel(c)); + add(new AssignDamageCardPanel(c)); } if (attackerHasTrample) { @@ -225,7 +200,7 @@ public class VAssignDamage extends FDialog { fakeCard = new Card(-2); fakeCard.setName(defender.getName()); } - add(new FCardPanel(fakeCard)); + add(new AssignDamageCardPanel(fakeCard)); } // Add "opponent placeholder" card if trample allowed @@ -253,6 +228,45 @@ public class VAssignDamage extends FDialog { } } + private class AssignDamageCardPanel extends FCardPanel { + private FSkinColor borderColor; + + private AssignDamageCardPanel(Card card0) { + super(card0); + } + + @Override + public boolean press(float x, float y) { + Card source = getCard(); + if (!damage.containsKey(source)) { + source = null; // to get player instead of fake card + } + + borderColor = canAssignTo(source) ? FSkinColor.get(Colors.CLR_ACTIVE) : FSkinColor.get(Colors.CLR_INACTIVE); + return true; + } + + @Override + public boolean release(float x, float y) { + borderColor = null; + return true; + } + + @Override + public boolean tap(float x, float y, int count) { + assignDamageTo(getCard(), KeyInputAdapter.isCtrlKeyDown(), true); + return true; + } + + @Override + protected FSkinBorder getBorder() { + if (borderColor == null) { + return null; + } + return new FSkinBorder(borderColor, Utils.scaleMin(2)); + } + } + private void assignDamageTo(Card source, boolean meta, boolean isAdding) { if (!damage.containsKey(source)) { source = null; diff --git a/forge-gui-mobile/src/forge/toolbox/FCardPanel.java b/forge-gui-mobile/src/forge/toolbox/FCardPanel.java index a6f2c5ad171..394fe07dae6 100644 --- a/forge-gui-mobile/src/forge/toolbox/FCardPanel.java +++ b/forge-gui-mobile/src/forge/toolbox/FCardPanel.java @@ -1,6 +1,7 @@ package forge.toolbox; import forge.Forge.Graphics; +import forge.assets.FSkinBorder; import forge.card.CardRenderer; import forge.game.card.Card; import forge.util.Utils; @@ -69,6 +70,10 @@ public class FCardPanel extends FDisplayObject { return x >= left && x <= left + w && y >= top && y <= top + h; } + protected FSkinBorder getBorder() { + return null; + } + @Override public void draw(Graphics g) { if (card == null) { return; } @@ -86,6 +91,11 @@ public class FCardPanel extends FDisplayObject { g.setRotateTransform(x + edgeOffset, y + h - edgeOffset, tappedAngle); } + FSkinBorder border = getBorder(); + if (border != null) { + border.draw(g, x, y, w, h); + } + CardRenderer.drawCardWithOverlays(g, card, x, y, w, h); if (tapped) {