XPanelPeer.java revision 11166:d70f1fb31205
1/*
2 * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25package sun.awt.X11;
26
27import java.awt.*;
28import java.awt.peer.*;
29
30import sun.awt.SunGraphicsCallback;
31
32public class XPanelPeer extends XCanvasPeer implements PanelPeer {
33
34    XEmbeddingContainer embedder = null; //new XEmbeddingContainer();
35    /**
36     * Embeds the given window into container using XEmbed protocol
37     */
38    public void xembed(long window) {
39        if (embedder != null) {
40            embedder.add(window);
41        }
42    }
43    XPanelPeer() {}
44
45    XPanelPeer(XCreateWindowParams params) {
46        super(params);
47    }
48
49    XPanelPeer(Component target) {
50        super(target);
51    }
52
53    void postInit(XCreateWindowParams params) {
54        super.postInit(params);
55        if (embedder != null) {
56            embedder.install(this);
57        }
58    }
59
60    public Insets getInsets() {
61        return new Insets(0, 0, 0, 0);
62    }
63    public void paint(Graphics g) {
64        super.paint(g);
65        SunGraphicsCallback.PaintHeavyweightComponentsCallback.getInstance().
66            runComponents(((Container)target).getComponents(), g,
67                          SunGraphicsCallback.LIGHTWEIGHTS |
68                          SunGraphicsCallback.HEAVYWEIGHTS);
69    }
70    public void print(Graphics g) {
71        super.print(g);
72        SunGraphicsCallback.PrintHeavyweightComponentsCallback.getInstance().
73            runComponents(((Container)target).getComponents(), g,
74                          SunGraphicsCallback.LIGHTWEIGHTS |
75                          SunGraphicsCallback.HEAVYWEIGHTS);
76
77    }
78
79    @SuppressWarnings("deprecation")
80    public void setBackground(Color c) {
81        Component comp;
82        int i;
83
84        Container cont = (Container) target;
85        synchronized(target.getTreeLock()) {
86            int n = cont.getComponentCount();
87            for(i=0; i < n; i++) {
88                comp = cont.getComponent(i);
89                ComponentPeer peer = comp.getPeer();
90                if (peer != null) {
91                    Color color = comp.getBackground();
92                    if (color == null || color.equals(c)) {
93                        peer.setBackground(c);
94                    }
95                }
96            }
97        }
98        super.setBackground(c);
99    }
100
101    public void setForeground(Color c) {
102        setForegroundForHierarchy((Container) target, c);
103    }
104
105    @SuppressWarnings("deprecation")
106    private void setForegroundForHierarchy(Container cont, Color c) {
107        synchronized(target.getTreeLock()) {
108            int n = cont.getComponentCount();
109            for(int i=0; i < n; i++) {
110                Component comp = cont.getComponent(i);
111                Color color = comp.getForeground();
112                if (color == null || color.equals(c)) {
113                    ComponentPeer cpeer = comp.getPeer();
114                    if (cpeer != null) {
115                        cpeer.setForeground(c);
116                    }
117                    if (cpeer instanceof LightweightPeer
118                        && comp instanceof Container)
119                    {
120                        setForegroundForHierarchy((Container) comp, c);
121                    }
122                }
123            }
124        }
125    }
126
127    /**
128     * DEPRECATED:  Replaced by getInsets().
129     */
130    public Insets insets() {
131        return getInsets();
132    }
133
134    public void dispose() {
135        if (embedder != null) {
136            embedder.deinstall();
137        }
138        super.dispose();
139    }
140
141    protected boolean shouldFocusOnClick() {
142        // Return false if this container has children so in that case it won't
143        // be focused. Return true otherwise.
144        return ((Container)target).getComponentCount() == 0;
145    }
146}
147