From: dave@kanga.lcs.mit.edu (David Sternlicht)
Newsgroups: comp.windows.interviews
Subject: A Tale of 2 Toolkits: part 4 of 6
Date: 12 Nov 92 05:26:28 GMT
Article-I.D.: mintaka.1992Nov12.052628.6376
Organization: mit X consortium

-- 
q(orting)h(m)o(ultiple)d(views)j(of)f(data)h(in)f(In)o(terViews)h(consists)h
(of)e(three)189 2200 y(proto)q(cols:)17 b Ff(observable,)c(observer,)f
Fj(and)g Ff(adjustable)p Fj(.)17 b(An)c Ff(A)n(djustable)e
Fj(is)h(an)g(ob)r(ject)h(that)f(handles)189 2250 y(requests)k(to)f(mo)q(dify)
e(its)i(viewing)f(area.)21 b(An)15 b Ff(observable)g Fj(ob)r(ject)h(is)e(one)
h(that)g(has)g(one)g(or)g(more)189 2299 y(observ)o(ers)f(that)e(it)g(can)g
(notify\(t)o(ypically)e(when)j(it)f(c)o(hanges\))h([2)o(].)k(An)c
Ff(observer)e Fj(can)i(b)q(e)g(attac)o(hed)189 2349 y(or)c(detac)o(hed)i(to)f
(an)f(observ)n(able.)17 b(An)10 b(adjustable)g(uses)h(an)e(observ)n(able)h
(for)f(eac)o(h)i(of)e(its)h(dimensions)189 2399 y(to)j(k)o(eep)i(trac)o(k)f
(of)f(the)i(observ)o(ers[2)q(].)964 2577 y Fi(5)p eop
%%Page: 6 7
6 bop 75 1241 a @beginspecial 600 @hoffset 50 @voffset 80 @hscale
80 @vscale 90 @angle @setspecial
%%BeginDocument: hierarchy.fig.ps
%!
%%Title: hierarchy.fig
%%Creator: f2ps
%%CreationDate: Mon Sep 28 12:44:57 1992
%%For: dave@kanga.lcs.mit.edu (David Sternlicht)
%%Pages: 1
%%BoundingBox: -629 -463 -447 -108
%%EndComments
/$F2psDict 32 dict def $F2psDict begin $F2psDict /mtrx matrix put
 end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
612 792 translate
0.900000 -0.900000 scale
90 rotate
1.000 setlinewidth
% Polyline
newpath 234 514 moveto 144 584 lineto stroke
newpath 151.543 580.667 moveto 144.000 584.000 lineto 149.087 577.510 lineto stroke
% Polyline
newpath 244 514 moveto 244 584 lineto stroke
newpath 246.000 576.000 moveto 244.000 584.000 lineto 242.000 576.000 lineto stroke
% Polyline
newpath 254 514 moveto 359 684 lineto stroke
newpath 356.498 676.143 moveto 359.000 684.000 lineto 353.094 678.245 lineto stroke
% Polyline
newpath 469 514 moveto 469 584 lineto stroke
newpath 471.000 576.000 moveto 469.000 584.000 lineto 467.000 576.000 lineto stroke
% Polyline
newpath 469 604 moveto 374 684 lineto stroke
newpath 381.408 680.377 moveto 374.000 684.000 lineto 378.831 677.317 lineto stroke
/fn0.12 /Times-Roman findfont 13.333333 scalefont def
fn0.12 setfont
(ConversionSpace) 424 599 moveto 1 -1 scale show 1 -1 scale 
(Adjustable) 439 509 moveto 1 -1 scale show 1 -1 scale 
(Observer) 219 509 moveto 1 -1 scale show 1 -1 scale 
(ColorSpace) 339 699 moveto 1 -1 scale show 1 -1 scale 
(ColorViewer) 209 599 moveto 1 -1 scale show 1 -1 scale 
(Valuator) 119 599 moveto 1 -1 scale show 1 -1 scale 
showpage
$F2psEnd
%%EndDocument
 @endspecial 681 1314 a Fi(Figure)16 b(2:)j(Hierarc)o(h)o(y)d(of)e(classes)
251 1447 y Fj(W)m(e)20 b(also)g(follo)o(w)f(the)i(same)e(approac)o(h)i(in)f
(designing)g(our)h(ColorEditor)f(to)q(ol,)h(ICE.)f(The)189
1497 y(hierarc)o(h)o(y)12 b(of)g(classes)i(is)e(sho)o(wn)g(in)g(\014gure)h(2)
f(while)g(the)h(design)f(of)g(the)h(to)q(ol)f(is)g(sho)o(wn)g(in)g(\014gure)h
(3.)251 1547 y(The)g(hierarc)o(h)o(y)f(\014gure)h(indicates)g(that)f(Con)o(v)
o(ersionSpace)h(is)f(an)g(Adjustable)h(while)e(the)i(Col-)189
1597 y(orSpace)18 b(is)g(an)g(Adjustable)g(as)g(w)o(ell)f(as)h(an)g(Observ)o
(er.)32 b(W)m(earing)17 b(the)h(Observ)o(er)i(hat,)f(a)e(Col-)189
1646 y(orSpace)e(ob)r(ject)h(observ)o(ers)g(the)f(Con)o(v)o(ersionSpace)h(ob)
r(ject)f(while)g(in)f(the)h(Adjustable)g(sho)q(es,)h(it)189
1696 y(lets)h(b)q(oth)f(the)h(ColorView)o(er)g(and)f(the)h(V)m(aluator)e(ob)r
(jects)j(observ)o(e)f(itself.)26 b(ColorView)o(er)16 b(is)h(an)189
1746 y(Observ)o(er)j(and)f(is)f(resp)q(onsible)i(for)e(up)q(dating)g(the)i
(color)e(viewing)g(area)h(in)f(the)h(screen.)35 b(One)189 1796
y(V)m(aluator)13 b(p)q(er)i(dimension)d(of)i(a)f(ColorSpace)h(k)o(eeps)i(a)d
(FieldEditor)h(up)g(to)g(date)h(and)f(also)f(lets)i(a)189 1846
y(user)g(c)o(hange)f(the)g(v)n(alue)g(of)f(that)h(dimension)e(through)i(that)
g(FieldEditor.)251 1895 y(In)j(our)h(design,)g(Con)o(v)o(ersionSpace)g(ob)r
(ject)g(serv)o(es)h(as)f(the)g(common)c(data)j(while)g(the)h(Col-)189
1945 y(orSpace)c(ob)r(ject)g(acts)h(as)e(the)h(view)g(of)f(this)g(data.)18
b(Eac)o(h)c(ColorSpace)f(ob)r(ject)i(has)e(a)h(Con)o(v)o(ersion)189
1995 y(Matrix)j(that)i(is)f(emplo)o(y)o(ed)f(to)h(con)o(v)o(ert)h(b)q(et)o(w)
o(een)g(its)f(lo)q(cal)g(v)n(alues\(or)g(view\))g(and)g(the)h(global)189
2045 y(v)n(alues\(common)11 b(data\).)251 2095 y(Eac)o(h)20
b(color)f(space)i(also)e(has)g(three)i(scroll)f(bars,)h(one)e(for)h(eac)o(h)g
(dimension)e(to)h(represen)o(t)189 2145 y(curren)o(t)c(lo)q(cal)e(v)n(alue)g
(in)h(that)g(dimension.)251 2194 y(There)g(are)f(three)i(Field)d
(Editors\(Observ)o(ers)k(in)c(In)o(terViews\))j(that)e(textually)f(sho)o(w)h
(the)h(v)n(al-)189 2244 y(ues)d(in)f(eac)o(h)h(dimension)e(of)h(a)h(color)f
(space.)18 b(A)11 b(v)n(alue)f(in)g(a)g(particular)h(dimension)e(can)i(b)q(e)
g(c)o(hanged)189 2294 y(b)o(y)i(either)h(mo)o(ving)d(the)j(th)o(um)o(b)d(of)i
(the)h(corresp)q(onding)g(scroll)g(bar)f(or)g(b)o(y)g(en)o(tering)h(a)f(n)o
(um)o(b)q(er)g(in)189 2344 y(the)h(\014eld)g(editor)g(through)g(the)h(k)o(ey)
e(b)q(oard.)251 2394 y(There)j(is)g(a)f(also)g(a)g(ColorView)o(er)g(ob)r
(ject.)24 b(This)15 b(ob)r(ject)h(is)f(resp)q(onsible)i(for)e(displa)o(ying)f
(the)189 2443 y(color)h(depicted)i(b)o(y)f(the)h(R)o(GB)e(color)g(space.)26
b(This)16 b(ob)r(ject)g(is)g(an)g(Observ)o(er)h(of)f(the)g(R)o(GB)g(color)964
2577 y Fi(6)p eop
%%Page: 7 8
7 bop 75 2293 a @beginspecial 620 @hoffset 50 @voffset 80 @hscale
80 @vscale 90 @angle @setspecial
%%BeginDocument: design.fig.ps
%!
%%Title: design.fig
%%Creator: f2ps
%%CreationDate: Mon Sep 28 12:44:57 1992
%%For: dave@kanga.lcs.mit.edu (David Sternlicht)
%%Pages: 1
%%BoundingBox: -584 -559 -46 -22
%%EndComments
/$F2psDict 32 dict def $F2psDict begin $F2psDict /mtrx matrix put
 /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y translate xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix } def
 end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
