diff options
author | Roman Kennke <roman@kennke.org> | 2007-06-25 11:25:50 +0000 |
---|---|---|
committer | Roman Kennke <roman@kennke.org> | 2007-06-25 11:25:50 +0000 |
commit | 6171a7dfb853b5b0d4da9cd0f2f9036ea15ef9e4 (patch) | |
tree | 1421f5d6acc836c71fe71755487fcc1253179c32 | |
parent | 38d71ece08e54b4c738f17049a9bb4e84c616b77 (diff) | |
download | classpath-6171a7dfb853b5b0d4da9cd0f2f9036ea15ef9e4.tar.gz |
2007-06-25 Roman Kennke <roman@kennke.org>
* gnu/java/awt/peer/ClasspathFontPeer.java
(canDisplay): Take character as integer codepoint.
* gnu/java/awt/peer/gtk/GdkFontPeer.java
(canDisplay): Take character as integer codepoint.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(postMouseEvent): Use MouseEvent constructor with absolute coordinates
to avoid deadlock (over getLocationOnScreen()).
* gnu/java/awt/peer/gtk/VolatileImageGraphics.java
(getDeviceConfiguration): Fall back to the default configuration
if the component is not set.
* gnu/java/awt/peer/qt/QtFontMetrics.java
(canDisplay): Take character as integer codepoint.
* gnu/java/awt/peer/qt/QtFontPeer.java
(canDisplay): Take character as integer codepoint.
* gnu/java/awt/peer/x/XFontPeer2.java
(canDisplay): Take character as integer codepoint.
* include/gnu_java_awt_peer_qt_QtFontMetrics.h
(canDisplay): Take character as integer codepoint.
* java/awt/Font.java
(DIALOG): New constant.
(DIALOG_INPUT): New constant.
(MONOSPACED): New constant.
(SANS_SERIF): New constant.
(SERIF): New constant.
(Font(Font)): New constructor.
(canDisplay(char)): Use new canDisplay(int) method.
(canDisplay(int)): New method.
(hasLayoutAttributes): New method.
* java/awt/event/MouseEvent.java
(absX,absY): New fields.
(MouseEvent): New constructor with absolute coordinates.
(getLocationOnScreen): New method.
(getXOnScreen): New method.
(getYOnScreen): New method.
* native/jni/qt-peer/qtfontmetrics.cpp
(canDisplay): Take character as integer codepoint.
-rw-r--r-- | ChangeLog | 41 | ||||
-rw-r--r-- | gnu/java/awt/peer/ClasspathFontPeer.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GdkFontPeer.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkComponentPeer.java | 13 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/VolatileImageGraphics.java | 12 | ||||
-rw-r--r-- | gnu/java/awt/peer/qt/QtFontMetrics.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/qt/QtFontPeer.java | 2 | ||||
-rw-r--r-- | gnu/java/awt/peer/x/XFontPeer2.java | 2 | ||||
-rw-r--r-- | include/gnu_java_awt_peer_qt_QtFontMetrics.h | 2 | ||||
-rw-r--r-- | java/awt/Font.java | 43 | ||||
-rw-r--r-- | java/awt/event/MouseEvent.java | 95 | ||||
-rw-r--r-- | native/jni/qt-peer/qtfontmetrics.cpp | 4 |
12 files changed, 206 insertions, 14 deletions
@@ -1,3 +1,42 @@ +2007-06-25 Roman Kennke <roman@kennke.org> + + * gnu/java/awt/peer/ClasspathFontPeer.java + (canDisplay): Take character as integer codepoint. + * gnu/java/awt/peer/gtk/GdkFontPeer.java + (canDisplay): Take character as integer codepoint. + * gnu/java/awt/peer/gtk/GtkComponentPeer.java + (postMouseEvent): Use MouseEvent constructor with absolute coordinates + to avoid deadlock (over getLocationOnScreen()). + * gnu/java/awt/peer/gtk/VolatileImageGraphics.java + (getDeviceConfiguration): Fall back to the default configuration + if the component is not set. + * gnu/java/awt/peer/qt/QtFontMetrics.java + (canDisplay): Take character as integer codepoint. + * gnu/java/awt/peer/qt/QtFontPeer.java + (canDisplay): Take character as integer codepoint. + * gnu/java/awt/peer/x/XFontPeer2.java + (canDisplay): Take character as integer codepoint. + * include/gnu_java_awt_peer_qt_QtFontMetrics.h + (canDisplay): Take character as integer codepoint. + * java/awt/Font.java + (DIALOG): New constant. + (DIALOG_INPUT): New constant. + (MONOSPACED): New constant. + (SANS_SERIF): New constant. + (SERIF): New constant. + (Font(Font)): New constructor. + (canDisplay(char)): Use new canDisplay(int) method. + (canDisplay(int)): New method. + (hasLayoutAttributes): New method. + * java/awt/event/MouseEvent.java + (absX,absY): New fields. + (MouseEvent): New constructor with absolute coordinates. + (getLocationOnScreen): New method. + (getXOnScreen): New method. + (getYOnScreen): New method. + * native/jni/qt-peer/qtfontmetrics.cpp + (canDisplay): Take character as integer codepoint. + 2007-06-25 Mark Wielaard <mark@klomp.org> * native/jni/native-lib/cpnet.c @@ -74,7 +113,7 @@ * gnu/java/awt/peer/GLightweightPeer.java * gnu/java/awt/peer/gtk/GdkRobotPeer.java - * gnu/java/awt/peer/gtk/GtkComponentPeer.java + * gnu/java/awt/peer/gtk/GtkCompoonentPeer.java * gnu/java/awt/peer/gtk/GtkFramePeer.java * gnu/java/awt/peer/gtk/GtkWindowPeer.java * gnu/java/awt/peer/qt/QtComponentPeer.java diff --git a/gnu/java/awt/peer/ClasspathFontPeer.java b/gnu/java/awt/peer/ClasspathFontPeer.java index 60fde2557..e43e5f284 100644 --- a/gnu/java/awt/peer/ClasspathFontPeer.java +++ b/gnu/java/awt/peer/ClasspathFontPeer.java @@ -644,7 +644,7 @@ public abstract class ClasspathFontPeer * be ignored. */ - public abstract boolean canDisplay (Font font, char c); + public abstract boolean canDisplay (Font font, int c); /** * Implementation of {@link Font#canDisplay(String)}, diff --git a/gnu/java/awt/peer/gtk/GdkFontPeer.java b/gnu/java/awt/peer/gtk/GdkFontPeer.java index 47a418052..95a806ac7 100644 --- a/gnu/java/awt/peer/gtk/GdkFontPeer.java +++ b/gnu/java/awt/peer/gtk/GdkFontPeer.java @@ -361,7 +361,7 @@ public class GdkFontPeer extends ClasspathFontPeer return NameDecoder.getName(nameTable, name, locale); } - public boolean canDisplay (Font font, char c) + public boolean canDisplay (Font font, int c) { // FIXME: inquire with pango return true; diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java index a270c6e3f..16c20ee25 100644 --- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java +++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java @@ -616,11 +616,18 @@ public class GtkComponentPeer extends GtkGenericPeer setVisible (true); } - protected void postMouseEvent(int id, long when, int mods, int x, int y, + protected void postMouseEvent(int id, long when, int mods, int x, int y, int clickCount, boolean popupTrigger) { - q().postEvent(new MouseEvent(awtComponent, id, when, mods, x, y, - clickCount, popupTrigger)); + // It is important to do the getLocationOnScreen() here, instead + // of using the old MouseEvent constructors, because + // Component.getLocationOnScreen() locks on the AWT lock, which can + // trigger a deadlock. You don't want this. + Point locOnScreen = getLocationOnScreen(); + q().postEvent(new MouseEvent(awtComponent, id, when, mods, x, y, + locOnScreen.x + x, locOnScreen.y + y, + clickCount, popupTrigger, + MouseEvent.NOBUTTON)); } /** diff --git a/gnu/java/awt/peer/gtk/VolatileImageGraphics.java b/gnu/java/awt/peer/gtk/VolatileImageGraphics.java index 88438862b..ad5cd5ecd 100644 --- a/gnu/java/awt/peer/gtk/VolatileImageGraphics.java +++ b/gnu/java/awt/peer/gtk/VolatileImageGraphics.java @@ -86,7 +86,17 @@ public class VolatileImageGraphics extends ComponentGraphics public GraphicsConfiguration getDeviceConfiguration() { - return owner.component.getGraphicsConfiguration(); + GraphicsConfiguration conf; + if (owner.component != null) + { + conf = owner.component.getGraphicsConfiguration(); + } + else + { + return java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment() + .getDefaultScreenDevice().getDefaultConfiguration(); + } + return conf; } public Graphics create() diff --git a/gnu/java/awt/peer/qt/QtFontMetrics.java b/gnu/java/awt/peer/qt/QtFontMetrics.java index 2438fcc32..3b182b5ea 100644 --- a/gnu/java/awt/peer/qt/QtFontMetrics.java +++ b/gnu/java/awt/peer/qt/QtFontMetrics.java @@ -94,7 +94,7 @@ public class QtFontMetrics extends FontMetrics // ****************** Package private *************************** - native boolean canDisplay( char c ); + native boolean canDisplay( int c ); // ****************** Public methods **************************** diff --git a/gnu/java/awt/peer/qt/QtFontPeer.java b/gnu/java/awt/peer/qt/QtFontPeer.java index 6ffe3f691..bd16daf28 100644 --- a/gnu/java/awt/peer/qt/QtFontPeer.java +++ b/gnu/java/awt/peer/qt/QtFontPeer.java @@ -98,7 +98,7 @@ public class QtFontPeer extends ClasspathFontPeer // ****************** ClasspathFontPeer Methods. - public boolean canDisplay (Font font, char c) + public boolean canDisplay (Font font, int c) { return metrics.canDisplay( c ); } diff --git a/gnu/java/awt/peer/x/XFontPeer2.java b/gnu/java/awt/peer/x/XFontPeer2.java index ce782a220..ab3861be1 100644 --- a/gnu/java/awt/peer/x/XFontPeer2.java +++ b/gnu/java/awt/peer/x/XFontPeer2.java @@ -270,7 +270,7 @@ public class XFontPeer2 } } - public boolean canDisplay(Font font, char c) + public boolean canDisplay(Font font, int c) { // FIXME: Implement this. throw new UnsupportedOperationException("Not yet implemented"); diff --git a/include/gnu_java_awt_peer_qt_QtFontMetrics.h b/include/gnu_java_awt_peer_qt_QtFontMetrics.h index 632167a76..ebc607ed3 100644 --- a/include/gnu_java_awt_peer_qt_QtFontMetrics.h +++ b/include/gnu_java_awt_peer_qt_QtFontMetrics.h @@ -14,7 +14,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_init (JNIEnv *env JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_initGraphics (JNIEnv *env, jobject, jobject, jobject); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_dispose (JNIEnv *env, jobject); JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getStringBounds (JNIEnv *env, jobject, jstring); -JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_canDisplay (JNIEnv *env, jobject, jchar); +JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_canDisplay (JNIEnv *env, jobject, jint); JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getAscent (JNIEnv *env, jobject); JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getDescent (JNIEnv *env, jobject); JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_getHeight (JNIEnv *env, jobject); diff --git a/java/awt/Font.java b/java/awt/Font.java index 29b87d6af..d6892a626 100644 --- a/java/awt/Font.java +++ b/java/awt/Font.java @@ -170,6 +170,31 @@ public class Font implements Serializable public static final int LAYOUT_NO_LIMIT_CONTEXT = 4; /** + * @since 1.6 + */ + public static final String DIALOG = "Dialog"; + + /** + * @since 1.6 + */ + public static final String DIALOG_INPUT = "DialogInput"; + + /** + * @since 1.6 + */ + public static final String MONOSPACED = "Monospaced"; + + /** + * @since 1.6 + */ + public static final String SANS_SERIF = "SansSerif"; + + /** + * @since 1.6 + */ + public static final String SERIF = "Serif"; + + /** * The logical name of this font. * * @since 1.0 @@ -330,6 +355,11 @@ public class Font implements Serializable return getFont(propname, (Font) null); } + protected Font(Font font) + { + this(font.getName(), font.getAttributes()); + } + /** * Initializes a new instance of <code>Font</code> with the specified * attributes. @@ -491,7 +521,12 @@ public class Font implements Serializable */ public boolean canDisplay(char c) { - return peer.canDisplay(this, c); + return canDisplay((int) c); + } + + public boolean canDisplay(int codePoint) + { + return peer.canDisplay(this, codePoint); } /** @@ -1373,6 +1408,12 @@ public class Font implements Serializable return getLineMetrics(str, 0, str.length() - 1, frc); } + public boolean hasLayoutAttributes() + { + // TODO: Implement properly. + return false; + } + /** * Reads the normal fields from the stream and then constructs the * peer from the style and size through getPeerFromToolkit(). diff --git a/java/awt/event/MouseEvent.java b/java/awt/event/MouseEvent.java index f2bcfbcc6..ad777e8f4 100644 --- a/java/awt/event/MouseEvent.java +++ b/java/awt/event/MouseEvent.java @@ -164,6 +164,16 @@ public class MouseEvent extends InputEvent private int y; /** + * The screen position of that mouse event, X coordinate. + */ + private int absX; + + /** + * The screen position of that mouse event, Y coordinate. + */ + private int absY; + + /** * The number of clicks that took place. For MOUSE_CLICKED, MOUSE_PRESSED, * and MOUSE_RELEASED, this will be at least 1; otherwise it is 0. * @@ -212,6 +222,7 @@ public class MouseEvent extends InputEvent int button) { super(source, id, when, modifiers); + this.x = x; this.y = y; this.clickCount = clickCount; @@ -234,6 +245,13 @@ public class MouseEvent extends InputEvent this.modifiersEx &= ~(BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK | BUTTON3_DOWN_MASK); + + if (source != null) + { + Point screenLoc = source.getLocationOnScreen(); + absX = screenLoc.x + x; + absY = screenLoc.y + y; + } } /** @@ -258,6 +276,59 @@ public class MouseEvent extends InputEvent } /** + * Creates a new MouseEvent. This is like the other constructors and adds + * specific absolute coordinates. + * + * @param source the source of the event + * @param id the event id + * @param when the timestamp of when the event occurred + * @param modifiers the modifier keys during the event, in old or new style + * @param x the X coordinate of the mouse point + * @param y the Y coordinate of the mouse point + * @param absX the absolute X screen coordinate of this event + * @param absY the absolute Y screen coordinate of this event + * @param clickCount the number of mouse clicks for this event + * @param popupTrigger true if this event triggers a popup menu + * @param button the most recent mouse button to change state + * + * @throws IllegalArgumentException if source is null or button is invalid + * + * @since 1.6 + */ + public MouseEvent(Component source, int id, long when, int modifiers, + int x, int y, int absX, int absY, int clickCount, + boolean popupTrigger, int button) + { + super(source, id, when, modifiers); + + this.x = x; + this.y = y; + this.clickCount = clickCount; + this.popupTrigger = popupTrigger; + this.button = button; + if (button < NOBUTTON || button > BUTTON3) + throw new IllegalArgumentException(); + if ((modifiers & EventModifier.OLD_MASK) != 0) + { + if ((modifiers & BUTTON1_MASK) != 0) + this.button = BUTTON1; + else if ((modifiers & BUTTON2_MASK) != 0) + this.button = BUTTON2; + else if ((modifiers & BUTTON3_MASK) != 0) + this.button = BUTTON3; + } + // clear the mouse button modifier masks if this is a button + // release event. + if (id == MOUSE_RELEASED) + this.modifiersEx &= ~(BUTTON1_DOWN_MASK + | BUTTON2_DOWN_MASK + | BUTTON3_DOWN_MASK); + + this.absX = absX; + this.absY = absY; + } + + /** * This method returns the X coordinate of the mouse position. This is * relative to the source component. * @@ -280,6 +351,30 @@ public class MouseEvent extends InputEvent } /** + * @since 1.6 + */ + public Point getLocationOnScreen() + { + return new Point(absX, absY); + } + + /** + * @since 1.6 + */ + public int getXOnScreen() + { + return absX; + } + + /** + * @since 1.6 + */ + public int getYOnScreen() + { + return absY; + } + + /** * This method returns a <code>Point</code> for the x,y position of * the mouse pointer. This is relative to the source component. * diff --git a/native/jni/qt-peer/qtfontmetrics.cpp b/native/jni/qt-peer/qtfontmetrics.cpp index fd56b2878..f2f61822d 100644 --- a/native/jni/qt-peer/qtfontmetrics.cpp +++ b/native/jni/qt-peer/qtfontmetrics.cpp @@ -127,11 +127,11 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_dispose * Returns JNI_TRUE if a character is displayable. */ JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_qt_QtFontMetrics_canDisplay -(JNIEnv *env, jobject obj, jchar c) +(JNIEnv *env, jobject obj, jint c) { QFontMetrics *fm = getFontMetrics( env, obj ); assert( fm ); - bool result = fm->inFont( QChar( (unsigned short)c ) ); + bool result = fm->inFont( QChar( (unsigned int) c ) ); return (result ? JNI_TRUE : JNI_FALSE); } |