runelite-client: add detached overlay position
Overlays with detached are never layouted, but are also movable
This commit is contained in:
@@ -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
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user