'@ Compile with Bacon Beta 2.5 or above
PRAGMA LDFLAGS `pkg-config --libs elementary cairo`
PRAGMA OPTIONS `pkg-config --cflags elementary cairo`
PRAGMA INCLUDE elementary-1/Elementary.h cairo/cairo.h
'--- demo by alexfish a port for elementary and BaCon
'---cairo
PROTO cairo_create
PROTO cairo_rectangle
PROTO cairo_set_source_rgb
PROTO cairo_fill
PROTO cairo_destroy
PROTO cairo_surface_destroy
PROTO cairo_scale
PROTO cairo_image_surface_create_for_data
PROTO cairo_surface_flush
PROTO cairo_image_surface_create
PROTO cairo_surface_write_to_png
'---GUI
PROTO Ecore_Evas , Evas_Object
PROTO elm_policy_set
PROTO elm_win_util_standard_add
PROTO elm_win_autodel_set
PROTO evas_object_resize
PROTO evas_object_show
PROTO elm_run
PROTO elm_shutdown
PROTO elm_init
PROTO evas_object_rectangle_add, evas_object_color_set
PROTO evas_object_move
PROTO evas_object_evas_get
PROTO ecore_evas_get
PROTO evas_object_name_set ALIAS EV_OBJECT_NAME_SET
PROTO evas_object_image_add ALIAS EV_OBJECT_IMAGE_ADD
PROTO evas_object_image_colorspace_set ALIAS EV_OBJECT_IMAGE_COLORSPACE_SET
PROTO evas_object_image_data_get ALIAS EV_OBJECT_IMAGE_DATA_GET
PROTO evas_object_image_data_set ALIAS EV_OBJECT_IMAGE_DATA_SET
PROTO evas_object_image_file_set ALIAS EV_OBJECT_IMAGE_FILE_SET
PROTO evas_object_image_filled_add ALIAS EV_OBJECT_IMAGE_FILLED_ADD
PROTO evas_object_image_size_get ALIAS EV_OBJECT_IMAGE_SIZE_GET
PROTO evas_object_image_size_set ALIAS EV_OBJECT_IMAGE_SIZE_SET
PROTO evas_object_move ALIAS EV_OBJECT_MOVE
'@ INIT
elm_init(0,0)
'@ Declares
HEIGHT=500
WIDTH = 400
DECLARE *img TYPE Evas_Object
DECLARE *pixy TYPE unsigned char
DECLARE *surface TYPE cairo_surface_t
DECLARE canvas1 TYPE Evas*
DECLARE *win TYPE Evas_Object
DECLARE *bg TYPE Evas_Object
DECLARE fg1 TYPE Evas_Object*
REM ---- FERN
FUNCTION FERN(cairo_surface_t *cs)
LOCAL *pixels TYPE unsigned char
LOCAL *cr TYPE cairo_t
LOCAL i TYPE long
LOCAL a,b,c,d,e,f,x,y,r,newx, newy TYPE float
x = 0
y = 0
cr=cairo_create(cs)
color$="#9D2C2C"
cairo_set_source_rgb(cr,0.0, 1.0, 0.0 )
cairo_scale(cr,0.5,0.5)
SEED NOW
DEF FN QRND = (float)(RANDOM(1000) / 1000.0)
FOR i = 1 TO 125000
r = QRND
IF r <= 0.1 THEN
a = 0
b = 0
c = 0
d = 0.16
e = 0
f = 0
ELIF r > 0.1 AND r <= 0.86 THEN
a = .85
b = .04
c = -.04
d = .85
e = 0
f = 1.6
ELIF r > 0.86 AND r <= 0.93 THEN
a = .2
b = -.26
c = .23
d = .22
e = 0
f = 1.6
ELIF r > 0.93 THEN
a = -.15
b = .28
c = .26
d = .24
e = 0
f = .44
END IF
newx = a * x + b * y + e
newy = c * x + d * y + f
x = newx
y = newy
cairo_rectangle(cr,(350 + 96 * x),(32 + 96 * y),1.0, 1.0)
cairo_fill(cr)
NEXT i
cairo_surface_flush(cs)
'pixels = cairo_image_surface_get_data(cs)
cairo_destroy(cr)
cairo_surface_write_to_png(cs,"mypic.png")
'RETURN pixels
RETURN TRUE
END FUNCTION
'@ END FUNCTIONS and SUBS
elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
win = elm_win_util_standard_add("fern-demo", "FERN DEMO with cairo")
elm_win_autodel_set(win, EINA_TRUE)
evas_object_resize(win, WIDTH, HEIGHT)
evas_object_show(win)
'@ find drawable
canvas1 = evas_object_evas_get(win)
' @ create cairo image similar to evas image @ CAIRO_FORMAT_ARGB32
surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, WIDTH, HEIGHT)
' @ create the ufo
'@ start render to cairo and write to file
write_pix= FERN(surface)
fg1 = evas_object_image_filled_add(canvas1)
evas_object_image_file_set(fg1, "mypic.png", NULL)
evas_object_move(fg1, 50, 100)
evas_object_resize(fg1, 300, 300)
evas_object_show(fg1)
PRINT "Render Time ",TIMER-start , " mSec"
elm_run()
elm_shutdown()