mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-04 21:20:17 +00:00
8164899: Provide package access to setComponentMixingCutoutShape
Reviewed-by: serb
This commit is contained in:
parent
2aac4c1f38
commit
ed5befdde8
@ -447,6 +447,7 @@ public final class AWTUtilities {
|
||||
* @param shape the new 'mixing-cutout' shape
|
||||
* @throws NullPointerException if the component argument is {@code null}
|
||||
*/
|
||||
@Deprecated(since = "9")
|
||||
public static void setComponentMixingCutoutShape(Component component,
|
||||
Shape shape)
|
||||
{
|
||||
|
||||
@ -843,32 +843,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||
return new Rectangle(comp.x, comp.y, comp.width, comp.height);
|
||||
}
|
||||
public void setMixingCutoutShape(Component comp, Shape shape) {
|
||||
Region region = shape == null ? null :
|
||||
Region.getInstance(shape, null);
|
||||
|
||||
synchronized (comp.getTreeLock()) {
|
||||
boolean needShowing = false;
|
||||
boolean needHiding = false;
|
||||
|
||||
if (!comp.isNonOpaqueForMixing()) {
|
||||
needHiding = true;
|
||||
}
|
||||
|
||||
comp.mixingCutoutRegion = region;
|
||||
|
||||
if (!comp.isNonOpaqueForMixing()) {
|
||||
needShowing = true;
|
||||
}
|
||||
|
||||
if (comp.isMixingNeeded()) {
|
||||
if (needHiding) {
|
||||
comp.mixOnHiding(comp.isLightweight());
|
||||
}
|
||||
if (needShowing) {
|
||||
comp.mixOnShowing();
|
||||
}
|
||||
}
|
||||
}
|
||||
comp.setMixingCutoutShape(shape);
|
||||
}
|
||||
|
||||
public void setGraphicsConfiguration(Component comp,
|
||||
@ -10238,6 +10213,71 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a 'mixing-cutout' shape for the given component.
|
||||
*
|
||||
* By default a lightweight component is treated as an opaque rectangle for
|
||||
* the purposes of the Heavyweight/Lightweight Components Mixing feature.
|
||||
* This method enables developers to set an arbitrary shape to be cut out
|
||||
* from heavyweight components positioned underneath the lightweight
|
||||
* component in the z-order.
|
||||
* <p>
|
||||
* The {@code shape} argument may have the following values:
|
||||
* <ul>
|
||||
* <li>{@code null} - reverts the default cutout shape (the rectangle equal
|
||||
* to the component's {@code getBounds()})
|
||||
* <li><i>empty-shape</i> - does not cut out anything from heavyweight
|
||||
* components. This makes the given lightweight component effectively
|
||||
* transparent. Note that descendants of the lightweight component still
|
||||
* affect the shapes of heavyweight components. An example of an
|
||||
* <i>empty-shape</i> is {@code new Rectangle()}.
|
||||
* <li><i>non-empty-shape</i> - the given shape will be cut out from
|
||||
* heavyweight components.
|
||||
* </ul>
|
||||
* <p>
|
||||
* The most common example when the 'mixing-cutout' shape is needed is a
|
||||
* glass pane component. The {@link JRootPane#setGlassPane()} method
|
||||
* automatically sets the <i>empty-shape</i> as the 'mixing-cutout' shape
|
||||
* for the given glass pane component. If a developer needs some other
|
||||
* 'mixing-cutout' shape for the glass pane (which is rare), this must be
|
||||
* changed manually after installing the glass pane to the root pane.
|
||||
* <p>
|
||||
* Note that the 'mixing-cutout' shape neither affects painting, nor the
|
||||
* mouse events handling for the given component. It is used exclusively
|
||||
* for the purposes of the Heavyweight/Lightweight Components Mixing
|
||||
* feature.
|
||||
*
|
||||
* @param shape the new 'mixing-cutout' shape
|
||||
* @since 9
|
||||
*/
|
||||
void setMixingCutoutShape(Shape shape) {
|
||||
Region region = shape == null ? null : Region.getInstance(shape, null);
|
||||
|
||||
synchronized (getTreeLock()) {
|
||||
boolean needShowing = false;
|
||||
boolean needHiding = false;
|
||||
|
||||
if (!isNonOpaqueForMixing()) {
|
||||
needHiding = true;
|
||||
}
|
||||
|
||||
mixingCutoutRegion = region;
|
||||
|
||||
if (!isNonOpaqueForMixing()) {
|
||||
needShowing = true;
|
||||
}
|
||||
|
||||
if (isMixingNeeded()) {
|
||||
if (needHiding) {
|
||||
mixOnHiding(isLightweight());
|
||||
}
|
||||
if (needShowing) {
|
||||
mixOnShowing();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ****************** END OF MIXING CODE ********************************
|
||||
|
||||
// Note that the method is overriden in the Window class,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user