180 lines
5.0 KiB
Elixir
180 lines
5.0 KiB
Elixir
|
|
------------------------------------------------------------------------
|
|
--# GtkStack offers a variety of 'transition' effects when pages change.
|
|
------------------------------------------------------------------------
|
|
|
|
include GtkEngine.e
|
|
|
|
requires("3.10.8","for GtkStack")
|
|
|
|
constant img = {
|
|
create(GtkImage,"thumbnails/fox.svg"),
|
|
create(GtkImage,"thumbnails/fish.svg"),
|
|
create(GtkImage,"thumbnails/mouse.svg")
|
|
}
|
|
|
|
sequence captions = {
|
|
"None",
|
|
"Crossfade",
|
|
"Slide Right",
|
|
"Slide Left",
|
|
"Slide Up",
|
|
"Slide Down",
|
|
"Left Right",
|
|
"Up Down"
|
|
}
|
|
|
|
if minor_version > 10 then
|
|
captions &= {
|
|
"Over Up","Over Down","Over Left","Over Right",
|
|
"Under Up","Under Down","Under Left","Under Right","Over Up Down"}
|
|
end if
|
|
|
|
if minor_version > 12 then
|
|
captions &= {"Over Down Up","Over Left Right","Over Right Left"}
|
|
end if
|
|
|
|
constant icons = { -- icons for radio buttons;
|
|
0,
|
|
"media-playlist-shuffle",
|
|
"go-next",
|
|
"go-previous",
|
|
"go-up",
|
|
"go-down",
|
|
"thumbnails/rightleft.png",
|
|
"thumbnails/updown.png",
|
|
$}
|
|
|
|
constant tips = { -- for radio buttons;
|
|
"None\n<i>change is instantaneous</i>",
|
|
"Crossfade",
|
|
"Slide right",
|
|
"Slide left",
|
|
"Slide up",
|
|
"Slide down",
|
|
"Slide left-right\n<small>bi-directional\naccording to button order</small>",
|
|
"Slide up-down\n<small>bi-directional\naccording to button order</small>",
|
|
"Over up\n<small>cover the old page by sliding up</small>",
|
|
"Over down\n<small>cover the old page by sliding down</small>",
|
|
"Over left\n<small>cover the old page by sliding left</small>",
|
|
"Over right\n<small>cover the old page by sliding right</small>",
|
|
"Under up\n<small>uncover the new page by sliding up</small>",
|
|
"Under down\n<small>uncover the new page by sliding down</small>",
|
|
"Under left\n<small>uncover the new page by sliding to the left</small>",
|
|
"Under right\n<small>uncover the new page by sliding to the right</small>",
|
|
"Over up down\n<small>according to button order</small>",
|
|
"Over down up\n<small>according to button order</small>",
|
|
"Over left right\n<small>according to button order</small>",
|
|
"Over right left\n<small>according to button order</small>",
|
|
$}
|
|
|
|
constant window = create(GtkWindow,{
|
|
{"border width",10},
|
|
{"position",GTK_WIN_POS_CENTER},
|
|
{"connect","destroy","Quit"}})
|
|
|
|
constant grid = add(window,create(GtkGrid))
|
|
|
|
constant stack = create(GtkStack,{
|
|
{"hexpand",TRUE},
|
|
{"vexpand",TRUE},
|
|
{"transition duration",500},
|
|
{"transition type",GTK_STACK_TRANSITION_TYPE_NONE}})
|
|
|
|
set(grid,"attach",stack,0,0,1,1)
|
|
|
|
constant stackswitcher = create(GtkStackSwitcher,{
|
|
{"border width",10},
|
|
{"spacing",10},
|
|
{"stack",stack}})
|
|
|
|
set(grid,"attach",stackswitcher,0,2,1,1)
|
|
|
|
sequence page = repeat(0,3)
|
|
for i = 1 to 3 do
|
|
page[i] = newPage(i)
|
|
set(stack,"add titled",page[i],
|
|
sprintf("label %d",i),sprintf("Page %d",i))
|
|
end for
|
|
|
|
set(grid,"attach",newOptions(),0,1,1,1)
|
|
|
|
constant speed = create(GtkScale,{
|
|
{"orientation",HORIZONTAL},
|
|
{"range",0,2}, -- min, max
|
|
{"increments",.01,.1}, -- step, page
|
|
{"digits",2},
|
|
{"value",1.00},
|
|
{"tooltip markup","Transition Speed"},
|
|
{"connect","value-changed","SetTransitionSpeed"}})
|
|
set(grid,"attach",speed,0,3,1,1)
|
|
|
|
constant lbl2 = create(GtkLabel,{
|
|
{"markup","Transition speed (seconds)"},
|
|
{"font","8"}})
|
|
set(grid,"attach",lbl2,0,4,1,1)
|
|
|
|
show_all(window)
|
|
|
|
main()
|
|
|
|
-------------------------------
|
|
function newPage(integer page) -- build page content;
|
|
-------------------------------
|
|
atom box = create(GtkBox,VERTICAL)
|
|
atom lbl = create(GtkLabel,sprintf("Page %d",page))
|
|
atom frm = create(GtkFrame,sprintf("Page %d",page))
|
|
set(lbl,"font","Purisa, Georgia bold 36")
|
|
add(frm,box)
|
|
add(box,{img[page],lbl})
|
|
return frm
|
|
end function
|
|
|
|
---------------------
|
|
function newOptions() -- build option buttons;
|
|
---------------------
|
|
atom frame = create(GtkFrame,"Transition Types")
|
|
atom grid = create(GtkGrid)
|
|
add(frame,grid)
|
|
|
|
atom x = 0
|
|
object btns = repeat(0,20)
|
|
for i = 1 to length(captions) do
|
|
x = create(GtkRadioButton,x,captions[i],"setTransition",i-1)
|
|
if i = 2 then set(x,"active",TRUE) end if
|
|
if i <= length(icons) then
|
|
set(x,"image",create(GtkImage,icons[i],GTK_ICON_SIZE_SMALL_TOOLBAR))
|
|
end if
|
|
if i <= length(tips) then set(x,"tooltip markup",tips[i]) end if
|
|
set(x,"font","8")
|
|
btns[i] = x
|
|
end for
|
|
|
|
btns = breakup(btns,4)
|
|
for i = 1 to 4 do
|
|
for j = 1 to 4 do
|
|
if btns[i][j] > 0 then
|
|
set(grid,"attach",btns[i][j],j,i,1,1)
|
|
end if
|
|
end for
|
|
end for
|
|
|
|
return frame
|
|
end function
|
|
|
|
--------------------------------------------------
|
|
global function setTransition(atom ctl, integer x)
|
|
--------------------------------------------------
|
|
set(stack,"transition type",x)
|
|
return 1
|
|
end function
|
|
|
|
--------------------------------------------------
|
|
global function SetTransitionSpeed(atom ctl)
|
|
--------------------------------------------------
|
|
set(stack,"transition duration",get(ctl,"value")*1000)
|
|
return 1
|
|
end function
|
|
|
|
|