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.
574 lines
18 KiB
574 lines
18 KiB
/* |
|
File: ColorPicker.h |
|
|
|
Contains: Color Picker package Interfaces. |
|
|
|
Version: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 1987-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 __COLORPICKER__ |
|
#define __COLORPICKER__ |
|
|
|
#ifndef __MIXEDMODE__ |
|
#include <MixedMode.h> |
|
#endif |
|
|
|
#ifndef __QUICKDRAW__ |
|
#include <Quickdraw.h> |
|
#endif |
|
|
|
#ifndef __CMAPPLICATION__ |
|
#include <CMApplication.h> |
|
#endif |
|
|
|
#ifndef __EVENTS__ |
|
#include <Events.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=mac68k |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(push, 2) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack(2) |
|
#endif |
|
|
|
enum { |
|
/*Maximum small fract value, as long*/ |
|
kMaximumSmallFract = 0x0000FFFF |
|
}; |
|
|
|
enum { |
|
kDefaultColorPickerWidth = 383, |
|
kDefaultColorPickerHeight = 238 |
|
}; |
|
|
|
typedef SInt16 DialogPlacementSpec; |
|
enum { |
|
kAtSpecifiedOrigin = 0, |
|
kDeepestColorScreen = 1, |
|
kCenterOnMainScreen = 2 |
|
}; |
|
|
|
|
|
/* These are for the flags field in the structs below (for example ColorPickerInfo). */ |
|
enum { |
|
kColorPickerDialogIsMoveable = 1, |
|
kColorPickerDialogIsModal = 2, |
|
kColorPickerCanModifyPalette = 4, |
|
kColorPickerCanAnimatePalette = 8, |
|
kColorPickerAppIsColorSyncAware = 16, |
|
kColorPickerInSystemDialog = 32, |
|
kColorPickerInApplicationDialog = 64, |
|
kColorPickerInPickerDialog = 128, |
|
kColorPickerDetachedFromChoices = 256, |
|
kColorPickerCallColorProcLive = 512 |
|
}; |
|
|
|
|
|
#if OLDROUTINENAMES |
|
enum { |
|
/*Maximum small fract value, as long*/ |
|
MaxSmallFract = 0x0000FFFF |
|
}; |
|
|
|
enum { |
|
kDefaultWidth = 383, |
|
kDefaultHeight = 238 |
|
}; |
|
|
|
/* These are for the flags field in the structs below (for example ColorPickerInfo). */ |
|
enum { |
|
DialogIsMoveable = 1, |
|
DialogIsModal = 2, |
|
CanModifyPalette = 4, |
|
CanAnimatePalette = 8, |
|
AppIsColorSyncAware = 16, |
|
InSystemDialog = 32, |
|
InApplicationDialog = 64, |
|
InPickerDialog = 128, |
|
DetachedFromChoices = 256, |
|
CallColorProcLive = 512 |
|
}; |
|
|
|
#endif /* OLDROUTINENAMES */ |
|
|
|
/* A SmallFract value is just the fractional part of a Fixed number, |
|
which is the low order word. SmallFracts are used to save room, |
|
and to be compatible with Quickdraw's RGBColor. They can be |
|
assigned directly to and from INTEGERs. */ |
|
/* Unsigned fraction between 0 and 1 */ |
|
typedef unsigned short SmallFract; |
|
/* For developmental simplicity in switching between the HLS and HSV |
|
models, HLS is reordered into HSL. Thus both models start with |
|
hue and saturation values; value/lightness/brightness is last. */ |
|
|
|
struct HSVColor { |
|
SmallFract hue; /*Fraction of circle, red at 0*/ |
|
SmallFract saturation; /*0-1, 0 for gray, 1 for pure color*/ |
|
SmallFract value; /*0-1, 0 for black, 1 for max intensity*/ |
|
}; |
|
typedef struct HSVColor HSVColor; |
|
struct HSLColor { |
|
SmallFract hue; /*Fraction of circle, red at 0*/ |
|
SmallFract saturation; /*0-1, 0 for gray, 1 for pure color*/ |
|
SmallFract lightness; /*0-1, 0 for black, 1 for white*/ |
|
}; |
|
typedef struct HSLColor HSLColor; |
|
struct CMYColor { |
|
SmallFract cyan; |
|
SmallFract magenta; |
|
SmallFract yellow; |
|
}; |
|
typedef struct CMYColor CMYColor; |
|
struct PMColor { |
|
CMProfileHandle profile; |
|
CMColor color; |
|
}; |
|
typedef struct PMColor PMColor; |
|
typedef PMColor * PMColorPtr; |
|
struct NPMColor { |
|
CMProfileRef profile; |
|
CMColor color; |
|
}; |
|
typedef struct NPMColor NPMColor; |
|
typedef NPMColor * NPMColorPtr; |
|
typedef struct OpaquePicker* Picker; |
|
typedef Picker picker; |
|
struct PickerMenuItemInfo { |
|
short editMenuID; |
|
short cutItem; |
|
short copyItem; |
|
short pasteItem; |
|
short clearItem; |
|
short undoItem; |
|
}; |
|
typedef struct PickerMenuItemInfo PickerMenuItemInfo; |
|
/* Structs related to deprecated API's have been pulled from this file. */ |
|
/* Those structs necessary for developers writing their own color pickers... */ |
|
/* have been moved to ColorPickerComponents.h. */ |
|
|
|
typedef CALLBACK_API( void , ColorChangedProcPtr )(long userData, PMColor *newColor); |
|
typedef CALLBACK_API( void , NColorChangedProcPtr )(long userData, NPMColor *newColor); |
|
typedef CALLBACK_API( Boolean , UserEventProcPtr )(EventRecord * event); |
|
typedef STACK_UPP_TYPE(ColorChangedProcPtr) ColorChangedUPP; |
|
typedef STACK_UPP_TYPE(NColorChangedProcPtr) NColorChangedUPP; |
|
typedef STACK_UPP_TYPE(UserEventProcPtr) UserEventUPP; |
|
struct ColorPickerInfo { |
|
PMColor theColor; |
|
CMProfileHandle dstProfile; |
|
UInt32 flags; |
|
DialogPlacementSpec placeWhere; |
|
Point dialogOrigin; |
|
OSType pickerType; |
|
UserEventUPP eventProc; |
|
ColorChangedUPP colorProc; |
|
UInt32 colorProcData; |
|
Str255 prompt; |
|
PickerMenuItemInfo mInfo; |
|
Boolean newColorChosen; |
|
SInt8 filler; |
|
}; |
|
typedef struct ColorPickerInfo ColorPickerInfo; |
|
struct NColorPickerInfo { |
|
NPMColor theColor; |
|
CMProfileRef dstProfile; |
|
UInt32 flags; |
|
DialogPlacementSpec placeWhere; |
|
Point dialogOrigin; |
|
OSType pickerType; |
|
UserEventUPP eventProc; |
|
NColorChangedUPP colorProc; |
|
UInt32 colorProcData; |
|
Str255 prompt; |
|
PickerMenuItemInfo mInfo; |
|
Boolean newColorChosen; |
|
UInt8 reserved; /*Must be 0*/ |
|
}; |
|
typedef struct NColorPickerInfo NColorPickerInfo; |
|
|
|
/* Below are the color conversion routines.*/ |
|
/* |
|
* Fix2SmallFract() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( SmallFract ) |
|
Fix2SmallFract(Fixed f) THREEWORDINLINE(0x3F3C, 0x0001, 0xA82E); |
|
|
|
|
|
/* |
|
* SmallFract2Fix() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( Fixed ) |
|
SmallFract2Fix(SmallFract s) THREEWORDINLINE(0x3F3C, 0x0002, 0xA82E); |
|
|
|
|
|
/* |
|
* CMY2RGB() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
CMY2RGB( |
|
const CMYColor * cColor, |
|
RGBColor * rColor) THREEWORDINLINE(0x3F3C, 0x0003, 0xA82E); |
|
|
|
|
|
/* |
|
* RGB2CMY() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
RGB2CMY( |
|
const RGBColor * rColor, |
|
CMYColor * cColor) THREEWORDINLINE(0x3F3C, 0x0004, 0xA82E); |
|
|
|
|
|
/* |
|
* HSL2RGB() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
HSL2RGB( |
|
const HSLColor * hColor, |
|
RGBColor * rColor) THREEWORDINLINE(0x3F3C, 0x0005, 0xA82E); |
|
|
|
|
|
/* |
|
* RGB2HSL() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
RGB2HSL( |
|
const RGBColor * rColor, |
|
HSLColor * hColor) THREEWORDINLINE(0x3F3C, 0x0006, 0xA82E); |
|
|
|
|
|
/* |
|
* HSV2RGB() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
HSV2RGB( |
|
const HSVColor * hColor, |
|
RGBColor * rColor) THREEWORDINLINE(0x3F3C, 0x0007, 0xA82E); |
|
|
|
|
|
/* |
|
* RGB2HSV() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
RGB2HSV( |
|
const RGBColor * rColor, |
|
HSVColor * hColor) THREEWORDINLINE(0x3F3C, 0x0008, 0xA82E); |
|
|
|
|
|
|
|
/* GetColor() works with or without the Color Picker extension.*/ |
|
/* |
|
* GetColor() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in InterfaceLib 7.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( Boolean ) |
|
GetColor( |
|
Point where, |
|
ConstStr255Param prompt, |
|
const RGBColor * inColor, |
|
RGBColor * outColor) THREEWORDINLINE(0x3F3C, 0x0009, 0xA82E); |
|
|
|
|
|
|
|
/* PickColor() requires the Color Picker extension (version 2.0 or greater).*/ |
|
/* |
|
* PickColor() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in ColorPickerLib 2.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSErr ) |
|
PickColor(ColorPickerInfo * theColorInfo) THREEWORDINLINE(0x3F3C, 0x0213, 0xA82E); |
|
|
|
|
|
/* NPickColor() requires the Color Picker extension (version 2.1 or greater).*/ |
|
/* |
|
* NPickColor() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in ColorPickerLib 2.1 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSErr ) |
|
NPickColor(NColorPickerInfo * theColorInfo) THREEWORDINLINE(0x3F3C, 0x0227, 0xA82E); |
|
|
|
|
|
|
|
/* A suite of mid-level API calls have been deprecated. Likely you never... */ |
|
/* used them anyway. They were removed from this file and should not be... */ |
|
/* used in the future as they are not gauranteed to be supported. */ |
|
/* |
|
* NewColorChangedUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( ColorChangedUPP ) |
|
NewColorChangedUPP(ColorChangedProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppColorChangedProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(ColorChangedUPP) NewColorChangedUPP(ColorChangedProcPtr userRoutine) { return (ColorChangedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppColorChangedProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewColorChangedUPP(userRoutine) (ColorChangedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppColorChangedProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* NewNColorChangedUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( NColorChangedUPP ) |
|
NewNColorChangedUPP(NColorChangedProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppNColorChangedProcInfo = 0x000003C0 }; /* pascal no_return_value Func(4_bytes, 4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(NColorChangedUPP) NewNColorChangedUPP(NColorChangedProcPtr userRoutine) { return (NColorChangedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppNColorChangedProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewNColorChangedUPP(userRoutine) (NColorChangedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppNColorChangedProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* NewUserEventUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( UserEventUPP ) |
|
NewUserEventUPP(UserEventProcPtr userRoutine); |
|
#if !OPAQUE_UPP_TYPES |
|
enum { uppUserEventProcInfo = 0x000000D0 }; /* pascal 1_byte Func(4_bytes) */ |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(UserEventUPP) NewUserEventUPP(UserEventProcPtr userRoutine) { return (UserEventUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppUserEventProcInfo, GetCurrentArchitecture()); } |
|
#else |
|
#define NewUserEventUPP(userRoutine) (UserEventUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppUserEventProcInfo, GetCurrentArchitecture()) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* DisposeColorChangedUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeColorChangedUPP(ColorChangedUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeColorChangedUPP(ColorChangedUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeColorChangedUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* DisposeNColorChangedUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeNColorChangedUPP(NColorChangedUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeNColorChangedUPP(NColorChangedUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeNColorChangedUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* DisposeUserEventUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
DisposeUserEventUPP(UserEventUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) DisposeUserEventUPP(UserEventUPP userUPP) { DisposeRoutineDescriptor((UniversalProcPtr)userUPP); } |
|
#else |
|
#define DisposeUserEventUPP(userUPP) DisposeRoutineDescriptor(userUPP) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* InvokeColorChangedUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
InvokeColorChangedUPP( |
|
long userData, |
|
PMColor * newColor, |
|
ColorChangedUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) InvokeColorChangedUPP(long userData, PMColor * newColor, ColorChangedUPP userUPP) { CALL_TWO_PARAMETER_UPP(userUPP, uppColorChangedProcInfo, userData, newColor); } |
|
#else |
|
#define InvokeColorChangedUPP(userData, newColor, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppColorChangedProcInfo, (userData), (newColor)) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* InvokeNColorChangedUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
InvokeNColorChangedUPP( |
|
long userData, |
|
NPMColor * newColor, |
|
NColorChangedUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(void) InvokeNColorChangedUPP(long userData, NPMColor * newColor, NColorChangedUPP userUPP) { CALL_TWO_PARAMETER_UPP(userUPP, uppNColorChangedProcInfo, userData, newColor); } |
|
#else |
|
#define InvokeNColorChangedUPP(userData, newColor, userUPP) CALL_TWO_PARAMETER_UPP((userUPP), uppNColorChangedProcInfo, (userData), (newColor)) |
|
#endif |
|
#endif |
|
|
|
/* |
|
* InvokeUserEventUPP() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: available as macro/inline |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
InvokeUserEventUPP( |
|
EventRecord * event, |
|
UserEventUPP userUPP); |
|
#if !OPAQUE_UPP_TYPES |
|
#ifdef __cplusplus |
|
inline DEFINE_API_C(Boolean) InvokeUserEventUPP(EventRecord * event, UserEventUPP userUPP) { return (Boolean)CALL_ONE_PARAMETER_UPP(userUPP, uppUserEventProcInfo, event); } |
|
#else |
|
#define InvokeUserEventUPP(event, userUPP) (Boolean)CALL_ONE_PARAMETER_UPP((userUPP), uppUserEventProcInfo, (event)) |
|
#endif |
|
#endif |
|
|
|
#if CALL_NOT_IN_CARBON || OLDROUTINENAMES |
|
/* support for pre-Carbon UPP routines: New...Proc and Call...Proc */ |
|
#define NewColorChangedProc(userRoutine) NewColorChangedUPP(userRoutine) |
|
#define NewNColorChangedProc(userRoutine) NewNColorChangedUPP(userRoutine) |
|
#define NewUserEventProc(userRoutine) NewUserEventUPP(userRoutine) |
|
#define CallColorChangedProc(userRoutine, userData, newColor) InvokeColorChangedUPP(userData, newColor, userRoutine) |
|
#define CallNColorChangedProc(userRoutine, userData, newColor) InvokeNColorChangedUPP(userData, newColor, userRoutine) |
|
#define CallUserEventProc(userRoutine, event) InvokeUserEventUPP(event, userRoutine) |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
|
|
|
|
#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 /* __COLORPICKER__ */ |
|
|
|
|