From f284f40fe5912736666a56143705f260d14feb34 Mon Sep 17 00:00:00 2001 From: sandman Date: Mon, 24 Jun 2002 17:07:45 +0000 Subject: Inital checkin of liquid style for OPIE --- diff --git a/noncore/styles/liquid/effects.cpp b/noncore/styles/liquid/effects.cpp new file mode 100644 index 0000000..0c76fbc --- a/dev/null +++ b/noncore/styles/liquid/effects.cpp @@ -0,0 +1,118 @@ + +#include +#include +#include + +#include "effects.h" + + + +QImage & QImageEffect::fade (QImage & img, float val, const QColor & color) +{ + if ( img. width ( ) == 0 || img. height ( ) == 0 ) + return img; + +// We don't handle bitmaps + if (img.depth () == 1) + return img; + + unsigned char + tbl[256]; + for (int i = 0; i < 256; i++) + tbl[i] = (int) (val * i + 0.5); + + int + red = + color. + red (); + int + green = + color. + green (); + int + blue = + color. + blue (); + + QRgb col; + int + r, + g, + b, + cr, + cg, + cb; + + if (img.depth () <= 8) + { + // pseudo color + for (int i = 0; i < img.numColors (); i++) + { + col = img.color (i); + cr = qRed (col); + cg = qGreen (col); + cb=qBlue(col); + if (cr > red) + r = cr - tbl[cr - red]; + + else + r = cr + tbl[red - cr]; + if (cg > green) + g = cg - tbl[cg - green]; + + else + g = cg + tbl[green - cg]; + if (cb > blue) + b = cb - tbl[cb - blue]; + + else + b = cb + tbl[blue - cb]; + img.setColor (i, qRgb (r, g, b)); + } + + } + else + { + // truecolor + for (int y = 0; y < img.height (); y++) + { + QRgb * data = (QRgb *) img.scanLine (y); + for (int x = 0; x < img.width (); x++) + { + col = *data; + cr = qRed (col); +cg=qGreen(col); +cb=qBlue(col); + if (cr > red) + r = cr - tbl[cr - red]; + + else + r = cr + tbl[red - cr]; + if (cg > green) + g = cg - tbl[cg - green]; + + else + g = cg + tbl[green - cg]; + if (cb > blue) + b = cb - tbl[cb - blue]; + + else + b = cb + tbl[blue - cb]; + *data++ = qRgb (r, g, b); + } + } + } + + return img; +} + + + +QPixmap& QPixmapEffect::fade(QPixmap &pixmap, float val, const QColor &color) +{ + QImage img = pixmap.convertToImage(); + QImageEffect::fade(img, val, color); + pixmap.convertFromImage(img); + + return pixmap; +} diff --git a/noncore/styles/liquid/effects.h b/noncore/styles/liquid/effects.h new file mode 100644 index 0000000..23c3f0a --- a/dev/null +++ b/noncore/styles/liquid/effects.h @@ -0,0 +1,20 @@ +#ifndef __EFFECTS_H__ +#define __EFFECTS_H__ + +class QImage; +class QPixmap; +class QColor; + +class QImageEffect { +public: + static QImage &fade ( QImage &, float, const QColor & ); +}; + +class QPixmapEffect { +public: + static QPixmap &fade ( QPixmap &, float, const QColor & ); +}; + + +#endif + diff --git a/noncore/styles/liquid/embeddata.h b/noncore/styles/liquid/embeddata.h new file mode 100644 index 0000000..e4ccc27 --- a/dev/null +++ b/noncore/styles/liquid/embeddata.h @@ -0,0 +1,1000 @@ +/* Generated by qembed */ +#ifndef _1855746070 +#define _1855746070 +#include +#include +static const QRgb buttonborder_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0xffcacaca,0xffa0a0a0,0xff838383,0xff747474,0xff747474,0xff727272,0xff727272,0xff727272, + 0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272, + 0xff727272,0xffa0a0a0,0xffcacaca,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffcacaca, + 0xff838383,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0xffcacaca, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffaeaeae,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffaeaeae,0x0,0x0,0x0,0x0, + 0x0,0xffaeaeae,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xffaeaeae,0x0,0x0,0x0,0xffcacaca,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xffcacaca,0x0,0x0,0xff838383,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0x0,0xffcacaca,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xffcacaca,0xffa0a0a0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xffa0a0a0,0xff838383,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0xff747474,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff747474,0xff747474,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xff747474,0xff838383,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0xff838383,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xff838383,0xff838383,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383, + 0xff838383,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0xff838383,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0xff838383,0xff838383,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0xff838383, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0xff919191,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0xffa0a0a0,0xffb7b7b7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffcacaca,0xffeaeaea,0xff727272, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff838383,0x0,0x0,0xffafafaf,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xffcacaca,0x0,0x0,0x0,0xff919191,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffaeaeae,0x0,0x0,0x0,0x0,0x0, + 0xff919191,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0xffaeaeae,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffafafaf,0xff727272,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff838383,0xffcacaca,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xffeaeaea,0xffb7b7b7,0xff919191,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272, + 0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272,0xff727272, + 0xff727272,0xff838383,0xffa0a0a0,0xffcacaca,0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb buttonfill_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xff8a8685,0xffa2a2a2,0xffb9b8b6,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4, + 0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffb9b8b6,0xffa2a2a2,0xff8a8685,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff8a8685,0xffa8a6a5,0xffc8c7c5,0xffebebeb,0xfff4f4f4,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4,0xffebebeb,0xffc8c7c5,0xffa8a6a5,0xff8a8685,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0xff949292,0xffb1aeae,0xffd4d4d4,0xfff0ebe8,0xfff3f3f3,0xfff4f4f4,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4, + 0xfff3f3f3,0xfff0ebe8,0xffd4d4d4,0xffb1aeae,0xff949292,0x0,0x0,0x0,0x0,0x0,0xff9d9593,0xffb1aeae,0xffd6d3d2,0xffe4e4e4, + 0xffe4e2e3,0xfff3f3f3,0xfff9f9f9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xfff3f3f3,0xffe4e2e3,0xffe4e4e4,0xffd6d3d2,0xffb1aeae, + 0xff9d9593,0x0,0x0,0x0,0x0,0xffa6a8a5,0xffc2c6c3,0xffd0d0d0,0xffe4e2e3,0xffe4e4e4,0xfff4f4f4,0xfff9f9f9,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xfff4f4f4,0xffe4e4e4,0xffe4e2e3,0xffd0d0d0,0xffc2c6c3,0xffa6a8a5,0x0,0x0,0x0,0xff9e9d9a, + 0xffaeb1ae,0xffc7ccc8,0xffced0cf,0xffdddddd,0xffe1e1e1,0xffefefef,0xffefefef,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffefefef,0xffefefef, + 0xffe1e1e1,0xffdddddd,0xffced0cf,0xffc7ccc8,0xffaeb1ae,0xff9e9d9a,0x0,0x0,0xffa6a5a2,0xffb6bab6,0xffc7ccc8,0xffcacac9,0xffd4d4d4,0xffdbd9da, + 0xffe4e4e4,0xffe4e4e4,0xffebebeb,0xfff3f3f3,0xfff3f3f3,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff3f3f3,0xfff4f4f4,0xfff4f4f4,0xfff3f3f3,0xfff3f3f3, + 0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff3f3f3,0xfff3f3f3,0xffebebeb,0xffe4e4e4,0xffe4e4e4,0xffdbd9da,0xffd4d4d4,0xffcacac9,0xffc7ccc8,0xffb6bab6, + 0xffa6a5a2,0x0,0x0,0xffa9a9a5,0xffb4b6b3,0xffbfc4c0,0xffc3c3c3,0xffcdcdcd,0xffd4d4d4,0xffd8d8d8,0xffdddddd,0xffe1e1e1,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe1e1e1,0xffdddddd,0xffd8d8d8,0xffd4d4d4,0xffcdcdcd,0xffc3c3c3,0xffbfc4c0,0xffb4b6b3,0xffa9a9a5,0x0,0x0,0xffa9a9a5,0xffaeb1ae, + 0xffbabdbb,0xffc3c3c3,0xffcbcbcb,0xffcdcdcd,0xffd4d4d4,0xffd4d4d4,0xffdddddd,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffdddddd,0xffd4d4d4,0xffd4d4d4,0xffcdcdcd, + 0xffcbcbcb,0xffc3c3c3,0xffbabdbb,0xffaeb1ae,0xffa9a9a5,0x0,0x0,0xff9a9894,0xffa6a8a5,0xffb2b7b3,0xffbabdbb,0xffc3c3c3,0xffc5c5c5,0xffc7c7c7, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffc7c7c7,0xffc5c5c5,0xffc3c3c3,0xffbabdbb,0xffb2b7b3,0xffa6a8a5,0xff9a9894, + 0x0,0x0,0xff9a9894,0xffa6a8a5,0xffb2b7b3,0xffbabdbb,0xffc3c3c3,0xffc5c5c5,0xffc7c7c7,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffc7c7c7,0xffc5c5c5,0xffc3c3c3,0xffbabdbb,0xffb2b7b3,0xffa6a8a5,0xff9a9894,0x0,0x0,0xff9a9894,0xffa6a8a5,0xffb2b7b3, + 0xffbabdbb,0xffc3c3c3,0xffc5c5c5,0xffc7c7c7,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffc7c7c7,0xffc5c5c5,0xffc3c3c3, + 0xffbabdbb,0xffb2b7b3,0xffa6a8a5,0xff9a9894,0x0,0x0,0xff9a9894,0xffa6a8a5,0xffb2b7b3,0xffbabdbb,0xffc3c3c3,0xffc5c5c5,0xffc7c7c7,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffc7c7c7,0xffc5c5c5,0xffc3c3c3,0xffbabdbb,0xffb2b7b3,0xffa6a8a5,0xff9a9894,0x0, + 0x0,0xff9a9894,0xffa6a8a5,0xffb2b7b3,0xffbabdbb,0xffc3c3c3,0xffc5c5c5,0xffc7c7c7,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffc7c7c7,0xffc5c5c5,0xffc3c3c3,0xffbabdbb,0xffb2b7b3,0xffa6a8a5,0xff9a9894,0x0,0x0,0xff9a9894,0xffa6a8a5,0xffb2b7b3,0xffbabdbb, + 0xffc3c3c3,0xffc5c5c5,0xffc7c7c7,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffd0d0d0,0xffc7c7c7,0xffc5c5c5,0xffc3c3c3,0xffbabdbb, + 0xffb2b7b3,0xffa6a8a5,0xff9a9894,0x0,0x0,0xffa9a9a5,0xffaeb1ae,0xffbabdbb,0xffc3c3c3,0xffcbcbcb,0xffcdcdcd,0xffd4d4d4,0xffd4d4d4,0xffdddddd, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffdddddd,0xffd4d4d4,0xffd4d4d4,0xffcdcdcd,0xffcbcbcb,0xffc3c3c3,0xffbabdbb,0xffaeb1ae,0xffa9a9a5,0x0,0x0, + 0xffa9a9a5,0xffb4b6b3,0xffbfc4c0,0xffc3c3c3,0xffcdcdcd,0xffd4d4d4,0xffd8d8d8,0xffdddddd,0xffe1e1e1,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe1e1e1,0xffdddddd, + 0xffd8d8d8,0xffd4d4d4,0xffcdcdcd,0xffc3c3c3,0xffbfc4c0,0xffb4b6b3,0xffa9a9a5,0x0,0x0,0xffa6a5a2,0xffb6bab6,0xffc7ccc8,0xffcacac9,0xffd4d4d4, + 0xffdbd9da,0xffe4e4e4,0xffe4e4e4,0xffebebeb,0xfff3f3f3,0xfff3f3f3,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff3f3f3,0xfff4f4f4,0xfff4f4f4,0xfff3f3f3, + 0xfff3f3f3,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff4f4f4,0xfff3f3f3,0xfff3f3f3,0xffebebeb,0xffe4e4e4,0xffe4e4e4,0xffdbd9da,0xffd4d4d4,0xffcacac9,0xffc7ccc8, + 0xffb6bab6,0xffa6a5a2,0x0,0x0,0xff9e9d9a,0xffaeb1ae,0xffc7ccc8,0xffced0cf,0xffdddddd,0xffe1e1e1,0xffefefef,0xffefefef,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffefefef,0xffefefef,0xffe1e1e1,0xffdddddd,0xffced0cf,0xffc7ccc8,0xffaeb1ae,0xff9e9d9a,0x0,0x0,0x0, + 0xffa6a8a5,0xffc2c6c3,0xffd0d0d0,0xffe4e2e3,0xffe4e4e4,0xfff4f4f4,0xfff9f9f9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xfff4f4f4, + 0xffe4e4e4,0xffe4e2e3,0xffd0d0d0,0xffc2c6c3,0xffa6a8a5,0x0,0x0,0x0,0x0,0xff9d9593,0xffb1aeae,0xffd6d3d2,0xffe4e4e4,0xffe4e2e3, + 0xfff3f3f3,0xfff9f9f9,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff9f9f9,0xfff3f3f3,0xffe4e2e3,0xffe4e4e4,0xffd6d3d2,0xffb1aeae,0xff9d9593, + 0x0,0x0,0x0,0x0,0x0,0xff949292,0xffb1aeae,0xffd4d4d4,0xfff0ebe8,0xfff3f3f3,0xfff4f4f4,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfff4f4f4,0xfff3f3f3,0xfff0ebe8,0xffd4d4d4,0xffb1aeae,0xff949292,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xff8a8685,0xffa8a6a5,0xffc8c7c5,0xffebebeb,0xfff4f4f4,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff4f4f4,0xffebebeb,0xffc8c7c5, + 0xffa8a6a5,0xff8a8685,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff8a8685,0xffa2a2a2, + 0xffb9b8b6,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4, + 0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffd4d4d4,0xffb9b8b6,0xffa2a2a2,0xff8a8685,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb checkbox_data[] = { + 0x786340,0x786340,0x360000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x404b4b4b,0xaa4c4c4c,0xff383838,0xff414141,0xff494949,0xff494949,0xff414141, + 0xff414141,0xff404040,0xff414141,0xff414141,0xff414141,0xff393939,0xaa4c4c4c,0x404f4f4f,0x0,0x0,0x0,0x0,0x0,0xaa555555, + 0xea707070,0xffa4a4a4,0xffb4b4b4,0xffb4b4b4,0xffb5b5b5,0xffb4b4b4,0xffb5b5b5,0xffb4b4b4,0xffb3b3b3,0xffb4b4b4,0xffb5b5b5,0xff9a9a9a,0xea6f6f6f,0xaa575757, + 0x0,0x0,0x0,0x0,0x0,0xff595959,0xff999999,0xffc0c0c0,0xffdddddd,0xffdedede,0xffdcdcdc,0xffdedede,0xffdcdcdc,0xffdddddd, + 0xffdddddd,0xffdddddd,0xffdddddd,0xffbebebe,0xffa4a4a4,0xff505050,0x0,0x0,0x0,0x0,0x0,0xff717171,0xffbcbcbc,0xffcecece, + 0xffd5d5d5,0xffd5d5d5,0xffd6d6d6,0xffd4d4d4,0xffd6d6d6,0xffd5d5d5,0xffd5d5d5,0xffd4d4d4,0xffd5d5d5,0xffc5c5c5,0xffb4b4b4,0xff737373,0x0,0xff42f7, + 0xff42f7,0x0,0x0,0xff848484,0xffababab,0xffbdbdbd,0xffbcbcbc,0xffbbbbbb,0xffc6c6c6,0xffbdbdbd,0xffbbbbbb,0xffbcbcbc,0xffbcbcbc,0xffbcbcbc, + 0xffbcbcbc,0xffbcbcbc,0xffacacac,0xff838383,0x0,0xff42f7,0xff42f7,0x0,0x0,0xff838383,0xffadadad,0xffbcbcbc,0xffbbbbbb,0xffbcbcbc, + 0xffbbbbbb,0xffbcbcbc,0xffbcbcbc,0xffbcbcbc,0xffbcbcbc,0xffbcbcbc,0xffbcbcbc,0xffbbbbbb,0xffadadad,0xff828282,0x0,0xff42f7,0xff42f7,0x0, + 0x0,0xff8b8b8b,0xffb4b4b4,0xffc5c5c5,0xffc5c5c5,0xffc6c6c6,0xffcdcdcd,0xffc5c5c5,0xffc5c5c5,0xffc6c6c6,0xffcdcdcd,0xffc6c6c6,0xffc5c5c5,0xffc5c5c5, + 0xffbcbcbc,0xff8b8b8b,0x0,0xff42f7,0xff42f7,0x0,0x0,0xff939393,0xffb6b6b6,0xffcdcdcd,0xffcdcdcd,0xffcccccc,0xffcccccc,0xffcecece, + 0xffcdcdcd,0xffcdcdcd,0xffcdcdcd,0xffcdcdcd,0xffd5d5d5,0xffcdcdcd,0xffc4c4c4,0xff929292,0x0,0xff42f7,0xff42f7,0x0,0x0,0xff949494, + 0xffc0c0c0,0xffd6d6d6,0xffd5d5d5,0xffdddddd,0xffd5d5d5,0xffdddddd,0xffdddddd,0xffdddddd,0xffdddddd,0xffdddddd,0xffdddddd,0xffd4d4d4,0xffcecece,0xff939393, + 0x0,0xff42f7,0xff42f7,0x0,0x0,0xff9b9b9b,0xffcecece,0xffdcdcdc,0xffe6e6e6,0xffe5e5e5,0xffe6e6e6,0xffe5e5e5,0xffe6e6e6,0xffe7e7e7, + 0xffdddddd,0xffe6e6e6,0xffe5e5e5,0xffdedede,0xffcdcdcd,0xff9a9a9a,0x0,0xd90200,0xe82c92,0x0,0x0,0xffa4a4a4,0xffd1d1d1,0xffeeeeee, + 0xffe6e6e6,0xffeeeeee,0xffededed,0xffeeeeee,0xffefefef,0xffededed,0xffefefef,0xffeeeeee,0xffeeeeee,0xffe6e6e6,0xffcccccc,0xff9b9b9b,0x0,0x0, + 0x400000,0x0,0x0,0xffa3a3a3,0xffd9d9d9,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff7f7f7,0xfff6f6f6,0xfff6f6f6, + 0xfff6f6f6,0xfff6f6f6,0xffd4d4d4,0xffa4a4a4,0x0,0x6c7574,0x6f6e20,0x0,0x0,0xffa5a5a5,0xffeeeeee,0xfffdfdfd,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xffd9d9d9,0xffa4a4a4,0x0,0xe90100,0xc86240,0x0, + 0x0,0xff939393,0xffd2d2d2,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffefefe,0xfffefefe, + 0xffd1d1d1,0xff939393,0x0,0x2d0014,0x490079,0x0,0x0,0xff797979,0xffa8a8a8,0xffc0c0c0,0xffededed,0xffeeeeee,0xffeeeeee,0xffeeeeee, + 0xffefefef,0xffeeeeee,0xffeeeeee,0xffefefef,0xffeeeeee,0xffc0c0c0,0xffa8a8a8,0xff7a7a7a,0x0,0x0,0x0,0x0,0x0,0xaa848484, + 0xea787878,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xea787878,0xaa848484, + 0x0,0xe06140,0xff42f7,0x0,0x0,0x40737373,0xaa787878,0xff7b7b7b,0xff727272,0xff717171,0xff727272,0xff737373,0xff727272,0xff727272, + 0xff727272,0xff727272,0xff727272,0xff7a7a7a,0xaa787878,0x40737373,0x0,0x906140,0xff42f7,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x59,0xf8b092,0x28b192,0x0,0x52,0x7b14ae,0xe17a74,0x0,0xf0,0x0,0x0,0x0,0x52,0x7b14ae, + 0xe17a74,0x0,0xf0,0x30000,0x0,0x0 +}; + +static const QRgb checkboxdown_data[] = { + 0x786340,0x786340,0x360000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x404b4b4b,0xaa4c4c4c,0xff383838,0xff414141,0xff494949,0xff494949,0xff414141, + 0xff414141,0xff404040,0xff414141,0xff414141,0xff414141,0xff393939,0xaa4c4c4c,0x404f4f4f,0x0,0x0,0x0,0x0,0x0,0xaa555555, + 0xea707070,0xffa4a4a4,0xffb4b4b4,0xffb4b4b4,0xffb5b5b5,0xffb4b4b4,0xffb5b5b5,0xffb4b4b4,0xffb3b3b3,0xffb4b4b4,0xffb5b5b5,0xff9a9a9a,0xea6f6f6f,0xaa575757, + 0x0,0x0,0x0,0x0,0x0,0xff595959,0xff999999,0xffc0c0c0,0xffdddddd,0xffdedede,0xffdcdcdc,0xffdedede,0xffdcdcdc,0xffdddddd, + 0xffdddddd,0xffdddddd,0xffdddddd,0xffbebebe,0xffa4a4a4,0xff505050,0x0,0x0,0x0,0x0,0x0,0xff717171,0xffbcbcbc,0xffbcbcbc, + 0xff919191,0xffd5d5d5,0xffd6d6d6,0xffd4d4d4,0xffd6d6d6,0xffd5d5d5,0xffd5d5d5,0xffc2c2c2,0xff919191,0xffc5c5c5,0xffb4b4b4,0xff737373,0x0,0xff42f7, + 0xff42f7,0x0,0x0,0xff848484,0xffababab,0xffacacac,0xff6b6b6b,0xff5f5f5f,0xffc6c6c6,0xffbdbdbd,0xffbbbbbb,0xffbcbcbc,0xff9f9f9f,0xff565656, + 0xff7f7f7f,0xffbcbcbc,0xffacacac,0xff838383,0x0,0xff42f7,0xff42f7,0x0,0x0,0xff838383,0xffadadad,0xffbcbcbc,0xff9e9e9e,0xff4a4a4a, + 0xff4b4b4b,0xffbcbcbc,0xffbcbcbc,0xff999999,0xff3d3d3d,0xff606060,0xffbcbcbc,0xffbbbbbb,0xffadadad,0xff828282,0x0,0xff42f7,0xff42f7,0x0, + 0x0,0xff8b8b8b,0xffb4b4b4,0xffc5c5c5,0xffc5c5c5,0xffa2a2a2,0xff3c3c3c,0xff424242,0xff9b9b9b,0xff323232,0xff525252,0xffc6c6c6,0xffc5c5c5,0xffc5c5c5, + 0xffbcbcbc,0xff8b8b8b,0x0,0xff42f7,0xff42f7,0x0,0x0,0xff939393,0xffb6b6b6,0xffcdcdcd,0xffcdcdcd,0xffcccccc,0xffa0a0a0,0xff2b2b2b, + 0xff1d1d1d,0xff454545,0xffcdcdcd,0xffcdcdcd,0xffd5d5d5,0xffcdcdcd,0xffc4c4c4,0xff929292,0x0,0xff42f7,0xff42f7,0x0,0x0,0xff949494, + 0xffc0c0c0,0xffd6d6d6,0xffd5d5d5,0xffdddddd,0xffa8a8a8,0xff2f2f2f,0xff1f1f1f,0xff4a4a4a,0xffdddddd,0xffdddddd,0xffdddddd,0xffd4d4d4,0xffcecece,0xff939393, + 0x0,0xff42f7,0xff42f7,0x0,0x0,0xff9b9b9b,0xffcecece,0xffdcdcdc,0xffe6e6e6,0xffbbbbbb,0xff444444,0xff4c4c4c,0xffb5b5b5,0xff3a3a3a, + 0xff585858,0xffe6e6e6,0xffe5e5e5,0xffdedede,0xffcdcdcd,0xff9a9a9a,0x0,0xd90200,0xe82c92,0x0,0x0,0xffa4a4a4,0xffd1d1d1,0xffeeeeee, + 0xffc3c3c3,0xff5f5f5f,0xff5f5f5f,0xffeeeeee,0xffefefef,0xffc2c2c2,0xff4d4d4d,0xff797979,0xffeeeeee,0xffe6e6e6,0xffcccccc,0xff9b9b9b,0x0,0x0, + 0x400000,0x0,0x0,0xffa3a3a3,0xffd9d9d9,0xffe1e1e1,0xff8c8c8c,0xff7c7c7c,0xfff6f6f6,0xfff6f6f6,0xfff6f6f6,0xfff7f7f7,0xffd1d1d1,0xff707070, + 0xffa8a8a8,0xfff6f6f6,0xffd4d4d4,0xffa4a4a4,0x0,0x6c7574,0x6f6e20,0x0,0x0,0xffa5a5a5,0xffeeeeee,0xffe8e8e8,0xffadadad,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffefefe,0xfffefefe,0xffe9e9e9,0xffadadad,0xfffefefe,0xffd9d9d9,0xffa4a4a4,0x0,0xe90100,0xc86240,0x0, + 0x0,0xff939393,0xffd2d2d2,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfffefefe,0xfffefefe, + 0xffd1d1d1,0xff939393,0x0,0x2d0014,0x490079,0x0,0x0,0xff797979,0xffa8a8a8,0xffc0c0c0,0xffededed,0xffeeeeee,0xffeeeeee,0xffeeeeee, + 0xffefefef,0xffeeeeee,0xffeeeeee,0xffefefef,0xffeeeeee,0xffc0c0c0,0xffa8a8a8,0xff7a7a7a,0x0,0x0,0x0,0x0,0x0,0xaa848484, + 0xea787878,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xff7c7c7c,0xea787878,0xaa848484, + 0x0,0xe06140,0xff42f7,0x0,0x0,0x40737373,0xaa787878,0xff7b7b7b,0xff727272,0xff717171,0xff727272,0xff737373,0xff727272,0xff727272, + 0xff727272,0xff727272,0xff727272,0xff7a7a7a,0xaa787878,0x40737373,0x0,0x906140,0xff42f7,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x59,0xf8b092,0x28b192,0x0,0x52,0x7b14ae,0xe17a74,0x0,0xf0,0x0,0x0,0x0,0x52,0x7b14ae, + 0xe17a74,0x0,0xf0,0x30000,0x0,0x0 +}; + +static const QRgb clear_fill_large_data[] = { + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffefefef,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffe7e7e7,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffd6d6d6, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffdedede,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffe7e7e7,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xfff7f7f7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xffffffff,0xffffffff,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xffffffff,0xffffffff,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xffffffff, + 0xffffffff,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xffffffff,0xfff7f7f7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfff7f7f7 +}; + +static const QRgb clear_fill_small_data[] = { + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffececec,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9, + 0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9, + 0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffe9e9e9,0xffececec, + 0xffebebeb,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffebebeb, + 0xffe5e5e5,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe5e5e5, + 0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0, + 0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0, + 0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0, + 0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9, + 0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9, + 0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9, + 0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7, + 0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7, + 0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7,0xffd7d7d7, + 0xffd7d7d7,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9, + 0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9, + 0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd9d9d9,0xffd7d7d7, + 0xffdcdcdc,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0, + 0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0, + 0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffdcdcdc, + 0xffe3e3e3,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe3e3e3, + 0xffebebeb,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffebebeb, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef,0xffefefef, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9, + 0xfffafafa,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd, + 0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd, + 0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffafafa, + 0xfff8f8f8,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa, + 0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa, + 0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfffafafa,0xfff8f8f8, + 0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9, + 0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9, + 0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9, + 0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd, + 0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd, + 0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd,0xfffdfdfd, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xffffffff, + 0xffffffff,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9, + 0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9, + 0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xfff9f9f9,0xffffffff, + 0xfffefefe,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfffefefe, + 0xfffafafa,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc, + 0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc, + 0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffafafa +}; + +static const QRgb htmlbtnborder_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894, + 0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894, + 0xff9a9894,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894, + 0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0, + 0x0,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xff9a9894,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0x0,0xff9a9894,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894, + 0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0xff9a9894, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff9a9894,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0xff9a9894,0x0,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0,0x0, + 0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894, + 0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894, + 0xff9a9894,0xff9a9894,0xff9a9894,0xff9a9894,0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb htmlcheckbox_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151, + 0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0x0,0x0,0x0,0x0,0x0,0x0,0xff515151,0xff6b6b6b, + 0xffa5a5a5,0xffb5b5b5,0xffb5b5b5,0xffb6b6b6,0xffb5b5b5,0xffb6b6b6,0xffb5b5b5,0xffb4b4b4,0xffb5b5b5,0xffb6b6b6,0xff9b9b9b,0xff6b6b6b,0xff515151,0x0, + 0x0,0x0,0x0,0x0,0xff515151,0xffadadad,0xffd5d5d5,0xffdedede,0xffdfdfdf,0xffdddddd,0xffdfdfdf,0xffdddddd,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffd6d6d6,0xffa5a5a5,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffbdbdbd,0xffcfcfcf,0xffd6d6d6, + 0xffd6d6d6,0xffd7d7d7,0xffd5d5d5,0xffd7d7d7,0xffd6d6d6,0xffd6d6d6,0xffd5d5d5,0xffd6d6d6,0xffcecece,0xffb5b5b5,0xff515151,0x0,0x0,0x0, + 0x0,0x0,0xff515151,0xffacacac,0xffbebebe,0xffbdbdbd,0xffbcbcbc,0xffc7c7c7,0xffbebebe,0xffbcbcbc,0xffbdbdbd,0xffbdbdbd,0xffbdbdbd,0xffbdbdbd, + 0xffbdbdbd,0xffadadad,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffaeaeae,0xffbdbdbd,0xffbcbcbc,0xffbdbdbd,0xffbcbcbc, + 0xffbdbdbd,0xffbdbdbd,0xffbdbdbd,0xffbdbdbd,0xffbdbdbd,0xffbdbdbd,0xffbcbcbc,0xffaeaeae,0xff515151,0x0,0x0,0x0,0x0,0x0, + 0xff515151,0xffb5b5b5,0xffc6c6c6,0xffc6c6c6,0xffc7c7c7,0xffcecece,0xffc6c6c6,0xffc6c6c6,0xffc7c7c7,0xffcecece,0xffc7c7c7,0xffc6c6c6,0xffc6c6c6,0xffbdbdbd, + 0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffbcbcbc,0xffcecece,0xffcecece,0xffcdcdcd,0xffcdcdcd,0xffcfcfcf,0xffcecece, + 0xffcecece,0xffcecece,0xffcecece,0xffd6d6d6,0xffcecece,0xffc5c5c5,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffcdcdcd, + 0xffd7d7d7,0xffd6d6d6,0xffdedede,0xffd6d6d6,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffd5d5d5,0xffcfcfcf,0xff515151,0x0, + 0x0,0x0,0x0,0x0,0xff515151,0xffcfcfcf,0xffdddddd,0xffe7e7e7,0xffe6e6e6,0xffe7e7e7,0xffe6e6e6,0xffe7e7e7,0xffe8e8e8,0xffdedede, + 0xffe7e7e7,0xffe6e6e6,0xffdfdfdf,0xffcecece,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffdddddd,0xffefefef,0xffe7e7e7, + 0xffefefef,0xffeeeeee,0xffefefef,0xfff0f0f0,0xffeeeeee,0xfff0f0f0,0xffefefef,0xffefefef,0xffe7e7e7,0xffd7d7d7,0xff515151,0x0,0x0,0x0, + 0x0,0x0,0xff515151,0xffe7e7e7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7, + 0xfff7f7f7,0xffdedede,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffefefef,0xfffefefe,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffe7e7e7,0xff515151,0x0,0x0,0x0,0x0,0x0, + 0xff515151,0xffe7e7e7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xffe7e7e7, + 0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffbdbdbd,0xffe7e7e7,0xffeeeeee,0xffefefef,0xffefefef,0xffefefef,0xfff0f0f0, + 0xffefefef,0xffefefef,0xfff0f0f0,0xffefefef,0xffe7e7e7,0xffbdbdbd,0xff515151,0x0,0x0,0x0,0x0,0x0,0x0,0xff515151, + 0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb htmlcheckboxdown_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151, + 0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0x0,0x0,0x0,0x0,0x0,0x0,0xff515151,0xff6b6b6b, + 0xffa5a5a5,0xffb5b5b5,0xffb5b5b5,0xffb6b6b6,0xffb5b5b5,0xffb6b6b6,0xffb5b5b5,0xffb4b4b4,0xffb5b5b5,0xffb6b6b6,0xff9b9b9b,0xff6b6b6b,0xff515151,0x0, + 0x0,0x0,0x0,0x0,0xff515151,0xffadadad,0xffd5d5d5,0xffdedede,0xffdfdfdf,0xffdddddd,0xffdfdfdf,0xffdddddd,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffd6d6d6,0xffa5a5a5,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffbdbdbd,0xffcfcfcf,0xff5e5e5e, + 0xffd6d6d6,0xffd7d7d7,0xffd5d5d5,0xffd7d7d7,0xffd6d6d6,0xffd6d6d6,0xffd5d5d5,0xff5e5e5e,0xffcecece,0xffb5b5b5,0xff515151,0x0,0x0,0x0, + 0x0,0x0,0xff515151,0xffacacac,0xffbebebe,0xff525252,0xff2a2a2a,0xffc7c7c7,0xffbebebe,0xffbcbcbc,0xffbdbdbd,0xffbdbdbd,0xff2a2a2a,0xff525252, + 0xffbdbdbd,0xffadadad,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffaeaeae,0xffbdbdbd,0xffbcbcbc,0xff2a2a2a,0xff181818, + 0xffbdbdbd,0xffbdbdbd,0xffbdbdbd,0xff191919,0xff2a2a2a,0xffbdbdbd,0xffbcbcbc,0xffaeaeae,0xff515151,0x0,0x0,0x0,0x0,0x0, + 0xff515151,0xffb5b5b5,0xffc6c6c6,0xffc6c6c6,0xffc7c7c7,0xff1b1b1b,0xff121212,0xffc6c6c6,0xff121212,0xff1b1b1b,0xffc7c7c7,0xffc6c6c6,0xffc6c6c6,0xffbdbdbd, + 0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffbcbcbc,0xffcecece,0xffcecece,0xffcdcdcd,0xffcdcdcd,0xff121212,0xff050505, + 0xff121212,0xffcecece,0xffcecece,0xffd6d6d6,0xffcecece,0xffc5c5c5,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffcdcdcd, + 0xffd7d7d7,0xffd6d6d6,0xffdedede,0xffd6d6d6,0xff141414,0xff050505,0xff141414,0xffdedede,0xffdedede,0xffdedede,0xffd5d5d5,0xffcfcfcf,0xff515151,0x0, + 0x0,0x0,0x0,0x0,0xff515151,0xffcfcfcf,0xffdddddd,0xffe7e7e7,0xffe6e6e6,0xff1f1f1f,0xff151515,0xffe7e7e7,0xff151515,0xff1e1e1e, + 0xffe7e7e7,0xffe6e6e6,0xffdfdfdf,0xffcecece,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffdddddd,0xffefefef,0xffe7e7e7, + 0xff363636,0xff202020,0xffefefef,0xfff0f0f0,0xffeeeeee,0xff202020,0xff363636,0xffefefef,0xffe7e7e7,0xffd7d7d7,0xff515151,0x0,0x0,0x0, + 0x0,0x0,0xff515151,0xffe7e7e7,0xfff7f7f7,0xff6c6c6c,0xff383838,0xfff7f7f7,0xfff7f7f7,0xfff7f7f7,0xfff8f8f8,0xfff7f7f7,0xff383838,0xff6c6c6c, + 0xfff7f7f7,0xffdedede,0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffefefef,0xfffefefe,0xff707070,0xffffffff,0xffffffff, + 0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xffffffff,0xff707070,0xffffffff,0xffe7e7e7,0xff515151,0x0,0x0,0x0,0x0,0x0, + 0xff515151,0xffe7e7e7,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffefefe,0xffffffff,0xffffffff,0xffe7e7e7, + 0xff515151,0x0,0x0,0x0,0x0,0x0,0xff515151,0xffbdbdbd,0xffe7e7e7,0xffeeeeee,0xffefefef,0xffefefef,0xffefefef,0xfff0f0f0, + 0xffefefef,0xffefefef,0xfff0f0f0,0xffefefef,0xffe7e7e7,0xffbdbdbd,0xff515151,0x0,0x0,0x0,0x0,0x0,0x0,0xff515151, + 0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0xff515151,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb htmlradio_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0xff525252,0xff3a3a3a,0xff3a3a3a,0xff515151,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xff616161,0xff555555,0xff757575,0xff878787,0xff878787,0xff757575,0xff565656,0xff5d5d5d, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff6e6e6e,0xff7d7d7d,0xff9e9e9e,0xffb9b9b9,0xffc6c6c6,0xffc6c6c6,0xffbababa, + 0xffa5a5a5,0xff7f7f7f,0xff686868,0x0,0x0,0x0,0x0,0x0,0xff7a7a7a,0xff848484,0xffa7a7a7,0xffbfbfbf,0xffd1d1d1,0xffd7d7d7, + 0xffdadada,0xffd7d7d7,0xffcbcbcb,0xffababab,0xff7d7d7d,0xff717171,0x0,0x0,0x0,0x0,0xff7f7f7f,0xff9e9e9e,0xffb3b3b3,0xffc2c2c2, + 0xffcacaca,0xffcacaca,0xffcacaca,0xffc9c9c9,0xffc6c6c6,0xffb6b6b6,0xff9a9a9a,0xff797979,0x0,0x0,0x0,0xff8d8d8d,0xff999999,0xffb0b0b0, + 0xffbababa,0xffc2c2c2,0xffc4c4c4,0xffc3c3c3,0xffc3c3c3,0xffc0c0c0,0xffc0c0c0,0xffbababa,0xffaeaeae,0xff969696,0xff868686,0x0,0x0,0xff939393, + 0xffb0b0b0,0xffc1c1c1,0xffc6c6c6,0xffcccccc,0xffcccccc,0xffcccccc,0xffcccccc,0xffcbcbcb,0xffc9c9c9,0xffc5c5c5,0xffbebebe,0xffaaaaaa,0xff8b8b8b,0x0, + 0x0,0xff9c9c9c,0xffbfbfbf,0xffcecece,0xffd4d4d4,0xffdadada,0xffdbdbdb,0xffdedede,0xffdbdbdb,0xffd7d7d7,0xffd5d5d5,0xffd3d3d3,0xffcbcbcb,0xffbcbcbc, + 0xff959595,0x0,0x0,0xff9d9d9d,0xffcdcdcd,0xffdbdbdb,0xffe0e0e0,0xffe4e4e4,0xffe8e8e8,0xffebebeb,0xffe9e9e9,0xffe6e6e6,0xffe4e4e4,0xffdddddd, + 0xffd4d4d4,0xffc5c5c5,0xff979797,0x0,0x0,0xff979797,0xffd1d1d1,0xffe1e1e1,0xffededed,0xfff1f1f1,0xfff5f5f5,0xfff8f8f8,0xfff6f6f6,0xfff3f3f3, + 0xffeeeeee,0xffe5e5e5,0xffdcdcdc,0xffcacaca,0xff939393,0x0,0x0,0xff909090,0xffb7b7b7,0xffe2e2e2,0xfff1f1f1,0xfff8f8f8,0xfffdfdfd,0xffffffff, + 0xfffdfdfd,0xfffcfcfc,0xfff7f7f7,0xffeeeeee,0xffe1e1e1,0xffb5b5b5,0xff909090,0x0,0x0,0x0,0xff8d8d8d,0xffd1d1d1,0xfff2f2f2,0xfffdfdfd, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xfff1f1f1,0xffcdcdcd,0xff8c8c8c,0x0,0x0,0x0,0x0,0xff878787,0xff9b9b9b, + 0xffd5d5d5,0xfffbfbfb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xffd4d4d4,0xff999999,0xff868686,0x0,0x0,0x0,0x0, + 0x0,0xff848484,0xff818181,0xffa9a9a9,0xffcccccc,0xffe9e9e9,0xffe9e9e9,0xffcccccc,0xffa9a9a9,0xff818181,0xff848484,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xff818181,0xff747474,0xff6f6f6f,0xff6e6e6e,0xff6e6e6e,0xff6f6f6f,0xff747474,0xff818181,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff898989,0xff7c7c7c,0xff7b7b7b,0xff888888,0x0,0x0, + 0x0,0x0,0x0,0x0 +}; + +static const QRgb htmlradiodown_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0xff525252,0xff3a3a3a,0xff3a3a3a,0xff515151,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xff616161,0xff555555,0xff757575,0xff878787,0xff878787,0xff757575,0xff565656,0xff5d5d5d, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff6e6e6e,0xff7d7d7d,0xff9d9d9d,0xffb6b6b6,0xffc2c2c2,0xffc2c2c2,0xffb6b6b6, + 0xffa3a3a3,0xff7f7f7f,0xff686868,0x0,0x0,0x0,0x0,0x0,0xff7a7a7a,0xff848484,0xffa6a6a6,0xffb9b9b9,0xffc4c4c4,0xffc6c6c6, + 0xffc8c8c8,0xffc7c7c7,0xffc1c1c1,0xffa8a8a8,0xff7d7d7d,0xff717171,0x0,0x0,0x0,0x0,0xff7f7f7f,0xff9d9d9d,0xffaeaeae,0xffb2b2b2, + 0xffacacac,0xffa3a3a3,0xff9f9f9f,0xffa5a5a5,0xffaeaeae,0xffababab,0xff979797,0xff797979,0x0,0x0,0x0,0xff8d8d8d,0xff989898,0xffababab, + 0xffacacac,0xffa1a1a1,0xff8a8a8a,0xff747474,0xff6e6e6e,0xff797979,0xff919191,0xffa2a2a2,0xffa5a5a5,0xff949494,0xff868686,0x0,0x0,0xff939393, + 0xffaeaeae,0xffb7b7b7,0xffadadad,0xff959595,0xff6b6b6b,0xff454545,0xff3b3b3b,0xff515151,0xff797979,0xff9d9d9d,0xffaeaeae,0xffa5a5a5,0xff8b8b8b,0x0, + 0x0,0xff9c9c9c,0xffbdbdbd,0xffc2c2c2,0xffb3b3b3,0xff909090,0xff565656,0xff232323,0xff131313,0xff323232,0xff6a6a6a,0xff9e9e9e,0xffb6b6b6,0xffb6b6b6, + 0xff959595,0x0,0x0,0xff9d9d9d,0xffcbcbcb,0xffcecece,0xffbdbdbd,0xff979797,0xff5b5b5b,0xff252525,0xff151515,0xff363636,0xff717171,0xffa5a5a5, + 0xffbebebe,0xffbebebe,0xff979797,0x0,0x0,0xff979797,0xffcfcfcf,0xffd6d6d6,0xffd0d0d0,0xffb0b0b0,0xff808080,0xff545454,0xff474747,0xff616161, + 0xff8f8f8f,0xffb7b7b7,0xffc9c9c9,0xffc4c4c4,0xff939393,0x0,0x0,0xff909090,0xffb6b6b6,0xffdcdcdc,0xffdfdfdf,0xffcecece,0xffb2b2b2,0xff989898, + 0xff8e8e8e,0xff9f9f9f,0xffbababa,0xffd0d0d0,0xffd5d5d5,0xffb2b2b2,0xff909090,0x0,0x0,0x0,0xff8d8d8d,0xffd0d0d0,0xffebebeb,0xffe8e8e8, + 0xffdadada,0xffcecece,0xffc9c9c9,0xffd2d2d2,0xffdcdcdc,0xffe2e2e2,0xffc9c9c9,0xff8c8c8c,0x0,0x0,0x0,0x0,0xff878787,0xff9b9b9b, + 0xffd4d4d4,0xfff4f4f4,0xfff0f0f0,0xffececec,0xffeaeaea,0xffededed,0xffeeeeee,0xffd0d0d0,0xff999999,0xff868686,0x0,0x0,0x0,0x0, + 0x0,0xff848484,0xff818181,0xffa8a8a8,0xffc8c8c8,0xffe4e4e4,0xffe4e4e4,0xffc8c8c8,0xffa7a7a7,0xff818181,0xff848484,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xff818181,0xff747474,0xff6f6f6f,0xff6e6e6e,0xff6e6e6e,0xff6f6f6f,0xff747474,0xff818181,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff898989,0xff7c7c7c,0xff7b7b7b,0xff888888,0x0,0x0, + 0x0,0x0,0x0,0x0 +}; + +static const QRgb radio_data[] = { + 0x0,0x0,0x0,0x0,0x3bdbdbd,0x797d7d7d,0xcd525252,0xf93a3a3a,0xf93a3a3a,0xcd515151,0x797c7c7c,0x3bdbdbd,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x399d9d9d,0xda616161,0xff555555,0xff757575,0xff878787,0xff878787,0xff757575,0xff565656,0xda5d5d5d, + 0x39969696,0x0,0x0,0x0,0x0,0x0,0x2bacacac,0xf06e6e6e,0xff7d7d7d,0xff9e9e9e,0xffb9b9b9,0xffc6c6c6,0xffc6c6c6,0xffbababa, + 0xffa5a5a5,0xff7f7f7f,0xf0686868,0x2ba3a3a3,0x0,0x0,0x0,0x0,0xbe7a7a7a,0xff848484,0xffa7a7a7,0xffbfbfbf,0xffd1d1d1,0xffd7d7d7, + 0xffdadada,0xffd7d7d7,0xffcbcbcb,0xffababab,0xff7d7d7d,0xbe717171,0x0,0x0,0x0,0x4e9a9a9a,0xff7f7f7f,0xff9e9e9e,0xffb3b3b3,0xffc2c2c2, + 0xffcacaca,0xffcacaca,0xffcacaca,0xffc9c9c9,0xffc6c6c6,0xffb6b6b6,0xff9a9a9a,0xff797979,0x4e919191,0x0,0x0,0xa48d8d8d,0xff999999,0xffb0b0b0, + 0xffbababa,0xffc2c2c2,0xffc4c4c4,0xffc3c3c3,0xffc3c3c3,0xffc0c0c0,0xffc0c0c0,0xffbababa,0xffaeaeae,0xff969696,0xa4868686,0x0,0x0,0xde939393, + 0xffb0b0b0,0xffc1c1c1,0xffc6c6c6,0xffcccccc,0xffcccccc,0xffcccccc,0xffcccccc,0xffcbcbcb,0xffc9c9c9,0xffc5c5c5,0xffbebebe,0xffaaaaaa,0xde8b8b8b,0x0, + 0x0,0xfb9c9c9c,0xffbfbfbf,0xffcecece,0xffd4d4d4,0xffdadada,0xffdbdbdb,0xffdedede,0xffdbdbdb,0xffd7d7d7,0xffd5d5d5,0xffd3d3d3,0xffcbcbcb,0xffbcbcbc, + 0xfb959595,0x0,0x0,0xfb9d9d9d,0xffcdcdcd,0xffdbdbdb,0xffe0e0e0,0xffe4e4e4,0xffe8e8e8,0xffebebeb,0xffe9e9e9,0xffe6e6e6,0xffe4e4e4,0xffdddddd, + 0xffd4d4d4,0xffc5c5c5,0xfb979797,0x0,0x0,0xde979797,0xffd1d1d1,0xffe1e1e1,0xffededed,0xfff1f1f1,0xfff5f5f5,0xfff8f8f8,0xfff6f6f6,0xfff3f3f3, + 0xffeeeeee,0xffe5e5e5,0xffdcdcdc,0xffcacaca,0xde939393,0x0,0x0,0xa4909090,0xffb7b7b7,0xffe2e2e2,0xfff1f1f1,0xfff8f8f8,0xfffdfdfd,0xffffffff, + 0xfffdfdfd,0xfffcfcfc,0xfff7f7f7,0xffeeeeee,0xffe1e1e1,0xffb5b5b5,0xa4909090,0x0,0x0,0x4e939393,0xff8d8d8d,0xffd1d1d1,0xfff2f2f2,0xfffdfdfd, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xfff1f1f1,0xffcdcdcd,0xff8c8c8c,0x4e949494,0x0,0x0,0x0,0xbe878787,0xff9b9b9b, + 0xffd5d5d5,0xfffbfbfb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xffd4d4d4,0xff999999,0xbe868686,0x0,0x0,0x0,0x0, + 0x2bababab,0xf0848484,0xff818181,0xffa9a9a9,0xffcccccc,0xffe9e9e9,0xffe9e9e9,0xffcccccc,0xffa9a9a9,0xff818181,0xf0848484,0x2bababab,0x0,0x0, + 0x0,0x0,0x0,0x39a5a5a5,0xda818181,0xff747474,0xff6f6f6f,0xff6e6e6e,0xff6e6e6e,0xff6f6f6f,0xff747474,0xda818181,0x39a5a5a5,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x3aeaeae,0x79949494,0xcd898989,0xf97c7c7c,0xf97b7b7b,0xcd888888,0x79959595,0x3afafaf, + 0x0,0x0,0x0,0x0 +}; + +static const QRgb radio_down_data[] = { + 0x0,0x0,0x0,0x0,0x3bdbdbd,0x797d7d7d,0xcd525252,0xf93a3a3a,0xf93a3a3a,0xcd515151,0x797c7c7c,0x3bdbdbd,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x399d9d9d,0xda616161,0xff555555,0xff757575,0xff878787,0xff878787,0xff757575,0xff565656,0xda5d5d5d, + 0x39969696,0x0,0x0,0x0,0x0,0x0,0x2bacacac,0xf06e6e6e,0xff7d7d7d,0xff9e9e9e,0xffb9b9b9,0xffc6c6c6,0xffc6c6c6,0xffbababa, + 0xffa5a5a5,0xff7f7f7f,0xf0686868,0x2ba3a3a3,0x0,0x0,0x0,0x0,0xbe7a7a7a,0xff848484,0xffa7a7a7,0xffbcbcbc,0xffcacaca,0xffcdcdcd, + 0xffd0d0d0,0xffd0d0d0,0xffc8c8c8,0xffababab,0xff7d7d7d,0xbe717171,0x0,0x0,0x0,0x4e9a9a9a,0xff7f7f7f,0xff9e9e9e,0xffb0b0b0,0xffb6b6b6, + 0xffb3b3b3,0xffaaaaaa,0xffaaaaaa,0xffb2b2b2,0xffbababa,0xffb3b3b3,0xff9a9a9a,0xff797979,0x4e919191,0x0,0x0,0xa48d8d8d,0xff999999,0xffadadad, + 0xffafafaf,0xffa5a5a5,0xff8a8a8a,0xff717171,0xff717171,0xff878787,0xffa3a3a3,0xffafafaf,0xffababab,0xff969696,0xa4868686,0x0,0x0,0xde939393, + 0xffb0b0b0,0xffbdbdbd,0xffb4b4b4,0xff979797,0xff606060,0xff333333,0xff333333,0xff606060,0xff949494,0xffb3b3b3,0xffbababa,0xffaaaaaa,0xde8b8b8b,0x0, + 0x0,0xfb9c9c9c,0xffbfbfbf,0xffc9c9c9,0xffbcbcbc,0xff949494,0xff4e4e4e,0xff131313,0xff121212,0xff4c4c4c,0xff919191,0xffbbbbbb,0xffc6c6c6,0xffbcbcbc, + 0xfb959595,0x0,0x0,0xfb9d9d9d,0xffcdcdcd,0xffd6d6d6,0xffcbcbcb,0xffa8a8a8,0xff6e6e6e,0xff3a3a3a,0xff3a3a3a,0xff6d6d6d,0xffa8a8a8,0xffc9c9c9, + 0xffcfcfcf,0xffc5c5c5,0xfb979797,0x0,0x0,0xde979797,0xffd1d1d1,0xffdedede,0xffdfdfdf,0xffcdcdcd,0xffacacac,0xff8f8f8f,0xff8e8e8e,0xffababab, + 0xffcacaca,0xffd8d8d8,0xffd9d9d9,0xffcacaca,0xde939393,0x0,0x0,0xa4909090,0xffb7b7b7,0xffe2e2e2,0xffededed,0xffe9e9e9,0xffe0e0e0,0xffd7d7d7, + 0xffd5d5d5,0xffdfdfdf,0xffe8e8e8,0xffeaeaea,0xffe1e1e1,0xffb5b5b5,0xa4909090,0x0,0x0,0x4e939393,0xff8d8d8d,0xffd1d1d1,0xfff2f2f2,0xfffafafa, + 0xfff7f7f7,0xfff4f4f4,0xfff4f4f4,0xfff7f7f7,0xfff7f7f7,0xfff1f1f1,0xffcdcdcd,0xff8c8c8c,0x4e949494,0x0,0x0,0x0,0xbe878787,0xff9b9b9b, + 0xffd5d5d5,0xfffbfbfb,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xfffafafa,0xffd4d4d4,0xff999999,0xbe868686,0x0,0x0,0x0,0x0, + 0x2bababab,0xf0848484,0xff818181,0xffa9a9a9,0xffcccccc,0xffe9e9e9,0xffe9e9e9,0xffcccccc,0xffa9a9a9,0xff818181,0xf0848484,0x2bababab,0x0,0x0, + 0x0,0x0,0x0,0x39a5a5a5,0xda818181,0xff747474,0xff6f6f6f,0xff6e6e6e,0xff6e6e6e,0xff6f6f6f,0xff747474,0xda818181,0x39a5a5a5,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x3aeaeae,0x79949494,0xcd898989,0xf97c7c7c,0xf97b7b7b,0xcd888888,0x79959595,0x3afafaf, + 0x0,0x0,0x0,0x0 +}; + +static const QRgb sbslider_btm_data[] = { + 0xe96e6e6e,0xffb9b9b9,0xffc9c9c9,0xffc0c0c0,0xffbcbcbc,0xff9c9c9c,0xffafafaf,0xffbababa,0xffc3c3c3,0xffcacaca,0xffcbcbcb,0xffcbcbcb,0xe9717171,0xff6d6d6d, + 0xffb0b0b0,0xffc6c6c6,0xffc0c0c0,0xffb8b8b8,0xff9a9a9a,0xffacacac,0xffbababa,0xffc0c0c0,0xffc9c9c9,0xffcacaca,0xffc9c9c9,0xff757575,0xe9737373,0xff999999, + 0xffc1c1c1,0xffbfbfbf,0xffb5b5b5,0xff999999,0xffa7a7a7,0xffb6b6b6,0xffc0c0c0,0xffc5c5c5,0xffc7c7c7,0xffbebebe,0xe97b7b7b,0xac737373,0xff747474,0xff9a9a9a, + 0xff9e9e9e,0xff959595,0xff949494,0xffa0a0a0,0xffadadad,0xffb9b9b9,0xffc0c0c0,0xffc0c0c0,0xffa7a7a7,0xac737373,0x737373,0xff737373,0xff747474,0xff747474, + 0xff7e7e7e,0xff8b8b8b,0xff979797,0xffa4a4a4,0xffacacac,0xffb3b3b3,0xffb5b5b5,0xff8f8f8f,0x737373,0x0,0x98737373,0xff727272,0xff747474,0xff787878, + 0xff828282,0xff8d8d8d,0xff989898,0xff9d9d9d,0xffa7a7a7,0xff989898,0x98737373,0x0,0x0,0x0,0x98737373,0xff747474,0xff757575,0xff7b7b7b, + 0xff838383,0xff8d8d8d,0xff979797,0xff737373,0x98737373,0x0,0x0,0x0,0x0,0x0,0x0,0xac737373,0xe9737373,0xff737373, + 0xe9737373,0xac737373,0x0,0x0,0x0,0x0 +}; + +static const QRgb sbslider_mid_data[] = { + 0xff737373,0xffb9b9b9,0xffcbcbcb,0xffc3c3c3,0xffc1c1c1,0xffa0a0a0,0xffb3b3b3,0xffc0c0c0,0xffc9c9c9,0xffd1d1d1,0xffd0d0d0,0xffcfcfcf,0xff727272,0xff737373, + 0xffb9b9b9,0xffcbcbcb,0xffc3c3c3,0xffc1c1c1,0xffa0a0a0,0xffb3b3b3,0xffc0c0c0,0xffc9c9c9,0xffd1d1d1,0xffd0d0d0,0xffcfcfcf,0xff727272,0xff707070,0xffb9b9b9, + 0xffcbcbcb,0xffc3c3c3,0xffc1c1c1,0xff9f9f9f,0xffb3b3b3,0xffbfbfbf,0xffc7c7c7,0xffcfcfcf,0xffcfcfcf,0xffcecece,0xff727272,0xff6e6e6e,0xffb9b9b9,0xffcccccc, + 0xffc2c2c2,0xffc0c0c0,0xff9e9e9e,0xffb1b1b1,0xffbdbdbd,0xffc6c6c6,0xffcdcdcd,0xffcdcdcd,0xffcccccc,0xff717171,0xff6c6c6c,0xffbababa,0xffcbcbcb,0xffc2c2c2, + 0xffc0c0c0,0xff9c9c9c,0xffafafaf,0xffbcbcbc,0xffc5c5c5,0xffcacaca,0xffcbcbcb,0xffcccccc,0xff717171,0xff6c6c6c,0xffbababa,0xffcccccc,0xffc2c2c2,0xffc0c0c0, + 0xff9b9b9b,0xffaeaeae,0xffbbbbbb,0xffc5c5c5,0xffc9c9c9,0xffcbcbcb,0xffcbcbcb,0xff717171,0xff6e6e6e,0xffbababa,0xffcbcbcb,0xffc2c2c2,0xffc0c0c0,0xff9c9c9c, + 0xffafafaf,0xffbbbbbb,0xffc5c5c5,0xffcacaca,0xffcccccc,0xffcccccc,0xff717171,0xff707070,0xffb9b9b9,0xffcbcbcb,0xffc1c1c1,0xffc0c0c0,0xff9d9d9d,0xffb0b0b0, + 0xffbcbcbc,0xffc6c6c6,0xffcccccc,0xffcdcdcd,0xffcdcdcd,0xff727272,0xff737373,0xffb9b9b9,0xffcacaca,0xffc1c1c1,0xffc0c0c0,0xff9d9d9d,0xffb1b1b1,0xffbdbdbd, + 0xffc6c6c6,0xffcecece,0xffcecece,0xffcecece,0xff727272,0xff6e6e6e,0xffb9b9b9,0xffcdcdcd,0xffc6c6c6,0xffc5c5c5,0xffa0a0a0,0xffb3b3b3,0xffc0c0c0,0xffc8c8c8, + 0xffcccccc,0xffcccccc,0xffd3d3d3,0xff6f6f6f,0xff707070,0xffbababa,0xffcdcdcd,0xffc6c6c6,0xffc5c5c5,0xffa2a2a2,0xffb5b5b5,0xffc1c1c1,0xffc8c8c8,0xffcecece, + 0xffcdcdcd,0xffd4d4d4,0xff6f6f6f,0xff737373,0xffbbbbbb,0xffcdcdcd,0xffc6c6c6,0xffc6c6c6,0xffa5a5a5,0xffb9b9b9,0xffc3c3c3,0xffcacaca,0xffd3d3d3,0xffd1d1d1, + 0xffd5d5d5,0xff707070,0xff757575,0xffbcbcbc,0xffcdcdcd,0xffc6c6c6,0xffc6c6c6,0xffa7a7a7,0xffbbbbbb,0xffc5c5c5,0xffcccccc,0xffd5d5d5,0xffd3d3d3,0xffd5d5d5, + 0xff707070,0xff757575,0xffbcbcbc,0xffcdcdcd,0xffc5c5c5,0xffc6c6c6,0xffa7a7a7,0xffbbbbbb,0xffc6c6c6,0xffcccccc,0xffd6d6d6,0xffd3d3d3,0xffd6d6d6,0xff707070, + 0xff737373,0xffbababa,0xffcccccc,0xffc6c6c6,0xffc6c6c6,0xffa6a6a6,0xffbababa,0xffc5c5c5,0xffcccccc,0xffd5d5d5,0xffd3d3d3,0xffd5d5d5,0xff707070,0xff707070, + 0xffbababa,0xffcdcdcd,0xffc6c6c6,0xffc6c6c6,0xffa5a5a5,0xffb9b9b9,0xffc4c4c4,0xffcccccc,0xffd3d3d3,0xffd1d1d1,0xffd4d4d4,0xff6f6f6f,0xff6e6e6e,0xffb9b9b9, + 0xffcdcdcd,0xffc6c6c6,0xffc6c6c6,0xffa4a4a4,0xffb7b7b7,0xffc2c2c2,0xffcccccc,0xffd1d1d1,0xffcfcfcf,0xffd4d4d4,0xff6f6f6f,0xff737373,0xffb9b9b9,0xffcbcbcb, + 0xffc3c3c3,0xffc1c1c1,0xffa0a0a0,0xffb3b3b3,0xffc0c0c0,0xffc9c9c9,0xffd1d1d1,0xffd0d0d0,0xffcfcfcf,0xff727272,0xff707070,0xffb9b9b9,0xffcbcbcb,0xffc3c3c3, + 0xffc1c1c1,0xff9f9f9f,0xffb3b3b3,0xffbfbfbf,0xffc7c7c7,0xffcfcfcf,0xffcfcfcf,0xffcecece,0xff727272,0xff6e6e6e,0xffb9b9b9,0xffcccccc,0xffc2c2c2,0xffc0c0c0, + 0xff9e9e9e,0xffb1b1b1,0xffbdbdbd,0xffc6c6c6,0xffcdcdcd,0xffcdcdcd,0xffcccccc,0xff717171,0xff6c6c6c,0xffbababa,0xffcbcbcb,0xffc2c2c2,0xffc0c0c0,0xff9c9c9c, + 0xffafafaf,0xffbcbcbc,0xffc5c5c5,0xffcacaca,0xffcbcbcb,0xffcccccc,0xff717171,0xff6c6c6c,0xffbababa,0xffcccccc,0xffc2c2c2,0xffc0c0c0,0xff9b9b9b,0xffaeaeae, + 0xffbbbbbb,0xffc5c5c5,0xffc9c9c9,0xffcbcbcb,0xffcbcbcb,0xff717171,0xff6e6e6e,0xffbababa,0xffcbcbcb,0xffc2c2c2,0xffc0c0c0,0xff9c9c9c,0xffafafaf,0xffbbbbbb, + 0xffc5c5c5,0xffcacaca,0xffcccccc,0xffcccccc,0xff717171,0xff6e6e6e,0xffb9b9b9,0xffc8c8c8,0xffc1c1c1,0xffbdbdbd,0xff9e9e9e,0xffaeaeae,0xffbebebe,0xffc6c6c6, + 0xffcdcdcd,0xffcfcfcf,0xffcccccc,0xff727272,0xff6e6e6e,0xffb7b7b7,0xffc9c9c9,0xffc2c2c2,0xffc0c0c0,0xffa0a0a0,0xffb1b1b1,0xffbfbfbf,0xffc6c6c6,0xffcdcdcd, + 0xffcfcfcf,0xffcccccc,0xff727272,0xff6f6f6f,0xffb9b9b9,0xffc9c9c9,0xffc3c3c3,0xffc0c0c0,0xffa1a1a1,0xffb1b1b1,0xffbdbdbd,0xffc6c6c6,0xffcdcdcd,0xffd0d0d0, + 0xffcccccc,0xff737373,0xff727272,0xffbbbbbb,0xffc9c9c9,0xffc6c6c6,0xffc3c3c3,0xffa5a5a5,0xffb6b6b6,0xffc2c2c2,0xffcbcbcb,0xffd2d2d2,0xffd2d2d2,0xffcfcfcf, + 0xff727272,0xff727272,0xffbbbbbb,0xffc9c9c9,0xffc7c7c7,0xffc6c6c6,0xffa9a9a9,0xffb8b8b8,0xffc4c4c4,0xffcccccc,0xffd2d2d2,0xffd4d4d4,0xffd0d0d0,0xff737373 +}; + +static const QRgb sbslider_top_data[] = { + 0x0,0x0,0x0,0x0,0xac686868,0xe9686868,0xff686868,0xe9686868,0xac686868,0x0,0x0,0x0,0x0,0x0, + 0x0,0x98686868,0xff686868,0xff747474,0xff777777,0xff7c7c7c,0xff848484,0xff8b8b8b,0xff757575,0x98757575,0x0,0x0,0x0,0x98686868, + 0xff6f6f6f,0xff696969,0xff7b7b7b,0xff808080,0xff888888,0xff8e8e8e,0xff949494,0xff9a9a9a,0xff979797,0x98757575,0x0,0x686868,0xff696969,0xff7b7b7b, + 0xff757575,0xff7e7e7e,0xff808080,0xff8f8f8f,0xff969696,0xffa3a3a3,0xffb3b3b3,0xffa9a9a9,0xff939393,0x757575,0xac686868,0xff727272,0xffa2a2a2,0xff9d9d9d, + 0xff949494,0xff858585,0xff999999,0xffa0a0a0,0xffb0b0b0,0xffb6b6b6,0xffb8b8b8,0xff9f9f9f,0xac757575,0xe9686868,0xff9a9a9a,0xffc6c6c6,0xffbbbbbb,0xffb0b0b0, + 0xff8e8e8e,0xffa2a2a2,0xffadadad,0xffb7b7b7,0xffbababa,0xffc1c1c1,0xffb3b3b3,0xe9757575,0xff696969,0xffa8a8a8,0xffc3c3c3,0xffb4b4b4,0xffb4b4b4,0xff8f8f8f, + 0xffa6a6a6,0xffb3b3b3,0xffb7b7b7,0xffbdbdbd,0xffc6c6c6,0xffc0c0c0,0xff757575,0xe9707070,0xffb9b9b9,0xffcdcdcd,0xffb6b6b6,0xffbbbbbb,0xff979797,0xffadadad, + 0xffb5b5b5,0xffbababa,0xffbfbfbf,0xffc9c9c9,0xffcbcbcb,0xe9727272 +}; + +static const QRgb sliderarrow_data[] = { + 0x0,0x0,0xff888888,0xff888888,0xff888888,0xff888888,0xff888888,0xff888888,0x0,0x0,0x0,0xff888888,0xffe0e0e0,0xffe0e0e0, + 0xffe0e0e0,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xff888888,0x0,0xff888888,0xffe0e0e0,0xffe0e0e0,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe0e0e0, + 0xffdddddd,0xff888888,0xff888888,0xffc9c9c9,0xffc9c9c9,0xffd0d0d0,0xffc9c9c9,0xffc9c9c9,0xffd1d1d1,0xffc9c9c9,0xffc1c1c1,0xff888888,0xff888888,0xffa3a3a3, + 0xffababab,0xffababab,0xffababab,0xffababab,0xffababab,0xffa8a8a8,0xffa3a3a3,0xff888888,0xff888888,0xffa5a5a5,0xffb7b7b7,0xffb7b7b7,0xffb7b7b7,0xffb7b7b7, + 0xffb6b6b6,0xffb8b8b8,0xffa5a5a5,0xff888888,0xff888888,0xffc4c4c4,0xffe1e1e1,0xffe3e3e3,0xffe1e1e1,0xffe4e4e4,0xffe5e5e5,0xffe1e1e1,0xffaeaeae,0xff888888, + 0x0,0xff888888,0xffc8c8c8,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc7c7c7,0xffbdbdbd,0xff888888,0x0,0x0,0x0,0xff888888,0xffbdbdbd, + 0xffbbbbbb,0xffbbbbbb,0xffbdbdbd,0xff888888,0x0,0x0,0x0,0x0,0x0,0xff888888,0xffb6b6b6,0xffaeaeae,0xff888888,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xff888888,0xff888888,0x0,0x0,0x0,0x0 +}; + +static const QRgb tab_data[] = { + 0x0,0x0,0x0,0x0,0x55a2a2a2,0xaaa2a2a2,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494, + 0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494, + 0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494, + 0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494, + 0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494, + 0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xff949494,0xaaa2a2a2,0x55a2a2a2,0x0,0x0,0x0, + 0x0,0x0,0x0,0x40a3a3a3,0xaaa3a3a3,0xd5afafaf,0xeabdbdbd,0xffc5c5c5,0xffc8c8c8,0xffc7c7c7,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8, + 0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8, + 0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8, + 0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8, + 0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8, + 0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc8c8c8,0xffc7c7c7,0xffc8c8c8,0xffc8c8c8,0xffc5c5c5,0xeabdbdbd,0xd5afafaf,0xaaa3a3a3,0x40a3a3a3, + 0x0,0x0,0x0,0x409f9f9f,0xbfa5a5a5,0xeabcbcbc,0xffcccccc,0xffdfdfdf,0xffe0e0e0,0xffe0e0e0,0xffdfdfdf,0xffe0e0e0,0xffdfdfdf,0xffdfdfdf, + 0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf, + 0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf, + 0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf, + 0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf, + 0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffdfdfdf,0xffe0e0e0,0xffdfdfdf,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffdfdfdf,0xffcccccc,0xeabcbcbc, + 0xbfa5a5a5,0x409f9f9f,0x0,0x409f9f9f,0xbfa1a1a1,0xeabababa,0xffcfcfcf,0xffe6e6e6,0xffe7e7e7,0xffe8e8e8,0xffe7e7e7,0xffe6e6e6,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe6e6e6,0xffe7e7e7,0xffe7e7e7,0xffe8e8e8,0xffe7e7e7,0xffe6e6e6, + 0xffcfcfcf,0xeabababa,0xbfa1a1a1,0x409f9f9f,0xaa9d9d9d,0xeaafafaf,0xffc2c2c2,0xffd3d3d3,0xffe7e7e7,0xffebebeb,0xffececec,0xffececec,0xffebebeb,0xffebebeb, + 0xffececec,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffececec,0xffebebeb,0xffebebeb,0xffececec,0xffececec,0xffececec,0xffebebeb, + 0xffe7e7e7,0xffd3d3d3,0xffc2c2c2,0xeaafafaf,0xaa9d9d9d,0xff949494,0xffc0c0c0,0xffc5c5c5,0xffc9c9c9,0xffc7c7c7,0xffc9c9c9,0xffcacaca,0xffc9c9c9,0xffc9c9c9, + 0xffc8c8c8,0xffc8c8c8,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9, + 0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9, + 0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9, + 0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9, + 0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffc8c8c8,0xffc8c8c8,0xffc9c9c9,0xffc9c9c9,0xffc9c9c9,0xffcacaca, + 0xffc9c9c9,0xffc7c7c7,0xffc9c9c9,0xffc5c5c5,0xffc0c0c0,0xff949494,0xff949494,0xffc8c8c8,0xffc7c7c7,0xffc7c7c7,0xffc5c5c5,0xffc5c5c5,0xffc7c7c7,0xffc5c5c5, + 0xffc7c7c7,0xffc7c7c7,0xffc5c5c5,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7, + 0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7, + 0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7, + 0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7, + 0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc7c7c7,0xffc5c5c5,0xffc7c7c7,0xffc7c7c7,0xffc5c5c5,0xffc5c5c5, + 0xffc7c7c7,0xffc5c5c5,0xffc5c5c5,0xffc7c7c7,0xffc7c7c7,0xffc8c8c8,0xff949494,0xff949494,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffcfcfcf,0xffcdcdcd,0xffd0d0d0, + 0xffd0d0d0,0xffd1d1d1,0xffcfcfcf,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1, + 0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1, + 0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1, + 0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1, + 0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xffcfcfcf,0xffd1d1d1,0xffd0d0d0, + 0xffd0d0d0,0xffd0d0d0,0xffcdcdcd,0xffcfcfcf,0xffd1d1d1,0xffd1d1d1,0xffd1d1d1,0xff949494,0xff949494,0xffd6d6d6,0xffd6d6d6,0xffd4d4d4,0xffd5d5d5,0xffd5d5d5, + 0xffd8d8d8,0xffd8d8d8,0xffd9d9d9,0xffd7d7d7,0xffd8d8d8,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6, + 0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd6d6d6,0xffd8d8d8,0xffd7d7d7,0xffd9d9d9, + 0xffd8d8d8,0xffd8d8d8,0xffd8d8d8,0xffd5d5d5,0xffd5d5d5,0xffd4d4d4,0xffd6d6d6,0xffd6d6d6,0xff949494,0xff949494,0xffdadada,0xffdcdcdc,0xffdadada,0xffdadada, + 0xffdcdcdc,0xffdcdcdc,0xffdddddd,0xffdddddd,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede,0xffdedede, + 0xffdddddd,0xffdddddd,0xffdddddd,0xffdcdcdc,0xffdcdcdc,0xffdadada,0xffdadada,0xffdcdcdc,0xffdadada,0xff949494,0xff949494,0xffdddddd,0xffe1e1e1,0xffdfdfdf, + 0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffe1e1e1,0xffe2e2e2,0xffe2e2e2,0xffe3e3e3,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2, + 0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2, + 0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2, + 0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2, + 0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe2e2e2,0xffe3e3e3, + 0xffe2e2e2,0xffe2e2e2,0xffe1e1e1,0xffe1e1e1,0xffe0e0e0,0xffe0e0e0,0xffe0e0e0,0xffdfdfdf,0xffe1e1e1,0xffdddddd,0xff949494,0xff949494,0xffdfdfdf,0xffe3e3e3, + 0xffe2e2e2,0xffe2e2e2,0xffe3e3e3,0xffe3e3e3,0xffe4e4e4,0xffe4e4e4,0xffe5e5e5,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4, + 0xffe4e4e4,0xffe5e5e5,0xffe4e4e4,0xffe4e4e4,0xffe4e4e4,0xffe3e3e3,0xffe3e3e3,0xffe2e2e2,0xffe2e2e2,0xffe3e3e3,0xffdfdfdf,0xff949494,0xff949494,0xffe2e2e2, + 0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe6e6e6,0xffe5e5e5,0xffe7e7e7,0xffe7e7e7,0xffe8e8e8,0xffe6e6e6,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7, + 0xffe7e7e7,0xffe6e6e6,0xffe8e8e8,0xffe7e7e7,0xffe7e7e7,0xffe7e7e7,0xffe5e5e5,0xffe6e6e6,0xffe5e5e5,0xffe5e5e5,0xffe5e5e5,0xffe2e2e2,0xff949494,0xff949494, + 0xffe3e3e3,0xffe7e7e7,0xffe6e6e6,0xffe9e9e9,0xffe9e9e9,0xffe7e7e7,0xffebebeb,0xffeaeaea,0xffe9e9e9,0xffe9e9e9,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffe9e9e9,0xffe9e9e9,0xffeaeaea,0xffebebeb,0xffebebeb,0xffe7e7e7,0xffe9e9e9,0xffe9e9e9,0xffe6e6e6,0xffe7e7e7,0xffe3e3e3,0xff949494, + 0xff949494,0xffe4e4e4,0xffe8e8e8,0xffe9e9e9,0xffececec,0xffececec,0xffe9e9e9,0xffededed,0xffececec,0xffeeeeee,0xffeeeeee,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb,0xffebebeb, + 0xffebebeb,0xffebebeb,0xffebebeb,0xffeeeeee,0xffeeeeee,0xffececec,0xffededed,0xffededed,0xffe9e9e9,0xffececec,0xffececec,0xffe9e9e9,0xffe8e8e8,0xffe4e4e4, + 0xff949494,0xff949494,0xffe6e6e6,0xffebebeb,0xffebebeb,0xffefefef,0xfff0f0f0,0xffefefef,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff1f1f1,0xfff0f0f0,0xfff0f0f0, + 0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0, + 0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0, + 0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0, + 0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0, + 0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff1f1f1,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xfff0f0f0,0xffefefef,0xfff0f0f0,0xffefefef,0xffebebeb,0xffebebeb, + 0xffe6e6e6,0xff949494,0xff949494,0xffe7e7e7,0xffededed,0xffefefef,0xfff1f1f1,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff4f4f4,0xfff2f2f2,0xfff4f4f4,0xfff2f2f2, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2, + 0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff4f4f4,0xfff2f2f2,0xfff4f4f4,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff2f2f2,0xfff1f1f1,0xffefefef, + 0xffededed,0xffe7e7e7,0xff949494,0xff949494,0xffe9e9e9,0xfff0f0f0,0xfff2f2f2,0xfff5f5f5,0xfff8f8f8,0xfff7f7f7,0xfff8f8f8,0xfff8f8f8,0xfff9f9f9,0xfffafafa, + 0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8, + 0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfffafafa,0xfff9f9f9,0xfff8f8f8,0xfff8f8f8,0xfff8f8f8,0xfff7f7f7,0xfff8f8f8,0xfff5f5f5, + 0xfff2f2f2,0xfff0f0f0,0xffe9e9e9,0xff949494,0xff949494,0xffeaeaea,0xfff1f1f1,0xfff6f6f6,0xfff9f9f9,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffdfdfd, + 0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc, + 0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc, + 0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc, + 0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc, + 0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffdfdfd,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc,0xfffcfcfc, + 0xfff9f9f9,0xfff6f6f6,0xfff1f1f1,0xffeaeaea,0xff949494,0xff949494,0xffececec,0xfff4f4f4,0xfffbfbfb,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffbfbfb,0xfff4f4f4,0xffececec,0xff949494,0xff949494,0xffeeeeee,0xfff9f9f9,0xfffdfdfd,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe,0xfffefefe, + 0xfffefefe,0xfffefefe,0xfffefefe,0xfffdfdfd,0xfff9f9f9,0xffeeeeee,0xff949494,0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494,0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494,0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494,0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494,0xff949494,0xffececec,0xfff9f9f9, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494,0xff949494,0xffececec, + 0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494,0xff949494, + 0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494, + 0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9,0xffececec, + 0xff949494,0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfff9f9f9, + 0xffececec,0xff949494,0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfff9f9f9,0xffececec,0xff949494,0xff949494,0xffececec,0xfff9f9f9,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb,0xfffbfbfb, + 0xfffbfbfb,0xfff9f9f9,0xffececec,0xff949494,0x95ababab,0xbfd5d5d5,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xc0d4d3d4,0x96aba9aa +}; + +static struct EmbedImage { + int width, height, depth; + const unsigned char *data; + int numColors; + const QRgb *colorTable; + bool alpha; + const char *name; +} embed_image_vec[] = { + { 37, 26, 32, (const unsigned char*)buttonborder_data, 0, 0, TRUE, "buttonborder" }, + { 37, 26, 32, (const unsigned char*)buttonfill_data, 0, 0, TRUE, "buttonfill" }, + { 20, 22, 32, (const unsigned char*)checkbox_data, 0, 0, TRUE, "checkbox" }, + { 20, 22, 32, (const unsigned char*)checkboxdown_data, 0, 0, TRUE, "checkboxdown" }, + { 45, 44, 32, (const unsigned char*)clear_fill_large_data, 0, 0, TRUE, "clear_fill_large" }, + { 42, 26, 32, (const unsigned char*)clear_fill_small_data, 0, 0, TRUE, "clear_fill_small" }, + { 37, 26, 32, (const unsigned char*)htmlbtnborder_data, 0, 0, TRUE, "htmlbtnborder" }, + { 20, 22, 32, (const unsigned char*)htmlcheckbox_data, 0, 0, TRUE, "htmlcheckbox" }, + { 20, 22, 32, (const unsigned char*)htmlcheckboxdown_data, 0, 0, TRUE, "htmlcheckboxdown" }, + { 16, 16, 32, (const unsigned char*)htmlradio_data, 0, 0, TRUE, "htmlradio" }, + { 16, 16, 32, (const unsigned char*)htmlradiodown_data, 0, 0, TRUE, "htmlradiodown" }, + { 16, 16, 32, (const unsigned char*)radio_data, 0, 0, TRUE, "radio" }, + { 16, 16, 32, (const unsigned char*)radio_down_data, 0, 0, TRUE, "radio_down" }, + { 13, 8, 32, (const unsigned char*)sbslider_btm_data, 0, 0, TRUE, "sbslider_btm" }, + { 13, 28, 32, (const unsigned char*)sbslider_mid_data, 0, 0, TRUE, "sbslider_mid" }, + { 13, 8, 32, (const unsigned char*)sbslider_top_data, 0, 0, TRUE, "sbslider_top" }, + { 10, 11, 32, (const unsigned char*)sliderarrow_data, 0, 0, TRUE, "sliderarrow" }, + { 85, 33, 32, (const unsigned char*)tab_data, 0, 0, TRUE, "tab" }, +}; + +static int cmpEmbedImage(const void *a, const void *b) +{ + const EmbedImage* ea = (const EmbedImage*)a; + const EmbedImage* eb = (const EmbedImage*)b; + return strcmp(ea->name,eb->name); +} +inline const QImage& qembed_findImage(const char* name) +{ + EmbedImage key; key.name = name; + EmbedImage* r = (EmbedImage*)bsearch( &key, embed_image_vec, + sizeof(embed_image_vec)/sizeof(EmbedImage), sizeof(EmbedImage), cmpEmbedImage ); + QImage* img; + if ( r ) { + img = new QImage((uchar*)r->data, + r->width, + r->height, + r->depth, + (QRgb*)r->colorTable, + r->numColors, + QImage::BigEndian + ); + if ( r->alpha ) + img->setAlphaBuffer(TRUE); + } else { + static QImage dummy; + img = &dummy; + } + return *img; +} + +#endif diff --git a/noncore/styles/liquid/htmlmasks.h b/noncore/styles/liquid/htmlmasks.h new file mode 100644 index 0000000..3398652 --- a/dev/null +++ b/noncore/styles/liquid/htmlmasks.h @@ -0,0 +1,32 @@ +#ifndef __LIQUID_DATA_H +#define __LIQUID_DATA_H + +static unsigned char buttonmask_bits[] = { + 0xc0, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0xf8, 0xff, + 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0xff, + 0x0f, 0xfe, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xff, + 0xff, 0x0f, 0xfc, 0xff, 0xff, 0xff, 0x07, 0xf8, 0xff, 0xff, 0xff, 0x03, + 0xf0, 0xff, 0xff, 0xff, 0x01, 0xe0, 0xff, 0xff, 0x7f, 0x00 }; + +static unsigned char htmlbuttonmask_bits[] = { + 0xc0, 0xff, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xff, 0xff, 0x01, 0xf8, 0xff, + 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0xff, + 0x0f, 0xfe, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xff, + 0xff, 0x0f, 0xfc, 0xff, 0xff, 0xff, 0x07, 0xf8, 0xff, 0xff, 0xff, 0x03, + 0xf0, 0xff, 0xff, 0xff, 0x01, 0xc0, 0xff, 0xff, 0x7f, 0x00 }; + + +#endif + diff --git a/noncore/styles/liquid/liquid.cpp b/noncore/styles/liquid/liquid.cpp new file mode 100644 index 0000000..5f014ad --- a/dev/null +++ b/noncore/styles/liquid/liquid.cpp @@ -0,0 +1,2666 @@ +/*- + * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. + */ + + + +#ifndef INCLUDE_MENUITEM_DEF +#define INCLUDE_MENUITEM_DEF +#endif + +#include +#include "liquid.h" +#include +#include +#include "effects.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include + +#include "htmlmasks.h" +#include "embeddata.h" + +typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, + QColorGroup &, bool, bool); + +QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl impl); + +void TransMenuHandler::stripePixmap(QPixmap &pix, const QColor &color) +{ + QImage img(pix.convertToImage()); + QImageEffect::fade(img, 0.9, color); + int x, y; + int r, g, b; + for(y=0; y < img.height(); y+=3){ + unsigned int *data = (unsigned int *) img.scanLine(y); + for(x=0; x < img.width(); ++x){ + r = qRed(data[x]); + g = qGreen(data[x]); + b = qBlue(data[x]); + if(r-10) + r-=10; + if(g-10) + g-=10; + if(b-10) + b-=10; + data[x] = qRgb(r, g, b); + } + } + pix.convertFromImage(img); +} + +TransMenuHandler::TransMenuHandler(QObject *parent) + : QObject(parent) +{ + pixDict.setAutoDelete(true); + reloadSettings(); +} + +void TransMenuHandler::reloadSettings() +{ + pixDict.clear(); + + Config config ( "qpe" ); + config. setGroup ( "MosfetMenus" ); + + type = config. readNumEntry("Type", TransStippleBg); + color = QColor ( config. readEntry("Color", QApplication::palette().active().button().name())); + fgColor = QColor ( config. readEntry("TextColor", QApplication::palette().active().text().name())); + opacity = config. readNumEntry("Opacity", 10); + shadowText = config. readBoolEntry("ShadowText", true); +} + +bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev) +{ + QPopupMenu *p = (QPopupMenu *)obj; + + if(ev->type() == QEvent::Show){ + if(type == TransStippleBg || type == TransStippleBtn || + type == Custom){ + QApplication::syncX(); + QPixmap *pix = new QPixmap; + if(p->testWFlags(Qt::WType_Popup)){ + QRect r(p->x(), p->y(), p->width(), p->height()); + QRect deskR = QApplication::desktop()->rect(); + if(r.right() > deskR.right() || r.bottom() > deskR.bottom()){ + r.setBottom(deskR.bottom()); + r.setRight(deskR.right()); + } + *pix = QPixmap::grabWindow(QApplication::desktop()-> winId(), r.x(), r.y(), + r.width(), r.height()); + } + else{ // tear off menu + pix->resize(p->width(), p->height()); + pix->fill(Qt::black.rgb()); + } + if(type == TransStippleBg){ + stripePixmap(*pix, p->colorGroup().background()); + } + else if(type == TransStippleBtn){ + stripePixmap(*pix, p->colorGroup().button()); + } + else{ + QPixmapEffect::fade(*pix, (((float)opacity)+80)*0.01, color); + } + pixDict.insert(p->winId(), pix); + } + } + else if(ev->type() == QEvent::Hide){ + if(type == TransStippleBg || type == TransStippleBtn || + type == Custom){ +// qWarning("Deleting menu pixmap, width %d", pixDict.find(p->winId())->width()); + pixDict.remove(p->winId()); + } + } + return(false); +} + + +LiquidStyle::LiquidStyle() + :QWindowsStyle() +{ + setName ( "LiquidStyle" ); + + btnMaskBmp = QBitmap(37, 26, buttonmask_bits, true); + btnMaskBmp.setMask(btnMaskBmp); + htmlBtnMaskBmp = QBitmap(37, 26, htmlbuttonmask_bits, true); + htmlBtnMaskBmp.setMask(htmlBtnMaskBmp); + headerHoverID = -1; + highlightWidget = NULL; + setButtonDefaultIndicatorWidth(0); + btnDict.setAutoDelete(true); + bevelFillDict.setAutoDelete(true); + smallBevelFillDict.setAutoDelete(true); + customBtnColorList.setAutoDelete(true); + customBtnIconList.setAutoDelete(true); + customBtnLabelList.setAutoDelete(true); + + rMatrix.rotate(270.0); + highcolor = QPixmap::defaultDepth() > 8; + btnBorderPix = new QPixmap; + btnBorderPix->convertFromImage(qembed_findImage("buttonfill")); + btnBlendPix = new QPixmap; + btnBlendPix->convertFromImage(qembed_findImage("buttonborder")); + bevelFillPix = new QPixmap; + bevelFillPix->convertFromImage(qembed_findImage("clear_fill_large")); + smallBevelFillPix = new QPixmap; + smallBevelFillPix->convertFromImage(qembed_findImage("clear_fill_small")); + // new stuff + vsbSliderFillPix = menuPix = NULL; + menuHandler = new TransMenuHandler(this); + setScrollBarExtent(15, 15); + int i; + for(i=0; i < BITMAP_ITEMS; ++i){ + pixmaps[i] = NULL; + } + oldSliderThickness = sliderThickness(); + setSliderThickness(11); +} + +LiquidStyle::~LiquidStyle() +{ + if(btnBorderPix) + delete btnBorderPix; + if(btnBlendPix) + delete btnBlendPix; + if(bevelFillPix) + delete bevelFillPix; + if(smallBevelFillPix) + delete smallBevelFillPix; + if(vsbSliderFillPix) + delete vsbSliderFillPix; + if(menuPix) + delete menuPix; + + setScrollBarExtent(16, 16); + setSliderThickness(oldSliderThickness); + int i; + for(i=0; i < BITMAP_ITEMS; ++i){ + if(pixmaps[i]) + delete pixmaps[i]; + } +} + +void LiquidStyle::drawClearBevel(QPainter *p, int x, int y, int w, int h, + const QColor &c, const QColor &bg) +{ + + QPen oldPen = p->pen(); // headers need this + int x2 = x+w-1; + int y2 = y+h-1; + // outer dark rect + p->setPen(c.dark(130)); + p->drawLine(x, y+2, x, y2-2); // l + p->drawLine(x2, y+2, x2, y2-2); // r + p->drawLine(x+2, y, x2-2, y); // t + p->drawLine(x+2, y2, x2-2, y2); // b + p->drawPoint(x+1, y+1); // tl + p->drawPoint(x2-1, y+1); // tr + p->drawPoint(x+1, y2-1); // bl + p->drawPoint(x2-1, y2-1); // br + + // inner top light lines + p->setPen(c.light(105)); + p->drawLine(x+2, y+1, x2-2, y+1); + p->drawLine(x+1, y+2, x2-1, y+2); + p->drawLine(x+1, y+3, x+2, y+3); + p->drawLine(x2-2, y+3, x2-1, y+3); + p->drawPoint(x+1, y+4); + p->drawPoint(x2-1, y+4); + + // inner bottom light lines + p->setPen(c.light(110)); + p->drawLine(x+2, y2-1, x2-2, y2-1); + p->drawLine(x+1, y2-2, x2-1, y2-2); + p->drawLine(x+1, y2-3, x+2, y2-3); + p->drawLine(x2-2, y2-3, x2-1, y2-3); + p->drawPoint(x+1, y2-4); + p->drawPoint(x2-1, y2-4); + + // inner left mid lines + //p->setPen(c.light(105)); + p->setPen(c); + p->drawLine(x+1, y+5, x+1, y2-5); + p->drawLine(x+2, y+4, x+2, y2-4); + + // inner right mid lines + p->drawLine(x2-1, y+5, x2-1, y2-5); + p->drawLine(x2-2, y+4, x2-2, y2-4); + + // fill + QPixmap *pix; + if(h >= 32){ + pix = bevelFillDict.find(c.rgb()); + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*bevelFillPix); + adjustHSV(*pix, h, s, v); + bevelFillDict.insert(c.rgb(), pix); + } + } + else{ + pix = smallBevelFillDict.find(c.rgb()); + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*smallBevelFillPix); + adjustHSV(*pix, h, s, v); + smallBevelFillDict.insert(c.rgb(), pix); + } + } + p->drawTiledPixmap(x+3, y+3, w-6, h-6, *pix); + // blend + int red, green, blue; + QColor btnColor(c.dark(130)); + red = (btnColor.red() >> 1) + (bg.red() >> 1); + green = (btnColor.green() >> 1) + (bg.green() >> 1); + blue = (btnColor.blue() >> 1) + (bg.blue() >> 1); + btnColor.setRgb(red, green, blue); + + p->setPen(btnColor); + p->drawPoint(x+1, y); + p->drawPoint(x, y+1); + p->drawPoint(x+1, y2); + p->drawPoint(x, y2-1); + + p->drawPoint(x2-1, y); + p->drawPoint(x2, y+1); + p->drawPoint(x2-1, y2); + p->drawPoint(x2, y2-1); + + p->setPen(oldPen); + +} + +void LiquidStyle::drawRoundButton(QPainter *painter, const QColor &c, + const QColor &back, int x, int y, int w, int h, + bool supportPushDown, bool pushedDown, + bool autoDefault, bool isMasked) +{ + if(w < 21 || h < 21){ + drawClearBevel(painter, x, y, w, h, c, back); + return; + } + if(supportPushDown){ + --w, --h; + } + /* We don't make the round buttons smaller, since they don't look as good + if(autoDefault){ + w = w-buttonDefaultIndicatorWidth()*2; + h = h-buttonDefaultIndicatorWidth()*2; + }*/ + + + QPixmap *pix = btnDict.find(c.rgb()); + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*btnBorderPix); + adjustHSV(*pix, h, s, v); + btnDict.insert(c.rgb(), pix); + } + int x2 = x+w-1; + int y2 = y+h-1; + int bx2 = pix->width()-1; + int by2 = pix->height()-1; + + QPixmap tmpPix(w, h); + QPixmap tilePix; + QPainter p; + p.begin(&tmpPix); + + // do the fill + p.drawPixmap(0, 0, *pix, 0, 0, 10, 10); // tl + p.drawPixmap(x2-9, 0, *pix, bx2-9, 0, 10, 10); // tr + p.drawPixmap(0, y2-9, *pix, 0, by2-9, 10, 10); // bl + p.drawPixmap(x2-9, y2-9, *pix, bx2-9, by2-9, 10, 10); // br + + // edges + tilePix.resize(pix->width()-20, 10); + // top + bitBlt(&tilePix, 0, 0, pix, 10, 0, pix->width()-20, 10); + p.drawTiledPixmap(10, 0, w-20, 10, tilePix); + // bottom + bitBlt(&tilePix, 0, 0, pix, 10, by2-9, pix->width()-20, 20); + p.drawTiledPixmap(10, y2-9, w-20, 10, tilePix); + // left + tilePix.resize(10, pix->height()-20); + bitBlt(&tilePix, 0, 0, pix, 0, 10, 10, pix->height()-20); + p.drawTiledPixmap(0, 10, 10, h-20, tilePix); + // right + bitBlt(&tilePix, 0, 0, pix, bx2-9, 10, 10, pix->height()-20); + p.drawTiledPixmap(x2-9, 10, 10, h-20, tilePix); + + // middle + tilePix.resize(pix->width()-20, pix->height()-20); + bitBlt(&tilePix, 0, 0, pix, 10, 10, pix->width()-20, pix->height()-20); + p.drawTiledPixmap(10, 10, w-20, h-20, tilePix); + + + // do the blend + QBitmap blendMask; + if(!isMasked){ + //QRgb bgRgb = back.rgb(); + //QRgb fgRgb = c.rgb(); + //int r, g, b; + + //r = (int)(qRed(bgRgb)*0.75 + qRed(fgRgb)*0.25); + //g = (int)(qGreen(bgRgb)*0.75 + qGreen(fgRgb)*0.25); + //b = (int)(qBlue(bgRgb)*0.75 + qBlue(fgRgb)*0.25); + //QColor blendColor(r, g, b); + int hue, sat, v1, v2; + QColor blendColor(autoDefault ? c : back); + back.hsv(&hue, &sat, &v1); + blendColor.hsv(&hue, &sat, &v2); + if(v2 > v1) + blendColor.setHsv(hue, sat, (int)(v1*0.75 + v2*0.25)); + + pix = btnBorderDict.find(blendColor.rgb()); + if(!pix){ + int h, s, v; + blendColor.hsv(&h, &s, &v); + pix = new QPixmap(*btnBlendPix); + adjustHSV(*pix, h, s, v); + btnBorderDict.insert(blendColor.rgb(), pix); + } + } + else{ + pix = pushedDown ? getPixmap(HTMLBtnBorderDown) : + getPixmap(HTMLBtnBorder); + } + p.drawPixmap(0, 0, *pix, 0, 0, 10, 10); // tl + p.drawPixmap(x2-9, 0, *pix, bx2-9, 0, 10, 10); // tr + p.drawPixmap(0, y2-9, *pix, 0, by2-9, 10, 10); // bl + p.drawPixmap(x2-9, y2-9, *pix, bx2-9, by2-9, 10, 10); // br + + // edges + tilePix.resize(pix->width()-20, 10); + blendMask.resize(pix->width()-20, 10); + // top + bitBlt(&tilePix, 0, 0, pix, 10, 0, pix->width()-20, 10); + bitBlt(&blendMask, 0, 0, pix->mask(), 10, 0, pix->width()-20, 10); + tilePix.setMask(blendMask); + p.drawTiledPixmap(10, 0, w-20, 10, tilePix); + // bottom + bitBlt(&tilePix, 0, 0, pix, 10, by2-9, pix->width()-20, 20); + bitBlt(&blendMask, 0, 0, pix->mask(), 10, by2-9, pix->width()-20, 20); + tilePix.setMask(blendMask); + p.drawTiledPixmap(10, y2-9, w-20, 10, tilePix); + // left + tilePix.resize(10, pix->height()-20); + blendMask.resize(10, pix->height()-20); + bitBlt(&tilePix, 0, 0, pix, 0, 10, 10, pix->height()-20); + bitBlt(&blendMask, 0, 0, pix->mask(), 0, 10, 10, pix->height()-20); + tilePix.setMask(blendMask); + p.drawTiledPixmap(0, 10, 10, h-20, tilePix); + // right + bitBlt(&tilePix, 0, 0, pix, bx2-9, 10, 10, pix->height()-20); + bitBlt(&blendMask, 0, 0, pix->mask(), bx2-9, 10, 10, pix->height()-20); + tilePix.setMask(blendMask); + p.drawTiledPixmap(x2-9, 10, 10, h-20, tilePix); + + p.end(); + + // do the button mask - we don't automask buttons + QBitmap btnMask(w, h); + QBitmap *mask = isMasked ? &htmlBtnMaskBmp : &btnMaskBmp; + p.begin(&btnMask); + p.fillRect(0, 0, w, h, Qt::color0); + p.drawPixmap(0, 0, *mask, 0, 0, 10, 10); // tl + p.drawPixmap(x2-9, 0, *mask, bx2-9, 0, 10, 10); // tr + p.drawPixmap(0, y2-9, *mask, 0, by2-9, 10, 10); // bl + p.drawPixmap(x2-9, y2-9, *mask, bx2-9, by2-9, 10, 10); // br + // fills + p.fillRect(10, 0, w-20, 10, Qt::color1); // top + p.fillRect(10, y2-9, w-20, 10, Qt::color1); // bottom + p.fillRect(0, 10, w, h-20, Qt::color1); // middle + p.end(); + tmpPix.setMask(btnMask); + /*if(autoDefault){ + if(supportPushDown && pushedDown){ + painter->drawPixmap(x+3, y+3, tmpPix); + } + else{ + painter->drawPixmap(x+2, y+2, tmpPix); + } + } + else */if(supportPushDown && pushedDown) + painter->drawPixmap(x+1, y+1, tmpPix); + else + painter->drawPixmap(x, y, tmpPix); + + + +} + + +QPixmap* LiquidStyle::processEmbedded(const char *label, int h, int s, int v, + bool blend) +{ + QImage img(qembed_findImage(label)); + img.detach(); + if(img.isNull()){ // shouldn't happen, been tested + qWarning("Invalid embedded label %s", label); + return(NULL); + } + if(img.depth() != 32) + img = img.convertDepth(32); + unsigned int *data = (unsigned int *)img.bits(); + int total = img.width()*img.height(); + int current; + QColor c; + int oldH, oldS, oldV; + int alpha; + if(v < 235) + v += 20; + else + v = 255; + float intensity = v/255.0; + + for(current=0; currentconvertFromImage(img); + return(pix); +} + + + + +QPixmap* LiquidStyle::getPixmap(BitmapData item) +{ + + if(pixmaps[item]) + return(pixmaps[item]); + + switch(item){ + case HTMLBtnBorder: + pixmaps[HTMLBtnBorder] = processEmbedded("htmlbtnborder", btnH, btnS, btnV); + break; + case HTMLBtnBorderDown: + pixmaps[HTMLBtnBorderDown] = processEmbedded("htmlbtnborder", btnHoverH, btnHoverS, btnHoverV); + break; + case HTMLCB: + pixmaps[HTMLCB] = processEmbedded("htmlcheckbox", bH, bS, bV); + break; + case HTMLCBDown: + pixmaps[HTMLCBDown] = processEmbedded("htmlcheckboxdown", btnH, btnS, btnV); + break; + case HTMLCBHover: + pixmaps[HTMLCBHover] = processEmbedded("htmlcheckbox", btnH, btnS, btnV); + break; + case HTMLCBDownHover: + pixmaps[HTMLCBDownHover] = processEmbedded("htmlcheckboxdown", + btnHoverH, btnHoverS, + btnHoverV); + break; + case HTMLRadio: + pixmaps[HTMLRadio] = processEmbedded("htmlradio", bH, bS, bV); + case HTMLRadioDown: + pixmaps[HTMLRadioDown] = processEmbedded("htmlradiodown", btnH, btnS, btnV); + case HTMLRadioHover: + pixmaps[HTMLRadioHover] = processEmbedded("htmlradio", btnH, btnS, btnV); + case HTMLRadioDownHover: + pixmaps[HTMLRadioDownHover] = processEmbedded("htmlradiodown", + btnHoverH, btnHoverS, + btnHoverV); + case RadioOn: + pixmaps[RadioOn] = processEmbedded("radio_down", btnH, btnS, btnV, true); + break; + case RadioOnHover: + pixmaps[RadioOnHover] = processEmbedded("radio_down", btnHoverH, btnHoverS, + btnHoverV, true); + break; + case RadioOffHover: + pixmaps[RadioOffHover] = processEmbedded("radio", btnH, btnS, btnV, true); + break; + case TabDown: + pixmaps[TabDown] = processEmbedded("tab", btnH, btnS, btnV, true); + break; + case TabFocus: + pixmaps[TabFocus] = processEmbedded("tab", btnHoverH, btnHoverS, + btnHoverS, true); + break; + case CBDown: + pixmaps[CBDown] = processEmbedded("checkboxdown", btnH, btnS, btnV, true); + break; + case CBDownHover: + pixmaps[CBDownHover] = processEmbedded("checkboxdown", btnHoverH, + btnHoverS, btnHoverV, true); + break; + case CBHover: + pixmaps[CBHover] = processEmbedded("checkbox", btnH, btnS, btnV, true); + break; + case HSlider: + pixmaps[HSlider] = processEmbedded("sliderarrow", btnH, btnS, btnV, true); + break; + case VSlider: + pixmaps[VSlider] = processEmbedded("sliderarrow", btnH, btnS, btnV, true); + *pixmaps[VSlider] = pixmaps[VSlider]->xForm(rMatrix); + break; + case RadioOff: + pixmaps[RadioOff] = processEmbedded("radio", bH, bS, bV, true); + break; + case Tab: + pixmaps[Tab] = processEmbedded("tab", bH, bS, bV, true); + break; + case CB: + pixmaps[CB] = processEmbedded("checkbox", bH, bS, bV, true); + break; + case VSBSliderTop: + pixmaps[VSBSliderTop] = processEmbedded("sbslider_top", btnH, btnS, btnV, true); + break; + case VSBSliderBtm: + pixmaps[VSBSliderBtm] = processEmbedded("sbslider_btm", btnH, btnS, btnV, true); + break; + case VSBSliderMid: + pixmaps[VSBSliderMid] = processEmbedded("sbslider_mid", btnH, btnS, btnV); + break; + case VSBSliderTopHover: + pixmaps[VSBSliderTopHover] = processEmbedded("sbslider_top", btnHoverH, btnHoverS, btnHoverV, true); + break; + case VSBSliderBtmHover: + pixmaps[VSBSliderBtmHover] = processEmbedded("sbslider_btm", btnHoverH, btnHoverS, btnHoverV, true); + break; + case VSBSliderMidHover: + pixmaps[VSBSliderMidHover] = processEmbedded("sbslider_mid", btnHoverH, btnHoverS, btnHoverV); + break; + + case HSBSliderTop: + pixmaps[HSBSliderTop] = processEmbedded("sbslider_top", btnH, btnS, btnV, true); + *pixmaps[HSBSliderTop] = pixmaps[HSBSliderTop]->xForm(rMatrix); + break; + case HSBSliderBtm: + pixmaps[HSBSliderBtm] = processEmbedded("sbslider_btm", btnH, btnS, btnV, true); + *pixmaps[HSBSliderBtm] = pixmaps[HSBSliderBtm]->xForm(rMatrix); + break; + case HSBSliderMid: + pixmaps[HSBSliderMid] = processEmbedded("sbslider_mid", btnH, btnS, btnV); + *pixmaps[HSBSliderMid] = pixmaps[HSBSliderMid]->xForm(rMatrix); + break; + case HSBSliderTopHover: + pixmaps[HSBSliderTopHover] = processEmbedded("sbslider_top", btnHoverH, btnHoverS, btnHoverV, true); + *pixmaps[HSBSliderTopHover] = pixmaps[HSBSliderTopHover]->xForm(rMatrix); + break; + case HSBSliderBtmHover: + pixmaps[HSBSliderBtmHover] = processEmbedded("sbslider_btm", btnHoverH, btnHoverS, btnHoverV, true); + *pixmaps[HSBSliderBtmHover] = pixmaps[HSBSliderBtmHover]->xForm(rMatrix); + break; + case HSBSliderMidHover: + pixmaps[HSBSliderMidHover] = processEmbedded("sbslider_mid", btnHoverH, btnHoverS, btnHoverV); + *pixmaps[HSBSliderMidHover] = pixmaps[HSBSliderMidHover]->xForm(rMatrix); + break; + case VSBSliderTopBg: + pixmaps[VSBSliderTopBg] = processEmbedded("sbslider_top", bH, bS, bV, true); + break; + case VSBSliderBtmBg: + pixmaps[VSBSliderBtmBg] = processEmbedded("sbslider_btm", bH, bS, bV, true); + break; + case VSBSliderMidBg: + pixmaps[VSBSliderMidBg] = processEmbedded("sbslider_mid", bH, bS, bV); + break; + case HSBSliderTopBg: + pixmaps[HSBSliderTopBg] = processEmbedded("sbslider_top", bH, bS, bV, true); + *pixmaps[HSBSliderTopBg] = pixmaps[HSBSliderTopBg]->xForm(rMatrix); + break; + case HSBSliderBtmBg: + pixmaps[HSBSliderBtmBg] = processEmbedded("sbslider_btm", bH, bS, bV, true); + *pixmaps[HSBSliderBtmBg] = pixmaps[HSBSliderBtmBg]->xForm(rMatrix); + break; + case HSBSliderMidBg: + pixmaps[HSBSliderMidBg] = processEmbedded("sbslider_mid", bH, bS, bV); + *pixmaps[HSBSliderMidBg] = pixmaps[HSBSliderMidBg]->xForm(rMatrix); + break; + default: + break; + } + return(pixmaps[item]); +} + +void LiquidStyle::polish(QPalette &appPal) +{ + + int i; + for(i=0; i < BITMAP_ITEMS; ++i){ + if(pixmaps[i]){ + delete pixmaps[i]; + pixmaps[i] = NULL; + } + } + QWidgetList *list = QApplication::allWidgets(); + QWidgetListIt it( *list ); + QWidget *w; + while ((w=it.current()) != 0 ){ + ++it; + if(w->inherits("QPushButton")){ + unapplyCustomAttributes((QPushButton *)w); + } + } + + loadCustomButtons(); + lowLightVal = 100 + (2* /*KGlobalSettings::contrast()*/ 3 +4)*10; + btnDict.clear(); + btnBorderDict.clear(); + bevelFillDict.clear(); + smallBevelFillDict.clear(); + + Config config ( "qpe" ); + QPalette pal = QApplication::palette(); + + // button color stuff + config. setGroup ( "Appearance" ); + QColor c = QColor ( config. readEntry("Button", ( Qt::lightGray ). name ( ))); + if ( c == QColor ( config. readEntry ( "background", ( Qt::lightGray ). name ( )))) { + // force button color to be different from background + QBrush btnBrush(QColor(200, 202, 228)); + appPal.setBrush(QColorGroup::Button, btnBrush); + } + c.hsv(&btnH, &btnS, &btnV); + c.light(120).hsv(&btnHoverH, &btnHoverS, &btnHoverV); + + // menu pixmap + if(!menuPix){ + menuPix = new QPixmap; + menuPix->resize(64, 64); + } + QPainter painter; + menuPix->fill(c.rgb()); + painter.begin(menuPix); + painter.setPen(c.dark(105)); + for(i=0; i < 63; i+=4){ + painter.drawLine(0, i, 63, i); + painter.drawLine(0, i+1, 63, i+1); + }; + painter.end(); + menuBrush.setColor(c); + menuBrush.setPixmap(*menuPix); + + // pager brush + c = c.dark(120); + QPixmap *pix = smallBevelFillDict.find(c.rgb()); // better be NULL ;-) + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*smallBevelFillPix); + adjustHSV(*pix, h, s, v); + smallBevelFillDict.insert(c.rgb(), pix); + } + pagerHoverBrush.setColor(c); + pagerHoverBrush.setPixmap(*pix); + + c = c.dark(120); + pix = smallBevelFillDict.find(c.rgb()); // better be NULL ;-) + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*smallBevelFillPix); + adjustHSV(*pix, h, s, v); + smallBevelFillDict.insert(c.rgb(), pix); + } + pagerBrush.setColor(c); + pagerBrush.setPixmap(*pix); + + // background color stuff + c = QColor ( config. readEntry ( "Background", ( Qt::lightGray ).name ( ))); + c.hsv(&bH, &bS, &bV); + c.light(120).hsv(&bHoverH, &bHoverS, &bHoverV); + + // FIXME? + if(vsbSliderFillPix) + delete vsbSliderFillPix; + vsbSliderFillPix = new QPixmap(bevelFillPix->xForm(rMatrix)); + adjustHSV(*vsbSliderFillPix, bH, bS, bV); + + // background brush + QPixmap wallPaper(32, 32); + wallPaper.fill(c.rgb()); + painter.begin(&wallPaper); + for(i=0; i < 32; i+=4){ + painter.setPen(c.dark(105)); + painter.drawLine(0, i, 32, i); + painter.setPen(c.dark(103)); + painter.drawLine(0, i+1, 32, i+1); + }; + painter.end(); + bgBrush.setColor(c); + bgBrush.setPixmap(wallPaper); + appPal.setBrush(QColorGroup::Background, bgBrush); + + // lineedits + c = QColor ( config. readEntry("Base", ( Qt::white). name ( ))); + QPixmap basePix; + basePix.resize(32, 32); + basePix.fill(c.rgb()); + painter.begin(&basePix); + painter.setPen(c.dark(105)); + for(i=0; i < 32; i+=4){ + painter.drawLine(0, i, 32, i); + painter.drawLine(0, i+1, 32, i+1); + }; + painter.end(); + baseBrush.setColor(c); + baseBrush.setPixmap(basePix); + it.toFirst(); + while ((w=it.current()) != 0 ){ + ++it; + if(w->inherits("QLineEdit")){ + QPalette pal = w->palette(); + pal.setBrush(QColorGroup::Base, baseBrush); + w->setPalette(pal); + } + else if(w->inherits("QPushButton")){ + applyCustomAttributes((QPushButton *)w); + } + } + +} + +void LiquidStyle::polish(QWidget *w) +{ + if(w->inherits("QMenuBar")){ + //((QFrame*)w)->setLineWidth(0); + w->setBackgroundMode(QWidget::PaletteBackground); + return; + } + if(w->inherits("QPopupMenu")) + w->setBackgroundMode(QWidget::NoBackground); + + if(w->isTopLevel()){ + return; + } + + w-> setBackgroundOrigin ( QWidget::ParentOrigin ); + + if(w->inherits("QComboBox") || + w->inherits("QLineEdit") || w->inherits("QRadioButton") || + w->inherits("QCheckBox") || w->inherits("QScrollBar")) { + w->installEventFilter(this); + } + if(w->inherits("QLineEdit")){ + QPalette pal = w->palette(); + pal.setBrush(QColorGroup::Base, baseBrush); + w->setPalette(pal); + } + if(w->inherits("QPushButton")){ + applyCustomAttributes((QPushButton *)w); + w->installEventFilter(this); + } + if(w->inherits("QButton") || w-> inherits("QComboBox")){ + w-> setBackgroundMode ( QWidget::PaletteBackground ); + } + + bool isViewport = qstrcmp(w->name(), "qt_viewport") == 0 || + qstrcmp(w->name(), "qt_clipped_viewport") == 0; + bool isViewportChild = w->parent() && + ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) || + (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0)); + + if(isViewport && w->parent() && qstrcmp(w->parent()->name(), "proxyview") == 0){ + w->setBackgroundMode(QWidget::X11ParentRelative); + return; + } + if(isViewportChild){ + if(w->inherits("QButton") || w->inherits("QComboBox")){ + if(w->parent()){ // heh, only way to test for KHTML children ;-) + if(w->parent()->parent()){ + if(w->parent()->parent()->parent() && + w->parent()->parent()->parent()->inherits("KHTMLView")){ + w->setAutoMask(true); + w->setBackgroundMode(QWidget::NoBackground); + } + } + } + return; + } + } + if(w->inherits("QHeader")){ + w->setMouseTracking(true); + w->installEventFilter(this); + } + if(w-> inherits("QToolButton")) { + ((QToolButton*)w)->setAutoRaise (false); + } + if(w->ownPalette() && !w->inherits("QButton") && !w->inherits("QComboBox")){ + return; + } + + if(w->parent() && w->parent()->isWidgetType() && !((QWidget*)w->parent())-> + palette().active().brush(QColorGroup::Background).pixmap()){ + qWarning("No parent pixmap for child widget %s", w->className()); + return; + } + if(!isViewport && !isViewportChild && !w->testWFlags(WType_Popup) && + !( !w-> inherits("QLineEdit") && w-> parent() && w-> parent()-> isWidgetType ( ) && w-> parent()-> inherits ( "QMultiLineEdit" ))) { + if(w->backgroundMode() == QWidget::PaletteBackground || + w->backgroundMode() == QWidget::PaletteButton){ + w->setBackgroundMode(QWidget::X11ParentRelative); + } + } + if(w->inherits("QToolBar")){ + w->installEventFilter(this); + w->setBackgroundMode(QWidget::PaletteBackground); + return; + } + +} + +void LiquidStyle::unPolish(QWidget *w) +{ + if(w->inherits("QMenuBar")){ + ((QFrame *)w)->setLineWidth(1); + w->setBackgroundMode(QWidget::PaletteBackground); + return; + } + + if(w->inherits("QPopupMenu")) + w->setBackgroundMode(QWidget::PaletteButton); + + if(w->isTopLevel()) + return; + + // for viewport children, don't just check for NoBackground.... + bool isViewportChild = w->parent() && + ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) || + (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0)); + + w->setPalette(QApplication::palette()); + if(w->backgroundMode() == QWidget::X11ParentRelative || isViewportChild){ + if(w->inherits("QPushButton")) + w->setBackgroundMode(QWidget::PaletteButton); + else + w->setBackgroundMode(QWidget::PaletteBackground); + } + + if(isViewportChild) + w->setAutoMask(false); + + if(w->inherits("QPushButton")){ + unapplyCustomAttributes((QPushButton *)w); + w->removeEventFilter(this); + } +/* + if(w->inherits("QPushButton") || w-> inherits("QComboBox")){ + w-> setBackgroundMode ( PaletteBackground ); + } +*/ + if(w->inherits("QComboBox") || + w->inherits("QLineEdit") || w->inherits("QRadioButton") || + w->inherits("QCheckBox") || w->inherits("QScrollBar")) { + w->removeEventFilter(this); + } + if(w->inherits("QButton") || w->inherits("QComboBox")){ + if(w->parent() && w->parent()->inherits("KHTMLPart")){ + w->setAutoMask(false); + } + } + if(w->inherits("QToolBar")){ + w->removeEventFilter(this); + w->setBackgroundMode(QWidget::PaletteBackground); + return; + } + if(w->inherits("QHeader")){ + w->setMouseTracking(false); + w->removeEventFilter(this); + } +} + +void LiquidStyle::polish(QApplication *app) +{ + + QWindowsStyle::polish(app); + menuAni = app->isEffectEnabled(UI_AnimateMenu); + menuFade = app->isEffectEnabled(UI_FadeMenu); + if(menuAni) + app->setEffectEnabled(UI_AnimateMenu, false); + if(menuFade) + app->setEffectEnabled(UI_FadeMenu, false); + + qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &LiquidStyle::drawMenuBarItem); +} + +void LiquidStyle::unPolish(QApplication *app) +{ + QWindowsStyle::unPolish(app); + app->setEffectEnabled(UI_AnimateMenu, menuAni); + app->setEffectEnabled(UI_FadeMenu, menuFade); + + qt_set_draw_menu_bar_impl ( 0 ); +} + +/* + * This is a fun method ;-) Here's an overview. KToolBar grabs resize to + * force everything to erase and repaint on resize. This is going away, I'm + * trying to get shaped widgets to work right without masking. QPushButton, + * QComboBox, and Panel applet handles capture mouse enter and leaves in order + * to set the highlightwidget and repaint for mouse hovers. CheckBoxes and + * RadioButtons need to do this differently. Qt buffers these in pixmaps and + * caches them in QPixmapCache, which is bad for doing things like hover + * because the style methods aren't called in paintEvents if everything + * is cached. We use our own Paint event handler instead. Taskbuttons and + * pager buttons draw into a pixmap buffer, so we handle those with palette + * modifications. For QHeader, different header items are actually one widget + * that draws multiple items, so we need to check which ID is hightlighted + * and draw it. Finally, we also check enter and leave events for QLineEdit, + * since if it's inside a combobox we want to highlight the combobox during + * hovering in the edit. + */ +bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) +{ + if(obj->inherits("QToolBar")){ + if(ev->type() == QEvent::Resize){ + const QObjectList *tbChildList = obj->children(); + QObjectListIt it(*tbChildList); + QObject *child; + while((child = it.current()) != NULL){ + ++it; + if(child->isWidgetType()) + ((QWidget *)child)->repaint(true); + } + + } + } + else if(obj->inherits("QPushButton") || obj->inherits("QComboBox")){ + QWidget *btn = (QWidget *)obj; + if(ev->type() == QEvent::Enter){ + if(btn->isEnabled()){ + highlightWidget = btn; + btn->repaint(false); + } + } + else if(ev->type() == QEvent::Leave){ + if(btn == highlightWidget){ + highlightWidget = NULL; + btn->repaint(false); + } + } + } + else if(obj->inherits("QToolButton")){ + QToolButton *btn = (QToolButton *)btn; + if(!btn->autoRaise()){ + if(btn->isEnabled()){ + highlightWidget = btn; + btn->repaint(false); + } + } + else if(ev->type() == QEvent::Leave){ + QWidget *btn = (QWidget *)obj; + if(btn == highlightWidget){ + highlightWidget = NULL; + btn->repaint(false); + } + } + else + highlightWidget = NULL; + } + else if(obj->inherits("QScrollBar")){ + QScrollBar *sb = (QScrollBar *)obj; + if(ev->type() == QEvent::Enter){ + if(sb->isEnabled()){ + highlightWidget = sb; + sb->repaint(false); + } + } + else if(ev->type() == QEvent::Leave){ + if(sb == highlightWidget && !sb->draggingSlider()){ + highlightWidget = NULL; + sb->repaint(false); + } + } + else if(ev->type() == QEvent::MouseButtonRelease){ + QMouseEvent *me = (QMouseEvent *)ev; + if(sb == highlightWidget && !sb->rect().contains(me->pos())){ + highlightWidget = NULL; + sb->repaint(false); + } + } + } + else if(obj->inherits("QLineEdit")){ + if(obj->parent() && obj->parent()->inherits("QComboBox")){ + QWidget *btn = (QComboBox *)obj->parent(); + if(ev->type() == QEvent::Enter){ + if (btn->isEnabled()){ + highlightWidget = btn; + btn->repaint(false); + } + } + else if(ev->type() == QEvent::Leave){ + if (btn == highlightWidget) + highlightWidget = NULL; + btn->repaint(false); + } + } + } + else if(obj->inherits("QRadioButton") || obj->inherits("QCheckBox")){ + QButton *btn = (QButton *)obj; + bool isRadio = obj->inherits("QRadioButton"); + if(ev->type() == QEvent::Paint){ + //if(btn->autoMask()) + btn->erase(); + QPainter p; + p.begin(btn); + QFontMetrics fm = btn->fontMetrics(); + QSize lsz = fm.size(ShowPrefix, btn->text()); + QSize sz = isRadio ? exclusiveIndicatorSize() + : indicatorSize(); + + if(btn->hasFocus()){ + QRect r = QRect(0, 0, btn->width(), btn->height()); + p.setPen(btn->colorGroup().button().dark(140)); + p.drawLine(r.x()+1, r.y(), r.right()-1, r.y()); + p.drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); + p.drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); + p.drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom()); + } + int x = 0; + int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2; + if(isRadio) + drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(), + btn->colorGroup(), btn->isOn(), + btn->isDown(), btn->isEnabled()); + else + drawIndicator(&p, x, y, sz.width(), sz.height(), + btn->colorGroup(), btn->state(), btn->isDown(), + btn->isEnabled()); + x = sz.width() + 6; + y = 0; + drawItem(&p, sz.width()+6+1, 0, btn->width()-(sz.width()+6+1), + btn->height(), AlignLeft|AlignVCenter|ShowPrefix, + btn->colorGroup(), btn->isEnabled(), + btn->pixmap(), btn->text()); + p.end(); + return(true); + } + // for hover, just redraw the indicator (not the text) + else if((ev->type() == QEvent::Enter && btn->isEnabled()) || + (ev->type() == QEvent::Leave && btn == highlightWidget)){ + QButton *btn = (QButton *)obj; + bool isRadio = obj->inherits("QRadioButton"); + + if(ev->type() == QEvent::Enter) + highlightWidget = btn; + else + highlightWidget = NULL; + QFontMetrics fm = btn->fontMetrics(); + QSize lsz = fm.size(ShowPrefix, btn->text()); + QSize sz = isRadio ? exclusiveIndicatorSize() + : indicatorSize(); + int x = 0; + int y = (btn->height()-lsz.height()+fm.height()-sz.height())/2; + //if(btn->autoMask()) + // btn->erase(x+1, y+1, sz.width()-2, sz.height()-2); + QPainter p; + p.begin(btn); + if(isRadio) + drawExclusiveIndicator(&p, x, y, sz.width(), sz.height(), + btn->colorGroup(), btn->isOn(), + btn->isDown(), btn->isEnabled()); + else + drawIndicator(&p, x, y, sz.width(), sz.height(), + btn->colorGroup(), btn->state(), btn->isDown(), + btn->isEnabled()); + p.end(); + } + } + else if(obj->inherits("QHeader")){ + QHeader *hw = (QHeader *)obj; + if(ev->type() == QEvent::Enter){ + currentHeader = hw; + headerHoverID = -1; + } + else if(ev->type() == QEvent::Leave){ + currentHeader = NULL; + if(headerHoverID != -1){ + hw->repaint(hw->sectionPos(headerHoverID), 0, + hw->sectionSize(headerHoverID), hw->height()); + } + headerHoverID = -1; + } + else if(ev->type() == QEvent::MouseMove){ + QMouseEvent *me = (QMouseEvent *)ev; + int oldHeader = headerHoverID; + headerHoverID = hw->sectionAt(me->x()); + if(oldHeader != headerHoverID){ + // reset old header + if(oldHeader != -1){ + hw->repaint(hw->sectionPos(oldHeader), 0, + hw->sectionSize(oldHeader), hw->height()); + } + if(headerHoverID != -1){ + hw->repaint(hw->sectionPos(headerHoverID), 0, + hw->sectionSize(headerHoverID), hw->height()); + } + } + } + } + return(false); +} + +void LiquidStyle::drawButton(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken, + const QBrush *) +{ + drawRoundButton(p, sunken ? g.background() : g.button(), g.background(), + x, y, w, h); +} + +void LiquidStyle::drawToolButton(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken, + const QBrush *) +{ + if(p->device()->devType() != QInternal::Widget){ + // drawing into a temp pixmap, don't use mask + QColor c = sunken ? g.button() : g.background(); + p->setPen(c.dark(130)); + p->drawRect(x, y, w, h); + p->setPen(c.light(105)); + p->drawRect(x+1, y+1, w-2, h-2); + + + // fill + QPixmap *pix = bevelFillDict.find(c.rgb()); + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*bevelFillPix); + adjustHSV(*pix, h, s, v); + bevelFillDict.insert(c.rgb(), pix); + } + + p->drawTiledPixmap(x+2, y+2, w-4, h-4, *pix); + } + else{ + drawClearBevel(p, x, y, w, h, sunken ? g.button() : + highlightWidget == p->device() ? g.button().light(110) : + g.background(), g.background()); + } +} + +void LiquidStyle::drawPushButton(QPushButton *btn, QPainter *p) +{ + QRect r = btn->rect(); + bool sunken = btn->isOn() || btn->isDown(); + QColorGroup g = btn->colorGroup(); + + + //int dw = buttonDefaultIndicatorWidth(); + if(btn->hasFocus() || btn->isDefault()){ + QColor c = btn->hasFocus() ? g.button().light(110) : g.background(); + QPixmap *pix = bevelFillDict.find(c.rgb()); + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*bevelFillPix); + adjustHSV(*pix, h, s, v); + bevelFillDict.insert(c.rgb(), pix); + } + p->setPen(c.dark(150)); + p->drawLine(r.x()+1, r.y(), r.right()-1, r.y()); + p->drawLine(r.x(), r.y()+1, r.x(), r.bottom()-1); + p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()-1); + p->drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom()); + p->drawTiledPixmap(r.x()+1, r.y()+1, r.width()-2, r.height()-2, *pix); + } + + QColor newColor = btn == highlightWidget || sunken ? + g.button().light(120) : g.button(); + + drawRoundButton(p, newColor, g.background(), + r.x(), r.y(), r.width(), r.height(), !btn->autoMask(), + sunken, btn->isDefault() || btn->autoDefault() || btn->hasFocus(), + btn->autoMask()); +} + +void LiquidStyle::drawPushButtonLabel(QPushButton *btn, QPainter *p) +{ + int x1, y1, x2, y2, w, h; + btn->rect().coords(&x1, &y1, &x2, &y2); + w = btn->width(); + h = btn->height(); + + bool act = btn->isOn() || btn->isDown(); + if(act){ + ++x1, ++y1; + } + + // Draw iconset first, if any + if ( btn->iconSet() && !btn->iconSet()->isNull() ) + { + QIconSet::Mode mode = btn->isEnabled() + ? QIconSet::Normal : QIconSet::Disabled; + if ( mode == QIconSet::Normal && btn->hasFocus() ) + mode = QIconSet::Active; + QPixmap pixmap = btn->iconSet()->pixmap( QIconSet::Small, mode ); + int pixw = pixmap.width(); + int pixh = pixmap.height(); + + p->drawPixmap( x1+6, y1+h/2-pixh/2, pixmap ); + x1 += pixw + 8; + w -= pixw + 8; + } + + if(act){ + QFont font = btn->font(); + font.setBold(true); + p->setFont(font); + QColor shadow(btn->colorGroup().button().dark(130)); + drawItem( p, x1+1, y1+1, w, h, + AlignCenter | ShowPrefix, btn->colorGroup(), btn->isEnabled(), + btn->pixmap(), btn->text(), -1, + &shadow); + + drawItem( p, x1, y1, w, h, + AlignCenter | ShowPrefix, btn->colorGroup(), btn->isEnabled(), + btn->pixmap(), btn->text(), -1, &btn->colorGroup().light()); + } + else{ + /* Too blurry + drawItem( p, x1+1, y1+1, w, h, + AlignCenter | ShowPrefix, btn->colorGroup(), btn->isEnabled(), + btn->pixmap(), btn->text(), -1, + &btn->colorGroup().button().dark(115)); + */ + drawItem( p, x1, y1, w, h, + AlignCenter | ShowPrefix, + btn->colorGroup(), btn->isEnabled(), + btn->pixmap(), btn->text(), -1, + &btn->colorGroup().buttonText()); + } +} + +void LiquidStyle::drawButtonMask(QPainter *p, int x, int y, int w, int h) +{ + int x2 = x+w-1; + int y2 = y+h-1; + + p->setPen(Qt::color1); + p->fillRect(x, y, w, h, Qt::color0); + if(w < 21 || h < 21){ + // outer rect + p->drawLine(x, y+2, x, y2-2); // l + p->drawLine(x2, y+2, x2, y2-2); // r + p->drawLine(x+2, y, x2-2, y); // t + p->drawLine(x+2, y2, x2-2, y2); // b + p->drawLine(x+1, y+1, x2-1, y+1); // top second line + p->drawLine(x+1, y2-1, x2-1, y2-1); // bottom second line + p->fillRect(x+1, y+2, w-2, h-4, Qt::color1); + } + else{ + int x2 = x+w-1; + int y2 = y+h-1; + int bx2 = htmlBtnMaskBmp.width()-1; + int by2 = htmlBtnMaskBmp.height()-1; + p->drawPixmap(0, 0, htmlBtnMaskBmp, 0, 0, 10, 10); // tl + p->drawPixmap(x2-9, 0, htmlBtnMaskBmp, bx2-9, 0, 10, 10); // tr + p->drawPixmap(0, y2-9, htmlBtnMaskBmp, 0, by2-9, 10, 10); // bl + p->drawPixmap(x2-9, y2-9, htmlBtnMaskBmp, bx2-9, by2-9, 10, 10); // br + // fills + p->fillRect(10, 0, w-20, 10, Qt::color1); // top + p->fillRect(10, y2-9, w-20, 10, Qt::color1); // bottom + p->fillRect(0, 10, w, h-20, Qt::color1); // middle + } +} + +void LiquidStyle::drawBevelButton(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken, + const QBrush */*fill*/) +{ + if(currentHeader && p->device() == currentHeader){ + int id = currentHeader->sectionAt(x); + bool isHeaderHover = id != -1 && id == headerHoverID; + drawClearBevel(p, x, y, w, h, sunken ? + g.button() : isHeaderHover ? g.button().light(110) : + g.background(), g.background()); + } + else + drawClearBevel(p, x, y, w, h, sunken ? g.button() : g.background(), + g.background()); +} + +QRect LiquidStyle::buttonRect(int x, int y, int w, int h) +{ + return(QRect(x+5, y+5, w-10, h-10)); +} + +void LiquidStyle::drawComboButton(QPainter *painter, int x, int y, int w, int h, + const QColorGroup &g, bool sunken, + bool edit, bool, const QBrush *) +{ + bool isHover = highlightWidget == painter->device(); + bool isMasked = false; + if(painter->device()->devType() == QInternal::Widget) + isMasked = ((QWidget*)painter->device())->autoMask(); + // TODO: Do custom code, don't just call drawRoundButton into a pixmap + QPixmap tmpPix(w, h); + QPainter p(&tmpPix); + + drawRoundButton(&p, g.button(), g.background(), 0, 0, w, h, false, + sunken, false, isMasked); + if(!isHover){ + p.setClipRect(0, 0, w-17, h); + drawRoundButton(&p, g.background(), g.background(), 0, 0, w, h, false, + sunken, false, isMasked); + } + p.end(); + int x2 = x+w-1; + int y2 = y+h-1; + int bx2 = btnMaskBmp.width()-1; + int by2 = btnMaskBmp.height()-1; + QBitmap btnMask(w, h); + QBitmap *mask = isMasked ? &htmlBtnMaskBmp : &btnMaskBmp; + p.begin(&btnMask); + p.fillRect(0, 0, w, h, Qt::color0); + p.drawPixmap(0, 0, *mask, 0, 0, 10, 10); // tl + p.drawPixmap(x2-9, 0, *mask, bx2-9, 0, 10, 10); // tr + p.drawPixmap(0, y2-9, *mask, 0, by2-9, 10, 10); // bl + p.drawPixmap(x2-9, y2-9, *mask, bx2-9, by2-9, 10, 10); // br + // fills + p.fillRect(10, 0, w-20, 10, Qt::color1); // top + p.fillRect(10, y2-9, w-20, 10, Qt::color1); // bottom + p.fillRect(0, 10, w, h-20, Qt::color1); // middle + p.end(); + tmpPix.setMask(btnMask); + + painter->drawPixmap(x, y, tmpPix); + + painter->setPen(g.button().dark(120)); + painter->drawLine(x2-16, y+1, x2-16, y2-1); + + if(edit){ + painter->setPen(g.mid()); + painter->drawRect(x+8, y+2, w-25, h-4); + } + int arrow_h = h / 3; + int arrow_w = arrow_h; + int arrow_x = w - arrow_w - 6; + int arrow_y = (h - arrow_h) / 2; + drawArrow(painter, DownArrow, false, arrow_x, arrow_y, arrow_w, arrow_h, g, true); +} + +void LiquidStyle::drawComboButtonMask(QPainter *p, int x, int y, int w, int h) +{ + drawButtonMask(p, x, y, w, h); +} + +QRect LiquidStyle::comboButtonRect(int x, int y, int w, int h) +{ + //return(QRect(x+3, y+3, w - (h / 3) - 13, h-6)); + return(QRect(x+9, y+3, w - (h / 3) - 20, h-6)); +} + +QRect LiquidStyle::comboButtonFocusRect(int x, int y, int w, int h) +{ + return(QRect(x+5, y+3, w-(h/3)-13, h-5)); +} + +void LiquidStyle::drawScrollBarControls(QPainter *p, const QScrollBar *sb, + int sliderStart, uint controls, + uint activeControl) +{ + bool isHover = highlightWidget == p->device(); + int sliderMin, sliderMax, sliderLength, buttonDim; + scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); + + if (sliderStart > sliderMax) + sliderStart = sliderMax; + + bool horiz = sb->orientation() == QScrollBar::Horizontal; + QColorGroup g = sb->colorGroup(); + QRect addB, subHC, subB; + QRect addPageR, subPageR, sliderR; + int addX, addY, subX, subY; + int len = horiz ? sb->width() : sb->height(); + int extent = horiz ? sb->height() : sb->width(); + + // a few apps (ie: KSpread), are broken and use a hardcoded scrollbar + // extent of 16. Luckily, most apps (ie: Kate), seem fixed by now. + bool brokenApp; + if(extent == 16) + brokenApp = true; + else + brokenApp = false; + + if (horiz) { + subY = addY = ( extent - buttonDim ) / 2; + subX = 0; + addX = len - buttonDim; + if(sbBuffer.size() != sb->size()) + sbBuffer.resize(sb->size()); + } + else { + subX = addX = ( extent - buttonDim ) / 2; + subY = 0; + addY = len - buttonDim; + if(sbBuffer.size() != sb->size()) + sbBuffer.resize(sb->size()); + } + subB.setRect( subX,subY,buttonDim,buttonDim ); + addB.setRect( addX,addY,buttonDim,buttonDim ); + if(horiz) + subHC.setRect(addX-buttonDim,addY,buttonDim,buttonDim ); + else + subHC.setRect(addX,addY-buttonDim,buttonDim,buttonDim ); + + int sliderEnd = sliderStart + sliderLength; + int sliderW = extent; + + if (horiz) { + subPageR.setRect( subB.right() + 1, 0, + sliderStart - subB.right() - 1 , sliderW ); + addPageR.setRect( sliderEnd, 0, addX - sliderEnd - buttonDim, sliderW ); + sliderR .setRect( sliderStart, 0, sliderLength, sliderW ); + } + else { + subPageR.setRect( 0, subB.bottom() + 1, sliderW, + sliderStart - subB.bottom() - 1 ); + addPageR.setRect( 0, sliderEnd, sliderW, addY - buttonDim - sliderEnd); + sliderR .setRect( 0, sliderStart, sliderW, sliderLength ); + } + + bool maxed = sb->maxValue() == sb->minValue(); + + QPainter painter; + if(!horiz){ + painter.begin(&sbBuffer); + QRect bgR(0, subB.bottom()+1, sb->width(), (len-(buttonDim*3))+1); + if(sliderR.height() >= 8){ + painter.drawPixmap(bgR.x()+1, bgR.y(), *vsbSliderFillPix, 0, 0, + 13, 8); + painter.drawPixmap(bgR.x()+1, bgR.y(), *getPixmap(VSBSliderTopBg)); + painter.drawTiledPixmap(bgR.x()+1, bgR.y()+8, 13, + bgR.height()-16, *getPixmap(VSBSliderMidBg)); + painter.drawPixmap(bgR.x()+1, bgR.bottom()-8, *vsbSliderFillPix, + 0, 0, 13, 8); + painter.drawPixmap(bgR.x()+1, bgR.bottom()-8, *getPixmap(VSBSliderBtmBg)); + } + else{ + painter.drawTiledPixmap(bgR.x()+1, bgR.y(), 13, bgR.height(), + *getPixmap(VSBSliderMidBg)); + painter.setPen(g.background().dark(210)); + painter.drawRect(bgR.x()+1, bgR.y(), 13, bgR.height()-1); + painter.setPen(g.mid()); + painter.drawPoint(bgR.x()+1, bgR.y()); + painter.drawPoint(bgR.x()+13, bgR.y()); + painter.drawPoint(bgR.x()+1, bgR.bottom()-1); + painter.drawPoint(bgR.x()+13, bgR.bottom()-1); + } + if(controls & Slider){ + if(sliderR.height() >= 16){ + painter.drawPixmap(sliderR.x()+1, sliderR.y(), + isHover ? *getPixmap(VSBSliderTopHover): + *getPixmap(VSBSliderTop)); + painter.drawTiledPixmap(sliderR.x()+1, sliderR.y()+8, 13, + sliderR.height()-16, isHover ? + *getPixmap(VSBSliderMidHover) : + *getPixmap(VSBSliderMid)); + painter.drawPixmap(sliderR.x()+1, sliderR.bottom()-8, + isHover ? *getPixmap(VSBSliderBtmHover) : + *getPixmap(VSBSliderBtm)); + } + else if(sliderR.height() >= 8){ + int m = sliderR.height()/2; + painter.drawPixmap(sliderR.x()+1, sliderR.y(), + isHover ? *getPixmap(VSBSliderTopHover): + *getPixmap(VSBSliderTop), 0, 0, 13, m); + painter.drawPixmap(sliderR.x()+1, sliderR.y()+m, + isHover ? *getPixmap(VSBSliderBtmHover): + *getPixmap(VSBSliderBtm), 0, 8-m, 13, m); + } + else{ + painter.setPen(g.button().dark(210)); + drawRoundRect(&painter, sliderR.x()+1, sliderR.y(), + 13, sliderR.height()); + painter.drawTiledPixmap(sliderR.x()+2, sliderR.y()+1, + 11, sliderR.height()-2, + isHover ? *getPixmap(VSBSliderMidHover) : + *getPixmap(VSBSliderMid), 1, 0); + } + } + painter.setPen(g.mid()); + painter.drawLine(bgR.x(), bgR.y(), bgR.x(), bgR.bottom()); + painter.drawLine(bgR.right(), bgR.y(), bgR.right(), bgR.bottom()); + if(brokenApp && (controls & Slider)){ + painter.setPen(g.background()); + painter.drawLine(bgR.right()-1, bgR.y(), bgR.right()-1, + bgR.bottom()); + } + painter.end(); + } + else{ + painter.begin(&sbBuffer); + QRect bgR(subB.right()+1, 0, (len-(buttonDim*3))+1, sb->height()); + if(sliderR.width() >= 8){ + painter.drawPixmap(bgR.x(), bgR.y()+1, *vsbSliderFillPix, 0, 0, + 8, 13); + painter.drawPixmap(bgR.x(), bgR.y()+1, *getPixmap(HSBSliderTopBg)); + painter.drawTiledPixmap(bgR.x()+8, bgR.y()+1, bgR.width()-16, + 13, *getPixmap(HSBSliderMidBg)); + painter.drawPixmap(bgR.right()-8, bgR.y()+1, *vsbSliderFillPix, + 0, 0, 8, 13); + painter.drawPixmap(bgR.right()-8, bgR.y()+1, *getPixmap(HSBSliderBtmBg)); + } + else{ + painter.drawTiledPixmap(bgR.x(), bgR.y()+1, bgR.width(), 13, + *getPixmap(HSBSliderMidBg)); + painter.setPen(g.background().dark(210)); + painter.drawRect(bgR.x(), bgR.y()+1, bgR.width()-1, 13); + painter.setPen(g.mid()); + painter.drawPoint(bgR.x(), bgR.y()+1); + painter.drawPoint(bgR.x(), bgR.bottom()-1); + painter.drawPoint(bgR.right()-1, bgR.y()+1); + painter.drawPoint(bgR.right()-1, bgR.bottom()-1); + } + if(controls & Slider){ + if(sliderR.width() >= 16){ + painter.drawPixmap(sliderR.x(), sliderR.y()+1, + isHover ? *getPixmap(HSBSliderTopHover) : + *getPixmap(HSBSliderTop)); + painter.drawTiledPixmap(sliderR.x()+8, sliderR.y()+1, sliderR.width()-16, + 13, isHover ? *getPixmap(HSBSliderMidHover) : + *getPixmap(HSBSliderMid)); + painter.drawPixmap(sliderR.right()-8, sliderR.y()+1, isHover ? + *getPixmap(HSBSliderBtmHover) : + *getPixmap(HSBSliderBtm)); + } + else if(sliderR.width() >= 8){ + int m = sliderR.width()/2; + painter.drawPixmap(sliderR.x(), sliderR.y()+1, + isHover ? *getPixmap(HSBSliderTopHover) : + *getPixmap(HSBSliderTop), 0, 0, m, 13); + painter.drawPixmap(sliderR.right()-8, sliderR.y()+1, isHover ? + *getPixmap(HSBSliderBtmHover) : + *getPixmap(HSBSliderBtm), 8-m, 0, m, 13); + } + else{ + painter.setPen(g.button().dark(210)); + drawRoundRect(&painter, sliderR.x(), sliderR.y()+1, + sliderR.width(), 13); + painter.drawTiledPixmap(sliderR.x()+1, sliderR.y()+2, + sliderR.width()-2, 11, isHover ? + *getPixmap(HSBSliderMidHover) : + *getPixmap(HSBSliderMid), 0, 1); + } + } + painter.setPen(g.mid()); + painter.drawLine(bgR.x(), bgR.y(), bgR.right(), bgR.y()); + painter.drawLine(bgR.x(), bgR.bottom(), bgR.right(), bgR.bottom()); + if(brokenApp && (controls & Slider)){ + painter.setPen(g.background()); + painter.drawLine(bgR.x(), bgR.bottom()-1, bgR.right(), + bgR.bottom()-1); + } + painter.end(); + } + + if ( controls & AddLine ) { + drawSBButton(p, addB, g, activeControl == AddLine); + drawArrow( p, horiz ? RightArrow : DownArrow, + false, addB.x()+4, addB.y()+4, + addB.width()-8, addB.height()-8, g, !maxed); + } + if ( controls & SubLine ) { + drawSBButton(p, subB, g, activeControl == SubLine); + drawArrow( p, horiz ? LeftArrow : UpArrow, + false, subB.x()+4, subB.y()+4, + subB.width()-8, subB.height()-8, g, !maxed); + drawSBButton(p, subHC, g, activeControl == SubLine); + drawArrow( p, horiz ? LeftArrow : UpArrow, + false, subHC.x()+4, subHC.y()+4, + subHC.width()-8, subHC.height()-8, g, !maxed); + } + + if(controls & AddPage){ + if(addPageR.width()){ + p->drawPixmap(addPageR.x(), addPageR.y(), sbBuffer, + addPageR.x(), addPageR.y(), addPageR.width(), + addPageR.height()); + } + } + if(controls & SubPage){ + if(subPageR.height()){ + p->drawPixmap(subPageR.x(), subPageR.y(), sbBuffer, + subPageR.x(), subPageR.y(), subPageR.width(), + subPageR.height()); + } + } + if ( controls & Slider ) { + p->drawPixmap(sliderR.x(), sliderR.y(), sbBuffer, + sliderR.x(), sliderR.y(), sliderR.width(), + sliderR.height()); + } +} + +void LiquidStyle::drawSBButton(QPainter *p, const QRect &r, const QColorGroup &g, + bool down, bool /*fast*/) +{ + p->setPen(g.mid()); + p->drawRect(r); + QColor c(down ? g.button() : g.background()); + QPixmap *pix = bevelFillDict.find(c.rgb()); + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*bevelFillPix); + adjustHSV(*pix, h, s, v); + bevelFillDict.insert(c.rgb(), pix); + } + p->drawTiledPixmap(r.x()+1, r.y()+1, r.width()-2, r.height()-2, *pix); + +} + +void LiquidStyle::drawSBDeco(QPainter *p, const QRect &r, const QColorGroup &g, + bool horiz) +{ + if(horiz){ + if(r.width() >= 15){ + int y = r.y()+3; + int x = r.x() + (r.width()-7)/2; + int y2 = r.bottom()-3; + p->setPen(g.light()); + p->drawLine(x, y, x, y2); + p->drawLine(x+3, y, x+3, y2); + p->drawLine(x+6, y, x+6, y2); + + p->setPen(g.mid()); + p->drawLine(x+1, y, x+1, y2); + p->drawLine(x+4, y, x+4, y2); + p->drawLine(x+7, y, x+7, y2); + } + } + else{ + if(r.height() >= 15){ + int x = r.x()+3; + int y = r.y() + (r.height()-7)/2; + int x2 = r.right()-3; + p->setPen(g.light()); + p->drawLine(x, y, x2, y); + p->drawLine(x, y+3, x2, y+3); + p->drawLine(x, y+6, x2, y+6); + + p->setPen(g.mid()); + p->drawLine(x, y+1, x2, y+1); + p->drawLine(x, y+4, x2, y+4); + p->drawLine(x, y+7, x2, y+7); + } + } + +} + + +void LiquidStyle::scrollBarMetrics(const QScrollBar *sb, int &sliderMin, + int &sliderMax, int &sliderLength, + int &buttonDim) +{ + + int maxLength; + int b = 0; + bool horiz = sb->orientation() == QScrollBar::Horizontal; + int length = horiz ? sb->width() : sb->height(); + int extent = horiz ? sb->height() : sb->width(); + + if ( length > ( extent - b*2 - 1 )*2 + b*2 ) + buttonDim = extent - b*2; + else + buttonDim = ( length - b*2 )/2 - 1; + + sliderMin = b + buttonDim; + maxLength = length - b*2 - buttonDim*3; + + if ( sb->maxValue() == sb->minValue() ) { + sliderLength = maxLength; + } else { + sliderLength = (sb->pageStep()*maxLength)/ + (sb->maxValue()-sb->minValue()+sb->pageStep()); + uint range = sb->maxValue()-sb->minValue(); + if ( sliderLength < 9 || range > INT_MAX/2 ) + sliderLength = 9; + if ( sliderLength > maxLength ) + sliderLength = maxLength; + } + sliderMax = sliderMin + maxLength - sliderLength; + +} + +QStyle::ScrollControl LiquidStyle::scrollBarPointOver(const QScrollBar *sb, + int sliderStart, + const QPoint &p) +{ + if ( !sb->rect().contains( p ) ) + return NoScroll; + int sliderMin, sliderMax, sliderLength, buttonDim, pos; + scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); + pos = (sb->orientation() == QScrollBar::Horizontal)? p.x() : p.y(); + if ( pos < sliderMin ) + return SubLine; + if ( pos < sliderStart ) + return SubPage; + if ( pos < sliderStart + sliderLength ) + return Slider; + if ( pos < sliderMax + sliderLength) + return AddPage; + if(pos > sliderMax + sliderLength + 16) + return AddLine; + + return SubLine; +} + +#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) + + +QSize LiquidStyle::exclusiveIndicatorSize() const +{ + return(QSize(16, 16)); +} + +void LiquidStyle::drawExclusiveIndicator(QPainter *p, int x, int y, int w, + int h, const QColorGroup &g, bool on, + bool down, bool) +{ + bool isHover = highlightWidget == p->device(); + bool isMasked = p->device() && p->device()->devType() == QInternal::Widget + && ((QWidget*)p->device())->autoMask(); + + if(isMasked){ + if(on || down){ + p->drawPixmap(x, y, isHover ? *getPixmap(HTMLRadioDownHover) : + *getPixmap(HTMLRadioDown)); + } + else + p->drawPixmap(x, y, isHover ? *getPixmap(HTMLRadioHover) : + *getPixmap(HTMLRadio)); + + } + else{ + if(on || down){ + p->drawPixmap(x, y, isHover ? *getPixmap(RadioOnHover) : + *getPixmap(RadioOn)); + } + else + p->drawPixmap(x, y, isHover ? *getPixmap(RadioOffHover) : + *getPixmap(RadioOff)); + } +} + +void LiquidStyle::drawExclusiveIndicatorMask(QPainter *p, int x, int y, int w, + int h, bool) +{ + p->fillRect(x, y, w, h, Qt::color0); + p->setPen(Qt::color1); + p->drawPixmap(x, y, *getPixmap(RadioOn)->mask()); +} + + +QSize LiquidStyle::indicatorSize() const +{ + return(QSize(20, 22)); +} + +void LiquidStyle::drawIndicator(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, int state, bool down, bool) +{ + bool isHover = highlightWidget == p->device(); + bool isMasked = p->device() && p->device()->devType() == QInternal::Widget + && ((QWidget*)p->device())->autoMask(); + if(isMasked){ + if(state != QButton::Off){ + p->drawPixmap(x, y, isHover ? *getPixmap(HTMLCBDownHover) : + *getPixmap(HTMLCBDown)); + } + else + p->drawPixmap(x, y, isHover ? *getPixmap(HTMLCBHover) : + *getPixmap(HTMLCB)); + + } + else{ + if(state != QButton::Off){ + p->drawPixmap(x, y, isHover ? *getPixmap(CBDownHover) : + *getPixmap(CBDown)); + /* Todo - tristate + if(state == QButton::On){ + p->setPen(Qt::black); + p->drawPixmap(3, 3, xBmp); + } + else{ + p->setPen(g.dark()); + p->drawRect(x+2, y+2, w-4, h-4); + p->setPen(Qt::black); + p->drawLine(x+3, (y+h)/2-2, x+w-4, (y+h)/2-2); + p->drawLine(x+3, (y+h)/2, x+w-4, (y+h)/2); + p->drawLine(x+3, (y+h)/2+2, x+w-4, (y+h)/2+2); + }*/ + } + else + p->drawPixmap(x, y, isHover ? *getPixmap(CBHover) : *getPixmap(CB)); + } +} + +void LiquidStyle::drawIndicatorMask(QPainter *p, int x, int y, int w, int h, + int state) +{ + // needed for some reason by KHtml, even tho it's all filled ;P + p->drawPixmap(x, y, *getPixmap(HTMLCB)->mask()); + +} + +void LiquidStyle::drawSlider(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, Orientation orient, + bool, bool) +{ + QWidget *parent = (QWidget *)p->device(); + p->setBrushOrigin(parent->pos()); + p->fillRect(x, y, w, h, + QApplication::palette().active().brush(QColorGroup::Background)); + p->drawPixmap(x, y, orient == Qt::Horizontal ? *getPixmap(HSlider) : + *getPixmap(VSlider)); +} + +void LiquidStyle::drawSliderMask(QPainter *p, int x, int y, int w, int h, + Orientation orient, bool, bool) +{ + p->drawPixmap(x, y, orient == Qt::Horizontal ? *getPixmap(HSlider)->mask() : + *getPixmap(VSlider)->mask()); +} + +int LiquidStyle::sliderLength() const +{ + return(10); +} + +#define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) + +void LiquidStyle::drawArrow(QPainter *p, Qt::ArrowType type, bool on, int x, + int y, int w, int h, const QColorGroup &g, + bool enabled, const QBrush *) +{ + static const QCOORD u_arrow[]={3,1, 4,1, 2,2, 5,2, 1,3, 6,3, 0,4, 7,4, 0,5, 7,5}; + static const QCOORD d_arrow[]={0,2, 7,2, 0,3, 7,3, 1,4, 6,4, 2,5, 5,5, 3,6, 4,6}; + static const QCOORD l_arrow[]={1,3, 1,4, 2,2, 2,5, 3,1, 3,6, 4,0, 4,7, 5,0, 5,7}; + static const QCOORD r_arrow[]={2,0, 2,7, 3,0, 3,7, 4,1, 4,6, 5,2, 5,5, 6,3, 6,4}; + + p->setPen(enabled ? on ? g.light() : g.buttonText() : g.mid()); + if(w > 8){ + x = x + (w-8)/2; + y = y + (h-8)/2; + } + + QPointArray a; + switch(type){ + case Qt::UpArrow: + a.setPoints(QCOORDARRLEN(u_arrow), u_arrow); + break; + case Qt::DownArrow: + a.setPoints(QCOORDARRLEN(d_arrow), d_arrow); + break; + case Qt::LeftArrow: + a.setPoints(QCOORDARRLEN(l_arrow), l_arrow); + break; + default: + a.setPoints(QCOORDARRLEN(r_arrow), r_arrow); + break; + } + + a.translate(x, y); + p->drawLineSegments(a); +} + + +void LiquidStyle::drawMenuBarItem(QPainter *p, int x, int y, int w, int h, + QMenuItem *mi, QColorGroup &g, bool enabled, bool active ) +{ + x -= 2; // Bug in Qt/E + y -= 2; + w += 2; + h += 2; + + p-> fillRect ( x, y, w, h, g.brush(QColorGroup::Background)); + + w -= 2; + + if(menuHandler->useShadowText()){ + QColor shadow; + if(p->device() && p->device()->devType() == QInternal::Widget && + ((QWidget *)p->device())->inherits("QMenuBar")){ + shadow = ((QMenuBar*)p->device())->isTopLevel() ? g.button().dark(130) : + g.background().dark(130); + } + else + shadow = g.background().dark(130); + + if(active){ + drawClearBevel(p, x+1, y+1, w-1, h-1, g.button(), g.background()); + QApplication::style().drawItem(p, x+1, y+1, w, h, + AlignCenter|ShowPrefix|DontClip|SingleLine, + g, mi->isEnabled(), NULL, mi->text(), + -1, &shadow); + QApplication::style().drawItem(p, x, y, w, h, + AlignCenter|ShowPrefix|DontClip|SingleLine, + g, mi->isEnabled(), NULL, mi->text(), + -1, &g.text()); + } + else{ + QApplication::style().drawItem(p, x+1, y+1, w, h, + AlignCenter|ShowPrefix|DontClip|SingleLine, + g, mi->isEnabled(), NULL, mi->text(), + -1, &shadow); + QApplication::style().drawItem(p, x, y, w, h, + AlignCenter|ShowPrefix|DontClip|SingleLine, + g, mi->isEnabled(), NULL, mi->text(), + -1, &g.text()); + } + } + else{ + if(active) + drawClearBevel(p, x+1, y+1, w-1, h-1, g.button(), g.background()); + QApplication::style().drawItem(p, x, y, w, h, + AlignCenter|ShowPrefix|DontClip|SingleLine, + g, mi->isEnabled(), NULL, mi->text(), + -1, &g.text()); + } +} + +void LiquidStyle::drawPopupPanel(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, int lineWidth, + const QBrush * fill) +{ + QColor c; + switch(menuHandler->transType()){ + case None: + case StippledBg: + case TransStippleBg: + c = g.background(); + break; + case StippledBtn: + case TransStippleBtn: + c = g.button(); + break; + default: + c = menuHandler->bgColor(); + } + p->setPen(c.dark(140)); + p->drawRect(x, y, w, h); + p->setPen(c.light(120)); + p->drawRect(x+1, y+1, w-2, h-2); +} + +void LiquidStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, + int tab, QMenuItem* mi, + const QPalette& pal, bool act, + bool enabled, int x, int y, int w, int h) +{ +static const int motifItemFrame = 2; +static const int motifItemHMargin = 3; +static const int motifItemVMargin = 2; +static const int motifArrowHMargin = 6; +static const int windowsRightBorder = 12; + + maxpmw = QMAX( maxpmw, 20 ); + + + bool dis = !enabled; + QColorGroup itemg = dis ? pal.disabled() : pal.active(); + + int checkcol = maxpmw; + if(act){ + + // FIXME + drawClearBevel(p, x, y, w, h, itemg.button(), itemg.background()); + } + //else if(((QWidget*)p->device())->backgroundPixmap()){ + // p->drawPixmap(x, y, *((QWidget*)p->device())->backgroundPixmap(), + // x, y, w, h); + //} + else{ + if(menuHandler->transType() == None){ + p->fillRect(x, y, w, h, pal.active().background()); + } + else if(menuHandler->transType() == StippledBg){ + p->fillRect(x, y, w, h, bgBrush); + } + else if(menuHandler->transType() == StippledBtn){ + p->fillRect(x, y, w, h, menuBrush); + } + else{ + QPixmap *pix = menuHandler->pixmap(((QWidget*)p->device())->winId()); + if(pix) + p->drawPixmap(x, y, *pix, x, y, w, h); + } + } + + if(!mi) + return; + + QColor discol; + if (dis) { + discol = itemg.mid(); + p->setPen(discol); + } + + QColorGroup cg2(itemg); + + if(menuHandler->transType() == Custom){ + cg2.setColor(QColorGroup::Foreground, menuHandler->textColor()); + cg2.setColor(QColorGroup::Text, menuHandler->textColor()); + cg2.setColor(QColorGroup::Light, menuHandler->textColor().light(120)); + cg2.setColor(QColorGroup::Mid, menuHandler->textColor().dark(120)); + } + else{ + cg2 = QColorGroup(discol, itemg.highlight(), black, black, + dis ? discol : black, discol, black); + } + + if(mi->isSeparator()){ + QColor c; + switch(menuHandler->transType()){ + case None: + case StippledBg: + case TransStippleBg: + c = QApplication::palette().active().background(); + break; + case StippledBtn: + case TransStippleBtn: + c = QApplication::palette().active().button(); + break; + default: + c = menuHandler->bgColor(); + } + p->setPen(c.dark(140)); + p->drawLine(x, y, x+w, y ); + p->setPen(c.light(115)); + p->drawLine(x, y+1, x+w, y+1 ); + return; + } + if(mi->iconSet()) { + QIconSet::Mode mode = dis? QIconSet::Disabled : QIconSet::Normal; + if (!dis) + mode = QIconSet::Active; + QPixmap pixmap = mi->iconSet()->pixmap(QIconSet::Small, mode); + int pixw = pixmap.width(); + int pixh = pixmap.height(); + QRect cr(x, y, checkcol, h); + QRect pmr(0, 0, pixw, pixh); + pmr.moveCenter( cr.center() ); + p->setPen(itemg.highlightedText()); + p->drawPixmap(pmr.topLeft(), pixmap ); + + } + else if(checkable) { + int mw = checkcol + motifItemFrame; + int mh = h - 2*motifItemFrame; + if (mi->isChecked()){ + drawCheckMark( p, x + motifItemFrame, + y+motifItemFrame, mw, mh, cg2, act, dis ); + } + } + if(menuHandler->transType() == Custom) + p->setPen(menuHandler->textColor()); + else + p->setPen(itemg.text()); + + + int xm = motifItemFrame + checkcol + motifItemHMargin; + QString s = mi->text(); + if (!s.isNull()) { + int t = s.find( '\t' ); + int m = motifItemVMargin; + const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; + QPen oldPen = p->pen(); + if(menuHandler->useShadowText()){ + if(menuHandler->transType() == Custom) + p->setPen(menuHandler->bgColor().dark(130)); + else if(menuHandler->transType() == StippledBtn || + menuHandler->transType() == TransStippleBtn) + p->setPen(itemg.button().dark(130)); + else + p->setPen(bgBrush.color().dark(130)); + + if (t >= 0) { + p->drawText(x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+2, + y+m+2, tab-1, h-2*m-1, text_flags, s.mid( t+1 )); + } + p->drawText(x+xm+1, y+m+1, w-xm-tab, h-2*m-1, text_flags, s, t); + } + p->setPen(oldPen); + if (t >= 0) { + p->drawText(x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, + y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); + } + p->drawText(x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t); + + } + else if (mi->pixmap()) { + QPixmap *pixmap = mi->pixmap(); + if (pixmap->depth() == 1) + p->setBackgroundMode(OpaqueMode); + p->drawPixmap( x+xm, y+motifItemFrame, *pixmap); + if (pixmap->depth() == 1) + p->setBackgroundMode(TransparentMode); + } + if (mi->popup()) { + int dim = (h-2*motifItemFrame) / 2; + drawArrow(p, RightArrow, true, + x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, + dim, dim, cg2, TRUE); + } +} + +int LiquidStyle::popupMenuItemHeight(bool /*checkable*/, QMenuItem *mi, + const QFontMetrics &fm) +{ + if (mi->isSeparator()) + return 2; + + int h = 0; + if (mi->pixmap()) + h = mi->pixmap()->height(); + + if (mi->iconSet()) + h = QMAX(mi->iconSet()-> + pixmap(QIconSet::Small, QIconSet::Normal).height(), h); + + h = QMAX(fm.height() + 4, h); + + // we want a minimum size of 18 + h = QMAX(h, 18); + + return h; +} + + +void LiquidStyle::drawFocusRect(QPainter *p, const QRect &r, + const QColorGroup &g, const QColor *c, + bool atBorder) +{ + // are we painting a widget? + if(p->device()->devType() == QInternal::Widget){ + // if so does it use a special focus rectangle? + QWidget *w = (QWidget *)p->device(); + if(w->inherits("QPushButton") || w->inherits("QSlider")){ + return; + } + else{ + QWindowsStyle::drawFocusRect(p, r, g, c, atBorder); + } + } + else + QWindowsStyle::drawFocusRect(p, r, g, c, atBorder); + +} + +void LiquidStyle::polishPopupMenu(QPopupMenu *mnu) +{ + mnu->installEventFilter(menuHandler); + QWindowsStyle::polishPopupMenu(mnu); +} + +void LiquidStyle::drawTab(QPainter *p, const QTabBar *tabBar, QTab *tab, + bool selected) +{ + if(tabBar->shape() != QTabBar::RoundedAbove){ + QWindowsStyle::drawTab(p, tabBar, tab, selected); + return; + } + QPixmap tilePix; + QRect r = tab->rect(); + //QPixmap *pix = selected ? tabBar->hasFocus() ? pixmaps[TabFocus] : + // pixmaps[TabDown] : pixmaps[Tab]; + + QPixmap *pix = selected ? getPixmap(TabDown) : getPixmap(Tab); + p->drawPixmap(r.x(), r.y(), *pix, 0, 0, 9, r.height()); + p->drawPixmap(r.right()-9, r.y(), *pix, pix->width()-9, 0, 9, r.height()); + tilePix.resize(pix->width()-18, r.height()); + bitBlt(&tilePix, 0, 0, pix, 9, 0, pix->width()-18, r.height()); + p->drawTiledPixmap(r.x()+9, r.y(), r.width()-18, r.height(), tilePix); + QColor c = tabBar->colorGroup().button(); + if(!selected){ + p->setPen(c.dark(130)); + p->drawLine(r.x(), r.bottom(), r.right(), r.bottom()); + } + + /* + p->setPen(c.light(110)); + p->drawLine(r.x(), r.bottom()+1, r.right(), r.bottom()+1); + p->setPen(c); + p->drawLine(r.x(), r.bottom()+2, r.right(), r.bottom()+2); + p->setPen(c.light(110)); + p->drawLine(r.x(), r.bottom()+3, r.right(), r.bottom()+3); + p->setPen(c.light(120)); + p->drawLine(r.x(), r.bottom()+4, r.right(), r.bottom()+4); + */ + + /* + QColor c = tabBar->colorGroup().button(); + pix = bevelFillDict.find(c.rgb()); + if(!pix){ + int h, s, v; + c.hsv(&h, &s, &v); + pix = new QPixmap(*bevelFillPix); + adjustHSV(*pix, h, s); + bevelFillDict.insert(c.rgb(), pix); + }*/ + + /* + QRect r = tab->rect(); + QColorGroup g = tabBar->colorGroup(); + if(!selected){ + r.setY(r.y()+1); + p->setPen(g.dark()); + p->drawLine(r.x(), r.y()+4, r.x(), r.bottom()-2); + p->drawLine(r.x(), r.y()+4, r.x()+4, r.y()); + p->drawLine(r.x()+4, r.y(), r.right()-1, r.y()); + p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()-2); + + p->setPen(g.midlight()); + p->drawLine(r.x()+1, r.y()+4, r.x()+1, r.bottom()); + p->drawLine(r.x()+1, r.y()+4, r.x()+4, r.y()+1); + p->drawLine(r.x()+5, r.y()+1, r.right()-2, r.y()+1); + p->drawLine(r.x(), r.bottom(), r.right(), r.bottom()); + + p->setPen(g.mid()); + p->drawPoint(r.right()-1, r.y()+1); + p->drawLine(r.x()+4, r.y()+2, r.right()-1, r.y()+2); + p->drawLine(r.x()+3, r.y()+3, r.right()-1, r.y()+3); + + p->fillRect(r.x()+2, r.y()+4, r.width()-3, r.height()-6, + g.brush(QColorGroup::Mid)); + + p->setPen(g.light()); + p->drawLine(r.x(), r.bottom()-1, r.right(), r.bottom()-1); + + } + else{ + p->setPen(g.light()); + p->drawLine(r.x(), r.y()+4, r.x(), r.bottom()); + p->drawLine(r.x(), r.y()+4, r.x()+4, r.y()); + p->drawLine(r.x()+4, r.y(), r.right()-1, r.y()); + p->setPen(g.dark()); + p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()); + + p->setPen(g.midlight()); + p->drawLine(r.x()+1, r.y()+4, r.x()+1, r.bottom()); + p->drawLine(r.x()+1, r.y()+4, r.x()+4, r.y()+1); + p->drawLine(r.x()+5, r.y()+1, r.right() - 2, r.y()+1); + p->setPen(g.mid()); + p->drawLine(r.right()-1, r.y()+1, r.right()-1, r.bottom()); + }*/ + +} + + + +void LiquidStyle::drawTabMask(QPainter *p, const QTabBar*, QTab *tab, + bool selected) + + +{ + //p->fillRect(tab->rect(), Qt::color1); + QRect r = tab->rect(); + QPixmap *pix = selected ? getPixmap(TabDown) : getPixmap(Tab); + p->drawPixmap(r.x(), r.y(), *pix->mask(), 0, 0, 9, r.height()); + p->drawPixmap(r.right()-9, r.y(), *pix->mask(), pix->width()-9, 0, 9, r.height()); + p->fillRect(r.x()+9, r.y(), r.width()-18, r.height(), Qt::color1); +} + +void LiquidStyle::tabbarMetrics(const QTabBar *t, int &hFrame, int &vFrame, + int &overlap) +{ + if(t->shape() == QTabBar::RoundedAbove){ + overlap = 1; + hFrame = 18; // was 24 + vFrame = 8; // was 10 + } + else + QWindowsStyle::tabbarMetrics(t, hFrame, vFrame, overlap); +} + + + +void LiquidStyle::drawSplitter(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, Orientation) +{ + drawClearBevel(p, x, y, w, h, highlightWidget == p->device() ? + g.button().light(120) : g.button(), g.background()); +} + + +void LiquidStyle::drawPanel(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken, + int lineWidth, const QBrush *fill) +{ + if(p->device()->devType() == QInternal::Widget && + ((QWidget *)p->device())->inherits("QLineEdit")){ + int x2 = x+w-1; + int y2 = y+h-1; + p->setPen(g.dark()); + p->drawRect(x, y, w, h); + p->setPen(g.mid()); + p->drawLine(x+1, y+1, x2-2, y+1); + p->drawLine(x+1, y+1, x+1, y2-1); + } + else if(lineWidth != 2 || !sunken) + QWindowsStyle::drawPanel(p, x, y, w, h, g, sunken, lineWidth, fill); + else{ + QPen oldPen = p->pen(); + int x2 = x+w-1; + int y2 = y+h-1; + p->setPen(g.light()); + p->drawLine(x, y2, x2, y2); + p->drawLine(x2, y, x2, y2); + p->setPen(g.mid()); + p->drawLine(x, y, x2, y); + p->drawLine(x, y, x, y2); + + p->setPen(g.midlight()); + p->drawLine(x+1, y2-1, x2-1, y2-1); + p->drawLine(x2-1, y+1, x2-1, y2-1); + p->setPen(g.dark()); + p->drawLine(x+1, y+1, x2-1, y+1); + p->drawLine(x+1, y+1, x+1, y2-1); + p->setPen(oldPen); + if(fill){ + // I believe here we are only supposed to fill if there is a + // specified fill brush... + p->fillRect(x+2, y+2, w-4, h-4, *fill); + } + } +} + + +void LiquidStyle::adjustHSV(QPixmap &pix, int h, int s, int v) +{ + QBitmap *maskBmp = NULL; + if(pix.mask()) + maskBmp = new QBitmap(*pix.mask()); + QImage img = pix.convertToImage(); + if(img.depth() != 32) + img = img.convertDepth(32); + unsigned int *data = (unsigned int *)img.bits(); + int total = img.width()*img.height(); + int current; + QColor c; + int oldH, oldS, oldV; + if(v < 235) + v += 20; + else + v = 255; + float intensity = v/255.0; + + for(current=0; current 8 ? 256 : image.numColors(); + unsigned char *segTbl = new unsigned char[segColors]; + int pixels = image.depth() > 8 ? image.width()*image.height() : + image.numColors(); + unsigned int *data = image.depth() > 8 ? (unsigned int *)image.bits() : + (unsigned int *)image.colorTable(); + + bool brighten = (percent >= 0); + if(percent < 0) + percent = -percent; + + if(brighten){ // keep overflow check out of loops + for(i=0; i < segColors; ++i){ + tmp = (int)(i*percent); + if(tmp > 255) + tmp = 255; + segTbl[i] = tmp; + } + } + else{ + for(i=0; i < segColors; ++i){ + tmp = (int)(i*percent); + if(tmp < 0) + tmp = 0; + segTbl[i] = tmp; + } + } + + if(brighten){ // same here + for(i=0; i < pixels; ++i){ + r = qRed(data[i]); + g = qGreen(data[i]); + b = qBlue(data[i]); + r = r + segTbl[r] > 255 ? 255 : r + segTbl[r]; + g = g + segTbl[g] > 255 ? 255 : g + segTbl[g]; + b = b + segTbl[b] > 255 ? 255 : b + segTbl[b]; + data[i] = qRgb(r, g, b); + } + } + else{ + for(i=0; i < pixels; ++i){ + r = qRed(data[i]); + g = qGreen(data[i]); + b = qBlue(data[i]); + r = r - segTbl[r] < 0 ? 0 : r - segTbl[r]; + g = g - segTbl[g] < 0 ? 0 : g - segTbl[g]; + b = b - segTbl[b] < 0 ? 0 : b - segTbl[b]; + data[i] = qRgb(r, g, b); + } + } + delete [] segTbl; + pix.convertFromImage(image); +} + +void LiquidStyle::drawRoundRect(QPainter *p, int x, int y, int w, int h) +{ + int x2 = x+w-1; + int y2 = y+h-1; + p->drawLine(x+1, y, x2-1, y); + p->drawLine(x, y+1, x, y2-1); + p->drawLine(x+1, y2, x2-1, y2); + p->drawLine(x2, y+1, x2, y2-1); +} + +void LiquidStyle::drawSliderGroove (QPainter * p, int x, int y, int w, int h, + const QColorGroup &g, QCOORD, + Orientation orient) +{ + bool isFocus = ((QWidget *)p->device())->hasFocus(); + QColor c = isFocus ? g.background().dark(120) : g.background(); + if(orient == Qt::Horizontal){ + int x2 = x+w-1; + y+=2; + p->setPen(c.dark(130)); + p->drawLine(x+1, y, x2-1, y); + p->setPen(c.dark(150)); + p->drawLine(x, y+1, x2, y+1); + p->setPen(c.dark(125)); + p->drawLine(x, y+2, x2, y+2); + p->setPen(c.dark(130)); + p->drawLine(x, y+3, x2, y+3); + p->setPen(c.dark(120)); + p->drawLine(x, y+4, x2, y+4); + p->setPen(c.light(110)); + p->drawLine(x+1, y+5, x2-1, y+5); + } + else{ + int y2 = y+h-1; + x+=2; + p->setPen(c.dark(130)); + p->drawLine(x, y+1, x, y2-1); + p->setPen(c.dark(150)); + p->drawLine(x+1, y, x+1, y2); + p->setPen(c.dark(125)); + p->drawLine(x+2, y, x+2, y2); + p->setPen(c.dark(130)); + p->drawLine(x+3, y, x+3, y2); + p->setPen(c.dark(120)); + p->drawLine(x+4, y, x+4, y2); + p->setPen(c.light(110)); + p->drawLine(x+5, y+1, x+5, y2-1); + } + //QWindowsStyle::drawSliderGroove(p, x, y, w, h, g, c, orient); + +} + +void LiquidStyle::drawSliderGrooveMask (QPainter * p, int x, int y, int w, + int h, QCOORD, Orientation orient) +{ + p->fillRect(x, y, w, h, Qt::color0); + p->setPen(Qt::color1); + if(orient == Qt::Horizontal){ + int x2 = x+w-1; + y+=2; + p->drawLine(x+1, y, x2-1, y); + p->fillRect(x, y+1, w, 4, Qt::color1); + p->drawLine(x+1, y+5, x2-1, y+5); + } + else{ + int y2 = y+h-1; + x+=2; + p->drawLine(x, y+1, x, y2-1); + p->fillRect(x+1, y, 4, h, Qt::color1); + p->drawLine(x+5, y+1, x+5, y2-1); + } +} + +// I'm debating if to use QValueList or QList here. I like QValueList better, +// but QList handles pointers which is good for a lot of empty icons... + +void LiquidStyle::loadCustomButtons() +{ + return; // TODO + customBtnColorList.clear(); + customBtnIconList.clear(); + customBtnLabelList.clear(); + +// KConfig *config = KGlobal::config(); +// QString oldGrp = config->group(); +// config->setGroup("MosfetButtons"); + + QStrList iconList, colorList; //temp, we store QPixmaps and QColors + iconList.setAutoDelete(true); + colorList.setAutoDelete(true); +// config->readListEntry("Labels", customBtnLabelList); +// config->readListEntry("Icons", iconList); +// config->readListEntry("Colors", colorList); + + const char *labelStr = customBtnLabelList.first(); + const char *colorStr = colorList.first(); + const char *iconStr = iconList.first(); + +// KIconLoader *ldr = KGlobal::iconLoader(); + while(labelStr != NULL){ + QColor *c = new QColor; + c->setNamedColor(QString(colorStr)); + customBtnColorList.append(c); + + QString tmpStr(iconStr); + if(!tmpStr.isEmpty()){ + QPixmap *pixmap = + new QPixmap();//ldr->loadIcon(tmpStr, KIcon::Small)); + if(pixmap->isNull()){ + delete pixmap; + customBtnIconList.append(NULL); + } + else + customBtnIconList.append(pixmap); + } + else + customBtnIconList.append(NULL); + + labelStr = customBtnLabelList.next(); + colorStr = colorList.next(); + iconStr = iconList.next(); + } +} + +void LiquidStyle::applyCustomAttributes(QPushButton *btn) +{ + return; // TODO + QString str = btn->text(); + if(str.isEmpty()) + return; + while(str.contains('&') != 0) + str = str.remove(str.find('&'), 1); + + const char *s; + int idx = 0; + for(s = customBtnLabelList.first(); s != NULL; + ++idx, s = customBtnLabelList.next()){ + if(qstricmp(s, str.latin1()) == 0){ + QPalette pal = btn->palette(); + pal.setColor(QColorGroup::Button, + *customBtnColorList.at(idx)); + btn->setPalette(pal); + /* + if(customBtnIconList.at(idx) != NULL){ + QPixmap *pix = customBtnIconList.at(idx); + btn->setIconSet(QIconSet(*pix)); + }*/ + break; + } + } +} + +void LiquidStyle::unapplyCustomAttributes(QPushButton *btn) +{ + return; // TODO + QString str = btn->text(); + if(str.isEmpty()) + return; + while(str.contains('&') != 0) + str = str.remove(str.find('&'), 1); + + const char *s; + for(s = customBtnLabelList.first(); s != NULL; s = customBtnLabelList.next()){ + if(qstricmp(s, str.latin1()) == 0){ + btn->setPalette(QApplication::palette()); + btn->setIconSet(QIconSet()); + break; + } + } +} + +// #include "liquid.moc" + + + + + + +/* vim: set noet sw=8 ts=8: */ diff --git a/noncore/styles/liquid/liquid.h b/noncore/styles/liquid/liquid.h new file mode 100644 index 0000000..fb691ea --- a/dev/null +++ b/noncore/styles/liquid/liquid.h @@ -0,0 +1,218 @@ +#ifndef LIQUID_STYLE_H +#define LIQUID_STYLE_H + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +/*- + * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. + */ + +class QPixmap; + +#define BITMAP_ITEMS 41 +#define LIQUID_MENU_CHANGE 667 +#define MOSFET_BUTTON_CHANGE 661 + +enum BitmapData{RadioOn=0, RadioOff, RadioOnHover, RadioOffHover, VSBSliderTop, +VSBSliderMid, VSBSliderBtm, VSBSliderTopHover, VSBSliderMidHover, +VSBSliderBtmHover, VSBSliderTopBg, VSBSliderMidBg, VSBSliderBtmBg, +HSBSliderTop, HSBSliderMid, HSBSliderBtm, HSBSliderTopHover, HSBSliderMidHover, +HSBSliderBtmHover, HSBSliderTopBg, HSBSliderMidBg, +HSBSliderBtmBg, Tab, TabDown, TabFocus, CB, CBDown, CBHover, CBDownHover, +HSlider, VSlider, HTMLBtnBorder, HTMLBtnBorderDown, HTMLCB, HTMLCBDown, +HTMLCBHover, HTMLCBDownHover, HTMLRadio, HTMLRadioDown, HTMLRadioHover, +HTMLRadioDownHover}; + + +class QHeader; + +enum TransType{None=0, StippledBg, StippledBtn, TransStippleBg, + TransStippleBtn, Custom}; + +class TransMenuHandler : public QObject +{ + Q_OBJECT +public: + TransMenuHandler(QObject *parent); + ~TransMenuHandler(){;} + void reloadSettings(); + int transType(){return(type);} + QPixmap *pixmap(WId id){return(pixDict.find(id));} + const QColor& textColor(){return(fgColor);} + const QColor& bgColor(){return(color);} + bool useShadowText(){return(shadowText);} +protected: + bool eventFilter(QObject *obj, QEvent *ev); + void stripePixmap(QPixmap &pix, const QColor &color); + + QColor color, fgColor; + int opacity; + int type; + bool shadowText; + QIntDictpixDict; +}; + +class LiquidStyle : public QWindowsStyle +{ + friend class TransMenuHandler; +public: + LiquidStyle(); + ~LiquidStyle(); + virtual void polish(QWidget *w); + virtual void unPolish(QWidget *w); + virtual void polish(QApplication *a); + virtual void unPolish(QApplication *a); + virtual void polish(QPalette &p); + void drawButton(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = FALSE, + const QBrush *fill = 0 ); + void drawButtonMask(QPainter *p, int x, int y, int w, int h); + void drawComboButtonMask(QPainter *p, int x, int y, int w, int h); + QRect buttonRect(int x, int y, int w, int h); + void drawBevelButton(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = FALSE, + const QBrush *fill = 0 ); + void drawPushButton(QPushButton *btn, QPainter *p); + virtual void drawPushButtonLabel (QPushButton *btn, QPainter *p); + void drawScrollBarControls(QPainter*, const QScrollBar*, int sliderStart, + uint controls, uint activeControl ); + QStyle::ScrollControl scrollBarPointOver(const QScrollBar *sb, + int sliderStart, const QPoint &p); + void scrollBarMetrics(const QScrollBar *sb, int &sliderMin, int &sliderMax, + int &sliderLength, int &buttonDim); + QSize indicatorSize() const; + void drawIndicator(QPainter* p, int x, int y, int w, int h, + const QColorGroup &g, int state, bool down = FALSE, + bool enabled = TRUE ); + void drawIndicatorMask(QPainter *p, int x, int y, int w, int h, int); + QSize exclusiveIndicatorSize() const; + void drawExclusiveIndicator(QPainter* p, int x, int y, int w, int h, + const QColorGroup &g, bool on, + bool down = FALSE, bool enabled = TRUE ); + void drawExclusiveIndicatorMask(QPainter *p, int x, int y, int w, + int h, bool); + void drawComboButton(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken = FALSE, + bool editable = FALSE, bool enabled = TRUE, + const QBrush *fill = 0 ); + QRect comboButtonRect(int x, int y, int w, int h); + QRect comboButtonFocusRect(int x, int y, int w, int h); + int sliderLength() const; + void drawArrow(QPainter *p, Qt::ArrowType type, bool down, + int x, int y, int w, int h, const QColorGroup &g, + bool enabled=true, const QBrush *fill = 0); + void drawSlider(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, Orientation orient, + bool tickAbove, bool tickBelow); + void drawSliderMask(QPainter *p, int x, int y, int w, int h, + Orientation orient, bool, bool); + void drawMenuBarItem(QPainter *p, int x, int y, int w, int h, + QMenuItem *mi, QColorGroup &g, bool enabled, bool active ); + + void drawPopupMenuItem(QPainter *p, bool checkable, int maxpmw, + int tab, QMenuItem *mi, const QPalette &pal, + bool act, bool enabled, int x, int y, int w, + int h); + int popupMenuItemHeight(bool c, QMenuItem *mi, const QFontMetrics &fm); + void drawFocusRect(QPainter *p, const QRect &r, const QColorGroup &g, + const QColor *pen, bool atBorder); + int defaultFrameWidth() const {return(2);} + void polishPopupMenu(QPopupMenu *mnu); + void drawTab(QPainter *p, const QTabBar *tabBar, QTab *tab, + bool selected); + void drawTabMask( QPainter*, const QTabBar*, QTab*, bool selected ); + void tabbarMetrics(const QTabBar *t, int &hFrame, int &vFrame, + int &overlap); + + void drawSplitter(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, Orientation orient); + int splitterWidth() const {return(6);} + void drawPanel(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, bool sunken, int lineWidth, + const QBrush *fill); + void drawToolButton(QPainter *p, int x, int y, int w, + int h, const QColorGroup &g, + bool sunken, const QBrush *fill); + // for repainting toolbuttons when the toolbar is resized + bool eventFilter(QObject *obj, QEvent *ev); + void drawSliderGroove(QPainter * p, int x, int y, int w, int h, + const QColorGroup &g, QCOORD c, Orientation); + void drawSliderGrooveMask(QPainter * p, int x, int y, int w, int h, + QCOORD c, Orientation); + int buttonDefaultIndicatorWidth() const {return(2);} + void drawPopupPanel(QPainter *p, int x, int y, int w, int h, + const QColorGroup &g, int lineWidth, + const QBrush * fill); +protected: + void adjustHSV(QPixmap &pix, int h, int s, int v); + void intensity(QPixmap &pix, float percent); + + void drawRoundButton(QPainter *p, const QColor &c, const QColor &bg, int x, + int y, int w, int h, bool supportPushDown = false, + bool pushedDown = false, bool autoDefault = false, + bool isMasked = false); + void drawClearBevel(QPainter *p, int x, int y, int w, int h, + const QColor &c, const QColor &bg); + void drawSBDeco(QPainter *p, const QRect &r, const QColorGroup &g, + bool horiz); + void drawSBButton(QPainter *p, const QRect &r, const QColorGroup &g, + bool down=false, bool fast = true); + void drawRoundRect(QPainter *p, int x, int y, int w, int h); + void loadCustomButtons(); + void applyCustomAttributes(QPushButton *btn); + void unapplyCustomAttributes(QPushButton *btn); + QPixmap* getPixmap(BitmapData item); + QPixmap* processEmbedded(const char *label, int h, int s, int v, bool blend=false); +private: + bool highcolor; + QColorGroup radioOnGrp; + QWidget *highlightWidget; + QBrush wallpaper; + QBitmap lightBmp; + QBitmap grayBmp; + QBitmap dgrayBmp; + QBitmap maskBmp; + QBitmap xBmp; + QBitmap btnMaskBmp, htmlBtnMaskBmp; + QPixmap *btnBorderPix, *btnBlendPix, *bevelFillPix, *smallBevelFillPix, *menuPix; + QBitmap paper1, paper2, paper3; + QBrush baseBrush, menuBrush, pagerBrush, pagerHoverBrush, bgBrush; + bool menuAni, menuFade; + + QIntDictbtnDict; + QIntDictbtnBorderDict; + QIntDictbevelFillDict; + QIntDictsmallBevelFillDict; + + QListcustomBtnColorList; + QListcustomBtnIconList; + QStrList customBtnLabelList; + QPixmap *vsbSliderFillPix; + TransMenuHandler *menuHandler; + QPixmap *pixmaps[BITMAP_ITEMS]; + QPixmap sbBuffer; + int oldSliderThickness; + int lowLightVal; + QHeader *currentHeader; + int headerHoverID; + QWMatrix rMatrix; + int bH, bS, bV; + int bHoverH, bHoverS, bHoverV; + int btnH, btnS, btnV; + int btnHoverH, btnHoverS, btnHoverV; +}; + +#endif diff --git a/noncore/styles/liquid/liquid.pro b/noncore/styles/liquid/liquid.pro new file mode 100644 index 0000000..b5dc1bc --- a/dev/null +++ b/noncore/styles/liquid/liquid.pro @@ -0,0 +1,19 @@ +TEMPLATE = lib + +CONFIG = qt embedded release warn_on + +SOURCES = liquid.cpp \ + effects.cpp \ + plugin.cpp + +HEADERS = liquid.h \ + effects.h + +LIBS += -lqpe + +INCLUDEPATH += $(OPIEDIR)/include + +DESTDIR = $(OPIEDIR)/plugins/styles +TARGET = liquid + +VERSION = 1.0.0 \ No newline at end of file diff --git a/noncore/styles/liquid/mk_qpl_diff.sh b/noncore/styles/liquid/mk_qpl_diff.sh new file mode 100755 index 0000000..b297cd1 --- a/dev/null +++ b/noncore/styles/liquid/mk_qpl_diff.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +FILES="liquid.h liquid.cpp plugin.cpp" + +echo -n "Creating QPL diff for liquid ... " + +cat >opie-liquid.diff <>opie-liquid.diff +done + +echo "done" + +exit 0 \ No newline at end of file diff --git a/noncore/styles/liquid/mosfet-liquid0.7.tar.gz b/noncore/styles/liquid/mosfet-liquid0.7.tar.gz new file mode 100644 index 0000000..470ef9c --- a/dev/null +++ b/noncore/styles/liquid/mosfet-liquid0.7.tar.gz Binary files differ diff --git a/noncore/styles/liquid/opie-liquid.control b/noncore/styles/liquid/opie-liquid.control new file mode 100644 index 0000000..7b6ae71 --- a/dev/null +++ b/noncore/styles/liquid/opie-liquid.control @@ -0,0 +1,10 @@ +Files: plugins/styles/libliquid.so* +Priority: optional +Section: opie/system +Maintainer: Robert Griebl +Architecture: arm +Version: $QPE_VERSION-$SUB_VERSION.1 +Depends: opie-base ($QPE_VERSION) +Description: Liquid style by Mosfet. + Mosfet's well known Liquid GUI style from KDE, +ported to OPIE. diff --git a/noncore/styles/liquid/opie-liquid.diff b/noncore/styles/liquid/opie-liquid.diff new file mode 100644 index 0000000..f902cb8 --- a/dev/null +++ b/noncore/styles/liquid/opie-liquid.diff @@ -0,0 +1,1114 @@ +This is a patch to mosfet's liquid 0.7. +Features: + - Qt-only + - works with Qt/E on QPE/OPIE + +--- - Mon Jun 24 19:05:49 2002 ++++ liquid.h Fri Jun 21 14:48:21 2002 +@@ -2,7 +2,7 @@ + #define LIQUID_STYLE_H + + +-#include ++#include + #include + #include + #include +@@ -20,7 +20,7 @@ + * Copyright (C)QPL 2001 Daniel M. Duley. All rights reserved. + */ + +-class KPixmap; ++class QPixmap; + + #define BITMAP_ITEMS 41 + #define LIQUID_MENU_CHANGE 667 +@@ -50,24 +50,22 @@ + ~TransMenuHandler(){;} + void reloadSettings(); + int transType(){return(type);} +- KPixmap *pixmap(WId id){return(pixDict.find(id));} ++ QPixmap *pixmap(WId id){return(pixDict.find(id));} + const QColor& textColor(){return(fgColor);} + const QColor& bgColor(){return(color);} + bool useShadowText(){return(shadowText);} +-protected slots: +- void slotKIPCMessage(int id, int arg); + protected: + bool eventFilter(QObject *obj, QEvent *ev); +- void stripePixmap(KPixmap &pix, const QColor &color); ++ void stripePixmap(QPixmap &pix, const QColor &color); + + QColor color, fgColor; + int opacity; + int type; + bool shadowText; +- QIntDictpixDict; ++ QIntDictpixDict; + }; + +-class LiquidStyle : public KStyle ++class LiquidStyle : public QWindowsStyle + { + friend class TransMenuHandler; + public: +@@ -121,33 +119,14 @@ + bool tickAbove, bool tickBelow); + void drawSliderMask(QPainter *p, int x, int y, int w, int h, + Orientation orient, bool, bool); +- void drawKToolBar(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, KToolBarPos type, +- QBrush *fill=NULL); +- void drawKBarHandle(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, +- KToolBarPos type, QBrush *fill=NULL); +- void drawKMenuBar(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, bool macMode, +- QBrush *fill=NULL); +- void drawKToolBarButton(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, bool sunken=false, +- bool raised = true, bool enabled = true, +- bool popup = false, +- KToolButtonType icontext = Icon, +- const QString& btext=QString::null, +- const QPixmap *icon=NULL, +- QFont *font=NULL, QWidget *btn=NULL); +- void drawKMenuItem(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, bool active, +- QMenuItem *item, QBrush *fill=NULL); ++ void drawMenuBarItem(QPainter *p, int x, int y, int w, int h, ++ QMenuItem *mi, QColorGroup &g, bool enabled, bool active ); ++ + void drawPopupMenuItem(QPainter *p, bool checkable, int maxpmw, + int tab, QMenuItem *mi, const QPalette &pal, + bool act, bool enabled, int x, int y, int w, + int h); + int popupMenuItemHeight(bool c, QMenuItem *mi, const QFontMetrics &fm); +- void drawKProgressBlock(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, QBrush *fill); + void drawFocusRect(QPainter *p, const QRect &r, const QColorGroup &g, + const QColor *pen, bool atBorder); + int defaultFrameWidth() const {return(2);} +@@ -167,12 +146,6 @@ + void drawToolButton(QPainter *p, int x, int y, int w, + int h, const QColorGroup &g, + bool sunken, const QBrush *fill); +- void drawKickerAppletHandle(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, QBrush *); +- void drawKickerTaskButton(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, +- const QString &title, bool active, +- QPixmap *icon, QBrush *fill); + // for repainting toolbuttons when the toolbar is resized + bool eventFilter(QObject *obj, QEvent *ev); + void drawSliderGroove(QPainter * p, int x, int y, int w, int h, +--- - Mon Jun 24 19:05:49 2002 ++++ liquid.cpp Fri Jun 21 22:02:55 2002 +@@ -10,12 +10,9 @@ + + #include + #include "liquid.h" +-#include +-#include +-#include +-#include +-#include +-#include ++#include ++#include ++#include "effects.h" + #include + #include + #include +@@ -25,28 +22,29 @@ + #include + #include + #include +-#include +-#include ++#include + #include + #include + #include + #include + #include +-#include +-#include +-#include +-#include ++#include + +-#include +-#include ++ ++#include + + #include "htmlmasks.h" + #include "embeddata.h" + +-void TransMenuHandler::stripePixmap(KPixmap &pix, const QColor &color) ++typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, ++ QColorGroup &, bool, bool); ++ ++QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl impl); ++ ++void TransMenuHandler::stripePixmap(QPixmap &pix, const QColor &color) + { + QImage img(pix.convertToImage()); +- KImageEffect::fade(img, 0.9, color); ++ QImageEffect::fade(img, 0.9, color); + int x, y; + int r, g, b; + for(y=0; y < img.height(); y+=3){ +@@ -71,24 +69,21 @@ + : QObject(parent) + { + pixDict.setAutoDelete(true); +- connect(kapp, SIGNAL(kipcMessage(int, int)), this, +- SLOT(slotKIPCMessage(int, int))); + reloadSettings(); + } + + void TransMenuHandler::reloadSettings() + { + pixDict.clear(); +- KConfig *config = KGlobal::config(); +- config->setGroup("MosfetMenus"); + +- type = config->readNumEntry("Type", TransStippleBg); +- color = config->readColorEntry("Color", +- &QApplication::palette().active().button()); +- fgColor = config->readColorEntry("TextColor", +- &QApplication::palette().active().text()); +- opacity = config->readNumEntry("Opacity", 10); +- shadowText = config->readBoolEntry("ShadowText", true); ++ Config config ( "qpe" ); ++ config. setGroup ( "MosfetMenus" ); ++ ++ type = config. readNumEntry("Type", TransStippleBg); ++ color = QColor ( config. readEntry("Color", QApplication::palette().active().button().name())); ++ fgColor = QColor ( config. readEntry("TextColor", QApplication::palette().active().text().name())); ++ opacity = config. readNumEntry("Opacity", 10); ++ shadowText = config. readBoolEntry("ShadowText", true); + } + + bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev) +@@ -99,7 +94,7 @@ + if(type == TransStippleBg || type == TransStippleBtn || + type == Custom){ + QApplication::syncX(); +- KPixmap *pix = new KPixmap; ++ QPixmap *pix = new QPixmap; + if(p->testWFlags(Qt::WType_Popup)){ + QRect r(p->x(), p->y(), p->width(), p->height()); + QRect deskR = QApplication::desktop()->rect(); +@@ -107,7 +102,7 @@ + r.setBottom(deskR.bottom()); + r.setRight(deskR.right()); + } +- *pix = QPixmap::grabWindow(qt_xrootwin(), r.x(), r.y(), ++ *pix = QPixmap::grabWindow(QApplication::desktop()-> winId(), r.x(), r.y(), + r.width(), r.height()); + } + else{ // tear off menu +@@ -121,7 +116,7 @@ + stripePixmap(*pix, p->colorGroup().button()); + } + else{ +- KPixmapEffect::fade(*pix, (((float)opacity)+80)*0.01, color); ++ QPixmapEffect::fade(*pix, (((float)opacity)+80)*0.01, color); + } + pixDict.insert(p->winId(), pix); + } +@@ -129,74 +124,19 @@ + else if(ev->type() == QEvent::Hide){ + if(type == TransStippleBg || type == TransStippleBtn || + type == Custom){ +- qWarning("Deleting menu pixmap, width %d", pixDict.find(p->winId())->width()); ++// qWarning("Deleting menu pixmap, width %d", pixDict.find(p->winId())->width()); + pixDict.remove(p->winId()); + } + } + return(false); + } + +-void TransMenuHandler::slotKIPCMessage(int id, int) +-{ +- if(id == LIQUID_MENU_CHANGE){ +- bool oldShadow = shadowText; +- +- KConfig *config = KGlobal::config(); +- config->reparseConfiguration(); // in case KControl changed values +- +- // Make sure no popupmenus are shown. There shouldn't be any because +- // the user just clicked "Apply", but there can be tear offs ;-) +- // We just close them so the pixmaps are deleted and regenerated. +- QWidgetList *list = QApplication::topLevelWidgets(); +- QWidgetListIt it( *list ); +- QWidget *w; +- while ((w=it.current()) != 0 ){ +- ++it; +- if(w->inherits("QPopupMenu")){ +- w->close(); +- } +- } +- +- reloadSettings(); +- +- // Now repaint menubar if needed +- if(shadowText != oldShadow){ +- it.toFirst(); +- while ((w=it.current()) != 0 ){ +- ++it; +- if(w->inherits("QMenuBar")){ +- w->repaint(); +- } +- } +- } +- } +- else if(id == MOSFET_BUTTON_CHANGE){ +- qWarning("In mosfet button change"); +- // really, this should be in LiquidStyle, but what the hell? ;-) +- QWidgetList *list = QApplication::allWidgets(); +- QWidgetListIt it( *list ); +- QWidget *w; +- while ((w=it.current()) != 0 ){ +- ++it; +- if(w->inherits("QPushButton")){ +- ((LiquidStyle*)parent())->unapplyCustomAttributes((QPushButton *)w); +- } +- } +- ((LiquidStyle*)parent())->loadCustomButtons(); +- it.toFirst(); +- while ((w=it.current()) != 0 ){ +- ++it; +- if(w->inherits("QPushButton")){ +- ((LiquidStyle*)parent())->applyCustomAttributes((QPushButton *)w); +- } +- } +- +- } +-} + + LiquidStyle::LiquidStyle() +- :KStyle() ++ :QWindowsStyle() + { ++ setName ( "LiquidStyle" ); ++ + btnMaskBmp = QBitmap(37, 26, buttonmask_bits, true); + btnMaskBmp.setMask(btnMaskBmp); + htmlBtnMaskBmp = QBitmap(37, 26, htmlbuttonmask_bits, true); +@@ -730,20 +670,19 @@ + } + + loadCustomButtons(); +- lowLightVal = 100 + (2*KGlobalSettings::contrast()+4)*10; ++ lowLightVal = 100 + (2* /*KGlobalSettings::contrast()*/ 3 +4)*10; + btnDict.clear(); + btnBorderDict.clear(); + bevelFillDict.clear(); + smallBevelFillDict.clear(); + +- KConfig *config = KGlobal::config(); +- QString oldGrp = config->group(); ++ Config config ( "qpe" ); + QPalette pal = QApplication::palette(); + + // button color stuff +- config->setGroup("General"); +- QColor c = config->readColorEntry("buttonBackground", &Qt::lightGray); +- if(c == config->readColorEntry("background", &Qt::lightGray)){ ++ config. setGroup ( "Appearance" ); ++ QColor c = QColor ( config. readEntry("Button", ( Qt::lightGray ). name ( ))); ++ if ( c == QColor ( config. readEntry ( "background", ( Qt::lightGray ). name ( )))) { + // force button color to be different from background + QBrush btnBrush(QColor(200, 202, 228)); + appPal.setBrush(QColorGroup::Button, btnBrush); +@@ -794,15 +733,7 @@ + pagerBrush.setPixmap(*pix); + + // background color stuff +- c = config->readColorEntry("background", &Qt::lightGray); +- if(qstrcmp(kapp->argv()[0], "kicker") == 0){ +- appPal.setColor(QColorGroup::Mid, menuBrush.color().dark(110)); +- appPal.setColor(QColorGroup::Dark, menuBrush.color().dark(130)); +- appPal.setColor(QColorGroup::Midlight, menuBrush.color().light(110)); +- appPal.setColor(QColorGroup::Light, menuBrush.color().light(115)); +- menuBrush.setColor(c); // hack - used for kicker applets +- appPal.setBrush(QColorGroup::Background, menuBrush); +- } ++ c = QColor ( config. readEntry ( "Background", ( Qt::lightGray ).name ( ))); + c.hsv(&bH, &bS, &bV); + c.light(120).hsv(&bHoverH, &bHoverS, &bHoverV); + +@@ -825,13 +756,10 @@ + painter.end(); + bgBrush.setColor(c); + bgBrush.setPixmap(wallPaper); +- if(qstrcmp(kapp->argv()[0], "kicker") != 0 && +- qstrcmp(kapp->argv()[0], "ksplash") != 0){ + appPal.setBrush(QColorGroup::Background, bgBrush); +- } + + // lineedits +- c = config->readColorEntry("windowBackground", &Qt::white); ++ c = QColor ( config. readEntry("Base", ( Qt::white). name ( ))); + QPixmap basePix; + basePix.resize(32, 32); + basePix.fill(c.rgb()); +@@ -857,51 +785,27 @@ + } + } + +- config->setGroup(oldGrp); + } + + void LiquidStyle::polish(QWidget *w) + { + if(w->inherits("QMenuBar")){ +- ((QFrame*)w)->setLineWidth(0); +- w->setBackgroundMode(QWidget::NoBackground); ++ //((QFrame*)w)->setLineWidth(0); ++ w->setBackgroundMode(QWidget::PaletteBackground); + return; + } + if(w->inherits("QPopupMenu")) + w->setBackgroundMode(QWidget::NoBackground); + + if(w->isTopLevel()){ +- if(!w->inherits("QPopupMenu") && +- qstrcmp(kapp->argv()[0], "kicker") == 0){ +- qWarning("Got panel toplevel %s", w->className()); +- // force extensions and child panels to use proper palette. +- if(w->inherits("Panel")){ +- qWarning("Setting panel palette"); +- w->setPalette(kapp->palette()); +- } +- else{ +- // reset palette for everything else +- QPalette pal = kapp->palette(); +- pal.setBrush(QColorGroup::Background, bgBrush); +- pal.setColor(QColorGroup::Mid, bgBrush.color().dark(130)); +- pal.setColor(QColorGroup::Dark, bgBrush.color().dark(150)); +- pal.setColor(QColorGroup::Midlight, bgBrush.color().light(110)); +- pal.setColor(QColorGroup::Light, bgBrush.color().light(120)); +- w->setPalette(pal); +- } +- } + return; + } +- if(qstrcmp(kapp->argv()[0], "kicker") == 0 && +- w->inherits("KPanelExtension")){ // FIXME - doesn't work +- w->setPalette(kapp->palette()); +- } ++ ++ w-> setBackgroundOrigin ( QWidget::ParentOrigin ); + + if(w->inherits("QComboBox") || + w->inherits("QLineEdit") || w->inherits("QRadioButton") || +- w->inherits("QCheckBox") || w->inherits("QScrollBar") || +- w->isA("AppletHandle") || w->inherits("KMiniPagerButton") || +- w->inherits("TaskContainer")){ ++ w->inherits("QCheckBox") || w->inherits("QScrollBar")) { + w->installEventFilter(this); + } + if(w->inherits("QLineEdit")){ +@@ -913,6 +817,9 @@ + applyCustomAttributes((QPushButton *)w); + w->installEventFilter(this); + } ++ if(w->inherits("QButton") || w-> inherits("QComboBox")){ ++ w-> setBackgroundMode ( QWidget::PaletteBackground ); ++ } + + bool isViewport = qstrcmp(w->name(), "qt_viewport") == 0 || + qstrcmp(w->name(), "qt_clipped_viewport") == 0; +@@ -942,11 +849,12 @@ + w->setMouseTracking(true); + w->installEventFilter(this); + } ++ if(w-> inherits("QToolButton")) { ++ ((QToolButton*)w)->setAutoRaise (false); ++ } + if(w->ownPalette() && !w->inherits("QButton") && !w->inherits("QComboBox")){ + return; + } +- if(w->inherits("PanelButtonBase")) +- return; + + if(w->parent() && w->parent()->isWidgetType() && !((QWidget*)w->parent())-> + palette().active().brush(QColorGroup::Background).pixmap()){ +@@ -954,17 +862,18 @@ + return; + } + if(!isViewport && !isViewportChild && !w->testWFlags(WType_Popup) && +- !w->inherits("KDesktop") && !w->inherits("PasswordDlg")){ ++ !( !w-> inherits("QLineEdit") && w-> parent() && w-> parent()-> isWidgetType ( ) && w-> parent()-> inherits ( "QMultiLineEdit" ))) { + if(w->backgroundMode() == QWidget::PaletteBackground || + w->backgroundMode() == QWidget::PaletteButton){ + w->setBackgroundMode(QWidget::X11ParentRelative); + } + } +- if(w->inherits("KToolBar")){ ++ if(w->inherits("QToolBar")){ + w->installEventFilter(this); +- //w->setBackgroundMode(QWidget::NoBackground); ++ w->setBackgroundMode(QWidget::PaletteBackground); + return; + } ++ + } + + void LiquidStyle::unPolish(QWidget *w) +@@ -1001,12 +910,14 @@ + unapplyCustomAttributes((QPushButton *)w); + w->removeEventFilter(this); + } +- ++/* ++ if(w->inherits("QPushButton") || w-> inherits("QComboBox")){ ++ w-> setBackgroundMode ( PaletteBackground ); ++ } ++*/ + if(w->inherits("QComboBox") || + w->inherits("QLineEdit") || w->inherits("QRadioButton") || +- w->inherits("QCheckBox") || w->inherits("QScrollBar") || +- w->isA("AppletHandle") || w->inherits("KMiniPagerButton") || +- w->inherits("TaskContainer")){ ++ w->inherits("QCheckBox") || w->inherits("QScrollBar")) { + w->removeEventFilter(this); + } + if(w->inherits("QButton") || w->inherits("QComboBox")){ +@@ -1014,9 +925,9 @@ + w->setAutoMask(false); + } + } +- if(w->inherits("KToolBar")){ ++ if(w->inherits("QToolBar")){ + w->removeEventFilter(this); +- //w->setBackgroundMode(QWidget::PaletteBackground); ++ w->setBackgroundMode(QWidget::PaletteBackground); + return; + } + if(w->inherits("QHeader")){ +@@ -1028,20 +939,24 @@ + void LiquidStyle::polish(QApplication *app) + { + +- KStyle::polish(app); ++ QWindowsStyle::polish(app); + menuAni = app->isEffectEnabled(UI_AnimateMenu); + menuFade = app->isEffectEnabled(UI_FadeMenu); + if(menuAni) + app->setEffectEnabled(UI_AnimateMenu, false); + if(menuFade) + app->setEffectEnabled(UI_FadeMenu, false); ++ ++ qt_set_draw_menu_bar_impl((QDrawMenuBarItemImpl) &LiquidStyle::drawMenuBarItem); + } + + void LiquidStyle::unPolish(QApplication *app) + { +- KStyle::unPolish(app); ++ QWindowsStyle::unPolish(app); + app->setEffectEnabled(UI_AnimateMenu, menuAni); + app->setEffectEnabled(UI_FadeMenu, menuFade); ++ ++ qt_set_draw_menu_bar_impl ( 0 ); + } + + /* +@@ -1063,7 +978,7 @@ + */ + bool LiquidStyle::eventFilter(QObject *obj, QEvent *ev) + { +- if(obj->inherits("KToolBar")){ ++ if(obj->inherits("QToolBar")){ + if(ev->type() == QEvent::Resize){ + const QObjectList *tbChildList = obj->children(); + QObjectListIt it(*tbChildList); +@@ -1076,35 +991,7 @@ + + } + } +- else if(obj->inherits("KMiniPagerButton")){ +- QButton *btn = (QButton *)obj; +- if(ev->type() == QEvent::Paint){ +- if(!(btn->isOn() || btn->isDown())){ +- QPalette pal = btn->palette(); +- pal.setBrush(QColorGroup::Dark, btn == highlightWidget ? +- pagerHoverBrush : pagerBrush); +- btn->setPalette(pal); +- } +- else{ +- QPalette pal = btn->palette(); +- pal.setBrush(QColorGroup::Dark, +- QApplication::palette().active().brush(QColorGroup::Dark)); +- btn->setPalette(pal); +- +- } +- } +- else if(ev->type() == QEvent::Enter){ +- highlightWidget = btn; +- btn->repaint(false); +- } +- else if(ev->type() == QEvent::Leave){ +- highlightWidget = NULL; +- btn->repaint(false); +- } +- +- } +- else if(obj->inherits("QPushButton") || obj->inherits("QComboBox") || +- obj->isA("AppletHandle")){ ++ else if(obj->inherits("QPushButton") || obj->inherits("QComboBox")){ + QWidget *btn = (QWidget *)obj; + if(ev->type() == QEvent::Enter){ + if(btn->isEnabled()){ +@@ -1119,20 +1006,7 @@ + } + } + } +- else if(obj->inherits("TaskContainer")){ +- QButton *btn = (QButton *)obj; +- QPalette pal = btn->palette(); +- if(ev->type() == QEvent::Enter){ +- pal.setColor(QColorGroup::Background, pal.active().button().light(110)); +- btn->setPalette(pal); +- } +- else if(ev->type() == QEvent::Leave){ +- pal.setColor(QColorGroup::Background, +- QApplication::palette().active().background()); +- btn->setPalette(pal); +- } +- } +- else if(obj->inherits("QToolButton") && !obj->inherits("KToolBarButton")){ ++ else if(obj->inherits("QToolButton")){ + QToolButton *btn = (QToolButton *)btn; + if(!btn->autoRaise()){ + if(btn->isEnabled()){ +@@ -1340,11 +1214,6 @@ + QColorGroup g = btn->colorGroup(); + + +- QColor testColor; +- if(btn->parent() && btn->parent()->isWidgetType()){ +- testColor = p->backgroundColor(); // remove me +- } +- + //int dw = buttonDefaultIndicatorWidth(); + if(btn->hasFocus() || btn->isDefault()){ + QColor c = btn->hasFocus() ? g.button().light(110) : g.background(); +@@ -2065,203 +1934,24 @@ + p->drawLineSegments(a); + } + +-void LiquidStyle::drawKBarHandle(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, KToolBarPos, +- QBrush *) +-{ +- p->setPen(g.button().dark(120)); +- int x2 = x+w-1; +- int y2 = y+h-1; +- p->drawLine(x+1, y, x2-1, y); +- p->drawLine(x+1, y2, x2-1, y2); +- p->drawLine(x, y+1, x, y2-1); +- p->drawLine(x2, y+1, x2, y2-1); +- +- p->setPen(g.background()); +- p->drawPoint(x, y); +- p->drawPoint(x2, y); +- p->drawPoint(x, y2); +- p->drawPoint(x2, y2); +- +- +- +- // p->drawRect(x, y, w, h); +- QPixmap *pix = bevelFillDict.find(g.button().rgb()); +- if(!pix){ +- int h, s, v; +- g.button().hsv(&h, &s, &v); +- pix = new QPixmap(*bevelFillPix); +- adjustHSV(*pix, h, s, v); +- bevelFillDict.insert(g.button().rgb(), pix); +- } +- +- p->drawTiledPixmap(x+1, y+1, w-2, h-2, *pix); +-} +- +-void LiquidStyle::drawKMenuBar(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, bool mac, QBrush *) +-{ +- if(p->device() && p->device()->devType() == QInternal::Widget && +- ((KMenuBar *)p->device())->isTopLevelMenu()){ +- p->setPen(Qt::black); +- p->drawRect(x, y, w, h); +- p->drawTiledPixmap(x+1, y+1, w-2, h-2, *menuPix); +- // left +- p->drawLine(x+1, y+1, x+1, y+5); +- p->drawLine(x+2, y+1, x+2, y+3); +- p->drawLine(x+3, y+1, x+3, y+2); +- p->drawLine(x+4, y+1, x+6, y+1); +- // right +- int x2 = x+w-1; +- p->drawLine(x2-1, y+1, x2-1, y+5); +- p->drawLine(x2-2, y+1, x2-2, y+3); +- p->drawLine(x2-3, y+1, x2-3, y+2); +- p->drawLine(x2-4, y+1, x2-6, y+1); +- } +- else{ +- qDrawShadePanel(p, x, y, w, h, g, false, 1, +- &g.brush(QColorGroup::Background)); +- } + +-} +- +-void LiquidStyle::drawKToolBar(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, KToolBarPos, QBrush *) ++void LiquidStyle::drawMenuBarItem(QPainter *p, int x, int y, int w, int h, ++ QMenuItem *mi, QColorGroup &g, bool enabled, bool active ) + { +- //p->fillRect(x, y, w, h, g.brush(QColorGroup::Background)); +-} ++ x -= 2; // Bug in Qt/E ++ y -= 2; ++ w += 2; ++ h += 2; + +-void LiquidStyle::drawKToolBarButton(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, bool sunken, +- bool raised, bool enabled, bool popup, +- KToolButtonType icontext, +- const QString& btext, const QPixmap *pixmap, +- QFont *font, QWidget *btn) +-{ +- int dx, dy; +- +- QFontMetrics fm(*font); +- +- QToolBar* toolbar = 0; +- if(btn->parent() && btn->parent()->isWidgetType() && btn->parent()->inherits("QToolBar")) +- toolbar = static_cast(btn->parent()); +- +- --w, --h; +- if(sunken) +- ++x, ++y; ++ p-> fillRect ( x, y, w, h, g.brush(QColorGroup::Background)); + +- QColor btnColor(sunken ? g.button() : raised ? g.button().light(110) : +- g.background()); +- drawClearBevel(p, x, y, w, h, btnColor, g.background()); +- +- p->setPen(g.text()); +- +- if (icontext == Icon){ // icon only +- if (pixmap){ +- dx = ( w - pixmap->width() ) / 2; +- dy = ( h - pixmap->height() ) / 2; +- if ( sunken ) +- { +- ++dx; +- ++dy; +- } +- p->drawPixmap( x+dx, y+dy, *pixmap ); +- } +- } +- else if (icontext == IconTextRight){ // icon and text (if any) +- if (pixmap){ +- dx = 4; +- dy = ( h - pixmap->height() ) / 2; +- if ( sunken ){ +- ++dx; +- ++dy; +- } +- p->drawPixmap( x+dx, y+dy, *pixmap ); +- } +- if (!btext.isNull()){ +- int tf = AlignVCenter|AlignLeft; +- if (pixmap) +- dx= 4 + pixmap->width() + 2; +- else +- dx= 4; +- dy = 0; +- if ( sunken ){ +- ++dx; +- ++dy; +- } +- if (font) +- p->setFont(*font); +- if(raised) +- p->setPen(KGlobalSettings::toolBarHighlightColor()); +- p->drawText(x+dx, y+dy, w-dx, h, tf, btext); +- } +- } +- else if (icontext == Text){ // only text, even if there is a icon +- if (!btext.isNull()){ +- int tf = AlignVCenter|AlignLeft; +- if (!enabled) +- p->setPen(g.dark()); +- dx= (w - fm.width(btext)) / 2; +- dy= (h - fm.lineSpacing()) / 2; +- if ( sunken ){ +- ++dx; +- ++dy; +- } +- if (font) +- p->setFont(*font); +- if(raised) +- p->setPen(KGlobalSettings::toolBarHighlightColor()); +- p->drawText(x+dx, y+dy, fm.width(btext), fm.lineSpacing(), tf, btext); +- } +- } +- else if (icontext == IconTextBottom){ +- if (pixmap){ +- dx = (w - pixmap->width()) / 2; +- dy = (h - fm.lineSpacing() - pixmap->height()) / 2; +- if ( sunken ){ +- ++dx; +- ++dy; +- } +- p->drawPixmap( x+dx, y+dy, *pixmap ); +- } +- if (!btext.isNull()){ +- int tf = AlignBottom|AlignHCenter; +- dy= pixmap->height(); +- dx = 2; +- if ( sunken ){ +- ++dx; +- ++dy; +- } +- if (font) +- p->setFont(*font); +- if(raised) +- p->setPen(KGlobalSettings::toolBarHighlightColor()); +- p->drawText(x, y, w, h-3, tf, btext); +- } +- } +- if (popup){ +- if (enabled) +- qDrawArrow (p, Qt::DownArrow, Qt::WindowsStyle, false, w-5, h-5, 0, 0, +- g, true); +- else +- qDrawArrow (p, Qt::DownArrow, Qt::WindowsStyle, false, w-5, h-5, +- 0, 0, g, false); +- } +-} +- +- +-void LiquidStyle::drawKMenuItem(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, bool active, QMenuItem *mi, +- QBrush *) +-{ +- if ( p->font() == KGlobalSettings::generalFont() ) +- p->setFont( KGlobalSettings::menuFont() ); ++ w -= 2; + + if(menuHandler->useShadowText()){ + QColor shadow; + if(p->device() && p->device()->devType() == QInternal::Widget && +- ((QWidget *)p->device())->inherits("KMenuBar")){ +- shadow = ((KMenuBar*)p->device())->isTopLevel() ? g.button().dark(130) : ++ ((QWidget *)p->device())->inherits("QMenuBar")){ ++ shadow = ((QMenuBar*)p->device())->isTopLevel() ? g.button().dark(130) : + g.background().dark(130); + } + else +@@ -2336,8 +2026,6 @@ + + maxpmw = QMAX( maxpmw, 20 ); + +- if ( p->font() == KGlobalSettings::generalFont() ) +- p->setFont( KGlobalSettings::menuFont() ); + + bool dis = !enabled; + QColorGroup itemg = dis ? pal.disabled() : pal.active(); +@@ -2363,7 +2051,7 @@ + p->fillRect(x, y, w, h, menuBrush); + } + else{ +- KPixmap *pix = menuHandler->pixmap(((QWidget*)p->device())->winId()); ++ QPixmap *pix = menuHandler->pixmap(((QWidget*)p->device())->winId()); + if(pix) + p->drawPixmap(x, y, *pix, x, y, w, h); + } +@@ -2508,25 +2196,6 @@ + return h; + } + +-void LiquidStyle::drawKProgressBlock(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, QBrush *fill) +-{ +- p->setPen(g.button().dark(130)); +- p->drawRect(x, y, w, h); +- p->setPen(g.button().light(120)); +- p->drawRect(x+1, y+1, w-2, h-2); +- if(w >= 4 && h >= 4){ +- QPixmap *pix = bevelFillDict.find(g.button().dark(120).rgb()); +- if(!pix){ +- int h, s, v; +- g.button().dark(120).hsv(&h, &s, &v); +- pix = new QPixmap(*bevelFillPix); +- adjustHSV(*pix, h, s, v); +- bevelFillDict.insert(g.button().dark(120).rgb(), pix); +- } +- p->drawTiledPixmap(x+2, y+2, w-4, h-4, *pix); +- } +-} + + void LiquidStyle::drawFocusRect(QPainter *p, const QRect &r, + const QColorGroup &g, const QColor *c, +@@ -2540,25 +2209,25 @@ + return; + } + else{ +- KStyle::drawFocusRect(p, r, g, c, atBorder); ++ QWindowsStyle::drawFocusRect(p, r, g, c, atBorder); + } + } + else +- KStyle::drawFocusRect(p, r, g, c, atBorder); ++ QWindowsStyle::drawFocusRect(p, r, g, c, atBorder); + + } + + void LiquidStyle::polishPopupMenu(QPopupMenu *mnu) + { + mnu->installEventFilter(menuHandler); +- KStyle::polishPopupMenu(mnu); ++ QWindowsStyle::polishPopupMenu(mnu); + } + + void LiquidStyle::drawTab(QPainter *p, const QTabBar *tabBar, QTab *tab, + bool selected) + { + if(tabBar->shape() != QTabBar::RoundedAbove){ +- KStyle::drawTab(p, tabBar, tab, selected); ++ QWindowsStyle::drawTab(p, tabBar, tab, selected); + return; + } + QPixmap tilePix; +@@ -2671,7 +2340,7 @@ + vFrame = 8; // was 10 + } + else +- KStyle::tabbarMetrics(t, hFrame, vFrame, overlap); ++ QWindowsStyle::tabbarMetrics(t, hFrame, vFrame, overlap); + } + + +@@ -2699,7 +2368,7 @@ + p->drawLine(x+1, y+1, x+1, y2-1); + } + else if(lineWidth != 2 || !sunken) +- KStyle::drawPanel(p, x, y, w, h, g, sunken, lineWidth, fill); ++ QWindowsStyle::drawPanel(p, x, y, w, h, g, sunken, lineWidth, fill); + else{ + QPen oldPen = p->pen(); + int x2 = x+w-1; +@@ -2726,105 +2395,6 @@ + } + } + +-void LiquidStyle::drawKickerAppletHandle(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, QBrush *) +-{ +- p->fillRect(x, y, w, h, g.brush(QColorGroup::Background)); +- drawClearBevel(p, x, y, w, h, highlightWidget == p->device() ? +- g.button().light(120) : g.button(), g.button()); +- /* +- if(h > w){ +- int y2 = y+h-1; +- +- p->setPen(g.light()); +- +- p->drawLine(x+1, y+2, x+1, y2-2); +- p->drawLine(x+4, y+2, x+4, y2-2); +- +- p->setPen(g.dark()); +- p->drawLine(x+2, y+2, x+2, y2-2); +- p->drawLine(x+5, y+2, x+5, y2-2); +- +- } +- else{ +- int x2 = x+w-1; +- +- p->setPen(g.light()); +- +- p->drawLine(x+2, y+1, x2-2, y+1); +- p->drawLine(x+2, y+4, x2-2, y+4); +- +- p->setPen(g.dark()); +- p->drawLine(x+2, y+2, x2-2, y+2); +- p->drawLine(x+2, y+5, x2-2, y+5); +- }*/ +- +-} +- +-void LiquidStyle::drawKickerTaskButton(QPainter *p, int x, int y, int w, int h, +- const QColorGroup &g, +- const QString &text, bool sunken, +- QPixmap *pixmap, QBrush *) +-{ +- p->fillRect(x, y, w, h, g.brush(QColorGroup::Button)); +- drawClearBevel(p, x, y, w, h, sunken ? g.button() : g.background(), g.button()); +- p->setPen(g.buttonText()); // Kicker doesn't set this ;-) +- +- if(text.isNull() && !pixmap) +- return; +- +- const int pxWidth = 20; +- int textPos = pxWidth; +- QRect br(buttonRect(x, y, w, h)); +- +- if (sunken) +- p->translate(1,1); +- +- if ( pixmap && !pixmap->isNull() ) { +- int dx = ( pxWidth - pixmap->width() ) / 2; +- int dy = ( h - pixmap->height() ) / 2; +- p->drawPixmap( br.x()+dx, dy, *pixmap ); +- } +- +- QString s = text; +- static const QString &modStr = KGlobal::staticQString( +- QString::fromUtf8("[") + i18n("modified") + QString::fromUtf8("]")); +- +- int modStrPos = s.find(modStr); +- +- if (-1 != modStrPos) { +- +- // +1 because we include a space after the closing brace. +- s.remove(modStrPos, modStr.length()+1); +- +- QPixmap modPixmap = SmallIcon("modified"); +- +- int dx = (pxWidth - modPixmap.width()) / 2; +- int dy = (h - modPixmap.height()) / 2; +- +- p->drawPixmap(br.x() + textPos + dx, dy, modPixmap); +- +- textPos += pxWidth; +- } +- +- if (!s.isEmpty()){ +- if (p->fontMetrics().width(s) > br.width() - textPos) { +- +- int maxLen = br.width() - textPos - p->fontMetrics().width("..."); +- +- while ((!s.isEmpty()) && (p->fontMetrics().width(s) > maxLen)) +- s.truncate(s.length() - 1); +- +- s.append("..."); +- } +- +- p->setPen(g.buttonText()); +- +- p->drawText(br.x()+ textPos, -1, w-textPos, h, +- AlignLeft|AlignVCenter, s); +- } +- +-} + + void LiquidStyle::adjustHSV(QPixmap &pix, int h, int s, int v) + { +@@ -2998,22 +2568,22 @@ + customBtnIconList.clear(); + customBtnLabelList.clear(); + +- KConfig *config = KGlobal::config(); +- QString oldGrp = config->group(); +- config->setGroup("MosfetButtons"); ++// KConfig *config = KGlobal::config(); ++// QString oldGrp = config->group(); ++// config->setGroup("MosfetButtons"); + + QStrList iconList, colorList; //temp, we store QPixmaps and QColors + iconList.setAutoDelete(true); + colorList.setAutoDelete(true); +- config->readListEntry("Labels", customBtnLabelList); +- config->readListEntry("Icons", iconList); +- config->readListEntry("Colors", colorList); ++// config->readListEntry("Labels", customBtnLabelList); ++// config->readListEntry("Icons", iconList); ++// config->readListEntry("Colors", colorList); + + const char *labelStr = customBtnLabelList.first(); + const char *colorStr = colorList.first(); + const char *iconStr = iconList.first(); + +- KIconLoader *ldr = KGlobal::iconLoader(); ++// KIconLoader *ldr = KGlobal::iconLoader(); + while(labelStr != NULL){ + QColor *c = new QColor; + c->setNamedColor(QString(colorStr)); +@@ -3022,7 +2592,7 @@ + QString tmpStr(iconStr); + if(!tmpStr.isEmpty()){ + QPixmap *pixmap = +- new QPixmap(ldr->loadIcon(tmpStr, KIcon::Small)); ++ new QPixmap();//ldr->loadIcon(tmpStr, KIcon::Small)); + if(pixmap->isNull()){ + delete pixmap; + customBtnIconList.append(NULL); +@@ -3037,7 +2607,6 @@ + colorStr = colorList.next(); + iconStr = iconList.next(); + } +- config->setGroup(oldGrp); + } + + void LiquidStyle::applyCustomAttributes(QPushButton *btn) +@@ -3087,7 +2656,7 @@ + } + } + +-#include "liquid.moc" ++// #include "liquid.moc" + + + +--- - Mon Jun 24 19:05:49 2002 ++++ plugin.cpp Thu Jun 20 20:01:37 2002 +@@ -1,29 +1,29 @@ + #include "liquid.h" +-#include ++ + + extern "C" { +- KStyle* allocate(); +- int minor_version(); +- int major_version(); +- const char *description(); ++ QStyle* allocate ( ); ++ int minor_version ( ); ++ int major_version ( ); ++ const char *description ( ); + } + +-KStyle* allocate() ++QStyle* allocate ( ) + { +- return(new LiquidStyle); ++ return new LiquidStyle ( ); + } + +-int minor_version() ++int minor_version ( ) + { +- return(0); ++ return 0; + } + +-int major_version() ++int major_version ( ) + { +- return(1); ++ return 1; + } + +-const char *description() ++const char *description ( ) + { +- return(i18n("High performance liquid plugin").utf8()); ++ return "High performance liquid plugin"; + } diff --git a/noncore/styles/liquid/plugin.cpp b/noncore/styles/liquid/plugin.cpp new file mode 100644 index 0000000..fca7c06 --- a/dev/null +++ b/noncore/styles/liquid/plugin.cpp @@ -0,0 +1,29 @@ +#include "liquid.h" + + +extern "C" { + QStyle* allocate ( ); + int minor_version ( ); + int major_version ( ); + const char *description ( ); +} + +QStyle* allocate ( ) +{ + return new LiquidStyle ( ); +} + +int minor_version ( ) +{ + return 0; +} + +int major_version ( ) +{ + return 1; +} + +const char *description ( ) +{ + return "High performance liquid plugin"; +} -- cgit v0.9.0.2