examples/apps/csharp/life/src/life_main.cs

81 lines
2.0 KiB
C#

using System;
public class LifeWindow
{
private LifeBoard lifeBoard;
private LifeRender lifeRender;
void ResizeEvt(object sender, EventArgs ev)
{
lifeRender.RenderLayout((efl.ui.IWin)sender);
}
void QuitEvt(object sender, EventArgs ev)
{
// quit the mainloop
efl.ui.Config.Exit();
}
void TouchEvt(object sender, efl.input.Interface.PointerDownEvt_Args ev)
{
int cellx, celly;
efl.ui.IWin win = (efl.ui.IWin)sender;
var position = ev.arg.GetPosition();
lifeRender.CellForCoords(win, position, out cellx, out celly);
int i = LifeBoard.IndexForPosition(cellx, celly);
lifeBoard.Cells[i] = !lifeBoard.Cells[i];
lifeRender.RenderCell(win, cellx, celly);
}
void KeyDownEvt(object sender, efl.input.Interface.KeyDownEvt_Args ev)
{
efl.ui.IWin win = (efl.ui.IWin)sender;
if (ev.arg.GetKey() == "space")
lifeBoard.TogglePause(win);
}
public LifeWindow()
{
efl.ui.IWin win = new efl.ui.Win(null, (efl.ui.IWin ewin) => {
ewin.SetWinType(efl.ui.Win_Type.Basic);
ewin.SetText("EFL Life");
ewin.SetAutohide(true);
});
// when the user clicks "close" on a window there is a request to hide
win.HideEvt += QuitEvt;
eina.Size2D sz;
sz.W = (int)(10 * LifeBoard.Width * win.GetScale());
sz.H = (int)(10 * LifeBoard.Height * win.GetScale());
lifeBoard = new LifeBoard();
lifeRender = new LifeRender(win, lifeBoard);
lifeRender.Refresh(win);
win.ResizeEvt += ResizeEvt;
win.PointerDownEvt += TouchEvt;
win.KeyDownEvt += KeyDownEvt;
win.SetSize(sz);
lifeBoard.Run(win);
}
}
public class Example
{
public static void Main()
{
efl.All.Init(efl.Components.Ui);
var lifeWin = new LifeWindow();
// start the mainloop
efl.ui.Config.Run();
efl.All.Shutdown();
}
}