aboutsummaryrefslogtreecommitdiff
path: root/libXaw/spec/Scrollbar
blob: faf693a3b6ed5dbc975c6706c12d2a4bb24d7faa (plain)
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
.\" $Xorg: Scrollbar,v 1.3 2000/08/17 19:42:27 cpqbld Exp $
.NH 2
Scrollbar Widget
.LP
.XS
	Scrollbar Widget
.XE
.IN "Scrollbar widget" "" "@DEF@"
.Ds 0
.TA 2.0i
.ta 2.0i
.sp
Application header file	<X11/Xaw/Scrollbar.h>
.IN "Scrollbar.h" ""
Class header file	<X11/Xaw/ScrollbarP.h>
.IN "ScrollbarP.h" ""
Class		scrollbarWidgetClass
.IN "scrollbarWidgetClass" ""
Class Name	Scrollbar
.IN "Scrollbar widget" "class name"
Superclass	Simple
.sp
.De
.LP
A Scrollbar widget is a rectangle, called the ``canvas,'' on
which another rectangle, the ``thumb,'' moves in one
dimension, either vertically or horizontally.  A Scrollbar
can be used alone, as a value generator, or it can be used
within a composite widget (for example, a Viewport).  When a
Scrollbar is used to move, or ``scroll,'' the contents of
another widget, the size and the position of the thumb usually give
feedback as to what portion of the other widget's contents
are visible.
.LP
Each pointer button invokes a specific action.  Pointer
buttons 1 and 3 do not move the thumb automatically.
Instead, they return the pixel position of the cursor on the
scroll region.  When pointer button 2 is clicked, the thumb
moves to the current pointer position.  When pointer button
2 is held down and the pointer is moved, the thumb follows
the pointer.
.LP
The pointer cursor in the scroll region changes depending on the current
action.  When no pointer button is pressed, the cursor appears as a
double-headed arrow that points in the direction that scrolling can
occur.  When pointer button 1 or 3 is pressed, the cursor appears as a
single-headed arrow that points in the logical direction that the thumb
will move.  When pointer button 2 is pressed, the cursor
appears as an arrow that points to the top or the left of the thumb.
.LP
When the user scrolls, the application receives notification
through callback procedures.  For both discrete scrolling actions, the
callback returns the Scrollbar widget, the client_data, and the pixel
position of the pointer when the button was released.  For continuous
scrolling, the callback routine returns the scroll bar widget, the
client data, and the current relative position of the thumb.  When the
thumb is moved using pointer button 2, the callback procedure is invoked
continuously.  When either button 1 or 3 is pressed, the callback
procedure is invoked only when the button is released and the client
callback procedure is responsible for moving the thumb.
.NH 3
Resources
.LP
When creating a Scrollbar widget instance, the following resources are
retrieved from the argument list or from the resource database:
.LP
.IN "Scrollbar widget" "resources"
.TS H
expand;
lw(1i) lw(1i) lw(1i) lw(.5i) lw(2i).
_
.sp 3p
.TB
Name	Class	Type	Notes	Default Value
.sp 3p
_
.TH
.R
.sp 3p
accelerators	Accelerators	AcceleratorTable		NULL
ancestorSensitive	AncestorSensitive	Boolean	D	True
background	Background	Pixel		XtDefaultBackground
backgroundPixmap	Pixmap	Pixmap		XtUnspecifiedPixmap
borderColor	BorderColor	Pixel		XtDefaultForeground
borderPixmap	Pixmap	Pixmap		XtUnspecifiedPixmap
borderWidth	BorderWidth	Dimension		1
colormap	Colormap	Colormap		parent's Colormap
cursor	Cursor	Cursor		None
cursorName	Cursor	String		NULL
depth	Depth	int	C	parent's Depth
destroyCallback	Callback	XtCallbackList		NULL
foreground	Foreground	Pixel		XtDefaultForeground
height	Height	Dimension	A	depends on orientation
insensitiveBorder	Insensitive	Pixmap		GreyPixmap
international	International	Boolean	C	False
jumpProc	Callback	XtCallbackList		NULL
length	Length	Dimension		1
mappedWhenManaged	MappedWhenManaged	Boolean		True
minimumThumb	MinimumThumb	Dimension		7
orientation	Orientation	Orientation		XtorientVertical (vertical)
pointerColor	Foreground	Pixel		XtDefaultForeground
pointerColorBackground	Background	Pixel		XtDefaultBackground
screen	Screen	Screen	R	parent's Screen
scrollDCursor	Cursor	Cursor		XC_sb_down_arrow
scrollHCursor	Cursor	Cursor		XC_sb_h_double_arrow
scrollLCursor	Cursor	Cursor		XC_sb_left_arrow
scrollProc	Callback	XtCallbackList		NULL
scrollRCursor	Cursor	Cursor		XC_sb_right_arrow
scrollUCursor	Cursor	Cursor		XC_sb_up_arrow
scrollVCursor	Cursor	Cursor		XC_sb_v_arrow
sensitive	Sensitive	Boolean		True
shown	Shown	Float		0.0
thickness	Thickness	Dimension		14
thumb	Thumb	Bitmap		GreyPixmap
thumbProc	Callback	XtCallbackList		NULL
topOfThumb	TopOfThumb	Float		0.0
translations	Translations	TranslationTable		See below
width	Width	Dimension	A	depends on orientation
x	Position	Position		0
y	Position	Position		0
.sp 3p
_
.TE
.Ac
.As
.Bg
.Gp
.Bc
.Bp
.Bw
.Cm
.Cu
.Cn
.Dp
.Dc
.IP \fBforeground\fP 1.5i
A pixel value which indexes the widget's colormap to derive the color
used to draw the thumb.
.Hw
.Ib
.Ix
.IP \fBjumpProc\fP 1.5i
All functions on this callback list are called when the
\fBNotifyThumb\fP action is invoked.  See the \fBScrollbar
Actions\fP section for details.
.IP \fBlength\fP 1.5i
The height of a vertical scrollbar or the width of a horizontal scrollbar.
.Mm
.IP \fBminimumThumb\fP 1.5i
The smallest size, in pixels, to which the thumb can shrink.
.IP \fBorientation\fP 1.5i
The orientation is the direction that the thumb will be allowed to move.
This value can be either \fBXtorientVertical\fP or
\fBXtorientHorizontal\fP.
.IN "XtorientVertical" ""
.IN "XtorientHorizontal" ""
.IN "conversions" "Orientation"
.Rs "vertical \fPand\fB horizontal"
.Pf
.Pb
.Sc
.IP \fBscrollDCursor\fP 1.5i
This cursor is used when scrolling backward in a vertical scrollbar.
.IP \fBscrollHCursor\fP 1.5i
This cursor is used when a horizontal scrollbar is inactive.
.IP \fBscrollLCursor\fP 1.5i
This cursor is used when scrolling forward in a horizontal scrollbar.
.IP \fBscrollProc\fP 1.5i
All functions on this callback list may be called when the
\fBNotifyScroll\fP action is invoked.  See the \fBScrollbar
Actions\fP section for details.
.IP \fBscrollRCursor\fP 1.5i
This cursor is used when scrolling backward in a horizontal scrollbar,
or when thumbing a vertical scrollbar.
.IP \fBscrollUCursor\fP 1.5i
This cursor is used when scrolling forward in a vertical scrollbar, or when
thumbing a horizontal scrollbar.
.IP \fBscrollVCursor\fP 1.5i
This cursor is used when a vertical scrollbar is inactive.
.Se
.IP \fBshown\fP 1.5i
This is the size of the thumb, expressed as a percentage (0.0 - 1.0)
of the length of the scrollbar.
.IP \fBthickness\fP 1.5i
The width of a vertical scrollbar or the height of a horizontal scrollbar.
.IP \fBthumb\fP 1.5i
This pixmap is used to tile (or stipple) the thumb of the scrollbar.  If
no tiling is desired, then set this resource to \fBNone\fP.  This
resource will accept either a bitmap or a pixmap that is the same depth
as the window.  The resource converter for this resource constructs
bitmaps from the contents of files.  (See \fBConverting Bitmaps\fP for
details.)
.IP \fBtopOfThumb\fP 1.5i
The location of the top of the thumb, as a percentage (0.0 - 1.0)
of the length of the scrollbar.  This resource was called \fBtop\fP in
previous versions of the Athena widget set.  The name collided with the
a Form widget constraint resource, and had to be changed.
.Tr
.Xy
.NH 3
Scrollbar Actions
.IN "Scrollbar widget" "actions"
.LP
The actions supported by the Scrollbar widget are:
.IP \fBStartScroll\fP(\fIvalue\fP) 1.5i
The possible \fIvalues\fP are Forward, Backward, or Continuous.
This must be the first action to begin a new movement.
.IP \fBNotifyScroll\fP(\fIvalue\fP) 1.5i
The possible \fIvalues\fP are Proportional or FullLength.  If the
argument to StartScroll was Forward or Backward, NotifyScroll executes
the \fBscrollProc\fP callbacks and passes either; the position of the
pointer, if \fIvalue\fP is Proportional, or the full length of the
scroll bar, if \fIvalue\fP is FullLength.  If the argument to
StartScroll was Continuous, NotifyScroll returns without executing any
callbacks.
.IP \fBEndScroll\fP(\^) 1.5i
This must be the last action after a movement is complete.
.IP \fBMoveThumb\fP(\^) 1.5i
Repositions the Scrollbar's thumb to the current pointer location.
.IP \fBNotifyThumb\fP(\^)\ \ \  1.5i
Calls the
.PN jumpProc
callbacks and passes the relative position of the
pointer as a percentage of the scroll bar length.
.LP
.sp
The default bindings for Scrollbar are:
.IN "Scrollbar widget" "default translation table"
.LP
.Ds 0
.TA .5i 1.75i
.ta .5i 1.75i
	<Btn1Down>:	StartScroll(Forward)
	<Btn2Down>:	StartScroll(Continuous) MoveThumb(\|) NotifyThumb(\|)
	<Btn3Down>:	StartScroll(Backward)
	<Btn2Motion>:	MoveThumb(\|) NotifyThumb(\|)
	<BtnUp>:	NotifyScroll(Proportional) EndScroll(\|)
