annotate dwt/internal/c/callback.d @ 17:5b53d338c709

Fixed some errors after latest merge
author Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
date Fri, 29 Aug 2008 22:04:22 +0200
parents 2952d5604c0a 30a762abda2a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
1 /*******************************************************************************
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
7 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
8 * Contributors:
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
10 *
13
f565d3a95c0a Ported dwt.internal
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 11
diff changeset
11 * Port to the D programming language:
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
12 * Jacob Carlborg <jacob.carlborg@gmail.com>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
13 *******************************************************************************/
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
14 module dwt.internal.c.callback;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
15
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
16 /**
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
17 * Callback implementation.
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
18 */
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
19
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
20 import tango.stdc.string;
15
2952d5604c0a Ported some widgets, added some stuff to the runtime bindings
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 13
diff changeset
21 import tango.stdc.posix.sys.mman;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
22
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
23 import dwt.dwthelper.utils;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
24 import dwt.internal.Callback;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
25
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
26 /* Header */
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
27
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
28 const bool REDUCED_CALLBACKS = false;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
29 alias size_t SWT_PTR;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
30
10
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
31 version (Win32)
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
32 {
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
33 import tango.sys.win32.UserGdi;
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
34 import tango.sys.win32.Types;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
35
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
36 alias LRESULT RETURN_TYPE;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
37 }
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
38
10
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
39 else version (Win32_WCE)
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
40 {
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
41 import tango.sys.win32.UserGdi;
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
42 import tango.sys.win32.Types;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
43
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
44 alias LRESULT RETURN_TYPE;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
45 }
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
46
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
47 else
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
48 alias SWT_PTR RETURN_TYPE;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
49
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
50 version (X86)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
51 const bool USE_ASSEMBLER = true;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
52
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
53 else
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
54 const bool USE_ASSEMBLER = true;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
55
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
56 static if (REDUCED_CALLBACKS)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
57 const int MAX_CALLBACKS = 16;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
58
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
59 else static if (USE_ASSEMBLER)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
60 const int MAX_CALLBACKS = 256;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
61
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
62 else
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
63 const int MAX_CALLBACKS = 128;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
64
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
65 const int MAX_ARGS = 12;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
66
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
67 struct CALLBACK_DATA
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
68 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
69 Callback callback;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
70 jmethodID methodID;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
71 Object object;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
72 bool isStatic;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
73 bool isArrayBased;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
74 int argCount;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
75 SWT_PTR errorResult;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
76 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
77
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
78 /* Implementation */
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
79
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
80
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
81 /* --------------- callback globals ----------------- */
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
82
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
83 private
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
84 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
85 CALLBACK_DATA callbackData[MAX_CALLBACKS];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
86 int callbackEnabled = 1;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
87 int callbackEntryCount = 0;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
88 bool initialized = 0;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
89
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
90 debug
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
91 int counter = 0;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
92 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
93
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
94 static if (USE_ASSEMBLER)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
95 {
10
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
96 version (Win32){}
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
97 else version (Win32_WCE){}
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
98 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
99 import tango.stdc.posix.sys.mman;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
100
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
101 private ubyte* callbackCode = null;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
102 const int CALLBACK_THUNK_SIZE = 64;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
103 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
104
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
105 SWT_PTR bind (Callback callbackObject, Object object, String method, String signature, int argCount, bool isStatic, bool isArrayBased, SWT_PTR errorResult)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
106 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
107 int i;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
108 jmethodID mid = null;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
109 jclass javaClass = that;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
110 string methodString = null;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
111 string sigString = null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
112
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
113 if (!initialized)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
114 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
115 memset(&callbackData, 0, callbackData.sizeof);
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
116 initialized = true;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
117 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
118
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
119 if (method)
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
120 methodString = method;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
121
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
122 if (signature)
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
123 sigString = signature;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
124
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
125 if (object && methodString && sigString)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
126 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
127 if (isStatic)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
128 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
129 mid = (*env).GetStaticMethodID(env, object, methodString, sigString);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
130 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
131 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
132 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
133 javaClass = (*env).GetObjectClass(env, object);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
134 mid = (*env).GetMethodID(env, javaClass, methodString, sigString);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
135 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
136 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
137
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
138 if (mid == 0)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
139 goto fail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
140
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
141 for (i = 0; i < MAX_CALLBACKS; i++)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
142 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
143 if (!callbackData[i].callback)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
144 {
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
145 if ((callbackData[i].callback = callbackObject) == null)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
146 goto fail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
147
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
148 if ((callbackData[i].object = object) == null)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
149 goto fail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
150
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
151 callbackData[i].isStatic = isStatic;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
152 callbackData[i].isArrayBased = isArrayBased;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
153 callbackData[i].argCount = argCount;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
154 callbackData[i].errorResult = errorResult;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
155 callbackData[i].methodID = mid;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
156
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
157 static if (!USE_ASSEMBLER)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
158 return cast(SWT_PTR) fnx_array[argCount][i];
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
159
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
160 else
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
161 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
162 int j = 0, k, pad = 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
163 ubyte* code;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
164
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
165 if (callbackCode == null)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
166 {
10
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
167 version (Win32)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
168 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
169 callbackCode = VirtualAlloc(null, CALLBACK_THUNK_SIZE * MAX_CALLBACKS, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
170 if (callbackCode == null)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
171 return 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
172 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
173
10
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
174 else version (Win32_WCE)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
175 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
176 callbackCode = VirtualAlloc(null, CALLBACK_THUNK_SIZE * MAX_CALLBACKS, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
177 if (callbackCode == null)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
178 return 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
179 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
180
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
181 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
182 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
183 callbackCode = mmap(null, CALLBACK_THUNK_SIZE * MAX_CALLBACKS, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
184 if (callbackCode == MAP_FAILED)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
185 return 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
186 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
187 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
188 code = cast(ubyte*) (callbackCode + (i * CALLBACK_THUNK_SIZE));
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
189
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
190 //PUSH EBP - 1 byte
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
191 code[j++] = 0x55;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
192
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
193 //MOV EBP,ESP - 2 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
194 code[j++] = 0x8b;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
195 code[j++] = 0xec;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
196
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
197 version (darwin)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
198 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
199 /* darwin calling conventions require that the stack be aligned on a 16-byte boundary. */
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
200 k = (argCount + 3) * SWT_PTR.sizeof;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
201 pad = ((k + 15) & ~15) - k;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
202 if (pad > 0)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
203 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
204 //SUB ESP,pad - 3 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
205 code[j++] = 0x83;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
206 code[j++] = 0xec;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
207 code[j++] = pad;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
208 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
209 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
210
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
211 // 3*argCount bytes
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
212 for (k = (argCount + 1) * SWT_PTR.sizeof; k >= SWT_PTR.sizeof * 2; k -= SWT_PTR.sizeof)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
213 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
214 //PUSH SS:[EBP+k]
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
215 code[j++] = 0xff;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
216 code[j++] = 0x75;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
217 code[j++] = k;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
218 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
219
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
220 if (i > 127)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
221 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
222 //PUSH i - 5 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
223 code[j++] = 0x68;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
224 code[j++] = ((i >> 0) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
225 code[j++] = ((i >> 8) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
226 code[j++] = ((i >> 16) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
227 code[j++] = ((i >> 24) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
228 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
229 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
230 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
231 //PUSH i - 2 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
232 code[j++] = 0x6a;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
233 code[j++] = i;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
234 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
235
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
236 //MOV EAX callback - 1 + SWT_PTR.sizeof bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
237 code[j++] = 0xb8;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
238 (cast(SWT_PTR*) &code[j])[0] = cast(SWT_PTR) &callback;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
239 j += SWT_PTR.sizeof;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
240
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
241 //CALL EAX - 2 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
242 code[j++] = 0xff;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
243 code[j++] = 0xd0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
244
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
245 //ADD ESP,(argCount + 1) * SWT_PTR.sizeof - 3 bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
246 code[j++] = 0x83;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
247 code[j++] = 0xc4;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
248
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
249 version (darwin)
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
250 code[j++] = cast(ubyte) (pad + ((argCount + 1) * SWT_PTR.sizeof));
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
251 else
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
252 code[j++] = cast(ubyte) ((argCount + 1) * SWT_PTR.sizeof);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
253
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
254 //POP EBP - 1 byte
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
255 code[j++] = 0x5d;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
256
10
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
257 version (Win32)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
258 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
259 // RETN argCount * SWT_PTR.sizeof - 3 bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
260 code[j++] = 0xc2;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
261 code[j++] = cast(ubyte) (argCount * SWT_PTR.sizeof);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
262 code[j++] = 0x00;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
263 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
264
10
30a762abda2a Revert automatic changes from dwt/internal and dwt/dwthelper. Excluded dwt/internal/image and theme.
Frank Benoit <benoit@tionex.de>
parents: 7
diff changeset
265 else version (Win32_WCE)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
266 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
267 // RETN argCount * SWT_PTR.sizeof - 3 bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
268 code[j++] = 0xc2;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
269 code[j++] = cast(ubyte) (argCount * SWT_PTR.sizeof);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
270 code[j++] = 0x00;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
271 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
272
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
273 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
274 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
275 // RETN - 1 byte
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
276 code[j++] = 0xc3;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
277 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
278
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
279 if (j > CALLBACK_THUNK_SIZE)
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
280 throw new Error("Callback thunk overflow");
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
281
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
282 return cast(SWT_PTR) code;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
283 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
284 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
285 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
286
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
287 fail:
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
288 return 0;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
289 }
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
290
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
291 void unbind (Callback callback)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
292 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
293 int i;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
294 for (i=0; i<MAX_CALLBACKS; i++) {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
295 if (callbackData[i].callback !is null && callbackData[i].callback == callback) {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
296 if (callbackData[i].callback !is null) delete callbackData[i].callback;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
297 if (callbackData[i].object !is null) delete allbackData[i].object;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
298 memset(&callbackData[i], 0, CALLBACK_DATA.sizeof);
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
299 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
300 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
301 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
302
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
303 bool getEnabled ()
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
304 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
305 return callbackEnabled;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
306 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
307
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
308 int getEntryCount ()
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
309 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
310 return callbackEntryCount;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
311 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
312
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
313 void setEnabled (bool enable)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
314 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
315 callbackEnabled = enable;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
316 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
317
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
318 void reset ()
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
319 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
320 memset(cast(void*) &callbackData, 0, callbackData.sizeof);
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
321 }