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

90 lines
2.3 KiB
C#

using System;
public class LifeWindow : Efl.Csharp.Application
{
private LifeBoard lifeBoard;
private LifeRender lifeRender;
private Efl.Ui.Win win;
void ResizeEvt(object sender, EventArgs ev)
{
lifeRender.RenderLayout((Efl.Ui.Win)sender);
}
void QuitEvt(object sender, Efl.Gfx.IEntityVisibilityChangedEvt_Args ev)
{
// quit the mainloop
if (ev.arg == false)
Efl.App.AppMain.Quit(0);
}
void TouchEvt(object sender, Efl.Input.IInterfacePointerDownEvt_Args ev)
{
int cellx, celly;
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.IInterfaceKeyDownEvt_Args ev)
{
if (ev.arg.GetKey() == "space")
lifeBoard.TogglePause(win);
}
protected override void OnInitialize(Eina.Array<System.String> args)
{
win = new Efl.Ui.Win(parent: null, winName: "Life", winType: Efl.Ui.WinType.Basic);
win.SetText("EFL Life");
win.SetAutohide(true);
// when the user clicks "close" on a window there is a request to hide
((Efl.Gfx.IEntity)win).VisibilityChangedEvt += 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);
((Efl.Gfx.IEntity)win).SizeChangedEvt += ResizeEvt;
((Efl.Input.IInterface)win).PointerDownEvt += TouchEvt;
((Efl.Input.IInterface)win).KeyDownEvt += KeyDownEvt;
win.SetSize(sz);
lifeBoard.Run(win);
}
protected override void OnPause() {
if (win != null) {
lifeBoard.TogglePause(win);
}
}
protected override void OnResume() {
if (win != null) {
lifeBoard.TogglePause(win);
}
}
protected override void OnTerminate() {
Console.WriteLine("Goodbye.");
}
}
public class Example
{
public static void Main()
{
var lifeWin = new LifeWindow();
lifeWin.Launch();
}
}