Windows 8 and the so called modern UI

Ok, I do like a number of things about Windows 8 and the new modern UI (aka. metro). I like how easy it is to download apps and install them.  The UI elements (controls) appear to be well suited to touch as well. I understand the benefits of it being a sandbox (security) and I would not be surprised to find that it to be quite successful with Windows RT tablets. Compared to Android I find it simpler and easier to navigate (on a tablet).

That said, I have not been all that impressed with the quality of the apps. I have Windows 8 installed on an ExoPC which is one of the few lower cost Windows 7 tablets which is well suited to Windows 8. It has a screen resolution of 1366 x 768, which supports the snap feature.

Yet I keep finding the apps to be a bit one dimensional. The games tend to be the best, since they are purely graphic (DirectX), but the general apps are actually more limited in the UI design.

The problem with software user interface design over the years has been that Microsoft has pushed its own UI design philosophy, rather than encourage developers to be creative. For example, for years so called “good UI design” was making all software look and act the same. The idea was that users would find it easier to use new software because it all worked similarly.  If Microsoft used the Ribbon in their apps then programmers felt they needed to use Ribbons too. Personally I don’t find the ribbon to be any more effective that a simple set of toolbars. Starting with Windows XP, Windows provided themes and even API for using those themes when writing custom controls. Now with Windows 8, the nice 3D themes we have become accustomed to are considered old fashioned and in poor taste. Now Metro (Modern UI) is suppose to be better with its overly flat looking UI. You can’t even tell the difference between a Button control and a Label control in Metro.

What some developers may not appreciate about Windows is that since Windows 95/98 we have already had all the basic core UI elements one really needs, but with one beautiful no often used feature. What is that ?

Windows 8 and its modern UI still has buttons, listboxes, drop down lists (comboboxes), labels, etc. They just look a little different (flat), but basically the same thing. What the Windows API (WIN32) has offered from the beginning for many of these controls is what really is powerful. Windows provides two main methods for customizing many of these controls, refered to as OwnerDraw and CustomDraw. You can take a button control and make it look any way you like. You can make a listbox look totally customized. You can literally draw the key items of each control any way you like. Now why is this important ?

The downside to Metro apps is that they will only run on Windows 8. If you want your software to run on say Windows XP, Vista or Windows 7 as well as Windows 8 Metro, then you have to write two totally different apps. True a lot of non-UI stuff may be ported from the desktop to Metro apps, but the UI’s have to be totally different. Especially if you plan on supporting touch on Windows 8, UI design has to be very different with a Metro app compared to a desktop app.

But the real question is, why can’t we write software which will look good on all versions of Windows, including Windows 8 ? We can, but we may simply have to rethink how we design our user interfaces.  An app designed for Metro will not run on Windows XP, Vista or Windows 7. But if you design for the desktop and take advantage of the ability to customize your controls using what has been in Windows all along, then you cna build apps which can run on multiple versions of Windows, but will have the ability to take advantage of what ever operating system it is running on. For example, how about writing a program which can emulate the Metro style on Windows 8 as well as on Windows XP, Vista and Windows 7.  It is possible when using Windows ability to customize controls.

I have found Windows 8 does a very good job of supporting the core WIN32 API’s and these customization features. Also Windows 8 supports all the core API’s necessary for building your own unique custom controls to (custom window classes).

