overlay: set g2d clip per layer
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user