96 lines
2.5 KiB
Elixir
96 lines
2.5 KiB
Elixir
|
|
----------------------------------------------------------------------------------
|
|
--# More Graphics, demos translucency, resizing;
|
|
----------------------------------------------------------------------------------
|
|
|
|
include GtkEngine.e
|
|
include GtkCairo.e
|
|
include std/math.e
|
|
|
|
constant win = create(GtkWindow,{
|
|
{"title","Resize Me!"},
|
|
{"default size",300,300},
|
|
{"position",GTK_WIN_POS_CENTER},
|
|
{"border width",0},
|
|
{"background",#DBDBDB},
|
|
{"add events",GDK_BUTTON_PRESS_MASK},
|
|
{"app paintable",TRUE},
|
|
{"connect","destroy","Quit"}})
|
|
|
|
constant box = add(win,create(GtkBox,VERTICAL))
|
|
|
|
constant screen = create(GtkDrawingArea)
|
|
pack(box,screen,TRUE,TRUE)
|
|
|
|
connect(box,"draw","Paint") -- re-do as needed;
|
|
|
|
show_all(win)
|
|
atom dwin = get(screen,"window") -- for use in Paint func;
|
|
main()
|
|
|
|
----------------------------------------------------------
|
|
global function Paint(atom ctl, atom event, atom data)
|
|
----------------------------------------------------------
|
|
atom cr = create(GdkCairo_t,dwin)
|
|
|
|
object size = get(win,"size") - {0,40} -- allow for window header, etc
|
|
integer width = size[1]
|
|
integer height = size[2]
|
|
integer lesser = min(size)
|
|
|
|
-- coordinates for the center of the window;
|
|
atom xc = width / 2
|
|
atom yc = height / 2
|
|
|
|
-- clear previous drawing;
|
|
set(cr,{
|
|
{"source rgb",0.86,0.86,0.86}, -- a neutral gray;
|
|
{"paint"},
|
|
|
|
{"source rgb",0,0,0}, -- outine the 3 shapes in black
|
|
{"set_line_width",lesser * 0.02}, -- outline thickness increases with window size
|
|
{"save"},
|
|
|
|
-- first draw a simple unclosed arc;
|
|
{"arc",width / 3.0, height / 4.0, lesser / 4.0, -(PI / 5.0), PI},
|
|
{"close_path"}, -- line back to start point
|
|
{"set_source_rgb",0.0, 0.8, 0.0},
|
|
{"fill_preserve"}, -- fill with color, save shape
|
|
{"restore"}, -- back to opaque black
|
|
{"stroke"}, -- outline shape
|
|
|
|
-- now draw a circle;
|
|
{"save"},
|
|
{"arc",xc, yc, lesser / 4.0, 0.0, 2.0 * PI}, -- full circle
|
|
{"source rgba",0.6, 0.0, 0.8, 0.6}, -- partially translucent
|
|
{"fill_preserve"},
|
|
{"restore"}, -- back to opaque black
|
|
{"stroke"},
|
|
{"save"}})
|
|
|
|
-- and an ellipse;
|
|
atom ex, ey, ew, eh
|
|
-- center of ellipse
|
|
ex = xc
|
|
ey = 3 * height / 4
|
|
-- ellipse dimensions
|
|
ew = 3 * width / 4
|
|
eh = height / 3
|
|
|
|
set(cr,{
|
|
{"translate",ex, ey},
|
|
{"scale",ew / 2.0, eh / 2.0},
|
|
|
|
{"arc",0, 0, 1, 0, 2 * PI}, -- centered at (0, 0)
|
|
{"source rgba",0.8, 0, 0, 0.7},
|
|
{"fill_preserve"}, -- fill with color, save shape
|
|
{"restore"}, -- back to opaque black
|
|
{"stroke"}, -- outline the shape
|
|
{"destroy"}})
|
|
|
|
return 1
|
|
end function
|
|
|
|
|
|
|