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 / gemw.cc < prev    next >
C/C++ Source or Header  |  1992-04-26  |  2KB  |  121 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 "gemw.h"
  10. #include <bool.h>
  11.  
  12. #define LOHI(x) (int)(x) & 0xffff, (int)(x) >> 16
  13. #define HILO(x) (int)(x) >> 16, (int)(x) & 0xffff
  14.  
  15.  
  16. static char *DefaultTitle=" <untitled> ";
  17.  
  18. void GEMwindow::RedrawOverlaps(GRECT& area)
  19. {
  20.     GRECT    box;
  21.     GRECT    dirty_source, dirty_dest;
  22.     GRECT    work_area;
  23.  
  24.     wind_get(Handle, WF_WORKXYWH,
  25.         &work_area.g_x, &work_area.g_y,
  26.         &work_area.g_w, &work_area.g_h);
  27.  
  28.     graf_mouse(M_OFF,0);
  29.  
  30.     wind_get(Handle, WF_FIRSTXYWH, &box.g_x, &box.g_y, &box.g_w, &box.g_h);
  31.     while ( box.g_w && box.g_h )
  32.     {
  33.         if (rc_intersect(&area, &box))
  34.         {
  35.             rc_copy(&box, &dirty_dest);
  36.             if (rc_intersect(&work_area, &dirty_dest))
  37.             {
  38.                 Redraw(dirty_dest);
  39.             }
  40.         }
  41.         wind_get(Handle, WF_NEXTXYWH, &box.g_x, &box.g_y, &box.g_w, &box.g_h);
  42.     }
  43.     graf_mouse(M_ON,0);
  44. }
  45.  
  46. int wind_with_parts(GEMwindow* w, int Parts, GRECT& R)
  47. {
  48.     int h;
  49.  
  50.     if (Parts<0) {
  51.         h=0; // ie. Desktop
  52.     } else {
  53.         h=wind_create(Parts, R.g_x, R.g_y, R.g_w, R.g_h);
  54.     }
  55.     if (Parts&NAME && h) {
  56.         wind_set(h,WF_NAME,DefaultTitle);  // only NAMEd windows?
  57.     }
  58.     if (h) wind_set(h,WF_NAME,DefaultTitle);  // or always?
  59.  
  60.     return h;
  61. }
  62.  
  63. GEMwindow::GEMwindow(int Parts, GRECT& R) :
  64.     parts(Parts),
  65.     Open(FALSE)
  66. {
  67.     Pos=R;
  68.     Handle=wind_with_parts(this,Parts,R);
  69. }
  70.  
  71. GEMwindow::GEMwindow(int Parts=0) :
  72.     parts(Parts),
  73.     Open(FALSE)
  74. {
  75.     wind_get(0,WF_WORKXYWH,&Pos.g_x,&Pos.g_y,&Pos.g_w,&Pos.g_h);
  76.     Handle=wind_with_parts(this,Parts,Pos);
  77. }
  78.  
  79. GEMwindow::~GEMwindow()
  80. {
  81.     wind_delete(Handle);
  82. }
  83.  
  84. void GEMwindow::open()
  85. {
  86.     if (!Open) {
  87.         wind_open(Handle,Pos.g_x,Pos.g_y,Pos.g_w,Pos.g_h);
  88.         Open=TRUE;
  89.     }
  90. }
  91.  
  92. void GEMwindow::close()
  93. {
  94.     if (Open) {
  95.         wind_close(Handle);
  96.         Open=FALSE;
  97.     }
  98. }
  99.  
  100. void GEMwindow::move(int x, int y)
  101. {
  102.     Pos.g_x=x;
  103.     Pos.g_y=y;
  104.     wind_set(Handle,WF_CURRXYWH,Pos.g_x,Pos.g_y,Pos.g_w,Pos.g_h);
  105. }
  106.  
  107. void GEMwindow::top(int x, int y)
  108. {
  109.     wind_set(Handle,WF_TOP);
  110. }
  111.  
  112. ClickResult GEMwindow::click(int x, int y)
  113. {
  114.     return ContinueInteraction;
  115. }
  116.  
  117. void GEMwindow::title(const char *T)
  118. {
  119.     wind_set(Handle,WF_NAME,LOHI(T));
  120. }
  121.