[comp.windows.x] An R5 wish for the X Toolkit

rlh2@ukc.ac.uk (Richard Hesketh) (08/14/90)

Two (probably) major additions to the Xt Intrinsics would be nice:

1)  Provide detailed support for "graphics objects", by this I mean
    rectangles, circles, points and polygons.  These should be scalable
    and can be overlaid on top of each other, have their own graphics
    contexts and have the ability to dump their description somewhere
    (a sort of meta-file I suppose).  If anybody has seen the
    InterViews demo (!) program "Idraw" they will known the type of
    objects I mean.

2)  Provide a mechanism to allow tracking of resource values.  For example
    this would allow an application to register interest in a particular
    resource in a particular widget instance and be informed via a callback
    when this resource changes.  I suspect this would be easier to implement
    than a more general mechanism that would allow applications to register
    interest using a wildcard scheme (i.e. "*Background" = tell me about
    any changes in any resource whose class is "Background" in any widget
    instance) but of course not being as powerful.

    I would see this being implemented as part of the SetValues functions.
    It would of course have to have no impact on existing widget code.

1) may fill the gap left by the toolkit when it comes to doing any graphics
operations in a toolkit based app .. i.e. having to delve in deep in to Xlib.

2) would help direct manipulation applications including user interface
builders (my interest) no end.

1) and 2) together could make a neat ``graphical constraints'' system
making it easier to create graphical languages and other direct manipulation
applications using Xt.

Richard Hesketh   :   @nsfnet-relay.ac.uk:rlh2@ukc.ac.uk
		  :   rlh2@ukc.ac.uk    ..!mcvax!ukc!rlh2
---                                               
Computing Lab., University of Kent at Canterbury,
Canterbury, Kent, CT2 7NF, United Kingdom.    Tel: +44 227 764000 ext 7620/3682

markham@cadence.com (Jeff Markham) (08/16/90)

In-reply-to: rlh2@ukc.ac.uk's message of 14 Aug 90 12:36:16 GMT
Newsgroups: comp.windows.x
Subject: Re: An R5 wish for the X Toolkit
References: <5276@harrier.ukc.ac.uk>
Distribution: 

I like what Richard has suggested alot ...
 re: 1.  ( graphical lists )
         I've done one of these (its commercial so I can't post it) ..
         and boy are they handy. The only thing I can add here is that
         I did it using a parasite approach .. so you can attach these
         display lists onto any existing widget or gadget.  If you do
         the graphics layer right, you can get some really good 
         performance.

 re: 2.  ( resource change callbacks )
         Again .. a good idea , but could lead to severe performance
         degradation.  I would think it would be OK if one could be
         called back as a preSetValues->postSetValues pair so that
         you don't branch out in the middle of a propagation.

 re: (graphical constraints)
         Maybe what's needed here is an active constraint system. The
         current offering of Constraint class widgets are quite passive,
         and the constraints they understand are too atomic. It would
         be really neat if we could have some Constraint widgets that 
         could incorporate some of the features found in a Constraint
         Programming Language .. where more than trivial constraints
         could be described and satisfied via a constraint satisfaction
         system.  Then .. things like graphical contraints would be quite
         easy to do ... "Put this over here and line this group up 
         N apart and with their top edges aligned". Most of the time,
         you wind up creating a complex widget tree just so the
         contraints won't screw up.  MIT has alot of experience here,
         so the right people are around to make it happen.

