From eLinux.org
Revision as of 22:45, 27 October 2011 by Cschalle (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Evas is an object-oriented 2D canvas that uses retained renderer mode. It's part of Enlightenment Foundation Libraries. It's written in C but bindings for Python and Ruby exists.

Evas main goals are to be easy to use and optimized. The latter is one of its strongest points: it's very light on memory, blit functions are optimized in C and MMX, SSE or Altivec where possible. It can use rendering threads, splitting independent work among threads, reaching about sqrt(N-cores) improvements. Since it can know what changed from one frame to another, it can do employ dirty-rectangle optimizations to avoid repainting unchanged areas and will also merge dirty rectangles to avoid painting the same area twice (NP problem, solved with a good heuristic). There are also engines that use hardware acceleration, like OpenGL, DirectFB and XRender/X11. Evas ships with native 16bpp engines targeted at embedded systems.


  • API (Doxygen)
  • Evas is base of Edje, so its documentations can serve as guide as well.


  • Optimized for raster and bitmaps
  • Basic Primitives:
    • Rectangles, Lines and Polygons
    • Gradients: includes different modes like linear, radial and more, with different configurations, stop points and even semi-transparent colors.
    • Images: includes different scaling methods, like nearest or smooth super and super-sampled. It can do image tiling and handles border properties so scale will scale them properly. Can load images from PNG, JPEG, TIFF, PPM, SVG and more.
    • Text: include effects as shadow (hard and soft), outline and glow. Can use fontconfig for font discovery, uses freetype rendering by default. Supports UTF-8.
    • Text Block: handles wrapping and tags to change properties. Supports edit and password mode.
  • Advanced Primivies:
    • Smart Objects: objects without visual, they are used to hold other objects (like groups) and its methods are user-defined, so on resize you can rearrange its children, for example.
    • Box: smart object that can layout a sequence of children in some way. It's extensible, but by default lots of layouts are provided like vertical, horizontal, stack, flow.
    • Table: smart object that layout children in a table, supports row and column spanning.
  • Operations include stacking, rectangular clipping, moving and resizing.
  • It's not tied to any main loop, you must call its render routines and feed events. Ecore_Evas is a helper to ease that process with Ecore main loop and its engines (X11, Xcb, DirectFB...)


Working engines:

  • 32 bits per pixel native engines (can downscale to 1bpp, with optional dithering):
    • Software Buffer
    • Software X11 and XCB
    • XRender X11 and XCB
    • OpenGL X11
    • Software Linux Framebuffer
    • DirectFB
    • Software SDL
    • Software Win32 GDI
    • Software WindowsCE
    • Software DirectDraw (Windows)
    • Direct3d (Windows)
    • Quartz (MacOS X)
  • 16 bits per pixel:
    • Software 16-X11
    • Software 16-DirectDraw
    • Software 16-WindowsCE
    • Software 16-SDL

Some engines are deprecated, broken or need some work, they include Cairo, GLEW, Qtopia and possible more.