home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / Programming / BGUI / bgui_e / sources / examples / Area.e < prev    next >
Encoding:
Text File  |  1999-08-26  |  6.7 KB  |  238 lines

  1. /* -- --------------------------------------------------------------- -- *
  2.  * -- Programname.........: Area.e                                    -- *
  3.  * -- Description.........: Translation from "Area.c" written by      -- *
  4.  * --                       Jan van den Baard.                        -- *
  5.  * -- Author..............: Daniel Kasmeroglu (alias Deekah)          -- *
  6.  * -- Version.............: 0.1     (07.03.1997)                      -- *
  7.  * -- --------------------------------------------------------------- -- */
  8.  
  9.  
  10.      /* -- ------------------------------------------------- -- *
  11.       * --                  Compiler-Option's                -- *
  12.       * -- ------------------------------------------------- -- */
  13.  
  14. OPT REG = 5              -> activate register-optimisation
  15. OPT PREPROCESS           -> enable preprocessor
  16.  
  17.  
  18.      /* -- ------------------------------------------------- -- *
  19.       * --                      E-Module                     -- *
  20.       * -- ------------------------------------------------- -- */
  21.  
  22. MODULE 'intuition/intuition',
  23.        'intuition/screens',
  24.        'intuition/classusr',
  25.        'intuition/classes',
  26.        'intuition/gadgetclass',
  27.        'libraries/bguim',
  28.        'libraries/bgui',
  29.        'utility/tagitem',
  30.        'graphics/gfx',
  31.        'tools/boopsi'
  32.  
  33. MODULE 'bgui',
  34.        'bgui/bgui_image'
  35.  
  36.  
  37.      /* -- ------------------------------------------------- -- *
  38.       * --                     Constant's                    -- *
  39.       * -- ------------------------------------------------- -- */
  40.  
  41. ENUM GID_AREA = 1,
  42.      GID_QUIT
  43.  
  44.  
  45.      /* -- ------------------------------------------------- -- *
  46.       * --                    Structure's                    -- *
  47.       * -- ------------------------------------------------- -- */
  48.  
  49. OBJECT demogui
  50.   owindow      : PTR TO object
  51.   window       : PTR TO window
  52.   gadgets[ 2 ] : ARRAY OF LONG
  53. ENDOBJECT
  54.  
  55.  
  56.      /* -- ------------------------------------------------- -- *
  57.       * --                      Method's                     -- *
  58.       * -- ------------------------------------------------- -- */
  59.  
  60. PROC dem_Constructor() OF demogui
  61.  
  62.   self.gadgets[ GID_AREA - 1 ] := AreaObject,
  63.                                     ButtonFrame,
  64.                                     AREA_MinWidth,      40,
  65.                                     AREA_MinHeight,     10,
  66.                                     GA_ID,              GID_AREA,
  67.                                   EndObject
  68.  
  69.  
  70.   self.gadgets[ GID_QUIT - 1 ] := PrefButton( '_Quit', GID_QUIT )
  71.  
  72.   self.owindow := WindowObject,
  73.                     WINDOW_Title,           'Areaclass demo.',
  74.                     WINDOW_AutoAspect,      TRUE,
  75.                     WINDOW_SmartRefresh,    TRUE,
  76.                     WINDOW_AutoKeyLabel,    TRUE,
  77.                     WINDOW_CloseOnEsc,      TRUE,
  78.                     WINDOW_ScaleWidth,      40,
  79.                     WINDOW_ScaleHeight,     50,
  80.                     WINDOW_MasterGroup,
  81.                       VGroupObject,
  82.                         NormalOffset,
  83.                         NormalSpacing,
  84.                         ShineRaster,
  85.                         StartMember,
  86.                           self.gadgets[ GID_AREA - 1 ],
  87.                         EndMember,
  88.                         StartMember,
  89.                           self.gadgets[ GID_QUIT - 1 ],
  90.                           FixMinHeight,
  91.                         EndMember,
  92.                       EndObject,
  93.                   EndObject
  94.  
  95. ENDPROC
  96.  
  97.  
  98. PROC dem_StartInterface() OF demogui
  99. DEF sta_area : PTR TO ibox
  100. DEF sta_rc,sta_running,sta_signal
  101.  
  102.   IF self.owindow <> NIL
  103.  
  104.     self.window := WindowOpen( self.owindow )
  105.     IF self.window <> NIL
  106.  
  107.       GetAttr( WINDOW_SigMask, self.owindow, {sta_signal} )
  108.  
  109.       sta_running := TRUE
  110.       WHILE sta_running = TRUE
  111.  
  112.         Wait( sta_signal )
  113.  
  114.         WHILE (sta_rc := HandleEvent( self.owindow )) <> WMHI_NOMORE
  115.  
  116. handleMsg:
  117.           SELECT sta_rc
  118.           CASE WMHI_CLOSEWINDOW ; sta_running := FALSE
  119.           CASE GID_QUIT         ; sta_running := FALSE
  120.           CASE GID_AREA
  121.  
  122.             GetAttr( AREA_AreaBox, self.gadgets[ GID_AREA - 1 ], {sta_area} )
  123.             sta_rc := glo_RenderMandel( self.window, sta_area, self.owindow )
  124.             IF sta_rc <> 0 THEN JUMP handleMsg
  125.  
  126.           ENDSELECT
  127.  
  128.         ENDWHILE
  129.  
  130.       ENDWHILE
  131.  
  132.       WindowClose( self.owindow )
  133.  
  134.     ENDIF
  135.  
  136.   ENDIF
  137.  
  138. ENDPROC
  139.  
  140.  
  141. PROC end() OF demogui
  142.   IF self.owindow <> NIL THEN DisposeObject( self.owindow )
  143. ENDPROC
  144.  
  145.  
  146.      /* -- ------------------------------------------------- -- *
  147.       * --                    Procedure's                    -- *
  148.       * -- ------------------------------------------------- -- */
  149.  
  150. -> // This routine is equivalent to the program "IntMandel.e" but
  151. -> // all time I use this routine I'm getting shit if the area
  152. -> // is too small. If the area is big enough (see my scale-values)
  153. -> // I'm getting the correct example.
  154.  
  155. PROC glo_RenderMandel( ren_win : PTR TO window, ren_ibox : PTR TO ibox, ren_owindow )
  156. DEF ren_zr,ren_zi,ren_ar,ren_ai
  157. DEF ren_dr,ren_di,ren_sr,ren_si
  158. DEF ren_st,ren_x,ren_y,ren_i,ren_rc
  159. DEF ren_xsize,ren_ysize,ren_cols
  160.  
  161.   ren_cols  := Shl( 1, ren_win.wscreen.bitmap.depth ) - 1
  162.   ren_xsize := ren_ibox.width
  163.   ren_ysize := ren_ibox.height
  164.  
  165.   ren_sr    := $400000 / ren_xsize
  166.   ren_si    := $300000 / ren_ysize
  167.   ren_st    := $140000 * -2
  168.   ren_zi    := $160000
  169.  
  170.   FOR ren_y := ren_ysize - 1 TO 0 STEP -1
  171.  
  172.     ren_zi := ren_zi - ren_si
  173.     ren_zr := ren_st
  174.  
  175.     FOR ren_x := 0 TO ren_xsize - 1
  176.  
  177.       ren_i  := 0
  178.       ren_ar := ren_zr
  179.       ren_ai := ren_zi
  180.  
  181.       REPEAT
  182.  
  183.         ren_dr := Shr( ren_ar, 10 )
  184.         ren_di := Shr( ren_ai, 10 )
  185.         ren_ai := ren_dr * 2 * ren_di + ren_zi
  186.         ren_dr := ren_dr * ren_dr
  187.         ren_di := ren_di * ren_di
  188.         ren_ar := ren_dr -ren_di + ren_zr
  189.         ren_i++
  190.  
  191.       UNTIL (ren_i > 25) OR (ren_dr + ren_di > $400000)
  192.  
  193.       SetAPen( ren_win.rport, ren_i AND ren_cols )
  194.       WritePixel( ren_win.rport, ren_x + ren_ibox.left, ren_y + ren_ibox.top )
  195.  
  196.       WHILE (ren_rc := HandleEvent( ren_owindow )) <> WMHI_NOMORE
  197.  
  198.         SELECT ren_rc
  199.         CASE WMHI_CLOSEWINDOW ; RETURN ren_rc
  200.         CASE GID_AREA         ; RETURN ren_rc
  201.         CASE GID_QUIT         ; RETURN ren_rc
  202.         ENDSELECT
  203.  
  204.       ENDWHILE
  205.  
  206.       ren_zr   := ren_zr + ren_sr
  207.  
  208.     ENDFOR
  209.  
  210.   ENDFOR
  211.   
  212. ENDPROC 0
  213.  
  214.  
  215.      /* -- ------------------------------------------------- -- *
  216.       * --                     Hauptprogramm                 -- *
  217.       * -- ------------------------------------------------- -- */
  218.  
  219. PROC main() HANDLE
  220. DEF ma_object : PTR TO demogui
  221.  
  222.   ma_object := NIL
  223.  
  224.   bguibase  := OpenLibrary( 'bgui.library', 41 )
  225.   IF bguibase <> NIL
  226.  
  227.     NEW ma_object.dem_Constructor()
  228.     ma_object.dem_StartInterface()
  229.  
  230.   ENDIF
  231.  
  232. EXCEPT DO
  233.  
  234.   IF ma_object <> NIL THEN END ma_object
  235.   IF bguibase  <> NIL THEN CloseLibrary( bguibase )
  236.  
  237. ENDPROC
  238.