Suvarna Garge (Editor)

Canvas (GUI)

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit

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.

Library support

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 project
  • in C, Clutter, associated with the GNOME project
  • in C, GTK+ Scene Graph Kit (GSK)
  • in C, Pigment
  • in C++ or optionally in Qt's own markup language QML: Qt Quick, provides a scenegraph associated with the Qt project
  • in C++, OpenSceneGraph, a 3D graphics API using OpenGL
  • in C++, the OGRE engine, based on a scene graph, 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 uses a custom Canvas system (LGPL'ed via SimGear) that is hardware-accelerated using OpenSceneGraph/OpenGL, OpenVG/ShivaVG: The FlightGear Canvas system
  • in Java, the Java FX scene graph with 2D and 3D functionality
  • in 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 canvas
  • the Canvas element in HTML5
  • for Java, the AWT library Canvas
  • for Java, the Java FX library Canvas
  • for Java, the Swing library Canvas
  • for Java, the SWT library Canvas, associated with Eclipse
  • for Java-like JavaScript, the GWT 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 (graphics) library
  • Proprietary canvas libraries include, for example:

  • the Microsoft Windows Win32 Canvas
  • References

    Canvas (GUI) Wikipedia