topical media & game development
lib-of-vs-libs-QTDevWin-CIncludes-QD3DExtension.h / h
/*
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 <QD3D.h>
endif
ifndef __QD3DERRORS__
include <QD3DErrors.h>
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__ */
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.