overlay: set g2d clip per layer

This commit is contained in:
Adam
2022-05-15 12:22:48 -04:00
parent 30fb555809
commit b90d793eb7

View File

@@ -244,7 +244,7 @@ public class OverlayRenderer extends MouseAdapter
overlayManager.setWidgetItems(Collections.emptyList()); overlayManager.setWidgetItems(Collections.emptyList());
} }
private void renderOverlays(Graphics2D graphics, Collection<Overlay> overlays, OverlayLayer layer) private void renderOverlays(final Graphics2D graphics, Collection<Overlay> overlays, final OverlayLayer layer)
{ {
if (overlays == null if (overlays == null
|| overlays.isEmpty() || overlays.isEmpty()
@@ -285,6 +285,9 @@ public class OverlayRenderer extends MouseAdapter
final RenderingHints renderingHints = graphics.getRenderingHints(); final RenderingHints renderingHints = graphics.getRenderingHints();
final Color background = graphics.getBackground(); final Color background = graphics.getBackground();
final Rectangle clip = clipBounds(layer);
graphics.setClip(clip);
for (Overlay overlay : overlays) for (Overlay overlay : overlays)
{ {
final OverlayPosition overlayPosition = getCorrectedOverlayPosition(overlay); final OverlayPosition overlayPosition = getCorrectedOverlayPosition(overlay);
@@ -319,7 +322,7 @@ public class OverlayRenderer extends MouseAdapter
bounds.setSize(overlay.getPreferredSize()); bounds.setSize(overlay.getPreferredSize());
} }
safeRender(client, overlay, layer, graphics, location); safeRender(overlay, graphics, location);
// Adjust snap corner based on where the overlay was drawn // Adjust snap corner based on where the overlay was drawn
if (snapCorner != null && bounds.width + bounds.height > 0) if (snapCorner != null && bounds.width + bounds.height > 0)
@@ -334,6 +337,10 @@ public class OverlayRenderer extends MouseAdapter
graphics.setPaint(paint); graphics.setPaint(paint);
graphics.setRenderingHints(renderingHints); graphics.setRenderingHints(renderingHints);
graphics.setBackground(background); graphics.setBackground(background);
if (!graphics.getClip().equals(clip))
{
graphics.setClip(clip);
}
if (!bounds.isEmpty()) if (!bounds.isEmpty())
{ {
@@ -702,20 +709,23 @@ public class OverlayRenderer extends MouseAdapter
return mouseEvent; return mouseEvent;
} }
private void safeRender(Client client, Overlay overlay, OverlayLayer layer, Graphics2D graphics, Point point) private Rectangle clipBounds(OverlayLayer layer)
{ {
if (!isResizeable && (layer == OverlayLayer.ABOVE_SCENE || layer == OverlayLayer.UNDER_WIDGETS)) if (!isResizeable && (layer == OverlayLayer.ABOVE_SCENE || layer == OverlayLayer.UNDER_WIDGETS))
{ {
graphics.setClip(client.getViewportXOffset(), return new Rectangle(client.getViewportXOffset(),
client.getViewportYOffset(), client.getViewportYOffset(),
client.getViewportWidth(), client.getViewportWidth(),
client.getViewportHeight()); client.getViewportHeight());
} }
else else
{ {
graphics.setClip(0, 0, client.getCanvasWidth(), client.getCanvasHeight()); return new Rectangle(0, 0, client.getCanvasWidth(), client.getCanvasHeight());
} }
}
private void safeRender(Overlay overlay, Graphics2D graphics, Point point)
{
final OverlayPosition position = overlay.getPosition(); final OverlayPosition position = overlay.getPosition();
// Set font based on configuration // Set font based on configuration