chitra ~main

2D graphics library using Cairo and Pango


To use this package, run the following command in your project's root directory:

Manual usage
Put the following dependency into your project's dependences section:

Chitra - 2D graphics library - D programming language

Hello Rectangle


import chitra;

void main()
{
    auto ctx = Chitra(700);
    with (ctx)
    {
        background(255);
        fill(0, 0, 255);
        rect(100, 100, 500, 200);
        saveAs("rect.png");
    }
}

Sponsors

<img src="static/kadalu-technologies-logo.svg" alt="Kadalu Technologies" width="200"/>

Install

Currently the Chitra project uses Cairo Graphics and Pango libraries. Once it gets the GIF and animation video creation capabilities, I will update the new dependencies here.

Ubuntu

sudo apt install libcairo2 libcairo2-dev libpango1.0-dev

Fedora

sudo yum install cairo-devel pango-devel

Mac

brew install cairo pango

Once the dependencies installed, add Chitra to your project by running

dub add chitra

Documentation

Canvas

Create the canvas to suit your requirement.

// Default size 700x700 pixels
auto ctx = new Chitra;
// Create a Square
auto ctx = new Chitra(800);

// Create a custom size in pixels
//                    w     h
auto ctx = new Chitra(1600, 900);

// Create the canvas with the given resolution (Default is 300)
auto ctx = new Chitra(800, resolution: 72);

// Create with the required paper size
auto ctx = new Chitra("a4");
auto ctx = new Chitra("a4", resolution: 72);
auto ctx = new Chitra("a4,landscape");

// By giving specific size in inch, cm, mm
auto ctx = new Chitra(10.inch, 5.inch);

Using the Canvas

Canvas context can be used in two ways

ctx.rect(100, 100, 500, 200);
ctx.saveAs("rect.png");

// OR using the with statement
with (ctx)
{
    rect(100, 100, 500, 200);
    saveAs("rect.png");
}

In this documentation, I will use the second method using with statement.

Properties

Width and Height

Access the width and height of the canvas.

rect(100, 100, width - 200, height - 200);
Background

Fill the background with given color. Color can be provided in RGB, or Gray scale or hex strings. Background will draw a rectangle with canvas width and height.

// Black background. 0 - Black and 255 - White
background(0);
// Black background with 50% opacity
background(0, 0.5);

// Blue Background
background(0, 0, 255);

// Blue background with opacity 0.7
background(0, 0, 255, 0.7);

// Hex String
background("#9694FF");

// Or color names
background("blue");
Fill

Similar to background, specify the color before drawing a shape or the text. For example,

//   color
fill("red");
//   x    y    w    h
rect(100, 100, 500, 200);

To remove filling use noFill

noFill;
rect(100, 100, 500, 200);

Set the Fill opacity with color or set it seperately using fillOpacity

fill(0, 0, 255, 0.7);
// OR
fill(0, 0, 255);
fillOpacity(0.7);
Stroke

Similar to background and fill, specify the stroke color before drawing a shape or the text.

//     color
stroke("red");
noFill;
rect(100, 100, 500, 200);

To disable stroke, use noStroke and change the width of stroke using strokeWidth

// Draw a rectangle with red border, without fill
noFill;
stroke("red");
strokeWidth(2);
rect(100, 100, 500, 100);

// Draw a blue rectangle without the border
noStroke;
fill("blue");
rect(100, 210, 500, 100);

Set the Stroke opacity with color or set it seperately using strokeOpacity

stroke(0, 0, 255, 0.7);
// OR
stroke(0, 0, 255);
strokeOpacity(0.7);

Shapes

Pixel

Draw a single pixel on screen.

//   R  G  B
fill(0, 0, 255);
//    x    y
pixel(100, 100);
Rectangle

Draw a rectangle

//   x    y    w    h
rect(100, 100, 500, 200);
Square

Draw a square using rect or square function

rect(100, 100, 500);
// OR
square(100, 100, 500);

Draw a rounded rectangle.

//   x    y    w    h    Radius
rect(100, 100, 500, 200, r: 10);
// Only Top right border radius
rect(100, 100, 500, 200, rtr: 10);
// Similarly use, rtl, rbl, rbr to customize the respective border radius
Oval

Draw a Oval shape by giving width and height

//   x    y    w    h
oval(100, 100, 500, 200);
Circle

Draw a circle using oval or circle function

oval(100, 100, 500);
// OR
circle(100, 100, 500);
Point

Alias to circle.

// Default 2px point
point(100, 100);
point(100, 100, 10);
Polygon

Give all points in a array or give point pairs in a array to draw a polygon.

//       x1  y1   x2  y2  x3   y3  x4   y4    closePath
polygon([50, 450, 50, 50, 450, 50, 100, 100], true);
//        x1  y1     x2  y2    x3   y3    x4   y4     closePath
polygon([[50, 450], [50, 50], [450, 50], [100, 100]], true);
Line

Draw a line from one point to another point.

//   x1   y1   x2   y2
line(100, 100, 200, 200);
New Page and new drawing

While working with PDF documents, use newPage to create a new page.

fill("red");
rect(100, 100, width - 200, height - 200);
newPage;
fill("blue");
rect(100, 100, width - 200, height - 200);
saveAs("rects.pdf");

To clear the document and start the fresh canvas, use newDrawing

background(0);
saveAs("slide1.png");
newDrawing;
background(0, 0, 255);
saveAs("slide2.png");
Transformations
Rotate

Rotate the canvas.

//     angle in degrees
rotate(45);
rect(100, 100, 500, 200;

To rotate from the center of the rect,

//     angle  centerX  centerY
rotate(45,    350,     200);
rect(100, 100, 500, 200;
Scale
scale(2);
rect(100, 100, 500, 200);

To scale x and y seperately,

scale(2, 1);
rect(100, 100, 500, 200);
Translate

Translate the canvas to given x and y. This will become new origin for all the drawings.

translate(100, 100);
rect(0, 0, 500, 200);

This will be very useful to draw the complex shapes. Create the complex shape as a function and then call the function multiple times with different translate values.

Export/Save

PDF, PNG and SVG output formats are supported.

saveAs("rect.png");
saveAs("rect.pdf");
saveAs("rect.svg");

Thanks

Contributing

  • Fork it (https://github.com/aravindavk/chitra-d/fork)
  • Create your feature branch (git checkout -b my-new-feature)
  • Commit your changes (git commit -am 'Add some feature')
  • Push to the branch (git push origin my-new-feature)
  • Create a new Pull Request

Contributors

Authors:
Dependencies:
colors
Versions:
0.1.1 2024-Dec-04
0.1.0 2024-Dec-01
~main 2024-Dec-04
Show all 3 versions
Download Stats:
  • 0 downloads today

  • 1 downloads this week

  • 5 downloads this month

  • 5 downloads total

Score:
0.6
Short URL:
chitra.dub.pm