🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.windows.interviews
Article #841

A Tale of 2 Toolkits: part 5 of 6

#841
From: David Sternlicht
Date: Thu, 12 Nov 1992 05:30
678 lines
48213 bytes
-- 
(strengths)h(and)e(w)o(eaknesses)189 1231 y(of)g(Xt)h(and)g(the)g(In)o
(terViews)h(to)q(olkits.)k(This)11 b(is)h(a)g(di\016cult)f(but)h(in)o
(teresting)g(prop)q(osition)g(b)q(ecause)189 1281 y(the)i(systems)f(are)h(so)
f(di\013eren)o(t.)19 b(Wh)o(y)13 b(do)g(w)o(e)g(compare)g(In)o(terViews)h
(with)f(Xt/A)o(thena)h(and)f(not,)189 1330 y(sa)o(y)m(,)j(Xt/Motif)s(?)26
b(While)16 b(it)g(is)g(true)i(that)f(Motif)e(con)o(tains)i(more)f
(functionalit)o(y)f(than)h(A)o(thena,)189 1380 y(the)f(authors)h(felt)f(that)
g(the)h(comparison)e(should)g(cen)o(ter)j(more)d(up)q(on)i(the)f(underlying)g
(systems)189 1430 y(than)h(on)g(GUIs.)25 b(Also)15 b(w)o(e)i(w)o(an)o(ted)f
(to)g(limit)e(out)i(consideration)g(to)g(freely)g(a)o(v)n(ailable)e(soft)o(w)
o(are)189 1480 y(b)q(ecause)e(impro)o(v)o(emen)o(ts)c(attributable)i(to)g
(the)h(\014nancial)f(resources)j(commercial)8 b(establishmen)o(ts)189
1530 y(p)q(ossess)13 b(w)o(ere)f(not)g(considered)g(germane)f(to)g(the)h
(base)g(tec)o(hnologies')f(essen)o(tial)h(w)o(orth.)17 b(Our)12
b(task)189 1579 y(here)k(is)e(to)h(\014nd)g(some)f(common)e(criteria)j(for)g
(comparison.)k(Both)c(systems)g(sho)o(w)g(a)g(n)o(um)o(b)q(er)f(of)189
1629 y(strengths)22 b(and)e(w)o(eaknesses.)41 b(W)m(e)20 b(ha)o(v)o(e)g(sub)q
(divided)h(the)g(areas)g(of)f(comparison)g(in)o(to)g(eigh)o(t)189
1679 y(sections,)c(Arc)o(hitecture,)i(Rendering,)e(P)o(ortabilit)o(y)m(,)d
(Sub)q(classing)j(and)g(Inheritance,)g(Geometry)189 1729 y(Managemen)o(t,)c
(Ev)o(en)o(t)i(Managemen)o(t,)f(and)g(\014nally)g(Resource)i(Managemen)o(t.)
189 1845 y Fg(5.2)55 b(Arc)n(hitecture)189 1922 y Fj(Both)15
b(systems)g(dra)o(w)g(a)g(line)g(b)q(et)o(w)o(een)h(their)g(in)o(ternal)f
(comp)q(onen)o(ts)g(and)g(the)g(comp)q(onen)o(ts)g(one)189
1972 y(sees)j(on)e(the)h(screen,)i(but)d(they)h(do)g(so)f(in)g(di\013eren)o
(t)i(places.)26 b(The)17 b(mec)o(hanism/p)q(olicy)c(organi-)189
2021 y(zational)h(dic)o(hotom)o(y)g(of)h(Xt)h(is)f(w)o(ell)g(kno)o(wn.)23
b(In)o(terViews)17 b(divides)f(its)f(core)i(functionally)d(from)189
2071 y(lo)q(ok)e(and)h(feel)h(issues)g(b)o(y)g(separating)f(the)h(w)o(orld)f
(in)o(to)g(the)h(glyph)e(hierarc)o(h)o(y)i(and)f(kits.)18 b(Kits)c(are)189
2121 y(class)g(factories)h(that)f(pro)q(duce)h(visible)e(comp)q(onen)o(ts.)18
b(The)d(organizational)d(di\013erence)k(b)q(et)o(w)o(een)189
2171 y(the)d(t)o(w)o(o)f(systems)h(is)g(that)f(in)h(Xt,)f(the)i(comp)q(osite)
d(hierarc)o(h)o(y)j(resides)g(mostly)d(b)q(elo)o(w)h(the)h(line,)f(or)189
2221 y(in)h(the)i(widget)f(library)g(whereas)h(in)f(In)o(terViews,)h(comp)q
(osite)e(managemen)o(t)f(tak)o(es)i(place)h(ab)q(o)o(v)o(e)189
2270 y(the)f(line)g(in)f(its)h(T)468 2279 y(E)491 2270 y(X)g(abstractions.)
952 2577 y Fi(14)p eop
%%Page: 15 16
15 bop 189 307 a Fg(5.3)55 b(Rendering)189 384 y Fj(Both)11
b(to)q(olkits)f(use)h(a)g(di\013eren)o(t)h(target)f(dra)o(w)o(able)f(for)g
(their)i(base)f(comp)q(onen)o(ts)f(at)h(the)g(Xlib)f(la)o(y)o(er.)189
434 y(Xt)j(widgets)g(generally)f(render)j(to)d(an)h(X)g(windo)o(w)f(whereas)i
(In)o(terViews)g(glyphs)f(render)h(to)f(an)f(X)189 483 y(windo)o(w)h(Region.)
497 468 y Fe(5)537 483 y Fj(Not)h(main)o(taining)d(a)k(windo)o(w)e(p)q(er)j
(ob)r(ject)f(allo)o(ws)e(In)o(terViews)j(to)e(supp)q(ort)189
533 y(man)o(y)i(more)h(ob)r(jects)j(than)e(are)h(used)g(in)f(a)g(t)o(ypical)g
(Xt)h(application.)30 b(The)18 b(b)q(est)i(example)d(of)189
583 y(this)c(is)h(the)g(do)q(cumen)o(t)f(editing)h(program)e
Fk(do)q(c)p Fj(.)18 b(By)13 b(using)h(a)f(glyph)g(p)q(er)i(c)o(haracter,)f
(do)q(cumen)o(ts)189 633 y(of)h(o)o(v)o(er)i(185)e(thousand)i(separate)g(C++)
g(ob)r(jects)g(can)g(b)q(e)g(easily)f(supp)q(orted)h([13)o(].)25
b(In)o(terViews)189 683 y(and)16 b(Xt)i(also)e(di\013er)h(in)g(that)g
(whereas)h(widgets)f(t)o(ypically)f(render)i(directly)f(to)g(an)g(X)g(windo)o
(w,)189 732 y(In)o(terViews)f(glyphs)f(render)i(to)f(an)f(in)o(termediate)f
(ob)r(ject)j(kno)o(wn)e(as)g(a)g(Can)o(v)n(as.)22 b(Can)o(v)n(as)15
b(is)h(an)189 782 y(ob)r(ject)e(that)f(supp)q(orts)h(a)f(structured)j
(graphics)d(proto)q(col)g(similar)e(to)i(the)h(P)o(ostScript)g(language.)189
832 y(In)o(terViews)j(also)e(supp)q(orts)i(a)f(sub)q(class)h(of)e(Can)o(v)n
(as)g(that)h(supp)q(orts)h(hardcop)o(y)f(output.)24 b(There)189
882 y(is)13 b(no)h(equiv)n(alen)o(t)f(to)h(this)g(in)f(Xt.)189
998 y Fg(5.4)55 b(P)n(ortabilit)n(y)189 1075 y Fj(In)o(terviews)11
b(and)f(Xt)g(applications)g(build)f(on)h(n)o(umerous)g(platforms.)15
b(Ho)o(w)o(ev)o(er)10 b(In)o(terViews)i(main-)189 1125 y(tains)f(a)g(p)q
(orting)g(la)o(y)o(er)g(b)q(et)o(w)o(een)i(windo)o(w)d(systems)i(not)f
(presen)o(t)i(in)e(Xt.)18 b(Pro)o(viding)10 b(this)i(division)189
1174 y(of)g(co)q(de)i(helps)g(to)f(ensure)i(that)f(an)o(y)e(in)o(v)o(estmen)o
(t)h(in)g(application)f(co)q(de)i(will)e(b)q(e)h(preserv)o(ed)j(when)189
1224 y(w)o(e)e(mo)o(v)o(e)e(on)i(the)g(next)h(windo)o(w)e(system,)g(whatev)o
(er)h(that)g(ma)o(y)e(b)q(e.)189 1340 y Fg(5.5)55 b(Sub)r(classing)19
b(And)g(Inhertiance)189 1417 y Fj(This)11 b(is)g(the)g(area)h(where)g(Xt)f
(is)g(most)f(sev)o(erely)i(de\014cien)o(t.)18 b(The)12 b(lac)o(k)e(of)h(ob)r
(ject)h(orien)o(ted)f(facilities)189 1467 y(in)g(C)g(lea)o(v)o(es)h(the)g
(task)g(of)f(implemen)o(ting)d(sub)q(classes)14 b(in)d(the)h(hands)g(of)f
(the)h(comp)q(onen)o(t)f(designer.)189 1517 y(This)18 b(can)i(b)q(e)f(a)g(v)o
(ery)g(tedious)g(and)g(error)h(prone)g(pro)q(cess.)35 b(Consider)19
b(the)h(follo)o(wing)c(2)i(co)q(de)189 1566 y(fragmen)o(ts,)12
b(comparing)g(sub)q(classing)i(in)g(Xt)g(and)g(In)o(terViews/C++.)189
1616 y Fk(C++:)189 1741 y Fa(class)20 b(Foo)i(:)f(public)42
b(SuperFoo)21 b(\(,)g(MultipleInheritan)o(ceSup)o(erFoo)o(\))e({)232
1791 y(//)j(lots)f(of)g(stuff)189 1840 y(};)189 1965 y Fk(Xt:)189
2102 y Fa(typedef)f(struct)h(_FooClassPart)e({)232 2152 y(int)i(ignore;)189
2202 y(})g(FooClassPart;)p 75 2282 720 2 v 127 2309 a Fd(5)144
2325 y Fc(I)14 b(am)h(in)o(ten)o(tionally)j(not)d(considering)i(gadgets.)22
b(They)14 b(w)o(ere)h(added)g(to)f(Xt)g(as)h(an)g(afterthough)o(t.)22
b(I)14 b(am)g(also)i(not)75 2371 y(considering)g(In)o(terViews)e(comp)q(onen)
o(ts)g(that)g(con)o(tain)g(X)f(windo)o(ws,)h(namely)g(In)o(teractor)g(and)g
(GLCon)o(text.)j(These)d(are)75 2416 y(exceptions)h(to)e(the)g(rule.)952
2577 y Fi(15)p eop
%%Page: 16 17
16 bop 189 307 a Fa(typedef)20 b(struct)h(_FooClassRec)e({)232
357 y(CoreClassPart)g(core_class;)276 407 y(...)232 457 y(SuperFooClassPart)f
(super_foo_class;)232 506 y(FooClassPart)i(foo_class;)189 556
y(})h(FooClassRec;)189 656 y(typedef)f(struct)h(FooPart)f({)232
706 y(/*)i(lots)f(of)g(stuff)g(*/)189 756 y(})g(FooPart;)189
855 y(typedef)f(struct)h(_FooRec)f({)232 905 y(CorePart)g(core;)276
955 y(...)232 1005 y(SuperFooPart)g(superfoo;)232 1054 y(FooPart)h(foo;)189
1104 y(})g(FooRec;)251 1241 y Fj(T)m(o)16 b(p)q(erform)h(a)g(single)g(sub)q
(classing)h(op)q(eration)f(in)g(Xt)g(one)h(m)o(ust)e(declare)i(4)g(C)f(t)o
(yp)q(es.)29 b(By)189 1291 y(comparison,)18 b(using)i(In)o(terViews)g(one)g
(m)o(ust)e(only)h(b)q(e)h(concerned)h(with)e(a)g(single)g(C++)h(class)189
1341 y(declaration.)251 1391 y(While)15 b(the)h(mec)o(hanism)d(for)j(sub)q
(classing)g(in)f(Xt)h(is)f(more)g(complex,)f(the)i(options)g(a)o(v)n(ailable)
189 1440 y(to)i(the)h(programmer)d(who)h(wishes)i(to)g(use)g(its)f
(inheritance)h(are)f(v)o(ery)h(limited.)29 b(T)m(o)17 b(inherit)i(a)189
1490 y(metho)q(d,)13 b(the)i(widget)f(designer)i(m)o(ust)d(pro)o(vide)i(a)f
(sp)q(ecial)h(constan)o(t)g(in)f(the)h(class)g(\014eld)f(for)g(that)189
1540 y(metho)q(d.)i(This)11 b(is)h(usually)f Fa(_XtInherit)e
Fj(cast)j(to)g(an)f(appropriate)h(t)o(yp)q(e.)17 b(These)c(kinds)f(of)f
(details)189 1590 y(are)h(hidden)f(from)f(the)i(C++)g(class)g(designer)h(b)o
(y)e(the)h(compiler.)k(When)c(one)g(sub)q(classes)h(in)e(C++,)189
1640 y(the)h(default)f(is)g(for)g(inheritance)i(to)e(b)q(e)h(implicit.)j(Xt)c
(only)g(supp)q(orts)i(single)e(inheritance)h(whereas)189 1689
y(C++)17 b(pro)o(vides)g(m)o(ultiple)e(inheritance.)27 b(In)o(terViews)18
b(as)f(w)o(ell)f(as)h Fk(ice)f Fj(tak)o(e)h(adv)n(an)o(tage)f(of)g(this)189
1739 y(feature.)25 b(Although)15 b(m)o(ultiple)f(inheritance)j(creates)h
(considerable)f(complexit)o(y)m(,)c(it)j(also)f(assists)189
1789 y(in)g(dev)o(eloping)h(our)g(applications)f(to)h(mo)q(del)f(the)i(real)f
(w)o(orld)g([8)o(].)24 b(One)17 b(of)f(the)h(most)e(p)q(o)o(w)o(erful)189
1839 y(mec)o(hanisms)e(a)o(v)n(ailable)f(to)j(the)h(C++)f(programmer)e(is)h
(the)i(virtual)e(mem)o(b)q(er)f(function.)21 b(These)189 1889
y(functions)16 b(allo)o(w)e(the)j(programmer)c(to)j(pass)h(a)e(p)q(oin)o(ter)
i(to)e(an)h(ob)r(ject)h(of)e(a)h(deriv)o(ed)h(class)f(in)o(to)189
1939 y(a)j(con)o(text)h(where)h(only)e(the)h(in)o(terface)g(of)f(the)h(base)g
(class)g(is)g(kno)o(wn,)g(and)f(exp)q(ect)i(that)f(the)189
1988 y(deriv)o(ed)12 b(classes)h(mem)o(b)q(er)e(function)g(will)g(b)q(e)h
(executed.)20 b(This)12 b(is)f(also)h(kno)o(wn)f(as)h(p)q(olymorphism,)189
2038 y(one)20 b(of)f(the)i(k)o(eys)g(to)f(programmi)o(ng)d(in)j(C++.)37
b(It)20 b(is)g(m)o(uc)o(h)f(more)g(di\016cult)g(to)h(conceiv)o(e)h(of)189
2088 y(doing)12 b(something)g(analogous)g(in)g(Xt.)18 b(First)c(of)f(all,)e
(a)i(widget)g(programmer)e(is)i(not)g(supp)q(osed)h(to)189
2138 y(access)g(Xt)f(metho)q(ds)g(outside)g(of)f(a)h(widget's)g(.c)f(\014le.)
18 b(Rather)13 b(widget)g(implemen)o(tati)o(ons)d(pro)o(vide)189
2188 y(external)17 b(or)g(public)g(functions)g(that)g(allo)o(w)e
(applications)h(to)g(use)i(metho)q(ds.)27 b(Indeed,)18 b(there)g(is)189
2237 y(no)e(widget)h(co)q(de)h(ev)o(er)g(written)f(that)g(I)g(am)f(a)o(w)o
(are)h(of)f(that)h(passes)h(around)f(and)g(manipulates)189
2287 y(a)d(widget)g(p)q(oin)o(ter)g(with)g(an)o(ything)f(near)i(the)f
(\015exibilit)o(y)f(ac)o(hiev)o(ed)i(with)e(a)h(C++)h(class)g(p)q(oin)o(ter.)
189 2337 y(While)g(one)h(can)h(implemen)o(t)c(p)q(olymorphism)g(in)j(Xt)g
(I'm)f(not)h(sure)h(y)o(ou)f(w)o(ould)f(w)o(an)o(t)h(to.)25
b(The)189 2387 y(programmer)14 b(w)o(ould)i(ha)o(v)o(e)h(to)g(b)q(e)g(v)o
(ery)g(careful.)28 b(F)m(or)16 b(example,)g(one)h(could)g(write)g(a)g
(function)189 2437 y(\(in)o(ternal)11 b(to)g(a)g(widget's)g(implemen)o
(tation)d(of)j(course\))i(that)e(accepted)i(a)f(generic)g(widget)f(p)q(oin)o
(ter)952 2577 y Fi(16)p eop
%%Page: 17 18
17 bop 189 307 a Fj(to)16 b(a)h(sub)q(class)h(of)e(Comp)q(osite)f(and)i(then)
h(in)o(v)o(ok)o(ed)e(its)g Fa(insert_child)f Fj(metho)q(d.)26
b(If)16 b(y)o(ou)g(w)o(ere)189 357 y(to)g(do)g(this)g(y)o(ou)g(had)g(b)q
(etter)h(b)q(e)g(sure)h(that)e(y)o(ou)g(ha)o(v)o(e)g(implem)o(en)o(ted)f
(this)h(function)g(and)g(\014lled)189 407 y(in)h(the)h(appropriate)g(class)h
(part)f(\014eld)f(with)h(its)g(address,)h(otherwise)g(y)o(ou)e(ha)o(v)o(e)h
(committed)e(a)189 457 y(serious)d(programmi)o(ng)c(error.)19
b(C++)13 b(b)o(y)f(comparison,)e(guaran)o(tees)k(that)e(in)o(v)o(oking)e(a)i
(sub)q(classes)189 506 y(mem)o(b)q(er)k(function)h(w)o(ould)g(resolv)o(e)i
(to)f(an)f(actual)h(function,)g(otherwise)h(the)f(program)e(simply)189
556 y(w)o(ould)d(not)h(compile.)251 606 y(Both)d(systems)f(di\013er)h(as)f
(to)g(when)h(they)g(implemen)o(t)d(their)i(inheritance.)18
b(F)m(or)10 b(Xt,)h(inheritance)189 656 y(for)19 b(a)h(sub)q(class)g(o)q
(ccurs)i(during)d(run)o(time)g(when)h(the)h(\014rst)f(widget)g(of)f(the)h
(giv)o(en)g(sub)q(class)g(is)189 706 y(dynamically)d(created.)37
b(Encoun)o(tering)21 b(the)f Fa(_XtInherit)e Fj(constan)o(t)i(tells)g(a)g
(class)g(to)g(pull)f(a)189 756 y(metho)q(d)13 b(function)h(p)q(oin)o(ter)h
(out)f(of)g(the)h(appropriate)g(\014eld)f(in)g(its)h(sup)q(erclass)h(record)g
(and)e(place)189 805 y(it)f(in)h(the)g(sub)q(class.)20 b(This)14
b(is)f(kno)o(wn)h(as)g Ff(class)h(p)n(art)f(initialization)p
Fj(.)k(By)c(con)o(trast,)g(C++)h(de\014nes)189 855 y(inheritance)j(at)g
(compilation)d(and)j(link)f(time,)g(through)h(a)f(n)o(um)o(b)q(er)h(of)f
(stratagems)g([9].)29 b(This)189 905 y(giv)o(es)14 b(the)g(C++)h(compiler)e
(the)h(abilit)o(y)f(to)h(c)o(hec)o(k)h(the)g(class)f(structure)i(for)e
(correctness,)j(as)d(w)o(ell)189 955 y(as)g(p)q(erforming)e(optimizations,)f
(suc)o(h)k(as)f(class)g(\015attening)g([10)o(].)251 1005 y(Xt)k(do)q(es)h(ho)
o(w)o(ev)o(er,)h(ha)o(v)o(e)e(a)g(feature)h(not)f(presen)o(t)i(in)e(C++.)31
b(Fields)19 b(can)f(b)q(e)h(added)f(to)h(a)189 1054 y(class)d(record)h
(without)f(recompilation)e(of)h(the)i(application)d(through)i(the)h(use)g(of)
e(an)h(extension)189 1104 y(class)e(record.)19 b(No)13 b(suc)o(h)i(mec)o
(hanism)c(exists)j(in)f(C++,)h(where)h(the)f(addition)f(of)g(a)g(class)h(mem)
o(b)q(er)189 1154 y(mandates)f(recompilation.)189 1270 y Fg(5.6)55
b(Geometry)16 b(Managemen)n(t)189 1347 y Fj(W)m(e)f(can)h(divide)f(geometry)h
(managemen)o(t)d(up)j(in)o(to)f(three)i(categories.)25 b(Structure,)17
b(or)f(ho)o(w)g(the)189 1397 y(system)k(organizes)g(aggregates)h(of)f(comp)q
(onen)o(ts,)h(la)o(y)o(out,)f(ie)g(the)h(initial)d(placemen)o(t)i(of)f(user)
189 1446 y(in)o(terface)14 b(ob)r(jects)g(when)g(the)g(application)e(is)i
(displa)o(y)o(ed)e(on)i(the)g(screen,)h(and)e(recon\014gurabilit)o(y)m(,)189
1496 y(or)d(ho)o(w)f(the)i(system)e(reorganizes)i(sub-comp)q(onen)o(ts)f
(when)h(one)f(or)g(more)f(of)g(them)g(wish)h(to)g(c)o(hange)189
1546 y(their)k(size.)189 1661 y Fb(5.6.1)51 b(Structure)189
1737 y Fj(Creating)9 b(comp)q(onen)o(ts)g(to)g(ph)o(ysically)f(manage)g
(sub-comp)q(onen)o(ts)h(is)g(accomplished)f(in)h(Xt)h(through)189
1787 y(sub)q(classing)j(from)e(the)i(Comp)q(osite)f(and)h(Constrain)o(t)f
(widget)h(classes.)19 b(Their)13 b(arc)o(hitecture)i(is)d(as)189
1837 y(follo)o(ws:)189 1887 y Fk(Comp)q(osite)i(class:)189
1974 y Fa(typedef)20 b(struct)h(_CompositeClass)o(Rec)e({)276
2024 y(CoreClassPart)41 b(core_class;)276 2073 y(CompositeClassPa)o(rt)19
b(composite_class;)189 2123 y(})i(CompositeClassRec;)189 2223
y(typedef)f(struct)h(_CompositeClass)o(Part)d({)232 2273 y(XtGeometryHandler)
g(geometry_manager;)232 2323 y(XtWidgetProc)128 b(change_managed;)232
2372 y(XtArgsProc)172 b(insert_child;)232 2422 y(XtWidgetProc)128
b(delete_child;)952 2577 y Fi(17)p eop
%%Page: 18 19
18 bop 232 307 a Fa(caddr_t)238 b(extension;)189 357 y(})21
b(CompositeClassPart)o(;)189 457 y(typedef)f(struct)h(_CompositeRec)e({)254
506 y(CorePart)h(core;)254 556 y(CompositePart)f(composite;)189
606 y(})i(CompositeRec;)189 706 y(typedef)f(struct)h(_CompositePart)d({)232
756 y(WidgetList)i(children;)g(/*)h(list)g(of)h(children)e(*/)232
805 y(Cardinal)g(num_children;)f(/*)j(number)e(on)i(list)f(*/)232
855 y(Cardinal)f(num_slots;)g(/*)h(max)h(size)f(of)g(list)g(*/)232
905 y(XtOrderProc)f(insert_position;)214 b(/*)22 b(method)e(*/)189
955 y(})h(CompositePart;)189 1081 y Fk(Constrain)o(t)13 b(class:)189
1207 y Fa(typedef)20 b(struct)h(_ConstraintClas)o(sRec)d({)276
1257 y(CoreClassPart)128 b(core_class;)276 1307 y(CompositeClassPa)o(rt)19
b(composite_class;)276 1357 y(ConstrainClassPa)o(rt)g(constraint_class;)189
1406 y(})i(ConstraintClassRec)o(;)189 1556 y(typedef)f(struct)h
(_ConstraintClas)o(sPart)d({)276 1606 y(XtResourceList)h(resources;)63
b(/*)21 b(constraint)f(resource)g(list)h(*/)276 1655 y(Cardinal)f
(num_resources;)106 b(/*)21 b(number)g(of)g('em)g(*/)276 1705
y(Cardinal)f(constraint_size;)62 b(/*)21 b(size)g(of)h(the)f(constraint)f
(struct)g(*/)276 1755 y(XtInitProc)g(initialize;)128 b(/*)21
b(method)g(*/)276 1805 y(XtWidgetProc)e(destroy;)151 b(/*)21
b(method)g(*/)276 1855 y(XtSetValuesFunc)d(set_values;)i(/*)h(method)g(*/)276
1905 y(caddr_t)f(extension;)189 1954 y(})h(ConstrantClassPart)o(;)189
2054 y(typedef)f(struct)h(_ConstraintRec)d({)276 2104 y(CorePart)i(core;)276
2154 y(CompositePart)f(composite;)276 2203 y(ConstraintPart)g(constraint;)189
2253 y(})i(ConstraintRec)e(*ConstraintWidget;)189 2353 y(typedef)h(struct)h
(_ConstraintPart)d({)276 2403 y(int)j(*empty;)189 2452 y(})g(ConstraintPart;)
952 2577 y Fi(18)p eop
%%Page: 19 20
19 bop 251 394 a Fj(Conceptually)m(,)18 b(comp)q(osite)g(widgets)g(are)h(con)
o(tainers)g(that)g(usually)e(ha)o(v)o(e)h(b)q(een)i(giv)o(en)e(the)189
444 y(resp)q(onsibilit)o(y)g(for)g(main)o(taining)e(their)j(c)o(hildren)g(in)
f(a)g(uniform)f(fashion.)32 b(All)17 b(widgets)i(m)o(ust)189
494 y(ask)e(their)h(paren)o(ts)g(to)f(mak)o(e)f(c)o(hanges)i(suc)o(h)g(as)f
(resize)i(or)e(mo)o(v)o(emen)o(t.)26 b(A)17 b(n)o(um)o(b)q(er)g(of)f(widget)
189 544 y(metho)q(ds)k(accomplish)f(this)i(suc)o(h)g(as)g(InsertChild,)i
(DeleteChild,)e(Resize,)i(QueryGeometry)m(,)189 594 y(GeometryManager,)d(and)
f(ChangeManaged.)36 b(Constrain)o(t)20 b(widgets,)h(b)o(y)f(comparison)e(are)
j(a)189 643 y(sub)q(class)11 b(of)f(Comp)q(osite)f(that)h(di\013er)h(in)f
(that)g(managemen)o(t)e(is)i(based)h(on)f(additional)e(information)189
693 y(asso)q(ciated)16 b(with)e(eac)o(h)i(c)o(hild.)21 b(This)15
b(information)d(is)j(found)g(in)g(a)g(constrain)o(t)g(structure)i(that)e(is)
189 743 y(p)q(oin)o(ted)f(to)f(b)o(y)h(a)g(\014eld)f(of)h(the)g(CoreP)o(art)h
(of)e(a)h(widgets)g(instance)g(record.)251 793 y(There)h(are)f(15)f(Widgets)g
(in)h(the)g(A)o(thena)g(library)f(that)h(sub)q(class)g(from)e(Comp)q(osite)h
(or)g(Com-)189 843 y(p)q(osite)k(along)e(with)i(Constrain)o(t.)27
b(All)16 b(of)g(them)g(are)h(abstractions)g(of)g(common)d(con)o(tainers)j(w)o
(e)189 892 y(\014nd)e(in)g(the)g(real)g(w)o(orld.)21 b(They)16
b(are)g(Bo)o(x,)e(Dialog,)f(F)m(orm,)g(P)o(aned,)j(P)o(orthole,)f(T)m(ree,)g
(Viewp)q(ort,)189 942 y(and)g(v)n(arious)g(Shells.)24 b(By)16
b(con)o(trast)h(the)f(geometry)f(managemen)o(t)f(paradigm)f(of)i(In)o
(terViews)i(is)189 992 y(far)d(more)f(complex.)19 b(Besides)d(simple)d(con)o
(tainers,)i(In)o(terViews)h(goal)d(is)i(to)f(geometricly)f(handle)189
1042 y(full)d(text)j(formatting)d(functionalit)o(y)g(along)h(the)i(lines)f
(Of)g(Donald)f(Kn)o(uths)i(T)1430 1051 y(E)1453 1042 y(X)f(system[11)o(].)17
b(As)189 1092 y(in)d(T)261 1101 y(E)285 1092 y(X,)g(Bo)o(xes)i(and)f(Glue)g
(are)h(the)g(conceptual)f(ob)r(jects)i(that)e(the)h(basic)f(rendering)h(ob)r
(ject)g(or)189 1142 y(glyph)g(is)h(organized)g(b)o(y)m(.)27
b(Comp)q(osite)16 b(comp)q(onen)o(ts)h(in)g(In)o(terViews)h(are)g(created)g
(b)o(y)f(in)o(v)o(oking)189 1191 y(mem)o(b)q(er)11 b(functions)i(of)f(the)i
(La)o(y)o(outKit)e(class.)18 b(Kits)13 b(can)g(b)q(e)h(view)o(ed)f(as)g(soft)
o(w)o(are)g(factories)g(that)189 1241 y(organize)e(the)i(disp)q(ensing)f(of)f
(ob)r(jects.)18 b(An)12 b(abbreviated)g(list)g(of)f(La)o(y)o(outKits)g(comp)q
(osite)g(ob)r(jects)189 1291 y(include)16 b(b)q(o)o(x,)h(o)o(v)o(erla)o(y)m
(,)e(dec)o(k,)j(bac)o(k,)e(fron)o(t,)h(glue,)g(discretionary)m(,)f(strut,)i
(space,)g(cen)o(ter,)g(\014xed,)189 1341 y(\015exible,)e(natural,)h(margin,)d
(stretc)o(h,)19 b(and)d(span,)h(9)f(mem)o(b)q(er)f(functions,)i(all)e(of)h
(whic)o(h)g(hea)o(vily)189 1391 y(re\015ect)g(the)g(needs)g(of)f(do)q(cumen)o
(t)f(formatting.)20 b(I)15 b(w)o(ould)f(argue)h(that)g(the)h(In)o(terViews)g
(mo)q(del)d(is)189 1440 y(sup)q(erior,)f(b)q(ecause)i(the)e(page)f(la)o(y)o
(out)g(mo)q(del)f(subsumes)i(the)g(simpler)f(mo)q(del)f(of)h(Xt)h(and)f(A)o
(thena.)189 1490 y(This)i(allo)o(ws)g(for)h(more)e(sophisticated)j(sc)o
(hemes)f(of)g(geometry)f(managemen)o(t.)189 1605 y Fb(5.6.2)51
b(La)o(y)o(out)189 1681 y Fj(Placemen)o(t)19 b(of)h(ob)r(jects)i(in)d(Xt)i(o)
q(ccurs)h(throughout)e(the)h(phases)g(of)f(widget)g(creation,)i(man-)189
1731 y(agemen)o(t,)16 b(and)g(\014nally)g(realization.)26 b(In)16
b(the)i(creation)f(phase,)h(after)f(all)e(widgets)i(in)o(v)o(ok)o(e)f(their)
189 1781 y Fa(class_initialize)11 b Fj(metho)q(ds,)j(widgets)h(whose)g(paren)
o(ts)h(are)f(Constrain)o(ts)g(ha)o(v)o(e)g(a)f(constrain)o(t)189
1831 y(record)j(allo)q(cated)e(and)h(its)g(address)h(stored)g(a)o(w)o(a)o(y)m
(.)22 b(If)16 b(a)f(widget's)h(paren)o(t)g(is)g(a)g(comp)q(osite,)f(the)189
1881 y(in)o(trinsics)e(puts)h(itself)f(in)o(to)g(its)g(paren)o(t's)h(c)o
(hildren)g(list)f(b)o(y)g(calling)f(the)i(paren)o(t's)g Fa(insert_child)189
1930 y Fj(metho)q(d.)i(Managemen)o(t)10 b(is)g(the)i(pro)q(cess)h(b)o(y)d
(whic)o(h)h(lists)g(of)f(widgets)h(are)h(added)f(to)g(the)g(geometry)189
1980 y(managed)e(set)k(of)d(their)i(paren)o(t)g(Comp)q(osite.)k(Realization)
10 b(is)h(the)h(pro)q(cess)h(of)e(creating)g(a)h(widget's)189
2030 y(X)i(windo)o(w)f(to)h(the)h(screen.)20 b(After)15 b(a)f(series)h(of)f
(calls)g(to)f(create)j(widgets)e(and)g(manage)f(subtrees,)189
2080 y(an)h(application)g(has)h(a)g(tree)h(of)f(unrealized)g(widgets,)g(some)
f(of)h(whic)o(h)g(are)g(managed)e(and)i(some)189 2130 y(of)g(whic)o(h)h(are)h
(not.)24 b(Comp)q(osite)15 b(realization)g(is)h(ac)o(hiev)o(ed)g(b)o(y)g(in)o
(v)o(oking)f(the)h Fa(change_managed)189 2180 y Fj(metho)q(d)f(for)g(eac)o(h)
h(c)o(hild)g(of)f(a)g(comp)q(osite)g(with)h(an)o(y)f(managed)f(c)o(hildren.)
24 b(This)16 b(is)f(done)h(in)g(re-)189 2229 y(cursiv)o(e)j(p)q(ost-order.)35
b(Therefore)20 b(la)o(y)o(out)e(starts)i(at)e(the)i(lea)o(v)o(es)f(of)f(the)i
(comp)q(osite)e(hierarc)o(h)o(y)189 2279 y(and)f(w)o(orks)g(up)o(w)o(ards.)27
b(This)17 b(lets)h(la)o(y)o(out)e(algorithms)e(kno)o(w)j(what)g(the)h
(preferred)g(size)g(of)f(the)189 2329 y(c)o(hildren)e(should)g(b)q(e.)23
b(Changes)16 b(can)g(ripple)f(up)g(and)h(do)o(wn)f(the)h(tree,)g(but)g(since)
g(a)f(widget)g(can)189 2379 y(not)d(request)i(new)e(geometry)g(as)g(a)g
(result)h(of)e(b)q(eing)h(resized)i(the)f(pro)q(cess)h(is)e(guaran)o(teed)h
(to)f(ev)o(en-)189 2429 y(tually)f(terminate.)17 b(I)c(should)g(note)g(here)h
(that)f(creating)g(but)g(not)g(managing)d(widgets)j(is)g(a)f(useful)952
2577 y Fi(19)p eop
%%Page: 20 21
20 bop 189 307 a Fj(tec)o(hnique)17 b(b)o(y)e(whic)o(h)h(the)h(Xt)f
(applications)f(programmer)f(can)j(create)g(large)f(structures,)j(suc)o(h)189
357 y(as)12 b(men)o(us)g(b)q(efore)h(he)g(really)f(needs)i(them,)e(and)g
(then)h(quic)o(kly)f(displa)o(y)g(them)f(on)i(the)g(screen.)19
b(No)189 407 y(comparable)12 b(mec)o(hanism)g(exists)i(in)g(In)o(terviews.)
251 457 y(The)f(In)o(terViews)h(la)o(y)o(out)d(system)h(is)g(quite)h
(di\013eren)o(t)g(in)g(nature.)18 b(Glyph)11 b(la)o(y)o(out)h(and)g(render-)
189 506 y(ing)h(tak)o(es)i(place)g(in)f(3)h(phases,)g(corresp)q(onding)g(to)g
(three)h(mem)o(b)q(er)c(functions.)21 b(I)14 b(will)f(call)h(these)189
556 y(the)e(requisition,)f(allo)q(cation,)f(and)i(dra)o(wing)f(phases.)18
b(These)13 b(phases)g(corresp)q(ond)g(to)e(the)i(3)e(glyph)189
606 y(mem)o(b)q(er)h(functions)i(Glyph::request,)f(Glyph::allo)q(cate,)e(and)
j(Glyph::dra)o(w.)251 656 y(Requisition)i(phase:)26 b(In)18
b(the)g(\014rst)g(phase)g(glyphs)f(mak)o(e)f(their)i(space)h(needs)f(kno)o
(wn.)29 b(The)189 706 y(outermost)12 b(glyph)g(has)h(its)g(request)i(mem)o(b)
q(er)c(in)o(v)o(ok)o(ed,)h(passing)h(in)g(a)f(Requisition)g(ob)r(ject.)19
b(Req-)189 756 y(uisitions)14 b(ob)r(jects)i(con)o(tain)f(information)d(suc)o
(h)k(as)f(ho)o(w)g(m)o(uc)o(h)e(space)k(a)d(glyph)h(needs,)h(and)f(ho)o(w)189
805 y(m)o(uc)o(h)d(they)j(are)f(willing)e(to)i(compromise)e(b)o(y)i
(shrinking)f(or)h(stretc)o(hing.)20 b(Con)o(tainer)13 b(glyphs)h(call)189
855 y(the)h(request)i(mem)o(b)q(ers)c(of)i(their)g(c)o(hildren)g(to)g
(compute)f(their)h(Requisitions,)f(whic)o(h)h(are)g(stored)189
905 y(a)o(w)o(a)o(y)d(for)i(later.)251 955 y(Allo)q(cation)e(phase:)18
b(In)13 b(the)h(second)h(phase)f(the)f(outermost)g(glyph)g(has)g(its)g(allo)q
(cate)g(mem)o(b)q(er)189 1005 y(function)d(in)o(v)o(ok)o(ed,)f(passing)i(in)f
(an)g(Allo)q(cation)f(ob)r(ject.)18 b(Allo)q(cations)9 b(con)o(tain)h(the)h
(size)g(of)f(a)g(glyph)189 1054 y(that)j(is)f(actually)g(giv)o(en.)17
b(Con)o(tainer)c(glyphs)g(call)f(the)h(allo)q(cate)f(mem)o(b)q(ers)g(of)g
(their)h(c)o(hildren)g(and)189 1104 y(use)19 b(the)g(previously)g(stored)h
(Requisiton)e(information)d(to)k(compute)f(their)h(Allo)q(cation.)31
b(This)189 1154 y(information)11 b(is)i(also)h(stored)g(a)o(w)o(a)o(y)m(.)251
1204 y(Dra)o(wing)f(phase:)20 b(In)14 b(the)i(third)e(and)g(\014nal)g(phase)h
(the)g(outermost)f(glyphs)g(dra)o(w)h(mem)o(b)q(er)d(is)189
1254 y(in)o(v)o(ok)o(ed,)i(passing)h(it)g(a)g(Can)o(v)n(as)g(ob)r(ject)h(as)f
(w)o(ell)g(as)g(an)g(Allo)q(cation.)21 b(Con)o(tainer)15 b(glyphs)g(in)o(v)o
(ok)o(e)189 1303 y(the)f(dra)o(w)f(mem)o(b)q(ers)f(of)h(their)h(c)o(hildren)f
(causing)h(them)e(to)h(b)q(e)h(dra)o(wn)g(on)f(the)h(Can)o(v)n(as)f(using)g
(the)189 1353 y(geometry)g(information)e(sa)o(v)o(ed)j(in)f(the)i(Allo)q
(cation.)251 1403 y(I)10 b(\014nd)g(the)h(In)o(terViews)g(system)f(to)g(b)q
(e)g(more)f(symmetrical)f(and)i(elegan)o(t.)17 b(Again)9 b(C++)h(assists)189
1453 y(here.)20 b(Geometry)13 b(managemen)o(t)e(is)j(a)g(matter)g(of)f
(mixing)f(functionalit)o(y)g(with)i(information)d(and)189 1503
y(language)f(supp)q(ort)i(of)f(this)h(is)f(the)h(implemen)o(tation)c(of)j
(the)h(Requisition)f(and)g(Allo)q(cation)f(classes)189 1553
y(is)j(sup)q(erior.)189 1667 y Fb(5.6.3)51 b(Recon\014gurabilit)o(y)189
1744 y Fj(Both)18 b(systems)h(supp)q(ort)g(the)g(notion)f(of)g(adding)f(and)i
(deleting)f(a)g(c)o(hild)g(from)f(its)h(paren)o(t)h(ag-)189
1793 y(gregate.)29 b(Xt)17 b(de\014nes)i(2)e(metho)q(ds)g(in)g(the)h(Comp)q
(osite)e(widget)i(class)g(to)f(do)g(this,)h(namely)d(In-)189
1843 y(sertChild)g(and)g(DeleteChild.)22 b(In)o(terViews)17
b(accomplishes)d(this)h(through)h(6)f(mem)o(b)q(er)e(functions)189
1893 y(in)d(the)i(Glyph)e(class,)h(namely)e(app)q(end,)j(prep)q(end,)g
(insert,)g(remo)o(v)o(e,)e(replace,)i(and)f(c)o(hange.)17 b(Again)189
1943 y(w)o(e)d(see)h(that)f(the)g(In)o(terViews)h(mec)o(hanism)d(subsumes)i
(the)h(Xt)f(mo)q(del.)251 1993 y(Both)21 b(systems)f(pro)o(vide)g
(\015exibilit)o(y)f(when)i(a)f(c)o(hilds)g(geometry)f(needs)j(con\015ict)f
(with)f(the)189 2043 y(paren)o(ts)13 b(managemen)o(t)c(p)q(olicy)m(.)16
b(In)c(Xt)h(this)f(is)g(accomplished)f(through)h(the)g(c)o(hilds)g(in)o(v)o
(o)q(cation)f(of)189 2092 y(the)h(paren)o(ts)h(GeometryManger)e(metho)q(d.)17
b(The)12 b(paren)o(t)h(can)f(return)h(XtGeometryY)m(es)f(in)f(whic)o(h)189
2142 y(case)i(the)g(c)o(hild)e(can)h(resize.)19 b(Returning)12
b(XtGeom)o(tryDone)f(to)h(the)h(c)o(hild)f(means)f(Xt)h(has)h(already)189
2192 y(accomplished)g(the)h(resize.)20 b(XtGeom)o(tryNo)12
b(constitutes)j(a)f(denial)f(of)g(the)i(request.)251 2242 y(In)o(terViews)d
(dictates)f(recon\014gurabilit)o(y)f(through)g(the)h(alignmen)o(t)d(op)q
(erations)j(of)f(the)h(La)o(y)o(out)189 2292 y(kit.)17 b(These)e(op)q
(erations)f(a\013ect)h(a)f(glyphs)f(Requisition.)k(La)o(y)o(out::cen)o(ter)d
(aligns)e(a)i(glyphs)f(origin)189 2341 y(in)f(the)i(request/allo)q(cate)g
(pro)q(cess)h(describ)q(ed)h(earlier.)i(La)o(y)o(out::\014xed)12
b(mak)o(e)f(glyphs)i(ridged)g(and)189 2391 y(unresizable.)20
b(La)o(y)o(out::\015exible)13 b(mak)o(es)h(them)f(stretc)o(hable)j(and)f
(shrink)n(able.)k(Margins)14 b(can)h(also)189 2441 y(b)q(e)c(sp)q(eci\014ed.)
19 b(User)12 b(in)o(terface)f(ob)r(jects)h(can)f(b)q(e)h(managed)d(lik)o(e)h
(c)o(haracters)j(in)d(formatting)f(system)952 2577 y Fi(20)p
eop
%%Page: 21 22
21 bop 189 307 a Fj(b)o(y)16 b(using)h(the)h(Discretionary)m(,)f(Comp)q
(osition,)e(and)i(Comp)q(ositor)e(classes.)29 b(While)16 b(all)f(of)i(these)
189 357 y(tec)o(hniques)f(create)h(a)e(\015exible)g(system)g(for)g(the)h(GUI)
f(designer,)h(the)g(text)g(formatter)f(paradigm)189 407 y(will)9
b(presen)o(t)k(a)e(certain)h(learning)e(curv)o(e)i(to)f(the)h(v)n(ast)f(ma)r
(jorit)o(y)e(of)h(engineers)j(who)e(grew)g(up)h(using)189 457
y(the)i(managemen)o(t)d(tec)o(hnique)k(found)f(in)o(t)f(the)i(in)e(the)i
(more)d(traditional)h(Xt)h(widget)g(libraries.)189 573 y Fg(5.7)55
b(Ev)n(en)n(t)19 b(Managemen)n(t)189 649 y Fj(Ev)o(en)o(ts)e(constitute)g
(the)g(dynamic)d(asp)q(ect)k(of)e(windo)o(w)f(systems.)25 b(The)17
b(X)g(windo)o(w)e(system)h(de-)189 699 y(\014nes)e(17)f(basic)h(ev)o(en)o(t)g
(t)o(yp)q(es)h(but)f(this)f(n)o(um)o(b)q(er)g(b)q(elies)h(the)g(complexit)o
(y)e(of)h(ev)o(en)o(t)h(managemen)o(t.)189 749 y(Therefore)j(it)e(is)g(essen)
o(tial)h(to)g(pro)o(vide)f(go)q(o)q(d)h(to)q(ols)f(for)g(organizing)g(an)g
(applications)g(reactions)189 799 y(to)h(the)g(ev)o(en)o(ts)i(deliv)o(ered.)
25 b(Before)17 b(to)q(olkits)f(arriv)o(ed,)g(ev)o(en)o(t)h(programmi)o(ng)c
(in)j(the)h(X)f(windo)o(w)189 849 y(system)c(consisted)h(of)f(nothing)g(more)
f(than)h(creating)h(a)f(C)h(switc)o(h)f(statemen)o(t)h(in)e(the)i(main)e(ev)o
(en)o(t)189 899 y(lo)q(op)16 b(of)g(a)g(program.)26 b(I)17
b(still)e(ha)o(v)o(e)i(fond)f(memories)f(of)h(programming)e(in)i(this)h
(fashion.)26 b(Both)189 948 y(In)o(terViews)21 b(and)e(Xt)h(ha)o(v)o(e)f(an)h
(the)g(notion)f(of)g(an)h(ev)o(en)o(t)g(structure.)38 b(Of)19
b(course)i(Xt)f(simply)189 998 y(uses)e(the)f(XEv)o(en)o(t)h(struct,)g(while)
e(In)o(terViews)i(pro)o(vides)f(a)g(windo)o(w)f(system)h(indep)q(enden)o(t)h
(ab-)189 1048 y(straction)g(called)f(the)i(Ev)o(en)o(t)f(class.)30
b(In)18 b(Xt,)h(one)f(abstracts)h(the)f(ev)o(en)o(t)h(lo)q(op)e(b)o(y)g(pro)o
(viding)g(a)189 1098 y(series)j(of)e(functions)h(kno)o(wn)f(as)h(ev)o(en)o(t)
g(handlers)g(and)g(registering)g(them)f(with)g(the)h(in)o(trinsics)189
1148 y(using)d(the)h(XtAddEv)o(en)o(tHandler)g(function.)26
b(In)o(terViews)17 b(pro)o(vides)g(the)g(Handler)f(class)h(to)f(ef-)189
1197 y(fect)h(ev)o(en)o(t)g(managemen)o(t.)23 b(Handlers)17
b(are)g(ob)r(jects)g(that)g(are)f(passed)i(an)e(ev)o(en)o(t)h(to)f(pro)q
(cess,)j(in)189 1247 y(m)o(uc)o(h)13 b(the)h(same)g(w)o(a)o(y)f(as)i(Xt)f(ev)
o(en)o(t)h(handlers.)k(Ho)o(w)o(ev)o(er)c(In)o(terViews)h(pro)o(vides)e(some)
f(in)o(terest-)189 1297 y(ing)g(sub)q(classes)j(of)e(Handler)g(that)h(pro)o
(vide)f(additional)e(functionalit)o(y)m(.)17 b(InputHandlers)e(pro)o(vide)189
1347 y(the)i(programmer)e(with)h(a)h(highly)f(con\014gurable)h(fo)q(cus)g
(managemen)o(t)d(system)j(for)f(mouse)g(and)189 1397 y(k)o(eyb)q(oard)e
(input.)21 b(Essen)o(tially)14 b(one)h(is)f(pro)o(vided)h(with)f(a)g(tree)i
(structure)h(of)d(input)h(ob)r(jects)g(and)189 1446 y(a)i(mec)o(hanism)e(for)
i(tra)o(v)o(ersing)g(that)g(tree.)30 b(The)17 b(class)h(proto)q(col)f(allo)o
(ws)f(y)o(ou)h(to)g(c)o(hange)h(fo)q(cus)189 1496 y(b)o(y)e(tra)o(v)o(ersing)
g(that)h(tree.)26 b(InputHandlers)18 b(talk)d(up)i(ph)o(ysical)f(space,)h
(and)f(participate)h(in)f(the)189 1546 y(allo)q(cation)f(proto)q(col.)27
b(InputHandler's)17 b(share)h(with)e(the)i(P)o(atc)o(h)f(class)g(an)g(abilit)
o(y)e(to)i(to)f(cause)189 1596 y(la)o(y)o(out)d(to)h(c)o(hange)g(b)o(y)h(in)o
(v)o(oking)d(their)j(redra)o(w)f(mem)o(b)q(er.)k(Indeed,)d
(InputHandler::redra)o(w)f(and)189 1646 y(P)o(atc)o(h::redra)o(w)d(are)h(imp)
q(ortan)o(t)e(metho)q(ds)h(in)h(that)f(they)h(e\013ect)i(\\damage")9
b(on)j(the)g(can)o(v)n(as)f(where)189 1696 y(glyphs)j(are)h(b)q(eing)g(dra)o
(wn.)20 b(Damage)13 b(in)h(In)o(terViews)i(is)e(the)h(mec)o(hanism)e(b)o(y)h
(whic)o(h)h(glyphs)f(are)189 1745 y(redra)o(wn.)28 b(In)16
b(order)i(to)f(redra)o(w)h(a)e(glyph)g(one)i(damages)d(an)i(ob)r(ject)h(kno)o
(wn)e(as)h(an)g(extension,)189 1795 y(whic)o(h)c(comprises)h(the)g(geometry)f
(of)g(the)h(glyph)f(on)g(the)h(can)o(v)n(as.)k(Extensions)d(are)f
(initialized)e(in)189 1845 y(the)k(glyph)f(allo)q(cation)g(phase.)24
b(Can)o(v)n(as)16 b(damage)e(is)i(somewhat)f(analogous)f(to)i(the)h(the)f
(exp)q(ose)189 1895 y(widget)i(metho)q(d)g(in)g(Xt,)i(except)g(it)f(w)o(ould)
f(not)g(b)q(e)i(unreasonable)f(to)g(use)g(this)g(tec)o(hnique)h(in)189
1945 y(ones)e(application,)e(instead)i(of)f(merely)f(refreshing)j(a)e(windo)o
(w.)28 b(Indeed)18 b(it)f(is)h(p)q(ossible)f(for)h(no)189 1994
y(damage)c(to)j(o)q(ccur)g(when)g(an)g(obscured)h(In)o(terViews)f
(application)e(is)i(p)q(op)q(ed)g(to)f(the)h(fron)o(t)g(of)f(a)189
2044 y(windo)o(w)c(stac)o(k.)18 b(Characters)c(do)f(not)f(damage)f(the)j(can)
o(v)n(as)e(when)i(they)f(are)g(exp)q(osed.)19 b(Resizeing)189
2094 y(a)13 b(application)f(that)h(con)o(tains)h(a)f(slider)g(will)f(cause)j
(damage)c(to)i(the)h(can)o(v)n(as)g(b)q(ecause)h(the)f(size)g(of)189
2144 y(the)g(th)o(um)o(b)f(needs)i(to)f(c)o(hange.)709 2129
y Fe(6)251 2194 y Fj(Although)k(In)o(terViews)h(presen)o(ts)h(some)d(go)q(o)q
(d)h(ideas)g(Xt)h(main)o(tains)d(a)i(p)q(erformance)g(edge)189
2243 y(thorough)e(its)h(tigh)o(ter)g(coupling)f(with)g(the)h(X)g(system.)27
b(Clien)o(ts)16 b(can)h(request)i(that)d(the)i(serv)o(er)189
2293 y(compress)i(its)g(motion)e(ev)o(en)o(ts,)k(generating)e(them)g(only)f
(when)i(the)f(p)q(oin)o(ter)h(starts)g(or)f(stops)189 2343
y(mo)o(ving.)32 b(Suc)o(h)20 b(gran)o(ularit)o(y)e(of)h(con)o(trol)h(w)o
(ould)e(violate)h(In)o(terViews)i(X)e(indep)q(endence,)k(but)p
75 2382 720 2 v 127 2409 a Fd(6)144 2425 y Fc(The)13 b(in)o(ternal)i
(represen)o(tation)g(of)e(a)g(slider)i(con)o(tains)f(a)f(th)o(um)o(b)h(P)o
(atc)o(h.)952 2577 y Fi(21)p eop
%%Page: 22 23
22 bop 189 307 a Fj(results)15 b(in)e(slo)o(w)o(er)h(programs.)251
357 y(Both)i(systems)h(pro)o(vide)f(the)g(abilit)o(y)f(to)h(react)h(to)f
(\014le)g(IO)g(and)g(to)g(in)o(v)o(ok)o(e)f(functions)i(based)189
407 y(on)f(the)h(expiration)f(of)g(a)g(timer.)25 b(Xt)17 b(do)q(es)g(this)g
(b)o(y)f(registering)h(input)f(handlers)h(and)g(timeout)189
457 y(pro)q(c's)e(with)g(the)g(functions)g(XtAppAddInputHandler)h(and)f
(XtAppAddTimeOut.)20 b(Xt)c(input)189 506 y(handlers)f(are)f(sp)q
(eci\014cally)h(useful)g(in)f(designing)f(graphical)h(in)o(terfaces)h(for)f
(standard)h(unix)f(util-)189 556 y(ities)g([12)o(].)20 b(In)o(terViews)15
b(pro)o(vides)g(these)h(mec)o(hanisms)d(through)h(the)h(IOHandler)g(class,)g
(namely)189 606 y(the)d Fk(inputReady)p Fj(,)d Fk(outputReady)p
Fj(,)g(and)j Fk(timerExpired)c Fj(mem)o(b)q(ers.)17 b(Xt)12
b(ho)o(w)o(ev)o(er,)g(pro)o(vides)189 656 y(the)i(capabilit)o(y)f(to)h(use)h
(time)d(that)i(w)o(old)f(otherwise)i(b)q(e)g(lost)f(w)o(aiting)e(for)i(ev)o
(en)o(ts)h(b)o(y)f(registering)189 706 y(w)o(ork)h(pro)q(cedures)j(through)e
(the)g(XtAppAddW)m(orkPro)q(c)h(function)e(call.)23 b(No)16
b(suc)o(h)h(mec)o(hanism)189 756 y(is)c(a)o(v)n(ailable)f(in)h(In)o
(terViews.)251 805 y(Another)j(ma)r(jor)e(strength)j(of)d(Xt)i(o)o(v)o(er)f
(In)o(terViews)i(is)e(the)h(translation)f(table,)g(action)g(pro-)189
855 y(cedure)g(mec)o(hanism)c(made)h(a)o(v)n(ailable)f(through)j(the)g(In)o
(trinsic's)f(resources.)21 b(Using)13 b(this)g(one)h(can)189
905 y(write)j(a)f(n)o(um)o(b)q(er)h(of)f(functions)h(that)g(p)q(erform)f(v)n
(arious)g(jobs,)h(and)f(bind)h(them)f(at)h(run)o(time)e(to)189
955 y(v)n(arious)e(ev)o(en)o(ts.)19 b(As)14 b(with)g(w)o(orkpro)q(cs)g(In)o
(terViews)h(pro)o(vides)g(no)e(suc)o(h)i(capabilit)o(y)m(.)251
1005 y(This)g(can)g(b)q(e)g(useful)g(in)g(designing)f(graphical)g(in)o
(terfaces)i(for)e(standard)i(unix)e(utilities)g([12)o(].)189
1054 y(Xt)20 b(pro)o(vides)h(the)f(XtAddInput)h(call.)37 b(In)o(terViews)21
b(pro)o(vides)g(the)g(Dispatc)o(her)f(class.)38 b(Both)189
1104 y(systems)13 b(supp)q(ort)g(handling)f(timeouts,)f(and)i(w)o(orkpro)q
(cs.)18 b(In)o(terViews)c(lac)o(ks)f(a)g(notion)f(of)g(trans-)189
1154 y(lation)g(tables)i(and)g(accelerators.)19 b(this)14 b(is)g(bad.)k(Also)
13 b(In)o(terViews)i(has)f(no)g(notion)f(of)g(selections,)189
1204 y(although)g(this)h(is)f(curren)o(tly)i(b)q(eing)f(considered.)189
1320 y Fg(5.8)55 b(Resource)18 b(Managemen)n(t)189 1397 y Fj(Resource)e
(managemen)o(t)d(is)j(an)f(area)h(where)g(Xt)g(and)f(In)o(terViews)i
(di\013er)f(substan)o(tially)m(.)21 b(While)189 1446 y(the)12
b(In)o(terViews)i(paradigm)c(is)i(organized)g(in)g(a)f(substan)o(tially)h
(di\013eren)o(t)h(manner)e(than)h(Xt.)18 b(I)12 b(am)189 1496
y(not)h(con)o(vinced)i(that)f(it)f(is)h(sup)q(erior.)251 1546
y(The)e(ma)r(jor)e(conceptual)j(di\013erence)g(b)q(et)o(w)o(een)h(the)e
(systems)g(is)f(that)h(the)h(Xt)f(resource)i(system)189 1596
y(is)20 b(build)f(around)h(the)h(ph)o(ysical)f(organization)f(of)g(an)h
(application)f(whereas)j(In)o(terViews)f(has)189 1646 y(c)o(hosen)g(to)g
(create)h(a)e(separate)i(or)f(logical)e(hierarc)o(h)o(y)m(.)38
b(Whereas)21 b(ph)o(ysical)g(structure)h(in)f(an)189 1696 y(In)o(terViews)15
b(application)e(is)h(em)o(b)q(o)q(died)f(in)h(its)g(glyph)g(hierarc)o(h)o(y)m
(,)f(logical)g(or)h(resource)i(structure)189 1745 y(is)d(managed)g(b)o(y)g(a)
h(separate)h(class)f(kno)o(wn)g(as)g(a)f(St)o(yle.)251 1795
y(Xt's)19 b(resource)i(mec)o(hanism)c(has)i(pro)o(v)o(en)h(itself)f(in)f(the)
i(real)f(w)o(orld)g(and)g(is)g(a)g(ma)r(jor)e(rea-)189 1845
y(son)g(for)g(the)h(to)q(olkits)f(success.)32 b(It)17 b(starts)i(with)e(the)h
(Xrn)g(calls)f(a)o(v)n(ailable)e(in)i(Xlib,)g(and)g(giv)o(es)189
1895 y(the)c(application)e(programmer)g(substan)o(tial)h(functionalit)o(y)f
(b)o(y)h(simply)f(incorp)q(orating)h(a)h(certain)189 1945 y(widget)k(in)o(to)
f(his)h(application)f(and)h(setting)h(its)f(resources.)30 b(Both)17
b(to)q(olkits)g(allo)o(w)e(the)j(user)g(to)189 1994 y(pro)o(vide)13
b(resources)k(on)c(the)i(command)c(line)i(and)h(in)g(a)f(database)i(\014le)
1315 1979 y Fe(7)1334 1994 y Fj(.)j(Both)c(systems)g(supp)q(ort)189
2044 y(the)i(notion)f(of)g(resource)i(con)o(v)o(erters.)25
b(Xt)16 b(allo)o(ws)e(resources)k(to)e(dynamically)c(c)o(hange)k(through)189
2094 y(in)o(v)o(oking)10 b(a)i(widgets)g Fk(SetV)l(alues)e
Fj(metho)q(d)h(whereas)i(In)o(terViews)g(will)e(implemen)o(t)e(this)j
(through)189 2144 y(St)o(yles)k(trigger)h(mem)o(b)q(er)e(function)775
2129 y Fe(8)794 2144 y Fj(.)26 b(Despite)17 b(these)h(similarities)c(w)o(e)j
(see)h(substan)o(tial)e(di\013er-)189 2194 y(ences.)j(Programmers)12
b(using)h(widgets)h(simply)d(add)j(them)e(to)i(their)g(program)d(and)j(b)q
(egin)f(to)g(use)189 2243 y(their)k(resources.)30 b(T)m(o)17
b(a\013ect)h(a)e(comp)q(onen)o(t)h(in)f(In)o(terViews,)j(one)e(m)o(ust)f
(link)h(the)g(ph)o(ysical)g(kit)p 75 2282 720 2 v 127 2309
a Fd(7)144 2325 y Fc(Although)j(to)d(date,)j(while)f(Xt)e(supp)q(orts)i(the)f
(*,)h(.,)f(and)h(?)32 b(pattern)18 b(matc)o(hing)i(constructs,)f(In)o
(terViews)g(only)75 2371 y(supp)q(orts)14 b(*)127 2400 y Fd(8)144
2416 y Fc(This)g(has)f(not)h(y)o(et)f(b)q(een)g(implemen)o(ted)952
2577 y Fi(22)p eop
%%Page: 23 24
23 bop 189 307 a Fj(comp)q(onen)o(t)10 b(with)h(its)h(logical)d(st)o(yle)j
(comp)q(onen)o(t)f(in)g(order)h(to)f(reac)o(h)h(it)f(with)g(attributes)h
(stored)h(in)189 357 y(a)f(resource)i(\014le.)k(Y)m(es)12 b(this)h(is)f(more)
f(\015exible)i(but)f(it)g(mak)o(es)f(for)h(more)g(w)o(ork.)17
b(Indeed,)c(In)o(terViews)189 407 y(resource)i(managemen)o(t)d(is)h(quite)h
(a)f(bit)h(more)f(complex)f(than)i(Xt's.)k(One)c(needs)h(to)f(understand)189
457 y(and)j(b)q(e)i(comfortable)d(with)h(only)h(2)f(concepts)j(to)d(use)i(Xt)
f(resources,)j(namely)16 b Fk(class)h Fj(and)h Fk(in-)189 506
y(stance)p Fj(.)25 b(In)o(terViews)17 b(mak)o(es)f(y)o(ou)g(b)q(ecome)g
(familia)o(r)e(with)i Fk(St)o(yles)p Fj(,)f(the)i(distinction)f(b)q(et)o(w)o
(een)189 556 y Fk(ph)o(ysical)f Fj(and)k Fk(logical)f(hierarc)o(hies)p
Fj(,)e(a)i(st)o(yles)g Fk(name)p Fj(,)g(st)o(yle)h Fk(pre\014xes)p
Fj(,)e Fk(attributes)p Fj(,)e(and)189 606 y(\014nally)d Fk(aliases)p
Fj(.)k(Man)o(y)d(GUI)f(programmers)g(who)h(ha)o(v)o(e)g(had)g(great)g
(success)j(with)d(Xt)g(resources)189 656 y(are)h(not)g(going)e(to)i(b)q(e)h
(pleased)f(with)g(the)g(complexit)o(y)e(of)i(the)g(new)g(system.)251
706 y(The)19 b(designers)i(of)d(In)o(terViews)i(assert)h(that)e(the)g(tigh)o
(t)g(coupling)f(b)q(et)o(w)o(een)i(customizable)189 756 y(attributes)g(and)g
(the)h(la)o(y)o(out)d(of)i(ob)r(jects)h(in)e(Xt)h(is)g(useless)h(for)f(ob)r
(jects)h(suc)o(h)f(as)g(do)q(cumen)o(ts)189 805 y(where)13
b(attributes)g(apply)f(to)g(logical)e(rather)j(than)f(ph)o(ysical)g
(groupings[14)o(].)17 b(While)11 b(this)h(ma)o(y)f(b)q(e)189
855 y(so)i(I)g(am)e(not)i(con)o(vinced)g(y)o(et)g(that)g(the)h(do)q(cumen)o
(t)e(formatting)f(paradigm)g(is)h(b)q(est.)19 b(What)13 b(other)189
905 y(application)8 b(domains)f(w)o(ould)i(this)h(approac)o(h)f(pro)o(vide)h
(lev)o(erage)g(in?)16 b(Monetoring)9 b(n)o(uclear)h(p)q(o)o(w)o(er)189
955 y(plan)o(ts?,)j(Games?)18 b(Data)13 b(Base)i(Managemen)o(t?)k(The)14
b(abstraction)h(seems)f(to)g(b)q(e)h(o)o(v)o(erkill)e(for)h(90)189
1005 y(\045)c(of)h(the)h(to)q(olkit)e(application)f(domain.)15
b(Indeed,)e(in)d(the)i(do)q(cumen)o(t)f(formatting)d(business,)13
b(their)189 1054 y(are)g(v)o(ery)f(successful)i(pro)q(ducts)g(suc)o(h)f(as)g
Fk(F)l(rameMak)o(er)f Fj(that)g(use)i(traditional)d(Xt)h(mec)o(hanisms)189
1104 y(with)h(no)h(di\016cult)o(y)m(.)251 1154 y(Finaly)j(it)g(is)h(claimed)e
(b)o(y)i(the)g(In)o(terViews)h(designers)g(that)f(b)o(y)g(divideing)f(up)g
(functional-)189 1204 y(it)o(y)i(that)i(to)q(olkits)e(ha)o(v)o(e)h
(traditionally)f(coupled,)i(In)o(terViews)h(is)e(able)g(to)g(pro)o(vide)g(a)g
(uni\014ed)189 1254 y(framew)o(ork)10 b(for)h(user)i(prefences,)h(do)q(cumen)
o(t)d(attributes,)i(and)e(structured)j(graphics)e(state)g(whic)o(h)189
1303 y(should)g(pro)o(vide)h(applications)f(that)h(are)g(simpler)f(to)h
(build,)e(more)h(consisten)o(t)i(to)f(use)h(and)f(easier)189
1353 y(to)i(in)o(tegrate)h([14)o(].)23 b(While)15 b(some)g(go)q(o)q(d)g
(evidence)i(has)f(b)q(een)h(pro)o(vided)f(for)f(this)h(in)f(the)h(case)h(of)
189 1403 y(the)d Fk(do)q(c)f Fj(program,)f(their)i(is)g(no)f(ma)r(jor)f
(application)g(that)i(sho)o(ws)g(this)g(for)f(structured)j(graphics)189
1438 y Fe(9)207 1453 y Fj(.)25 b(Their)16 b(is)g(not)g(enough)g(evidence)h
(that)f(the)h(st)o(yle)f(metho)q(dology)e(creates)j(a)f(resource)i(design)189
1503 y(en)o(vironmen)o(t)13 b(that)i(is)f(simpler)g(and)g(more)g(consisten)o
(t.)22 b(Whether)15 b(it)g(is)f(easier)h(to)g(in)o(tegrate)g(de-)189
1553 y(p)q(ends)e(on)f(what)f(y)o(ou)h(are)g(trying)g(to)g(in)o(tegrate)g(it)
g(with.)17 b(Certainly)12 b(not)g(Xt)g(programs.)k(It)c(w)o(ould)189
1602 y(not)k(ha)o(v)o(e)h(b)q(een)h(di\016cult)e(to)h(incorp)q(orate)g(the)h
(Xt)f(mec)o(hanism)e(in)o(to)h(In)o(terViews.)28 b(One)18 b(could)189
1652 y(ha)o(v)o(e)f(used)h Fk(Xrm)e Fj(to)i(pro)o(vide)f(resource)i(setting)e
(through)h(a)f(ph)o(ysical)f(and)h(logical)f(hierarc)o(h)o(y)m(.)189
1702 y(Sometimes)11 b(it)j(is)g(unnecessary)i(to)d(re-in)o(v)o(en)o(t)i(the)f
(wheel.)189 1914 y Fh(6)69 b(Conclusion)189 2005 y Fj(This)16
b(pap)q(er)g(has)g(describ)q(ed)i(the)f(design)f(and)g(implem)o(en)o(tation)d
(of)i(2)h(color)g(editors,)g(A)o(CE)g(and)189 2055 y(ICE,)h(written)h(in)f
(the)i(A)o(thena/Xt)f(and)f(In)o(terViews)i(to)q(olkits.)29
b(A)o(t)18 b(presen)o(t,)i(t)o(w)o(o)d(v)o(ersions)h(of)189
2105 y(ICE)h(exist.)33 b(The)19 b(\014rst)h(v)o(ersion)f(has)g(b)q(een)h
(implemen)o(ted)d(using)h(the)i(c)o(hanges)f(that)g(w)o(e)g(ha)o(v)o(e)189
2155 y(suggested)c(in)f(In)o(terViews.)21 b(W)m(e)14 b(had)h(implem)o(en)o
(ted)e(those)i(c)o(hanges)g(lo)q(cally)e(and)h(they)h(seem)f(to)189
2204 y(w)o(ork)h(\014ne.)23 b(These)17 b(c)o(hanges)f(are)g(also)e(up)o(w)o
(ard)i(compatible,)d(so)j(that)f(an)o(y)g(co)q(de)i(written)f(using)189
2254 y(the)e(old)f(in)o(terface)i(also)e(w)o(orks.)251 2304
y(The)h(second)i(v)o(ersion)e(of)f(ICE)h(has)h(b)q(een)g(implemen)o(ted)d
(using)h(In)o(terViews3.1)i(b)q(eta)f(as)g(it)g(is.)189 2354
y(It)g(and)f(A)o(CE)h(will)e(b)q(e)j(made)d(publicly)h(a)o(v)n(ailable)f(b)o
(y)h(anon)o(ymous)f(ftp)i(on)g(exp)q(ort.lcs.mit.edu)e(in)p
75 2393 720 2 v 127 2420 a Fd(9)144 2435 y Fc(In)o(terViews)h(3.1b)q(eta2)h
(con)o(tains)h(a)e(glyph)h(editor,)g(but)f(this)h(applicatio)q(n)i(is)d(just)
g(a)g(to)o(y)m(.)952 2577 y Fi(23)p eop
%%Page: 24 25
24 bop 189 307 a Fj(the)14 b(\014le)g(/con)o(trib/A)o(CEvsICE.tar.Z.)251
357 y(V)m(arious)i(asp)q(ects)j(of)d(the)h(In)o(terViews)h(design)f(w)o(ere)h
(examined)d(during)i(the)g(design)g(of)f(this)189 407 y(to)q(ol.)32
b(Their)20 b(adv)n(an)o(tages)e(and)h(disadv)n(an)o(tages)f(w)o(ere)i
(discussed)h(b)q(et)o(w)o(een)f(us.)34 b(The)20 b(c)o(hanges)189
457 y(that)d(w)o(e)h(ha)o(v)o(e)g(prop)q(osed)g(in)g(this)f(pap)q(er,)i(w)o
(ere)g(sen)o(t)f(to)g(Mark)g(Lin)o(ton)f(and)g(the)h(handling)f(of)189
506 y(m)o(ultiple)12 b(dimensions)h(could)i(b)q(e)g(supp)q(orted,)h(in)e(one)
h(w)o(a)o(y)f(or)h(the)g(other,)g(in)f(the)i(full)d(release)j(of)189
556 y(In)o(terViews3.1.)251 606 y(A)o(t)g(this)h(p)q(oin)o(t,)e(w)o(e)i(w)o
(ould)e(also)h(lik)o(e)g(to)g(men)o(tion)e(that)j(the)g(do)q(cumen)o(tation)e
(a)o(v)n(ailable)f(for)189 656 y(In)o(terViews)d(is)g(still)e(somewhat)h
(scarce.)18 b(More)11 b(detailed)g(do)q(cumen)o(tation)e(should)h(b)q(e)h
(made)f(a)o(v)n(ail-)189 706 y(able.)16 b(Also)9 b(there)i(are)g(not)e
(enough)h(examples,)f(that)h(can)g(b)q(e)g(used)g(as)g(a)g(mo)q(del)e(to)h
(dev)o(elop)h(custom)189 756 y(applications.)16 b(Th)o(us,)d(for)f(an)h(In)o
(terViews)h(no)o(vice,)e(programming)d(in)k(In)o(terViews)h(seems)f(lik)o(e)f
(an)189 805 y(uphill)17 b(task.)32 b(Hop)q(efully)17 b(as)i(more)e(and)i
(more)e(p)q(eople)i(adopt)f(In)o(terViews)i(as)e(their)h(graphics)189
855 y(library)13 b(of)g(c)o(hoice,)h(more)f(examples)g(and)h(help)f(w)o(ould)
h(b)q(e)g(a)o(v)n(ailable)e(for)h(the)i(new)o(comers.)952 2577
y Fi(24)p eop
%%Page: 25 26
25 bop 189 307 a Fh(References)209 398 y Fj([1])22 b(F)m(oley)m(,J.D.,)9
b(and)i(v)n(anDam,A.)o(,)e(and)i(F)m(einer,S.K.,)f(and)i(Hughes,J.F.,)f
(Computer)f(Graphics)276 448 y(Pricnciples)15 b(and)e(Practice,)i(Second)g
(Edition,)d(Addison-W)m(esley)m(,)h(1990)209 514 y([2])22 b(Lin)o(ton,M.A.,)
29 b(and)f(Calder,P)m(.R.,)h(and)e(INterran)o(te,J.A.,)32 b(and)c(T)m
(and,S.,)h(and)f(Vlis-)276 564 y(sides,J.M.,)13 b(In)o(terViews)i(Reference)h
(Man)o(ual)d(V)m(ersion)h(3.1-Beta.)f(June)h(26,)f(1992.)209
631 y([3])22 b(Sc)o(hei\015er,R.W.,)13 b(What's)i(New)g(in)f(Release)h(5,)g
(in)f Ff(The)i(X)f(R)n(esour)n(c)n(e)p Fj(,)g(Issue)h(0,)e(O'Reilly)f(&)276
680 y(Asso)q(ciates,Inc.)i(pp)f(7-16,)e(F)m(all)h(1991)209
747 y([4])22 b(T)m(aba)o(y)o(o)o(y)o(on,A.,)c(and)h(T)m(a)o(ylor,J.M.,)f
(Xcms:)30 b(In)o(tegrated)20 b(Color)f(Managemen)o(t)g(for)g(X11,)276
797 y(T)m(utorial)12 b(Notes)j Ff(Xhibition)l('91)p Fj(,)e(June)i(5,)e(1991.)
209 863 y([5])22 b(T)m(a)o(ylor,J.M.,)9 b(and)i(T)m(aba)o(y)o(o)o(y)o(on,A.,)
e(An)i(In)o(tro)q(duction)h(to)f(Device-Indep)q(enden)o(t)j(Color)c(and)276
913 y(Color)j(Managemen)o(t,)f(T)m(utorial)h(Notes)h Ff(6th)i(X)e(T)m(e)n
(chnic)n(al)h(COnfer)n(enc)n(e)p Fj(,)e(Jan)h(13,)f(1992.)209
979 y([6])22 b(T)m(ekColor)11 b(Color)h(Managemen)o(t)f(System,)g(System)h
(Implemen)o(tor's)e(Man)o(ual,)h(Marc)o(h)i(1990,)276 1029
y(T)m(ektronix,)g(Inc.)h(Bea)o(v)o(erton,)g(Oregon.)209 1095
y([7])22 b(TIFF,)15 b(Revision)f(6.0,)g(Final)h(Q)g(June)h(3,)f(1992.,)f
Ff(A)o(ldus)i(Develop)n(ers)g(Desk,)h(A)o(ldus)f(Corp)n(o-)276
1145 y(r)n(ation)p Fj(,)d(Seattle,)h(W)-5 b(A.)209 1212 y([8])22
b(My)o(ers,S.,)13 b(E\013ectiv)o(e)i(C++,)f(Addison-W)m(esley)m(,)f(pp)h
(157-169,)e(1992.)209 1278 y([9])22 b(Stroustrup,B.,)g(and)e(Ellis,M.,)f(The)
h(Annotated)h(C++)g(Reference)g(Man)o(ual,)g(Addison-)276 1328
y(W)m(esley)m(,)13 b(pp)h(217-237,)d(1990.)189 1394 y([10])21
b(Bashir,)13 b(I.,)g(and)g(Bellur,)g(U.,)g(A)h(Class)f(Flattening)g(T)m(o)q
(ol.,)e(Conference)k(Pro)q(ceedings)g Ff(C++)276 1444 y(at)g(Work)g(1991)p
Fj(,)f(No)o(v)g(18,)f(1991.)189 1511 y([11])21 b(Kn)o(uth,)14
b(D.,)e(The)j(T)m(exb)q(o)q(ok.,)d(Addison-W)m(esley)m(,)h(1984.)189
1577 y([12])21 b(Y)m(oung,)11 b(D.,)g(X)i(Windo)o(w)e(Systems)h(Programmi)o
(ng)d(And)k(Applications)e(With)h(Xt,)g(Pren)o(tice)276 1627
y(Hall,)g(pp)i(142-151,)e(1989.)189 1693 y([13])21 b(Calder,)16
b(P)m(.,)g(and)h(Lin)o(ton,)e(M.)h(The)h(Ob)r(ject-Orien)o(ted)i(Implemen)o
(tation)13 b(of)j(a)g(Do)q(cumen)o(t)276 1743 y(Editor.)d(Unpublished.)189
1809 y([14])21 b(Calder,)15 b(P)m(.,)g(and)h(Lin)o(ton,)e(M.)h(Managing)g(A)o
(ttributes)h(in)f(a)h(User)g(In)o(terface)h(T)m(o)q(olkit.)c(Un-)276
1859 y(published.)952 2577 y Fi(25)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
Technical Details
Message-ID: <1992Nov12.053053.6562@mintaka.lcs.mit.edu>
Path: arc1-ca.pugleaf.net!sparky!uunet!ogicse!mintaka.lcs.mit.edu!kanga.lcs.mit.edu!dave

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!ogicse!mintaka.lcs.mit.edu!kanga.lcs.mit.edu!dave
From: dave@kanga.lcs.mit.edu (David Sternlicht)
Newsgroups: comp.windows.interviews
Subject: A Tale of 2 Toolkits: part 5 of 6
Message-ID: <1992Nov12.053053.6562@mintaka.lcs.mit.edu>
Date: 12 Nov 92 05:30:53 GMT
Article-I.D.: mintaka.1992Nov12.053053.6562
Sender: news@mintaka.lcs.mit.edu
Organization: mit X consortium
Lines: 678