home *** CD-ROM | disk | FTP | other *** search
/ Computer Club Elmshorn Atari PD / CCE_PD.iso / pc / 0400 / CCE_0423.ZIP / CCE_0423.PD / GEM.ZOO / gemf.cc < prev    next >
C/C++ Source or Header  |  1992-04-26  |  2KB  |  90 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  This file is Copyright 1992 by Warwick W. Allison,
  4. //  and is freely distributable providing no charge is made.
  5. //
  6. /////////////////////////////////////////////////////////////////////////////
  7.  
  8. #include "aesbind.h"
  9. #include "gemf.h"
  10. #include "gemo.h"
  11.  
  12. const int INITCBOs=4;
  13. const int INCCBOs=4;
  14.  
  15. GEMform::GEMform(int RSCindex) :
  16.     myindex(RSCindex),
  17.     MaxCBOs(INITCBOs),
  18.     CBO(new GEMobject* [MaxCBOs])
  19. {
  20.     rsrc_gaddr(R_TREE,myindex,&Obj);
  21. }
  22.  
  23. GEMform::~GEMform()
  24. {
  25.     delete CBO;
  26. }
  27.  
  28. int GEMform::Do()
  29. {
  30.     int x,y,w,h;
  31.     form_center(Obj,&x,&y,&w,&h);
  32.     return Do(x,y);
  33. }
  34.  
  35. int GEMform::Do(int x, int y)
  36. {
  37.     int X,Y,w,h;
  38.     form_center(Obj,&X,&Y,&w,&h);
  39.     Obj[0].ob_x+=x-X;
  40.     Obj[0].ob_y+=y-Y;
  41.  
  42.     form_dial(FMD_START,0,0,0,0,x,y,w,h);
  43.     if (ZoomOn) form_dial(FMD_GROW,0,0,0,0,x,y,w,h);
  44.  
  45.     objc_draw(Obj, ROOT, MAX_DEPTH, x, y, w, h);
  46.     int exitor=form_do(Obj,0);
  47.  
  48.     Obj[exitor].ob_state&=~SELECTED;
  49.  
  50.     if (ZoomOn) form_dial(FMD_SHRINK,0,0,0,0,x,y,w,h);
  51.     form_dial(FMD_FINISH,0,0,0,0,x,y,w,h);
  52.  
  53.     return exitor;
  54. }
  55.  
  56. void GEMform::RedrawObject(int RSCindex)
  57. {
  58.     objc_draw(Obj,RSCindex,MAX_DEPTH,0,0,600,300);
  59. }
  60.  
  61. void GEMform::RedrawObject(int RSCindex,int Cx,int Cy,int Cw,int Ch) // Clipped
  62. {
  63.     int X,Y;
  64.     objc_offset(Obj,RSCindex,&X,&Y);
  65.     objc_draw(Obj,RSCindex,MAX_DEPTH,Cx+X,Cy+Y,Cw,Ch);
  66. }
  67.  
  68. void GEMform::CallBack(GEMobject* O)
  69. {
  70.     if (CBOs==MaxCBOs) {
  71.         GEMobject* *NewCBO=new GEMobject* [MaxCBOs+INCCBOs];
  72.         for (int i=0; i<MaxCBOs; i++) NewCBO[i]=CBO[i];
  73.         delete CBO;
  74.         CBO=NewCBO;
  75.         MaxCBOs+=INCCBOs;
  76.     }
  77.  
  78.     CBO[CBOs]=O;
  79.  
  80.     CBOs++;
  81. }
  82.  
  83. GEMobject* GEMform::Caller(int RSCindex)
  84. {
  85.     for (int i=0; i<CBOs; i++) {
  86.         if (CBO[i]->myindex==RSCindex) return CBO[i];
  87.     }
  88.     return 0;
  89. }
  90.