Custom Interface Topic is solved

This forum can be used to talk about general design strategies, new ideas and questions in general related to wxWidgets. If you feel your questions doesn't fit anywhere, put it here.
Post Reply
obduk
Earned a small fee
Earned a small fee
Posts: 11
Joined: Thu May 10, 2007 3:49 pm

Custom Interface

Post by obduk »

Hi, I am new to wxWdigets and wanted to confirm something before I start learning how to use wxWidgest.

I wan to develop a program with a custom GUI with its own scheme, close buttons etc.

1) For example iTunes when appearing on Windows has its own close buttons, etc.

2) Or another example is Windows Live Messenger or such likes, how they have a custom window.

I am not quite sure how to explain it better.

Owen
User avatar
tierra
Site Admin
Site Admin
Posts: 1355
Joined: Sun Aug 29, 2004 7:14 pm
Location: Salt Lake City, Utah, USA
Contact:

Post by tierra »

That would be called "skinning" the application, and this while this is possible with wxWidgets (google wxSkin), it's heavily discouraged, and not officially supported. You might find that other GUI toolkits offer better solutions in this regard.
obduk
Earned a small fee
Earned a small fee
Posts: 11
Joined: Thu May 10, 2007 3:49 pm

Post by obduk »

Thank you for your post.

Have you any idea then what would be the best way to develop that kind of application in C or C++.

Thanks
upCASE
Moderator
Moderator
Posts: 3176
Joined: Mon Aug 30, 2004 6:55 am
Location: Germany, Cologne

Post by upCASE »

Hi!
tierra wrote:That would be called "skinning" the application, and this while this is possible with wxWidgets (google wxSkin), it's heavily discouraged, and not officially supported. You might find that other GUI toolkits offer better solutions in this regard.
wxSkin is located at http://upcase.de/wxSkin.html. It does about what you seem to want, but it's still not perfect. For small applications (typically media players and stuff like that) it should however work. I didn't receive much feedback on this, so if you use it I'd be happy to hear about your project.

Why is skinning "heavily discouraged" by the way?
Many projects do that I didn't see a single note saying "don't do it". My implementation might not be the best, but I wanted to have something that works with current wxWidgets versions. There has been an ongoing discussion about skinning, owner drawn controls, renderers and stuff like that on the mailing lists for ages. The way I see it there is some need for that, but apparently the discussion heads nowhere.
True wxSkin is not officially supported as it isn't part of the library (just like many other useful addons are). The only dev-feedback I got was a bit negative as well, but I still decided to release it. Once in a while a question like this pops up.

I don't want to restart this discussion, but I'd really like to know why it is "heavily discouraged" and by whom...
OS: OpenSuSE, Ubuntu, Win XP Pro
wx: svn
Compiler: gcc 4.5.1, VC 2008, eVC 4

"If it was hard to write it should be hard to read..." - the unknown coder
"Try not! Do. Or do not. There is no try." - Yoda
User avatar
tierra
Site Admin
Site Admin
Posts: 1355
Joined: Sun Aug 29, 2004 7:14 pm
Location: Salt Lake City, Utah, USA
Contact:

Post by tierra »

upCASE wrote:Why is skinning "heavily discouraged" by the way?
Well, the first reason you've likely heard it much more from the wxWidgets devs and community than anywhere else is because one of the most fundamental goals of the wxWidgets project is to provide a native graphical user interface (while still allowing for cross-platform development), and skinning detracts from this goal.

Expanding upon why this is one of the goals of wxWidgets...

There are many developers who need more intuitive user interfaces, and the best way to achieve this is if the application looks, feels, and behaves like the rest of the applications on the platform that the user is most familiar with. Another reason is because many developers (and probably a lot of the same developers) need the native platform's accessibility features to work with their application. This means the application needs to take on larger fonts and high contrast colors if the user has those options enabled on that platform. Also, many platform speech functions (yes, blind or partially blind people do use computers) only work with the native platform's controls. They can't know if your custom drawn windows should be read a certain way, or how to get the text to read from them.

