; ; @ANO_SCRIPT_NAME gui_mandelbrot ; @ANO_SCRIPT_VERSION 0.0.5 ; @ANO_SCRIPT_DESCRIPTION Example how to plot some pixels to window ; ; @ANO_FLAGS_VAR_NAME_SUBS [x] ; @ANO_FLAGS_VAR_WARN_UNUSED [ ] ; ; Copyright (c) 2016-2024, Jani Salonen ; All rights reserved. ; main { ; Global uninitialized variables var [handle] handle_window_main ; Global pre-initialized variables mov win_w ([uint] 640) mov win_h ([uint] 400) ; Initialize windowing system window_init ; Open main window window_open (\ title_name: "Mandelbrot", \ title_charset: NULL, \ parent_handle: NOPARENT, \ widget_stack_id: NOWIDGET, \ widget_set: NOWIDGET, \ window_refresh_divider: ACTIVE_REFRESH, \ position_x: POS_CENTERED, \ position_y: POS_CENTERED, \ size_width: win_w, \ size_height: win_h, \ cb_main_loop: NULL, \ cb_expose: NULL, \ cb_key_press: NULL, \ cb_key_release: NULL, \ cb_button_press: NULL, \ cb_button_release: NULL, \ cb_client_message: NULL, \ cb_configure_notify: NULL, \ cb_destroy_notify: "cb_destroy", \ cb_motion_notify: NULL, \ cb_map_notify: NULL, \ cb_unmap_notify: NULL, \ cb_open_notify: "cb_open") } callback cb_open (_hnd) { mov handle_window_main (_hnd) ; Map main window window_map (handle_window_main) ; Create drawing thread @mandelbrot_thread ("Mandelbrot") } callback cb_destroy { window_close (handle_window_main) exit } thread mandelbrot_thread { &mandelbrot_draw (1.0, [uint] 120, [int] 0, [int] 0) } function mandelbrot_draw (_zoom, _maxiterations, _posx, _posy) { var [color] _c loop (mov _y (0); _y < win_h; inc _y) { loop (mov _x (0); _x < win_w; inc _x) { mov _pr (1.5 * (_x - win_w / 2.0) / (0.5 * _zoom * win_w) + _posx) mov _pi ((_y - win_h / 2.0) / (0.5 * _zoom * win_h) + _posy) mov _ne (0) mov _nf (0) mov _i ([int] 0) mandelbrot_loop_c: mov _oe (_ne) mov _of (_nf) mov _ne (_oe * _oe - _of * _of + _pr) mov _nf (2.0 * _oe * _of + _pi) mov _t (_ne * _ne + _nf * _nf) if _t >= 4 : mandelbrot_loop_d inc _i if _i < _maxiterations : mandelbrot_loop_c mandelbrot_loop_d: ; Plot the pixel adjusting colors a bit mov _c (# 0) add _c.red (_i) add _c.green (_i * 2.0) draw_pixel (handle_window_main, _x, _y, _c) } } }