jdk/src/share/classes/javax/swing/RepaintManager.java

Print this page
rev 5725 : Merge

*** 25,46 **** package javax.swing; import java.awt.*; import java.awt.event.*; - import java.awt.peer.ComponentPeer; - import java.awt.peer.ContainerPeer; import java.awt.image.VolatileImage; import java.security.AccessController; import java.util.*; import java.applet.*; import sun.awt.AWTAccessor; import sun.awt.AppContext; import sun.awt.DisplayChangedListener; import sun.awt.SunToolkit; import sun.java2d.SunGraphicsEnvironment; import sun.security.action.GetPropertyAction; import com.sun.java.swing.SwingUtilities3; /** --- 25,49 ---- package javax.swing; import java.awt.*; import java.awt.event.*; import java.awt.image.VolatileImage; + import java.security.AccessControlContext; import java.security.AccessController; + import java.security.PrivilegedAction; import java.util.*; + import java.util.concurrent.atomic.AtomicInteger; import java.applet.*; import sun.awt.AWTAccessor; import sun.awt.AppContext; import sun.awt.DisplayChangedListener; import sun.awt.SunToolkit; import sun.java2d.SunGraphicsEnvironment; + import sun.misc.JavaSecurityAccess; + import sun.misc.SharedSecrets; import sun.security.action.GetPropertyAction; import com.sun.java.swing.SwingUtilities3; /**
*** 174,183 **** --- 177,189 ---- /** * Runnable used to process all repaint/revalidate requests. */ private final ProcessingRunnable processingRunnable; + private final static JavaSecurityAccess javaSecurityAccess = + SharedSecrets.getJavaSecurityAccess(); + static { volatileImageBufferEnabled = "true".equals(AccessController. doPrivileged(new GetPropertyAction( "swing.volatileImageBufferEnabled", "true")));
*** 546,562 **** // // This is called from the toolkit thread when awt needs to run a // Runnable before we paint. // ! void nativeQueueSurfaceDataRunnable(AppContext appContext, Component c, ! Runnable r) { synchronized(this) { if (runnableList == null) { runnableList = new LinkedList<Runnable>(); } ! runnableList.add(r); } scheduleProcessingRunnable(appContext); } /** --- 552,581 ---- // // This is called from the toolkit thread when awt needs to run a // Runnable before we paint. // ! void nativeQueueSurfaceDataRunnable(AppContext appContext, ! final Component c, final Runnable r) ! { synchronized(this) { if (runnableList == null) { runnableList = new LinkedList<Runnable>(); } ! runnableList.add(new Runnable() { ! public void run() { ! AccessControlContext stack = AccessController.getContext(); ! AccessControlContext acc = ! AWTAccessor.getComponentAccessor().getAccessControlContext(c); ! javaSecurityAccess.doIntersectionPrivilege(new PrivilegedAction<Void>() { ! public Void run() { ! r.run(); ! return null; ! } ! }, stack, acc); ! } ! }); } scheduleProcessingRunnable(appContext); } /**
*** 650,670 **** /** * Validate all of the components that have been marked invalid. * @see #addInvalidComponent */ public void validateInvalidComponents() { ! java.util.List<Component> ic; synchronized(this) { ! if(invalidComponents == null) { return; } ic = invalidComponents; invalidComponents = null; } int n = ic.size(); for(int i = 0; i < n; i++) { ! ic.get(i).validate(); } } /** --- 669,699 ---- /** * Validate all of the components that have been marked invalid. * @see #addInvalidComponent */ public void validateInvalidComponents() { ! final java.util.List<Component> ic; synchronized(this) { ! if (invalidComponents == null) { return; } ic = invalidComponents; invalidComponents = null; } int n = ic.size(); for(int i = 0; i < n; i++) { ! final Component c = ic.get(i); ! AccessControlContext stack = AccessController.getContext(); ! AccessControlContext acc = ! AWTAccessor.getComponentAccessor().getAccessControlContext(c); ! javaSecurityAccess.doIntersectionPrivilege( ! new PrivilegedAction<Void>() { ! public Void run() { ! c.validate(); ! return null; ! } ! }, stack, acc); } } /**
*** 738,782 **** dirtyComponents.clear(); } paintDirtyRegions(tmpDirtyComponents); } ! private void paintDirtyRegions(Map<Component,Rectangle> ! tmpDirtyComponents){ ! int i, count; ! java.util.List<Component> roots; ! Component dirtyComponent; ! ! count = tmpDirtyComponents.size(); ! if (count == 0) { return; } ! Rectangle rect; ! int localBoundsX = 0; ! int localBoundsY = 0; ! int localBoundsH; ! int localBoundsW; ! Enumeration keys; ! ! roots = new ArrayList<Component>(count); for (Component dirty : tmpDirtyComponents.keySet()) { collectDirtyComponents(tmpDirtyComponents, dirty, roots); } ! count = roots.size(); painting = true; try { ! for(i=0 ; i < count ; i++) { ! dirtyComponent = roots.get(i); ! rect = tmpDirtyComponents.get(dirtyComponent); ! localBoundsH = dirtyComponent.getHeight(); ! localBoundsW = dirtyComponent.getWidth(); ! ! SwingUtilities.computeIntersection(localBoundsX, ! localBoundsY, localBoundsW, localBoundsH, rect); if (dirtyComponent instanceof JComponent) { ((JComponent)dirtyComponent).paintImmediately( --- 767,808 ---- dirtyComponents.clear(); } paintDirtyRegions(tmpDirtyComponents); } ! private void paintDirtyRegions( ! final Map<Component,Rectangle> tmpDirtyComponents) ! { ! if (tmpDirtyComponents.isEmpty()) { return; } ! final java.util.List<Component> roots = ! new ArrayList<Component>(tmpDirtyComponents.size()); for (Component dirty : tmpDirtyComponents.keySet()) { collectDirtyComponents(tmpDirtyComponents, dirty, roots); } ! final AtomicInteger count = new AtomicInteger(roots.size()); painting = true; try { ! for(int j = 0; j < count.get(); j++) { ! final int i = j; ! final Component dirtyComponent = roots.get(j); ! ! AccessControlContext stack = AccessController.getContext(); ! AccessControlContext acc = ! AWTAccessor.getComponentAccessor().getAccessControlContext(dirtyComponent); ! javaSecurityAccess.doIntersectionPrivilege(new PrivilegedAction<Void>() { ! public Void run() { ! Rectangle rect = tmpDirtyComponents.get(dirtyComponent); ! ! int localBoundsH = dirtyComponent.getHeight(); ! int localBoundsW = dirtyComponent.getWidth(); ! SwingUtilities.computeIntersection(0, ! 0, localBoundsW, localBoundsH, rect); if (dirtyComponent instanceof JComponent) { ((JComponent)dirtyComponent).paintImmediately(
*** 798,815 **** } // If the repaintRoot has been set, service it now and // remove any components that are children of repaintRoot. if (repaintRoot != null) { adjustRoots(repaintRoot, roots, i + 1); ! count = roots.size(); paintManager.isRepaintingRoot = true; repaintRoot.paintImmediately(0, 0, repaintRoot.getWidth(), repaintRoot.getHeight()); paintManager.isRepaintingRoot = false; // Only service repaintRoot once. repaintRoot = null; } } } finally { painting = false; } --- 824,845 ---- } // If the repaintRoot has been set, service it now and // remove any components that are children of repaintRoot. if (repaintRoot != null) { adjustRoots(repaintRoot, roots, i + 1); ! count.set(roots.size()); paintManager.isRepaintingRoot = true; repaintRoot.paintImmediately(0, 0, repaintRoot.getWidth(), repaintRoot.getHeight()); paintManager.isRepaintingRoot = false; // Only service repaintRoot once. repaintRoot = null; } + + return null; + } + }, stack, acc); } } finally { painting = false; }