Pulling away from usability and accessibility reasons, if the user in question is using something like WindowsBlinds or other system theming software, they will want all their applications to take on that look and feel. There's also always the chance that they aren't going to want to settle for the best application skin available to them if they don't like any of them, but if you stay true to the platform the application is running on, most users are running that system because they like it, and they like the way it looks and works. You're not likely going to lose with a native approach.

Anyway, respecting accessibility options is reason enough to discourage this kind of myth that skinning your application is the "cool" thing to do, because users who need those options take this like a slap to the face. This is definitely something business applications don't have a choice on.
upCASE
Moderator
Moderator
Posts: 3176
Joined: Mon Aug 30, 2004 6:55 am
Location: Germany, Cologne

Post by upCASE »

tierra wrote:Well, the first reason you've likely heard it much more from the wxWidgets devs and community than anywhere else is because one of the most fundamental goals of the wxWidgets project is to provide a native graphical user interface (while still allowing for cross-platform development), and skinning detracts from this goal.
Ok, I get your point. Having native interfaces and being able to compile on all platforms is the major reason why I use wxWidgets.

Although you're correct that this is the major goal of wxWidgets, I guess it is also true that a second goal is to give developers the ability to work x-platform while using a feature-rich (read: more than just GUI) library. There are many addons that have absolutely nothing to do with native interfaces, but still are used widely. And there are addon classes that give an x-platform "feeling" of nativeness. For example buttons with bitmap and text or an optional dropdown menu. For a user these elements may seem "native", while they are not. Still we want to use them on all platforms.

Given the fact that this is an ongoing discussion, there seems to be some interest in the community to have these features, or at least a better way to implement them. Simply saying " this detracts from our goal" is IMHO not a good way to solve this. After all wxWidgets would be nothing if nobody used it.
tierra wrote:Anyway, respecting accessibility options is reason enough to discourage this kind of myth that skinning your application is the "cool" thing to do, because users who need those options take this like a slap to the face. This is definitely something business applications don't have a choice on.
Yes and no.
Correct, a business application shouldn't do that. But that's due to the fact that most applications in this field need a GUI that's not "cool" but effective.
Accessibility surely is a thing to keep in mind and I didn't intend to offend people in any way by creating wxSkin. But I also made clear that I think skinning is/would be used for "fancy" applications like media players. I hardly know any other applications beside media players that do it. And, forgive me, if I wrote a video player, would I really think about somebody who's blind to use it??

