Projects / papyrus Canvas Library

papyrus Canvas Library

Papyrus is a 2D C++ scenegraph (canvas) library that utilizes the cairo library to perform drawing operations. Similar canvas libraries are the Gnome Canvas, Diacanvas, and the QT Canvas. Numerous canvas primitives are available, including arcs, rectangles, polylines, and line markers. An optional companion library, Papyrusmm, provides a set of Gtkmm widgets which includes viewports (a canvas display widget similar to Gtk::DrawingArea) and other UI widgets related to drawing interfaces.

Operating Systems

Recent releases

  •  27 May 2010 22:49

    Release Notes: This release introduces a new controller named Flasher that derives from Animator. On each animation frame, Flasher will alternate between showing and hiding the associated drawables, causing them to flash at the interval rate of the animator. The addition of the Flasher animator exposed a bug that has been fixed in Drawable's renderer related to the visibility of objects. The show()/hide() methods should now work as expected.

    •  16 Apr 2010 16:51

      Release Notes: This release features both bugfixes and enhancements. A bug causing segfaults in Drawable's destructor that removed a child from a parent was fixed. Fixing this bug allowed the base Papyrus::Object to inherit from sigc::trackable again. The Group::clear() method has been cleaned up and improved. This should result in a fairly significant performance improvement if you have many items in a group and regularly clear it. A simple estimate would put the old version at a performance level of 3 * O(n lg(n)) + O(n) and the new version at 4 * O(n).

      •  09 Dec 2009 20:41

        Release Notes: This is primarily a bugfix release. There was an overload resolution bug with the virtual and non-virtual render() methods. Because of scoping rules, the virtual methods were not seen by descendants of Renderable, causing an infinite recursion of the virtual method resulting in a segfault. To remedy this, two new macros have been created: PAPYRUS_RENDERABLE() and PAPYRUS_DRAWABLE(). These macros add a using directive to ensure the overload resolution resolves to the virtual render() methods.

        •  17 Nov 2009 23:04

          Release Notes: This release adds support for linear and radial gradients. The paint hierarchy has also been restructured and as a result a new wrapper for cairo contexts has been implemented that includes internal state values. The Paint class is now a top level ancestor for all paints, including the gradients. The former solid colors that were supplied by Paint can now be found in its descendant Color. Other changes include a fix in ScrolledViewport for a display bug and the restructuring of several primitives such as Point, Vertex, and LineSegment.

          •  01 Sep 2009 20:49

            Release Notes: This release modifies the basic demo by adding support for scrolled viewports and zooming on the shapes. New shapes are Deltilles, Hextilles, and Quadrilles.


            Project Spotlight


            A Fluent OpenStack client API for Java.


            Project Spotlight

            TurnKey TWiki Appliance

            A TWiki appliance that is easy to use and lightweight.