.De
.LP
.sp
Examples of additional bindings a user might wish to specify in a
resource file are:
.LP
.Ds 0
.TA .5i 2.25i
.ta .5i 2.25i
*Scrollbar.Translations: \\
	~Meta<Key>space:	StartScroll(Forward) NotifyScroll(FullLength) \\n\\
	 Meta<Key>space:	StartScroll(Backward) NotifyScroll(FullLength) \\n\\
		EndScroll(\|)
.De
.NH 3
Scrollbar Callbacks
.IN "Scrollbar widget" "callbacks"
.LP
There are two callback lists provided by the Scrollbar widget.
The procedural interface for these functions is described here.
.LP
The calling interface to the \fBscrollProc\fP callback procedure is:
.IN "ScrollProc" "" "@DEF@"
.FD 0
void ScrollProc(\fIscrollbar\fP, \fIclient_data\fP, \fIposition\fP)
.br
     Widget \fIscrollbar\fP;
.br
     XtPointer \fIclient_data\fP;
.br
     XtPointer \fIposition\fP;    /* int */
.FN
.IP \fIscrollbar\fP 1i
Specifies the Scrollbar widget.
.IP \fIclient_data\fP 1i
Specifies the client data.
.IP \fIposition\fP 1i
Specifies a pixel position in integer form.
.LP
The \fBscrollProc\fP callback is used for incremental scrolling
and is called by the \fBNotifyScroll\fP action.
The position argument is a signed quantity and should be cast to an int
when used. Using the default button bindings, button 1 returns a
positive value, and button 3 returns a negative value. In both cases,
the magnitude of the value is the distance of the pointer in
pixels from the top (or left) of the Scrollbar. The value will never
be greater than the length of the Scrollbar.
.LP
.sp
The calling interface to the \fBjumpProc\fP callback procedure is:
.IN "jumpProc" "" "@DEF@"
.FD 0
void JumpProc(\fIscrollbar\fP, \fIclient_data\fP, \fIpercent\fP)
.br
     Widget \fIscrollbar\fP;
