File: CastleUIControls.TInputListener.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (458 lines) | stat: -rw-r--r-- 28,874 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleUIControls: Class TInputListener</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<a name="TInputListener"></a><h1 class="cio">Class TInputListener</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Hierarchy">Hierarchy</a></td><td>Fields</td><td><a class="section" href="#PasDoc-Methods">Methods</a></td><td><a class="section" href="#PasDoc-Properties">Properties</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a  href="CastleUIControls.html">CastleUIControls</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TInputListener = class(TComponent)</code></p>
<h2 class="description">Description</h2>
<p>
Base class for things that listen to user input: cameras and 2D controls.</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TComponent</li>
<li class="thisitem">TInputListener</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Methods"></a><h3 class="summary">Methods</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#ContainerWidth">ContainerWidth</a></b>: Cardinal;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#ContainerHeight">ContainerHeight</a></b>: Cardinal;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#ContainerRect">ContainerRect</a></b>: <a  href="CastleRectangles.TRectangle.html">TRectangle</a>;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#ContainerSizeKnown">ContainerSizeKnown</a></b>: boolean;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleUIControls.TInputListener.html#SetContainer">SetContainer</a></b>(const Value: <a  href="CastleUIControls.TUIContainer.html">TUIContainer</a>); virtual;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleUIControls.TInputListener.html#DoCursorChange">DoCursorChange</a></b>; virtual;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>constructor <b><a  href="CastleUIControls.TInputListener.html#Create">Create</a></b>(AOwner: TComponent); override;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#Press">Press</a></b>(const Event: <a  href="CastleKeysMouse.TInputPressRelease.html">TInputPressRelease</a>): boolean; virtual;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#Release">Release</a></b>(const Event: <a  href="CastleKeysMouse.TInputPressRelease.html">TInputPressRelease</a>): boolean; virtual;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#Motion">Motion</a></b>(const Event: <a  href="CastleKeysMouse.TInputMotion.html">TInputMotion</a>): boolean; virtual;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#SensorRotation">SensorRotation</a></b>(const X, Y, Z, Angle: Double; const SecondsPassed: Single): boolean; virtual;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#SensorTranslation">SensorTranslation</a></b>(const X, Y, Z, Length: Double; const SecondsPassed: Single): boolean; virtual;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleUIControls.TInputListener.html#Update">Update</a></b>(const SecondsPassed: Single; var HandleInput: boolean); virtual;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleUIControls.TInputListener.html#VisibleChange">VisibleChange</a></b>; virtual;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="CastleUIControls.TInputListener.html#AllowSuspendForInput">AllowSuspendForInput</a></b>: boolean; virtual;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleUIControls.TInputListener.html#ContainerResize">ContainerResize</a></b>(const AContainerWidth, AContainerHeight: Cardinal); virtual;</code></td>
</tr>
</table>
<a name="PasDoc-Properties"></a><h3 class="summary">Properties</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleUIControls.TInputListener.html#OnVisibleChange">OnVisibleChange</a></b>: TNotifyEvent
      read FOnVisibleChange write FOnVisibleChange;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleUIControls.TInputListener.html#Container">Container</a></b>: <a  href="CastleUIControls.TUIContainer.html">TUIContainer</a> read FContainer write <a  href="CastleUIControls.TInputListener.html#SetContainer">SetContainer</a>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleUIControls.TInputListener.html#Cursor">Cursor</a></b>: <a  href="CastleKeysMouse.html#TMouseCursor">TMouseCursor</a> read FCursor write SetCursor default mcDefault;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleUIControls.TInputListener.html#OnCursorChange">OnCursorChange</a></b>: TNotifyEvent
      read FOnCursorChange write FOnCursorChange;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="CastleUIControls.TInputListener.html#ExclusiveEvents">ExclusiveEvents</a></b>: boolean
      read FExclusiveEvents write FExclusiveEvents default true;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Methods</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="ContainerWidth"></a><code>function <b>ContainerWidth</b>: Cardinal;</code></td>
