			      -*-text-*-
	      GYVE 0.2.x design memo for core developers

	       Time-stamp: <98/11/20 07:39:46 masata-y>
	
	     Masatake YAMATO<masata-y@is.aist-nara.ac.jp>

			   1. Architecture

0. GyveWindow
   GyveWindowϥ桼ޤ, Խ륦ɥɽ.
   GyveWindow礭ʬ2ĤΥ֥Ȥ񤷤Ƥ.
   1Ĥ, GyveWindowɽƤ, 桼ԽΤǤ޷
   ݻGyveBuffer, 桼Υޥ䥭ܡɤ, gyveԽ
   ΤΥץȤӤĤGyveCanvasǤ.


                              +--[޷ݻ]--o GyveBuffer o------------+
                              |					       |
    GyveWindow o--[wrapping]--+					       |
                              |					       |
                              +--[ý]--o GyveCanvas	       |
								       |
1. GyveView						          [ƻ]
							               |
GyveViewGdkEventΤexpose٥ȤΤߤޤ.                |
ޤ -redrawXXX:Ȥ᥽åɤޤ. expose٥Ȥ	       |
-redrawXXX:᥽åɤθƽФǽŪ˺ɬפΰ	       |
׻, GyveDrawingEngine˺ꤷޤ. 		               |
                                                                       |
			       GyveView o-[]-o GyveDrawingEngine o-+
				  o
				  |
			    [super class]
	                          |
                                  o
			      GyveCanvas o-[٥]-o GyveEventHandler

ʳˤɸѴredraw lockεǽ, gyveDPSContextޤȤ
Ƥ. 

2. GyveCanvas

GyveCanvas, GyveViewmousekey˴Ϣ륤٥ȤνǽղäΤ
. Υ٥Ȥ, GyveEventHandlerž. 


3. GyveBuffer
GyveBufferʣGyveLayerGyveSelectionsLayer
Ƥ. 

			      GyveBuffer o---------------o [NSUndoManager]
			[GyveSelectionsLayer]  V redraw
			[     GyveLayer1    ]
			[     GyveLayer2    ]
                                  :            
                                  :             
			[     GyveLayerN    ]  ^ ҥåȸн

٤ƤԽоݤ, ޤGyveSelectionsLayer. 
͡ʲùФ, GyveLayer᤹. 

4. GyveLayer
        
			      GyveLayer
			[     <PSFigObj>    ] V redraw
			[     <PSFigObj>    ]
                                  :
                                  :
			[     <PSFigObj>    ] ^ ҥåȸн

5. PSFigObj

   gyveǰ޷6ढ. ƤPSFigObjץȥŬ礷Ƥ. 

         <PSBBox, NSCopying> o--->---o <PSFigObj> o---+
						      |
						      +-o PSPath
						      |
						      +-o PSCompoundPaths
						      |
						      +-o PSFigObjGroup
						      |
						      +-o PSMaskedFigObjGroup
						      |
						      +-o PSImage
						      |
						      +-o <PSText> o---+
								       |
								       +...

			       2. BBox

			   3. Modificaiton 

			       4. Undo

		       5. Drawing Optimization

			     6. Interface

GUI parts should be wrapped by objc object.

 * GyveWindow 
 * LayerPallet<GyveGUI>
 * PaintStyle<GyveGUI>
 * TextStyle<GyveGUI>

