*** include/W3Kit/W3Application.h.orig Thu Apr 21 20:21:31 1994 --- include/W3Kit/W3Application.h Thu Jun 2 19:00:46 1994 *************** *** 9,15 **** // X11_Application // // The W3Application object is the central actor in a W3Kit application. ! // It handles communications with HTTP and display servers, and coodinates // the saving, restoring, and updating of the state of application objects. // Application state is updated through a simulated "event loop". // --- 9,15 ---- // X11_Application // // The W3Application object is the central actor in a W3Kit application. ! // It handles communications with HTTP and display servers, and coordinates // the saving, restoring, and updating of the state of application objects. // Application state is updated through a simulated "event loop". // *************** *** 91,98 **** // The printf: method will be most useful for Form layout. // // Note that "submit" buttons can be manipulated as full-fledged ! // widgets via the W3Button class. However, the "reset" buttons ! // can only be generated through the methods below. // - printHtml; - printf:(const char *)format,...; --- 91,99 ---- // The printf: method will be most useful for Form layout. // // Note that "submit" buttons can be manipulated as full-fledged ! // widgets via the W3Button class. ! // However, the "reset" buttons can only be generated through ! // the methods below. // - printHtml; - printf:(const char *)format,...; *** include/W3Kit/W3PostScript.h.orig Mon Apr 11 01:46:46 1994 --- include/W3Kit/W3PostScript.h Sun Jul 17 20:03:13 1994 *************** *** 8,15 **** // Superclass: W3Input // // An abstract W3Kit base class for 2D PostScript graphics. The main ! // subclass methods are drawPostScript and mouseClick:. // // If the image size is w-by-h pixels, then the initial coordinate // system for PS drawing puts the corners at the following coordinates: //
--- 8,16 ----
  // Superclass: W3Input
  //
  // An abstract W3Kit base class for 2D PostScript graphics.  The main
! // subclass methods are drawPostScript, mouseClick:, and mouseDrag:.
  //
+ // 

Conventions for Graphics and Events

// If the image size is w-by-h pixels, then the initial coordinate // system for PS drawing puts the corners at the following coordinates: //
***************
*** 25,30 ****
--- 26,45 ----
  #import "W3Input.h"
  #import "w3graphics.h"
  
+ //)
+ // By default, a W3PostScript widget only receives mouse click events;
+ // these are the only events supported by the HTML 2.0 standard.  In
+ // HTML 3.0, however, general pen input is supported, and such events
+ // can be enabled by including W3_MOUSEDRAG_MASK in the event mask.
+ 
+ 
+ #define W3_MOUSECLICK_MASK 0x0001
+ #define W3_MOUSEDRAG_MASK 0x0002
+ 
+ // (Warning: The HTML 3.0 features are currently incompletely emulated,
+ // using non-standard, undocumented features of X Mosaic.)
+ //(
+ 
  @interface W3PostScript:W3Input
  {
  	IntSize frame;
***************
*** 31,36 ****
--- 46,52 ----
  	int depth;
  	float user[6], device[6];
  	id window;
+ 	unsigned int eventMask;
  }
  
  //)
***************
*** 65,73 ****
  - scale:(float)x :(float)y;
  
  // 

Events and Display

! // Override these in subclass to customize appearance, event response. - drawPostScript; - mouseClick:(const Point2 *)aPoint; // Different ways to route the output of drawing. - printHtml; // print HTML for inlining the image --- 81,94 ---- - scale:(float)x :(float)y; //

Events and Display

