Adventures From SVG to XAML

Illustration

As huge fan of ribbon interface it was just a matter of time before I started playing with WPF flavored version. First thing that became obvious is that my standard toolbar bitmaps are not good anymore.

My default 16x16 icons looked slightly blurry on higher DPI settings when used in Windows Forms applications and I didn’t mind it much. Same icons in WPF looked just plain awful. I spent some time playing with various settings to get better results but even best settings could not hide fact that bitmaps were used. It was quite obvious that vector-based icons were what I needed.

There are some free XAML toolbar icons available but any meaningful project will have problems finding right (free) icon for the job. Since there is quite a selection of free SVG icons, thought came about converting one into another. How hard it can be to convert one vector drawing into another one.

I decided to test this on various media buttons since that was exactly what I needed for one project.

First thoughts went toward InkScape. This is great vector drawing tool with option to save files as XAML. Resulting file used canvas for positioning various elements and thus it was not possible to use it as ribbon image. Simplest solution failed me.

Another solution was exporting file in PDF and then importing that into Expression Design and exporting it as XAML. It worked. However, results were less than satisfactory. All gradients were rendered as image instead of vector. Scaling picture didn’t quite feel right.

I spent better part of night and nothing quite worked.

Best results that I got were with Svg2Xaml library. It is LGPL project in very early phase (version 0.2) of development but I do not see any alternative library that is half as good.

Examples included with that library are quite good but I decided to create another one just for fun. As always, result of that tinkering is available for download.

WinDays 10

Illustration

Biggest Croatian IT conference WinDays will be held in Rovinj this year. And, as two previous years, yours truly will have one presentation.

This year I will be talking about Bing Maps and presentation will be held on Wednesday, 21st April 2010 at 11:00. If you, readers of this blog, happen to be in Rovinj that day (or day before/after) I would like to meet you in person.

As always, presentation will be available for download minutes after I stop bothering attendants.

Am I Secret Admirer?

Illustration

Most of my YouTube playlist consists of Starcraft and cooking videos. From time to time I also take look at YouTube recommendations since they usually reflect my taste. But sometimes I just have a laugh.

I was quite surprised when I saw Susan Boyle video among those recommended for me. Fortunately YouTube also told me why. That left me even more puzzled since YouTube though that I would like Susan because I watched Starcraft Winners League match between Samsung Khan and Estro. I dare not think how many Starcraft fans watched both those videos for YouTube to connect them.

Starcraft fans are peculiar bunch…

Alternate Data Streams

NTFS has quite a few features that are hidden from everyday user. One of features that is difficult to access is alternate data streams.

Additionally to normal content, each file can have additional content attached to it. That content is, for all practical purposes, independent of original file content and it can contain anything. Most common stream is “Zone.Identifier”. It gets added by Internet Explorer (and some other browsers) to each executable to mark it as “unsafe”. Before such file gets executed you get security warning with notification that file arrived from big-bad-Internet.

Unfortunately this is as far as using this feature goes in Windows. Although one could think of thousands of more uses for it (e.g. adding thumbnails to file itself instead of separate file) its downfall is support on other file systems. Mere act of copying file to FAT partition will strip additional file streams. Mailing it is out of question and not even HTTP has any provisioning for it. With all that in mind, it is very unlikely that it gets used for anything more than temporary data.

If you are C# programmer and you have purpose for ADS, you will stumble upon another problem - it has no support in .NET framework. This is where this post gets useful.

I decided to implement support for alternate data streams in FileStream-like class that allows for same read/write functions to be used as in any Stream. It just wraps native CreateFile function into some FileStream contructor overloads. For deletion of particular stream within file we can use native DeleteFile and stream-specific functions (FindFirstStream and FindNextStream) will take care of enumeration.

I will let source code speak for itself.

Startup Customizations

Illustration

My BeBook e-book reader is just rebranded Jinke and as such there is quite a lot possibility of customization. I will save discussing all different versions of firmware for some other post, this time I will just discuss changing logo.

Jinke decided to make it’s LogoMaker available for all owners to change both boot and shutdown images.

Preparing is easy. Just create two bitmaps (one for boot and one for shutdown) and save them as .bmp images. Start LogoMaker and give path to those two images just created and you will get logo.bin and logo.md5. Those two files are all you need.

Create /jinke/logo on SD card. Easiest way is to do this is to connect BeBook mini (or Hanlin V5, or Pocket PRO, or whatever clone there is) to USB and copy it from there, but choice is yours.

Once both SD card and logo files are in place you can go into Settings. There you will see “Update boot and shutdown logo” option available. Once selected, update will happen very fast and device will be turned off.

Once you turn device back on you will be able to enjoy your new startup screen.

Probably most difficult thing is selecting proper logo for it. I decided upon “Don’t Panic” statement. If you wish it, you can have it too.