.br
     XtPointer \fIclient_data\fP;
.br
     XtPointer \fIpercent_ptr\fP;    /* float* */
.FN
.IP \fIscrollbar\fP 1i
Specifies the ID of the scroll bar widget.
.IP \fIclient_data\fP 1i
Specifies the client data.
.IP \fIpercent_ptr\fP 1i
Specifies the floating point position of the thumb (0.0 \- 1.0).
.LP
The \fBjumpProc\fP callback is used to implement smooth scrolling and
is called by the \fBNotifyThumb\fP action.  Percent_ptr must be cast
to a pointer to float before use; i.e.
.LP
.Ds 0
.TA .5i
.ta .5i
	float percent = *(float*)percent_ptr;
.De
.LP
With the default button bindings, button 2 moves the thumb interactively,
and the \fBjumpProc\fP is called on each new position of the pointer,
while the pointer button remains down.  The value specified by
\fIpercent_ptr\fP is the current location of the thumb (from the top or
left of the Scrollbar) expressed as a percentage of the length of the
Scrollbar.
.NH 3
Convenience Routines
.LP
.IN "Scrollbar widget" "setting thumb values"
To set the position and length of a Scrollbar thumb, use
.PN XawScrollbarSetThumb .
.IN "XawScrollbarSetThumb" "" "@DEF@"
.FD 0
void XawScrollbarSetThumb(\fIw\fP, \fItop\fP, \fIshown\fP)
.br
     Widget \fIw\fP;
