added eugtk examples
This commit is contained in:
125
eugtk/examples/test40.ex
Normal file
125
eugtk/examples/test40.ex
Normal file
@@ -0,0 +1,125 @@
|
||||
|
||||
---------------------------------------------------------------------
|
||||
--# GtkDrawingArea - draws pie chart of disk usage
|
||||
---------------------------------------------------------------------
|
||||
|
||||
include GtkEngine.e
|
||||
include GtkCairo.e
|
||||
include std/math.e
|
||||
|
||||
enum TOTAL, FREE, USED, NAME
|
||||
|
||||
ifdef WINDOWS then
|
||||
constant diskinfo = disk_size("C:")
|
||||
elsedef
|
||||
constant diskinfo = disk_size("/")
|
||||
end ifdef
|
||||
|
||||
-- note: no two disk size programs report anywhere near the same values,
|
||||
-- so there's no way to know if Euphoria's disk info is more - or less -
|
||||
-- accurate than any of the others. Eu and df -H reports match the most closely.
|
||||
|
||||
constant win = create(GtkWindow,
|
||||
"size=300x300,border_width=10,resizable=FALSE,position=1,$destroy=Quit")
|
||||
|
||||
constant panel = create(GtkBox,"orientation=VERTICAL,spacing=10")
|
||||
add(win,panel)
|
||||
|
||||
constant screen = create(GtkDrawingArea)
|
||||
set(screen,"size request",280,200)
|
||||
add(panel,screen)
|
||||
|
||||
constant css = create(GtkCssProvider,"GtkFrame {border-radius: 20px;}")
|
||||
|
||||
constant frame = create(GtkFrame)
|
||||
add(panel,frame)
|
||||
|
||||
constant evb = create(GtkEventBox)
|
||||
add(frame,evb)
|
||||
|
||||
constant lbl = create(GtkLabel,{
|
||||
{"font","10"},
|
||||
{"color","blue"},
|
||||
{"markup",
|
||||
format(` <b><u>[]</u></b>
|
||||
<b>Size: </b> []
|
||||
<span color='red'><b>Used:</b></span> []
|
||||
<span color='green'><b>Free: </b></span> []`,
|
||||
{diskinfo[NAME],
|
||||
format("[:8.0,,] meg.",diskinfo[TOTAL]/1_000_000),
|
||||
format("[:8.0,,] meg.",diskinfo[USED]/1_000_000),
|
||||
format("[:8.0,,] meg.",diskinfo[FREE]/1_000_000),
|
||||
" "})}})
|
||||
add(evb,lbl)
|
||||
|
||||
constant btn1 = create(GtkButton,"gtk-quit","Quit")
|
||||
constant box = create(GtkButtonBox,{
|
||||
{"layout",GTK_BUTTONBOX_START},
|
||||
{"margin top",10}})
|
||||
add(box,btn1)
|
||||
pack(panel,-box)
|
||||
|
||||
-- following line redraws the pie chart on program start and
|
||||
-- whenever window is obscured/restored.
|
||||
-- it must not be called until all widgets are created
|
||||
connect(panel,"draw",call_back(routine_id("DrawPieChart")))
|
||||
|
||||
show_all(win)
|
||||
main()
|
||||
|
||||
-------------------------------
|
||||
function DrawPieChart()
|
||||
-------------------------------
|
||||
atom dwin = get(screen,"window")
|
||||
atom cr = create(GdkCairo_t,dwin)
|
||||
|
||||
set(cr,{
|
||||
{"source rgba",255,255,255,255},
|
||||
{"operator",CAIRO_OPERATOR_SOURCE},
|
||||
{"paint"}})
|
||||
|
||||
atom xc = 140.0
|
||||
atom yc = 95.0
|
||||
atom radius = 50.0
|
||||
|
||||
atom percent_used = (diskinfo[USED]/diskinfo[TOTAL])
|
||||
atom percent_free = (diskinfo[FREE]/diskinfo[TOTAL])
|
||||
atom degrees_used = 360 * percent_used
|
||||
atom degrees_free = 360 * percent_free
|
||||
|
||||
-- angles are specified in radians; the zero radial is at 3 o'clock.
|
||||
-- to get a more natural display, we rotate it to start at high noon.
|
||||
atom offset = 90 * DEGREES_TO_RADIANS
|
||||
atom radians_used = (degrees_used * DEGREES_TO_RADIANS)-offset
|
||||
atom radians_free = (degrees_free - (90 * DEGREES_TO_RADIANS))-offset
|
||||
|
||||
set(cr,{ -- fill free space;
|
||||
{"color","pale green"},
|
||||
{"arc",xc, yc, 90.0, -offset, radians_free},
|
||||
{"fill"}})
|
||||
|
||||
set(cr,{ -- draw border;
|
||||
{"color","blue"},
|
||||
{"line width",3},
|
||||
{"arc",xc, yc, 90.0, 0, math:TWOPI},
|
||||
{"stroke"}})
|
||||
|
||||
set(cr,{ -- fill used space;
|
||||
{"color","red"},
|
||||
{"move to",xc,yc},
|
||||
{"arc", xc, yc,88, -offset, radians_used},
|
||||
{"fill"}})
|
||||
|
||||
set(cr,{-- draw center dot;
|
||||
{"color","yellow"},
|
||||
{"arc",xc, yc, 4.0, 0, math:TWOPI},
|
||||
{"fill"}})
|
||||
|
||||
set(cr,"destroy")
|
||||
|
||||
return 0 -- important to return 0 here!
|
||||
end function
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user