Moved createImageCursor() into SwingUtil.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@1132 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: DnDManager.java,v 1.17 2003/05/09 21:32:11 ray Exp $
|
// $Id: DnDManager.java,v 1.18 2003/05/15 22:02:11 mdb Exp $
|
||||||
|
|
||||||
package com.samskivert.swing.dnd;
|
package com.samskivert.swing.dnd;
|
||||||
|
|
||||||
@@ -8,13 +8,11 @@ import java.awt.Container;
|
|||||||
import java.awt.Cursor;
|
import java.awt.Cursor;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.GraphicsEnvironment;
|
|
||||||
import java.awt.IllegalComponentStateException;
|
import java.awt.IllegalComponentStateException;
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.Transparency;
|
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
@@ -99,63 +97,6 @@ public class DnDManager
|
|||||||
singleton.removeTarget(comp);
|
singleton.removeTarget(comp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a custom cursor out of the specified image, putting the hotspot
|
|
||||||
* in the exact center of the created cursor.
|
|
||||||
*/
|
|
||||||
public static Cursor createImageCursor (Image img)
|
|
||||||
{
|
|
||||||
return createImageCursor(img, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a custom cursor out of the specified image, with the specified
|
|
||||||
* hotspot.
|
|
||||||
*/
|
|
||||||
public static Cursor createImageCursor (Image img, Point hotspot)
|
|
||||||
{
|
|
||||||
Toolkit tk = Toolkit.getDefaultToolkit();
|
|
||||||
|
|
||||||
// for now, just report the cursor restrictions, then blindly create
|
|
||||||
int w = img.getWidth(null);
|
|
||||||
int h = img.getHeight(null);
|
|
||||||
Dimension d = tk.getBestCursorSize(w, h);
|
|
||||||
int colors = tk.getMaximumCursorColors();
|
|
||||||
Log.debug("Creating custom cursor [desiredSize=" + w + "x" + h +
|
|
||||||
", bestSize=" + d.width + "x" + d.height +
|
|
||||||
", maxcolors=" + colors + "].");
|
|
||||||
|
|
||||||
// if the passed-in image is smaller, pad it with transparent pixels
|
|
||||||
// and use it anyway.
|
|
||||||
if (((w < d.width) && (h <= d.height)) ||
|
|
||||||
((w <= d.width) && (h < d.height))) {
|
|
||||||
Image padder = GraphicsEnvironment.getLocalGraphicsEnvironment().
|
|
||||||
getDefaultScreenDevice().getDefaultConfiguration().
|
|
||||||
createCompatibleImage(d.width, d.height, Transparency.BITMASK);
|
|
||||||
Graphics g = padder.getGraphics();
|
|
||||||
g.drawImage(img, 0, 0, null);
|
|
||||||
g.dispose();
|
|
||||||
|
|
||||||
// and reassign the image to the padded image
|
|
||||||
img = padder;
|
|
||||||
|
|
||||||
// and adjust the 'best' to cheat the hotspot checking code
|
|
||||||
d.width = w;
|
|
||||||
d.height = h;
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure the hotspot is valid
|
|
||||||
if (hotspot == null) {
|
|
||||||
hotspot = new Point(d.width / 2, d.height / 2);
|
|
||||||
} else {
|
|
||||||
hotspot.x = Math.min(d.width - 1, Math.max(0, hotspot.x));
|
|
||||||
hotspot.y = Math.min(d.height - 1, Math.max(0, hotspot.y));
|
|
||||||
}
|
|
||||||
|
|
||||||
// and create the cursor
|
|
||||||
return tk.createCustomCursor(img, hotspot, "samskivertDnDCursor");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restrict construction.
|
* Restrict construction.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// $Id: SwingUtil.java,v 1.22 2003/04/04 18:55:24 mdb Exp $
|
// $Id: SwingUtil.java,v 1.23 2003/05/15 22:02:11 mdb Exp $
|
||||||
//
|
//
|
||||||
// samskivert library - useful routines for java programs
|
// samskivert library - useful routines for java programs
|
||||||
// Copyright (C) 2001 Michael Bayne
|
// Copyright (C) 2001 Michael Bayne
|
||||||
@@ -22,16 +22,20 @@ package com.samskivert.swing.util;
|
|||||||
|
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
import java.awt.Container;
|
import java.awt.Container;
|
||||||
|
import java.awt.Cursor;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.FontMetrics;
|
import java.awt.FontMetrics;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
import java.awt.GraphicsEnvironment;
|
||||||
|
import java.awt.Image;
|
||||||
import java.awt.Point;
|
import java.awt.Point;
|
||||||
import java.awt.Polygon;
|
import java.awt.Polygon;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.RenderingHints;
|
import java.awt.RenderingHints;
|
||||||
import java.awt.Shape;
|
import java.awt.Shape;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
|
import java.awt.Transparency;
|
||||||
import java.awt.Window;
|
import java.awt.Window;
|
||||||
|
|
||||||
import java.awt.geom.Area;
|
import java.awt.geom.Area;
|
||||||
@@ -532,4 +536,61 @@ public class SwingUtil
|
|||||||
c.revalidate();
|
c.revalidate();
|
||||||
c.repaint();
|
c.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a custom cursor out of the specified image, putting the hotspot
|
||||||
|
* in the exact center of the created cursor.
|
||||||
|
*/
|
||||||
|
public static Cursor createImageCursor (Image img)
|
||||||
|
{
|
||||||
|
return createImageCursor(img, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a custom cursor out of the specified image, with the specified
|
||||||
|
* hotspot.
|
||||||
|
*/
|
||||||
|
public static Cursor createImageCursor (Image img, Point hotspot)
|
||||||
|
{
|
||||||
|
Toolkit tk = Toolkit.getDefaultToolkit();
|
||||||
|
|
||||||
|
// for now, just report the cursor restrictions, then blindly create
|
||||||
|
int w = img.getWidth(null);
|
||||||
|
int h = img.getHeight(null);
|
||||||
|
Dimension d = tk.getBestCursorSize(w, h);
|
||||||
|
int colors = tk.getMaximumCursorColors();
|
||||||
|
// Log.debug("Creating custom cursor [desiredSize=" + w + "x" + h +
|
||||||
|
// ", bestSize=" + d.width + "x" + d.height +
|
||||||
|
// ", maxcolors=" + colors + "].");
|
||||||
|
|
||||||
|
// if the passed-in image is smaller, pad it with transparent pixels
|
||||||
|
// and use it anyway.
|
||||||
|
if (((w < d.width) && (h <= d.height)) ||
|
||||||
|
((w <= d.width) && (h < d.height))) {
|
||||||
|
Image padder = GraphicsEnvironment.getLocalGraphicsEnvironment().
|
||||||
|
getDefaultScreenDevice().getDefaultConfiguration().
|
||||||
|
createCompatibleImage(d.width, d.height, Transparency.BITMASK);
|
||||||
|
Graphics g = padder.getGraphics();
|
||||||
|
g.drawImage(img, 0, 0, null);
|
||||||
|
g.dispose();
|
||||||
|
|
||||||
|
// and reassign the image to the padded image
|
||||||
|
img = padder;
|
||||||
|
|
||||||
|
// and adjust the 'best' to cheat the hotspot checking code
|
||||||
|
d.width = w;
|
||||||
|
d.height = h;
|
||||||
|
}
|
||||||
|
|
||||||
|
// make sure the hotspot is valid
|
||||||
|
if (hotspot == null) {
|
||||||
|
hotspot = new Point(d.width / 2, d.height / 2);
|
||||||
|
} else {
|
||||||
|
hotspot.x = Math.min(d.width - 1, Math.max(0, hotspot.x));
|
||||||
|
hotspot.y = Math.min(d.height - 1, Math.max(0, hotspot.y));
|
||||||
|
}
|
||||||
|
|
||||||
|
// and create the cursor
|
||||||
|
return tk.createCustomCursor(img, hotspot, "samskivertDnDCursor");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user