1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
(*
** Author: Hongwei Xi
** Authoremail: gmhwxiATgmailDOTcom
** Start time: September, 2013
*)
(* ****** ****** *)
//
#include
"share/atspre_define.hats"
#include
"share/atspre_staload.hats"
//
(* ****** ****** *)
//
#define
LIBCAIRO_targetloc
"$PATSHOME/npm-utils\
/contrib/atscntrb-libcairo"
//
(* ****** ****** *)
//
staload
"{$LIBCAIRO}/SATS/cairo.sats"
//
(* ****** ****** *)
//
#define MYDRAW_CAIRO
//
#include "./../mylibies.hats"
//
#staload $MYDRAW
#staload $MYDRAW_cairo
//
#include "./../DATS/mydraw.dats"
#include "./../DATS/mydraw_cairo.dats"
//
(* ****** ****** *)
(*
HX:
For external use:
*)
(*
//
#define MYDRAW_CAIRO
//
#include
"$PATSHOMELOCS\
/atscntrb-hx-teaching-mydraw/mylibies.hats"
//
#staload $MYDRAW
#staload $MYDRAW_cairo
//
#include
"$PATSHOMELOCS\
/atscntrb-hx-teaching-mydraw/DATS/mydraw.dats"
#include
"$PATSHOMELOCS\
/atscntrb-hx-teaching-mydraw/DATS/mydraw_cairo.dats"
//
*)
(* ****** ****** *)
#include "./test01.dats"
(* ****** ****** *)
extern
fun
cairo_draw3_sierpinski
{l:agz}
(
cr: !cairo_ref (l)
, p1: point, p2: point, p3: point, clr1: color, clr2: color
, level: int
) : void // end of [cairo_draw3_sierpinski]
implement
cairo_draw3_sierpinski
(cr, p1, p2, p3, clr1, clr2, n) = let
//
val p_cr = ptrcast (cr)
//
implement
mydraw_get0_cairo<> () = let
//
extern
castfn __cast {l:addr} (ptr(l)): vttakeout (void, cairo_ref(l))
//
in
__cast (p_cr)
end // end of [mydraw_get0_cairo]
//
in
draw3_sierpinski (p1, p2, p3, clr1, clr2, n)
end // end of [cairo_draw3_sierpinski]
(* ****** ****** *)
implement
main0 () = () where {
//
val W = 250 and H = 250
//
// create a sf for drawing
//
val sf =
cairo_image_surface_create (CAIRO_FORMAT_ARGB32, W, H)
val cr = cairo_create (sf)
//
val WH = min (W, H)
val WH = g0int2float_int_double (WH)
val WH2 = WH / 2
//
val () =
cairo_translate (cr, WH2, WH2)
val (pf0 | ()) = cairo_save (cr)
//
val p1 = point_make (~WH2, WH2)
val p2 = point_make ( 0.0, ~WH2)
val p3 = point_make ( WH2, WH2)
//
val clr1 = color_make (0.0, 0.0, 1.0)
val clr2 = color_complement (clr1)
//
val () = cairo_draw3_sierpinski (cr, p1, p2, p3, clr1, clr2, 4)
//
val () = cairo_restore (pf0 | cr)
//
val status =
cairo_surface_write_to_png (sf, "test01.png")
val () = cairo_surface_destroy (sf) // a type error if omitted
val () = cairo_destroy (cr) // a type error if omitted
//
// in case of a failure ...
//
val () = assertloc (status = CAIRO_STATUS_SUCCESS)
//
} (* end of [main0] *)
(* ****** ****** *)
(* end of [test01-cairo.dats] *)
|