! // Override these in your subclass to customize appearance and event ! // response. Note that all event data is delivered in the PostScript ! // user coordinates. - drawPostScript; - mouseClick:(const Point2 *)aPoint; + - mouseDrag:(const Path2 *)path; + - (unsigned int)eventMask; + - setEventMask:(unsigned int)mask; // Different ways to route the output of drawing. - printHtml; // print HTML for inlining the image *** include/W3Kit/W3Radio.h.orig Wed Apr 20 13:11:22 1994 --- include/W3Kit/W3Radio.h Wed May 18 15:17:31 1994 *************** *** 27,32 **** --- 27,38 ---- // should be laid out horizontally or vertically (default is horizontal). - (BOOL)wantsVerticalLayout; + // If you want to display icons instead of text as labels for the options, + // you can use this method to print out just the button corresponding to + // a single option. No extra text will be displayed with the button, + // leaving the area clear for your icon. + - printHtmlAt:(int)option_index; + //( @end //) *** src/W3Kit/Makefile.orig Mon Apr 18 08:02:16 1994 --- src/W3Kit/Makefile Mon Jun 6 23:32:38 1994 *************** *** 20,26 **** W3Document.m W3Input.m \ W3MinneGraphics.m W3MinneSelection.m W3PostScript.m \ W3Radio.m W3Select.m W3TextArea.m W3TextField.m \ ! XDPS_Window.m X11_Application.m X11_Window.m \ w3io.m xvgifwr.m TARGET=lib-build --- 20,26 ---- W3Document.m W3Input.m \ W3MinneGraphics.m W3MinneSelection.m W3PostScript.m \ W3Radio.m W3Select.m W3TextArea.m W3TextField.m \ ! XDPS_Window.m X11_Application.m X11_Graphics.m X11_Window.m \ w3io.m xvgifwr.m TARGET=lib-build *** src/W3Kit/W3Document.m.orig Mon Apr 18 08:22:47 1994 --- src/W3Kit/W3Document.m Sun May 1 18:49:09 1994 *************** *** 16,27 **** #import #import "alloc.h" - #define LF 10 - #ifndef MAX #define MAX(a,b) (((a)>(b))?(a):(b)) #endif #define RETURN_CACHED(type, value) \ { \ static type cached = 0; \ --- 16,35 ---- #import #import "alloc.h" #ifndef MAX #define MAX(a,b) (((a)>(b))?(a):(b)) #endif + #define LF 10 + + // We must make sure to automatically expire all output to + // prevent caching proxy servers from getting confused. + // This macro is intended as an argument string for printf() et al. + + #define MIME_HEADER(mimeType) \ + "Content-type: %s%cExpires: Sunday, 01-Jan-00 00:00:00 GMT%c%c", \ + mimeType, LF, LF, LF + #define RETURN_CACHED(type, value) \ { \ static type cached = 0; \ *************** *** 51,57 **** { 0, 0 } }; - static char mime_header[] = "Content-type: %s%c%c"; static const char **w3CheckDirs = 0, **w3CheckURLs = 0; static int seedCount = 0; --- 59,64 ---- *************** *** 207,213 **** if(willCreate) { outputStream = stream_stdout(); ! stream_printf(outputStream, mime_header, mimeType, LF, LF); } return self; } --- 214,220 ---- if(willCreate) { outputStream = stream_stdout(); ! stream_printf(outputStream, MIME_HEADER(mimeType)); } return self; } *** src/W3Kit/W3PostScript.m.orig Thu Apr 21 17:59:59 1994 --- src/W3Kit/W3PostScript.m Sun Jul 17 23:44:22 1994 *************** *** 15,21 **** --- 15,24 ---- // Copyright (c) 1994 by The Geometry Center. // Distributed under the terms of the GNU Library General Public License. + #import + #import #import + #import "alloc.h" #define MARGIN 72 *************** *** 52,65 **** "%%%%EndDocument\n" "\n"; - (const char *)inputType { ! return [W3App imageInputType]; } - (BOOL)doesTriggerReturn { ! return YES; } // We think of PS transformations as acting on homogeneous row vectors, --- 55,76 ---- "%%%%EndDocument\n" "\n"; + + initialize + { + if(self == [W3PostScript class]) [self setVersion:1]; + return self; + } + - (const char *)inputType { ! if(eventMask & W3_MOUSEDRAG_MASK) return "jot"; //***XMOSAIC*** ! else return [W3App imageInputType]; } - (BOOL)doesTriggerReturn { ! if(eventMask & W3_MOUSEDRAG_MASK) return NO; ! else return YES; } // We think of PS transformations as acting on homogeneous row vectors, *************** *** 113,118 **** --- 124,130 ---- float identity[6] = { 1, 0, 0, 1, 0, 0 }; if(![super init]) return nil; + eventMask = W3_MOUSECLICK_MASK; frame.width = frame.height = 400; for(i=0; i<6; i++) user[i] = device[i] = identity[i]; return self; *************** *** 126,154 **** - write:(TypedStream *)stream { - // Only record essential state. [super write:stream]; ! objc_write_types(stream, "ii", &frame.width, &frame.height); ! #ifdef NeXT ! objc_write_array(stream, "f", 6, user); ! #else ! //!!! GNU Obj-C bug -- archiving floating point not supported. ! objc_write_array(stream, "c", sizeof(user), user); ! #endif return self; } - read:(TypedStream *)stream { ! // Only record essential state. [super read:stream]; ! objc_read_types(stream, "ii", &frame.width, &frame.height); ! #ifdef NeXT ! objc_read_array(stream, "f", 6, user); ! #else ! //!!! GNU Obj-C bug -- archiving floating point not supported. ! objc_read_array(stream, "c", sizeof(user), user); ! #endif tm_invert(user, device); return self; } --- 138,207 ---- - write:(TypedStream *)stream { [super write:stream]; ! ! // Only record essential state. ! // This is version 1 of the class. ! objc_write_types(stream, "Iii", ! &eventMask, &frame.width, &frame.height); ! # ifdef NeXT ! objc_write_array(stream, "f", 6, user); ! # else ! //!!! GNU Obj-C bug -- archiving floating point not supported. ! objc_write_array(stream, "c", sizeof(user), user); ! # endif return self; } - read:(TypedStream *)stream { ! int version; ! ! //!!! GNU Obj-C does not appear to call +initialize unless a msg is ! //!!! sent directly to the class object! These "no-ops" should force ! //!!! +initialize to be called. ! [W3PostScript class]; ! [[self class] class]; ! [super read:stream]; ! ! // Preset values for newer variables. ! eventMask = W3_MOUSECLICK_MASK; ! ! // Only read essential state. ! # ifdef NeXT ! version = objc_get_stream_class_version(stream, [W3PostScript class]); ! # else ! //!!! GNU Obj-C bug -- superclass versions are not recorded. ! //!!! Thus, versioning fails for abstract classes like this. ! version = [[W3PostScript class] version]; ! # endif ! switch(version) ! { ! case 1: ! // Current version. ! objc_read_types(stream, "Iii", ! &eventMask, &frame.width, &frame.height); ! # ifdef NeXT ! objc_read_array(stream, "f", 6, user); ! # else ! //!!! GNU Obj-C bug -- archiving floating point not supported. ! objc_read_array(stream, "c", sizeof(user), user); ! # endif ! break; ! ! case 0: ! default: ! // Original version. ! objc_read_types(stream, "ii", &frame.width, &frame.height); ! # ifdef NeXT ! objc_read_array(stream, "f", 6, user); ! # else ! //!!! GNU Obj-C bug -- archiving floating point not supported. ! objc_read_array(stream, "c", sizeof(user), user); ! # endif ! break; ! } tm_invert(user, device); return self; } *************** *** 289,294 **** --- 342,348 ---- // Note that the y-axis in image coords points downward, with the // origin at the top left corner. // Reject clicks outside of image bounds. + if(!(eventMask & W3_MOUSECLICK_MASK)) return nil; if(!aPoint || frame.width==0 || frame.height==0) return nil; if(aPoint->x<0 || aPoint->x>frame.width || aPoint->y<0 || aPoint->y>frame.height) *************** *** 305,310 **** --- 359,438 ---- return self; } + - enterStringValue:(const char *)aString + { + unsigned int i, coordlen, unitlen, npts; + char *output, *ink_start, *ink_stop; + const char *input; + Path2 *path; + id ok; + + // This method translates EJB's (Eric J. Bina's?) encoded binary + // ink format, as returned by X Mosaic's undocumented JOT widget, + // into the corresponding unencoded binary ink format, and then + // into a PostScript path representing the pen-down part of the ink. + // Neither the encoded nor the unencoded formats appear to adhere + // to the JOT standard for ink data interchange (for example, + // coordinates in JOT are always measured from the lower left corner). + + + // Translate EJB's encoded format back into unencoded binary. + if(!(eventMask & W3_MOUSEDRAG_MASK) || !aString) return nil; + if(!MALLOC(ink_start, char, strlen(aString)+1)) return nil; + for(output=ink_start, input=aString; *input; input++) + { + if(*input != 'o') *output++ = *input; + else switch(*++input) + { + // "oO" means NUL, "oo" means 'o'. + case 'O': *output++ = 0; break; + case 'o': *output++ = 'o'; break; + default: FREE(ink_start); return nil; + } + } + ink_stop = output; + + // Bundle EJB's binary ink data into a PostScript path. + coordlen = sizeof(u_long); + unitlen = 2*coordlen + sizeof(char); + npts = (ink_stop - ink_start) / unitlen; + if(npts<=0 || !(path = Path2_alloc(2*npts, npts))) + { FREE(ink_start); return nil; } + for(i=0, input=ink_start; i", ! [self name], [imageDoc URL]]; ! [self beginPrintHtml]; ! [W3App printf:" ALIGN=\"top\" SIZE=\"%d, %d\" ", ! frame.width, frame.height]; ! [self endPrintHtml]; ! } ! else if((eventMask & W3_MOUSECLICK_MASK)) ! { ! // We are only prepared to receive mouse clicks. ! // Render ourselves as either an HTML 2.0 IMAGE widget or ! // an HTML 3.0 SUBMIT widget, as appropriate. ! ! [self beginPrintHtml]; ! [W3App printf:" ALT=\"2D Graphics (%s)\" ALIGN=\"top\" SRC=\"%s\" ", ! [self name], [imageDoc URL]]; ! [self endPrintHtml]; ! } ! else ! { ! // We do not wish to receive events. ! // Just display an inline IMG. ! ! [W3App printf: ! "\"2D", ! [self name], [imageDoc URL]]; ! } [imageDoc free]; return self; } *** src/W3Kit/W3Radio.m.orig Mon Feb 21 04:22:50 1994 --- src/W3Kit/W3Radio.m Wed May 18 15:13:11 1994 *************** *** 45,50 **** --- 45,69 ---- return self; } + - printHtmlAt:(int)option_index + { + // This method allows the construction of graphical menus. + // It generates just the single HTML "radio" INPUT tag for + // the option requested, without any extra visible text. + + int i; + const char **option = [self optionNames]; + if(!option) return nil; + for(i=0; *option && i ! W3Kit 2.0, An Object-Oriented Toolkit for Interactive WWW Applications !

