topical media & game development

talk show tell print

lib-of-vs-libs-QTDevWin-CIncludes-ColorPicker.h / h



  /*
       File:       ColorPicker.h
   
       Contains:   Color Picker package Interfaces.
   
       Version:    Technology: System 7.5
                   Release:    QuickTime 6.0.2
   
       Copyright:  (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
  
  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.*/
  EXTERN_API( SmallFract )
  Fix2SmallFract                  (Fixed                  f)                                  THREEWORDINLINE(0x3F3C, 0x0001, 0xA82E);
  
  EXTERN_API( Fixed )
  SmallFract2Fix                  (SmallFract             s)                                  THREEWORDINLINE(0x3F3C, 0x0002, 0xA82E);
  
  EXTERN_API( void )
  CMY2RGB                         (const CMYColor *       cColor,
                                   RGBColor *             rColor)                             THREEWORDINLINE(0x3F3C, 0x0003, 0xA82E);
  
  EXTERN_API( void )
  RGB2CMY                         (const RGBColor *       rColor,
                                   CMYColor *             cColor)                             THREEWORDINLINE(0x3F3C, 0x0004, 0xA82E);
  
  EXTERN_API( void )
  HSL2RGB                         (const HSLColor *       hColor,
                                   RGBColor *             rColor)                             THREEWORDINLINE(0x3F3C, 0x0005, 0xA82E);
  
  EXTERN_API( void )
  RGB2HSL                         (const RGBColor *       rColor,
                                   HSLColor *             hColor)                             THREEWORDINLINE(0x3F3C, 0x0006, 0xA82E);
  
  EXTERN_API( void )
  HSV2RGB                         (const HSVColor *       hColor,
                                   RGBColor *             rColor)                             THREEWORDINLINE(0x3F3C, 0x0007, 0xA82E);
  
  EXTERN_API( void )
  RGB2HSV                         (const RGBColor *       rColor,
                                   HSVColor *             hColor)                             THREEWORDINLINE(0x3F3C, 0x0008, 0xA82E);
  
  /*  GetColor() works with or without the Color Picker extension.*/
  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).*/
  EXTERN_API( OSErr )
  PickColor                       (ColorPickerInfo *      theColorInfo)                       THREEWORDINLINE(0x3F3C, 0x0213, 0xA82E);
  
  /*  NPickColor() requires the Color Picker extension (version 2.1 or greater).*/
  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. */
  if OPAQUE_UPP_TYPES
      EXTERN_API(ColorChangedUPP)
      NewColorChangedUPP             (ColorChangedProcPtr     userRoutine);
  
      EXTERN_API(NColorChangedUPP)
      NewNColorChangedUPP            (NColorChangedProcPtr    userRoutine);
  
      EXTERN_API(UserEventUPP)
      NewUserEventUPP                (UserEventProcPtr        userRoutine);
  
      EXTERN_API(void)
      DisposeColorChangedUPP         (ColorChangedUPP         userUPP);
  
      EXTERN_API(void)
      DisposeNColorChangedUPP        (NColorChangedUPP        userUPP);
  
      EXTERN_API(void)
      DisposeUserEventUPP            (UserEventUPP            userUPP);
  
      EXTERN_API(void)
      InvokeColorChangedUPP          (long                    userData,
                                      PMColor *               newColor,
                                      ColorChangedUPP         userUPP);
  
      EXTERN_API(void)
      InvokeNColorChangedUPP         (long                    userData,
                                      NPMColor *              newColor,
                                      NColorChangedUPP        userUPP);
  
      EXTERN_API(Boolean)
      InvokeUserEventUPP             (EventRecord *           event,
                                      UserEventUPP            userUPP);
  
  else
      enum { uppColorChangedProcInfo = 0x000003C0 };                  /* pascal no_return_value Func(4_bytes, 4_bytes) */
      enum { uppNColorChangedProcInfo = 0x000003C0 };                 /* pascal no_return_value Func(4_bytes, 4_bytes) */
      enum { uppUserEventProcInfo = 0x000000D0 };                     /* pascal 1_byte Func(4_bytes) */
      #define NewColorChangedUPP(userRoutine)                         (ColorChangedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppColorChangedProcInfo, GetCurrentArchitecture())
      #define NewNColorChangedUPP(userRoutine)                        (NColorChangedUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppNColorChangedProcInfo, GetCurrentArchitecture())
      #define NewUserEventUPP(userRoutine)                            (UserEventUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppUserEventProcInfo, GetCurrentArchitecture())
      #define DisposeColorChangedUPP(userUPP)                         DisposeRoutineDescriptor(userUPP)
      #define DisposeNColorChangedUPP(userUPP)                        DisposeRoutineDescriptor(userUPP)
      #define DisposeUserEventUPP(userUPP)                            DisposeRoutineDescriptor(userUPP)
      #define InvokeColorChangedUPP(userData, newColor, userUPP)      CALL_TWO_PARAMETER_UPP((userUPP), uppColorChangedProcInfo, (userData), (newColor))
      #define InvokeNColorChangedUPP(userData, newColor, userUPP)     CALL_TWO_PARAMETER_UPP((userUPP), uppNColorChangedProcInfo, (userData), (newColor))
      #define InvokeUserEventUPP(event, userUPP)                      (Boolean)CALL_ONE_PARAMETER_UPP((userUPP), uppUserEventProcInfo, (event))
  endif
  /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */
  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)
  
  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__ */
  
  


(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.