annotate dwtx/novocode/SizeBorder.d @ 190:df4e66472aff

novocode line endings, indention
author Frank Benoit <benoit@tionex.de>
date Sun, 26 Oct 2008 15:04:41 +0100
parents e3780acbbf80
children c3583c6ec027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
190
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
1 /*******************************************************************************
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
2 * Copyright (c) 2005 Stefan Zeiger and others.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
3 * All rights reserved. This program and the accompanying materials
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
5 * which accompanies this distribution, and is available at
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
6 * http://www.novocode.com/legal/epl-v10.html
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
7 *
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
8 * Contributors:
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
9 * Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
10 *******************************************************************************/
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
11
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
12 module dwtx.novocode.SizeBorder;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
13
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
14 import dwt.dwthelper.utils;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
15 import dwt.dwthelper.Runnable;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
16 import dwtx.dwtxhelper.Timer;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
17 import dwtx.dwtxhelper.TimerTask;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
18
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
19 import dwt.DWT;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
20 import dwt.graphics.Color;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
21 import dwt.graphics.Cursor;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
22 import dwt.graphics.GC;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
23 import dwt.graphics.Point;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
24 import dwt.graphics.Rectangle;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
25 import dwt.widgets.Canvas;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
26 import dwt.widgets.Composite;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
27 import dwt.widgets.Display;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
28 import dwt.widgets.Event;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
29 import dwt.widgets.Listener;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
30 import dwt.widgets.Shell;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
31
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
32
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
33 /**
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
34 * A border for a resizable container. This border control usually fills the
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
35 * entire container, with a content pane above it (not covering the actual
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
36 * border area).
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
37 *
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
38 * <p>If the style SWT.BORDER ist set, a beveled border (as used on Windows
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
39 * Classic window decorations) will be drawn. Without this style, no drawing
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
40 * is done.</p>
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
41 *
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
42 * @author Stefan Zeiger (szeiger@novocode.com)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
43 * @since Jan 21, 2005
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
44 * @version $Id: SizeBorder.java 321 2005-02-26 15:44:24 +0000 (Sat, 26 Feb 2005) szeiger $
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
45 */
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
46
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
47 class SizeBorder : Canvas
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
48 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
49 private static const long UPDATE_DELAY = 25;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
50
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
51 private static const int AREA_NONE = 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
52 private static const int AREA_N = 1;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
53 private static const int AREA_S = 2;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
54 private static const int AREA_E = 4;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
55 private static const int AREA_W = 8;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
56 private static const int AREA_NW = 9;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
57 private static const int AREA_NE = 5;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
58 private static const int AREA_SE = 6;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
59 private static const int AREA_SW = 10;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
60
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
61 private Rectangle snapBack;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
62 private bool cancelled = true;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
63 private /**volatile*/ long lastUpdate;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
64 private Timer timer;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
65 private TimerTask timerTask;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
66 private Composite resizableParent;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
67 private Point minSize, mouseDownOffset;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
68 private int borderWidth = 4, cornerSize = 16;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
69 private Display display;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
70 private Cursor cursor, cursorNWSE, cursorNESW, cursorWE, cursorNS;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
71 private int currentArea;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
72 private Color highlightShadowColor, lightShadowColor, normalShadowColor,darkShadowColor;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
73
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
74
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
75 this(Composite parent, int style)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
76 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
77 this(parent, parent.getShell(), style);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
78 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
79
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
80
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
81 this(Composite parent, Composite resizableParent, int style)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
82 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
83 super(parent, checkStyle (style));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
84 this.timer = new Timer(true);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
85 this.resizableParent = resizableParent;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
86 this.display = getDisplay();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
87
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
88 cursorNWSE = new Cursor(getDisplay(), DWT.CURSOR_SIZENWSE);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
89 cursorNESW = new Cursor(getDisplay(), DWT.CURSOR_SIZENESW);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
90 cursorWE = new Cursor(getDisplay(), DWT.CURSOR_SIZEWE);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
91 cursorNS = new Cursor(getDisplay(), DWT.CURSOR_SIZENS);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
92
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
93 addListener(DWT.Dispose, dgListener(&onDispose));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
94
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
95 if((style & DWT.BORDER) !is 0)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
96 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
97 highlightShadowColor = display.getSystemColor(DWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
98 lightShadowColor = display.getSystemColor(DWT.COLOR_WIDGET_LIGHT_SHADOW);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
99 normalShadowColor = display.getSystemColor(DWT.COLOR_WIDGET_NORMAL_SHADOW);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
100 darkShadowColor = display.getSystemColor(DWT.COLOR_WIDGET_DARK_SHADOW);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
101
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
102 addListener(DWT.Paint, dgListener(&onPaint));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
103 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
104
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
105 addListener(DWT.MouseDown, dgListener(&onMouseDown));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
106
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
107 addListener(DWT.MouseMove, dgListener(&onMouseMove));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
108
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
109 addListener(DWT.MouseUp, dgListener(&onMouseUp));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
110
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
111 addListener(DWT.Show, dgListener(&onShow));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
112 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
113
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
114 private void onDispose(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
115 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
116 cursorNWSE.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
117 cursorNESW.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
118 cursorWE.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
119 cursorNS.dispose();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
120
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
121 timer.cancel();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
122 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
123
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
124
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
125 private void onPaint(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
126 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
127 Rectangle r = getClientArea();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
128 if(r.width is 0 || r.height is 0) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
129 drawBevelRect(event.gc, r.x, r.y, r.width-1, r.height-1, lightShadowColor, darkShadowColor);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
130 drawBevelRect(event.gc, r.x+1, r.y+1, r.width-3, r.height-3, highlightShadowColor, normalShadowColor);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
131 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
132
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
133
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
134 private void onMouseDown(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
135 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
136 if(event.button is 1)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
137 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
138 currentArea = areaAtPoint(event.x, event.y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
139 if(currentArea is AREA_NONE) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
140 if(cast(Shell)resizableParent !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
141 mouseDownOffset = toDisplay(event.x, event.y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
142 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
143 mouseDownOffset = display.map(/**SizeBorder.this*/getSizeBorder(), resizableParent.getParent(), event.x, event.y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
144 snapBack = resizableParent.getBounds();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
145 cancelled = false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
146 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
147 else if(event.button is 3 && (event.stateMask & DWT.BUTTON1) !is 0) // chord click
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
148 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
149 if(snapBack !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
150 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
151 resizableParent.setBounds(snapBack);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
152 snapBack = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
153 cancelled = true;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
154 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
155 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
156 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
157
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
158
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
159 private void onMouseMove(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
160 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
161 if((event.stateMask & DWT.BUTTON1) is 0) updateCursor(areaAtPoint(event.x, event.y));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
162
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
163 if(!cancelled && (event.stateMask & DWT.BUTTON1) !is 0)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
164 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
165 if(timerTask !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
166 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
167 timerTask.cancel();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
168 timerTask = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
169 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
170 long now = System.currentTimeMillis();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
171 if(lastUpdate + UPDATE_DELAY < now)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
172 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
173 performResize(event);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
174 lastUpdate = now;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
175 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
176 else
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
177 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
178 timerTask = new class() TimerTask
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
179 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
180 public void run()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
181 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
182 TimerTask executingTask = this;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
183 event.display.asyncExec(new class() Runnable
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
184 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
185 public void run()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
186 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
187 if(executingTask !is timerTask) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
188 performResize(event);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
189 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
190 });
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
191 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
192 };
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
193 timer.schedule(timerTask, UPDATE_DELAY);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
194 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
195 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
196 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
197
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
198
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
199 private void onMouseUp(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
200 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
201 if(timerTask !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
202 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
203 timerTask.cancel();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
204 timerTask = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
205 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
206 if(!cancelled && (event.stateMask & DWT.BUTTON1) !is 0)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
207 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
208 performResize(event);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
209 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
210 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
211
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
212
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
213 private void onShow(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
214 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
215 Point p = toControl(display.getCursorLocation());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
216 updateCursor(areaAtPoint(p.x, p.y));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
217 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
218
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
219
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
220 private SizeBorder getSizeBorder()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
221 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
222 return this;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
223 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
224
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
225 private static int checkStyle(int style)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
226 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
227 //int mask = DWT.NONE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
228 //style &= mask;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
229 style = DWT.NO_FOCUS;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
230 return style;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
231 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
232
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
233
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
234 private void performResize(Event event)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
235 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
236 // Make sure we stay within the container parent's client area
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
237 Rectangle ca;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
238 if(cast(Shell)resizableParent !is null) ca = getDisplay().getClientArea();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
239 else ca = getDisplay().map(resizableParent.getParent(), null, resizableParent.getParent().getClientArea());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
240 Point caOffset = toControl(ca.x, ca.y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
241 event.x = Math.max(Math.min(event.x, caOffset.x + ca.width - 1), caOffset.x);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
242 event.y = Math.max(Math.min(event.y, caOffset.y + ca.height - 1), caOffset.y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
243
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
244 // Compute movement relative to position at MouseDown event
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
245 Point movement = (cast(Shell)resizableParent !is null)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
246 ? toDisplay(event.x, event.y)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
247 : display.map(this, resizableParent.getParent(), event.x, event.y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
248 movement.x -= mouseDownOffset.x;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
249 movement.y -= mouseDownOffset.y;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
250
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
251 // Compute new size and position
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
252 int newW = snapBack.width, newH = snapBack.height, newX = snapBack.x, newY = snapBack.y;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
253 if((currentArea & AREA_E) !is 0) newW += movement.x;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
254 else if((currentArea & AREA_W) !is 0) { newW -= movement.x; newX += snapBack.width - newW; }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
255 if((currentArea & AREA_S) !is 0) newH += movement.y;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
256 else if((currentArea & AREA_N) !is 0) { newH -= movement.y; newY += snapBack.height - newH; }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
257
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
258 // Do not go below the container's minimum size
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
259 int minW, minH;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
260 if(minSize !is null) { minW = minSize.x; minH = minSize.y; }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
261 else { minW = 0; minH = 0; }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
262 int maxX = snapBack.x + snapBack.width - minW;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
263 int maxY = snapBack.y + snapBack.height - minH;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
264
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
265 newW = Math.max(minW, newW);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
266 newH = Math.max(minH, newH);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
267 newX = Math.min(maxX, newX);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
268 newY = Math.min(maxY, newY);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
269
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
270 resizableParent.setBounds(newX, newY, newW, newH);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
271 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
272
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
273
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
274 private void updateCursor(int area)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
275 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
276 Cursor c = null;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
277 switch(area)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
278 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
279 case AREA_N: case AREA_S: c = cursorNS; break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
280 case AREA_W: case AREA_E: c = cursorWE; break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
281 case AREA_NW: case AREA_SE: c = cursorNWSE; break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
282 case AREA_NE: case AREA_SW: c = cursorNESW; break;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
283 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
284 if(cursor is c) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
285 cursor = c;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
286 setCursor(c);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
287 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
288
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
289
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
290 private int areaAtPoint(int x, int y)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
291 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
292 Point size = getSize();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
293 if(x < borderWidth) // left edge
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
294 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
295 if(y < cornerSize) return AREA_NW;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
296 else if(y >= size.y-cornerSize) return AREA_SW;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
297 else return AREA_W;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
298 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
299 else if(x >= size.x-borderWidth) // right edge
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
300 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
301 if(y >= size.y-cornerSize) return AREA_SE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
302 else if(y < cornerSize) return AREA_NE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
303 else return AREA_E;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
304 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
305 else if(y < borderWidth) // top edge
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
306 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
307 if(x < cornerSize) return AREA_NW;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
308 else if(x >= size.x-cornerSize) return AREA_NE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
309 else return AREA_N;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
310 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
311 else if(y >= size.y-borderWidth) // bottom edge
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
312 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
313 if(x >= size.x-cornerSize) return AREA_SE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
314 else if(x < cornerSize) return AREA_SW;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
315 else return AREA_S;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
316 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
317 else return AREA_NONE;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
318 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
319
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
320
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
321 public Point computeSize(int wHint, int hHint, bool changed)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
322 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
323 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
324 if(wHint == DWT.DEFAULT) wHint = 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
325 if(hHint == DWT.DEFAULT) hHint = 0;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
326 return new Point(wHint, hHint);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
327 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
328
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
329
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
330 public bool setFocus()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
331 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
332 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
333 return false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
334 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
335
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
336
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
337 public bool isReparentable ()
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
338 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
339 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
340 return false;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
341 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
342
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
343
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
344 /**
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
345 * Set the allowed minimum size for the shell. The SizeGrip will
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
346 * not resize the shell to a smaller size.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
347 * <p>
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
348 * Note: This does <em>not</em> affect other ways of resizing the shell,
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
349 * like using the size controls which are placed on the trimmings by
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
350 * the window manager.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
351 * </p>
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
352 */
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
353
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
354 public void setMinimumShellSize(Point p)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
355 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
356 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
357 this.minSize = p;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
358 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
359
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
360
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
361 /**
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
362 * Set the allowed minimum size for the shell. The SizeGrip will
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
363 * not resize the shell to a smaller size.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
364 * <p>
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
365 * Note: This does <em>not</em> affect other ways of resizing the shell,
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
366 * like using the size controls which are placed on the trimmings by
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
367 * the window manager.
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
368 * </p>
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
369 */
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
370
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
371 public void setMinimumShellSize(int width, int height)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
372 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
373 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
374 this.minSize = new Point(width, height);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
375 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
376
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
377
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
378 public void setBorderWidth(int width)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
379 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
380 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
381 borderWidth = width;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
382 Point p = toControl(display.getCursorLocation());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
383 updateCursor(areaAtPoint(p.x, p.y));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
384 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
385
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
386
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
387 public void setCornerSize(int size)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
388 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
389 checkWidget();
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
390 cornerSize = size;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
391 Point p = toControl(display.getCursorLocation());
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
392 updateCursor(areaAtPoint(p.x, p.y));
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
393 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
394
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
395
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
396 private static void drawBevelRect(GC gc, int x, int y, int w, int h, Color topleft, Color bottomright)
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
397 {
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
398 gc.setForeground(bottomright);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
399 gc.drawLine(x + w, y, x + w, y + h);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
400 gc.drawLine(x, y + h, x + w, y + h);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
401
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
402 gc.setForeground(topleft);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
403 gc.drawLine(x, y, x + w - 1, y);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
404 gc.drawLine(x, y, x, y + h - 1);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
405 }
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
406 }