This is why when I designed my GUI engine (EZGUI – see:  http://cwsof.com ) one of the key factors I built in was this ability to customize. For example it supports high level customization of controls using ownerdraw and customdraw. It also provides low level methods of customization as well (for ownerdraw), even including the ability to subclass and superclass controls to make controls which work differently than the base class. I have found that simply providing a lot of high level custom controls is not enough. Why ? Because the more low level methods you provide for customization, the more choices programmers have for building a totally unique UI.

When I was building EZGUI, one of the things I found difficult at first was learning how to build custom controls using the Windows API. I actually had to go back to some very old books to learn how to do this, but a lot was simply gaining experience over time. I saw the advantage of building custom UI’s, so I not only built my own custom controls as part of EZGUI to go beyond the core UI elements in Windows, but I added to EZGUI the ability for programmers to more easily take advantage of many of the customization techniques I learned how to do.  The ability to build totally unique controls based on existing window classes (ie. buttons, listbox, combobox, menus, tab control, listview and label control) is a very powerful feature and it also works on all versions of Windows we need to support today (XP to Windows 8) and even older PC’s like Windows 95/98/ME/2000.

Download this simple app I wrote using EZGUI which demonstrates a number of these customization features which runs very well even on Windows 8:

http://cwsof.com/download/testwin8.zip

I did not stop there though. I found a number of core features which have been in Windows even since Windows 95/98 and tapped into them to build some unique custom controls, which rather than simply be just another high level UI control (like most you purchase today) they are actually designed to be building blocks so you can build some very unique and powerful custom controls of your own.

For example, EZGUI 5.0 Pro has a Canvas control, but a very unique on. It was designed to be both low level and high level. For example it is based on the Windows DIB engine and it supports DDB’s (device dependent bitmaps) as well as real DIB’s (device independent bitmaps) in 16,24 and 32 format. This means you can write low level code which can access pixel data directly. For example it was very easy for me to write image filters to modify the image and the code runs very fast because you are working at a low level. But that was not enough. I provided an extensive graphics command set for drawing into the Canvas control too. One example is the command which can draw a bitmap and rotate it up to 360 degrees, alphablend (or transparent BitBlt) and scale the image all with one command.

That is not all. I added my own proprietary 2D sprite engine to the control. What is a sprite ? A sprite is a non-rectangular image which can be moved, flipped, shown and hidden. Sprites are kept separate from the background image and the control merges the two when it repaints the control. Sprites can also be alphablended to the background and each other and even antialiased. They also support frame animation as well. EZGUI does not even require any special hardware to do this.

The Canvas control is a sort of building block control. It can be used to build almost any graphic oriented style control you may require. Do you need a custom charting control ? Build it yourself using the Canvas control. The core functionality is there to build a nearly endless variety of controls.

Well I didn’t stop there. I asked myself, what core functionality is missing in the standard controls in the Windows API ? I wanted some multimedia support, so I created my own MCI control with a simplified command set. It is easy to add video, MIDI, audio and CD audio to applications. One thing which is really missing in the Windows controls is a native 3D control. The problem with directx is that it was originally intended for building full screen games (or single window games). Because of this, I chose to use OpenGL. OpenGL was not only an easier API to work with, it also has the ability to be used in multiple child windows of an application. In essence OpenGL is well designed for using as a 3D engine for a custom control class. EZGUI 5.0 comes with its own glCanvas control which is OpenGL based. The problem with even OpenGL is it is a complex set of API’s which take time to learn how to leverage. So I build my own 3D scripting language right into the control. Now EZGUI’s glCanvas control was not designed as a game engine. There are plenty of other tools for that. EZGUI uses OpenGL in a real control. It is a building block so you can your own unique controls, but which are 3D based. I also chose a 3D model file format to support which is not your usual model format for 3D engines. Most 3D engines support 3D models geared towards building games. They key to gaming is to use models with low polygon counts, with high quality texture maps to produce a sense of realism.

EZGUI 5.0 supports the STL (3D prototyping such as used in 3D printing) model format. The format is an open format and it is amazingly simple. The one key feature of the STL format (binary) is that it is well suited to models with extremely high polygon counts. For example, download some STL model viewers and try to load a huge STL model and see how long it takes to load. I wrote a simple freeware app which can load a 3D model (STL) with a million polygons in about 1 or 2 seconds on an average 3D video card found today (in the $50 range, so even minimal).  Now this 3D control is not a game engine. It is just a 3D control so you can use it for anything you want, which can benefit from 3D. It could be useful in displaying 3D medical models. It could be useful for animating a 3D model of a machine.

The point is that the Windows desktop is still alive in Windows 8 and some very exciting software cna be built for the Windows 8 desktop, but which can work just as well on all your older Windows XP, Vista and Windows 7 computers.

Yes, what is a modern UI really ? I don’t think that being forced to the Metro style is really what I would call a modern UI . Now I do like Metro and for tablets it is a nice user interface, but I don’t think software developers should be limited by it. The desktop may provide some more powerful choices for the x86 Windows platform. The best feature is that with the right tools you can build a unique UI which will stand out on Windows 8, yet still have the benefit of backward compatiblity with Windows XP, Vista and Windows 7. Now that is something you just don’t get with Metro.

So build for Metro if it fits your needs, but don’t forget the Desktop ! Also be willing to building unique and customized user interfaces rather than feel forced to make your app look like everyone elses. Take advantage of the built in ways of customizing that the Windows API (WIN32) offers. If you are PowerBasic user, then consider EZGUI since it provides easy access to many of those features.