/* File: QD3DSet.h Contains: Q3Set types and routines Version: Technology: Quickdraw 3D 1.6 Release: QuickTime 7.3 Copyright: (c) 2007 (c) 1995-1999 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 __QD3DSET__ #define __QD3DSET__ #ifndef __QD3D__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_ENUM_ALWAYSINT #if defined(__fourbyteints__) && !__fourbyteints__ #define __QD3DSET__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 __QD3DSET__RESTORE_PACKED_ENUMS #pragma options(!pack_enums) #endif #endif /****************************************************************************** ** ** ** Set Routines ** ** ** *****************************************************************************/ #if CALL_NOT_IN_CARBON /* * Q3Set_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3SetObject ) Q3Set_New(void); /* * Q3Set_GetType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3ObjectType ) Q3Set_GetType(TQ3SetObject theSet); /* * Q3Set_Add() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Set_Add( TQ3SetObject theSet, TQ3ElementType theType, const void * data); /* * Q3Set_Get() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Set_Get( TQ3SetObject theSet, TQ3ElementType theType, void * data); /* * Q3Set_Contains() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Boolean ) Q3Set_Contains( TQ3SetObject theSet, TQ3ElementType theType); /* * Q3Set_Clear() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Set_Clear( TQ3SetObject theSet, TQ3ElementType theType); /* * Q3Set_Empty() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Set_Empty(TQ3SetObject target); /* * Iterating through all elements in a set * * Pass in kQ3ElementTypeNone to get first type * kQ3ElementTypeNone is returned when end of list is reached */ /* * Q3Set_GetNextElementType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Set_GetNextElementType( TQ3SetObject theSet, TQ3ElementType * theType); /****************************************************************************** ** ** ** Attribute Types ** ** ** *****************************************************************************/ /* * For the data types listed below, pass in a pointer to it in the _Add * and _Get calls. * * For surface shader attributes, reference counts are incremented on * the _Add and _Get */ #endif /* CALL_NOT_IN_CARBON */ enum TQ3AttributeTypes { /* Data Type */ kQ3AttributeTypeNone = 0, /* --------- */ kQ3AttributeTypeSurfaceUV = 1, /* TQ3Param2D */ kQ3AttributeTypeShadingUV = 2, /* TQ3Param2D */ kQ3AttributeTypeNormal = 3, /* TQ3Vector3D */ kQ3AttributeTypeAmbientCoefficient = 4, /* float */ kQ3AttributeTypeDiffuseColor = 5, /* TQ3ColorRGB */ kQ3AttributeTypeSpecularColor = 6, /* TQ3ColorRGB */ kQ3AttributeTypeSpecularControl = 7, /* float */ kQ3AttributeTypeTransparencyColor = 8, /* TQ3ColorRGB */ kQ3AttributeTypeSurfaceTangent = 9, /* TQ3Tangent2D */ kQ3AttributeTypeHighlightState = 10, /* TQ3Switch */ kQ3AttributeTypeSurfaceShader = 11, /* TQ3SurfaceShaderObject */ kQ3AttributeTypeNumTypes = 12 }; typedef enum TQ3AttributeTypes TQ3AttributeTypes; typedef TQ3ElementType TQ3AttributeType; /****************************************************************************** ** ** ** Attribute Drawing ** ** ** *****************************************************************************/ #if CALL_NOT_IN_CARBON /* * Q3Attribute_Submit() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3Attribute_Submit( TQ3AttributeType attributeType, const void * data, TQ3ViewObject view); /****************************************************************************** ** ** ** AttributeSet Routines ** ** ** *****************************************************************************/ /* * Q3AttributeSet_New() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3AttributeSet ) Q3AttributeSet_New(void); /* * Q3AttributeSet_Add() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3AttributeSet_Add( TQ3AttributeSet attributeSet, TQ3AttributeType theType, const void * data); /* * Q3AttributeSet_Contains() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Boolean ) Q3AttributeSet_Contains( TQ3AttributeSet attributeSet, TQ3AttributeType attributeType); /* * Q3AttributeSet_Get() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3AttributeSet_Get( TQ3AttributeSet attributeSet, TQ3AttributeType theType, void * data); /* * Q3AttributeSet_Clear() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3AttributeSet_Clear( TQ3AttributeSet attributeSet, TQ3AttributeType theType); /* * Q3AttributeSet_Empty() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3AttributeSet_Empty(TQ3AttributeSet target); /* * Q3AttributeSet_GetNextAttributeType * * Pass in kQ3AttributeTypeNone to get first type * kQ3AttributeTypeNone is returned when end of list is reached */ /* * Q3AttributeSet_GetNextAttributeType() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3AttributeSet_GetNextAttributeType( TQ3AttributeSet source, TQ3AttributeType * theType); /* * Q3AttributeSet_Submit() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3AttributeSet_Submit( TQ3AttributeSet attributeSet, TQ3ViewObject view); /* * Inherit from parent->child into result * Result attributes are: * all child attributes + all parent attributes NOT in the child */ /* * Q3AttributeSet_Inherit() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3AttributeSet_Inherit( TQ3AttributeSet parent, TQ3AttributeSet child, TQ3AttributeSet result); /****************************************************************************** ** ** ** Custom Element Registration ** ** ** *****************************************************************************/ /* * Element Methods - * * When you create a custom element, you control what structures are * passed around the API. For example, you may allow the Q3Set_Add call * take one type of argument, store your element internally in some * abstract data type, and have the Q3Set_Get call take a different * argument. * * For example: * * There are four calls which at some point will copy an element: * * Q3Set_Add (copied from Application memory to QuickDraw3D memory) * Q3Set_Get (copied from QuickDraw3D memory to Application memory) * Q3Object_Duplicate (all elements are copied internally) * Q3AttributeSet_Inherit (all elements are copied internally) * * Either CopyAdd or CopyReplace is called during the "_Add" call. * - CopyAdd is destructive and should assume "toElement" is garbage * - CopyReplace is replacing an existing element. * * CopyGet is called during the "_Get" call. * * CopyDuplicate is called to duplicate an element's internal structure. * * Attributes Methods - * * For copying data while Inheriting. Element methods are used * at all other times. * * CopyInherit is called to duplicate an element's internal structure * during inheritance. You should make this as fast as possible. * (for example, if your custom element contains objects, you * should do a Q3Shared_GetReference instead of a Q3Object_Duplicate) * * The ElementDelete method will be called for all of your elements * copied around via CopyAdd, CopyReplace, CopyDuplicate, and * CopyInherit. * If CopyGet allocates any memory in it's destination, it is up to the * application to delete it on its side. */ #endif /* CALL_NOT_IN_CARBON */ #define kQ3XMethodTypeElementCopyAdd Q3_METHOD_TYPE('e','c','p','a') #define kQ3XMethodTypeElementCopyReplace Q3_METHOD_TYPE('e','c','p','r') #define kQ3XMethodTypeElementCopyGet Q3_METHOD_TYPE('e','c','p','g') #define kQ3XMethodTypeElementCopyDuplicate Q3_METHOD_TYPE('e','c','p','d') #define kQ3XMethodTypeElementDelete Q3_METHOD_TYPE('e','d','e','l') typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyAddMethod )(const void *fromAPIElement, void *toInternalElement); typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyReplaceMethod )(const void *fromAPIElement, void *ontoInternalElement); typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyGetMethod )(const void *fromInternalElement, void *toAPIElement); typedef CALLBACK_API_C( TQ3Status , TQ3XElementCopyDuplicateMethod )(const void *fromInternalElement, void *toInternalElement); typedef CALLBACK_API_C( TQ3Status , TQ3XElementDeleteMethod )(void * internalElement); #if CALL_NOT_IN_CARBON /* * Q3XElementClass_Register() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3XObjectClass ) Q3XElementClass_Register( TQ3ElementType * elementType, const char * name, unsigned long sizeOfElement, TQ3XMetaHandler metaHandler); /* * Q3XElementType_GetElementSize() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3Status ) Q3XElementType_GetElementSize( TQ3ElementType elementType, unsigned long * sizeOfElement); /****************************************************************************** ** ** ** Custom Attribute Registration ** ** ** *****************************************************************************/ #define kQ3XMethodTypeAttributeInherit Q3_METHOD_TYPE('i','n','h','t') #endif /* CALL_NOT_IN_CARBON */ typedef TQ3Boolean TQ3XAttributeInheritMethod; /* return kQ3True or kQ3False in your metahandler */ #define kQ3XMethodTypeAttributeCopyInherit Q3_METHOD_TYPE('a','c','p','i') typedef CALLBACK_API_C( TQ3Status , TQ3XAttributeCopyInheritMethod )(const void *fromInternalAttribute, void *toInternalAttribute); #if CALL_NOT_IN_CARBON /* * Q3XAttributeClass_Register() * * Availability: * Non-Carbon CFM: not available * CarbonLib: not available * Mac OS X: not available */ EXTERN_API_C( TQ3XObjectClass ) Q3XAttributeClass_Register( TQ3AttributeType * attributeType, const char * creatorName, unsigned long sizeOfElement, TQ3XMetaHandler metaHandler); /* * Version 1.5 */ #define kQ3XMethodTypeAttributeDefault Q3_METHOD_TYPE('a','s','d','f') #endif /* CALL_NOT_IN_CARBON */ typedef CALLBACK_API_C( TQ3Status , TQ3XAttributeDefaultMethod )(void * internalElement); #define kQ3XMethodTypeAttributeIsDefault Q3_METHOD_TYPE('a','i','d','f') typedef CALLBACK_API_C( TQ3Boolean , TQ3XAttributeIsDefaultMethod )(void * internalElement); #if PRAGMA_ENUM_ALWAYSINT #pragma enumsalwaysint reset #ifdef __QD3DSET__RESTORE_TWOBYTEINTS #pragma fourbyteints off #endif #elif PRAGMA_ENUM_OPTIONS #pragma option enum=reset #elif defined(__QD3DSET__RESTORE_PACKED_ENUMS) #pragma options(pack_enums) #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __QD3DSET__ */