jdk/src/java.desktop/share/classes/javax/swing/JLayer.java
author martin
Thu, 30 Oct 2014 07:31:41 -0700
changeset 28059 e576535359cc
parent 27265 a6528e9ca83b
child 29511 7c491ff8a5fc
permissions -rw-r--r--
8067377: My hobby: caning, then then canning, the the can-can Summary: Fix ALL the stutters! Reviewed-by: rriggs, mchung, lancea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
     1
/*
23010
6dadb192ad81 8029235: Update copyright year to match last edit in jdk8 jdk repository for 2013
lana
parents: 20158
diff changeset
     2
 * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
3733
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     4
 *
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5451
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
3733
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5451
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
3733
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    10
 *
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    15
 * accompanied this code).
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    16
 *
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5451
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5451
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5451
diff changeset
    23
 * questions.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    24
 */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    25
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    26
package javax.swing;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    27
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
    28
import sun.awt.AWTAccessor;
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
    29
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    30
import javax.swing.plaf.LayerUI;
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
    31
import javax.swing.border.Border;
6838
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
    32
import javax.accessibility.*;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    33
import java.awt.*;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    34
import java.awt.event.*;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    35
import java.beans.PropertyChangeEvent;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    36
import java.beans.PropertyChangeListener;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    37
import java.io.IOException;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    38
import java.io.ObjectInputStream;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    39
import java.util.ArrayList;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    40
import java.security.AccessController;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    41
import java.security.PrivilegedAction;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    42
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    43
/**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    44
 * {@code JLayer} is a universal decorator for Swing components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    45
 * which enables you to implement various advanced painting effects as well as
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    46
 * receive notifications of all {@code AWTEvent}s generated within its borders.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
    47
 * <p>
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    48
 * {@code JLayer} delegates the handling of painting and input events to a
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    49
 * {@link javax.swing.plaf.LayerUI} object, which performs the actual decoration.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
    50
 * <p>
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    51
 * The custom painting implemented in the {@code LayerUI} and events notification
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    52
 * work for the JLayer itself and all its subcomponents.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    53
 * This combination enables you to enrich existing components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    54
 * by adding new advanced functionality such as temporary locking of a hierarchy,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    55
 * data tips for compound components, enhanced mouse scrolling etc and so on.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
    56
 * <p>
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    57
 * {@code JLayer} is a good solution if you only need to do custom painting
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    58
 * over compound component or catch input events from its subcomponents.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    59
 * <pre>
3973
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    60
 * import javax.swing.*;
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    61
 * import javax.swing.plaf.LayerUI;
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    62
 * import java.awt.*;
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    63
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    64
 * public class JLayerSample {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    65
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    66
 *     private static JLayer&lt;JComponent&gt; createLayer() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    67
 *         // This custom layerUI will fill the layer with translucent green
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    68
 *         // and print out all mouseMotion events generated within its borders
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    69
 *         LayerUI&lt;JComponent&gt; layerUI = new LayerUI&lt;JComponent&gt;() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    70
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    71
 *             public void paint(Graphics g, JComponent c) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    72
 *                 // paint the layer as is
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    73
 *                 super.paint(g, c);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    74
 *                 // fill it with the translucent green
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    75
 *                 g.setColor(new Color(0, 128, 0, 128));
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    76
 *                 g.fillRect(0, 0, c.getWidth(), c.getHeight());
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    77
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    78
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    79
 *             public void installUI(JComponent c) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    80
 *                 super.installUI(c);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    81
 *                 // enable mouse motion events for the layer's subcomponents
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    82
 *                 ((JLayer) c).setLayerEventMask(AWTEvent.MOUSE_MOTION_EVENT_MASK);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    83
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    84
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    85
 *             public void uninstallUI(JComponent c) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    86
 *                 super.uninstallUI(c);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    87
 *                 // reset the layer event mask
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    88
 *                 ((JLayer) c).setLayerEventMask(0);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    89
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    90
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    91
 *             // overridden method which catches MouseMotion events
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    92
 *             public void eventDispatched(AWTEvent e, JLayer&lt;? extends JComponent&gt; l) {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    93
 *                 System.out.println("AWTEvent detected: " + e);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    94
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    95
 *         };
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
    96
 *         // create a component to be decorated with the layer
3973
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    97
 *         JPanel panel = new JPanel();
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    98
 *         panel.add(new JButton("JButton"));
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
    99
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   100
 *         // create the layer for the panel using our custom layerUI
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   101
 *         return new JLayer&lt;JComponent&gt;(panel, layerUI);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   102
 *     }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   103
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   104
 *     private static void createAndShowGUI() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   105
 *         final JFrame frame = new JFrame();
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   106
 *         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   107
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   108
 *         // work with the layer as with any other Swing component
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   109
 *         frame.add(createLayer());
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   110
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   111
 *         frame.setSize(200, 200);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   112
 *         frame.setLocationRelativeTo(null);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   113
 *         frame.setVisible(true);
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   114
 *     }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   115
 *
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   116
 *     public static void main(String[] args) throws Exception {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   117
 *         SwingUtilities.invokeAndWait(new Runnable() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   118
 *             public void run() {
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   119
 *                 createAndShowGUI();
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   120
 *             }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   121
 *         });
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   122
 *     }
3bdd09958faf 6878792: Sample provided in javax.swing.JLayer class description is not usable
alexp
parents: 3748
diff changeset
   123
 * }
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   124
 * </pre>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   125
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   126
 * <b>Note:</b> {@code JLayer} doesn't support the following methods:
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   127
 * <ul>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   128
 * <li>{@link Container#add(java.awt.Component)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   129
 * <li>{@link Container#add(String, java.awt.Component)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   130
 * <li>{@link Container#add(java.awt.Component, int)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   131
 * <li>{@link Container#add(java.awt.Component, Object)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   132
 * <li>{@link Container#add(java.awt.Component, Object, int)}</li>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   133
 * </ul>
28059
e576535359cc 8067377: My hobby: caning, then then canning, the the can-can
martin
parents: 27265
diff changeset
   134
 * using any of them will cause {@code UnsupportedOperationException} to be thrown,
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   135
 * to add a component to {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   136
 * use {@link #setView(Component)} or {@link #setGlassPane(JPanel)}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   137
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   138
 * @param <V> the type of {@code JLayer}'s view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   139
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   140
 * @see #JLayer(Component)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   141
 * @see #setView(Component)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   142
 * @see #getView()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   143
 * @see javax.swing.plaf.LayerUI
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   144
 * @see #JLayer(Component, LayerUI)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   145
 * @see #setUI(javax.swing.plaf.LayerUI)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   146
 * @see #getUI()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   147
 * @since 1.7
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   148
 *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   149
 * @author Alexander Potochkin
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   150
 */
