W Desktop Environment

Welcome to WDE

What is W Desktop Environment...?

W Desktop Environment was first a GUI toolkit for X Window System and small configurable window manager that was used this toolkit. But now WDE is set of libraries for creating GUI applications under X Window System with total abstraction and very powerful canvas output. Widget's are not painted by X function calls, but rather widget contents are rendered internally and result is sended into X server. WDE can use shared memory to decrease latency between repaints. Rendering speed is also increased with canvas modules that's optimized for various CPU features like MMX, SSE and SSE2. In case that CPU supports one of these technologies, it's used. The WDE toolkit library is named WPP (W plus plus) and it's coded in C++ language.

What is WPP...?

WPP is library for creating GUI applications under X Window System. It's coded in C++ language. WPP using modern inheritance methods for widget inheriting and implicit sharing with reference counts. API is very powerful and fast. I thing that's one of fastest C++ libraries for creating GUI applications under X.

WPP has three main groups:

  • Core - It's multiplatform non graphics core. This group is layer between WPP application and system and provides these features:
    • Platform and operating system specific features (Endiannes, CPU detection, Memory routines)
    • Objects and object properties with easy to use macros in sources. Properties can be loaded or saved into XML.
    • Strings with 32 bit unicode characters. Built-in codecs for 8 bit encodings, text codec interfaces and stream text readers that's remembering unencoded last sequentions to totally disable data loss between buffers.
    • Localization and different locales support, encoding numbers into strings and back with specific locale and more...
    • Dynamic error handling, abstract errors can handle operating system specific error and dysplay it with user or English language. WPP has also own error classes.
    • File system abstraction with directory browsing, file testing and operating system specific features like ftw() and streams
    • Implemented many usable algorithms and tools like hash tables, linked lists, quarks, arrays
    • Thread support
    • Internal memory leak debugger (used only if configured at compile time)
    • Low level garbage collecotr and memory allocation optimizer

  • Canvas - Drawing primitives abstraction with own API that provides these features
    • Painters are dynamic loadable modules optimized for specific depth, pixel format and CPU features.
    • Text rendering is also as module and engines can be added dynamically.
    • Painters can draw to specific region in surface.
    • Painters can render graphic primitives and fill these privitives with user specified background. Background objects are abstracted and can programmer can create his own background filler.
    • Blit functions are specialized for depth and pixel format (but not all types!!!)
    • Because canvas engine is based on dynamic modules, linking with other graphics libraries are not needed

  • Gui - Widget abstraction with dynamic properties that enables to use rapid application development form of developing WPP applications. WPP Gui has these features:
    • Widgets are coded using modern but single inheritance model, each widget is from WWidget object and each witget can define his own properties that's can be changed without known real type of widget.
    • X Window System calls are hidden and it's possible to port WPP to any windoing system, because rendering is doing an real windowing system.
    • Total revolution with regional widgets, widget can define own visible region, this is very usable on rounded widgets and background repainting. If your widget uses region, only this region will be repainted and extra tasks for update backgrounds and other places are NOT needed.
    • Theme support, theme can receive widget events and has small own data space for realizing powerful eye-candy processes.

Main idea is to create a powerful API with dependencies only to operating system components that users always have. Dependency in linux is very minimal, depending to C library, threads API and some graphical libraries to disable code multiplication. WPP is coded without usage of STL, RTTI and Exceptions. WPP addons and extensions CAN'T use these features too. WPP has own mechanism to check object type at runtime, to change properties of object. Exceptions was disabled, because exception handling generates larger code that we needs and checking for errors is not expensive. In WPP API are classes that enables continuous searching in nodes without checking each node and much more.


WPP is my bachelors work and it's distributed completely under the terms of BSD licence. I like contributions more that another projects based on WPP, if you need feature that WPP hasn't or you want help me redesign some sub-structure of WPP, mail me.


WDE requires only few libraries to be installed in your system. If you are running linux with another graphical user interface, you probabbly also has these libraries. If you was installed linux from binaries, make sure that you have also installed development packages.

  • libpthread (should be part of your linux distribution) - for thread support (Core)
  • libjpeg - for jpeg plugin (In future will be optional) (Canvas)
  • freetype2 - for antialiased fonts (Canvas)
  • X11 - for X Window Server support (Gui)

Help wanted!

Need developers to help with WPP library. If you are interested and you can help or you has questions or suggestions about it, please send mail to kobalicek.petr@gmail.com. I'm not looking only for developers, I need graphics, web designers and testers that will try to exploit WPP.


© 2005 - 2006, W Desktop Environment team