In computer science and visualization, a canvas is a container that holds various drawing elements (lines, shapes, text, frames containing other elements, etc.). It takes its name from the canvas used in visual arts. It is sometimes called a scene graph because it arranges the logical representation of a user interface or graphical scene. Some implementations also define the spatial representation and allow the user to interact with the elements via a graphical user interface.
See this article for an overview (2010-08-15) of a small handful of canvas implementations.
Example free and open-source scene-graph canvas options include:
- In C, Evas from the Enlightenment project.
- In C, Clutter associated with the GNOME project.
- In C, GTK+ Scene Graph Kit (GSK)
- In C, Pigment (software)
- In C++ or optionally their own markup QML, Qt Quick, provides a scenegraph associated with the Qt project.
- In C++, OpenSceneGraph, a 3D graphics API using OpenGL.
- In C++, the OGRE scene graph based engine supports multiple scene managers.
- In C++, OpenSG, a scene graph system for real-time graphics, with clustering support and multi-thread safety.
- In C++, the FlightGear Flight Simulator (hardware-accelerated using OpenSceneGraph/OpenGL and ShivaVG) canvas system
There are canvas modules within various libraries which do not provide the power of a full scene-graph. That is, they operate at a lower level which requires the programmer to provide code such as mapping mouse-clicks to objects in the canvas. Examples libraries which include such a canvas module include:
- In C++, KDE Plasma Workspaces Corona canvas
- The Canvas element in HTML5
- For Java, the AWT library Canvas
- For Java, the Swing library Canvas
- For Java, the SWT library Canvas, associated with Eclipse
- For TCL/TK, the canvas widget
- For Python, the Tkinter library canvas
- In C++, the papyrus Canvas library which renders using the cairo graphics library
- In C, crcanvas, a GTK+ canvas widget which renders using the cairo graphics library
- In C, GooCanvas, a GTK+ canvas widget which renders using the cairo library
There are proprietary canvas libraries as well, for example: