home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Libraries / WASTE 1.3a5 / Extras / Experimental / WEExtras.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-08  |  3.1 KB  |  146 lines  |  [TEXT/CWIE]

  1. /*
  2.  *    WEExtras.c
  3.  *
  4.  *    Routines for installing and removing various hooks
  5.  *
  6.  */
  7.  
  8. #include "WEExtras.h"
  9.  
  10. /* prototypes for the hook routines defined in WEExtraHooks.c */
  11.  
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15.  
  16. extern pascal void _WEShowInvisiblesDrawText(Ptr, long, Fixed, JustStyleCode, WEReference);
  17. extern pascal StyledLineBreakCode _WENoWrapLineBreak(Ptr, long, long, long,
  18.                     Fixed *, long *, WEReference);
  19.  
  20. #ifdef __cplusplus
  21. }
  22. #endif
  23.  
  24. /* static UPP's */
  25. static WELineBreakUPP        _weNoWrapLineBreakProc = nil;
  26. static WEDrawTextUPP        _weShowInvisiblesDrawTextProc = nil;
  27.  
  28. /* variables in WEExtraHooks.c */
  29. extern WEDrawTextUPP        _weShowInvisiblesOldDrawTextProc;
  30. extern RGBColor                _weShowInvisiblesDefaultColor;
  31.  
  32. pascal OSErr WEInstallCrOnlyHook(WEReference we)
  33. {
  34.     OSErr err;
  35.  
  36.     /* if first time, create routine descriptor */
  37.     if (_weNoWrapLineBreakProc == nil)
  38.     {
  39.         _weNoWrapLineBreakProc = NewWELineBreakProc(_WENoWrapLineBreak);
  40.     }
  41.     
  42.     err = WESetInfo( weLineBreakHook, &_weNoWrapLineBreakProc, we );
  43.  
  44.     return err;
  45. }
  46.  
  47. pascal OSErr WERemoveCrOnlyHook( WEReference we )
  48. {
  49.     UniversalProcPtr hook = nil;
  50.     OSErr err;
  51.     
  52.     err = WESetInfo( weLineBreakHook, &hook, we );
  53.  
  54.     return err;
  55. }
  56.  
  57. pascal Boolean WEIsCrOnly( WEReference we )
  58. {
  59.     WELineBreakUPP hook = nil;
  60.         
  61.     /* return true if our no-wrap hook is installed */
  62.     
  63.     return     ( _weNoWrapLineBreakProc != nil ) &&
  64.             ( WEGetInfo( weLineBreakHook, &hook, we ) == noErr) &&
  65.             ( _weNoWrapLineBreakProc == hook );
  66. }
  67.  
  68. pascal OSErr WEInstallShowInvisiblesHook( WEReference we )
  69. {
  70.     OSErr err;
  71.  
  72.     /* if first time, create routine descriptor */
  73.     if (_weShowInvisiblesDrawTextProc == nil)
  74.     {
  75.         _weShowInvisiblesDrawTextProc = NewWEDrawTextProc(_WEShowInvisiblesDrawText);
  76.     }
  77.     
  78.     err = WEGetInfo( weDrawTextHook, &_weShowInvisiblesOldDrawTextProc, we );
  79.     if (err == noErr)
  80.         err = WESetInfo( weDrawTextHook, &_weShowInvisiblesDrawTextProc, we );
  81.  
  82.     return err;
  83. }
  84.  
  85. pascal OSErr WERemoveShowInvisiblesHook( WEReference we )
  86. {
  87.     OSErr err;
  88.     
  89.     err = WESetInfo( weDrawTextHook, &_weShowInvisiblesOldDrawTextProc, we );
  90.  
  91.     return err;
  92. }
  93.  
  94. pascal Boolean WEIsShowInvisibles( WEReference we )
  95. {
  96.     WEDrawTextUPP hook = nil;
  97.         
  98.     /* return true if our no-wrap hook is installed */
  99.     
  100.     return     ( _weShowInvisiblesDrawTextProc != nil ) &&
  101.             ( WEGetInfo( weDrawTextHook, &hook, we ) == noErr) &&
  102.             ( _weShowInvisiblesDrawTextProc == hook );
  103. }
  104.  
  105. pascal OSErr WESetInvisiblesColor( const RGBColor *color, WEReference we )
  106. {
  107. #if WASTE_VERSION < 0x00130000
  108.     _weShowInvisiblesDefaultColor = *color;
  109.     return noErr;
  110. #else
  111.     OSErr    err = noErr;
  112.  
  113.     if (we != nil)
  114.     {
  115.         err = WESetUserInfo('icRG', *(SInt32*)color, we);
  116.         if (err == noErr)
  117.         {
  118.             SInt32 tmp = color->blue;
  119.             err = WESetUserInfo('ic_B', tmp, we);
  120.         }
  121.     }
  122.     else
  123.         _weShowInvisiblesDefaultColor = *color;
  124.     return err;
  125. #endif
  126. }
  127.  
  128. pascal void WEGetInvisiblesColor( RGBColor *color, WEReference we )
  129. {
  130. #if WASTE_VERSION < 0x00130000
  131.     *color = _weShowInvisiblesDefaultColor;
  132. #else
  133.     SInt32 tmp;
  134.     if (we != nil &&
  135.         WEGetUserInfo('icRG', (SInt32*)color, we) == noErr &&
  136.         WEGetUserInfo('ic_B', &tmp, we) == noErr)
  137.     {
  138.         color->blue = tmp;
  139.     }
  140.     else
  141.     {
  142.         *color = _weShowInvisiblesDefaultColor;
  143.     }
  144. #endif
  145. }
  146.