[LAMW] Draw Rectangle using jCanvasES2 lazarus / 43-Android ---------------------------------------------------------------------- Handoko · 2019-03-18 17:18 Someone asked me how to draw rectangle using jCanvasES2. Instead to answer him privately, I share it here so more users can learn it. Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i {Hint: save all files to location: /home/handoko/Desktop/GLES_Rectangle/LamwGUIProject1/jni }unit unit1; {$mode delphi} interface uses  Classes, SysUtils, AndroidWidget, Laz_And_Controls, seekbar,  Laz_And_GLESv2_Canvas;  type   { TAndroidModule1 }   TAndroidModule1 = class(jForm)    jCanvasES2_1: jCanvasES2;    jSeekBar1: jSeekBar;    jTextView1: jTextView;    procedure AndroidModule1JNIPrompt(Sender: TObject);    procedure jCanvasES2_1GLCreate(Sender: TObject);    procedure jCanvasES2_1GLDraw(Sender: TObject);    procedure jSeekBar1ProgressChanged(Sender: TObject; progress: integer;      fromUser: boolean);  private    {private declarations}  public    {public declarations}  end; var  AndroidModule1: TAndroidModule1; implementation  {$R *.lfm}   { TAndroidModule1 } procedure TAndroidModule1.AndroidModule1JNIPrompt(Sender: TObject);begin  jCanvasES2_1.Screen_Setup(jCanvasES2_1.Width, jCanvasES2_1.Height, xp2D);  jCanvasES2_1.Refresh;end; procedure TAndroidModule1.jCanvasES2_1GLCreate(Sender: TObject);begin  jCanvasES2_1.Shader_Compile('simon_Vert', 'simon_Frag');  jCanvasES2_1.Shader_Link;end; procedure TAndroidModule1.jCanvasES2_1GLDraw(Sender: TObject);var  XYs  : TXYs;  Size : Single;begin   jCanvasES2_1.MVP:= cID4x4;  jCanvasES2_1.SetMVP(jCanvasES2_1.MVP);   // Clear screen  XYs.Cnt   := 4;  XYs.Pt[0] := _XY(-1, -1);  XYs.Pt[1] := _XY(-1,  1);  XYs.Pt[2] := _XY( 1,  1);  XYs.Pt[3] := _XY( 1, -1);  jCanvasES2_1.DrawPolyFill(XYs, 0, _RGBA(0, 0, 0, 1), _RGBA(0, 0, 0, 1), 0);   // Draw the rectangle  Size := jSeekBar1.Progress/100;  XYs.Pt[0] := _XY(-Size, -Size);  XYs.Pt[1] := _XY(-Size,  Size);  XYs.Pt[2] := _XY( Size,  Size);  XYs.Pt[3] := _XY( Size, -Size);  jCanvasES2_1.DrawPolyFill(XYs, 0, _RGBA(0.5, 1, 0.8, 1), _RGBA(0, 0, 0, 1), 0); end; procedure TAndroidModule1.jSeekBar1ProgressChanged(Sender: TObject;  progress: integer; fromUser: boolean);begin  jCanvasES2_1.Refresh;end; end. jCanvasES2.DrawRect is buggy. The better alternative: DrawPoly or DrawPolyFill.jCanvasES2 is buggy too. I know the secret to make it crash in less than 10 second.  How to make jCanvasES2 crash?Draw some visible object on jCanvasES2. (jCanvasES2 won't crash if there is no any visible object on it)Use your fingers (preferable 8 fingers) to tap the jCanvasES2 very quicky repeatedly. I said very quickly.It will be sure to crash, usually in less than 10 seconds (depends on how quick you tapping it).Tested on Android 7.1.2 ARM device, binary compiled using Lazarus 1.8.4 64-bit Linux LAMW rev 754. ---------------------------------------------------------------------- Handoko · 2019-03-18 17:20 This is the apk: ---------------------------------------------------------------------- karika · 2019-03-21 19:41 Thank you so much I have benefited a lot from this ---------------------------------------------------------------------- karika · 2019-03-21 19:46 I tried to draw a circle but the application did not work Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i {Hint: save all files to location: C:\Users\hamada\Desktop\New folder (5)\AppLAMWProject10\jni }unit unit1; {$mode delphi} interface uses  Classes, SysUtils, AndroidWidget, Laz_And_Controls, seekbar,  Laz_And_GLESv2_Canvas;  type   { TAndroidModule1 }   TAndroidModule1 = class(jForm)    jCanvasES2_1: jCanvasES2;    jSeekBar1: jSeekBar;    jTextView1: jTextView;    procedure AndroidModule1JNIPrompt(Sender: TObject);    procedure jCanvasES2_1GLCreate(Sender: TObject);    procedure jCanvasES2_1GLDraw(Sender: TObject);    procedure jSeekBar1ProgressChanged(Sender: TObject; progress: integer;      fromUser: boolean);  private    {private declarations}  public    {public declarations}  end; var  AndroidModule1: TAndroidModule1; implementation  {$R *.lfm}   { TAndroidModule1 } procedure TAndroidModule1.jCanvasES2_1GLDraw(Sender: TObject);var  XY:TXY; begin  jCanvasES2_1.MVP:= cID4x4; jCanvasES2_1.SetMVP(jCanvasES2_1.MVP);  // Draw the Circle  XY.X:=4;xy.Y:=4;  jCanvasES2_1.DrawCircle(XY,0,0,_RGBA(0, 0, 0, 1),0.3);  end; procedure TAndroidModule1.jSeekBar1ProgressChanged(Sender: TObject;  progress: integer; fromUser: boolean);begin end; procedure TAndroidModule1.AndroidModule1JNIPrompt(Sender: TObject);begin    jCanvasES2_1.Screen_Setup(jCanvasES2_1.Width, jCanvasES2_1.Height, xp2D);  jCanvasES2_1.Refresh;end; procedure TAndroidModule1.jCanvasES2_1GLCreate(Sender: TObject);begin    jCanvasES2_1.Shader_Compile('simon_Vert', 'simon_Frag');  jCanvasES2_1.Shader_Link;end; end. ---------------------------------------------------------------------- Handoko · 2019-03-21 20:15 I'm preparing to visit a nearby town for several days so I can't write the demo for you soon. Please wait patiently. Or maybe someone can write an example of drawing a circle using jCanvasES2. ---------------------------------------------------------------------- karika · 2019-03-21 20:35 ok I wish you success ---------------------------------------------------------------------- Handoko · 2019-03-26 11:23 I posted the answer here: https://forum.lazarus.freepascal.org/index.php/topic,44811