home *** CD-ROM | disk | FTP | other *** search
- /*
- File: Canvas.cpp
-
- Contains: ODCanvas, a Macintosh drawing environment.
-
- Owned by: Jens Alfke
- Owned by: Jens Alfke, Joshua Susser
-
- Copyright: © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <9> 9/18/95 JBS 1285042 don't use QD grafport calls for
- in/validation when printing
- <8> 8/7/95 JBS 1275083 added Invalidate & Validate (moved
- from ODFacet)
- <7> 5/25/95 jpa Use new GX headers [1241078, 1253324]
- <6> 3/20/95 jpa Create gxViewPort when asked for it
- [1218787]. SOM_CATCH --> SOM_TRY [1224355].
- <5> 12/5/94 jpa Fixes from code review. [1203923]
- <4> 9/29/94 RA 1189812: Mods for 68K build.
- <3> 8/17/94 jpa Function prefixes. [1181512]
- <2> 8/8/94 jpa API changes for multiformat canvases & bias
- transforms [1179683, 1178688]
- <1> 6/15/94 jpa first checked in
-
- To Do:
- In Progress:
- */
-
-
- #define ODCanvas_Class_Source
- #define VARIABLE_MACROS
- #include <Canvas.xih>
-
- #ifndef _REALSHPE_
- #include "RealShpe.h" /* For gGX */
- #endif
-
- #ifndef _EXCEPT_
- #include <Except.h>
- #endif
-
- #ifndef __GXENVIRONMENT__
- #include <GXEnvironment.h>
- #endif
-
-
- //------------------------------------------------------------------------------
- // InitCanvas
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODCanvas__InitCanvas(ODCanvas *somSelf, Environment *ev,
- ODGraphicsSystem graphicsSystem,
- ODPlatformCanvas platformCanvas,
- ODBoolean isDynamic,
- ODBoolean isOffscreen)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","InitCanvas");
-
- somSelf->InitBaseCanvas(ev,isDynamic,isOffscreen);
-
- if( graphicsSystem == kODQuickDraw )
- _fQDCanvas= platformCanvas;
- else if( graphicsSystem == kODQuickDrawGX )
- _fGXCanvas = platformCanvas;
- else
- ODSetSOMException(ev, kODErrInvalidGraphicsSystem);
- }
-
- //------------------------------------------------------------------------------
- // HasPlatformCanvas
- //------------------------------------------------------------------------------
-
- SOM_Scope ODBoolean SOMLINK ODCanvas__HasPlatformCanvas(ODCanvas *somSelf, Environment *ev,
- ODGraphicsSystem g)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","HasPlatformCanvas");
-
- if( g == kODQuickDraw )
- return _fQDCanvas != kODNULL;
- else if( g == kODQuickDrawGX )
- return _fGXCanvas != kODNULL || (gGX && _fQDCanvas != kODNULL);
- else
- return kODFalse;
- }
-
- //------------------------------------------------------------------------------
- // GetPlatformCanvas
- //------------------------------------------------------------------------------
-
- SOM_Scope ODPlatformCanvas SOMLINK ODCanvas__GetPlatformCanvas(ODCanvas *somSelf, Environment *ev,
- ODGraphicsSystem g)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","GetPlatformCanvas");
-
- ODPlatformCanvas c;
- if( g == kODQuickDraw )
- c= _fQDCanvas;
- else if( g == kODQuickDrawGX ) {
- if( !_fGXCanvas ) {
- (void) ODCanvas__GetGXViewport(somSelf,ev);
- if( ev->_major )
- return kODNULL;
- }
- c = _fGXCanvas;
- } else
- c = kODNULL;
-
- if( c == kODNULL )
- ODSetSOMException(ev, kODErrInvalidGraphicsSystem);
- return c;
- }
-
- //------------------------------------------------------------------------------
- // SetPlatformCanvas
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODCanvas__SetPlatformCanvas(ODCanvas *somSelf, Environment *ev,
- ODGraphicsSystem g,
- ODPlatformCanvas c)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","SetPlatformCanvas");
-
- if( g == kODQuickDraw )
- _fQDCanvas= c;
- else if( g == kODQuickDrawGX )
- _fGXCanvas = c;
- else
- ODSetSOMException(ev, kODErrInvalidGraphicsSystem);
- }
-
- //------------------------------------------------------------------------------
- // GetQDPort
- //------------------------------------------------------------------------------
-
- SOM_Scope GrafPtr SOMLINK ODCanvas__GetQDPort(ODCanvas *somSelf, Environment *ev)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","GetQDPort");
-
- if( !_fQDCanvas )
- ODSetSOMException(ev, kODErrInvalidGraphicsSystem);
- return (GrafPtr)_fQDCanvas;
- }
-
-
- //------------------------------------------------------------------------------
- // GetGXViewport
- //------------------------------------------------------------------------------
-
- SOM_Scope ODPlatformCanvas SOMLINK ODCanvas__GetGXViewport(ODCanvas *somSelf, Environment *ev)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","GetGXViewport");
-
- if( !_fGXCanvas ) {
- SOM_TRY
- if( !gGX || !_fQDCanvas )
- THROW(kODErrInvalidGraphicsSystem);
- else if( somSelf->IsOffscreen(ev) ) {
- THROW(kODErrNotImplemented); // $$$$$
- } else {
- ClearGXError();
- gxViewPort v = GXGetWindowViewPort((WindowPtr)_fQDCanvas);
- if( !v )
- v = GXNewWindowViewPort((WindowPtr)_fQDCanvas);
- ThrowIfFirstGXError();
- _fGXCanvas = (ODPlatformCanvas) v;
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
- return _fGXCanvas;
- }
-
- //------------------------------------------------------------------------------
- // Invalidate
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODCanvas__Invalidate(ODCanvas *somSelf, Environment *ev,
- ODShape* shape)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","Invalidate");
-
- SOM_TRY
-
- if ( somSelf->IsOffscreen(ev) )
- parent_Invalidate(somSelf, ev, shape);
- else if ( _fQDCanvas != kODNULL
- && !somSelf->HasPlatformPrintJob(ev, kODQuickDraw) )
- {
- GrafPtr savedPort;
- GrafPtr windowPort = (GrafPtr)_fQDCanvas;
- GetPort(&savedPort);
- SetPort(windowPort);
- short oldLeft = windowPort->portRect.left;
- short oldTop = windowPort->portRect.top;
- SetOrigin(0, 0);
- InvalRgn(shape->GetQDRegion(ev));
- SetOrigin(oldLeft, oldTop);
- SetPort(savedPort);
- }
-
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // Validate
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODCanvas__Validate(ODCanvas *somSelf, Environment *ev,
- ODShape* shape)
- {
- ODCanvasData *somThis = ODCanvasGetData(somSelf);
- ODCanvasMethodDebug("ODCanvas","Validate");
-
- SOM_TRY
-
- if ( somSelf->IsOffscreen(ev) )
- parent_Validate(somSelf, ev, shape);
- else if ( _fQDCanvas != kODNULL
- && !somSelf->HasPlatformPrintJob(ev, kODQuickDraw) )
- {
- GrafPtr savedPort;
- GrafPtr windowPort = (GrafPtr)_fQDCanvas;
- GetPort(&savedPort);
- SetPort(windowPort);
- short oldLeft = windowPort->portRect.left;
- short oldTop = windowPort->portRect.top;
- SetOrigin(0, 0);
- ValidRgn(shape->GetQDRegion(ev));
- SetOrigin(oldLeft, oldTop);
- SetPort(savedPort);
- }
-
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-