runelite-client: add detached overlay position

Overlays with detached are never layouted, but are also movable
This commit is contained in:
Adam
2018-05-20 15:09:15 -04:00
parent 53041894af
commit af7b2e6c97
2 changed files with 36 additions and 22 deletions

View File

@@ -26,6 +26,10 @@ package net.runelite.client.ui.overlay;
public enum OverlayPosition public enum OverlayPosition
{ {
/**
* Not attached anywhere, but still movable
*/
DETACHED,
/** /**
* Overlay places itself where it wants * Overlay places itself where it wants
*/ */

View File

@@ -165,7 +165,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
} }
} }
private void rebuildOverlays() public void rebuildOverlays()
{ {
final List<Overlay> overlays = Stream final List<Overlay> overlays = Stream
.concat( .concat(
@@ -199,7 +199,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
overlay.setPreferredLocation(null); overlay.setPreferredLocation(null);
saveOverlayLocation(overlay); saveOverlayLocation(overlay);
} }
else else if (location != null)
{ {
overlay.setPreferredLocation(location); overlay.setPreferredLocation(location);
} }
@@ -289,7 +289,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
OverlayUtil.setGraphicProperties(graphics); OverlayUtil.setGraphicProperties(graphics);
// Draw snap corners // Draw snap corners
if (layer == OverlayLayer.UNDER_WIDGETS && movedOverlay != null) if (layer == OverlayLayer.UNDER_WIDGETS && movedOverlay != null && movedOverlay.getPosition() != OverlayPosition.DETACHED)
{ {
final OverlayBounds translatedSnapCorners = snapCorners.translated( final OverlayBounds translatedSnapCorners = snapCorners.translated(
-SNAP_CORNER_SIZE.width, -SNAP_CORNER_SIZE.width,
@@ -333,7 +333,7 @@ public class OverlayRenderer extends MouseListener implements KeyListener
final Dimension dimension = overlay.getBounds().getSize(); final Dimension dimension = overlay.getBounds().getSize();
// If the final position is not modified, layout it // If the final position is not modified, layout it
if (overlay.getPreferredLocation() == null || overlay.getPreferredPosition() != null) if (overlayPosition != OverlayPosition.DETACHED && (overlay.getPreferredLocation() == null || overlay.getPreferredPosition() != null))
{ {
final Rectangle snapCorner = snapCorners.forPosition(overlayPosition); final Rectangle snapCorner = snapCorners.forPosition(overlayPosition);
final Point translation = OverlayUtil.transformPosition(overlayPosition, dimension); final Point translation = OverlayUtil.transformPosition(overlayPosition, dimension);
@@ -382,11 +382,15 @@ public class OverlayRenderer extends MouseListener implements KeyListener
{ {
if (SwingUtilities.isRightMouseButton(mouseEvent)) if (SwingUtilities.isRightMouseButton(mouseEvent))
{ {
overlay.setPreferredLocation(null); // detached overlays have no place to reset back to
overlay.setPreferredPosition(null); if (overlay.getPosition() != OverlayPosition.DETACHED)
saveOverlayPosition(overlay); {
saveOverlayLocation(overlay); overlay.setPreferredLocation(null);
rebuildOverlayLayers(); overlay.setPreferredPosition(null);
saveOverlayPosition(overlay);
saveOverlayLocation(overlay);
rebuildOverlayLayers();
}
} }
else else
{ {
@@ -445,27 +449,33 @@ public class OverlayRenderer extends MouseListener implements KeyListener
if (movedOverlay != null) if (movedOverlay != null)
{ {
mousePosition.setLocation(-1, -1); mousePosition.setLocation(-1, -1);
final OverlayBounds snapCorners = this.snapCorners.translated(-SNAP_CORNER_SIZE.width, -SNAP_CORNER_SIZE.height);
for (Rectangle snapCorner : snapCorners.getBounds()) // do not snapcorner detached overlays
if (movedOverlay.getPosition() != OverlayPosition.DETACHED)
{ {
if (snapCorner.contains(mouseEvent.getPoint())) final OverlayBounds snapCorners = this.snapCorners.translated(-SNAP_CORNER_SIZE.width, -SNAP_CORNER_SIZE.height);
for (Rectangle snapCorner : snapCorners.getBounds())
{ {
OverlayPosition position = snapCorners.fromBounds(snapCorner); if (snapCorner.contains(mouseEvent.getPoint()))
if (position == movedOverlay.getPosition())
{ {
// overlay moves back to default position OverlayPosition position = snapCorners.fromBounds(snapCorner);
position = null; if (position == movedOverlay.getPosition())
{
// overlay moves back to default position
position = null;
}
movedOverlay.setPreferredPosition(position);
movedOverlay.setPreferredLocation(null); // from dragging
break;
} }
movedOverlay.setPreferredPosition(position);
movedOverlay.setPreferredLocation(null); // from dragging
break;
} }
saveOverlayPosition(movedOverlay);
saveOverlayLocation(movedOverlay);
rebuildOverlayLayers();
} }
saveOverlayPosition(movedOverlay);
saveOverlayLocation(movedOverlay);
rebuildOverlayLayers();
movedOverlay = null; movedOverlay = null;
mouseEvent.consume(); mouseEvent.consume();
} }