I'd like to also add a few things to the Xt wish list ...

  1). The way resources are passed and cached really needs to be
      re-examined.  A significant part of the widget creation time
      comes from creating and merging arg lists .. and then searching
      through the class hierarchy to find the class that cares about
      this resource.  Along they way , lots of code gets called that
      says .. do you care about this ? .. no .. go up.  I understand
      why strings need to be around for the resource property, but
      some pretty good performance speed-ups could be gained if XmN.....
      was a int or short hash index rather than a string .. and unless
      you've got a pretty smart loader, the image is filled with
      duplicated (long I might add) strings.

  2). Similarly,  it would be nice if you could specify a 
      prototypical widget that embodies the majority of the
      resources you wish to use in the future .. and refer to it
      when creating a new widget.  Then you override only the
      resources you were different. I bet you could play alot
      of tricks with backpointers that would cut down memory useage
      quite a bit.  Its sort of multiple inheritance I guess.

  3). AT&T did a really neat thing in the OpenLook widgets called
      "Flat Widgets" .. I haven't seen the code for this .. but I
      bet its a "superWidget" that has lots of subareas that it knows
      how to render and dispatch internally to mimick many children.
      Seems like this would be a generally good thing to have in 
      the Xaw stuff ... Sun/AT&T are Consortium members .. maybe they
      would be interested in helping here.

  4). Translation Tables need to be re-examined .. boy are they 
      big.

  5). An exclusive late binding  would be nice.  It would be great
      to say

          "<Btn1Down>:	  Action()\n\
	   <Btn1Down>(2): Action2()"

      and not have both of them get dispatched on a double click . 
      I know they put a time-out value in R4 .. but it still 
      seems to dispatch both of them.


Thanks,
  Jeff Markham
  markham@cadence.com

Uuunet@vicorp.com (UUNET) (08/16/90)

I like what Richard has suggested alot ...
 re: 1.  ( graphical lists )
         I've done one of these (its commercial so I can't post it) ..
         and boy are they handy. The only thing I can add here is that
         I did it using a parasite approach .. so you can attach these
         display lists onto any existing widget or gadget.  If you do
         the graphics layer right, you can get some really good 
         performance.

 re: 2.  ( resource change callbacks )
         Again .. a good idea , but could lead to severe performance
         degradation.  I would think it would be OK if one could be
         called back as a preSetValues->postSetValues pair so that
         you don't branch out in the middle of a propagation.

 re: (graphical constraints)
         Maybe what's needed here is an active constraint system. The
         current offering of Constraint class widgets are quite passive,
         and the constraints they understand are too atomic. It would
         be really neat if we could have some Constraint widgets that 
         could incorporate some of the features found in a Constraint
         Programming Language .. where more than trivial constraints
         could be described and satisfied via a constraint satisfaction
         system.  Then .. things like graphical contraints would be quite
         easy to do ... "Put this over here and line this group up 
         N apart and with their top edges aligned". Most of the time,
         you wind up creating a complex widget tree just so the
         contraints won't screw up.  MIT has alot of experience here,
         so the right people are around to make it happen.

I'd like to also add a few things to the Xt wish list ...

  1). The way resources are passed and cached really needs to be
      re-examined.  A significant part of the widget creation time
      comes from creating and merging arg lists .. and then searching
      through the class hierarchy to find the class that cares about
      this resource.  Along they way , lots of code gets called that
      says .. do you care about this ? .. no .. go up.  I understand
      why strings need to be around for the resource property, but
      some pretty good performance speed-ups could be gained if XmN.....
      was a int or short hash index rather than a string .. and unless
      you've got a pretty smart loader, the image is filled with
      duplicated (long I might add) strings.

  2). Similarly,  it would be nice if you could specify a 
      prototypical widget that embodies the majority of the
      resources you wish to use in the future .. and refer to it
      when creating a new widget.  Then you override only the
      resources you were different. I bet you could play alot
      of tricks with backpointers that would cut down memory useage
      quite a bit.  Its sort of multiple inheritance I guess.

  3). AT&T did a really neat thing in the OpenLook widgets called
      "Flat Widgets" .. I haven't seen the code for this .. but I
      bet its a "superWidget" that has lots of subareas that it knows
      how to render and dispatch internally to mimick many children.
      Seems like this would be a generally good thing to have in 
      the Xaw stuff ... Sun/AT&T are Consortium members .. maybe they
      would be interested in helping here.

  4). Translation Tables need to be re-examined .. boy are they 
      big.

  5). An exclusive late binding  would be nice.  It would be great
      to say

          "<Btn1Down>:	  Action()\n\
	   <Btn1Down>(2): Action2()"

      and not have both of them get dispatched on a double click . 
      I know they put a time-out value in R4 .. but it still 
      seems to dispatch both of them.


Thanks,
  Jeff Markham
  markham@cadence.com