/* File: QD3DExtension.h Contains: QuickDraw 3D Plug-in Architecture Interface File. Version: Technology: Quickdraw 3D 1.6 Release: QuickTime 6.0.2 Copyright: (c) 1995-2001 by Apple Computer, Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __QD3DEXTENSION__ #define __QD3DEXTENSION__ #ifndef __QD3D__ #include #endif #ifndef __QD3DERRORS__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=power #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif #if PRAGMA_ENUM_ALWAYSINT #if defined(__fourbyteints__) && !__fourbyteints__ #define __QD3DEXTENSION__RESTORE_TWOBYTEINTS #pragma fourbyteints on #endif #pragma enumsalwaysint on #elif PRAGMA_ENUM_OPTIONS #pragma option enum=int #elif PRAGMA_ENUM_PACK #if __option(pack_enums) #define __QD3DEXTENSION__RESTORE_PACKED_ENUMS #pragma options(!pack_enums) #endif #endif /****************************************************************************** ** ** ** Constants ** ** ** *****************************************************************************/ #if TARGET_OS_MAC enum { kQ3XExtensionMacCreatorType = FOUR_CHAR_CODE('Q3XT'), kQ3XExtensionMacFileType = FOUR_CHAR_CODE('shlb') }; #endif /* TARGET_OS_MAC */ /****************************************************************************** ** ** ** Macros ** ** ** *****************************************************************************/ /* * Use this Macro to pack the version number for your class. This would most * likely get used in the kQ3XMethodTypeObjectClassVersion to return the * version for your class. This method is set up in your meta handler. */ #define Q3_OBJECT_CLASS_VERSION(major, minor) \ (unsigned long) (((major) << 16) | (minor)) /* * Convenience macros to unpack a version number, accessing the major and the * minor version numbers */ #define Q3_OBJECT_CLASS_GET_MAJOR_VERSION(version) \ (unsigned long) ((version) >> 16) #define Q3_OBJECT_CLASS_GET_MINOR_VERSION(version) \ (unsigned long) ((version) & 0x0000ffff) /****************************************************************************** ** ** ** Object Method types ** ** ** *****************************************************************************/ enum { kQ3XMethodTypeObjectClassVersion = FOUR_CHAR_CODE('vrsn') }; typedef unsigned long TQ3XObjectClassVersion; enum { kQ3XMethodTypeObjectClassRegister = FOUR_CHAR_CODE('rgst') }; typedef CALLBACK_API_C( TQ3Status , TQ3XObjectClassRegisterMethod )(TQ3XObjectClass objectClass, void *classPrivate); enum { kQ3XMethodTypeObjectClassReplace = FOUR_CHAR_CODE('rgrp') }; typedef CALLBACK_API_C( void , TQ3XObjectClassReplaceMethod )(TQ3XObjectClass oldObjectClass, void *oldClassPrivate, TQ3XObjectClass newObjectClass, void *newClassPrivate); enum { kQ3XMethodTypeObjectClassUnregister = FOUR_CHAR_CODE('unrg') }; typedef CALLBACK_API_C( void , TQ3XObjectClassUnregisterMethod )(TQ3XObjectClass objectClass, void *classPrivate); enum { kQ3XMethodTypeObjectNew = FOUR_CHAR_CODE('newo') }; typedef CALLBACK_API_C( TQ3Status , TQ3XObjectNewMethod )(TQ3Object object, void *privateData, void *parameters); enum { kQ3XMethodTypeObjectDelete = FOUR_CHAR_CODE('dlte') }; typedef CALLBACK_API_C( void , TQ3XObjectDeleteMethod )(TQ3Object object, void *privateData); enum { kQ3XMethodTypeObjectDuplicate = FOUR_CHAR_CODE('dupl') }; typedef CALLBACK_API_C( TQ3Status , TQ3XObjectDuplicateMethod )(TQ3Object fromObject, const void *fromPrivateData, TQ3Object toObject, const void *toPrivateData); typedef CALLBACK_API_C( TQ3Status , TQ3XSharedLibraryRegister )(void ); /****************************************************************************** ** ** ** Object Hierarchy Registration ** ** ** *****************************************************************************/ /* * Q3XObjectHierarchy_RegisterClass * * Register an object class in the QuickDraw 3D hierarchy. * * parentType - an existing type in the hierarchy, or 0 to subclass * TQ3Object * objectType - the new object class type, used in the binary * metafile. This is assigned at run time and returned * to you. * objectName - the new object name, used in the text metafile * metaHandler - a TQ3XMetaHandler (may be NULL for some classes) * which returns non-virtual methods * virtualMetaHandler - a TQ3XMetaHandler (may be NULL as well) which returns * virtual methods a child would inherit * methodsSize - the size of the class data needed (see * GetClassPrivate calls below) * instanceSize - the size of the object instance data needed (see * GetPrivate calls below) */ #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3XObjectClass ) Q3XObjectHierarchy_RegisterClass (TQ3ObjectType parentType, TQ3ObjectType * objectType, char * objectName, TQ3XMetaHandler metaHandler, TQ3XMetaHandler virtualMetaHandler, unsigned long methodsSize, unsigned long instanceSize); /* * Q3XObjectHierarchy_UnregisterClass * * Returns kQ3Failure if the objectClass still has objects * around; the class remains registered. */ EXTERN_API_C( TQ3Status ) Q3XObjectHierarchy_UnregisterClass (TQ3XObjectClass objectClass); /* * Q3XObjectHierarchy_GetMethod * * For use in TQ3XObjectClassRegisterMethod call */ EXTERN_API_C( TQ3XFunctionPointer ) Q3XObjectClass_GetMethod (TQ3XObjectClass objectClass, TQ3XMethodType methodType); /* * Q3XObjectHierarchy_NewObject * * To create a new object. Parameters is passed into the * TQ3XObjectNewMethod as the "parameters" parameter. */ EXTERN_API_C( TQ3Object ) Q3XObjectHierarchy_NewObject (TQ3XObjectClass objectClass, void * parameters); /* * Q3XObjectClass_GetLeafType * * Return the leaf type of a class. */ EXTERN_API_C( TQ3ObjectType ) Q3XObjectClass_GetLeafType (TQ3XObjectClass objectClass); /* * Q3XObjectClass_GetVersion * This routine obtains the the version of a class, referenced by an * object class type. Functions for getting the type are in QD3D.h, * if you have the class name. */ EXTERN_API_C( TQ3Status ) Q3XObjectHierarchy_GetClassVersion (TQ3ObjectType objectClassType, TQ3XObjectClassVersion * version); /* * Q3XObjectClass_GetType * * This can be used to get the type, given a reference * to a class. This is most useful in the instance where you register a * an element/attribute and need to get the type. When you register an * element, QD3D will take the type you pass in and modify it (to avoid * namespace clashes). Many object system calls require an object type * so this API call allows you to get the type from the class referernce * that you will ordinarily store when you register the class. */ EXTERN_API_C( TQ3Status ) Q3XObjectClass_GetType (TQ3XObjectClass objectClass, TQ3ObjectType * theType); EXTERN_API_C( TQ3XObjectClass ) Q3XObjectHierarchy_FindClassByType (TQ3ObjectType theType); /* * Q3XObjectClass_GetPrivate * * Return a pointer to private instance data, a block of instanceSize bytes, * from the Q3XObjectHierarchy_RegisterClass call. * * If instanceSize was zero, NULL is always returned. */ EXTERN_API_C( void *) Q3XObjectClass_GetPrivate (TQ3XObjectClass objectClass, TQ3Object targetObject); /* * Return the "TQ3XObjectClass" of an object */ EXTERN_API_C( TQ3XObjectClass ) Q3XObject_GetClass (TQ3Object object); /****************************************************************************** ** ** ** Shared Library Registration Entry Point ** ** ** *****************************************************************************/ #endif /* CALL_NOT_IN_CARBON */ struct TQ3XSharedLibraryInfo { TQ3XSharedLibraryRegister registerFunction; unsigned long sharedLibrary; }; typedef struct TQ3XSharedLibraryInfo TQ3XSharedLibraryInfo; #if CALL_NOT_IN_CARBON EXTERN_API_C( TQ3Status ) Q3XSharedLibrary_Register (TQ3XSharedLibraryInfo * sharedLibraryInfo); EXTERN_API_C( TQ3Status ) Q3XSharedLibrary_Unregister (unsigned long sharedLibrary); /****************************************************************************** ** ** ** Posting Errors ** ** ** ** You may only call these functions from within an extension ** ** ** *****************************************************************************/ /* * Q3XError_Post * * Post a QuickDraw 3D Error from an extension. */ EXTERN_API_C( void ) Q3XError_Post (TQ3Error error); /* * Q3XWarning_Post * * Post a QuickDraw 3D Warning, from an extension. Note the warning code you * pass into this routine must already be defined in the table above. */ EXTERN_API_C( void ) Q3XWarning_Post (TQ3Warning warning); /* * Q3XNotice_Post * * Post a QuickDraw 3D Notice, from an extension. Note the notice code you * pass into this routine must already be defined in the table above. */ EXTERN_API_C( void ) Q3XNotice_Post (TQ3Notice notice); #endif /* CALL_NOT_IN_CARBON */ #if TARGET_OS_MAC /* * Q3XMacintoshError_Post * * Post the QuickDraw 3D Error, kQ3ErrorMacintoshError, and the Macintosh * OSErr macOSErr. (Retrieved with Q3MacintoshError_Get) */ #if CALL_NOT_IN_CARBON EXTERN_API_C( void ) Q3XMacintoshError_Post (OSErr macOSErr); #endif /* CALL_NOT_IN_CARBON */ #endif /* TARGET_OS_MAC */ #if PRAGMA_ENUM_ALWAYSINT #pragma enumsalwaysint reset #ifdef __QD3DEXTENSION__RESTORE_TWOBYTEINTS #pragma fourbyteints off #endif #elif PRAGMA_ENUM_OPTIONS #pragma option enum=reset #elif defined(__QD3DEXTENSION__RESTORE_PACKED_ENUMS) #pragma options(pack_enums) #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __QD3DEXTENSION__ */