summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-05 19:45:02 +0000
committerfitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-05 19:45:02 +0000
commitfa5ee3a3e2be5550d7325e7573b192f25effca98 (patch)
tree295071a60052fcc7419762c498ef7483341c83ab
parent8f214cb26e0c4a3dea4fde46e91afa5376b239a4 (diff)
downloadgcc-fa5ee3a3e2be5550d7325e7573b192f25effca98.tar.gz
2004-02-05 Thomas Fitzsimmons <fitzsim@redhat.com>
* java/awt/Scrollbar.java (next_scrollbar_number): New field. (Scrollbar (int, int, int, int, int)): Make default page increment 10. (setValues): Only call peer.setValues if one of the values has changed. (generateName): New method. (getUniqueLong): New method. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c (range_scrollbar): Remove structure. (post_adjustment_event): Remove function. (post_change_event): Accept jobject argument. (create): Cast jints to gdoubles. Round scrollbar values to the nearest integer. Clamp min, max and value settings. (connectJObject): Connect hook to widget->window. (connectSignals): Remove range_scrollbar structure variables. Remove "move-slider" connection. Pass global peer reference to "value-changed" callback. (setLineIncrement): Cast jint value to gdouble. (setPageIncrement): Likewise. (setValues): Likewise. Clamp min, max and value settings. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77332 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libjava/ChangeLog23
-rw-r--r--libjava/java/awt/Scrollbar.java55
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c131
3 files changed, 101 insertions, 108 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index dabede449fe..22fbd828387 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,26 @@
+2004-02-05 Thomas Fitzsimmons <fitzsim@redhat.com>
+
+ * java/awt/Scrollbar.java (next_scrollbar_number): New field.
+ (Scrollbar (int, int, int, int, int)): Make default page
+ increment 10.
+ (setValues): Only call peer.setValues if one of the values has
+ changed.
+ (generateName): New method.
+ (getUniqueLong): New method.
+ * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+ (range_scrollbar): Remove structure.
+ (post_adjustment_event): Remove function.
+ (post_change_event): Accept jobject argument.
+ (create): Cast jints to gdoubles. Round scrollbar values to the
+ nearest integer. Clamp min, max and value settings.
+ (connectJObject): Connect hook to widget->window.
+ (connectSignals): Remove range_scrollbar structure variables.
+ Remove "move-slider" connection. Pass global peer reference to
+ "value-changed" callback.
+ (setLineIncrement): Cast jint value to gdouble.
+ (setPageIncrement): Likewise.
+ (setValues): Likewise. Clamp min, max and value settings.
+
2004-02-05 Michael Koch <konqueror@gmx.de>
* javax/swing/AbstractCellEditor.java
diff --git a/libjava/java/awt/Scrollbar.java b/libjava/java/awt/Scrollbar.java
index 79b2e439ea1..a01dc3ccdc8 100644
--- a/libjava/java/awt/Scrollbar.java
+++ b/libjava/java/awt/Scrollbar.java
@@ -120,6 +120,11 @@ private AdjustmentListener adjustment_listeners;
private transient boolean valueIsAdjusting = false;
+ /*
+ * The number used to generate the name returned by getName.
+ */
+ private static transient long next_scrollbar_number = 0;
+
/*************************************************************************/
/*
@@ -194,9 +199,8 @@ Scrollbar(int orientation, int value, int visibleAmount, int minimum,
// Default is 1 according to online docs.
lineIncrement = 1;
- pageIncrement = (maximum - minimum) / 5;
- if (pageIncrement == 0)
- pageIncrement = 1;
+ // Default is 10 according to javadocs.
+ pageIncrement = 10;
}
/*************************************************************************/
@@ -394,15 +398,17 @@ setValues(int value, int visibleAmount, int minimum, int maximum)
if (visibleAmount > maximum - minimum)
visibleAmount = maximum - minimum;
+ ScrollbarPeer peer = (ScrollbarPeer) getPeer ();
+ if (peer != null
+ && (this.value != value || this.visibleAmount != visibleAmount
+ || this.minimum != minimum || this.maximum != maximum))
+ peer.setValues(value, visibleAmount, minimum, maximum);
+
this.value = value;
this.visibleAmount = visibleAmount;
this.minimum = minimum;
this.maximum = maximum;
- ScrollbarPeer sp = (ScrollbarPeer)getPeer();
- if (sp != null)
- sp.setValues(value, visibleAmount, minimum, maximum);
-
int range = maximum - minimum;
if (lineIncrement > range)
{
@@ -411,8 +417,8 @@ setValues(int value, int visibleAmount, int minimum, int maximum)
else
lineIncrement = range;
- if (sp != null)
- sp.setLineIncrement(lineIncrement);
+ if (peer != null)
+ peer.setLineIncrement(lineIncrement);
}
if (pageIncrement > range)
@@ -422,8 +428,8 @@ setValues(int value, int visibleAmount, int minimum, int maximum)
else
pageIncrement = range;
- if (sp != null)
- sp.setPageIncrement(pageIncrement);
+ if (peer != null)
+ peer.setPageIncrement(pageIncrement);
}
}
@@ -503,9 +509,9 @@ setLineIncrement(int lineIncrement)
this.lineIncrement = lineIncrement;
- ScrollbarPeer sp = (ScrollbarPeer) getPeer ();
- if (sp != null)
- sp.setLineIncrement (this.lineIncrement);
+ ScrollbarPeer peer = (ScrollbarPeer) getPeer ();
+ if (peer != null)
+ peer.setLineIncrement (this.lineIncrement);
}
/*************************************************************************/
@@ -584,9 +590,9 @@ setPageIncrement(int pageIncrement)
this.pageIncrement = pageIncrement;
- ScrollbarPeer sp = (ScrollbarPeer) getPeer ();
- if (sp != null)
- sp.setPageIncrement (this.pageIncrement);
+ ScrollbarPeer peer = (ScrollbarPeer) getPeer ();
+ if (peer != null)
+ peer.setPageIncrement (this.pageIncrement);
}
/*************************************************************************/
@@ -746,5 +752,20 @@ paramString()
{
this.valueIsAdjusting = valueIsAdjusting;
}
+
+ /**
+ * Generate a unique name for this scroll bar.
+ *
+ * @return A unique name for this scroll bar.
+ */
+ String generateName ()
+ {
+ return "scrollbar" + getUniqueLong ();
+ }
+
+ private static synchronized long getUniqueLong ()
+ {
+ return next_scrollbar_number++;
+ }
} // class Scrollbar
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
index be7e2d0a4e2..c916b3fe128 100644
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
+++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c
@@ -40,72 +40,14 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h"
-struct range_scrollbar
-{
- GtkRange *range;
- jobject *scrollbar;
-};
-
-static void
-post_change_event (GtkRange *range,
- struct range_scrollbar *rs)
-{
- GtkAdjustment *adj;
- adj = gtk_range_get_adjustment (range);
- (*gdk_env)->CallVoidMethod (gdk_env, *(rs->scrollbar), postAdjustmentEventID,
- AWT_ADJUSTMENT_TRACK, (jint) adj->value);
-
-}
-
-static void
-post_adjustment_event (GtkRange *range, GtkScrollType scroll,
- struct range_scrollbar *rs)
-{
- jint type;
- GtkAdjustment *adj;
-
- adj = gtk_range_get_adjustment (range);
-
- switch (scroll)
- {
- case GTK_SCROLL_STEP_UP:
- case GTK_SCROLL_STEP_RIGHT:
- case GTK_SCROLL_STEP_FORWARD:
- type = AWT_ADJUSTMENT_UNIT_INCREMENT;
- break;
- case GTK_SCROLL_STEP_DOWN:
- case GTK_SCROLL_STEP_LEFT:
- case GTK_SCROLL_STEP_BACKWARD:
- type = AWT_ADJUSTMENT_UNIT_DECREMENT;
- break;
- case GTK_SCROLL_PAGE_UP:
- case GTK_SCROLL_PAGE_RIGHT:
- case GTK_SCROLL_PAGE_FORWARD:
- type = AWT_ADJUSTMENT_BLOCK_INCREMENT;
- break;
- case GTK_SCROLL_PAGE_DOWN:
- case GTK_SCROLL_PAGE_LEFT:
- case GTK_SCROLL_PAGE_BACKWARD:
- type = AWT_ADJUSTMENT_BLOCK_DECREMENT;
- break;
- case GTK_SCROLL_JUMP:
- case GTK_SCROLL_NONE: /* Apparently generated when slider is dragged. */
- type = AWT_ADJUSTMENT_TRACK;
- break;
- default: /* Can this happen? If so, is this right? */
- return;
- }
-
- (*gdk_env)->CallVoidMethod (gdk_env, *(rs->scrollbar), postAdjustmentEventID,
- type, (jint) adj->value);
-}
+static void post_change_event (GtkRange *range, jobject peer);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
(JNIEnv *env, jobject obj, jint orientation, jint value,
jint min, jint max, jint step_incr, jint page_incr, jint visible_amount)
{
- GtkWidget *sb;
+ GtkWidget *scrollbar;
GtkObject *adj;
/* Create global reference and save it for future use */
@@ -113,16 +55,26 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
gdk_threads_enter ();
- adj = gtk_adjustment_new (value, min, max,
- step_incr, page_incr,
- visible_amount);
-
- sb = (orientation) ? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) :
+ adj = gtk_adjustment_new ((gdouble) value,
+ (gdouble) min,
+ (gdouble) max,
+ (gdouble) step_incr,
+ (gdouble) page_incr,
+ (gdouble) visible_amount);
+
+ scrollbar = (orientation) ? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) :
gtk_hscrollbar_new (GTK_ADJUSTMENT (adj));
+ GTK_RANGE (scrollbar)->round_digits = 0;
+ /* These calls seem redundant but they are not. They clamp values
+ so that the slider's entirety is always between the two
+ steppers. */
+ gtk_range_set_range (GTK_RANGE (scrollbar), (gdouble) min, (gdouble) max);
+ gtk_range_set_value (GTK_RANGE (scrollbar), (gdouble) value);
+
gdk_threads_leave ();
- NSA_SET_PTR (env, obj, sb);
+ NSA_SET_PTR (env, obj, scrollbar);
}
JNIEXPORT void JNICALL
@@ -137,7 +89,7 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectJObject
gtk_widget_realize (GTK_WIDGET (ptr));
- connect_awt_hook (env, obj, 1, GTK_SCROLLBAR (ptr)->range);
+ connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
gdk_threads_leave ();
}
@@ -146,27 +98,14 @@ JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
(JNIEnv *env, jobject obj)
{
- struct range_scrollbar *rs;
void *ptr = NSA_GET_PTR (env, obj);
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
g_assert (gref);
- rs = (struct range_scrollbar *) malloc (sizeof (struct range_scrollbar));
-
gdk_threads_enter ();
- gtk_widget_realize (GTK_WIDGET (ptr));
-
- rs->range = GTK_RANGE (ptr);
- rs->scrollbar = gref;
-
- g_signal_connect (G_OBJECT (GTK_RANGE (ptr)),
- "move-slider",
- GTK_SIGNAL_FUNC (post_adjustment_event), rs);
-
- g_signal_connect (G_OBJECT (GTK_RANGE (ptr)),
- "value-changed",
- GTK_SIGNAL_FUNC (post_change_event), rs);
+ g_signal_connect (G_OBJECT (ptr), "value-changed",
+ G_CALLBACK (post_change_event), *gref);
gdk_threads_leave ();
@@ -186,8 +125,8 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement
gdk_threads_enter ();
- adj = GTK_RANGE (ptr)->adjustment;
- adj->step_increment = amount;
+ adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
+ adj->step_increment = (gdouble) amount;
gtk_adjustment_changed (adj);
gdk_threads_leave ();
@@ -204,8 +143,8 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement
gdk_threads_enter ();
- adj = GTK_RANGE (ptr)->adjustment;
- adj->page_increment = amount;
+ adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
+ adj->page_increment = (gdouble) amount;
gtk_adjustment_changed (adj);
gdk_threads_leave ();
@@ -222,12 +161,22 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues
gdk_threads_enter ();
- adj = GTK_RANGE (ptr)->adjustment;
- adj->value = value;
- adj->page_size = visible;
- adj->lower = min;
- adj->upper = max;
+ adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
+ adj->page_size = (gdouble) visible;
+
+ gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max);
+ gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value);
+
gtk_adjustment_changed (adj);
gdk_threads_leave ();
}
+
+static void
+post_change_event (GtkRange *range, jobject peer)
+{
+ GtkAdjustment *adj;
+ adj = gtk_range_get_adjustment (range);
+ (*gdk_env)->CallVoidMethod (gdk_env, peer, postAdjustmentEventID,
+ AWT_ADJUSTMENT_TRACK, (jint) adj->value);
+}