feat(jdk8): move files to new folder to avoid resources compiled.
This commit is contained in:
@@ -0,0 +1,267 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package com.sun.java.swing.plaf.motif;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Component;
|
||||
import java.awt.Point;
|
||||
import javax.swing.plaf.*;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* <strong>Warning:</strong>
|
||||
* Serialized objects of this class will not be compatible with
|
||||
* future Swing releases. The current serialization support is appropriate
|
||||
* for short term storage or RMI between applications running the same
|
||||
* version of Swing. A future release of Swing will provide support for
|
||||
* long term persistence.
|
||||
*
|
||||
* @author David Kloba
|
||||
*/
|
||||
public class MotifDesktopPaneUI extends javax.swing.plaf.basic.BasicDesktopPaneUI
|
||||
{
|
||||
|
||||
/// DesktopPaneUI methods
|
||||
public static ComponentUI createUI(JComponent d) {
|
||||
return new MotifDesktopPaneUI();
|
||||
}
|
||||
|
||||
public MotifDesktopPaneUI() {
|
||||
}
|
||||
|
||||
protected void installDesktopManager() {
|
||||
desktopManager = desktop.getDesktopManager();
|
||||
if(desktopManager == null) {
|
||||
desktopManager = new MotifDesktopManager();
|
||||
desktop.setDesktopManager(desktopManager);
|
||||
((MotifDesktopManager)desktopManager).adjustIcons(desktop);
|
||||
}
|
||||
}
|
||||
|
||||
public Insets getInsets(JComponent c) {return new Insets(0,0,0,0);}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
/// DragPane class
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
private class DragPane extends JComponent {
|
||||
public void paint(Graphics g) {
|
||||
g.setColor(Color.darkGray);
|
||||
g.drawRect(0, 0, getWidth()-1, getHeight()-1);
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
/// MotifDesktopManager class
|
||||
////////////////////////////////////////////////////////////////////////////////////
|
||||
private class MotifDesktopManager extends DefaultDesktopManager implements Serializable, UIResource {
|
||||
JComponent dragPane;
|
||||
boolean usingDragPane = false;
|
||||
private transient JLayeredPane layeredPaneForDragPane;
|
||||
int iconWidth, iconHeight;
|
||||
|
||||
// PENDING(klobad) this should be optimized
|
||||
public void setBoundsForFrame(JComponent f, int newX, int newY,
|
||||
int newWidth, int newHeight) {
|
||||
if(!usingDragPane) {
|
||||
boolean didResize;
|
||||
didResize = (f.getWidth() != newWidth || f.getHeight() != newHeight);
|
||||
Rectangle r = f.getBounds();
|
||||
f.setBounds(newX, newY, newWidth, newHeight);
|
||||
SwingUtilities.computeUnion(newX, newY, newWidth, newHeight, r);
|
||||
f.getParent().repaint(r.x, r.y, r.width, r.height);
|
||||
if(didResize) {
|
||||
f.validate();
|
||||
}
|
||||
} else {
|
||||
Rectangle r = dragPane.getBounds();
|
||||
dragPane.setBounds(newX, newY, newWidth, newHeight);
|
||||
SwingUtilities.computeUnion(newX, newY, newWidth, newHeight, r);
|
||||
dragPane.getParent().repaint(r.x, r.y, r.width, r.height);
|
||||
}
|
||||
}
|
||||
|
||||
public void beginDraggingFrame(JComponent f) {
|
||||
usingDragPane = false;
|
||||
if(f.getParent() instanceof JLayeredPane) {
|
||||
if(dragPane == null)
|
||||
dragPane = new DragPane();
|
||||
layeredPaneForDragPane = (JLayeredPane)f.getParent();
|
||||
layeredPaneForDragPane.setLayer(dragPane, Integer.MAX_VALUE);
|
||||
dragPane.setBounds(f.getX(), f.getY(), f.getWidth(), f.getHeight());
|
||||
layeredPaneForDragPane.add(dragPane);
|
||||
usingDragPane = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void dragFrame(JComponent f, int newX, int newY) {
|
||||
setBoundsForFrame(f, newX, newY, f.getWidth(), f.getHeight());
|
||||
}
|
||||
|
||||
public void endDraggingFrame(JComponent f) {
|
||||
if(usingDragPane) {
|
||||
layeredPaneForDragPane.remove(dragPane);
|
||||
usingDragPane = false;
|
||||
if (f instanceof JInternalFrame) {
|
||||
setBoundsForFrame(f, dragPane.getX(), dragPane.getY(),
|
||||
dragPane.getWidth(), dragPane.getHeight());
|
||||
} else if (f instanceof JInternalFrame.JDesktopIcon) {
|
||||
adjustBoundsForIcon((JInternalFrame.JDesktopIcon)f,
|
||||
dragPane.getX(), dragPane.getY());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void beginResizingFrame(JComponent f, int direction) {
|
||||
usingDragPane = false;
|
||||
if(f.getParent() instanceof JLayeredPane) {
|
||||
if(dragPane == null)
|
||||
dragPane = new DragPane();
|
||||
JLayeredPane p = (JLayeredPane)f.getParent();
|
||||
p.setLayer(dragPane, Integer.MAX_VALUE);
|
||||
dragPane.setBounds(f.getX(), f.getY(),
|
||||
f.getWidth(), f.getHeight());
|
||||
p.add(dragPane);
|
||||
usingDragPane = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void resizeFrame(JComponent f, int newX, int newY,
|
||||
int newWidth, int newHeight) {
|
||||
setBoundsForFrame(f, newX, newY, newWidth, newHeight);
|
||||
}
|
||||
|
||||
public void endResizingFrame(JComponent f) {
|
||||
if(usingDragPane) {
|
||||
JLayeredPane p = (JLayeredPane)f.getParent();
|
||||
p.remove(dragPane);
|
||||
usingDragPane = false;
|
||||
setBoundsForFrame(f, dragPane.getX(), dragPane.getY(),
|
||||
dragPane.getWidth(), dragPane.getHeight());
|
||||
}
|
||||
}
|
||||
|
||||
public void iconifyFrame(JInternalFrame f) {
|
||||
JInternalFrame.JDesktopIcon icon = f.getDesktopIcon();
|
||||
Point p = icon.getLocation();
|
||||
adjustBoundsForIcon(icon, p.x, p.y);
|
||||
super.iconifyFrame(f);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change positions of icons in the desktop pane so that
|
||||
* they do not overlap
|
||||
*/
|
||||
protected void adjustIcons(JDesktopPane desktop) {
|
||||
// We need to know Motif icon size
|
||||
JInternalFrame.JDesktopIcon icon = new JInternalFrame.JDesktopIcon(
|
||||
new JInternalFrame());
|
||||
Dimension iconSize = icon.getPreferredSize();
|
||||
iconWidth = iconSize.width;
|
||||
iconHeight = iconSize.height;
|
||||
|
||||
JInternalFrame[] frames = desktop.getAllFrames();
|
||||
for (int i=0; i<frames.length; i++) {
|
||||
icon = frames[i].getDesktopIcon();
|
||||
Point ip = icon.getLocation();
|
||||
adjustBoundsForIcon(icon, ip.x, ip.y);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change positions of icon so that it doesn't overlap
|
||||
* other icons.
|
||||
*/
|
||||
protected void adjustBoundsForIcon(JInternalFrame.JDesktopIcon icon,
|
||||
int x, int y) {
|
||||
JDesktopPane c = icon.getDesktopPane();
|
||||
|
||||
int maxy = c.getHeight();
|
||||
int w = iconWidth;
|
||||
int h = iconHeight;
|
||||
c.repaint(x, y, w, h);
|
||||
x = x < 0 ? 0 : x;
|
||||
y = y < 0 ? 0 : y;
|
||||
|
||||
/* Fix for disappearing icons. If the y value is maxy then this
|
||||
* algorithm would place the icon in a non-displayed cell. Never
|
||||
* to be ssen again.*/
|
||||
y = y >= maxy ? (maxy - 1) : y;
|
||||
|
||||
/* Compute the offset for the cell we are trying to go in. */
|
||||
int lx = (x / w) * w;
|
||||
int ygap = maxy % h;
|
||||
int ly = ((y-ygap) / h) * h + ygap;
|
||||
|
||||
/* How far are we into the cell we dropped the icon in. */
|
||||
int dx = x - lx;
|
||||
int dy = y - ly;
|
||||
|
||||
/* Set coordinates for the icon. */
|
||||
x = dx < w/2 ? lx: lx + w;
|
||||
y = dy < h/2 ? ly: ((ly + h) < maxy ? ly + h: ly);
|
||||
|
||||
while (getIconAt(c, icon, x, y) != null) {
|
||||
x += w;
|
||||
}
|
||||
|
||||
/* Cancel the move if the x value was moved off screen. */
|
||||
if (x > c.getWidth()) {
|
||||
return;
|
||||
}
|
||||
if (icon.getParent() != null) {
|
||||
setBoundsForFrame(icon, x, y, w, h);
|
||||
} else {
|
||||
icon.setLocation(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
protected JInternalFrame.JDesktopIcon getIconAt(JDesktopPane desktop,
|
||||
JInternalFrame.JDesktopIcon icon, int x, int y) {
|
||||
|
||||
JInternalFrame.JDesktopIcon currentIcon = null;
|
||||
Component[] components = desktop.getComponents();
|
||||
|
||||
for (int i=0; i<components.length; i++) {
|
||||
Component comp = components[i];
|
||||
if (comp instanceof JInternalFrame.JDesktopIcon &&
|
||||
comp != icon) {
|
||||
|
||||
Point p = comp.getLocation();
|
||||
if (p.x == x && p.y == y) {
|
||||
return (JInternalFrame.JDesktopIcon)comp;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}; /// END of MotifDesktopManager
|
||||
}
|
||||
Reference in New Issue
Block a user