23697
e556a715949f 8034169: Fix serial lint warnings in javax.swing
darcy
parents: 23010
diff changeset
   151
@SuppressWarnings("serial") // Superclass is not serializable across versions
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   152
public final class JLayer<V extends Component>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   153
        extends JComponent
6838
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   154
        implements Scrollable, PropertyChangeListener, Accessible {
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   155
    private V view;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   156
    // this field is necessary because JComponent.ui is transient
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   157
    // when layerUI is serializable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   158
    private LayerUI<? super V> layerUI;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   159
    private JPanel glassPane;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   160
    private long eventMask;
26029
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   161
    private transient boolean isPaintCalling;
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   162
    private transient boolean isPaintImmediatelyCalling;
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   163
    private transient boolean isImageUpdateCalling;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   164
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   165
    private static final LayerEventController eventController =
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   166
            new LayerEventController();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   167
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   168
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   169
     * Creates a new {@code JLayer} object with a {@code null} view component
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   170
     * and default {@link javax.swing.plaf.LayerUI}.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   171
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   172
     * @see #setView
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   173
     * @see #setUI
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   174
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   175
    public JLayer() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   176
        this(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   177
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   178
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   179
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   180
     * Creates a new {@code JLayer} object
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   181
     * with default {@link javax.swing.plaf.LayerUI}.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   182
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   183
     * @param view the component to be decorated by this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   184
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   185
     * @see #setUI
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   186
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   187
    public JLayer(V view) {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   188
        this(view, new LayerUI<V>());
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   189
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   190
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   191
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   192
     * Creates a new {@code JLayer} object with the specified view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   193
     * and {@link javax.swing.plaf.LayerUI} object.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   194
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   195
     * @param view the component to be decorated
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   196
     * @param ui the {@link javax.swing.plaf.LayerUI} delegate
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   197
     * to be used by this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   198
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   199
    public JLayer(V view, LayerUI<V> ui) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   200
        setGlassPane(createGlassPane());
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   201
        setView(view);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   202
        setUI(ui);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   203
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   204
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   205
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   206
     * Returns the {@code JLayer}'s view component or {@code null}.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   207
     * <br>This is a bound property.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   208
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   209
     * @return the {@code JLayer}'s view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   210
     *         or {@code null} if none exists
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   211
     *
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   212
     * @see #setView(Component)
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   213
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   214
    public V getView() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   215
        return view;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   216
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   217
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   218
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   219
     * Sets the {@code JLayer}'s view component, which can be {@code null}.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   220
     * <br>This is a bound property.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   221
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   222
     * @param view the view component for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   223
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   224
     * @see #getView()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   225
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   226
    public void setView(V view) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   227
        Component oldView = getView();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   228
        if (oldView != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   229
            super.remove(oldView);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   230
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   231
        if (view != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   232
            super.addImpl(view, null, getComponentCount());
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   233
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   234
        this.view = view;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   235
        firePropertyChange("view", oldView, view);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   236
        revalidate();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   237
        repaint();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   238
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   239
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   240
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   241
     * Sets the {@link javax.swing.plaf.LayerUI} which will perform painting
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   242
     * and receive input events for this {@code JLayer}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   243
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   244
     * @param ui the {@link javax.swing.plaf.LayerUI} for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   245
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   246
    public void setUI(LayerUI<? super V> ui) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   247
        this.layerUI = ui;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   248
        super.setUI(ui);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   249
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   250
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   251
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   252
     * Returns the {@link javax.swing.plaf.LayerUI} for this {@code JLayer}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   253
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   254
     * @return the {@code LayerUI} for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   255
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   256
    public LayerUI<? super V> getUI() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   257
        return layerUI;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   258
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   259
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   260
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   261
     * Returns the {@code JLayer}'s glassPane component or {@code null}.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   262
     * <br>This is a bound property.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   263
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   264
     * @return the {@code JLayer}'s glassPane component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   265
     *         or {@code null} if none exists
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   266
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   267
     * @see #setGlassPane(JPanel)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   268
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   269
    public JPanel getGlassPane() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   270
        return glassPane;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   271
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   272
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   273
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   274
     * Sets the {@code JLayer}'s glassPane component, which can be {@code null}.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   275
     * <br>This is a bound property.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   276
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   277
     * @param glassPane the glassPane component of this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   278
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   279
     * @see #getGlassPane()
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   280
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   281
    public void setGlassPane(JPanel glassPane) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   282
        Component oldGlassPane = getGlassPane();
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   283
        boolean isGlassPaneVisible = false;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   284
        if (oldGlassPane != null) {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   285
            isGlassPaneVisible = oldGlassPane.isVisible();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   286
            super.remove(oldGlassPane);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   287
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   288
        if (glassPane != null) {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   289
            AWTAccessor.getComponentAccessor().setMixingCutoutShape(glassPane,
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   290
                    new Rectangle());
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   291
            glassPane.setVisible(isGlassPaneVisible);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   292
            super.addImpl(glassPane, null, 0);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   293
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   294
        this.glassPane = glassPane;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   295
        firePropertyChange("glassPane", oldGlassPane, glassPane);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   296
        revalidate();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   297
        repaint();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   298
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   299
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   300
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   301
     * Called by the constructor methods to create a default {@code glassPane}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   302
     * By default this method creates a new JPanel with visibility set to true
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   303
     * and opacity set to false.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   304
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   305
     * @return the default {@code glassPane}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   306
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   307
    public JPanel createGlassPane() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   308
        return new DefaultLayerGlassPane();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   309
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   310
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   311
    /**
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   312
     * Sets the layout manager for this container.  This method is
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   313
     * overridden to prevent the layout manager from being set.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   314
     * <p>Note:  If {@code mgr} is non-{@code null}, this
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   315
     * method will throw an exception as layout managers are not supported on
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   316
     * a {@code JLayer}.
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   317
     *
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   318
     * @param mgr the specified layout manager
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   319
     * @exception IllegalArgumentException this method is not supported
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   320
     */
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   321
    public void setLayout(LayoutManager mgr) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   322
        if (mgr != null) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   323
            throw new IllegalArgumentException("JLayer.setLayout() not supported");
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   324
        }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   325
    }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   326
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   327
    /**
27265
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   328
     * Delegates its functionality to the {@code getView().setBorder(Border)} method,
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   329
     * if the view component is an instance of {@code javax.swing.JComponent},
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   330
     * otherwise this method is a no-op.
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   331
     *
27265
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   332
     * @param border the border to be rendered for the {@code view} component
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   333
     * @see #getView()
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   334
     * @see javax.swing.JComponent#setBorder(Border)
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   335
     */
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   336
    public void setBorder(Border border) {
27265
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   337
        if (view instanceof JComponent) {
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   338
            ((JComponent)view).setBorder(border);
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   339
        }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   340
    }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   341
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   342
    /**
27265
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   343
     * Delegates its functionality to the {@code getView().getBorder()} method,
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   344
     * if the view component is an instance of {@code javax.swing.JComponent},
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   345
     * otherwise returns {@code null}.
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   346
     *
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   347
     * @return the border object for the {@code view} component
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   348
     * @see #getView()
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   349
     * @see #setBorder
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   350
     * @see javax.swing.JComponent#getBorder()
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   351
     */
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   352
    public Border getBorder() {
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   353
        if (view instanceof JComponent) {
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   354
            return ((JComponent) view).getBorder();
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   355
        }
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   356
        return null;
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   357
    }
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   358
a6528e9ca83b 8054543: Setting a border on a JLayer causes an Exceptions
alexp
parents: 26037
diff changeset
   359
    /**
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   360
     * This method is not supported by {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   361
     * and always throws {@code UnsupportedOperationException}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   362
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   363
     * @throws UnsupportedOperationException this method is not supported
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   364
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   365
     * @see #setView(Component)
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   366
     * @see #setGlassPane(JPanel)
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   367
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   368
    protected void addImpl(Component comp, Object constraints, int index) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   369
        throw new UnsupportedOperationException(
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   370
                "Adding components to JLayer is not supported, " +
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   371
                        "use setView() or setGlassPane() instead");
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   372
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   373
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   374
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   375
     * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   376
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   377
    public void remove(Component comp) {
3975
097245f7db08 6875716: JLayer.remove((Component)null) should behave consistently in (not) throwing NPE
alexp
parents: 3973
diff changeset
   378
        if (comp == null) {
097245f7db08 6875716: JLayer.remove((Component)null) should behave consistently in (not) throwing NPE
alexp
parents: 3973
diff changeset
   379
            super.remove(comp);
097245f7db08 6875716: JLayer.remove((Component)null) should behave consistently in (not) throwing NPE
alexp
parents: 3973
diff changeset
   380
        } else if (comp == getView()) {
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   381
            setView(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   382
        } else if (comp == getGlassPane()) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   383
            setGlassPane(null);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   384
        } else {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   385
            super.remove(comp);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   386
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   387
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   388
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   389
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   390
     * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   391
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   392
    public void removeAll() {
7250
b16cad13bf2c 6994419: JLayer.removeAll() behavior doesn't correspond to JLayer.remove() behavior.
alexp
parents: 7005
diff changeset
   393
        if (view != null) {
b16cad13bf2c 6994419: JLayer.removeAll() behavior doesn't correspond to JLayer.remove() behavior.
alexp
parents: 7005
diff changeset
   394
            setView(null);
b16cad13bf2c 6994419: JLayer.removeAll() behavior doesn't correspond to JLayer.remove() behavior.
alexp
parents: 7005
diff changeset
   395
        }
b16cad13bf2c 6994419: JLayer.removeAll() behavior doesn't correspond to JLayer.remove() behavior.
alexp
parents: 7005
diff changeset
   396
        if (glassPane != null) {
b16cad13bf2c 6994419: JLayer.removeAll() behavior doesn't correspond to JLayer.remove() behavior.
alexp
parents: 7005
diff changeset
   397
            setGlassPane(null);
b16cad13bf2c 6994419: JLayer.removeAll() behavior doesn't correspond to JLayer.remove() behavior.
alexp
parents: 7005
diff changeset
   398
        }
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   399
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   400
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   401
    /**
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   402
     * Always returns {@code true} to cause painting to originate from {@code JLayer},
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   403
     * or one of its ancestors.
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   404
     *
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   405
     * @return true
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   406
     * @see JComponent#isPaintingOrigin()
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   407
     */
7005
5e6d24f4303b 6989617: Enable JComponent to control repaintings of its children
alexp
parents: 6838
diff changeset
   408
    protected boolean isPaintingOrigin() {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   409
        return true;
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   410
    }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   411
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   412
    /**
8372
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   413
     * Delegates its functionality to the
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   414
     * {@link javax.swing.plaf.LayerUI#paintImmediately(int, int, int, int, JLayer)} method,
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   415
     * if {@code LayerUI} is set.
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   416
     *
8372
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   417
     * @param x  the x value of the region to be painted
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   418
     * @param y  the y value of the region to be painted
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   419
     * @param w  the width of the region to be painted
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   420
     * @param h  the height of the region to be painted
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   421
     */
8372
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   422
    public void paintImmediately(int x, int y, int w, int h) {
26029
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   423
        if (!isPaintImmediatelyCalling && getUI() != null) {
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   424
            isPaintImmediatelyCalling = true;
8372
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   425
            try {
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   426
                getUI().paintImmediately(x, y, w, h, this);
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   427
            } finally {
26029
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   428
                isPaintImmediatelyCalling = false;
8372
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   429
            }
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   430
        } else {
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   431
            super.paintImmediately(x, y, w, h);
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   432
        }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   433
    }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   434
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   435
    /**
26029
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   436
     * Delegates its functionality to the
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   437
     * {@link javax.swing.plaf.LayerUI#imageUpdate(java.awt.Image, int, int, int, int, int, JLayer)} method,
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   438
     * if the {@code LayerUI} is set.
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   439
     *
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   440
     * @param     img   the image being observed
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   441
     * @param     infoflags   see {@code imageUpdate} for more information
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   442
     * @param     x   the <i>x</i> coordinate
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   443
     * @param     y   the <i>y</i> coordinate
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   444
     * @param     w   the width
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   445
     * @param     h   the height
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   446
     * @return    {@code false} if the infoflags indicate that the
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   447
     *            image is completely loaded; {@code true} otherwise.
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   448
     */
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   449
    public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h) {
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   450
        if (!isImageUpdateCalling && getUI() != null) {
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   451
            isImageUpdateCalling = true;
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   452
            try {
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   453
                return getUI().imageUpdate(img, infoflags, x, y, w, h, this);
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   454
            } finally {
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   455
                isImageUpdateCalling = false;
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   456
            }
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   457
        } else {
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   458
            return super.imageUpdate(img, infoflags, x, y, w, h);
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   459
        }
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   460
    }
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   461
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   462
    /**
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   463
     * Delegates all painting to the {@link javax.swing.plaf.LayerUI} object.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   464
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   465
     * @param g the {@code Graphics} to render to
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   466
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   467
    public void paint(Graphics g) {
26029
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   468
        if (!isPaintCalling) {
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   469
            isPaintCalling = true;
8372
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   470
            try {
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   471
                super.paintComponent(g);
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   472
            } finally {
26029
730f9bc4b85e 8041982: Use of animated icon in JLayer causes CPU spin
alexp
parents: 26027
diff changeset
   473
                isPaintCalling = false;
8372
786e091594a0 6993171: JavaTest/JDK7b114 - no help text is shown for interview questions, JavaTest HANGS UP
alexp
parents: 7668
diff changeset
   474
            }
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   475
        } else {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   476
            super.paint(g);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   477
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   478
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   479
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   480
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   481
     * This method is empty, because all painting is done by
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   482
     * {@link #paint(Graphics)} and
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   483
     * {@link javax.swing.plaf.LayerUI#update(Graphics, JComponent)} methods
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   484
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   485
    protected void paintComponent(Graphics g) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   486
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   487
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   488
    /**
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   489
     * The {@code JLayer} overrides the default implementation of
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   490
     * this method (in {@code JComponent}) to return {@code false}.
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   491
     * This ensures
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   492
     * that the drawing machinery will call the {@code JLayer}'s
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   493
     * {@code paint}
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   494
     * implementation rather than messaging the {@code JLayer}'s
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   495
     * children directly.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   496
     *
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   497
     * @return false
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   498
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   499
    public boolean isOptimizedDrawingEnabled() {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   500
        return false;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   501
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   502
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   503
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   504
     * {@inheritDoc}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   505
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   506
    public void propertyChange(PropertyChangeEvent evt) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   507
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   508
            getUI().applyPropertyChange(evt, this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   509
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   510
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   511
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   512
    /**
5451
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   513
     * Enables the events from JLayer and <b>all its descendants</b>
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   514
     * defined by the specified event mask parameter
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   515
     * to be delivered to the
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   516
     * {@link LayerUI#eventDispatched(AWTEvent, JLayer)} method.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   517
     * <p>
5451
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   518
     * Events are delivered provided that {@code LayerUI} is set
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   519
     * for this {@code JLayer} and the {@code JLayer}
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   520
     * is displayable.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   521
     * <p>
8955
37ab7cd5890a 6992716: Typos in JLayer files
alexp
parents: 8372
diff changeset
   522
     * The following example shows how to correctly use this method
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   523
     * in the {@code LayerUI} implementations:
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   524
     * <pre>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   525
     *    public void installUI(JComponent c) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   526
     *       super.installUI(c);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   527
     *       JLayer l = (JLayer) c;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   528
     *       // this LayerUI will receive only key and focus events
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   529
     *       l.setLayerEventMask(AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   530
     *    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   531
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   532
     *    public void uninstallUI(JComponent c) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   533
     *       super.uninstallUI(c);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   534
     *       JLayer l = (JLayer) c;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   535
     *       // JLayer must be returned to its initial state
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   536
     *       l.setLayerEventMask(0);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   537
     *    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   538
     * </pre>
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   539
     *
5451
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   540
     * By default {@code JLayer} receives no events and its event mask is {@code 0}.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   541
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   542
     * @param layerEventMask the bitmask of event types to receive
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   543
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   544
     * @see #getLayerEventMask()
5451
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   545
     * @see LayerUI#eventDispatched(AWTEvent, JLayer)
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   546
     * @see Component#isDisplayable()
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   547
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   548
    public void setLayerEventMask(long layerEventMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   549
        long oldEventMask = getLayerEventMask();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   550
        this.eventMask = layerEventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   551
        firePropertyChange("layerEventMask", oldEventMask, layerEventMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   552
        if (layerEventMask != oldEventMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   553
            disableEvents(oldEventMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   554
            enableEvents(eventMask);
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   555
            if (isDisplayable()) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   556
                eventController.updateAWTEventListener(
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   557
                        oldEventMask, layerEventMask);
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   558
            }
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   559
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   560
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   561
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   562
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   563
     * Returns the bitmap of event mask to receive by this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   564
     * and its {@code LayerUI}.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   565
     * <p>
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   566
     * It means that {@link javax.swing.plaf.LayerUI#eventDispatched(AWTEvent, JLayer)} method
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   567
     * will only receive events that match the event mask.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   568
     * <p>
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   569
     * By default {@code JLayer} receives no events.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   570
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   571
     * @return the bitmask of event types to receive for this {@code JLayer}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   572
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   573
    public long getLayerEventMask() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   574
        return eventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   575
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   576
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   577
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   578
     * Delegates its functionality to the {@link javax.swing.plaf.LayerUI#updateUI(JLayer)} method,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   579
     * if {@code LayerUI} is set.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   580
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   581
    public void updateUI() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   582
        if (getUI() != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   583
            getUI().updateUI(this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   584
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   585
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   586
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   587
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   588
     * Returns the preferred size of the viewport for a view component.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   589
     * <p>
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   590
     * If the view component of this layer implements {@link Scrollable}, this method delegates its
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   591
     * implementation to the view component.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   592
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   593
     * @return the preferred size of the viewport for a view component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   594
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   595
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   596
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   597
    public Dimension getPreferredScrollableViewportSize() {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   598
        if (getView() instanceof Scrollable) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   599
            return ((Scrollable)getView()).getPreferredScrollableViewportSize();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   600
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   601
        return getPreferredSize();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   602
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   603
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   604
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   605
     * Returns a scroll increment, which is required for components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   606
     * that display logical rows or columns in order to completely expose
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   607
     * one block of rows or columns, depending on the value of orientation.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   608
     * <p>
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   609
     * If the view component of this layer implements {@link Scrollable}, this method delegates its
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   610
     * implementation to the view component.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   611
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   612
     * @return the "block" increment for scrolling in the specified direction
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   613
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   614
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   615
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   616
    public int getScrollableBlockIncrement(Rectangle visibleRect,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   617
                                           int orientation, int direction) {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   618
        if (getView() instanceof Scrollable) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   619
            return ((Scrollable)getView()).getScrollableBlockIncrement(visibleRect,
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   620
                    orientation, direction);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   621
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   622
        return (orientation == SwingConstants.VERTICAL) ? visibleRect.height :
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   623
                visibleRect.width;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   624
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   625
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   626
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   627
     * Returns {@code false} to indicate that the height of the viewport does not
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   628
     * determine the height of the layer, unless the preferred height
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   629
     * of the layer is smaller than the height of the viewport.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   630
     * <p>
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   631
     * If the view component of this layer implements {@link Scrollable}, this method delegates its
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   632
     * implementation to the view component.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   633
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   634
     * @return whether the layer should track the height of the viewport
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   635
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   636
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   637
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   638
    public boolean getScrollableTracksViewportHeight() {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   639
        if (getView() instanceof Scrollable) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   640
            return ((Scrollable)getView()).getScrollableTracksViewportHeight();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   641
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   642
        return false;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   643
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   644
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   645
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   646
     * Returns {@code false} to indicate that the width of the viewport does not
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   647
     * determine the width of the layer, unless the preferred width
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   648
     * of the layer is smaller than the width of the viewport.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   649
     * <p>
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   650
     * If the view component of this layer implements {@link Scrollable}, this method delegates its
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   651
     * implementation to the view component.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   652
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   653
     * @return whether the layer should track the width of the viewport
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   654
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   655
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   656
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   657
    public boolean getScrollableTracksViewportWidth() {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   658
        if (getView() instanceof Scrollable) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   659
            return ((Scrollable)getView()).getScrollableTracksViewportWidth();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   660
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   661
        return false;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   662
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   663
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   664
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   665
     * Returns a scroll increment, which is required for components
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   666
     * that display logical rows or columns in order to completely expose
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   667
     * one new row or column, depending on the value of orientation.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   668
     * Ideally, components should handle a partially exposed row or column
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   669
     * by returning the distance required to completely expose the item.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   670
     * <p>
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   671
     * Scrolling containers, like {@code JScrollPane}, will use this method
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   672
     * each time the user requests a unit scroll.
20158
1c5d22e5b898 8025117: [cleanup] Eliminate doclint errors in javax/swing/text classes
yan
parents: 9050
diff changeset
   673
     * <p>
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   674
     * If the view component of this layer implements {@link Scrollable}, this method delegates its
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   675
     * implementation to the view component.
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   676
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   677
     * @return The "unit" increment for scrolling in the specified direction.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   678
     *         This value should always be positive.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   679
     *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   680
     * @see Scrollable
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   681
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   682
    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation,
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   683
                                          int direction) {
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   684
        if (getView() instanceof Scrollable) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   685
            return ((Scrollable) getView()).getScrollableUnitIncrement(
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   686
                    visibleRect, orientation, direction);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   687
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   688
        return 1;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   689
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   690
26027
f42f02a8666d 8054371: Need to suppress newly added unchecked cast and conversion in Swing code
prr
parents: 26001
diff changeset
   691
    @SuppressWarnings("unchecked")
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   692
    private void readObject(ObjectInputStream s)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   693
            throws IOException, ClassNotFoundException {
26001
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   694
        ObjectInputStream.GetField f = s.readFields();
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   695
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   696
        view = (V) f.get("view", null);
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   697
        glassPane = (JPanel) f.get("glassPane", null);
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   698
        eventMask = f.get("eventMask", 0l);
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   699
        if (eventMask != 0) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   700
            eventController.updateAWTEventListener(0, eventMask);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   701
        }
26001
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   702
        LayerUI<V> newLayerUI = (LayerUI<V>) f.get("layerUI", null);
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   703
        if (newLayerUI != null) {
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   704
            setUI(newLayerUI);
991e1be0b235 8038937: Validate fields on Swing classes deserialization
alexsch
parents: 25568
diff changeset
   705
        }
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   706
    }
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   707
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   708
    /**
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   709
     * {@inheritDoc}
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   710
     */
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   711
    public void addNotify() {
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   712
        super.addNotify();
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   713
        eventController.updateAWTEventListener(0, eventMask);
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   714
    }
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   715
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   716
    /**
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   717
     * {@inheritDoc}
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   718
     */
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   719
    public void removeNotify() {
3748
b88af44d77a8 6875153: JLayer.isOptimizedDrawingEnabled() throws NPE for null glass pane set
alexp
parents: 3743
diff changeset
   720
        super.removeNotify();
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   721
        eventController.updateAWTEventListener(eventMask, 0);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   722
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   723
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   724
    /**
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   725
     * Delegates its functionality to the {@link javax.swing.plaf.LayerUI#doLayout(JLayer)} method,
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   726
     * if {@code LayerUI} is set.
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   727
     */
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   728
    public void doLayout() {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   729
        if (getUI() != null) {
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   730
            getUI().doLayout(this);
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   731
        }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   732
    }
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   733
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   734
    /**
6838
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   735
     * Gets the AccessibleContext associated with this {@code JLayer}.
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   736
     *
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   737
     * @return the AccessibleContext associated with this {@code JLayer}.
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   738
     */
23697
e556a715949f 8034169: Fix serial lint warnings in javax.swing
darcy
parents: 23010
diff changeset
   739
    @SuppressWarnings("serial") // anonymous class
6838
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   740
    public AccessibleContext getAccessibleContext() {
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   741
        if (accessibleContext == null) {
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   742
            accessibleContext = new AccessibleJComponent() {
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   743
                public AccessibleRole getAccessibleRole() {
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   744
                    return AccessibleRole.PANEL;
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   745
                }
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   746
            };
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   747
        }
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   748
        return accessibleContext;
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   749
    }
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   750
c101d59707f3 6986385: JLayer should implement accessible interface
alexp
parents: 6647
diff changeset
   751
    /**
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   752
     * static AWTEventListener to be shared with all AbstractLayerUIs
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   753
     */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   754
    private static class LayerEventController implements AWTEventListener {
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   755
        private ArrayList<Long> layerMaskList =
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   756
                new ArrayList<Long>();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   757
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   758
        private long currentEventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   759
5451
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   760
        private static final long ACCEPTED_EVENTS =
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   761
                AWTEvent.COMPONENT_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   762
                        AWTEvent.CONTAINER_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   763
                        AWTEvent.FOCUS_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   764
                        AWTEvent.KEY_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   765
                        AWTEvent.MOUSE_WHEEL_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   766
                        AWTEvent.MOUSE_MOTION_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   767
                        AWTEvent.MOUSE_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   768
                        AWTEvent.INPUT_METHOD_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   769
                        AWTEvent.HIERARCHY_EVENT_MASK |
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   770
                        AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK;
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   771
25568
b906a74c6882 8043550: Fix raw and unchecked lint warnings in javax.swing.*
darcy
parents: 23697
diff changeset
   772
        @SuppressWarnings({"unchecked", "rawtypes"})
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   773
        public void eventDispatched(AWTEvent event) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   774
            Object source = event.getSource();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   775
            if (source instanceof Component) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   776
                Component component = (Component) source;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   777
                while (component != null) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   778
                    if (component instanceof JLayer) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   779
                        JLayer l = (JLayer) component;
25568
b906a74c6882 8043550: Fix raw and unchecked lint warnings in javax.swing.*
darcy
parents: 23697
diff changeset
   780
                        LayerUI<?> ui = l.getUI();
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   781
                        if (ui != null &&
6647
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   782
                                isEventEnabled(l.getLayerEventMask(), event.getID()) &&
9d119d6c36b9 6982661: Complete JLayer component
alexp
parents: 5506
diff changeset
   783
                                (!(event instanceof InputEvent) || !((InputEvent)event).isConsumed())) {
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   784
                            ui.eventDispatched(event, l);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   785
                        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   786
                    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   787
                    component = component.getParent();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   788
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   789
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   790
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   791
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   792
        private void updateAWTEventListener(long oldEventMask, long newEventMask) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   793
            if (oldEventMask != 0) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   794
                layerMaskList.remove(oldEventMask);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   795
            }
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   796
            if (newEventMask != 0) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   797
                layerMaskList.add(newEventMask);
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   798
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   799
            long combinedMask = 0;
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   800
            for (Long mask : layerMaskList) {
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   801
                combinedMask |= mask;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   802
            }
5451
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   803
            // filter out all unaccepted events
82e4cf75e5b4 6899405: Specification for JLayer.setLayerEventMask() should mention that eventDispatch() might not be called
alexp
parents: 3975
diff changeset
   804
            combinedMask &= ACCEPTED_EVENTS;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   805
            if (combinedMask == 0) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   806
                removeAWTEventListener();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   807
            } else if (getCurrentEventMask() != combinedMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   808
                removeAWTEventListener();
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   809
                addAWTEventListener(combinedMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   810
            }
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   811
            currentEventMask = combinedMask;
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   812
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   813
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   814
        private long getCurrentEventMask() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   815
            return currentEventMask;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   816
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   817
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   818
        private void addAWTEventListener(final long eventMask) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   819
            AccessController.doPrivileged(new PrivilegedAction<Void>() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   820
                public Void run() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   821
                    Toolkit.getDefaultToolkit().
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   822
                            addAWTEventListener(LayerEventController.this, eventMask);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   823
                    return null;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   824
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   825
            });
3743
906063616ec2 6872503: JLayer event handling should be rewritten
alexp
parents: 3737
diff changeset
   826
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   827
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   828
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   829
        private void removeAWTEventListener() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   830
            AccessController.doPrivileged(new PrivilegedAction<Void>() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   831
                public Void run() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   832
                    Toolkit.getDefaultToolkit().
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   833
                            removeAWTEventListener(LayerEventController.this);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   834
                    return null;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   835
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   836
            });
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   837
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   838
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   839
        private boolean isEventEnabled(long eventMask, int id) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   840
            return (((eventMask & AWTEvent.COMPONENT_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   841
                    id >= ComponentEvent.COMPONENT_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   842
                    id <= ComponentEvent.COMPONENT_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   843
                    || ((eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   844
                    id >= ContainerEvent.CONTAINER_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   845
                    id <= ContainerEvent.CONTAINER_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   846
                    || ((eventMask & AWTEvent.FOCUS_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   847
                    id >= FocusEvent.FOCUS_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   848
                    id <= FocusEvent.FOCUS_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   849
                    || ((eventMask & AWTEvent.KEY_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   850
                    id >= KeyEvent.KEY_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   851
                    id <= KeyEvent.KEY_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   852
                    || ((eventMask & AWTEvent.MOUSE_WHEEL_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   853
                    id == MouseEvent.MOUSE_WHEEL)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   854
                    || ((eventMask & AWTEvent.MOUSE_MOTION_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   855
                    (id == MouseEvent.MOUSE_MOVED ||
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   856
                            id == MouseEvent.MOUSE_DRAGGED))
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   857
                    || ((eventMask & AWTEvent.MOUSE_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   858
                    id != MouseEvent.MOUSE_MOVED &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   859
                    id != MouseEvent.MOUSE_DRAGGED &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   860
                    id != MouseEvent.MOUSE_WHEEL &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   861
                    id >= MouseEvent.MOUSE_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   862
                    id <= MouseEvent.MOUSE_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   863
                    || ((eventMask & AWTEvent.INPUT_METHOD_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   864
                    id >= InputMethodEvent.INPUT_METHOD_FIRST &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   865
                    id <= InputMethodEvent.INPUT_METHOD_LAST)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   866
                    || ((eventMask & AWTEvent.HIERARCHY_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   867
                    id == HierarchyEvent.HIERARCHY_CHANGED)
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   868
                    || ((eventMask & AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK) != 0 &&
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   869
                    (id == HierarchyEvent.ANCESTOR_MOVED ||
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   870
                            id == HierarchyEvent.ANCESTOR_RESIZED)));
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   871
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   872
    }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   873
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   874
    /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   875
     * The default glassPane for the {@link javax.swing.JLayer}.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   876
     * It is a subclass of {@code JPanel} which is non opaque by default.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   877
     */
23697
e556a715949f 8034169: Fix serial lint warnings in javax.swing
darcy
parents: 23010
diff changeset
   878
    @SuppressWarnings("serial") // Superclass is not serializable across versions
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   879
    private static class DefaultLayerGlassPane extends JPanel {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   880
        /**
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   881
         * Creates a new {@link DefaultLayerGlassPane}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   882
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   883
        public DefaultLayerGlassPane() {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   884
            setOpaque(false);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   885
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   886
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   887
        /**
8955
37ab7cd5890a 6992716: Typos in JLayer files
alexp
parents: 8372
diff changeset
   888
         * First, implementation of this method iterates through
3508
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   889
         * glassPane's child components and returns {@code true}
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   890
         * if any of them is visible and contains passed x,y point.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   891
         * After that it checks if no mouseListeners is attached to this component
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   892
         * and no mouse cursor is set, then it returns {@code false},
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   893
         * otherwise calls the super implementation of this method.
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   894
         *
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   895
         * @param x the <i>x</i> coordinate of the point
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   896
         * @param y the <i>y</i> coordinate of the point
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   897
         * @return true if this component logically contains x,y
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   898
         */
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   899
        public boolean contains(int x, int y) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   900
            for (int i = 0; i < getComponentCount(); i++) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   901
                Component c = getComponent(i);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   902
                Point point = SwingUtilities.convertPoint(this, new Point(x, y), c);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   903
                if(c.isVisible() && c.contains(point)){
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   904
                    return true;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   905
                }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   906
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   907
            if (getMouseListeners().length == 0
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   908
                    && getMouseMotionListeners().length == 0
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   909
                    && getMouseWheelListeners().length == 0
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   910
                    && !isCursorSet()) {
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   911
                return false;
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   912
            }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   913
            return super.contains(x, y);
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   914
        }
defe8eec9251 6822696: Integrating JXLayer component to Swing library
alexp
parents:
diff changeset
   915
    }
3733
af63479b67b8 6872492: JLayer sources contain wrong header
alexp
parents: 3508
diff changeset
   916
}