</tr>
<tr><td colspan="2">
<p>
Container sizes. </p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="ContainerHeight"></a><code>function <b>ContainerHeight</b>: Cardinal;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="ContainerRect"></a><code>function <b>ContainerRect</b>: <a  href="CastleRectangles.TRectangle.html">TRectangle</a>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="ContainerSizeKnown"></a><code>function <b>ContainerSizeKnown</b>: boolean;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="SetContainer"></a><code>procedure <b>SetContainer</b>(const Value: <a  href="CastleUIControls.TUIContainer.html">TUIContainer</a>); virtual;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="DoCursorChange"></a><code>procedure <b>DoCursorChange</b>; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Called when <a class="normal" href="CastleUIControls.TInputListener.html#Cursor">Cursor</a> changed. In <a class="normal" href="CastleUIControls.TUIControl.html">TUIControl</a> class, just calls <a class="normal" href="CastleUIControls.TInputListener.html#OnCursorChange">OnCursorChange</a>.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Create"></a><code>constructor <b>Create</b>(AOwner: TComponent); override;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Press"></a><code>function <b>Press</b>(const Event: <a  href="CastleKeysMouse.TInputPressRelease.html">TInputPressRelease</a>): boolean; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Handle press or release of a key, mouse button or mouse wheel. Return <code>True</code> if the event was somehow handled.

<p>In this class this always returns <code>False</code>, when implementing in descendants you should override it like

<p></p>

<pre class="longcode">
  Result := <span class="pascal_keyword">inherited</span>;
  <span class="pascal_keyword">if</span> Result <span class="pascal_keyword">then</span> Exit;
  <span class="pascal_comment">{ ... And do the job here.
    In other words, the handling of events in inherited
    class should have a priority. }</span>
</pre>

<p>

<p>Note that releasing of mouse wheel is not implemented for now, neither by <a class="normal" href="CastleWindow.html">CastleWindow</a> or Lazarus <a class="normal" href="CastleControl.html">CastleControl</a>. </p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Release"></a><code>function <b>Release</b>(const Event: <a  href="CastleKeysMouse.TInputPressRelease.html">TInputPressRelease</a>): boolean; virtual;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Motion"></a><code>function <b>Motion</b>(const Event: <a  href="CastleKeysMouse.TInputMotion.html">TInputMotion</a>): boolean; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
<code>Motion</code> of mouse or touch.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="SensorRotation"></a><code>function <b>SensorRotation</b>(const X, Y, Z, Angle: Double; const SecondsPassed: Single): boolean; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Rotation detected by sensor. Used for example by 3Dconnexion devices or touch controls.

<p>    </p>
<h6 class="description_section">Parameters</h6>
<dl class="parameters">
<dt>X</dt>
<dd>X axis (tilt forward/backwards)</dd>
<dt>Y</dt>
<dd>Y axis (rotate)</dd>
<dt>Z</dt>
<dd>Z axis (tilt sidewards)</dd>
<dt>Angle</dt>
<dd>Angle of rotation</dd>
<dt>SecondsPassed</dt>
<dd>The time passed since last <code>SensorRotation</code> call. This is necessary because some sensors, e.g. 3Dconnexion, may *not* reported as often as normal <a class="normal" href="CastleUIControls.TInputListener.html#Update">Update</a> calls.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="SensorTranslation"></a><code>function <b>SensorTranslation</b>(const X, Y, Z, Length: Double; const SecondsPassed: Single): boolean; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Translation detected by sensor. Used for example by 3Dconnexion devices or touch controls.

<p>    </p>
<h6 class="description_section">Parameters</h6>
<dl class="parameters">
<dt>X</dt>
<dd>X axis (move left/right)</dd>
<dt>Y</dt>
<dd>Y axis (move up/down)</dd>
<dt>Z</dt>
<dd>Z axis (move forward/backwards)</dd>
<dt>Length</dt>
<dd>Length of the vector consisting of the above</dd>
<dt>SecondsPassed</dt>
<dd>The time passed since last <a class="normal" href="CastleUIControls.TInputListener.html#SensorRotation">SensorRotation</a> call. This is necessary because some sensors, e.g. 3Dconnexion, may *not* reported as often as normal <a class="normal" href="CastleUIControls.TInputListener.html#Update">Update</a> calls.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Update"></a><code>procedure <b>Update</b>(const SecondsPassed: Single; var HandleInput: boolean); virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Control may do here anything that must be continously repeated. E.g. camera handles here falling down due to gravity, rotating model in Examine mode, and many more.

<p>

<p>This method may be used, among many other things, to continously react to the fact that user pressed some key (or mouse button). For example, if holding some key should move some 3D object, you should do something like:

