You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
530 lines
15 KiB
530 lines
15 KiB
/* |
|
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 <QD3D.h> |
|
#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__ */ |
|
|
|
|