throbber
--
`
`--
`
`The X Toolkit: More Bricks for Building User-Interfaces
`]or]
`Widgets For Hire
`
`Ralph R. Swick
`
`Digital Equipment Corporation
`Project Athena
`Massachusetts Institute of Technology
`Cambridge, MA 02139
`swick@ATHENA.MIT.EDU
`
`Mark S. Ackerman
`
`Project Athena
`Massachusetts Institute of Technology
`Cambridge, MA 02139
`ackerman@ATHENA.MIT.EDU
`
`ABSTRACT
`
`Primitives for application-level user interface construction facilities currently
`under development at M.I.T. Project Athena are described. The design philosophy of the
`X Toolkit and associated widgets and some of the practical implications are discussed.
`
`Introduction
`
`The X Window System†1, 2 was developed
`at the Massachusetts Institute of Technology to
`satisfy the needs of a broad spectrum of users for
`a high-performance, high functionality, network-
`based window system that can be implemented on
`a wide variety of high-resolution raster graphics
`display devices. The widespread interest and
`unprecedented vendor support for the X Window
`System has assuaged one of the principal con-
`cerns of application developers: the cost of sup-
`porting multiple hardware platforms with dif-
`ferent base technologies, including window sys-
`tems.
`
`† The X Window System and X Windows are trade-
`marks of the Massachusetts Institute of Technology. Use
`of the latter is strongly discouraged. The developers
`prefer simply "X" when a shorter form is required.
`
`The X Window System has been carefully
`designed to address two (sometimes conflicting)
`desires
`of
`application
`developers:
`to
`use
`hardware-level techniques for maximum perfor-
`mance and to maintain portability with a common
`programming interface across multiple vendor
`platforms. X has succeeded in gaining broad ven-
`dor support largely because its specification is
`intentionally restricted to the set of primitives
`needed to manipulate multiple independent win-
`dow contexts on raster graphics displays without
`declaring (or restricting) the choice of particular
`user-interface semantics. It is explicitly intended
`that developers be able to choose a visual inter-
`face appropriate to their needs, their corporate
`philosophy, their research requirements, religious
`preferences, or whatever.
`
`This restriction to low-level control and
`input primitives in the definition of the X com-
`munications protocol and in the corresponding
`
`Apple Ex. 1023, p. 1
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 2 -
`
`application interface layer, Xlib3 ,
`is either a
`strength or a weakness in the X Standard, depend-
`ing on the reviewer’s point of view. Vendors
`whose installed base of products contains well-
`defined visual
`interface and human-computer
`interface researchers find this flexibility in the
`standard to be of major importance. However,
`many
`application
`developers
`consider
`user
`interaction
`and
`other
`higher-level
`graphics
`libraries to be a base system technology that
`should be provided by the hardware vendors and,
`of course, be standard across vendors.
`
`To address the desires of such developers
`for common higher-level development tools, there
`are several projects under way at various loca-
`tions covering different application needs and
`problem domains. One such project
`is the X
`Toolkit
`project,
`a
`collaborative
`effort
`of
`MIT/Project Athena, DEC/Western Software
`Laboratory, Hewlett-Packard Company/Corvallis
`Workstation Operation and others. The X Toolkit
`project
`is producing an applications interface
`layer above the Xlib layer specifically tailored to
`visual user interface construction.
`
`Toolkit Overview
`
`(hereafter called simply
`The X Toolkit
`"Xtk") recognizes that no single comprehensive
`set of user interface tools is likely to be accept-
`able for standardization in the near future.
`In
`order to maximize the utility and acceptability of
`the user interface library, Xtk has been divided
`into two separable pieces. These two layers will
`be described below.
`
`The fundamental entity in Xtk for user
`interface construction is the widget.†
`
`The core of Xtk, the "Intrinsics" (a term
`appropriated from a previous H-P user interface
`library for X), is a set of utility routines intended
`for use in developing widgets. The Intrinsics are
`a set of user interface primitives that are them-
`selves free of visual and interaction style. The
`
`†We chose this term since all other common terms were
`overloaded with inappropriate connotations. We offer
`the observation to the skeptical, however, that the princi-
`pal realization of a widget is its associated X window and
`the common initial letter is not un-useful.
`
`Intrinsics do not constrain the widget writer to
`make the widget look or operate in any particular
`way. These primitives may be used together or
`separately to produce higher layers which do
`incorporate specific policy and style. Such higher
`layers will further reduce applications develop-
`ment cost.
`
`Most applications will call only a few of
`the Intrinsic routines directly. These routines
`offer a uniform programming interface to the
`basic procedures (methods) of all widgets, regard-
`less of the widget type.
`
`The Xtk Intrinsics have been presented in
`an earlier paper4 and, although the detailed design
`has evolved,5 the philosophy and architecture of
`the X Toolkit remain the same. The principal
`additions are a class hierarchy for widget types;
`the separation of widget
`identifiers from the
`corresponding X window identifiers; and the abil-
`ity, using the class hierarchy, for new widgets to
`inherit methods from an existing widget. These
`changes simplify significantly the task of widget
`development and make widgets more modular.
`
`Widgets define input semantics and visual
`appearance. Some widgets are pliable; their input
`semantics (mouse buttons, pointer motion, key-
`board input) are bound at run-time, while other
`widgets may have fixed (hard-coded) semantics.
`Likewise, visual appearance (highlighting, reposi-
`tioning or other animation) may be fixed or may
`be adjusted at run-time.
`
`The Intrinsics provide a uniform way for
`widget developers to handle the common chores
`of widget construction: initialization, input event
`dispatching (including enabling and disabling
`user input dispatch to sub-hierarchies of widgets),
`run-time configurability, uniform handling of
`common events (such as exposure and re-size),
`cleanup, and others. The Intrinsics also include
`the uniform application programming interfaces
`for creating, controlling, and destroying widgets.
`The Intrinsics currently consist of over 90 public
`procedures, of which half are intended solely for
`widget construction.
`
`The goal of the Intrinsics is to make possi-
`ble the quick development of widgets. Sets of
`widgets should adhere to a consistent application
`interface, user
`interaction policy, and visual
`
`Apple Ex. 1023, p. 2
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`is viewed as desirable (or, by
`It
`appearance.
`some, a necessary evil) that the construction of
`multiple such sets ("widget families") covering
`different philosophies be possible with the Xtk
`Intrinsics.
`
`The second piece of the Xtk is a set of
`basic widgets. Most
`application developers
`require a minimum set of widgets as a component
`of any product-quality user interface library. The
`X Toolkit project also recognizes the need for
`concrete examples in a real widget family. To
`serve both these needs, the first author is leading
`the effort at Project Athena to produce a basic
`widget set that will be included with the version 1
`release of the X Toolkit. To distinguish this set
`from others which we know of, or expect to be
`developed, we shall here call these the "Athena
`Widgets".
`
`In addition to the goal of being a basic wid-
`get set, the Athena Widgets have another goal
`arising from code which had been written prior to
`X Version 11. Many of the components of Xtk
`had been prototyped in a toolkit for X Version 10
`that was released by DEC Ultrix Engineering in
`the spring of 1987. The Athena Widgets borrow
`heavily from those prototypes in order to ease
`some of the porting burden for certain applica-
`tions built on these prototypes.
`
`The widgets described here are being
`developed in conjunction with a set of visual
`courseware projects at Project Athena. These
`projects vary considerably in their user dialogs
`and yet require a standard visual appearance.
`This has led to an emphasis in the Athena Wid-
`gets on handling text, graphics, and video in a
`variety of ways, and has extended the widget
`hierarchy to fulfill these needs.
`
`The Athena Widgets are intended to fulfill
`80% of application requirements. We have tried
`to select the critical widgets that will allow the
`easy solution of individual requirements. (See the
`section on Creating New Widgets for more on
`this.)
`
`- 3 -
`
`Intrinsics
`
`the principles espoused in the
`One of
`design of the Xtk is the construction of widgets
`from primitives. We will describe two indepen-
`dent facilities available in the Intrinsics for such
`construction: subclassing and composition. From
`an application point of view, every widget is a
`single object. The actual semantics and appear-
`ance of the widget may, however, be very com-
`plex. For example, a "control panel" widget is
`likely to consist of simpler widgets with a
`"geometry manager" controlling the spatial rela-
`tionship between the component widgets and pos-
`sibly a "focus manager" controlling the dispatch-
`ing of user input to those components. Depend-
`ing upon the needs of the application, such a com-
`pound (or "composite") widget may be imple-
`mented independently and added to the widget
`library as a new widget class, may be constructed
`by the application at run-time with in-line calls to
`the Xtk Intrinsics, or may be constructed by the
`composite widget itself from a resource record
`retrieved through the Intrinsic resource manage-
`ment facilities.
`
`Composition of widgets is most appropriate
`when there are distinct visual regions to a widget,
`each having separate input/display semantics, and
`especially when the same semantics may appear
`in a region of another widget class. In this case,
`the semantics common to both regions may be
`extracted into a more primitive widget class.
`
`This is the principle of modularity of wid-
`gets: the application will still view a composite
`widget (a control panel, for example) as a single
`widget. The internals of this composite widget
`are built when the widget is instantiated. The
`composite widget may determine and instantiate
`all of its components, as for a custom application
`panel. The components may also be instantiated
`and assigned by the client of the composite wid-
`get. Some of the Athena Widgets exhibit this
`recursive construction behavior; e.g. Dialog,
`while others are ‘boxes’, or frames into which the
`client inserts independently instantiated widgets,
`e.g. Form and VPaned.
`
`The second construction facility, subclass-
`ing, allows a widget class to semi-automatically
`inherit some or all of the characteristics of an
`existing widget class, and to share portions of the
`
`Apple Ex. 1023, p. 3
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 4 -
`
`the parent (super-) class
`implement
`code that
`methods. The new widget may call upon the
`superclass methods to manipulate any part of the
`widget state defined by the superclass and needs
`only to implement the code to manage the state
`that is unique to the new class.
`
`The subclassing facility is most appropriate
`for new widgets which need only to add addi-
`tional semantics to an existing widget, or to con-
`strain in some manner the full generality of an
`existing widget. Examples of both subclassing
`and composition in the Athena Widgets are
`described below.
`
`Several widget classes have been defined
`solely for the purpose of being subclassed. The
`Composite class provides methods to maintain a
`list of child widgets, to manage the insertion and
`removal of children, to manage requests from the
`children for new geometries, and to manage the
`assignment of input events to specific children
`(input focus). The Constraint class has all the
`methods of Composite and in addition provides
`methods to automatically create and initialize an
`arbitrary data record attached to each child. The
`contents of this data record are defined by each
`subclass of Constraint and are intended to contain
`layout information used by the subclass geometry
`manager. Neither Composite nor Constraint are
`intended to be instantiated; only their subclasses
`are. Nothing in the implementation, however,
`will prevent an application from instantiating any
`class, should it prove useful.
`
`All widgets are expected to be self-
`contained with respect to exposure, resize and
`input event handling. That is, the clients of the
`widget (i.e. the application program or a compos-
`ite widget of which this widget is a component)
`are guaranteed that all exposure and input events
`sent by the X server for the window defining the
`widget will be processed completely by the wid-
`get. A client
`that creates an instance of the
`ScrolledAsciiText widget, for example,
`is not
`involved in any of the details of text re-painting,
`scrolling, selection, cut and paste, and so on. The
`client is also free to assign any shape to the wid-
`get and assume that the widget will adjust to the
`imposed size.
`
`The principal mechanism the Athena Wid-
`gets use to communicate back to the client is the
`
`callback procedure. While a client has the option
`to query the widget state, it is usually more con-
`venient for a command button, for example, to
`directly call a client-supplied procedure when
`‘pressed’ by the user. Some widgets accept more
`than one callback procedure for alternate interac-
`tions that they implement.
`
`Runtime Configurability
`
`One of the major design principles fol-
`lowed by the Athena Widgets is to make as much
`of the user interface as possible customizable by
`the end-user of the application. Fierce debates
`(i.e. wars) break out every time someone pro-
`poses a single set of key or button bindings for all
`users, or that a fixed choice of colors or text fonts
`will be appropriate for all individuals. Even such
`characteristics as whether scrollbars go on the left
`or right (or top/bottom) of a window may be
`appropriate for individual customization.
`
`The Xtk implements run-time configurabil-
`ity through the Xlib Resource Manager. The
`Resource Manager is a general-purpose reposi-
`tory for storage and retrieval of arbitrary data
`within a single process address space. During ini-
`tialization, the Xtk pre-loads the resource data-
`base from the X server and from one or more
`files. When a new instance of a widget is created
`by the application,
`the widget resource list is
`examined and the widget instance is initialized
`with data from the resource database. Each wid-
`get declares an instance name and a class name
`for purposes of matching against resource names
`in the database. The Resource Manager defines
`rules for partial name matches so that a single
`resource
`entry may initialize many widget
`instances.
`
`The implementor of a new widget has the
`choice of which widget characteristics to declare
`as resources and which to hard-wire into the wid-
`get. In general, any instance data for which the
`widget is willing to allow modification requests
`from the client should be declared in the resource
`list.
`
`Widget characteristics such as text font and
`color are obvious resource choices. The Athena
`Widgets also declare the keyboard and mouse
`button bindings as resources.
`In this way, the
`
`Apple Ex. 1023, p. 4
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 5 -
`
`user of any application linked against the widgets
`has the option to accept our default bindings or
`enter his/her own bindings. The Resource
`Manager naming mechanism allows the user to
`attach the new bindings to all instances of a wid-
`get class (e.g. Scrollbar) in any application, or to
`a specific widget in a specific application only, or
`any combination in-between. A client may, if it
`so chooses, override any entry in the resource
`database either by storing its own entry (pre-
`ferred), or by passing an explicit value when
`instantiating the widget (discouraged).
`
`The keyboard and button bindings are con-
`figurable in yet a second way. Each widget that
`accepts user input declares a list of action rou-
`tines that may be invoked by input events. The
`Athena Widgets use the Translation Management
`facilities in the Intrinsics to bind keys and buttons
`to widget action routines. These bindings can
`specify parameters to the action routines to
`further configure their behavior. The Scrollbar
`widget, for example, declares three action rou-
`tines, one of which is parameterized so that the
`range of values it returns may be established by
`the bindings.
`
`Using these action routines and the default
`scrollbar bindings, the ScrolledAsciiText widget,
`for example, allows the user to scroll a block of
`text forward or backward by a variable amount
`and to drag the thumb (elevator) to a new posi-
`tion, displaying any portion of the text. A user
`may supply an alternate set of Scrollbar bindings
`that will cause the scrollbar to report full-length
`forward or backward scrolls, independent of the
`pointer position, possibly disabling the variable
`scrolling as desired.
`
`Two of the Athena widget classes exist for
`the purpose of handling interprocess interactions
`with other X client processes. The Shell widget
`defines no user action routines, but maintains all
`the appropriate window properties established by
`convention for X window managers,
`including
`icon representation. Many of these parameters
`are controlled by command line options and
`parsed by the Xtk initialization routine. Most
`applications use a Shell widget as their outermost
`(top level) widget.
`
`Additional semantics appropriate for tem-
`porary, or "pop-up", panels are added to a
`
`subclass of Shell, the Popup widget. From the
`client’s point-of-view, both Shell and Popup are
`simple widgets; they manage exactly one child
`widget and have a trivial geometry manager.
`UIMS developers may find it desirable to extend
`Shell at some time in the future, even allowing
`site tailoring for specific choices of window
`manager. One such addition might be a Shell
`that, when made smaller by the window manager
`(as instructed by the user, of course); added
`scrollbars (or other interaction semantics); and
`provided a movable viewport on the application
`window which, from the application’s point-of-
`view, retains its original size.
`
`Current Widgets
`
`The Athena Widgets are divided into two
`major classes. The first are simple widgets: vari-
`ous sorts of buttons, labels, edit buffers and the
`ubiquitous scrollbar. These form the elemental
`building blocks of a user interface. The second
`are composite widgets:
`scrolled text, dialog
`boxes, and various methods of putting together
`simple widgets in more complex arrangements.
`
`All simple widgets have initialization, reali-
`zation, display, and interaction methods. These
`methods may be fairly simple, as with the button
`widgets, or quite complex, as with the text wid-
`get.
`
`All widgets use the Core widget as the root
`of their class hierarchy. The Core widget (whose
`class name, as a special case, is just Widget) has
`the minimal set of instance fields common to all
`widgets: width, height, border width, and so on.
`While it is not usually intended that an applica-
`tion ever create an instance of (Core) Widget, it is
`supported: an application that wants a simple
`window within a widget panel may instantiate
`Widget and use the resulting window.
`
`The Label widget is just that; a widget that
`displays either a text string or (in the near future)
`a pixmap without any interaction semantics and
`therefore without any callback procedures. It can
`only center, right justify, or left justify its text in
`the client’s choice of fonts within its assigned
`size. (The default size is a bounding box for the
`text or graphics.) A Label may be insensitive, or
`grayed-out, and the border, as for all widgets,
`
`Apple Ex. 1023, p. 5
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 6 -
`
`need not be visible. Like all widgets, the Label
`widget processes exposure events on its window
`so the parent can be assured that all visible por-
`tions of the Label are properly refreshed on the
`screen. One will typically use the label to posi-
`tion and paint items intended for display only.
`
`The Command button widget is a subclass
`of Label with interaction semantics and therefore
`a callback procedure. A Command button is a
`Label with enter,
`leave, set, unset, and notify
`actions. When insensitive, the Command button
`does not respond to user input events. On enter
`to a sensitive Command,
`the border will, by
`default, become visibly thicker. On set, the but-
`ton is displayed in reverse video; on unset, the
`button is returned to normal. On notify, a single
`client-supplied callback procedure is activated.
`These actions are mapped, by default but not by
`necessity, to the pointer enter, button down, and
`button up events. One will
`typically use the
`Command button to create "clickable" icons or
`labels that start a program action. The Command
`button is an essential building block for point-
`and-click interfaces.
`
`Figure 1 shows several Labels and Com-
`mand buttons. The user has moved the pointer
`into one of the Command buttons, and the button
`has been highlighted. These Labels and Com-
`mand buttons are enclosed in two layers of
`Boxes, which will be discussed below.
`
`Figure 1
`
`The Command widget can be extended into
`its subclass TwoState button. On set, the Two-
`State widget displays a second label or graphic.
`In all other respects, it is similar to Command.
`TwoState is useful for simultaneously displaying
`and changing a binary application state.
`
`The Toggle widget is also a subclass of
`Command and also has simple interaction seman-
`tics and a callback procedure. A Toggle is a
`binary state button. Once set, e.g. by button
`down, it remains in that state until the user selects
`the Toggle again. Toggle is useful for selecting
`on-off options. The application may use the call-
`back to be notified on each state change, or may
`query the Toggle for its current state as appropri-
`ate.
`
`The Grip widget is a minimal Command
`button. Grip (a.k.a. Knob) has a single callback
`but no default interaction semantics. The interac-
`tions (event bindings) are provided by the client
`when Grip is instantiated. Grip simply uses the X
`window background as its display. This widget
`was built for clients who need to identify specific
`locations where, for example, the pointer may be
`used to drag an object.
`
`The Scrollbar widget implements a verti-
`cal or horizontal scrollbar. There are three call-
`backs: one to move the scrollbar thumb (eleva-
`tor), a second to execute a client callback passing
`a distance in pixels as data, and a third to execute
`an application callback passing as data the posi-
`tion of the pointer as a percentage of the scrollbar
`length. The inclusion of the moveThumb action
`routine in the actions table allows the client some
`control over whether or not the scrollbar widget
`automatically repositions the thumb on input.
`
`The AsciiFile and AsciiString text widgets
`allow the entry, modification, and display of text.
`The widgets can be instantiated in read-only or
`read-write modes. They implement a subset of
`the ever popular Emacs, including mouse-driven
`cutting and pasting. Key bindings are, of course,
`completely settable
`through the Translation
`Manager.†
`
`The AsciiString widget operates on a single
`in-core text string; AsciiFile on a disk file. They
`are both subclasses of Text, which implements
`
`†It has been suggested that some users would prefer an
`AsciiFile widget that allowed them to specify their favor-
`ite text editor. While the full semantics of the Text wid-
`get may be difficult to support with an arbitrary external
`process, it may be an interesting exercise to implement a
`sub-process interface widget that, in carefully defined cir-
`cumstances, could be substituted by the user for the Asci-
`iFile widget.
`
`Apple Ex. 1023, p. 6
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 7 -
`
`The Dialog widget is a subclass of Form. It
`arranges a specific combination of Label, Ascii-
`String field, and Command buttons. The Label is
`displayed on the first line, followed by the text
`field, and the buttons are on the last line. Dialog
`is principally a convenience widget implemented
`to handle a common programming problem.
`
`The ScrolledAsciiText widget contains a
`scrollbar and an AsciiString or AsciiFile widget.
`Using the default scrollbar bindings, the Scrolled-
`AsciiText widget allows the user to scroll the
`contained text forward or backward by a variable
`amount. By dragging the thumb to a new posi-
`tion, s/he can display any portion of the text.
`
`The Paned widget manages any number of
`simple or composite widgets in a tiled manner.
`The current Paned widget, VPaned, stacks its
`children vertically with the top and bottom edges
`of successive widgets touching. VPaned uses
`Grip to allow the user to re-position the boun-
`daries between the tiled widgets.
`
`Figure 2 illustrates the current Athena Wid-
`get hierarchy. This diagram should only be of
`interest
`to widget
`developers;
`application
`developers should be concerned only with the
`external characteristics of a widget. The fact that
`a Toggle button actually uses the Label code to
`display its text string should be of no conse-
`quence to the application. The widget class
`Simple contains only the procedure to change a
`widget’s borders to indicate sensitivity or insensi-
`tivity.
`
`Special-purpose Widgets
`
`The Clock widget displays an analog or
`time-of-day clock. The Load widget
`digital
`displays a continuous system load graph. Both of
`these were exercises in converting existing simple
`applications into widgets. Load allows the client
`to supply its own procedure to fetch data, or to
`use the built-in default GetSystemLoadAverage
`procedure.
`
`most of the user interactions. The implementa-
`tion of the Text widget follows a source/sink
`model, allowing for the development of addi-
`tional text sources (other than string and file) and
`for additional display sinks.
`
`These few simple widgets are an attempt to
`create a number of general widgets that can then
`be tailored for individual uses. A more complex
`button widget
`(for example, one that might
`display two lines of text) would require a dif-
`ferent display method but keep the interaction
`method for Command.
`
`However, few interfaces of any real com-
`plexity or use could be created using just these
`simple widgets. The simple widgets must be
`combined using Composite widgets. Composite
`widgets require geometry, child insertion and
`deletion, and input focus methods. The geometry
`manager for the composite may or may not be
`constraint based, and must handle resizing events
`by re-positioning the child widgets. Generally,
`the child insertion, child deletion, and input focus
`methods will be inherited from the superclass,
`Composite.
`
`The Box widget arranges its children in the
`minimum bounding box. The children are
`automatically rearranged when one is deleted or
`added. One can create button areas or horizontal
`menus using Box.
`
`The RadioButtonBox widget is a subclass
`of Box exclusively for Toggle Buttons. It allows
`only one Toggle button to be set at a time. If a
`second Toggle becomes set, the RadioButtonBox
`will check its list of children and unset any others.
`This is useful for mutually exclusive application
`options.
`
`The Form widget can contain any number
`of simple or composite widgets. Form is a
`general-purpose constraint-based layout widget
`that can be instructed to maintain fixed separa-
`tions between children, or to maintain fixed dis-
`tances between children and the edges of the
`form, and so on. When Form is resized, it uses
`the constraint information to resize and reposition
`the children to maintain the assigned separations.
`Forms are useful for creating arbitarily complex
`interaction windows that exhibit ‘nice’ resizing
`behavior.
`
`Apple Ex. 1023, p. 7
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 8 -
`
`Core
`
`Simple
`
`Clock
`
`Load
`
`Composite
`
`Label
`
`Grip
`
`Text
`
`ScrollBar
`
`Command
`
`AsciiString
`
`AsciiFile
`
`Two-State
`
`Toggle
`
`Shell
`
`Box
`
`Constraint
`
`Popup
`
`Radio
`
`Form
`
`Paned
`
`Dialog
`
`VPaned
`
`Figure 2
`
`Apple Ex. 1023, p. 8
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 9 -
`
`Example
`
`Figure 3 shows a variety of composite and
`simple widgets instantiated in a single trivial
`application. The outermost widget is a VPaned
`(inside a Shell) which, in turn, contains several
`other composite and simple widgets. The small
`solid boxes are Grips which allow the user to
`move the attached pane boundary up or down,
`forcing the associated widgets to be resized.
`
`The uppermost pane of the VPaned is a
`Command button marked "quit". Appropriately,
`when the user clicks on this button, the applica-
`tion exits. The pane below this is a Label.
`
`The third pane is a Dialog containing a
`Label "I am a dialog form"; an AsciiString text
`field with an initial value; and a Command button
`marked "ok". The next pane is a Box containing
`a Label marked "label" and a Command button
`marked "command". The Clock and Load wid-
`gets form the next two panes.
`
`The seventh pane is another Box with an
`AsciiString widget and a Scrollbar. The last pane
`in figure 3 is an AsciiFile widget displaying
`/etc/motd.
`
`The application that instantiated this entire
`hierarchy is less than 200 lines of C source,
`including four callback procedures.
`
`Creating New Widgets
`
`Small changes to existing widgets can be
`made through the general facilities of the resource
`and translation managers. With these managers,
`one can make changes to color, font, key bind-
`ings, and the such. Many changes that would
`require a new interface object in other toolkits
`can be done through resource changes to the
`existing widgets in the X Toolkit.
`
`The simplest case of creating a new widget
`is to create a subclass of an existing widget. For
`example, if one wanted a command button with
`two lines of text, s/he might create a subclass of
`Command. Since all superclass structures are
`inherited, one would merely need to add an
`
`Figure 3
`
`additional string field to the instance structure and
`nothing to the class structure. Since there is no
`change in user interaction semantics, only the
`display method would need to be changed.
`In
`addition, code to allow the modification of the
`second text string would be required. All other
`code could be inherited. This new widget could
`then be incorporated in any composite widget that
`allowed buttons.
`
`Subclassing composite widgets is a little
`more work since new geometry managers may be
`desired. In general, the additional methods of a
`Composite widget tend to be complex and the
`new subclass will want to inherit as much as pos-
`sible.
`
`One potential ‘client’ of a widget that the
`implementor of the widget should keep in mind is
`the writer of
`the next widget. With a little
`Apple Ex. 1023, p. 9
` Apple v. Fintiv
`IPR2020-00019
`
`

`

