What is EGT?

The Ensemble Graphics Toolkit (EGT) is a C++ GUI Linux toolkit for Microchip AT91/SAMA5 processors. EGT provides modern GUI functionality, look-and-feel, and maximizes performance while staying as close to the metal as possible in embedded Linux applications. EGT provides a consistent API and solution for working across all Microchip AT91/SAMA5 processors in order to build robust GUI based applications that make the best use of the hardware available.

See also
For more information about Microchip MPU Xplained or EK type boards, visit Linux4SAM.

EGT uses and provides a standard API to many different third party and system libraries and resources. Here are some of them:


What is a Graphics Toolkit?

A graphics toolkit (also known as a Graphical User Interface (GUI) framework) is used to construct graphical user interfaces of applications. It provides a well defined API and an organization of features, properties, and methods that makes creating user interfaces easier and more consistent. This can mean creating an API to the operating system or various system libraries. In addition, a toolkit may provide various tools that make creating graphical applications easier for both programmers and graphic artists.

In order to accomplish this, EGT contains several different layers of software, with the application code expected to be sitting on top.

High level


A software architecture involving EGT usually involves using EGT as the middle layer between the application code and everything else. EGT provides an abstraction layer to everything below it to an application programmer.


In order to provide this abstraction, EGT provides a list of objects, or C++ classes, some of which are specialized into a type called Widget. The Controls are your standard interface components. Sizing and Positioning widgets help with layout and position of other widgets. There are some basic Shapes widgets for drawing plain shapes. And of course, the Images and Video widgets handle playing audio and video related media.

And then, there are some framework and application level classes like Application, EventLoop, Input, Screen, Timers, and Event that help everything work together.

EGT Features

This is a list of high level features generally supported and provided by EGT:

  • Anti-aliased 2D vector graphics.
  • Modern C++11 design and simplicity.
  • Optimized for Microchip microprocessors running Linux.
  • DRM/KMS, X11, and fbdev backends.
  • libinput, tslib, and evdev input support for mouse, keyboard, and touchscreen.
  • UTF-8 encoding with internationalization and localization support.
  • Support for libplanes and hardware LCD overlay planes.
  • Built in and simple animation support for creating custom effects.
  • A rich and extensible default widget set designed for embedded touchscreens.
  • Multimedia support for video playback, raster images, and vector graphics.
  • Customizable look and feel with theme-able widget drawing, colors, and fonts.

C++ Language and Namespaces

EGT takes advantage of and focuses on using features available in the C++11 language standard. The EGT API is all inside of an egt namespace. This namespace contains an inline namespace egt::v1 which is used for versioning the API in the future.

Within the egt namespace, there are several other namespaces that have different purposes and meaning.

Namespace Meaning
egt Default namespace.
egt::v1 Inline namespace denoting the API version.
egt::v1::detail A namespace usually used to hide internal EGT functionality. This is not considered stable or public.
egt::v1::experimental A namespace for what is considered unstable and experimental.
Did you know the C++ Standard Draft Sources are available on GitHub?