--- a/jdk/src/share/classes/javax/swing/RepaintManager.java Fri Jan 31 14:20:40 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/RepaintManager.java Fri Jan 31 18:49:58 2014 +0400
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,6 +45,8 @@
import sun.security.action.GetPropertyAction;
import com.sun.java.swing.SwingUtilities3;
+import sun.swing.SwingAccessor;
+import sun.swing.SwingUtilities2.RepaintListener;
/**
* This class manages repaint requests, allowing the number
@@ -184,6 +186,17 @@
static {
+ SwingAccessor.setRepaintManagerAccessor(new SwingAccessor.RepaintManagerAccessor() {
+ @Override
+ public void addRepaintListener(RepaintManager rm, RepaintListener l) {
+ rm.addRepaintListener(l);
+ }
+ @Override
+ public void removeRepaintListener(RepaintManager rm, RepaintListener l) {
+ rm.removeRepaintListener(l);
+ }
+ });
+
volatileImageBufferEnabled = "true".equals(AccessController.
doPrivileged(new GetPropertyAction(
"swing.volatileImageBufferEnabled", "true")));
@@ -1267,6 +1280,33 @@
getPaintManager().copyArea(c, g, x, y, w, h, deltaX, deltaY, clip);
}
+ private java.util.List<RepaintListener> repaintListeners = new ArrayList<>(1);
+
+ private void addRepaintListener(RepaintListener l) {
+ repaintListeners.add(l);
+ }
+
+ private void removeRepaintListener(RepaintListener l) {
+ repaintListeners.remove(l);
+ }
+
+ /**
+ * Notify the attached repaint listeners that an area of the {@code c} component
+ * has been immediately repainted, that is without scheduling a repaint runnable,
+ * due to performing a "blit" (via calling the {@code copyArea} method).
+ *
+ * @param c the component
+ * @param x the x coordinate of the area
+ * @param y the y coordinate of the area
+ * @param w the width of the area
+ * @param h the height of the area
+ */
+ void notifyRepaintPerformed(JComponent c, int x, int y, int w, int h) {
+ for (RepaintListener l : repaintListeners) {
+ l.repaintPerformed(c, x, y, w, h);
+ }
+ }
+
/**
* Invoked prior to any paint/copyArea method calls. This will
* be followed by an invocation of <code>endPaint</code>.