Again, it was more difficult than expected. There is nothing existing for managing PNG images with alpha chanel neither to load them from resources.
I’ve ended up writing a small class able to load png and jpeg images from resources and from disk.
Later I will probably need to add support for asynchronous network image load and for placeholder.
I’ve added an ImageView widget supporting the rendering of an image.
Size of the executable in release mode : 84k (including a png resource)
Managing events means to cascade down all window events in order to have widgets aware about the mouse.
I’ve only implemented a basic support, mouse wheel, acceleration and over state are currently not yet supported.
Meanwhile I started to add to the framework first real widgets: Button and button bars, label a really simple listview.
I was happy to see that developing new widgets is actually quite simple. It proves that the chosen architecture is the right one (at least for the moment).
I’ve also started to add support for text rendering, by just wrapping methods from GDI+. Text is antialiased and renders nice. However I hope that performances will remains acceptable when we will start to animate.
Size of the executable in release mode : 76k
Today, I realized that the challenge is bigger than expected. I started to code the general architecture of my UI Toolkit.
To window of the Twitter client will contains a big custom user control which will host all my windowless “widgets”
Where we are:
I have a base class for all widgets, a container class able to contains a set of widgets and a custom how control redirecting events to a container widget.
Currently, only layout and painting is supported. Here is a screenshot of the app : each rectangle is a widget
Size of the executable in release mode : 69k
I do not want to buy additional development tools so I will use the one I already own: Visual Studio 2008 Express Edition (c++). Even if it becomes quite old, I am pretty sure it will be enough for what I need.
In addition, I will use Paint.Net for generating all the required graphic resources.
Yes, this is a low cost setup. I hope it will be enough.
In parallel, I started to think about the UI of the application. There is nothing on the market, close to what I need (a metro-ish UI toolkit available under Win XP and newer versions, with a c++ API).
This is the first real challenge; I need to develop my own.
Fortunately, I do not need a lot of controls (button,label, checkbox, listview). However the listwiew I have in my mind will require some effort.
I could start to override all existing Win32 controls but from an old experience it is a nightmare. The only way to avoid this is to recreate a windowless UI system.
I wanted to start to code and here is where I am.
I have a Win32 c++ project ready with the STL and GDI+. In addition I started to customize the main window in order to have a custom titlebar. For the moment it is an empty white rectangle.
This is not a lot but at least it compiles and run without errors.
Size of the executable in release mode : 61k
I was using daily a Mac. On OS X, you have a several really nice native Twitter clients. The most famous is Tweetie (which has been then acquired by Twitter and is now called Twitter for Mac).
Using now Windows for a part of my work, I was looking for a decent native Twitter client.
I’ve found nothing.
They are a lot of nice clients, but none of them is a native application.
You have to download and use a lot of dependencies (Java, .Net, WPF, Adobe AIR, …) and at the end the app becomes a monster in term of resources consumption.
For me a twitter client has to provide a full set of features but has to stay “minimal”. I do not want to buy additional RAM, just to run it.
I decided today to build my own client. It will be full win32/64 c++ with the minimum of external dependencies (no .Net, no MFC, no ATL, …).
However I want a modern UI, not something looking like a 10 years old application. I want something in the spirit of Metro UI mixed with the simplicity of the Tweeter for Mac app.
I will use this blog to share the development of the application. I know I will have a lot of challenges (from user interface to OAuth) but the purpose is to release early a working prototype and then to get users feedback to improve it.