annotate dwtx/novocode/SizeGrip.d @ 191:1ef729510ed6

Fix compile error
author Frank Benoit <benoit@tionex.de>
date Tue, 28 Oct 2008 23:59:57 +0100
parents df4e66472aff
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
188
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2004 Stefan Zeiger and others.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.novocode.com/legal/epl-v10.html
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 /++
190
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
14 + This code was take from http://www.novocode.com/swt/
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
15 +/
188
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 module dwtx.novocode.SizeGrip;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.dwthelper.utils;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.dwthelper.Runnable;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwtx.dwtxhelper.Timer;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwtx.dwtxhelper.TimerTask;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.DWT;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.graphics.Color;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.graphics.Cursor;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.graphics.Point;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.graphics.Rectangle;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Canvas;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.Composite;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwt.widgets.Display;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.widgets.Event;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.widgets.Listener;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwt.widgets.Shell;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 /**
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 * A non-native size grip which looks (and almost feels) like the native Win32 size grip.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * <p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * The SHADOW_IN style causes highlight lines to be drawn at the right and bottom border.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * This style should be used when placing the size grip on top of the bottom right corner
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * of a FramedComposite with style SHADOW_IN. If the FLAT style is set, the size grip is
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * drawn in a Windows XP style instead of the normal Windows Classic style.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * </p><p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * <dl>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * <dt><b>Styles:</b></dt>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * <dd>SHADOW_IN, FLAT</dd>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * <dt><b>Events:</b></dt>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * <dd>(none)</dd>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * </dl>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * </p><p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 * NOTE: The visibility of this widget is controlled by the "maximized" state of the
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * shell. The size grip is hidden when the shell is maximized, even if it has been made
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * visible by calling <code>setVisible(true)</code>. getVisible() always returns
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * the value set with setVisible(). isVisible() returns the true visibility, as usual.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * </p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 *
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * <p>New in 1.6: Smoother resizing for a more native look &amp; feel. The window size is
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 * not updated more than once every 25ms to reduce the number of unnecessary repaints.</p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 *
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * <p>New in 1.8: You can specify a parent Composite other than the shell which will be
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 * resized by the SizeGrip.</p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 *
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 * @author Stefan Zeiger (szeiger@novocode.com)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 * @since Mar 8, 2004
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 * @version $Id: SizeGrip.java,v 1.9 2005/01/24 21:52:14 szeiger Exp $
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 */
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 public final class SizeGrip : Canvas
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 private static const int WIDTH = 13;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 private static const int HEIGHT = 13;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 private static const long UPDATE_DELAY = 25;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 private int mouseDownOffsetX, mouseDownOffsetY, snapBackX, snapBackY;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 private bool cancelled;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 private Cursor sizeCursor;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 private Point minSize;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 private bool userVisible = true;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 private /+volatile+/ long lastUpdate;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 private Timer timer;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 private TimerTask timerTask;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 private Composite resizableParent;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 public this(Composite parent, int style)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 this(parent, parent.getShell(), style);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 private void onDispose( Event e ){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 if(sizeCursor !is null) {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 sizeCursor.dispose();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 sizeCursor = null;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 private void onPaint( Event event ){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 Rectangle r = getClientArea();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 if(r.width is 0 || r.height is 0) return;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 Display disp = getDisplay();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 Color shadow = disp.getSystemColor(DWT.COLOR_WIDGET_NORMAL_SHADOW);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 Color highlight = disp.getSystemColor(DWT.COLOR_WIDGET_HIGHLIGHT_SHADOW);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 event.gc.setLineWidth(1);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 if((getStyle() & DWT.FLAT) !is 0) {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 event.gc.setBackground(highlight);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 event.gc.fillRectangle(r.width-3, r.height-3, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 event.gc.fillRectangle(r.width-7, r.height-3, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 event.gc.fillRectangle(r.width-11, r.height-3, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 event.gc.fillRectangle(r.width-3, r.height-7, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 event.gc.fillRectangle(r.width-7, r.height-7, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 event.gc.fillRectangle(r.width-3, r.height-11, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 event.gc.setBackground(shadow);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 event.gc.fillRectangle(r.width-4, r.height-4, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 event.gc.fillRectangle(r.width-8, r.height-4, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 event.gc.fillRectangle(r.width-12, r.height-4, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 event.gc.fillRectangle(r.width-4, r.height-8, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 event.gc.fillRectangle(r.width-8, r.height-8, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 event.gc.fillRectangle(r.width-4, r.height-12, 2, 2);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 event.gc.setForeground(highlight);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 else {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 event.gc.setForeground(shadow);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 event.gc.drawLine(r.width-3, r.height-2, r.width-2, r.height-3);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 event.gc.drawLine(r.width-4, r.height-2, r.width-2, r.height-4);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 event.gc.drawLine(r.width-7, r.height-2, r.width-2, r.height-7);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 event.gc.drawLine(r.width-8, r.height-2, r.width-2, r.height-8);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 event.gc.drawLine(r.width-11, r.height-2, r.width-2, r.height-11);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 event.gc.drawLine(r.width-12, r.height-2, r.width-2, r.height-12);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 event.gc.setForeground(highlight);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 event.gc.drawLine(r.width-5, r.height-2, r.width-2, r.height-5);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 event.gc.drawLine(r.width-9, r.height-2, r.width-2, r.height-9);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137 event.gc.drawLine(r.width-13, r.height-2, r.width-2, r.height-13);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 if((getStyle() & DWT.SHADOW_IN) !is 0) {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 if(event.width > WIDTH) event.gc.drawLine(0, r.height-1, r.width-14, r.height-1);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142 if(event.height > HEIGHT) event.gc.drawLine(r.width-1, 0, r.width-1, r.height-14);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 private void onMouseDown( Event event ){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 if(event.button is 1) {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 mouseDownOffsetX = event.x;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148 mouseDownOffsetY = event.y;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 Point p = resizableParent.getSize();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 snapBackX = p.x;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 snapBackY = p.y;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 cancelled = false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 //System.out.println("x="+mouseDownOffsetX+", y="+mouseDownOffsetY);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155 else if(event.button is 3 && (event.stateMask & DWT.BUTTON1) !is 0) // chord click
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 if(snapBackX > 0 && snapBackY > 0)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 resizableParent.setSize(snapBackX, snapBackY);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 snapBackX = 0;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 snapBackY = 0;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 cancelled = true;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 private void onMouseMove( Event event ){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 if(!cancelled && (event.stateMask & DWT.BUTTON1) !is 0)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 if(timerTask !is null)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 timerTask.cancel();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 timerTask = null;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 long now = System.currentTimeMillis();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 long lastUpdate_;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177 synchronized(this){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 lastUpdate_ = lastUpdate;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181 if(lastUpdate_ + UPDATE_DELAY < now)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 performResize(event);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 synchronized(this){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 lastUpdate = now;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190 else
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192 timerTask = new class() TimerTask
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 public void run()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 TimerTask executingTask = this;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197 event.display.asyncExec( dgRunnable( (Event event_, TimerTask executingTask_ )
190
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 if(executingTask_ !is timerTask) return;
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
200 performResize(event_);
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
201 }, event, executingTask ));
188
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 };
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204 timer.schedule(timerTask, UPDATE_DELAY);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 private void onMouseUp( Event event ){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 if(timerTask !is null)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 timerTask.cancel();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 timerTask = null;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 if(!cancelled && (event.stateMask & DWT.BUTTON1) !is 0)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 performResize(event);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 }
190
df4e66472aff novocode line endings, indention
Frank Benoit <benoit@tionex.de>
parents: 188
diff changeset
219
188
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 public this(Composite parent, Composite resizableParent_, int style)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222 super(parent, style = checkStyle (style));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 this.timer = new Timer(true);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 this.resizableParent = resizableParent_;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 setSize(WIDTH, HEIGHT);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 sizeCursor = new Cursor(getDisplay(), DWT.CURSOR_SIZENWSE);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 setCursor(sizeCursor);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 addListener(DWT.Dispose, dgListener( &onDispose ));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231 addListener(DWT.Paint, dgListener( &onPaint ));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 addListener(DWT.MouseDown, dgListener( &onMouseDown ));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 addListener(DWT.MouseMove, dgListener( &onMouseMove ));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 addListener(DWT.MouseUp, dgListener( &onMouseUp ));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 Listener resizeListener = ( null !is cast(Shell)resizableParent) ? dgListener( &onResize ) : null;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 if(resizeListener !is null) resizableParent.addListener(DWT.Resize, resizeListener);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240 addListener(DWT.Dispose, dgListener( &onDisposeResizeListener, resizeListener ));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 updateVisibility();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 private void onDisposeResizeListener(Event event, Listener resizeListener ) {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 timer.cancel();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 if(resizeListener !is null) resizableParent.removeListener(DWT.Resize, resizeListener);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 private void onResize( Event event ){
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250 updateVisibility();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 private void performResize(Event event)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 // Make sure we stay within the container parent's client area
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 Rectangle ca;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 if(cast(Shell)resizableParent ) ca = getDisplay().getClientArea();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 else ca = getDisplay().map(resizableParent.getParent(), null, resizableParent.getParent().getClientArea());
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 Point limit = toControl(ca.x + ca.width - 1, ca.y + ca.height - 1);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 event.x = Math.min(event.x, limit.x);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 event.y = Math.min(event.y, limit.y);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 Point p = resizableParent.getSize();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264 int newX = p.x + event.x - mouseDownOffsetX;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 int newY = p.y + event.y - mouseDownOffsetY;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 if(minSize !is null)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 newX = Math.max(minSize.x, newX);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 newY = Math.max(minSize.y, newY);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 if(newX !is p.x || newY !is p.y) resizableParent.setSize(newX, newY);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 private void updateVisibility()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 if( auto shell = cast(Shell)resizableParent )
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 bool vis = super.getVisible();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 bool max = shell.getMaximized();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 bool newVis = userVisible && !max;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282 if(vis !is newVis) super.setVisible(newVis);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 else if(userVisible !is super.getVisible()) super.setVisible(userVisible);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 public Point computeSize(int wHint, int hHint, bool changed)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 if(wHint is DWT.DEFAULT) wHint = WIDTH;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 if(hHint is DWT.DEFAULT) hHint = HEIGHT;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 return new Point(wHint, hHint);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 private static int checkStyle(int style)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 int mask = DWT.SHADOW_IN | DWT.FLAT;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 style &= mask;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 return style;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 public bool setFocus()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 return false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312 public bool isReparentable ()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 return false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 /**
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 * Set the allowed minimum size for the shell. The SizeGrip will
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 * not resize the shell to a smaller size.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322 * <p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 * Note: This does <em>not</em> affect other ways of resizing the shell,
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 * like using the size controls which are placed on the trimmings by
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 * the window manager.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 * </p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 */
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 public void setMinimumShellSize(Point p)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 this.minSize = p;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 /**
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 * Set the allowed minimum size for the shell. The SizeGrip will
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 * not resize the shell to a smaller size.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 * <p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 * Note: This does <em>not</em> affect other ways of resizing the shell,
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 * like using the size controls which are placed on the trimmings by
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 * the window manager.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 * </p>
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 */
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 public void setMinimumShellSize(int width, int height)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 this.minSize = new Point(width, height);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 public bool getVisible()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 return userVisible;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 public void setVisible(bool visible)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363 userVisible = visible;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 updateVisibility();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 }