.br
     float \fItop\fP;
.br
     float \fIshown\fP;
.FN
.IP \fIw\fP 1i
Specifies the Scrollbar widget.
.IP \fItop\fP 1i
Specifies the position of the top of the thumb as a fraction of the
length of the Scrollbar.
.IP \fIshown\fP 1i
Specifies the length of the thumb as a fraction of the total length
of the Scrollbar.
.LP
.PN XawScrollbarThumb
moves the visible thumb to a new position (0.0 \- 1.0) and length (0.0 \- 1.0).
Either the top or shown arguments can be specified as \-1.0,
in which case the current value is left unchanged.
Values greater than 1.0 are truncated to 1.0.
.LP
If called from \fBjumpProc\fP, \fBXawScrollbarSetThumb\fP has no effect.
.NH 3
Setting Float Resources
.IN "float resources" "setting"
.LP
The \fBshown\fP and \fBtopOfThumb\fP resources are of type
\fIfloat\fP.  These resources can be difficult to get into an
argument list.  The reason is that C performs an automatic cast of
the float value to an integer value, usually truncating the important
information.  The following code fragment is one portable method of
getting a float into an argument list.
.sp
.Ds 0
.SM
.TA 1i 2i
.ta 1i 2i
	top = 0.5;
	if (sizeof(float) > sizeof(XtArgVal)) {
	/*
	\ * If a float is larger than an XtArgVal then pass this
	\ * resource value by reference.
	\ */
		XtSetArg(args[0], XtNshown, &top);
	}
	else {
	/*
	\ * Convince C not to perform an automatic conversion, which
	\ * would truncate 0.5 to 0.
	\ */
		XtArgVal * l_top = (XtArgVal *) &top;
		XtSetArg(args[0], XtNshown, *l_top);
	}
.NL
.De
.sp