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.
Various free and open-source canvas or scene-graph libraries allow developers to construct a user interface and/or user-interface elements for their computer programs.
Examples of free and open-source scene-graph canvas options include:
in C, Evas from the Enlightenment projectin C, Clutter, associated with the GNOME projectin C, GTK+ Scene Graph Kit (GSK)in C, Pigmentin C++ or optionally in Qt's own markup language QML: Qt Quick, provides a scenegraph associated with the Qt projectin C++, OpenSceneGraph, a 3D graphics API using OpenGLin C++, the OGRE engine, based on a scene graph, supports multiple scene managersin C++, OpenSG, a scene-graph system for real-time graphics, with clustering support and multi-thread safetyin C++, the FlightGear Flight Simulator uses a custom Canvas system (LGPL'ed via SimGear) that is hardware-accelerated using OpenSceneGraph/OpenGL, OpenVG/ShivaVG: The FlightGear Canvas systemin Java, the Java FX scene graph with 2D and 3D functionalityin Tcl and other languages such as Perl, Python (Tkinter), and Ruby, the Tk toolkit provides a canvas
widget for 2D graphics in Tcl and other languages such as Perl and Python, TkZinc is an extended replacement for the Tk canvas, which adds support for hierarchical grouping, clipping, affine transformations, anti-aliasing, and specific items for air traffic control.Some canvas modules within various libraries do not provide the power of a full scene-graph - they operate at a lower level which requires programmers to provide code such as mapping mouse-clicks to objects in the canvas. Examples of libraries which include such a canvas module include:
in C++, KDE Plasma Workspaces Corona canvasthe Canvas element in HTML5for Java, the AWT library Canvasfor Java, the Java FX library Canvasfor Java, the Swing library Canvasfor Java, the SWT library Canvas, associated with Eclipsefor Java-like JavaScript, the GWT library Canvasin C++, the papyrus Canvas library which renders using the Cairo (graphics) libraryin C, crcanvas, a GTK+ canvas widget which renders using the Cairo (graphics) libraryin C, GooCanvas, a GTK+ canvas widget which renders using the Cairo (graphics) libraryProprietary canvas libraries include, for example:
the Microsoft Windows Win32 Canvas