home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / opendc12.zip / od124os2.exe / od12osr1.exe / src / CanvasB.cpp < prev    next >
C/C++ Source or Header  |  1997-03-21  |  20KB  |  542 lines

  1. /* @(#)Z 1.12 com/src/imaging/CanvasB.cpp, odimaging, od96os2, odos29712d 97/03/21 17:18:18 (96/10/29 09:25:00) */
  2. //====START_GENERATED_PROLOG======================================
  3. //
  4. //
  5. //   COMPONENT_NAME: odimaging
  6. //
  7. //   CLASSES: none
  8. //
  9. //   ORIGINS: 82,27
  10. //
  11. //
  12. //   (C) COPYRIGHT International Business Machines Corp. 1995,1996
  13. //   All Rights Reserved
  14. //   Licensed Materials - Property of IBM
  15. //   US Government Users Restricted Rights - Use, duplication or
  16. //   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  17. //       
  18. //   IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
  19. //   ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  20. //   PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  21. //   CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
  22. //   USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  23. //   OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
  24. //   OR PERFORMANCE OF THIS SOFTWARE.
  25. //
  26. //====END_GENERATED_PROLOG========================================
  27. //
  28.  
  29. /********************************************************************/
  30. /*  Licensed Materials - Property of IBM                            */
  31. /*                                                                  */
  32. /*                                                                  */
  33. /* Copyright (C) International Business Machines Corp., 1994.       */
  34. /* Copyright (C) Apple Computer, Inc., 1994                         */
  35. /*                                                                  */
  36. /*  US Government Users Restricted Rights -                         */
  37. /*  Use, duplication, or disclosure restricted                      */
  38. /*  by GSA ADP Schedule Contract with IBM Corp.                     */
  39. /*                                                                  */
  40. /*  IBM Change History (most recent first):                         */ 
  41. /*          3/11/96 jab  Changes for cross-platform support.        */
  42. /*                       Eliminated use of TempODShape.             */
  43. /*  120445  5/16/95 ced  Check for NULL _fUpdateShape in            */
  44. /*                       AcquireUpdateShape.                        */
  45. /*  120604  4/28/95 ced  Merge with B1C16 Apple code.               */
  46. /*  119447  4/18/95 ced  Add ODPlatformPrintJob type.               */
  47. /*  <OS2>   8/27/94 MAP  Port A8C3                                  */
  48. /*                                                                  */
  49. /********************************************************************/
  50. /*
  51.     File:        CanvasB.cpp
  52.  
  53.     Contains:    ODBaseCanvas, an abstract drawing environment.
  54.  
  55.     Owned by:    Jens Alfke, Joshua Susser
  56.  
  57.     Copyright:    ⌐ 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  58.  
  59.     Change History (most recent first):
  60.  
  61.         <17>     8/29/95    jpa        Use TempODShape to avoid checking result of
  62.                                     'new ODShape'. [1279066]
  63.         <16>      8/3/95    RR        #1257260: Collapse B classes. Remove
  64.                                     somInit methods. Don't call IsInitialized
  65.                                     or SubclassResponsibility
  66.         <15>      6/1/95    jpa        Removed CheckUpdateShape. [1232306]
  67.         <14>     5/26/95    RR        #1251403: Multithreading naming support
  68.         <13>      5/4/95    jpa        Fixed bad TRY block in GetOwner. [1246060]
  69.         <12>     3/31/95    jpa        Fixed crash in GetUpdateShape for onscreen
  70.                                     canvases. [1223422]
  71.         <11>     3/22/95    jpa        Use new ODPlatformPrintJob type. [1230236]
  72.         <10>     3/20/95    jpa        SOM_CATCH --> SOM_TRY [1224355]
  73.          <9>     1/13/95    RR        Check for null in GetBiasTransform
  74.          <8>    12/20/94    jpa        GetUpdateShape increments shape's refcount
  75.                                     [1207402]
  76.          <7>     12/5/94    jpa        Fixes from code review. [1203923]
  77.          <6>    10/24/94    jpa        Include Trnsform.xh. Initialize
  78.                                     fUpdateShape. [1153437, 1165562]
  79.          <5>     9/29/94    RA        1189812: Mods for 68K build.
  80.          <4>     8/17/94    jpa        Function prefixes. [1181512]
  81.          <3>      8/8/94    jpa        API changes for multiformat canvases & bias
  82.                                     transforms [1179683, 1178688]
  83.          <2>     7/13/94    jpa        Call InitObject in InitBaseCanvas.
  84.          <1>     6/15/94    jpa        first checked in
  85.  
  86.     To Do:
  87.     In Progress:
  88.         
  89. */
  90.  
  91. #ifndef _ALTPOINT_
  92. #include "AltPoint.h"
  93. #endif
  94.  
  95. #if defined(_PLATFORM_OS2_) || defined(_PLATFORM_WIN32_)
  96. #ifndef _PAGETUNING_OFF_
  97. #include <ODPagtun.h>
  98. #endif   // _PAGETUNING_OFF_
  99. #endif
  100.  
  101. #define ODBaseCanvas_Class_Source
  102. #define VARIABLE_MACROS
  103. #include <CanvasB.xih>
  104.  
  105. #ifndef SOM_ODPart_xh
  106. #include <Part.xh>
  107. #endif
  108.  
  109. #ifndef SOM_ODShape_xh
  110. #include <Shape.xh>
  111. #endif
  112.  
  113. #ifndef SOM_ODTransform_xh
  114. #include <Trnsform.xh>
  115. #endif
  116.  
  117. #ifndef _EXCEPT_
  118. #include <Except.h>
  119. #endif
  120.  
  121. #ifndef _ODDEBUG_
  122. #include <ODDebug.h>
  123. #endif
  124.  
  125. #ifndef _ODUTILS_
  126. #include <ODUtils.h>
  127. #endif
  128.  
  129. // Note: This was commented out in the OS/2 Feb. 13 drop.  It affects code
  130. // in ResetUpdateShape.  In looking at the code in ResetUpdateShape a little
  131. // closer, we (Karalee and I) don't believe the DR4 code which creates a
  132. // TempODShape really works anyway.  Since it's causing warnings to be thrown
  133. // in the odutils test cases and it looks incorrect, I'm taking it out completely by
  134. // wrapping it with _PLATFORM_MACINTOSH_.  jab 05/28/96
  135. #ifdef _PLATFORM_MACINTOSH_
  136. #ifndef _TEMPOBJ_
  137. #include <TempObj.h>
  138. #endif
  139. #endif
  140.  
  141. //------------------------------------------------------------------------------
  142. // somUninit
  143. //------------------------------------------------------------------------------
  144.  
  145. SOM_Scope void  SOMLINK ODBaseCanvassomUninit(ODBaseCanvas *somSelf)
  146. {
  147.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  148.     ODBaseCanvasMethodDebug("ODBaseCanvas","somUninit");
  149.     
  150.     ODSafeReleaseObject( _fOwner );
  151.     ODSafeReleaseObject( _fUpdateShape );
  152.     ODSafeReleaseObject( _fBiasTransform );
  153.     
  154.     ODBaseCanvas_parents_somUninit(somSelf);
  155. }
  156.  
  157. //------------------------------------------------------------------------------
  158. // InitBaseCanvas
  159. //------------------------------------------------------------------------------
  160.  
  161. SOM_Scope void  SOMLINK ODBaseCanvasInitBaseCanvas(ODBaseCanvas *somSelf, Environment *ev,
  162.         ODBoolean isDynamic,
  163.         ODBoolean isOffscreen)
  164. {
  165.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  166.     ODBaseCanvasMethodDebug("ODBaseCanvas","InitBaseCanvas");
  167.     
  168.     SOM_TRY
  169.  
  170.     /* Moved from somInit. SOM itself sets fields to zero
  171.     _fOwner = kODNULL;
  172.     _fUpdateShape = kODNULL;
  173.     _fFacet = kODNULL;
  174.     _fIsDynamic = kODTrue;
  175.     _fIsOffscreen = kODFalse;
  176.     _fBiasTransform = kODNULL;
  177.     _fPlatformPrintJob = kODNULL;
  178.     */
  179.     _fPrintJobGraphicsSystem = kODNoGraphicsSystem;
  180.  
  181.     somSelf->InitObject(ev);
  182.  
  183.     _fIsDynamic = isDynamic;
  184.     _fIsOffscreen = isOffscreen;
  185.  
  186.     SOM_CATCH_ALL
  187.     SOM_ENDTRY
  188. }
  189.  
  190. //------------------------------------------------------------------------------
  191. // GetOwner
  192. //------------------------------------------------------------------------------
  193.  
  194. SOM_Scope ODPart*  SOMLINK ODBaseCanvasAcquireOwner(ODBaseCanvas *somSelf, Environment *ev)
  195. {
  196.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  197.     ODBaseCanvasMethodDebug("ODBaseCanvas","AcquireOwner");
  198.  
  199.     if( _fOwner ) {
  200.         SOM_TRY
  201.             _fOwner->Acquire(ev);
  202.         SOM_CATCH_ALL
  203.         SOM_ENDTRY
  204.     }
  205.     return _fOwner;
  206. }
  207.  
  208. //------------------------------------------------------------------------------
  209. // SetOwner
  210. //------------------------------------------------------------------------------
  211.  
  212. SOM_Scope void  SOMLINK ODBaseCanvasSetOwner(ODBaseCanvas *somSelf, Environment *ev,
  213.         ODPart* owner)
  214. {
  215.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  216.     ODBaseCanvasMethodDebug("ODBaseCanvas","SetOwner");
  217.     
  218.     if( owner != _fOwner ) {
  219.         SOM_TRY
  220.             ODTransferReference(ev,_fOwner,owner);
  221.             _fOwner = owner;
  222.         SOM_CATCH_ALL
  223.         SOM_ENDTRY
  224.     }
  225. }
  226.  
  227. //------------------------------------------------------------------------------
  228. // GetFacet
  229. //------------------------------------------------------------------------------
  230.  
  231. SOM_Scope ODFacet*  SOMLINK ODBaseCanvasGetFacet(ODBaseCanvas *somSelf, Environment *ev)
  232. {
  233.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  234.     ODBaseCanvasMethodDebug("ODBaseCanvas","GetFacet");
  235.  
  236.     return _fFacet;
  237. }
  238.  
  239. //------------------------------------------------------------------------------
  240. // SetFacet
  241. //------------------------------------------------------------------------------
  242.  
  243. SOM_Scope void  SOMLINK ODBaseCanvasSetFacet(ODBaseCanvas *somSelf, Environment *ev,
  244.         ODFacet* facet)
  245. {
  246.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  247.     ODBaseCanvasMethodDebug("ODBaseCanvas","SetFacet");
  248.  
  249.     _fFacet = facet;
  250. }
  251.  
  252. //------------------------------------------------------------------------------
  253. // IsDynamic
  254. //------------------------------------------------------------------------------
  255.  
  256. SOM_Scope ODBoolean  SOMLINK ODBaseCanvasIsDynamic(ODBaseCanvas *somSelf, Environment *ev)
  257. {
  258.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  259.     ODBaseCanvasMethodDebug("ODBaseCanvas","IsDynamic");
  260.  
  261.     return _fIsDynamic;
  262. }
  263.  
  264. //------------------------------------------------------------------------------
  265. // IsOffscreen
  266. //------------------------------------------------------------------------------
  267.  
  268. SOM_Scope ODBoolean  SOMLINK ODBaseCanvasIsOffscreen(ODBaseCanvas *somSelf, Environment *ev)
  269. {
  270.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  271.     ODBaseCanvasMethodDebug("ODBaseCanvas","IsOffscreen");
  272.  
  273.     return _fIsOffscreen;
  274. }
  275.  
  276. //------------------------------------------------------------------------------
  277. // HasPlatformCanvas
  278. //------------------------------------------------------------------------------
  279.  
  280. SOM_Scope ODBoolean  SOMLINK ODBaseCanvasHasPlatformCanvas(ODBaseCanvas *somSelf, Environment *ev,
  281.         ODGraphicsSystem g)
  282. {
  283.     WARNMSG(WARN_INDEX(AMSG_540),"ODCanvas: A subclass should have overridden this method!");
  284.     ODSetSOMException(ev,kODErrSubClassResponsibility, "SubClass Responsibility");
  285.     return kODFalse;
  286. }
  287.  
  288.  
  289. //------------------------------------------------------------------------------
  290. // GetPlatformCanvas
  291. //------------------------------------------------------------------------------
  292.  
  293. #if defined(_PLATFORM_OS2_) || defined(_PLATFORM_WIN32_) || defined(_PLATFORM_AIX_)
  294. SOM_Scope ODPlatformCanvas*  SOMLINK ODBaseCanvasGetPlatformCanvas(ODBaseCanvas *somSelf, Environment *ev,
  295. #else
  296. SOM_Scope ODPlatformCanvas  SOMLINK ODBaseCanvasGetPlatformCanvas(ODBaseCanvas *somSelf, Environment *ev,
  297. #endif
  298.         ODGraphicsSystem g)
  299. {
  300.     WARNMSG(WARN_INDEX(AMSG_540),"ODCanvas: A subclass should have overridden this method!");
  301.     ODSetSOMException(ev,kODErrSubClassResponsibility, "SubClass Responsibility");
  302.     return kODNULL;
  303. }
  304.  
  305. //------------------------------------------------------------------------------
  306. // SetPlatformCanvas
  307. //------------------------------------------------------------------------------
  308.  
  309. SOM_Scope void  SOMLINK ODBaseCanvasSetPlatformCanvas(ODBaseCanvas *somSelf, Environment *ev,
  310.         ODGraphicsSystem g,
  311. #if defined(_PLATFORM_OS2_) || defined(_PLATFORM_WIN32_) || defined(_PLATFORM_AIX_)
  312.       ODPlatformCanvas* c)
  313. #else
  314.         ODPlatformCanvas c)
  315. #endif
  316. {
  317.     WARNMSG(WARN_INDEX(AMSG_540),"ODCanvas: A subclass should have overridden this method!");
  318.     ODSetSOMException(ev,kODErrSubClassResponsibility, "SubClass Responsibility");
  319. }
  320.  
  321. //------------------------------------------------------------------------------
  322. // HasPlatformPrintJob
  323. //------------------------------------------------------------------------------
  324.  
  325. SOM_Scope ODBoolean  SOMLINK ODBaseCanvasHasPlatformPrintJob(ODBaseCanvas *somSelf, Environment *ev,
  326.         ODGraphicsSystem g)
  327. {
  328.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  329.     ODBaseCanvasMethodDebug("ODBaseCanvas","HasPlatformPrintJob");
  330.     
  331.     // This base implementation can only keep track of one graphics system's print job at
  332.     // a time; it seems unlikely that a print job would be run by more than one graphics
  333.     // system at once. If you really need to store more than one (as is done with platform
  334.     // canvases) then just override the 3 PlatformPrintJob methods in your platform subclass.
  335.  
  336.     return _fPlatformPrintJob!=kODNULL && g==_fPrintJobGraphicsSystem;
  337. }
  338.  
  339. //------------------------------------------------------------------------------
  340. // GetPlatformPrintJob
  341. //------------------------------------------------------------------------------
  342.  
  343. SOM_Scope ODPlatformPrintJob  SOMLINK ODBaseCanvasGetPlatformPrintJob(ODBaseCanvas *somSelf, Environment *ev,
  344.         ODGraphicsSystem g)
  345. {
  346.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  347.     ODBaseCanvasMethodDebug("ODBaseCanvas","GetPlatformPrintJob");
  348.  
  349.     if( _fPlatformPrintJob!=kODNULL && g==_fPrintJobGraphicsSystem )
  350.         return _fPlatformPrintJob;
  351.     else {
  352.         ODSetSOMException(ev, kODErrInvalidGraphicsSystem);
  353.         return kODNULL;
  354.     }
  355. }
  356.  
  357. //------------------------------------------------------------------------------
  358. // SetPlatformPrintJob
  359. //------------------------------------------------------------------------------
  360.  
  361. SOM_Scope void  SOMLINK ODBaseCanvasSetPlatformPrintJob(ODBaseCanvas *somSelf, Environment *ev,
  362.         ODGraphicsSystem g,
  363.         ODPlatformPrintJob j)
  364. {
  365.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  366.     ODBaseCanvasMethodDebug("ODBaseCanvas","SetPlatformPrintJob");
  367.  
  368.     _fPrintJobGraphicsSystem = g;
  369.     _fPlatformPrintJob = j;
  370. }
  371.  
  372. //------------------------------------------------------------------------------
  373. // GetUpdateShape
  374. //------------------------------------------------------------------------------
  375.  
  376. SOM_Scope ODShape*  SOMLINK ODBaseCanvasAcquireUpdateShape(ODBaseCanvas *somSelf, Environment *ev)
  377. {
  378.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  379.     ODBaseCanvasMethodDebug("ODBaseCanvas","AcquireUpdateShape");
  380.     
  381.     SOM_TRY
  382.  
  383.     if( !_fUpdateShape )
  384.         somSelf->ResetUpdateShape(ev);
  385.     if( _fUpdateShape )
  386.         _fUpdateShape->Acquire(ev);
  387.     return _fUpdateShape;
  388.  
  389.     SOM_CATCH_ALL
  390.     SOM_ENDTRY
  391.     return kODNULL;
  392. }
  393.  
  394. //------------------------------------------------------------------------------
  395. // ResetUpdateShape
  396. //------------------------------------------------------------------------------
  397.  
  398. SOM_Scope void  SOMLINK ODBaseCanvasResetUpdateShape(ODBaseCanvas *somSelf, Environment *ev)
  399. {
  400.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  401.     ODBaseCanvasMethodDebug("ODBaseCanvas","ResetUpdateShape");
  402.     
  403.     if( !_fIsOffscreen )
  404.         return;
  405.     
  406.     SOM_TRY
  407.  
  408.     if( !_fUpdateShape ) {
  409.         // Create a new, empty update shape. It would be nice to use a factory,
  410.         // but from here there's no factory object we can reach...
  411.  
  412. // 5/28/96  jab  Creating a TempODShape and not doing an Acquire is causing
  413. //               warnings all over in some of the odutils test cases.  Since this
  414. //               code looks suspicious, I'm wrapping it with _PLATFORM_MACINTOSH_
  415. //               to remove it from the build.
  416. #ifdef _PLATFORM_MACINTOSH_          
  417.         TempODShape s = new ODShape;
  418.         THROW_IF_NULL(s);
  419.         s->InitShape(ev);
  420.         _fUpdateShape = s.DontRelease();
  421. #endif
  422.  
  423.       // This section of code replaces the above section wrapped in _PLATFORM_MACINTOSH_.
  424.       // It was pulled from the OS/2 Feb. 13 drop.
  425.       ODShape *s = new ODShape;
  426.       THROW_IF_NULL(s);
  427.       s->InitShape(ev);
  428.       _fUpdateShape = s;
  429.             
  430.     } else {
  431.         // Just clear the update shape:
  432.         ODRect empty(0,0,0,0);
  433.         _fUpdateShape->SetRectangle(ev,&empty);
  434.     }
  435.  
  436.     SOM_CATCH_ALL
  437.     SOM_ENDTRY
  438. }
  439.  
  440. //------------------------------------------------------------------------------
  441. // ComputeBiasTransform
  442. //------------------------------------------------------------------------------
  443.  
  444. SOM_Scope void  SOMLINK ODBaseCanvasComputeBiasTransform(
  445.                                             ODBaseCanvas *somSelf, Environment *ev)
  446. {
  447. //    ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  448.     ODBaseCanvasMethodDebug("ODBaseCanvas","ComputeBiasTransform");
  449.  
  450.     // Do nothing by default.
  451. }
  452.  
  453. //------------------------------------------------------------------------------
  454. // GetBiasTransform
  455. //------------------------------------------------------------------------------
  456.  
  457. SOM_Scope ODTransform*  SOMLINK ODBaseCanvasAcquireBiasTransform(ODBaseCanvas *somSelf, Environment *ev)
  458. {
  459.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  460.     ODBaseCanvasMethodDebug("ODBaseCanvas","GetBiasTransform");
  461.  
  462.     SOM_TRY
  463.     if (_fBiasTransform)
  464.         _fBiasTransform->Acquire(ev);
  465.     return _fBiasTransform;
  466.  
  467.     SOM_CATCH_ALL
  468.     SOM_ENDTRY
  469.     return kODNULL;
  470. }
  471.  
  472. //------------------------------------------------------------------------------
  473. // SetBiasTransform
  474. //------------------------------------------------------------------------------
  475.  
  476. SOM_Scope void  SOMLINK ODBaseCanvasSetBiasTransform(ODBaseCanvas *somSelf, Environment *ev,
  477.         ODTransform* x)
  478. {
  479.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  480.     ODBaseCanvasMethodDebug("ODBaseCanvas","SetBiasTransform");
  481.  
  482.     if( x != _fBiasTransform ) {
  483.         SOM_TRY
  484.     
  485.             ODTransferReference(ev,_fBiasTransform,x);
  486.             _fBiasTransform = x;
  487.  
  488.         SOM_CATCH_ALL
  489.         SOM_ENDTRY
  490.     }
  491. }
  492.  
  493. //------------------------------------------------------------------------------
  494. // Invalidate
  495. //------------------------------------------------------------------------------
  496.  
  497. SOM_Scope void  SOMLINK ODBaseCanvasInvalidate(ODBaseCanvas *somSelf, Environment *ev,
  498.         ODShape* shape)
  499. {
  500.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  501.     ODBaseCanvasMethodDebug("ODBaseCanvas","Invalidate");
  502.  
  503.  
  504.     if ( !_fIsOffscreen )
  505.         return;
  506.         
  507.     SOM_TRY
  508.  
  509.     ASSERT_NOT_NULL( shape );
  510.  
  511.     if( !_fUpdateShape )
  512.         somSelf->ResetUpdateShape(ev);
  513.     _fUpdateShape->Union(ev,shape);
  514.  
  515.     SOM_CATCH_ALL
  516.     SOM_ENDTRY
  517. }
  518.  
  519. //------------------------------------------------------------------------------
  520. // Validate
  521. //------------------------------------------------------------------------------
  522.  
  523. SOM_Scope void  SOMLINK ODBaseCanvasValidate(ODBaseCanvas *somSelf, Environment *ev,
  524.         ODShape* shape)
  525. {
  526.     ODBaseCanvasData *somThis = ODBaseCanvasGetData(somSelf);
  527.     ODBaseCanvasMethodDebug("ODBaseCanvas","Validate");
  528.  
  529.     if ( !_fIsOffscreen )
  530.         return;
  531.  
  532.     SOM_TRY
  533.  
  534.     if( !_fUpdateShape )
  535.         somSelf->ResetUpdateShape(ev);
  536.     _fUpdateShape->Subtract(ev,shape);
  537.  
  538.     SOM_CATCH_ALL
  539.     SOM_ENDTRY
  540. }
  541.  
  542.