Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti2002-04-02 22:08:14 +0000
committerSilenio Quarti2002-04-02 22:08:14 +0000
commit04de3fc7ae68f9215fb3d4fcc47ca5754e572bac (patch)
treeead6cddb86c106b6a2d4024549e5386d9980f89e
parentabcda6211c0bcc3a908332242b9d1409108c82ba (diff)
downloadeclipse.platform.swt-04de3fc7ae68f9215fb3d4fcc47ca5754e572bac.tar.gz
eclipse.platform.swt-04de3fc7ae68f9215fb3d4fcc47ca5754e572bac.tar.xz
eclipse.platform.swt-04de3fc7ae68f9215fb3d4fcc47ca5754e572bac.zip
*** empty log message ***
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java295
1 files changed, 137 insertions, 158 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java
index 4eb5c23fae..a40f5a1091 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Sash.java
@@ -28,8 +28,7 @@ import org.eclipse.swt.events.*;
*/
public class Sash extends Control {
boolean dragging;
- int originX, originY;
- int lastX, lastY; /* relative to the receiver, not the parent */
+ int startX, startY, lastX, lastY;
int cursor;
/**
@@ -64,34 +63,6 @@ public Sash (Composite parent, int style) {
super (parent, checkStyle (style));
}
-void createHandle (int index) {
- state |= HANDLE;
- handle = OS.gtk_drawing_area_new();
- if (handle == 0) error (SWT.ERROR_NO_HANDLES);
- int parentHandle = parent.parentingHandle ();
- OS.gtk_container_add (parentHandle, handle);
- OS.gtk_widget_show (handle);
- int type = (style & SWT.VERTICAL) != 0 ? OS.GDK_SB_H_DOUBLE_ARROW:OS.GDK_SB_V_DOUBLE_ARROW;
- cursor = OS.gdk_cursor_new (type);
- OS.gtk_widget_realize (handle);
- int window = OS.GTK_WIDGET_WINDOW (handle);
- OS.gdk_window_set_cursor (window, cursor);
-}
-
-public Point computeSize (int wHint, int hHint, boolean changed) {
- checkWidget ();
- int border = getBorderWidth ();
- int width = border * 2, height = border * 2;
- if ((style & SWT.HORIZONTAL) != 0) {
- width += DEFAULT_WIDTH; height += 3;
- } else {
- width += 3; height += DEFAULT_HEIGHT;
- }
- if (wHint != SWT.DEFAULT) width = wHint + (border * 2);
- if (hHint != SWT.DEFAULT) height = hHint + (border * 2);
- return new Point (width, height);
-}
-
/**
* Adds the listener to the collection of listeners who will
* be notified when the control is selected, by sending
@@ -125,48 +96,76 @@ public void addSelectionListener (SelectionListener listener) {
addListener (SWT.MouseDoubleClick,typedListener);
}
-/**
- * Removes the listener from the collection of listeners who will
- * be notified when the control is selected.
- *
- * @param listener the listener which should be notified
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
- * </ul>
- * @exception SWTException <ul>
- * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
- * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
- * </ul>
- *
- * @see SelectionListener
- * @see #addSelectionListener
- */
-public void removeSelectionListener(SelectionListener listener) {
- checkWidget();
- if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
- if (eventTable == null) return;
- eventTable.unhook (SWT.Selection, listener);
- eventTable.unhook (SWT.MouseDoubleClick,listener);
+static int checkStyle (int style) {
+ return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
+}
+
+public Point computeSize (int wHint, int hHint, boolean changed) {
+ checkWidget ();
+ int border = getBorderWidth ();
+ int width = border * 2, height = border * 2;
+ if ((style & SWT.HORIZONTAL) != 0) {
+ width += DEFAULT_WIDTH; height += 3;
+ } else {
+ width += 3; height += DEFAULT_HEIGHT;
+ }
+ if (wHint != SWT.DEFAULT) width = wHint + (border * 2);
+ if (hHint != SWT.DEFAULT) height = hHint + (border * 2);
+ return new Point (width, height);
+}
+
+void createHandle (int index) {
+ state |= HANDLE;
+ handle = OS.gtk_drawing_area_new ();
+ if (handle == 0) error (SWT.ERROR_NO_HANDLES);
+ int parentHandle = parent.parentingHandle ();
+ OS.gtk_container_add (parentHandle, handle);
+ OS.gtk_widget_show (handle);
+ int type = (style & SWT.VERTICAL) != 0 ? OS.GDK_SB_H_DOUBLE_ARROW : OS.GDK_SB_V_DOUBLE_ARROW;
+ cursor = OS.gdk_cursor_new (type);
+ OS.gtk_widget_realize (handle);
+ int window = OS.GTK_WIDGET_WINDOW (handle);
+ OS.gdk_window_set_cursor (window, cursor);
+}
+
+void drawBand (int x, int y, int width, int height) {
+ int window = OS.GTK_WIDGET_WINDOW (parent.paintHandle());
+ if (window == 0) return;
+ byte [] bits = {-86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0};
+ int stipplePixmap = OS.gdk_bitmap_create_from_data (window, bits, 8, 8);
+ int gc = OS.gdk_gc_new (window);
+ int colormap = OS.gdk_colormap_get_system();
+ GdkColor color = new GdkColor ();
+ OS.gdk_color_white (colormap, color);
+ OS.gdk_gc_set_foreground (gc, color);
+ OS.gdk_gc_set_stipple (gc, stipplePixmap);
+ OS.gdk_gc_set_subwindow (gc, OS.GDK_INCLUDE_INFERIORS);
+ OS.gdk_gc_set_fill (gc, OS.GDK_STIPPLED);
+ OS.gdk_gc_set_function (gc, OS.GDK_XOR);
+ OS.gdk_draw_rectangle (window, gc, 1, x, y, width, height);
+ OS.g_object_unref (stipplePixmap);
+ OS.g_object_unref (gc);
}
-int processMouseDown (int callData, int arg1, int int2) {
- super.processMouseDown (callData,arg1,int2);
- if (OS.gdk_event_button_get_button(callData) != 1) return 0;
-
- originX = OS.GTK_WIDGET_X(handle);
- originY = OS.GTK_WIDGET_Y(handle);
- lastX = 0;
- lastY = 0;
-
+int processMouseDown (int callData, int int1, int int2) {
+ super.processMouseDown (callData, int1, int2);
+ int button = OS.gdk_event_button_get_button (callData);
+ if (button != 1) return 0;
+ double[] px = new double [1], py = new double [1];
+ OS.gdk_event_get_coords (callData, px, py);
+ startX = (int)px [0]; startY = (int) py [0];
+ int border = 0;
+ int x = OS.GTK_WIDGET_X (handle);
+ int y = OS.GTK_WIDGET_Y (handle);
+ int width = OS.GTK_WIDGET_WIDTH (handle);
+ int height = OS.GTK_WIDGET_HEIGHT (handle);
+ lastX = x - border; lastY = y - border;
/* The event must be sent because its doit flag is used. */
Event event = new Event ();
event.detail = SWT.DRAG;
- event.time = OS.gdk_event_get_time(callData);
- event.x = originX;
- event.y = originY;
- event.width = OS.GTK_WIDGET_WIDTH (handle);
- event.height = OS.GTK_WIDGET_HEIGHT (handle);
+ event.time = OS.gdk_event_get_time (callData);
+ event.x = lastX; event.y = lastY;
+ event.width = width; event.height = height;
/*
* It is possible (but unlikely) that client code could have disposed
* the widget in the selection event. If this happens end the processing
@@ -176,123 +175,103 @@ int processMouseDown (int callData, int arg1, int int2) {
if (isDisposed ()) return 0;
if (event.doit) {
dragging = true;
- drawBand (originX, originY, event.width, event.height);
+// OS.XmUpdateDisplay (handle);
+ drawBand (lastX = event.x, lastY = event.y, width, height);
}
- return 0;
+ return 0;
}
-int processMouseMove (int callData, int arg1, int int2) {
- super.processMouseMove (callData, arg1, int2);
- if (!dragging) return 0;
-
- /* Get the coordinates where the event happened, relative to the receiver */
- double[] px = new double[1];
- double[] py = new double[1];
- OS.gdk_event_get_coords(callData, px, py);
- int x = (int)(px[0]);
- int y = (int)(py[0]);
-
- int width = OS.GTK_WIDGET_WIDTH(handle);
- int height = OS.GTK_WIDGET_HEIGHT(handle);
-
+int processMouseMove (int callData, int int1, int int2) {
+ super.processMouseMove (callData, int1, int2);
+ int [] state = new int [1];
+ OS.gdk_event_get_state (callData, state);
+ if (!dragging || (state [0] & OS.GDK_BUTTON1_MASK) == 0) return 0;
+ int x = OS.GTK_WIDGET_X (handle);
+ int y = OS.GTK_WIDGET_Y (handle);
+ int width = OS.GTK_WIDGET_WIDTH (handle);
+ int height = OS.GTK_WIDGET_HEIGHT (handle);
+ int border = 0, parentBorder = 0;
+ int parentWidth = OS.GTK_WIDGET_WIDTH (parent.handle);
+ int parentHeight = OS.GTK_WIDGET_WIDTH (parent.handle);
+ double[] px = new double [1], py = new double [1];
+ OS.gdk_event_get_coords (callData, px, py);
+ int newX = lastX, newY = lastY;
if ((style & SWT.VERTICAL) != 0) {
- /* Erase the old one */
- int oldDrawX = originX + lastX;
- drawBand(oldDrawX, originY, width, height);
- /* Draw the new */
- int drawX = originX + x;
- drawBand(drawX, originY, width, height);
- lastX = x;
+ newX = Math.min (Math.max (0, (int)px [0] + x - startX - parentBorder), parentWidth - width);
} else {
- /* Erase the old one */
- int oldDrawY = originY + lastY;
- drawBand(originX, oldDrawY, width, height);
- /* Draw the new */
- int drawY = originY + y;
- drawBand(originX, drawY, width, height);
- lastY = y;
+ newY = Math.min (Math.max (0, (int)py[0] + y - startY - parentBorder), parentHeight - height);
+ }
+ if (newX == lastX && newY == lastY) return 0;
+ drawBand (lastX, lastY, width, height);
+ /* The event must be sent because its doit flag is used. */
+ Event event = new Event ();
+ event.detail = SWT.DRAG;
+ event.time = OS.gdk_event_get_time (callData);
+ event.x = newX; event.y = newY;
+ event.width = width; event.height = height;
+ /*
+ * It is possible (but unlikely) that client code could have disposed
+ * the widget in the selection event. If this happens end the processing
+ * of this message by returning.
+ */
+ sendEvent (SWT.Selection, event);
+ if (isDisposed ()) return 0;
+ if (event.doit) {
+ lastX = event.x; lastY = event.y;
+// OS.XmUpdateDisplay (handle);
+ drawBand (lastX, lastY, width, height);
}
return 0;
}
-int processMouseUp (int callData, int arg1, int int2) {
- super.processMouseUp(callData, arg1,int2);
+int processMouseUp (int callData, int int1, int int2) {
+ super.processMouseUp (callData, int1, int2);
int button = OS.gdk_event_button_get_button(callData);
if (button != 1) return 0;
if (!dragging) return 0;
- int width = OS.GTK_WIDGET_WIDTH(handle);
- int height = OS.GTK_WIDGET_HEIGHT(handle);
- int x = lastX + originX;
- int y = lastY + originY;
- drawBand(x, y, width, height);
dragging = false;
-
- Event event = new Event ();
- event.time = OS.gdk_event_get_time(callData);
- event.x = x; event.y = y;
- event.width = width; event.height = height;
- sendEvent (SWT.Selection, event);
- return 0;
-}
-
-int processMouseEnter (int callData, int arg1, int int2) {
int width = OS.GTK_WIDGET_WIDTH (handle);
int height = OS.GTK_WIDGET_HEIGHT (handle);
- lastX = OS.GTK_WIDGET_X(handle); lastY = OS.GTK_WIDGET_Y(handle);
+ /* The event must be sent because its doit flag is used. */
Event event = new Event ();
- event.time = OS.gdk_event_get_time(callData);
- event.detail = SWT.DRAG;
+ event.time = OS.gdk_event_get_time (callData);
event.x = lastX; event.y = lastY;
event.width = width; event.height = height;
- Cursor arrowCursor;
- if ((style & SWT.HORIZONTAL) != 0) {
- arrowCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_SIZENS);
- } else {
- arrowCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_SIZEWE);
- }
- setCursor(arrowCursor);
+ drawBand (lastX, lastY, width, height);
sendEvent (SWT.Selection, event);
+ /* widget could be disposed here */
return 0;
}
-int processMouseExit (int callData, int arg1, int int2) {
- int width = OS.GTK_WIDGET_WIDTH (handle);
- int height = OS.GTK_WIDGET_HEIGHT (handle);
- Event event = new Event ();
- event.time = OS.gdk_event_get_time(callData);
- event.x = lastX; event.y = lastY;
- event.width = width; event.height = height;
- sendEvent (SWT.MouseExit, event);
- return 0;
-
-}
-
-void drawBand (int x, int y, int width, int height) {
- Display display= parent.getDisplay ();
- if (display == null) return;
- int window = OS.GTK_WIDGET_WINDOW(parent.paintHandle());
- if (window == 0) return;
- byte [] bits = {-86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0, -86, 0, 85, 0};
- int stipplePixmap = OS.gdk_bitmap_create_from_data (window, bits, 8, 8);
- int gc = OS.gdk_gc_new(window);
- Color color = getDisplay().getSystemColor(SWT.COLOR_WHITE);
- OS.gdk_gc_set_foreground(gc, color.handle);
- OS.gdk_gc_set_stipple(gc, stipplePixmap);
- OS.gdk_gc_set_subwindow(gc, OS.GDK_INCLUDE_INFERIORS);
- OS.gdk_gc_set_fill(gc, OS.GDK_STIPPLED);
- OS.gdk_gc_set_function(gc, OS.GDK_XOR);
- OS.gdk_draw_rectangle(window, gc, 1, x, y, width, height);
- OS.g_object_unref(stipplePixmap);
- OS.g_object_unref(gc);
-}
-static int checkStyle (int style) {
- return checkBits (style, SWT.HORIZONTAL, SWT.VERTICAL, 0, 0, 0, 0);
-}
-
void releaseWidget () {
super.releaseWidget ();
if (cursor != 0) OS.gdk_cursor_destroy (cursor);
cursor = 0;
}
+/**
+ * Removes the listener from the collection of listeners who will
+ * be notified when the control is selected.
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #addSelectionListener
+ */
+public void removeSelectionListener(SelectionListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ if (eventTable == null) return;
+ eventTable.unhook (SWT.Selection, listener);
+ eventTable.unhook (SWT.MouseDoubleClick,listener);
+}
+
}

Back to the top