612 792 translate
0.900000 -0.900000 scale
90 rotate
1.000 setlinewidth
% Ellipse
newpath 409 267 40 17 0 360 DrawEllipse
 stroke
% Ellipse
newpath 409 359 18 18 0 360 DrawEllipse
 stroke
% Ellipse
newpath 136 267 40 17 0 360 DrawEllipse
 stroke
% Ellipse
newpath 134 359 18 18 0 360 DrawEllipse
 stroke
% Ellipse
newpath 269 106 40 17 0 360 DrawEllipse
 stroke
% Polyline
newpath 454 624 moveto 484 624 lineto 484 639 lineto 454 639 lineto closepath  stroke
% Polyline
newpath 394 624 moveto 424 624 lineto 424 639 lineto 394 639 lineto closepath  stroke
% Polyline
newpath 339 624 moveto 369 624 lineto 369 639 lineto 339 639 lineto closepath  stroke
% Polyline
newpath 451 564 moveto 444 564 444 582 7 arcto 4 {pop} repeat 444 589 482 589 7 arcto 4 {pop} repeat 489 589 489 571 7 arcto 4 {pop} repeat 489 564 451 564 7 arcto 4 {pop} repeat closepath  stroke
% Polyline
newpath 396 564 moveto 389 564 389 582 7 arcto 4 {pop} repeat 389 589 427 589 7 arcto 4 {pop} repeat 434 589 434 571 7 arcto 4 {pop} repeat 434 564 396 564 7 arcto 4 {pop} repeat closepath  stroke
% Polyline
newpath 341 564 moveto 334 564 334 582 7 arcto 4 {pop} repeat 334 589 372 589 7 arcto 4 {pop} repeat 379 589 379 571 7 arcto 4 {pop} repeat 379 564 341 564 7 arcto 4 {pop} repeat closepath  stroke
% Polyline
newpath 454 424 moveto 464 424 lineto 464 514 lineto 454 514 lineto closepath  stroke
11.000 setlinewidth
% Polyline
newpath 454 464 moveto 464 464 lineto stroke
1.000 setlinewidth
% Polyline
newpath 404 424 moveto 414 424 lineto 414 514 lineto 404 514 lineto closepath  stroke
11.000 setlinewidth
% Polyline
newpath 404 499 moveto 414 499 lineto stroke
1.000 setlinewidth
% Polyline
newpath 354 424 moveto 364 424 lineto 364 514 lineto 354 514 lineto closepath  stroke
11.000 setlinewidth
% Polyline
newpath 354 489 moveto 364 489 lineto stroke
1.000 setlinewidth
% Polyline
newpath 409 284 moveto 409 339 lineto stroke
newpath 411.000 331.000 moveto 409.000 339.000 lineto 407.000 331.000 lineto stroke
% Polyline
newpath 409 379 moveto 409 424 lineto stroke
newpath 411.000 416.000 moveto 409.000 424.000 lineto 407.000 416.000 lineto stroke
% Polyline
newpath 394 374 moveto 359 424 lineto stroke
newpath 365.226 418.593 moveto 359.000 424.000 lineto 361.949 416.299 lineto stroke
% Polyline
newpath 424 369 moveto 459 424 lineto stroke
newpath 456.392 416.177 moveto 459.000 424.000 lineto 453.018 418.324 lineto stroke
% Polyline
newpath 359 514 moveto 354 564 lineto stroke
newpath 356.786 556.239 moveto 354.000 564.000 lineto 352.806 555.841 lineto stroke
% Polyline
newpath 409 514 moveto 409 564 lineto stroke
newpath 411.000 556.000 moveto 409.000 564.000 lineto 407.000 556.000 lineto stroke
% Polyline
newpath 459 514 moveto 464 564 lineto stroke
newpath 465.194 555.841 moveto 464.000 564.000 lineto 461.214 556.239 lineto stroke
% Polyline
newpath 354 589 moveto 354 624 lineto stroke
newpath 356.000 616.000 moveto 354.000 624.000 lineto 352.000 616.000 lineto stroke
% Polyline
newpath 409 589 moveto 409 624 lineto stroke
newpath 411.000 616.000 moveto 409.000 624.000 lineto 407.000 616.000 lineto stroke
% Polyline
newpath 469 589 moveto 469 624 lineto stroke
newpath 471.000 616.000 moveto 469.000 624.000 lineto 467.000 616.000 lineto stroke
% Polyline
newpath 489 414 moveto 499 414 lineto 499 524 lineto 489 524 lineto stroke
% Polyline
newpath 479 249 moveto 489 249 lineto 489 289 lineto 479 289 lineto stroke
% Polyline
newpath 484 339 moveto 494 339 lineto 494 389 lineto 484 389 lineto stroke
% Polyline
newpath 494 554 moveto 504 554 lineto 504 604 lineto 494 604 lineto stroke
% Polyline
newpath 494 614 moveto 504 614 lineto 504 649 lineto 494 649 lineto stroke
% Polyline
newpath 179 619 moveto 209 619 lineto 209 634 lineto 179 634 lineto closepath  stroke
% Polyline
newpath 124 619 moveto 154 619 lineto 154 634 lineto 124 634 lineto closepath  stroke
% Polyline
newpath 176 564 moveto 169 564 169 582 7 arcto 4 {pop} repeat 169 589 207 589 7 arcto 4 {pop} repeat 214 589 214 571 7 arcto 4 {pop} repeat 214 564 176 564 7 arcto 4 {pop} repeat closepath  stroke
% Polyline
newpath 121 564 moveto 114 564 114 582 7 arcto 4 {pop} repeat 114 589 152 589 7 arcto 4 {pop} repeat 159 589 159 571 7 arcto 4 {pop} repeat 159 564 121 564 7 arcto 4 {pop} repeat closepath  stroke
% Polyline
newpath 66 564 moveto 59 564 59 582 7 arcto 4 {pop} repeat 59 589 97 589 7 arcto 4 {pop} repeat 104 589 104 571 7 arcto 4 {pop} repeat 104 564 66 564 7 arcto 4 {pop} repeat closepath  stroke
11.000 setlinewidth
% Polyline
newpath 179 499 moveto 189 499 lineto stroke
1.000 setlinewidth
% Polyline
newpath 179 424 moveto 189 424 lineto 189 514 lineto 179 514 lineto closepath  stroke
11.000 setlinewidth
% Polyline
newpath 79 469 moveto 89 469 lineto stroke
1.000 setlinewidth
% Polyline
newpath 79 424 moveto 89 424 lineto 89 514 lineto 79 514 lineto closepath  stroke
% Polyline
newpath 129 424 moveto 139 424 lineto 139 514 lineto 129 514 lineto closepath  stroke
11.000 setlinewidth
% Polyline
newpath 129 449 moveto 139 449 lineto stroke
1.000 setlinewidth
% Polyline
newpath 134 284 moveto 134 339 lineto stroke
newpath 136.000 331.000 moveto 134.000 339.000 lineto 132.000 331.000 lineto stroke
% Polyline
newpath 134 379 moveto 134 424 lineto stroke
newpath 136.000 416.000 moveto 134.000 424.000 lineto 132.000 416.000 lineto stroke
% Polyline
newpath 119 369 moveto 84 424 lineto stroke
newpath 89.982 418.324 moveto 84.000 424.000 lineto 86.608 416.177 lineto stroke
% Polyline
newpath 149 369 moveto 184 424 lineto stroke
newpath 181.392 416.177 moveto 184.000 424.000 lineto 178.018 418.324 lineto stroke
% Polyline
newpath 134 514 moveto 134 564 lineto stroke
newpath 136.000 556.000 moveto 134.000 564.000 lineto 132.000 556.000 lineto stroke
% Polyline
newpath 184 514 moveto 189 564 lineto stroke
newpath 190.194 555.841 moveto 189.000 564.000 lineto 186.214 556.239 lineto stroke
% Polyline
newpath 84 514 moveto 79 564 lineto stroke
newpath 81.786 556.239 moveto 79.000 564.000 lineto 77.806 555.841 lineto stroke
% Polyline
newpath 79 589 moveto 79 619 lineto stroke
newpath 81.000 611.000 moveto 79.000 619.000 lineto 77.000 611.000 lineto stroke
% Polyline
newpath 139 589 moveto 139 619 lineto stroke
newpath 141.000 611.000 moveto 139.000 619.000 lineto 137.000 611.000 lineto stroke
% Polyline
newpath 194 589 moveto 194 619 lineto stroke
newpath 196.000 611.000 moveto 194.000 619.000 lineto 192.000 611.000 lineto stroke
% Polyline
newpath 64 619 moveto 94 619 lineto 94 634 lineto 64 634 lineto closepath  stroke
% Polyline
newpath 234 114 moveto 149 249 lineto stroke
newpath 154.955 243.296 moveto 149.000 249.000 lineto 151.570 241.165 lineto stroke
% Polyline
newpath 304 114 moveto 409 249 lineto stroke
newpath 405.667 241.457 moveto 409.000 249.000 lineto 402.510 243.913 lineto stroke
% Polyline
newpath 79 154 moveto 119 254 lineto stroke
newpath 117.886 245.829 moveto 119.000 254.000 lineto 114.172 247.315 lineto stroke
% Polyline
newpath 39 119 moveto 129 119 lineto 129 154 lineto 39 154 lineto closepath  stroke
7.000 setlinewidth
	[4.000000] 0 setdash