<p></p>

<pre class="longcode">
<span class="pascal_keyword">if</span> HandleInput <span class="pascal_keyword">then</span>
<span class="pascal_keyword">begin</span>
  <span class="pascal_keyword">if</span> Container.Pressed[K_Right] <span class="pascal_keyword">then</span>
    Transform.Position += Vector3Single(SecondsPassed * <span class="pascal_numeric">10</span>, <span class="pascal_numeric">0</span>, <span class="pascal_numeric">0</span>);
  HandleInput := <span class="pascal_keyword">not</span> ExclusiveEvents;
<span class="pascal_keyword">end</span>;
</pre>

<p>

<p>Instead of directly using a key code, consider also using <a class="normal" href="CastleInputs.TInputShortcut.html">TInputShortcut</a> that makes the input key nicely configurable. See engine tutorial about handling inputs.

<p>Multiplying movement by SecondsPassed makes your operation frame-rate independent. Object will move by 10 units in a second, regardless of how many FPS your game has.

<p>The code related to HandleInput is important if you write a generally-useful control that should nicely cooperate with all other controls, even when placed on top of them or under them. The correct approach is to only look at pressed keys/mouse buttons if HandleInput is <code>True</code>. Moreover, if you did check that HandleInput is <code>True</code>, and you did actually handle some keys, then you have to set <code>HandleInput := not <a class="normal" href="CastleUIControls.TInputListener.html#ExclusiveEvents">ExclusiveEvents</a></code>. As <a class="normal" href="CastleUIControls.TInputListener.html#ExclusiveEvents">ExclusiveEvents</a> is <code>True</code> in normal circumstances, this will prevent the other controls (behind the current control) from handling the keys (they will get HandleInput = <code>False</code>). And this is important to avoid doubly-processing the same key press, e.g. if two controls react to the same key, only the one on top should process it.

<p>Note that to handle a single press / release (like &quot;switch light on when pressing a key&quot;) you should rather use <a class="normal" href="CastleUIControls.TInputListener.html#Press">Press</a> and <a class="normal" href="CastleUIControls.TInputListener.html#Release">Release</a> methods. Use this method only for continous handling (like &quot;holding this key makes the light brighter and brighter&quot;).

<p>To understand why such HandleInput approach is needed, realize that the &quot;Update&quot; events are called differently than simple mouse and key events like &quot;Press&quot; and &quot;Release&quot;. &quot;Press&quot; and &quot;Release&quot; events return whether the event was somehow &quot;handled&quot;, and the container passes them only to the controls under the mouse (decided by PositionInside). And as soon as some control says it &quot;handled&quot; the event, other controls (even if under the mouse) will not receive the event.

<p>This approach is not suitable for Update events. Some controls need to do the Update job all the time, regardless of whether the control is under the mouse and regardless of what other controls already did. So all controls (well, all controls that exist, in case of <a class="normal" href="CastleUIControls.TUIControl.html">TUIControl</a>, see <a class="normal" href="CastleUIControls.TUIControl.html#GetExists">TUIControl.GetExists</a>) receive Update calls.

<p>So the &quot;handled&quot; status is passed through HandleInput. If a control is not under the mouse, it will receive HandleInput = <code>False</code>. If a control is under the mouse, it will receive HandleInput = <code>True</code> as long as no other control on top of it didn't already change it to <code>False</code>.</p>
<h6 class="description_section">Parameters</h6>
<dl class="parameters">
<dt>SecondsPassed</dt>
<dd>Should be calculated like <a class="normal" href="CastleTimeUtils.TFramesPerSecond.html#UpdateSecondsPassed">TFramesPerSecond.UpdateSecondsPassed</a>, and usually it's in fact just taken from TCastleWindowCustom.Fps.UpdateSecondsPassed.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="VisibleChange"></a><code>procedure <b>VisibleChange</b>; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Called always when some visible part of this control changes. In the simplest case, this is used by the controls manager to know when we need to redraw the control.

<p>In this class this simply calls <a class="normal" href="CastleUIControls.TInputListener.html#OnVisibleChange">OnVisibleChange</a> (if assigned).</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="AllowSuspendForInput"></a><code>function <b>AllowSuspendForInput</b>: boolean; virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Allow window containing this control to suspend waiting for user input. Typically you want to override this to return <code>False</code> when you do something in the overridden <a class="normal" href="CastleUIControls.TInputListener.html#Update">Update</a> method.