My belief is that wxWidgets has become inflexible in some areas (in contrast to wxPython I've been told). I suppose this is one of the reasons one of the most well known wxWidgets applications, namely VLC, will skip to Qt in the next versions.

Anyway, writing wxSkin kind of frustrated me, as you may have figured out. I didn't expect anyone to integrate it into wxWidgets, but just "let it live". Instead all I got was critique on "how" I implemented it and to some extend the fact "that" I implemented it. I even had to argue about where and how to announce it.

Still, I think I achieved my goal: Have a way to skin applications using a file format that can be used on all platforms and have wxSkin working on all platforms. Telling whether it is useful or useless for *your* application is up to *you*. I think there are some people who might want to use it and if they want to I highly encourage them to do so.

PS: Just because I have the feeling that I may start a flame war with posting this, I do want to repeat again ->
I do not want to offend anybody. This is only my personal view.
OS: OpenSuSE, Ubuntu, Win XP Pro
wx: svn
Compiler: gcc 4.5.1, VC 2008, eVC 4

"If it was hard to write it should be hard to read..." - the unknown coder
"Try not! Do. Or do not. There is no try." - Yoda
Alan-Shouls
Knows some wx things
Knows some wx things
Posts: 33
Joined: Mon Aug 07, 2006 3:26 pm

Post by Alan-Shouls »

For me one of the interesting things is what is happened on OSX. The applications shipped by Apple are almost entirely skinned and what is a native OSX interface has changed entirely. Check out also what an app like iTunes looks like on windows as well as the Mac - not that much is not skinned there.

Best regards

Alan Shouls
User avatar
tierra
Site Admin
Site Admin
Posts: 1355
Joined: Sun Aug 29, 2004 7:14 pm
Location: Salt Lake City, Utah, USA
Contact:

Post by tierra »

upCASE wrote:And, forgive me, if I wrote a video player, would I really think about somebody who's blind to use it?
Heh, point taken.
upCASE wrote:Anyway, writing wxSkin kind of frustrated me, as you may have figured out. I didn't expect anyone to integrate it into wxWidgets, but just "let it live". Instead all I got was critique on "how" I implemented it and to some extend the fact "that" I implemented it. I even had to argue about where and how to announce it.
I hope I've not given you the wrong impression, but I'm not here to completely shun your project, and I'm not against the work you've done. I know there are good reasons for application skinning, but I believe they are far and few between, and I think too many developers make the mistake of adopting an uninformed viewpoint on skins. I think they figure that just because it's available to them, that there's nothing wrong with using it. I've just seen too many applications using skins where they shouldn't be.

Anyway, I'm not turning people away from your project. I was in fact the first person on this thread to recommend that he look into using wxSkin. I just like them to be informed, and if I at least mention that it's discouraged, either they are reminded of why, or they ask and I can explain then, or they investigate it further elsewhere, and I've accomplished my goal.
obduk
Earned a small fee
Earned a small fee
Posts: 11
Joined: Thu May 10, 2007 3:49 pm

Post by obduk »

Thank you for your wxSkins project, I have only had a small look at it, but I have a fealing it might be exactly what I need.

One argument against skins is the terrible design of some skins, that make them unusable for the user.

As stated, my aim in not to create a "media play style skin", with funky graphics and pictures, I am more trying to create a normal looking application, just in a different OS theme.

If I do use your wxSkins, I shall give you some feedback, though I wont be starting any new projects until the summer due to current commitments.

Thanks, Owen
upCASE
Moderator
Moderator
Posts: 3176
Joined: Mon Aug 30, 2004 6:55 am
Location: Germany, Cologne

Post by upCASE »

tierra wrote:I hope I've not given you the wrong impression, but I'm not here to completely shun your project, and I'm not against the work you've done.
No, I didn't get this impression. It was just that I felt that I had to "argue" a bit about skinning in general :)
tierra wrote:I've just seen too many applications using skins where they shouldn't be.
Yes, right. The bad thing is that skinning is a excellent way to create an application that looks fresh, hip and fancy, but offer zero new features. Anyway, I like the freedom that comes with it. For my Audacious I can choosethe skin I like and it won't be dependent on the system UI.

To sum it up: Don't overdo with skins, only skin when needed and when it "doesn't hurt". It's nice and fancy, but absolutely meaningless if the application is bad.
OS: OpenSuSE, Ubuntu, Win XP Pro
wx: svn
Compiler: gcc 4.5.1, VC 2008, eVC 4

"If it was hard to write it should be hard to read..." - the unknown coder
"Try not! Do. Or do not. There is no try." - Yoda
obduk
Earned a small fee
Earned a small fee
Posts: 11
Joined: Thu May 10, 2007 3:49 pm

Post by obduk »

Yes, alot of the time custom interfaces can ruin an applications, especially the over the top ones with lots of graphics.

However, I think one of the main reasons why iTunes on windows is so popular is because of its clean, and nice looking interface, which from the point of view of a windows user is a skinned application.

I believe the same idea should be used for other applications, and hence my project of looking into the field of study. I have designed a few skinned interfaces, and now want to code them for testing.

Owen
ianar
Experienced Solver
Experienced Solver
Posts: 51
Joined: Tue Feb 07, 2006 5:50 pm
Location: Florida
Contact:

Post by ianar »

Skins are cool, I like that VLC has them. They are often abused to create absolutely hideous and unworkable interfaces for the sake of 'art', but hey, that's the skin designer's fault, not the tool itself.
As long as there is a good and workable default, then more choice can only be a good thing.
.
o--|==ianar
Post Reply