`--
`
`--
`
`- 10 -
`
`thought, the designer of a new widget can decide
`which of the new methods added by the subclass
`should be declared as class variables, which as
`widget instance variables and which as in-line
`code.
`
`Class variables are the best way to export
`methods to potential future subclasses. By instal-
`ling a procedure pointer into a class variable, the
`new subclass has the option to easily inherit the
`old method or to define its own implementation.
`
`The developer of a family of widgets may
`find circumstances in which a small modification
`to a parent class would make a new subclass
`much easier to implement. From the application
`point-of-view, widget instance and widget class
`data structures are opaque types. The effect of an
`addition to one of these structures can be isolated
`to subclasses of
`the changed widget without
`breaking existing application code.
`
`A subclass is free to manipulate any of the
`widget instance variables defined by its super-
`classes. The subclass must be careful if it simul-
`taneously manipulates superclass instance data
`and inherits superclass methods that use the same
`data. At present, the only way to determine such
`side-effects is by examination of the superclass
`implementation(s). We hope to establish conven-
`tions in the future for documenting all the public
`and semi-public interfaces of a widget.
`
`Widgets Of The Future
`
`On our wish list are:
`
`read-only dial: posts a position between 0 and 1
`to a circular dial. Useful for indicating position
`or state.
`
`title bar: the mandatory title, horizontal lines,
`and close button. A convenience widget, like
`Dialog.
`
`menus: pull-down, pull-aside, and deck-of-cards
`menus.
`
`index pane: allows the user to select from a
`scrollable list of text strings. Useful for selecting
`topics or filenames.
`
`video label: handles the display of video from an
`
`external source inside a widg

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket