Store GtkBitmap data inline in the pointer

Bitmaps are often sparse in some way, which we can use by storing such
bitmaps inside the actual GtkBitmap pointer, which we detect by looking at
the least significant bit (which is never set for normal objects due to
alignment rules).

There are two basic approaches, you can store the bitmasks smaller than
31/63 bits directly in the pointer, or you can use the pointer as a
single bit number, considering that bit set.

I did some measurements on this, and it turns out that 63 bits is enought
for most bitmaps right now, but not 31bit, which means this is only efficient
on 64bit arches. Additionally it doesn't scale well as the number of style
classes and regions increase.

Using the data to store a single bit number however was almost as good as 63
bits always and sometimes better, and it will continue to scale as we
add more classes and regions.

With this change we use an additional 116KB ram in Nautilus after
startup.
2 files changed