% Polyline
newpath 224 264 moveto 314 264 lineto stroke
	[] 0 setdash
/fn0.12 /Times-Roman findfont 13.333333 scalefont def
fn0.12 setfont
(8) 419 364 moveto 1 -1 scale show 1 -1 scale 
(CM) 399 364 moveto 1 -1 scale show 1 -1 scale 
(TekHVC space) 374 274 moveto 1 -1 scale show 1 -1 scale 
(H_Obs) 339 584 moveto 1 -1 scale show 1 -1 scale 
(V_Obs) 394 584 moveto 1 -1 scale show 1 -1 scale 
(C_Obs) 449 584 moveto 1 -1 scale show 1 -1 scale 
(0.00) 344 634 moveto 1 -1 scale show 1 -1 scale 
(0.00) 399 634 moveto 1 -1 scale show 1 -1 scale 
(0.00) 459 634 moveto 1 -1 scale show 1 -1 scale 
(scroll_bars) 509 439 moveto 1 -1 scale show 1 -1 scale 
(representing) 509 457 moveto 1 -1 scale show 1 -1 scale 
(the three dimensions) 509 475 moveto 1 -1 scale show 1 -1 scale 
(of each color space) 509 493 moveto 1 -1 scale show 1 -1 scale 
(one observer for each) 514 569 moveto 1 -1 scale show 1 -1 scale 
(dimension to update ) 514 587 moveto 1 -1 scale show 1 -1 scale 
(field editors) 514 605 moveto 1 -1 scale show 1 -1 scale 
(field editors) 509 639 moveto 1 -1 scale show 1 -1 scale 
(Conversion Matrix) 504 359 moveto 1 -1 scale show 1 -1 scale 
(different for each space) 504 377 moveto 1 -1 scale show 1 -1 scale 
(the eight) 494 264 moveto 1 -1 scale show 1 -1 scale 
(color spaces) 494 282 moveto 1 -1 scale show 1 -1 scale 
(RGB space) 104 274 moveto 1 -1 scale show 1 -1 scale 
(CM) 124 364 moveto 1 -1 scale show 1 -1 scale 
(1) 144 364 moveto 1 -1 scale show 1 -1 scale 
(R_Obs) 64 584 moveto 1 -1 scale show 1 -1 scale 
(B_Obs) 174 584 moveto 1 -1 scale show 1 -1 scale 
(G_Obs) 119 584 moveto 1 -1 scale show 1 -1 scale 
(0.00) 69 629 moveto 1 -1 scale show 1 -1 scale 
(0.00) 129 629 moveto 1 -1 scale show 1 -1 scale 
(0.00) 184 629 moveto 1 -1 scale show 1 -1 scale 
(ColorViewer) 44 139 moveto 1 -1 scale show 1 -1 scale 
(Conversion Space ) 204 64 moveto 1 -1 scale show 1 -1 scale 
(based on XYZ color space) 204 82 moveto 1 -1 scale show 1 -1 scale 
(object to update the color area) 24 114 moveto 1 -1 scale show 1 -1 scale 
showpage
$F2psEnd
%%EndDocument
 @endspecial 525 2366 a Fi(Figure)15 b(3:)20 b(Design)15 b(of)g(the)g
