1 module widgets.canvas; 2 3 import dlangui; 4 5 static if(BACKEND_GUI) 6 { 7 class CanvasExample : CanvasWidget 8 { 9 this(string ID) 10 { 11 super(ID); 12 layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT); 13 onDrawListener = delegate(CanvasWidget canvas, DrawBuf buf, Rect rc) { 14 buf.fill(0xFFFFFF); 15 int x = rc.left; 16 int y = rc.top; 17 buf.fillRect(Rect(x+20, y+20, x+150, y+200), 0x80FF80); 18 buf.fillRect(Rect(x+90, y+80, x+250, y+250), 0x80FF80FF); 19 canvas.font.drawText(buf, x + 40, y + 50, "fillRect()"d, 0xC080C0); 20 buf.drawFrame(Rect(x + 400, y + 30, x + 550, y + 150), 0x204060, Rect(2,3,4,5), 0x80704020); 21 canvas.font.drawText(buf, x + 400, y + 5, "drawFrame()"d, 0x208020); 22 canvas.font.drawText(buf, x + 300, y + 100, "drawPixel()"d, 0x000080); 23 for (int i = 0; i < 80; i++) 24 buf.drawPixel(x+300 + i * 4, y+140 + i * 3 % 100, 0xFF0000 + i * 2); 25 canvas.font.drawText(buf, x + 300, y + 420, "drawLine()"d, 0x800020); 26 for (int i = 0; i < 40; i+=3) 27 buf.drawLine(Point(x+200 + i * 4, y+290), Point(x+150 + i * 7, y+420 + i * 2), 0x008000 + i * 5); 28 29 // Poly line example 30 PointF[] poly = [vec2(x+130, y+150), vec2(x+240, y+80), vec2(x+170, y+170), vec2(x+380, y+270), vec2(x+220, y+400), vec2(x+130, y+330)]; 31 buf.polyLineF(poly, 18.0f, 0x80804020, true, 0x80FFFF00); 32 canvas.font.drawText(buf, x + 190, y + 260, "polyLineF()"d, 0x603010); 33 PointF[] poly2 = [vec2(x+430, y+250), vec2(x+540, y+180), vec2(x+470, y+270), vec2(x+580, y+300), 34 vec2(x+620, y+400), vec2(x+480, y+350), vec2(x+520, y+450), vec2(x+480, y+430)]; 35 buf.fillPolyF(poly2, 0x80203050); 36 canvas.font.drawText(buf, x + 500, y + 460, "fillPolyF()"d, 0x203050); 37 38 buf.drawEllipseF(x+300, y+600, 200, 150, 3, 0x80008000, 0x804040FF); 39 canvas.font.drawText(buf, x + 300, y + 600, "fillEllipseF()"d, 0x208050); 40 41 buf.drawEllipseArcF(x+540, y+600, 150, 180, 45, 130, 3, 0x40008000, 0x804040FF); 42 canvas.font.drawText(buf, x + 540, y + 580, "drawEllipseArcF()"d, 0x208050); 43 }; 44 } 45 } 46 } 47 else 48 { 49 class CanvasWidget : LinearLayout 50 { 51 this(string ID) 52 { 53 super(ID); 54 addChild(new TextWidget(null, "Canvas in text mode is not supported"d)); 55 } 56 } 57 }