<p>In this class, this simply returns always <code>True</code>.

<p></p>
<h6 class="description_section">See also</h6>
<dl class="see_also">
  <dt><a class="normal" href="CastleWindow.TCastleWindowCustom.html#AllowSuspendForInput">TCastleWindowCustom.AllowSuspendForInput</a></dt>
  <dd>Is it allowed to suspend (for an indefinite amount of time) waiting for user input.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="ContainerResize"></a><code>procedure <b>ContainerResize</b>(const AContainerWidth, AContainerHeight: Cardinal); virtual;</code></td>
</tr>
<tr><td colspan="2">
<p>
Called always when the container (component or window with OpenGL context) size changes. Called only when the OpenGL context of the container is initialized, so you can be sure that this is called only between GLContextOpen and GLContextClose.

<p>We also make sure to call this once when inserting into the container controls list (like <a class="normal" href="CastleWindow.TCastleWindowCustom.html#Controls">TCastleWindowCustom.Controls</a> or <a class="normal" href="CastleControl.TCastleControlCustom.html#Controls">TCastleControlCustom.Controls</a>), if inserting into the container with already initialized OpenGL context. If inserting into the container without OpenGL context initialized, it will be called later, when OpenGL context will get initialized, right after GLContextOpen.

<p>In other words, this is always called to let the control know the size of the container, if and only if the OpenGL context is initialized.</p>
</td></tr>
</table>
<h3 class="detail">Properties</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="OnVisibleChange"></a><code>property <b>OnVisibleChange</b>: TNotifyEvent
      read FOnVisibleChange write FOnVisibleChange;</code></td>
</tr>
<tr><td colspan="2">
<p>
Called always when some visible part of this control changes. In the simplest case, this is used by the controls manager to know when we need to redraw the control.

<p>Be careful when handling this event, various changes may cause this, so be prepared to handle <code>OnVisibleChange</code> at every time.

<p></p>
<h6 class="description_section">See also</h6>
<dl class="see_also">
  <dt><a class="normal" href="CastleUIControls.TInputListener.html#VisibleChange">VisibleChange</a></dt>
  <dd>Called always when some visible part of this control changes.</dd>
</dl>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Container"></a><code>property <b>Container</b>: <a  href="CastleUIControls.TUIContainer.html">TUIContainer</a> read FContainer write <a  href="CastleUIControls.TInputListener.html#SetContainer">SetContainer</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Container of this control. When adding control to container's Controls list (like <a class="normal" href="CastleWindow.TCastleWindowCustom.html#Controls">TCastleWindowCustom.Controls</a>) container will automatically set itself here, and when removing from container this will be changed back to <code>Nil</code>.

<p>May be <code>Nil</code> if this control is not yet inserted into any container.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Cursor"></a><code>property <b>Cursor</b>: <a  href="CastleKeysMouse.html#TMouseCursor">TMouseCursor</a> read FCursor write SetCursor default mcDefault;</code></td>
</tr>
<tr><td colspan="2">
<p>
Mouse cursor over this control. When user moves mouse over the Container, the currently focused (topmost under the cursor) control determines the mouse cursor look.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="OnCursorChange"></a><code>property <b>OnCursorChange</b>: TNotifyEvent
      read FOnCursorChange write FOnCursorChange;</code></td>
</tr>
<tr><td colspan="2">
<p>
Event called when the <a class="normal" href="CastleUIControls.TInputListener.html#Cursor">Cursor</a> property changes. This event is, in normal circumstances, used by the Container, so you should not use it in your own programs.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="ExclusiveEvents"></a><code>property <b>ExclusiveEvents</b>: boolean
      read FExclusiveEvents write FExclusiveEvents default true;</code></td>
</tr>
<tr><td colspan="2">
<p>
Should we disable further mouse / keys handling for events that we already handled in this control. If <code>True</code>, then our events will return <code>True</code> for mouse and key events handled.

<p>This means that events will not be simultaneously handled by both this control and some other (or camera or normal window callbacks), which is usually more sensible, but sometimes somewhat limiting.</p>
</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "1"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Piwik Code -->

<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a  href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:12</em>
</span>
</td></tr></table></body></html>