W3Kit 2.0

An object-oriented toolkit for building interactive World Wide Web applications, by --- 1,9 ---- ! W3Kit 2.1, An Object-Oriented Toolkit for Interactive WWW Applications !

W3Kit 2.1

An object-oriented toolkit for building interactive World Wide Web applications, by *************** *** 18,25 ****

The World Wide Web now enjoys both client- and server-side standards ! (HTML 1.8, ! HTML+, and CGI 1.1) which support the development and deployment of distributed interactive graphical applications using standard HTTP clients and servers. Nevertheless, implementing sophisticated applications based directly on these standards is not straightforward.

--- 18,25 ----

The World Wide Web now enjoys both client- and server-side standards ! (HTML 2.0, ! HTML 3.0, and CGI 1.1) which support the development and deployment of distributed interactive graphical applications using standard HTTP clients and servers. Nevertheless, implementing sophisticated applications based directly on these standards is not straightforward.

*************** *** 36,42 ****

Reference

  • Downloading and Installing W3Kit !
  • Changes for Version 2.0
  • Complete Guide to W3Kit Classes
  • Designing An Application
  • Designing A New Widget --- 36,42 ----

    Reference

    *** doc-2.0/Classes/W3Application.html Fri Apr 22 22:17:55 1994 --- doc/Classes/W3Application.html Sun Jul 17 20:03:20 1994 *************** *** 4,10 **** X11_Application

    The W3Application object is the central actor in a W3Kit application. ! It handles communications with HTTP and display servers, and coodinates the saving, restoring, and updating of the state of application objects. Application state is updated through a simulated "event loop".

    --- 4,10 ---- X11_Application

    The W3Application object is the central actor in a W3Kit application. ! It handles communications with HTTP and display servers, and coordinates the saving, restoring, and updating of the state of application objects. Application state is updated through a simulated "event loop".

    *************** *** 65,72 **** The printf: method will be most useful for Form layout.

    Note that "submit" buttons can be manipulated as full-fledged ! widgets via the W3Button class. However, the "reset" buttons ! can only be generated through the methods below.

      - printHtml;
    --- 65,73 ----
      The printf: method will be most useful for Form layout.
      

    Note that "submit" buttons can be manipulated as full-fledged ! widgets via the W3Button class. ! However, the "reset" buttons can only be generated through ! the methods below.

      - printHtml;
    *** doc-2.0/Classes/W3PostScript.html	Fri Apr 22 22:17:57 1994
    --- doc/Classes/W3PostScript.html	Sun Jul 17 20:03:23 1994
    ***************
    *** 3,10 ****
      Superclass: W3Input
      

    An abstract W3Kit base class for 2D PostScript graphics. The main ! subclass methods are drawPostScript and mouseClick:.

    If the image size is w-by-h pixels, then the initial coordinate system for PS drawing puts the corners at the following coordinates:

    --- 3,11 ----
      Superclass: W3Input
      

    An abstract W3Kit base class for 2D PostScript graphics. The main ! subclass methods are drawPostScript, mouseClick:, and mouseDrag:.

    +

    Conventions for Graphics and Events

    If the image size is w-by-h pixels, then the initial coordinate system for PS drawing puts the corners at the following coordinates:
    ***************
    *** 15,20 ****
    --- 16,31 ----
      (These initial coordinates are not the same as raw device coordinates,
      which should be avoided since they are not consistent across DPS platforms.)
      

    + By default, a W3PostScript widget only receives mouse click events; + these are the only events supported by the HTML 2.0 standard. In + HTML 3.0, however, general pen input is supported, and such events + can be enabled by including W3_MOUSEDRAG_MASK in the event mask. +

    + #define W3_MOUSECLICK_MASK 0x0001
    + #define W3_MOUSEDRAG_MASK 0x0002
    + 
    + (Warning: The HTML 3.0 features are currently incompletely emulated, + using non-standard, undocumented features of X Mosaic.)

    Transforms

    The "essential state" of the PostScript drawing area consists of the image size, and the user-to-device coordinate transform. *************** *** 47,56 **** - scale:(float)x :(float)y;

    Events and Display

    ! Override these in subclass to customize appearance, event response.
      - drawPostScript;
      - mouseClick:(const Point2 *)aPoint;
      
    Different ways to route the output of drawing.
    --- 58,72 ----
      - scale:(float)x :(float)y;
      

    Events and Display

    ! Override these in your subclass to customize appearance and event ! response. Note that all event data is delivered in the PostScript ! user coordinates.
      - drawPostScript;
      - mouseClick:(const Point2 *)aPoint;
    + - mouseDrag:(const Path2 *)path;
    + - (unsigned int)eventMask;
    + - setEventMask:(unsigned int)mask;
      
    Different ways to route the output of drawing.
    *** doc-2.0/Classes/W3Radio.html	Fri Apr 22 22:17:57 1994
    --- doc/Classes/W3Radio.html	Sun Jul 17 20:03:23 1994
    ***************
    *** 16,20 ****
    --- 16,27 ----
      
      - (BOOL)wantsVerticalLayout;
      
    + If you want to display icons instead of text as labels for the options, + you can use this method to print out just the button corresponding to + a single option. No extra text will be displayed with the button, + leaving the area clear for your icon. +
    + - printHtmlAt:(int)option_index;
    + 

    Back to Table of Classes *** doc-2.0/Overview/OOP-GUI.html Sun Apr 24 23:51:44 1994 --- doc/Overview/OOP-GUI.html Mon Jul 18 01:02:02 1994 *************** *** 25,30 **** --- 25,31 ---- PostScript and MinneGraphics (the Geometry Center's common interface to Renderman, GL, and X11). They also provide a high-level interface for handling mouse events. + (A low-level X11 graphics widget is also included.)

    W3Button, W3CheckBox, *** doc-2.0/Overview/Standards.html Sun Apr 24 23:52:28 1994 --- doc/Overview/Standards.html Mon Jul 18 00:55:17 1994 *************** *** 8,22 ****

    Client-Side Standards

    ! W3Kit applications can be accessed using any HTML 1.8 or HTML+ compliant WWW browser. W3Kit particularly exercises the browser's fill-out form capabilities. These two standards are unfortunately slightly incompatible in their treatment of graphical input elements in fill-out forms. However, when running under a CGI/1.1 compliant HTTP server, W3Kit will attempt to adapt to the client's capabilities. Separate starting pages would still be required to support both formats, but they can point to the same CGI script.

      !
    • HTML version 1.8. ! The prototypical example of a HTML 1.8 compliant browser is NCSA Mosaic for the X Window System, version 2.0 or later. Note that as of version 2.0-alpha-4, NCSA Mosaic for MS Windows does not qualify, because it does not implement graphical inputs. Please write to mosaic-win@ncsa.uiuc.edu if you would like to see this corrected.
    • ! HTML+ (draft). ! Reportedly, newer versions of Bill Perry's Emacs W3 Browser will support enough of HTML+ to run W3Kit applications. I have not been able to test this.

    Server-Side Standards

    --- 8,22 ----

    Client-Side Standards

    ! W3Kit applications can be accessed using any HTML 2.0 or HTML 3.0 compliant WWW browser. W3Kit particularly exercises the browser's fill-out form capabilities. These two standards are unfortunately slightly incompatible in their treatment of graphical input elements in fill-out forms. However, when running under a CGI/1.1 compliant HTTP server, W3Kit will attempt to adapt to the client's capabilities. Separate starting pages would still be required to support both formats, but they can point to the same CGI script.

      !
    • HTML version 2.0. ! The prototypical example of a HTML 2.0 compliant browser is NCSA Mosaic for the X Window System, version 2.2 or later. Note that as of version 2.0-alpha-4, NCSA Mosaic for MS Windows does not qualify, because it does not implement graphical inputs. Please write to mosaic-win@ncsa.uiuc.edu if you would like to see this corrected.
    • ! HTML 3.0 (draft). ! Reportedly, newer versions of Bill Perry's Emacs W3 Browser will support enough of HTML 3.0 to run W3Kit applications. I have not been able to test this.

    Server-Side Standards

    *************** *** 26,32 **** --- 26,32 ---- *** doc-2.0/Versions/Bugs-2.0.html Sun Jul 17 23:35:02 1994 --- doc/Versions/Bugs-2.0.html Mon Jul 18 00:51:07 1994 *************** *** 5,10 **** --- 5,17 ----

    Known Problems and Bugs Related to W3Kit

    +

    W3Kit Bugs

    + +

    + The Path2_copy() function is broken in version 2.0 (fixed in 2.1). + This function is not used within the kit itself. + +

    GNU Objective-C Bugs

    *** /dev/null Sat Jul 16 20:10:49 1994 --- doc/Classes/X11_Graphics.html Sun Jul 17 20:03:25 1994 *************** *** 0 **** --- 1,49 ---- + X11_Graphics +

    X11_Graphics

    + Superclass: W3Input +

    + An abstract W3Kit base class for raw X11 graphics. The main + subclass methods are drawX11Graphics and mouseClick:. +

    +

    Coordinates

    + The "essential state" of the drawing area consists of the image size. +

    + The coordinate system for drawing is consistent with X11 coordinates, + i.e. they are in pixel units, with the origin in the upper left corner, + x-axis pointing right, and y-axis pointing down. +

    +

    + - setIntSize:(const IntSize *)theSize;
    + - getIntSize:(IntSize *)theSize;
    + 
    +

    Events and Display

    + Override these in subclass to customize appearance, event response. +
    + - drawX11Graphics;
    + - mouseClick:(const Point2 *)aPoint;
    + 
    + Different ways to route the output of drawing. +
    + - printHtml;           // print HTML for inlining the image
    + - display;             // send out-of-line image back to user and exit
    + - snapshotDocument;    // capture image in a W3Document (returned)
    + 
    + On some systems, it is possible to adjust the image depth. +
    + - setImageBitDepth:(int)bits;
    + - takeImageBitDepthFrom:sender;
    + 
    +

    Incremental Drawing

    + If you need to perform X11 calls prior to drawX11Graphics, surround + them with the matched pair of messages below. +

    + (Note that the return value of lockFocus is NOT a success flag. + It merely indicates whether focus has already been locked on this widget. + The call to lockFocus should be balanced with an unlockFocus in any case.) +

    +

    + - (BOOL)lockFocus;
    + - unlockFocus;
    + 
    +

    + Back to Table of Classes *** /dev/null Sat Jul 16 20:10:49 1994 --- doc/Versions/Changes-2.1.html Mon Jul 18 01:01:10 1994 *************** *** 0 **** --- 1,31 ---- + + Changes for W3Kit 2.1 + + + +

    Changes for W3Kit 2.1

    + +

    + Version 2.1 is available as a patch to version 2.0. It contains the following changes: + +

    + Experimental mouse-drag handling was added to the W3PostScript class, based on undocumented features of X Mosaic. When HTML 3.0 becomes available, this hack will be replaced by the standard SCRIBBLE widget, which combines pen input with image display. + +

    + An X11_Graphics widget was added for those unfortunate enough to have to do their 2D graphics in straight X. + +

    + The Path2_copy() function was fixed. + +

    + The W3Radio widget was enhanced to allow the buttons to be printed separately. This is useful in the construction of graphical menus. + +

    + An Expires: header was added to W3Kit output to make absolutely sure that FORM output isn't cached by proxy servers. + +

    + Note: Because class versioning is buggy for abstract classes in GNU Objective-C, W3Kit pages stored by remote users will not be compatible between versions 2.0 and 2.1 of W3Kit. (This problem does not affect NeXTSTEP-based servers.) + +

    + W3Kit Home Page + *** /dev/null Sat Jul 16 20:10:49 1994 --- doc/Versions/Changes.html Mon Jul 18 00:47:37 1994 *************** *** 0 **** --- 1,15 ---- + + Changes for W3Kit Versions + + + +

    Changes for W3Kit Versions

    + + + +

    + W3Kit Home Page +