I'm debating with myself over the issue of skinning in a FE application/system. It seems like a lot more work for developers that doesn't really add up to usefulness to users. It can also add bugs to the system which both devs and users will tend to dislike. So I've thought about some alternatives to skinning that may satisfy users who want to change the look/feel:
Themes:
Each widget like buttons, backgrounds, etc have default images associated with them. Users can create a theme that will use different images for those buttons.
Pros
- Developers can quickly create plugins without having to worry about making it skinable
- Users can still make it look unique if they want.
- Theme's are much easier to create than skins
Cons
- User's can't change the layout of the plugin
- User's can't change the functionality of the plugin
Positional Skinning
This skinning method allows users to change images of widgets and their positions on the screen. It does not allow the user to change widgets functionality.
Pros
- Deeper visual customization than theming
- Developers can still control the layout of the plugin/screen
- Developers can directly, in code, define the functionality of widgets, possibly making the UI act/feel more responsive.
Cons
- Development of plugins may be slightly slower because the coder will have to create default skins for his plugin rather then just pumping out code.
Full Skinning
Users/Developers define everything in the skin. Images, positions, fuctionality, etc. This was the method of skinning in nGhost2 and Carpal. (not sure if other FE's also use this method)
Pros
- Ultimate customization abilities: Users can change the way the plugin acts
Cons
- A lot more development time is spent with building and debugging skins
- Possibly slower functionality. The skinning engine has to parse and map every command from the UI (skin file usually).
In short, by using theming only, you can increase speed of the application, speed of development and stability. The farther you get away from theming towards full skinning, the more complexities you introduce and the bugs, etc that come with the extra complexity layer.
NOTE: that many of these cons depend on the implementation of the skinning engine and the limitations of the language you are using. For example, if you were using C#, you could using reflection easily map skin commands to in-code widgets. In C++, this is more difficult because there is no concept of introspection/reflection in C++ natively.
I would add, most software applications are NOT skinnable whatsoever except through theming. Right now, I'm leaning towards themes only or positional skinning for ng3. I'm hoping that I can get additional community feedback on what is preferred by the masses.
So..... How important is skinning, and if it is important, what level is acceptable (theming, positional skinning, full skinning)?