(ColorEditor)g(to)q(ol)g(ICE)964 2577 y(7)p eop
%%Page: 8 9
8 bop 189 307 a Fj(space.)23 b(As)16 b(so)q(on)f(as)h(there)g(is)f(a)h(c)o
(hange)f(in)g(the)h(v)n(alues)f(of)g(this)g(color)g(space,)h(the)g(ColorView)
o(er)189 357 y(ob)r(ject)e(is)g(noti\014ed)g(of)f(this)h(c)o(hange)g(and)g
(it)g(up)q(dates)h(the)f(color)g(viewing)f(area)h(on)f(the)i(screen.)251
407 y(The)i(whole)g(algorithm)d(w)o(orks)j(as)g(follo)o(ws.)25
b(The)17 b(v)n(alues)g(in)f(the)i(three)g(dimensions)d(of)i(the)189
457 y(Con)o(v)o(ersionSpace)c(are)h(set)g(to)f(0.5,)f(0.5)h(and)g(0.5.)j(As)e
(so)q(on)g(as)f(a)g(ColorSpace)g(ob)r(ject)h(is)f(created,)189
506 y(it)g(calculates)h(its)g(lo)q(cal)f(v)n(alues)h(b)o(y)f(lo)q(oking)f(at)
i(the)g(v)n(alues)g(of)f(X,)h(Y,)f(and)h(Z)g(and)f(up)q(dates)i(itself.)251
556 y(After)20 b(the)g(initialization,)e(when)i(a)f(user)i(c)o(hanges)f(a)f
(v)n(alue)g(in)g(a)g(color)h(space,)h(either)g(b)o(y)189 606
y(disturbing)e(the)h(p)q(osition)f(of)g(a)g(scroll)p 824 606
13 2 v 15 w(bar)h(or)f(through)h(a)f(\014eld)h(editor,)h(the)f(follo)o(wing)d
(tak)o(es)189 656 y(place.)251 706 y(A)g(c)o(hange)g(in)g(v)n(alue)f(calls)h
(the)h(scroll)p 869 706 V 15 w(to\(\))f(metho)q(d.)27 b(This)17
b(metho)q(d,)f(\014rst)i(of)e(all,)h(c)o(hanges)189 756 y(the)c(lo)q(cal)f(v)
n(alues)h(to)g(new)g(v)n(alues.)18 b(Then)13 b(it)g(calls)f(the)i(routine)f
(con)o(v)o(ertT)m(oXYZ\(\))h(to)e(c)o(hange)i(the)189 805 y(v)n(alues)f(in)h
(the)g(Con)o(v)o(ersionSpace)h(ob)r(ject.)251 855 y(No)o(w)k(all)f(the)i
(color)f(spaces)h(are)g(Observ)o(ers)h(of)e(the)h(Con)o(v)o(ersionSpace)g(ob)
r(ject.)35 b(As)19 b(so)q(on)189 905 y(as)f(a)f(c)o(hange)h(is)g(observ)o
(ed,)h(a)f(color)f(space)i(calls)f(it)f(up)q(date\(\))i(metho)q(d.)29
b(The)18 b(up)q(date\(\),)i(\014rst)189 955 y(of)f(all,)g(calculates)h(its)f
(lo)q(cal)g(v)n(alues)g(b)o(y)g(lo)q(oking)f(a)i(the)g(new)g(v)n(alues)f(of)g
(X,Y,)f(and)i(Z)g(in)f(the)189 1005 y(Con)o(v)o(ersionSpace.)e(Once)11
b(the)g(new)g(v)n(alues)f(ha)o(v)o(e)g(b)q(een)h(determined,)f(the)h(v)n
(ariables)f(represen)o(ting)189 1054 y(the)i(v)n(alues)g(are)h(set)g(to)f
(these)i(new)f(v)n(alues.)k(This)12 b(setting)h(of)e(new)i(v)n(alues)f(also)f
(noti\014es)i(an)o(y)f(other)189 1104 y(Observ)o(ers)k(of)d(this)h(color)g
(Space)g(ob)r(ject.)251 1154 y(One)e(p)q(oten)o(tial)e(problem)f(here)j(is)f
(a)g(p)q(ossibilit)o(y)e(of)i(an)f(in\014nite)h(lo)q(op.)16
b(Consider)11 b(the)h(follo)o(wing)189 1204 y(scenario.)38
b(A)20 b(ColorSpace)h(ob)r(ject,)h(CS1,)f(has)g(a)f(c)o(hange)h(in)e(one)i
(of)f(its)g(dimensions.)36 b(This)189 1254 y(c)o(hange)16 b(in)f(the)h(CS1)f
(will)g(also)g(alter)g(the)h(v)n(alues)g(of)f(the)h(Con)o(v)o(ersionSpace)g
(ob)r(ject.)24 b(A)16 b(c)o(hange)189 1303 y(in)f(Con)o(v)o(ersionSpace)i(ob)
r(ject)g(alerts)g(all)e(its)h(observ)o(ers)i(to)e(up)q(date)h(themselv)o(es.)
26 b(Since)16 b(CS1)g(is)189 1353 y(also)c(an)h(observ)o(er)i(of)e(the)g(Con)
o(v)o(ersionSpace)h(ob)r(ject,)g(it)f(will)f(also)g(try)i(to)f(up)q(date)h
(itself)f(without)189 1403 y(realizing)c(that)i(it)f(w)o(as)g(the)h(one)g
(that)f(had)h(brough)o(t)f(the)h(c)o(hange)g(in)f(the)h(Con)o(v)o
(ersionSpace)g(ob)r(ject.)189 1453 y(Clearly)j(a)h(mec)o(hanism)e(is)i
(needed)i(to)e(mak)o(e)e(sure)k(that)e(a)g(ColorSpace)g(do)q(es)h(not)f(up)q
(date)h(itself)189 1503 y(when)e(it)g(w)o(as)g(the)g(one)g(that)g(had)g
(initialized)f(a)g(c)o(hange)i(in)e(the)i(Con)o(v)o(ersionSpace)f(ob)r(ject.)
19 b(This)189 1553 y(lo)q(op)d(is)g(eliminated)f(b)o(y)h(setting)h(a)g
(\015ag)f(to)h(indicate)f(that)h(I)g(am)e(the)i(initiator)e(of)h(a)h(c)o
(hange)g(in)189 1602 y(scroll)p 286 1602 V 14 w(bar\()f(or)f(\014eld)h
(editors)f(\))h(and)f(I)g(don't)g(ha)o(v)o(e)g(to)g(up)q(date)h(m)o(y)e(v)n
(alues)h(with)g(this)g(c)o(hange)h(of)189 1652 y(X,Y,)d(and)h(Z)g(in)f(the)i
(Con)o(v)o(ersionSpace)f(ob)r(ject.)189 1768 y Fg(3.2)55 b(Impleme)o(n)n
(tation)16 b(using)j(Xa)n(w)189 1845 y Fj(The)c(A)o(thena)h(widget)f
(implemen)o(tation)d(seeks)17 b(to)e(pro)o(vide)h(the)g(extensibilit)o(y)e
(pro)o(vided)i(b)o(y)f(the)189 1895 y(Observ)n(able/Observ)o(er)21
b(paradigm)c(supp)q(orted)j(in)f(In)o(terviews.)34 b(In)19
b(the)g(IV)g(implemen)o(tion,)e(a)189 1945 y(single)d(observ)o(er)h(main)o
(tains)d(a)i(color)g(data)g(state,)h(and)f(v)n(arious)g(observ)n(ables)h(pro)
o(vide)f(a)g(view)g(of)189 1994 y(this)9 b(data.)16 b(The)10
b(Xa)o(w)f(implemen)o(tatio)o(n)e(sub)q(classes)k(a)e(color)g(managemen)o(t)e
(ob)r(ject)j(\(CMSOb)r(ject\))189 2044 y(from)h(the)k(Ob)r(ject)f(class)g
(\(a)g(sup)q(erclass)h(of)e(Core\).)18 b(This)c(ob)r(ject)g(pro)o(vides)g
(resources)i(as)d(follo)o(ws:)234 2113 y(1.)22 b(An)14 b(Xcms)f(structure)j
(con)o(taining)d(CIEXYZ)i(data.)i(This)d(is)g(our)g(\\data".)234
2179 y(2.)22 b(A)c(list)h(of)f(callbac)o(ks)g(where)i(eac)o(h)f(callbac)o(k)f
(p)q(erforms)h(a)f(translation)g(to)h(a)f(giv)o(en)h(color)289
2229 y(space.)g(This)13 b(is)h(our)g(set)h(of)e(\\views".)189
2297 y(Ev)o(ery)f(set)h(of)e(color)h(space)h(con)o(trols)f(can)g(b)q(e)h
(activ)n(ated)f(or)g(deactiv)n(ated)g(b)o(y)g(a)g(toggle)f(switc)o(h)h(that)
189 2347 y(adds)h(or)h(remo)o(v)o(es)f(a)h(callbac)o(k)e(from)g(the)j(CMSOb)r
(ject)g(callbac)o(k)e(list.)k(The)d(design)g(is)f(extensible)189
2397 y(b)q(ecause)j(to)e(add)g(a)g(con)o(v)o(ersion)h(to)f(another)h(co)q(de)
g(space)h(one)e(simply)f(needs)i(to)g(add)f(a)g(callbac)o(k)189
2447 y(to)f(the)i(list.)964 2577 y Fi(8)p eop
%%Page: 9 10
9 bop 189 307 a Fh(4)69 b(Problem)o(s)21 b(Encoun)n(tered)189
406 y Fg(4.1)55 b(In)n(terViews)189 483 y Fj(In)o(terViews,)11
b(as)g(men)o(tioned)e(earlier,)h(is)h(still)e(in)h(the)g(pro)q(cess)j(of)c
(dev)o(elopmen)o(t)h(and)g(a)g(\014nal)f(v)o(ersion)189 533
y(of)i(3.1)g(has)h(not)g(b)q(een)i(released)f(y)o(et.)18 b(W)m(e)11
b(used)i(the)g(In)o(terViews)g(3.1Beta)f(v)o(ersion)g(for)g(ICE.)g(Since)189
583 y(this)i(is)f(the)i(b)q(eta)f(release,)h(some)e(problems)g(w)o(ere)i(exp)
q(ected)h(of)d(this)h(pac)o(k)n(age.)251 632 y(The)h(ma)r(jor)d(problem)i(w)o
(e)g(encoun)o(tered)j(with)d(In)o(terViews)h(3.1Beta)1371 617
y Fe(2)1404 632 y Fj(w)o(as)g(the)g(handling)e(of)189 682 y(m)o(ultiple)e
(dimensions.)17 b(Let)d(us)h(\014rst)f(describ)q(e)i(the)e(problem)f(in)g
(detail.)189 795 y Fb(4.1.1)51 b(Problem)189 872 y Fj(According)14
b(to)g(the)h(Reference)h(Man)o(ual)d([2],)g(three)i(proto)q(cols)g(supp)q
(ort)g(m)o(ultiple)d(views)i(of)g(data)189 921 y(in)f(IV3.1.)k(These)e(three)
h(proto)q(cols)e(are)g Ff(observable,)h(observer,)e Fj(and)g
Ff(adjustable)p Fj(.)1498 906 y Fe(3)251 971 y Fj(The)j(declaration)g(of)f
(dimensions)f(in)i Fa(iv/src/include/I)o(nter)o(Views)o(/geom)o(etry.)o(h)d
Fj(lo)q(oks)189 1021 y(lik)o(e)g(this:)189 1141 y Fa(typedef)20
b(unsigned)g(int)h(DimensionName;)189 1241 y(enum{)254 1290
y(Dimension_X)f(=)h(0,)g(Dimension_Y,)f(Dimension_Z,)f(Dimension_Undefine)o
(d)189 1340 y(};)189 1440 y(class)h(CoordinateSpace)f({)189
1490 y(public:)254 1540 y(enum)i({)h(x)f(=)h(0,)f(y,)g(z,)h(dimensions)e(};)
189 1589 y(};)251 1709 y Fj(In)15 b(the)h(standalone)g Fa(enum)e
Fj(ab)q(o)o(v)o(e,)h(four)g(t)o(yp)q(es)h(of)f(dimensions)f(ha)o(v)o(e)i(b)q
(een)g(de\014ned,)h(i.e,)d(Di-)189 1759 y(mension)p 340 1759
13 2 v 13 w(X,)h(Dimension)p 604 1759 V 13 w(Y,)g(Dimension)p
868 1759 V 13 w(Z)h(and)f(Dimension)p 1197 1759 V 13 w(Unde\014ned.)23
b(This)15 b(approac)o(h)g(has)189 1809 y(t)o(w)o(o)e(problems.)k(One)e
(problem)e(is)h(with)f(the)i(Adjustable)f(class)h(itself)e(and)h(the)h
(second)g(problem)189 1859 y(is)g(the)h(represen)o(tation)i(of)d(these)i
(dimensions)d(through)i(the)g Ff(WidgetKit)g Fj(class)g(in)o(terface.)24
b(Let's)189 1909 y(lo)q(ok)13 b(at)g(b)q(oth)h(these)i(problems)d
(individually)m(.)189 1983 y Fk(Adjustable)g(Problem)20 b Fj(An)11
b Ff(A)n(djustable)g Fj(ob)r(ject)h(should)e(b)q(e)i(able)f(to)g(handle)f(n)h
(dimensions.)16 b(In)289 2033 y(an)9 b(application)f(where)i(a)f(user)i(has)e
(a)h(three-dimensional)e(space,)j(an)e Ff(A)n(djustable)g Fj(ob)r(ject)h(can)
289 2083 y(b)q(e)i(used)g(as)f(suc)o(h.)18 b(Eac)o(h)12 b(dimension)d(in)i
(the)h(application's)e(3-D)h(space)h(can)g(b)q(e)f(represen)o(ted)289
2132 y(b)o(y)i(eac)o(h)i(of)e(the)h(dimensions)f(in)h(the)g(stand-alone)g
Fa(enum)f Fj(ab)q(o)o(v)o(e.)289 2188 y(No)o(w)i(let's)g(see)i(if)d(w)o(e)i
(ha)o(v)o(e)f(an)h(n-dimensional)d(space\(for)j(the)g(purp)q(ose)h(of)d(an)i
(example)e(,)289 2238 y(let's)f(assume)h(n)g(=)g(4\).)k(W)m(e)13
b(create)i(a)f(sub)q(class)h(of)e(the)h(Adjustable)g(base)h(class)f(and)g
(call)f(it)289 2288 y(FD)o(Adjustable\(for)j(F)m(our-Dimensional-Adjustable)e
(\).)27 b(W)m(e)17 b(can)g(declare)g(the)h(follo)o(wing)289
2338 y(to)13 b(ha)o(v)o(e)h(the)h(fourth)e(dimension)g(for)g(this)h(declared)
h(class.)p 75 2364 720 2 v 127 2391 a Fd(2)144 2407 y Fc(W)m(e)e(shall)i
(refer)e(to)g(this)h(as)f(IV3.1)f(for)h(the)g(rest)g(of)g(this)h(pap)q(er.)
127 2437 y Fd(3)144 2452 y Fc(F)m(or)f(explanation)j(of)d(these)g(terms,)g
(see)g(section)h(2.3)964 2577 y Fi(9)p eop
%%Page: 10 11
10 bop 289 307 a Fa(enum)21 b({)g(Dimension_W)f(=)h(5};)289
407 y(class)f(FDAdjustable)g(:)h(public)g(Adjustable)f({)289
457 y(...)289 539 y Fj(In)12 b(this)h(sub)q(class,)g(w)o(e)g(store)h(all)d
(the)i(information)d(ab)q(out)j(the)g(Dimension)p 1484 539
13 2 v 13 w(W,)f(suc)o(h)h(as)g(the)289 589 y(curren)o(t)19
b(v)n(alue)d(in)i(the)g(Dimension)p 870 589 V 13 w(W)f(etc.)30
b(No)o(w)17 b(if)g(w)o(e)g(create)i(an)e(ob)r(ject)i(of)e(the)h(t)o(yp)q(e)
289 639 y(FD)o(Adjustable)f(and)h(try)g(to)g Ff(attach)g Fj(an)f(Observ)o(er)
j(to)e(the)g(Dimension)p 1466 639 V 13 w(W,)f(w)o(e)h(create)i(a)289
689 y(serious)14 b(programming)c(error)783 674 y Fe(4)802 689
y Fj(.)289 745 y(T)m(o)k(comprehend)h(wh)o(y)f(w)o(e)h(get)g(this)g(segmen)o
(tation)f(fault,)g(let's)h(lo)q(ok)f(at)g(the)i(constructor)289
795 y(of)d(m)o(y)f(base)j(class)f(Adjustable.)289 878 y Fa(struct)20
b(AdjustableImpl)f({)289 928 y(private:)376 978 y(friend)h(class)h
(Adjustable;)376 1077 y(AdjustableInfo)e(info_[Coordinate)o(Space)o(::dim)o
(ensi)o(ons];)289 1127 y(};)289 1227 y(Adjustable::Adju)o(stab)o(le\(\))f({)
376 1276 y(impl_)j(=)g(new)g(AdjustableImpl;)376 1326 y(AdjustableImpl&)d(a)k
(=)g(*impl_;)376 1376 y(for)f(\(DimensionName)e(d)i(=)h(0;)f(d)h(<)g
(CoordinateSpace)o(::dim)o(ensio)o(ns;)616 1426 y(d++\))e({)463
1476 y(AdjustableInfo&)f(i)i(=)h(a.info_[d];)463 1526 y(i.observable_)d(=)j
(new)f(Observable;)463 1575 y(i.small_)f(=)i(1;)463 1625 y(i.large_)e(=)i(0;)
376 1675 y(})289 1725 y(})289 1808 y Fj(As)c(w)o(e)h(ha)o(v)o(e)f(seen)h(in)f
(the)h(listing)e(in)h(the)h(b)q(eginning)e(of)h(this)g(do)q(cumen)o(t,)h(the)
f(v)n(alue)g(of)289 1857 y Fa(CoordinateSpace:)o(:dim)o(ensio)o(ns)12
b Fj(is)j(3.)22 b(Th)o(us)16 b(the)g(index)f(of)g Fa(AdjustableInfo)k(info)p
1750 1857 14 2 v 289 1907 a Fj(ranges)f(from)f(0)h(to)g(2.)31
b(An)o(y)18 b(Time)f(one)h(tries)h(to)f(go)g(b)q(ey)o(ond)g(this)h(range,)g
(for)f(example)289 1957 y(trying)13 b(to)h(ha)o(v)o(e)g(a)f(fourth)h
(dimension)e(in)i(an)f(Adjustable,)h(one)g(is)g(destined)h(for)e(failure.)289
2013 y(In)d(the)h(n)o(utshell,)g(one)f(can)h(only)e(ha)o(v)o(e)i(three)g
(dimensions)e(in)h(an)h(Adjustable)f(and)g(an)o(y)g(space)289
2063 y(with)j(4)h(or)g(more)f(dimensions)f(has)i(to)g(b)q(e)g(represen)o(ted)
j(b)o(y)d(more)f(than)h(one)g(Adjustable.)189 2126 y Fk(WidgetKit)f(class)i
(Problem)21 b Fj(W)m(e)15 b(sa)o(w)h(ho)o(w)g(Adjustable)g(class)h(fails)e
(to)g(handle)h(more)f(than)289 2176 y(three)h(dimensions.)k(Let's)c(no)o(w)e
(turn)i(our)f(atten)o(tion)g(to)f(represen)o(ting)j(these)g(dimensions)289
2226 y(in)c(real)h(w)o(orld.)289 2283 y(The)e(curren)o(t)h(v)n(alue)f(of)f(a)
h(v)n(ariable)f(in)g(a)h(particular)f(dimension)g(can)h(graphically)e(b)q(e)j
(repre-)289 2332 y(sen)o(ted)h(b)o(y)f(a)h(scroll)p 605 2332
13 2 v 14 w(bar\(or)g(a)f(slider\).)18 b(W)m(e)13 b(shall)g(only)f(discuss)j
(the)f(scroll)p 1486 2332 V 15 w(bars;)f(the)h(same)289 2382
y(discussion)g(can)g(b)q(e)h(extended)g(to)f(sliders)g(also.)p
75 2410 720 2 v 127 2437 a Fd(4)144 2452 y Fc(Namely)g(a)f(segmen)o(tation)i
(fault)952 2577 y Fi(10)p eop
%%Page: 11 12
11 bop 289 307 a Fj(The)14 b(curren)o(t)h(in)o(terface)g(of)e(the)i
(WidgetKit)e(class)h(for)g(scroll)p 1270 307 13 2 v 15 w(bars)g(lo)q(oks)f
(lik)o(e)g(this:)289 384 y Fa(class)20 b(WidgetKit)g({)332
434 y(public:)376 484 y(virtual)g(Glyph*)h(hscroll_bar\(Adju)o(stabl)o(e*\))e
(const;)376 533 y(virtual)h(Glyph*)h(vscroll_bar\(Adju)o(stabl)o(e*\))e
(const;)376 633 y(virtual)h(Glyph*)h(scroll_bar_look\()o(Dimen)o(sionN)o
(ame,)1051 683 y(Adjustable*\))f(const)g(=)i(0;)376 782 y(...)289
832 y(};)289 909 y Fj(In)16 b(this)h(in)o(terface)g Ff(hscr)n(ol)r(l)p
719 909 V 15 w(b)n(ar)f Fj(alw)o(a)o(ys)g(uses)h(the)h(Dimension)p
1299 909 V 13 w(X)e(of)g(the)i(Adjustable)e(and)289 959 y(returns)e(a)f
(horizon)o(tal)f(scroll)p 756 959 V 15 w(bar.)18 b(Similarly)10
b Ff(vscr)n(ol)r(l)p 1154 959 V 14 w(b)n(ar)j Fj(alw)o(a)o(ys)f(uses)i(the)g
(Dimension)p 1719 959 V 13 w(Y)289 1009 y(of)j(the)h(Adjustable)h(and)e
(returns)j(a)e(v)o(ertical)f(scroll)p 1149 1009 V 15 w(bar.)30
b(The)19 b(only)e(metho)q(d)g(in)g(whic)o(h)289 1059 y(one)j(can)h(sp)q
(ecify)g(the)g(DimensionNam)o(e)d(for)i(an)g(Adjustable)h(is)f
Ff(scr)n(ol)r(l)p 1491 1059 V 14 w(b)n(ar)p 1561 1059 V 15
w(lo)n(ok)p Fj(.)38 b(But)289 1108 y(if)18 b(w)o(e)i(lo)q(ok)f(at)h(the)g
(implemen)o(tatio)o(n)d(of)i(this)h(metho)q(d,)g(it)f(only)g(handles)h(the)g
(cases)h(of)289 1158 y(Dimension)p 484 1158 V 13 w(X)f(and)h(Dimension)p
829 1158 V 13 w(Y,)f(for)g(whic)o(h)h(it)f(returns)i(a)e(horizon)o(tal)g(and)
g(v)o(ertical)289 1208 y(scroll)p 386 1208 V 14 w(bar)14 b(resp)q(ectiv)o
(ely)m(.)289 1266 y(This)f(clearly)f(indicates)i(the)f(limitations)d(of)i
(this)i(in)o(terface.)k(With)12 b(the)i(curren)o(t)g(in)o(terface,)289
1316 y(the)g(follo)o(wing)d(problems)i(are)i(clearly)e(visible.)319
1382 y(1.)22 b(No)14 b(dimension)e(other)j(than)g(the)g(Dimension)p
1110 1382 V 13 w(X)f(and)g(Dimension)p 1442 1382 V 13 w(Y)h(can)f(b)q(e)h
(graphi-)374 1432 y(cally)e(represen)o(ted)j(b)o(y)e(a)g(scroll)p
882 1432 V 14 w(bar.)319 1490 y(2.)22 b(One)10 b(cannot)f(represen)o(t)j
(Dimension)p 958 1490 V 13 w(X)d(of)g(an)g(Adjustable)g(through)h(a)f(v)o
(ertical)g(scroll)p 1733 1490 V 14 w(bar.)374 1540 y(Similarl)o(y)g
(Dimension)p 743 1540 V 13 w(Y)i(cannot)h(b)q(e)g(represen)o(ted)i(b)o(y)d(a)
g(horizon)o(tal)f(scroll)p 1578 1540 V 15 w(bar.)17 b(This)374
1590 y(functionalit)o(y)d(migh)o(t)f(b)q(e)j(needed)i(where)e(one)g(has)g
(more)f(than)g(t)o(w)o(o)g(dimensions)g(for)374 1640 y(an)h(Adjustable)h(and)
g(one)g(needs)h(to)e(represen)o(t)k(all)15 b(these)j(dimensions)e(horizon)o
(tally)374 1689 y(or)d(v)o(ertically)m(.)189 1804 y Fb(4.1.2)51
b(Prop)q(osed)17 b(Solution)189 1881 y Fj(Ha)o(ving)f(iden)o(ti\014ed)j(the)f
(problems)f(that)h(don't)f(allo)o(w)g(the)h(handling)f(of)g(m)o(ultiple)f
(dimensions)189 1930 y(with)d(an)h(Adjustable,)f(w)o(e)i(no)o(w)e(prop)q(ose)
i(a)e(solution)g(to)h(these)h(problems.)189 2011 y Fk(Solution)d(to)j
(Adjustable)e(class)i(problem)21 b Fj(The)f(most)e(ob)o(vious)h(solution)f
(in)h(this)h(case)g(is)289 2061 y(that)10 b(the)h(clien)o(t)g(of)e(an)i
(Adjustable)f(should)g(b)q(e)i(able)e(to)g(sp)q(ecify)h(the)g(n)o(um)o(b)q
(er)f(of)g(dimensions)289 2111 y(that)17 b(it)h(w)o(an)o(ts)f(for)h(a)f(giv)o
(en)g(adjustable.)29 b(Th)o(us)18 b(there)h(should)f(b)q(e)g(another)g
(Adjustable)289 2161 y(constructor)f(that)e(tak)o(es)h(the)g(n)o(um)o(b)q(er)
f(of)g(dimensions)f(n,)i(as)f(an)g(argumen)o(t.)22 b(Dep)q(ending)289
2211 y(on)13 b(this)h(v)n(alue)f(of)h(n,)f Fa(AdjustableInfo)19
b(info)p 1048 2211 14 2 v 29 w Fj(arra)o(y)13 b(should)h(b)q(e)h(created.)189
2277 y Fk(Solution)d(to)j(WidgetKit)f(class)h(problem)20 b
Fj(The)10 b(WidgetKit)f(class)h(in)o(terface)f(should)g(b)q(e)h(gen-)289
2327 y(eral)19 b(enough)g(to)g(handle)f(the)i(cases)g(men)o(tioned)e(in)h
(the)g(problems)f(section.)34 b(Th)o(us)20 b(the)289 2377 y(follo)o(wing)11
b(extension)j(to)g(the)h(in)o(terface)f(of)f(the)i(WidgetKit)e(class)i(is)e
(prop)q(osed.)952 2577 y Fi(11)p eop
%%Page: 12 13
12 bop 289 357 a Fa(class)20 b(WidgetKit)g({)332 407 y(public:)376
457 y(virtual)g(Glyph*)h(hscroll_bar\(Adju)o(stabl)o(e*,)964
506 y(DimensionName)e(d=Dimension_X\))g(const;)376 556 y(virtual)h(Glyph*)h
(vscroll_bar\(Adju)o(stabl)o(e*,)964 606 y(DimensionName)e(d=Dimension_Y\))g
(const;)376 706 y(virtual)h(Glyph*)h(scroll_bar_look\()o(Dimen)o(sionN)o
(ame,)1051 756 y(Adjustable*\))f(const)g(=)i(0;)376 805 y(virtual)e(Glyph*)h
(hscroll_bar_look)o(\(Dime)o(nsion)o(Name)o(,)1051 855 y(Adjustable*\))f
(const)g(=)i(0;)376 905 y(virtual)e(Glyph*)h(vscroll_bar_look)o(\(Dime)o
(nsion)o(Name)o(,)1051 955 y(Adjustable*\))f(const)g(=)i(0;)376
1054 y(...)289 1104 y(};)289 1193 y Fj(In)g(this)h(in)o(terface)g(for)f(a)g
Ff(hscr)n(ol)r(l)p 852 1193 13 2 v 15 w(b)n(ar)p Fj(,)h(one)g(can)g(also)f
(sp)q(ecify)h(the)g(dimension)e(of)h(the)289 1243 y(giv)o(en)17
b(Adjustable)i(for)f(whic)o(h)g(a)g(horizon)o(tal)g(scroll)p
1143 1243 V 14 w(bar)h(is)f(required.)32 b(Similarly)15 b(a)j(v)o(er-)289
1293 y(tical)d(scroll)p 480 1293 V 15 w(bar)h(can)g(b)q(e)h(created)g(for)f
(an)o(y)g(dimension)e(of)h(the)i(Adjustable)f(b)o(y)g(using)g(the)289
1343 y Ff(vscr)n(ol)r(l)p 408 1343 V 14 w(b)n(ar)f Fj(in)o(terface.)22
b(If)15 b(no)g(dimension)e(is)j(sp)q(eci\014ed)g(for)f(these)i(metho)q(ds,)d
(they)i(b)q(eha)o(v)o(e)289 1393 y(just)e(lik)o(e)f(the)h(original)e
Ff(hscr)n(ol)r(l)p 789 1393 V 15 w(b)n(ar)h Fj(and)h Ff(vscr)n(ol)r(l)p
1070 1393 V 14 w(b)n(ar)g Fj(metho)q(ds.)289 1451 y(Tw)o(o)f(new)h(metho)q
(ds)f Ff(hscr)n(ol)r(l)p 755 1451 V 14 w(b)n(ar)p 825 1451
V 15 w(lo)n(ok)h Fj(and)f Ff(vscr)n(ol)r(l)p 1120 1451 V 14
w(b)n(ar)p 1190 1451 V 15 w(lo)n(ok)h Fj(ha)o(v)o(e)f(b)q(een)i(added)e(so)h
(that)g(a)289 1501 y(horizon)o(tal)c(or)h(v)o(ertical)g(scroll)p
771 1501 V 15 w(bar)g(can)g(b)q(e)h(created)g(for)f(an)o(y)g(dimension)e(of)i
(an)g(Adjustable.)251 1582 y(The)i(implem)o(en)o(tation)c(of)j(these)i(metho)
q(ds)d(require)i(some)f(other)h(c)o(hanges)g(in)e(the)i(in)o(terface)g(of)189
1631 y(some)g(other)h(classes.)19 b(W)m(e)14 b(shall)f(lo)q(ok)g(at)h(these)h
(c)o(hanges)g(no)o(w.)189 1746 y Fb(4.1.3)51 b(Changes)18 b(Required)189
1823 y Fk(WidgetKit)13 b(in)o(terface)20 b Fj(Other)15 b(than)f(the)h(c)o
(hanges)f(men)o(tioned)f(ab)q(o)o(v)o(e,)g(the)i(metho)q(d)289
1881 y Ff(virtual)f(Stepp)n(er*)h(up)p 636 1881 V 16 w(mover\(A)n
(djustable*\))f(c)n(onst;)289 1939 y Fj(should)f(b)q(e)i(extended)g(to)289
1997 y Ff(virtual)f(Stepp)n(er*)h(up)p 636 1997 V 16 w(mover\(A)n
(djustable*,)f(DimensionName)i(d=Dimension)p 1576 1997 V 16
w(Y\))e(c)n(onst;)289 2055 y Fj(This)k(mak)o(es)f(sure)j(that)e(a)g(stepp)q
(er)j(at)d(the)h(end)g(of)e(a)i(scroll)p 1297 2055 V 14 w(bar)g(can)f(b)q(e)h
(used)h(for)e(an)o(y)289 2105 y(dimension)12 b(for)h(whic)o(h)h(its)g(scroll)
p 822 2105 V 15 w(bar)g(area)g(is)g(b)q(eing)f(used.)289 2163
y(Similarl)o(y)d Ff(down)p 560 2163 V 16 w(mover,)j(left)p
770 2163 V 15 w(mover)g(and)i(right)p 1074 2163 V 15 w(mover)d
Fj(are)h(also)f(extended.)20 b(The)13 b(default)289 2213 y(v)n(alue)i(of)h
(DimensionNam)o(e)e(for)h(up)p 873 2213 V 16 w(mo)o(v)o(er)f(and)i(do)o(wn)p
1193 2213 V 15 w(mo)o(v)o(er)f(is)h(Dimension)p 1571 2213 V
13 w(Y)g(and)g(for)289 2263 y(left)p 350 2263 V 14 w(mo)o(v)o(er)d(and)h
(righ)o(t)p 656 2263 V 14 w(mo)o(v)o(er)f(is)g(Dimension)p
1028 2263 V 13 w(X.)189 2329 y Fk(Slider)g(in)o(terface)20
b Fj(F)m(or)14 b(the)i(implemen)o(tation)c(of)i(horizon)o(tal)g(and)h(v)o
(ertical)g(scroll)p 1546 2329 V 15 w(bars,)g(IV3.1)289 2379
y(declares)e(t)o(w)o(o)f(sub)q(classes)i(of)e(Slider)g(class.)18
b(These)c(sub)q(classes)g(are)f(class)g(XSlider)f(and)g(YS-)289
2429 y(lider.)k(The)10 b(XSlider)g(creates)i(a)d(horizon)o(tal)g(slider)h
(area)g(in)g(the)g(scroll)p 1382 2429 V 15 w(bar)g(for)f(Dimension)p
1719 2429 V 13 w(X)952 2577 y Fi(12)p eop
%%Page: 13 14
13 bop 289 307 a Fj(while)15 b(the)i(YSlider)g(pro)o(vides)f(v)o(ertical)g
(slider)h(area)f(in)g(the)h(scroll)p 1369 307 13 2 v 15 w(bar)f(for)g
(Dimension)p 1719 307 V 13 w(Y)289 357 y(of)d(the)h(giv)o(en)g(Adjustable.)
289 415 y(This)f(limits)f(the)i(represen)o(tation)i(of)d(dimensions)g(of)g
(an)h(Adjustable)g(to)f(only)g(t)o(w)o(o)h(dimen-)289 465 y(sions,)k(namely)d
(Dimension)p 749 465 V 13 w(X)j(and)f(Dimension)p 1088 465
V 13 w(Y.)g(T)m(o)g(ensure)i(that)e(other)i(dimensions)289
515 y(can)13 b(also)g(b)q(e)h(represen)o(ted)i(b)o(y)d(scroll)p
877 515 V 15 w(bars)h(and)f(that)g(an)o(y)g(dimension)f(can)i(b)q(e)f
(represen)o(ted)289 565 y(b)o(y)19 b(a)h(v)o(ertical)g(or)g(horizon)o(tal)f
(scroll)p 902 565 V 14 w(bar,)i(w)o(e)g(create)g(t)o(w)o(o)e(sub)q(classes)j
(of)e(Slider)f(class.)289 614 y(These)g(sub)q(classes)g(are)f(kno)o(wn)g(as)f
(HSlider)h(and)g(VSlider.)29 b(The)18 b(constructors)i(of)d(these)289
664 y(classes)e(are)f(giv)o(en)f(b)q(elo)o(w:)289 803 y Fa(HSlider\(Style*,)
18 b(Adjustable*,)i(DimensionName\);)289 853 y(VSlider\(Style*,)e
(Adjustable*,)i(DimensionName\);)289 992 y Fj(The)12 b(proto)q(col)g(of)f
Ff(Slider::al)r(lot)p 792 992 V 14 w(thumb)p 916 992 V 16 w(major)p
1039 992 V 15 w(axis)h Fj(should)g(b)q(e)g(extended)i(so)e(that)g(it)g(tak)o
(es)289 1042 y(one)j(more)f(argumen)o(t)h(no)o(w.)21 b(This)16
b(last)f(argumen)o(t)f(sp)q(eci\014es)j(the)f(Horizon)o(tal)e(or)i(V)m
(ertical)289 1092 y(Direction)i(along)g(whic)o(h)h(the)g(ma)r(jor)e(axis)i
(of)f(the)h(giv)o(en)g(slider)g(is.)33 b(If)18 b(no)h(Direction)f(is)289
1142 y(sp)q(eci\014ed,)g(then)f(an)f(Unde\014ned)i(Direction)e(is)g
(considered)i(and)e(the)h(metho)q(d)f(w)o(orks)g(just)289 1191
y(lik)o(e)d(the)h(original)e(one.)189 1308 y Fg(4.2)55 b(libX11)189
1384 y Fj(The)16 b(creation)h(of)e(this)h(to)q(ol)g(w)o(as)g(also)f
(obstructed)j(b)o(y)e(some)f(en)o(tities)h(other)h(than)f(IV3.1.)24
b(The)189 1434 y(most)12 b(notable)i(of)f(these)j(is)d(libX11.)k(Here)e(is)f
(the)g(problem)f(that)h(w)o(e)g(faced)g(with)g(libX11.)189
1549 y Fb(4.2.1)51 b(Problem)189 1625 y Fj(After)16 b(ha)o(ving)e(implemen)o
(ted)f(our)i(design,)h(w)o(e)f(observ)o(ed)i(that)e(the)h(resp)q(onse)h(of)e
(ICE)h(w)o(as)f(v)o(ery)189 1675 y(slo)o(w.)28 b(After)18 b(running)g(it)f
(through)h(the)g Ff(pr)n(of)p Fj(iler,)f(w)o(e)h(found)f(the)h(routines)p
1443 1675 14 2 v 34 w Fa(XcmsSquareRoot)189 1725 y Fj(and)p
274 1725 V 31 w Fa(XcmsArcTangent)12 b Fj(to)j(b)q(e)h(the)g(culprits.)23
b(Bet)o(w)o(een)17 b(these)g(t)o(w)o(o)e(routines,)h(sometimes,)e(the)189
1775 y(execution)f(time)f(w)o(as)g(as)h(high)f(as)h(80\045.)k(These)d
(routines)f(are)h(called)e(from)f(the)i(color-con)o(v)o(ersion)189
1824 y(routines)e(of)f(the)i(libX11.)k(Discussion)11 b(with)f(Bob)h(Sc)o
(hei\015er,)i(ab)q(out)d(this)h(issue,)h(rev)o(ealed)g(that)f(the)189
1874 y(libX11)f(do)q(es)i(not)g(use)g(the)g Ff(math)g Fj(library)e(routines)j
(for)e(functions)g(lik)o(e)g(cosine,)h(sine,)g(tangen)o(t)g(etc.)189
1924 y(Instead,)k(it)e(pro)o(vides)i(its)f(o)o(wn)g(implemen)o(tatio)o(n)e
(of)h(these)j(functions.)22 b(These)17 b(implemen)o(tatio)o(n)189
1974 y(w)o(ere)d(ob)o(viously)f(m)o(uc)o(h)g(slo)o(w)o(er)h(than)f(their)i
Ff(math)f Fj(library)f(coun)o(terparts.)189 2088 y Fb(4.2.2)51
b(Solution)189 2165 y Fj(W)m(e)9 b(pro)o(vided)g(our)g(o)o(wn)g(implemen)o
(tatio)o(n)e(of)h(the)i(t)o(w)o(o)f(routines)p 1205 2165 V
25 w Fa(XcmsSquareRoot)e Fj(and)p 1612 2165 V 25 w Fa(XcmsCubeRoot)p
Fj(.)189 2215 y(W)m(e)14 b(created)i(a)f(new)g(\014le)g Fa(XcmsMath.c)e
Fj(and)h(instead)i(of)e(the)h(implemen)o(tation)c(pro)o(vided)k(b)o(y)g(the)
189 2265 y(libX11)g(v)o(ersion)h(of)g(these)i(routines,)f(w)o(e)f(in)o(v)o
(ok)o(ed)g(the)h(corresp)q(onding)g Ff(math)g Fj(library)e(routines.)189
2314 y(F)m(or)e(example,)f(our)i(implemen)o(tation)c(of)p 857
2314 V 29 w Fa(XcmsSquareRoot)h Fj(lo)q(oks)j(lik)o(e)f(this.)189
2402 y Fa(double)20 b(_XcmsSquareRoot\(a\))189 2451 y(double)g(a;)952
2577 y Fi(13)p eop
%%Page: 14 15
14 bop 189 307 a Fa({)276 357 y(return)20 b(sqrt\(a\);)189
407 y(})251 544 y Fj(W)m(e)f(also)g(pro)o(vided)g(the)h Ff(math)f
Fj(library)g(implemen)o(tati)o(on)e(of)h(the)i(routines)p 1519
544 14 2 v 36 w Fa(XcmsCosine)p Fj(,)p 189 594 V 202 594 a
Fa(XcmsSine)p Fj(,)10 b(and)p 481 594 V 27 w Fa(XcmsArcTangent)f
Fj(in)j(the)g(\014le)g Fa(XcmsTrig.c)p Fj(.)j(Tw)o(o)d(ob)r(ject)h(\014les)f
(w)o(ere)h(created)189 643 y(for)i(these)h(t)o(w)o(o)f(C)h(\014les)f(and)g
(these)i(ob)r(ject)f(\014les)g(w)o(ere)g(replaced)h(in)d(the)i(libX11.a.)21
b(This)15 b(library)189 693 y(w)o(as)e(then)i(used)g(to)f(create)h(the)f
(executable)h(for)f(ICE.)251 743 y(It)g(w)o(as)g(amazing)e(to)i(see)i(that)e
(the)h(resp)q(onse)h(of)d(our)i(to)q(ol)e(impro)o(v)o(ed)f(appreciably)i
(with)g(this)189 793 y(solution.)189 1005 y Fh(5)69 b(In)n(terViews)21
b(v)n(ersus)i(A)n(thena)g(Widgets)189 1104 y Fg(5.1)55 b(A)19
b(Basis)g(Of)g(Comparison)189 1181 y Fj(One)12 b(of)f(the)h(cen)o(tral)g
(goals)e(of)h(this)h(w)o(ork)f(is)g(to)h(gain)e(insigh)o(t)h(in)o(to)g(the)h
Newsgroups: comp.windows.interviews