using SpaceFlint.Demos; namespace com.spaceflint.bluebonnet.csharp { public class MainActivity : android.app.Activity { protected override void onCreate(android.os.Bundle savedInstanceState) { base.onCreate(savedInstanceState); getWindow().setFlags(android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN, android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(android.view.Window.FEATURE_NO_TITLE); var canvasView = new CanvasView(this); setContentView(canvasView); canvasView.requestFocus(); Points_CS.Initialize(canvasView); InitTimer(canvasView); } void InitTimer(CanvasView view) { const int TIMER_RATE = 16; java.lang.Runnable runnable = null; runnable = ((java.lang.Runnable.Delegate) (() => { view.invalidate(); view.postDelayed(runnable, TIMER_RATE); })).AsInterface(); view.postDelayed(runnable, TIMER_RATE); } } public class CanvasView : android.view.View, HAL { System.Action frameCallback; android.graphics.Paint paint; android.graphics.Canvas frameCanvas; int frameWidth, frameHeight; public CanvasView(android.content.Context context) : base(context) { paint = new android.graphics.Paint(); paint.setColor(android.graphics.Color.RED); paint.setAntiAlias(true); paint.setStrokeWidth(4); paint.setTextSize(30); } protected override void onDraw(android.graphics.Canvas canvas) { (frameCanvas, frameWidth, frameHeight) = (canvas, canvas.getWidth(), canvas.getHeight()); paint.setColor(0x7FFF0000); drawCenter("Bluebonnet Demo", -4f); drawCenter("Android - C#", 4f); frameCallback(); } void drawCenter(string text, float yMultiply) { var r = new android.graphics.Rect(); frameCanvas.getClipBounds(r); paint.setTextAlign(android.graphics.Paint.Align.LEFT); paint.getTextBounds(text, 0, text.Length, r); float x = frameWidth / 2f - r.width() / 2f - r.left; float y = frameHeight / 2f + (r.height() * yMultiply) / 2f - r.bottom; frameCanvas.drawText(text, x, y, paint); } void HAL.Frame(System.Action callback) => frameCallback = callback; void HAL.Pixel(float x, float y, float r, float g, float b) { var x1 = Clamp(x, frameWidth); var y1 = Clamp(y, frameHeight); int r1 = Clamp(r, 256); int g1 = Clamp(g, 256); int b1 = Clamp(b, 256); paint.setColor((0xFF << 24) | (r1 << 16) | (g1 << 8) | b1); frameCanvas.drawPoint(x1, y1, paint); int Clamp(float a, int b) => System.Math.Min(System.Math.Max((int) (a * b), 0), b - 1); } float HAL.Random() => (float) java.lang.Math.random(); } }