diff options
author | Slávek Banko <slavek.banko@axis.cz> | 2016-04-05 02:46:02 +0200 |
---|---|---|
committer | Slávek Banko <slavek.banko@axis.cz> | 2016-04-05 02:46:02 +0200 |
commit | 0fa8770a5566743737ef2812d1f4e6c04d968cda (patch) | |
tree | 2b21a699d9c5a5b4af649f3a7046bb9ae4cb9ad7 /domino | |
download | tde-style-domino-0fa8770a5566743737ef2812d1f4e6c04d968cda.tar.gz tde-style-domino-0fa8770a5566743737ef2812d1f4e6c04d968cda.zip |
Initial import of kde-style-domino 0.4
Diffstat (limited to 'domino')
-rw-r--r-- | domino/Domino.kcsrc | 27 | ||||
-rw-r--r-- | domino/Makefile.am | 20 | ||||
-rw-r--r-- | domino/data.h | 1306 | ||||
-rw-r--r-- | domino/domino.cpp | 8139 | ||||
-rw-r--r-- | domino/domino.h | 865 | ||||
-rw-r--r-- | domino/domino.themerc | 7 | ||||
-rw-r--r-- | domino/eventfilter.cpp | 1840 | ||||
-rw-r--r-- | domino/misc.cpp | 173 | ||||
-rw-r--r-- | domino/misc.h | 28 |
9 files changed, 12405 insertions, 0 deletions
diff --git a/domino/Domino.kcsrc b/domino/Domino.kcsrc new file mode 100644 index 0000000..c689177 --- /dev/null +++ b/domino/Domino.kcsrc @@ -0,0 +1,27 @@ +[Color Scheme] +Name=Domino +activeBackground=149,155,162 +activeBlend=149,155,162 +activeForeground=40,40,40 +activeTitleBtnBg=154,161,168 +alternateBackground=230,230,230 +background=149,155,162 +buttonBackground=149,155,162 +buttonForeground=0,0,0 +contrast=0 +foreground=0,0,0 +frame=149,155,162 +handle=149,155,162 +inactiveBackground=149,155,162 +inactiveBlend=149,155,162 +inactiveForeground=40,40,40 +inactiveFrame=149,155,162 +inactiveHandle=149,155,162 +inactiveTitleBtnBg=123,128,134 +linkColor=10,95,137 +selectBackground=162,168,223 +selectForeground=0,0,0 +shadeSortColumn=false +visitedLinkColor=137,10,137 +windowBackground=237,237,237 +windowForeground=0,0,0 diff --git a/domino/Makefile.am b/domino/Makefile.am new file mode 100644 index 0000000..02f1095 --- /dev/null +++ b/domino/Makefile.am @@ -0,0 +1,20 @@ +AUTOMAKE_OPTIONS = foreign + +KDE_CXXFLAGS = -DQT_PLUGIN -I/usr/include/freetype2 + +INCLUDES = $(all_includes) + +stylercdir = $(kde_datadir)/kstyle/themes +stylerc_DATA = domino.themerc +schemedir = $(kde_datadir)/kdisplay/color-schemes +scheme_DATA = Domino.kcsrc + +noinst_HEADERS = domino.h misc.h data.h + +kde_style_LTLIBRARIES = domino.la +domino_la_SOURCES = domino.cpp misc.cpp +domino_la_LDFLAGS = $(all_libraries) $(KDE_PLUGIN) -module $(KDE_RPATH) +domino_la_LIBADD = $(LIB_KDEUI) $(LIB_KUTILS) $(LIB_QT) -lkdefx -lXrender -lXft $(LIB_KDECORE) +domino_la_METASOURCES = AUTO + +DISTCLEANFILES = $(domino_la_METASOURCES) diff --git a/domino/data.h b/domino/data.h new file mode 100644 index 0000000..5ac0f48 --- /dev/null +++ b/domino/data.h @@ -0,0 +1,1306 @@ +/* + Copyright (C) 2006 Michael Lentner <michaell@gmx.net> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ + + +#ifndef _QEMBED_1804289383 +#define _QEMBED_1804289383 +#include <qimage.h> +#include <qdict.h> +static const QRgb arrow_down_small_data[] = { + 0x2d000000,0x96000000,0x96000000,0x96000000,0x2e000000,0x1000000,0x79000000,0x99000000,0x7a000000,0x1000000,0x0,0x29000000,0x99000000,0x2b000000, + 0x0,0x0,0x0,0x4f000000,0x0,0x0 +}; + +/* Generated by qembed */ +static const QRgb btn17H_data[] = { + 0x0,0x0,0x0,0x0,0xc6000000,0xc6000000,0xc6000000,0xc6000000,0x23000000,0x23000000,0x23000000,0x23000000,0x23000000,0x23000000, + 0x23000000,0x23000000,0xc6000000,0xc6000000,0xc6000000,0xc6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb btn17HRaisedShadow_data[] = { + 0x1e000000,0x1e000000,0x1e000000,0x1e000000,0x15000000,0x15000000,0x15000000,0x15000000,0x1effffff,0x1effffff,0x1effffff,0x1effffff,0x18ffffff,0x18ffffff, + 0x18ffffff,0x18ffffff,0x2000000,0x2000000,0x2000000,0x2000000,0x2d000000,0x2d000000,0x2d000000,0x2d000000,0x11000000,0x11000000,0x11000000,0x11000000 +}; + +static const QRgb btn17HRaisedShadowPressed_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18ffffff,0x18ffffff,0x18ffffff,0x18ffffff,0x18ffffff,0x18ffffff, + 0x18ffffff,0x18ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb btn17HSunkenShadow_data[] = { + 0x1c000000,0x1c000000,0x1c000000,0x1c000000,0x15000000,0x15000000,0x15000000,0x15000000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x4effffff,0x4effffff,0x4effffff,0x4effffff,0x1effffff,0x1effffff,0x1effffff,0x1effffff +}; + +static const QRgb btn17_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x2000000,0x2b000000,0x79000000,0xb3000000,0xb3000000,0x79000000,0x29000000,0x2000000,0x0,0x0,0x0,0x2000000,0x46000000,0xb9000000, + 0x76000000,0x33000000,0x33000000,0x77000000,0xb9000000,0x46000000,0x2000000,0x0,0x0,0x20000000,0xb5000000,0x49000000,0x4000000,0x1000000, + 0x1000000,0x4000000,0x49000000,0xb4000000,0x22000000,0x0,0x0,0x6d000000,0x84000000,0x5000000,0x0,0x0,0x0,0x0, + 0x5000000,0x82000000,0x6f000000,0x0,0x0,0xab000000,0x39000000,0x1000000,0x0,0x0,0x0,0x0,0x1000000,0x39000000, + 0xac000000,0x0,0x0,0xac000000,0x39000000,0x1000000,0x0,0x0,0x0,0x0,0x1000000,0x39000000,0xac000000,0x0, + 0x0,0x6f000000,0x84000000,0x5000000,0x0,0x0,0x0,0x0,0x5000000,0x84000000,0x6f000000,0x0,0x0,0x22000000, + 0xb4000000,0x49000000,0x7000000,0x2000000,0x1000000,0x4000000,0x49000000,0xb6000000,0x22000000,0x0,0x0,0x2000000,0x46000000,0xb9000000, + 0x77000000,0x33000000,0x33000000,0x77000000,0xba000000,0x46000000,0x2000000,0x0,0x0,0x0,0x2000000,0x29000000,0x79000000,0xb4000000, + 0xb6000000,0x79000000,0x29000000,0x2000000,0x0,0x0,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 btn17RaisedShadow3_data[] = { + 0x0,0x0,0x0,0x2000000,0x5000000,0xb000000,0xb000000,0x5000000,0x2000000,0x0,0x0,0x0,0x0,0x0, + 0x3000000,0xd000000,0x15000000,0x10000000,0x10000000,0x15000000,0xd000000,0x3000000,0x0,0x0,0x0,0x3000000,0xe000000,0xf000000, + 0x26f8f8f8,0x1dffffff,0x1effffff,0x26f8f8f8,0xf000000,0xe000000,0x3000000,0x0,0x0,0x8000000,0xe000000,0x1dffffff,0x17ffffff,0x8ffffff, + 0x8ffffff,0x17ffffff,0x1dffffff,0xe000000,0x9000000,0x0,0x3000000,0xe000000,0x1ef6f6f6,0x12ffffff,0x1ffffff,0x0,0x0,0x1ffffff, + 0x12ffffff,0x1ef6f6f6,0xe000000,0x3000000,0x7000000,0xb000000,0x17ffffff,0x7ffffff,0x0,0x0,0x0,0x0,0x6ffffff,0x18ffffff, + 0xb000000,0x7000000,0x9000000,0x8000000,0x18ffffff,0x7ffffff,0x0,0x0,0x0,0x0,0x6ffffff,0x18ffffff,0x8000000,0x9000000, + 0x8000000,0xe000000,0x20f7f7f7,0x12ffffff,0x1ffffff,0x0,0x0,0x1ffffff,0x12ffffff,0x1ff6f6f6,0xe000000,0x8000000,0x5000000,0x10000000, + 0x8000000,0x16ffffff,0x12ffffff,0x6ffffff,0x6ffffff,0x12ffffff,0x16ffffff,0x8000000,0x10000000,0x5000000,0x2000000,0x9000000,0x12000000,0x7000000, + 0x19ffffff,0x18ffffff,0x18ffffff,0x18ffffff,0x7000000,0x12000000,0x9000000,0x2000000,0x0,0x3000000,0xb000000,0x15000000,0xf000000,0x8000000, + 0x8000000,0xf000000,0x15000000,0xb000000,0x4000000,0x0,0x0,0x1000000,0x3000000,0x9000000,0x10000000,0x16000000,0x16000000,0x10000000, + 0x9000000,0x4000000,0x1000000,0x0,0x0,0x0,0x0,0x2000000,0x5000000,0x8000000,0x8000000,0x5000000,0x2000000,0x0, + 0x0,0x0 +}; + +static const QRgb btn17RaisedShadowPressed_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, + 0x25ffffff,0x1dffffff,0x1effffff,0x25ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1dffffff,0x17ffffff,0x8ffffff, + 0x8ffffff,0x17ffffff,0x1dffffff,0x0,0x0,0x0,0x0,0x0,0x1dffffff,0x12ffffff,0x1ffffff,0x0,0x0,0x1ffffff, + 0x12ffffff,0x1dffffff,0x0,0x0,0x0,0x0,0x17ffffff,0x7ffffff,0x0,0x0,0x0,0x0,0x6ffffff,0x18ffffff, + 0x0,0x0,0x0,0x0,0x18ffffff,0x7ffffff,0x0,0x0,0x0,0x0,0x6ffffff,0x18ffffff,0x0,0x0, + 0x0,0x0,0x1fffffff,0x12ffffff,0x1ffffff,0x0,0x0,0x1ffffff,0x12ffffff,0x1effffff,0x0,0x0,0x0,0x0, + 0x0,0x16ffffff,0x12ffffff,0x6ffffff,0x6ffffff,0x12ffffff,0x16ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x19ffffff,0x18ffffff,0x18ffffff,0x18ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,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 btn17SunkenShadow_data[] = { + 0x0,0x0,0x0,0x4000000,0xb000000,0x15000000,0x15000000,0xb000000,0x4000000,0x0,0x0,0x0,0x0,0x0, + 0x6000000,0x16000000,0x25000000,0x1c000000,0x1c000000,0x25000000,0x16000000,0x6000000,0x0,0x0,0x1ffffff,0x4000000,0x16000000,0x1b000000, + 0x3000000,0x0,0x0,0x3000000,0x1b000000,0x16000000,0x4000000,0x1ffffff,0x6d4d4d4,0xb000000,0x18000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x18000000,0xb000000,0x6d4d4d4,0x10cfcfcf,0x13000000,0x2000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x2000000,0x13000000,0x10cfcfcf,0x1ad7d7d7,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x10000000,0x1ad7d7d7,0x1ef6f6f6,0x7000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7000000,0x1ff6f6f6, + 0x1cffffff,0x17d2d2d2,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x17d2d2d2,0x1cffffff,0x16ffffff,0x29ffffff, + 0x3000000,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x29ffffff,0x16ffffff,0xdffffff,0x2cffffff,0x24ffffff,0x2000000, + 0x1000000,0x0,0x0,0x1000000,0x2000000,0x24ffffff,0x2cffffff,0xdffffff,0x5ffffff,0x16ffffff,0x34ffffff,0x34ffffff,0x19f4f4f4,0x2000000, + 0x2000000,0x19f4f4f4,0x34ffffff,0x34ffffff,0x16ffffff,0x5ffffff,0x1ffffff,0x6ffffff,0x16ffffff,0x2cffffff,0x3fffffff,0x4affffff,0x4affffff,0x3fffffff, + 0x2cffffff,0x16ffffff,0x6ffffff,0x1ffffff,0x0,0x1ffffff,0x5ffffff,0xdffffff,0x16ffffff,0x1bffffff,0x1bffffff,0x16ffffff,0xdffffff,0x5ffffff, + 0x1ffffff,0x0 +}; + +static const QRgb btn17V_data[] = { + 0x0,0xc6000000,0x23000000,0x23000000,0xc6000000,0x0,0x0,0xc6000000,0x23000000,0x23000000,0xc6000000,0x0,0x0,0xc6000000, + 0x23000000,0x23000000,0xc6000000,0x0,0x0,0xc6000000,0x23000000,0x23000000,0xc6000000,0x0 +}; + +static const QRgb btn17VRaisedShadow_data[] = { + 0x16000000,0x0,0x18ffffff,0x18ffffff,0x0,0x16000000,0x16000000,0x0,0x18ffffff,0x18ffffff,0x0,0x16000000,0x16000000,0x0, + 0x18ffffff,0x18ffffff,0x0,0x16000000,0x16000000,0x0,0x18ffffff,0x18ffffff,0x0,0x16000000 +}; + +static const QRgb btn17VRaisedShadowPressed_data[] = { + 0x0,0x0,0x18ffffff,0x18ffffff,0x0,0x0,0x0,0x0,0x18ffffff,0x18ffffff,0x0,0x0,0x0,0x0, + 0x18ffffff,0x18ffffff,0x0,0x0,0x0,0x0,0x18ffffff,0x18ffffff,0x0,0x0 +}; + +static const QRgb btn17VSunkenShadow_data[] = { + 0x22d9d9d9,0x0,0x0,0x0,0x0,0x22d9d9d9,0x22d9d9d9,0x0,0x0,0x0,0x0,0x22d9d9d9,0x22d9d9d9,0x0, + 0x0,0x0,0x0,0x22d9d9d9,0x22d9d9d9,0x0,0x0,0x0,0x0,0x22d9d9d9 +}; + +static const QRgb btnPressedShadowHLines_data[] = { + 0x81000000,0x81000000,0x81000000,0x81000000,0x4a000000,0x4a000000,0x4a000000,0x4a000000,0x1f000000,0x1f000000,0x1f000000,0x1f000000,0x8000000,0x8000000, + 0x8000000,0x8000000,0x1e000000,0x1e000000,0x1e000000,0x1e000000 +}; + +static const QRgb btnPressedShadowRectangular_data[] = { + 0x9c000000,0x8c000000,0x84000000,0x81000000,0x81000000,0x81000000,0x81000000,0x84000000,0x8c000000,0x9c000000,0x7a000000,0x5e000000,0x50000000,0x4b000000, + 0x4a000000,0x4a000000,0x4b000000,0x4f000000,0x5e000000,0x7a000000,0x5e000000,0x3a000000,0x26000000,0x20000000,0x1f000000,0x1f000000,0x20000000,0x26000000, + 0x39000000,0x5e000000,0x50000000,0x26000000,0x11000000,0x0,0x0,0x0,0x0,0x11000000,0x26000000,0x50000000,0x4b000000,0x20000000, + 0xa000000,0x0,0x0,0x0,0x0,0xa000000,0x20000000,0x4b000000,0x4a000000,0x1f000000,0x9000000,0x2000000,0x1000000,0x8000000, + 0x1e000000,0x4a000000,0x0,0x0,0x4b000000,0x20000000,0xa000000,0x2000000,0x2000000,0x9000000,0x1f000000,0x4a000000,0x0,0x0, + 0x4f000000,0x26000000,0x10000000,0xa000000,0x9000000,0x10000000,0x26000000,0x4f000000,0x0,0x0,0x5e000000,0x39000000,0x26000000,0x1f000000, + 0x1f000000,0x26000000,0x39000000,0x5e000000,0x0,0x0 +}; + +static const QRgb btnPressedShadowRound_data[] = { + 0x0,0x0,0x53000000,0x72000000,0x82000000,0x82000000,0x72000000,0x53000000,0x0,0x0,0x0,0x68000000,0x79000000,0x62000000, + 0x54000000,0x54000000,0x62000000,0x78000000,0x68000000,0x0,0x33000000,0x6e000000,0x4d000000,0x35000000,0x28000000,0x27000000,0x35000000,0x4d000000, + 0x6e000000,0x33000000,0x5a000000,0x4d000000,0x2b000000,0x17000000,0x7000000,0x7000000,0x17000000,0x2b000000,0x4d000000,0x5a000000,0x55000000,0x2e000000, + 0x14000000,0x4000000,0x2000000,0x2000000,0x4000000,0x14000000,0x2e000000,0x55000000,0x3f000000,0x27000000,0xe000000,0x3000000,0x3000000,0xd000000, + 0x27000000,0x3f000000,0x0,0x0,0x22000000,0x35000000,0x16000000,0x8000000,0x8000000,0x16000000,0x35000000,0x22000000,0x0,0x0, + 0x0,0x2a000000,0x2b000000,0x16000000,0x16000000,0x2a000000,0x2a000000,0x0,0x0,0x0,0x0,0x0,0x1b000000,0x27000000, + 0x27000000,0x1b000000,0x0,0x0,0x0,0x0 +}; + +static const QRgb btnPressedShadowVLines_data[] = { + 0x4a000000,0x1f000000,0x9000000,0x8000000,0x1e000000,0x4a000000,0x4a000000,0x1f000000,0x9000000,0x8000000,0x1e000000,0x4a000000,0x4a000000,0x1f000000, + 0x9000000,0x8000000,0x1e000000,0x4a000000,0x4a000000,0x1f000000,0x9000000,0x8000000,0x1e000000,0x4a000000 +}; + +static const QRgb checkbox2inside_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,0xc7000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xc7000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0,0x0,0x0,0x0,0xff000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0xc7000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xc7000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,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 checkbox2pressed_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,0x27000000,0x3b000000,0x2d000000,0x24000000,0x22000000,0x22000000,0x22000000,0x22000000,0x24000000,0x2c000000,0x3b000000,0x27000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x3b000000,0x16000000,0x8000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000, + 0x8000000,0x16000000,0x3b000000,0x0,0x0,0x0,0x0,0x0,0x0,0x2d000000,0x8000000,0x1000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1000000,0x8000000,0x2c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x24000000, + 0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x23000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x22000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3000000, + 0x21000000,0x0,0x0,0x0,0x0,0x0,0x0,0x22000000,0x4000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x3000000,0x21000000,0x0,0x0,0x0,0x0,0x0,0x0,0x22000000,0x4000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3000000,0x21000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x22000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3000000,0x21000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x24000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x4000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x2c000000,0x8000000,0x1000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1000000,0x8000000,0x2c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x3b000000, + 0x16000000,0x8000000,0x4000000,0x3000000,0x3000000,0x3000000,0x3000000,0x3000000,0x7000000,0x15000000,0x3a000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x27000000,0x3b000000,0x2c000000,0x23000000,0x21000000,0x21000000,0x21000000,0x21000000,0x23000000,0x2c000000,0x3a000000, + 0x27000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,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 checkbox2rect_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,0x1a000000,0x6a000000,0xba000000,0xc8000000, + 0xc8000000,0xc8000000,0xc8000000,0xc8000000,0xc8000000,0xc8000000,0xc8000000,0xba000000,0x6a000000,0x18000000,0x0,0x0,0x0,0x0, + 0x6a000000,0x87000000,0x2a000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x2a000000,0x84000000,0x6a000000, + 0x0,0x0,0x0,0x0,0xba000000,0x2a000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x2a000000,0xba000000,0x0,0x0,0x0,0x0,0xc8000000,0x17000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x17000000,0xc8000000,0x0,0x0,0x0,0x0,0xc8000000,0x17000000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17000000,0xc8000000,0x0,0x0, + 0x0,0x0,0xc8000000,0x17000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x17000000,0xc8000000,0x0,0x0,0x0,0x0,0xc8000000,0x17000000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x17000000,0xc8000000,0x0,0x0,0x0,0x0,0xc8000000,0x17000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17000000,0xc8000000,0x0,0x0,0x0,0x0, + 0xc8000000,0x17000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17000000,0xc8000000, + 0x0,0x0,0x0,0x0,0xc8000000,0x17000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x17000000,0xc8000000,0x0,0x0,0x0,0x0,0xc8000000,0x17000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x17000000,0xc8000000,0x0,0x0,0x0,0x0,0xba000000,0x2a000000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2a000000,0xba000000,0x0,0x0, + 0x0,0x0,0x6a000000,0x8a000000,0x2a000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x17000000,0x2a000000, + 0x87000000,0x6a000000,0x0,0x0,0x0,0x0,0x1a000000,0x6a000000,0xba000000,0xc8000000,0xc8000000,0xc8000000,0xc8000000,0xc8000000, + 0xc8000000,0xc8000000,0xc8000000,0xba000000,0x6a000000,0x1a000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,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 checkbox2shadow_data[] = { + 0x0,0x0,0x0,0x2000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000, + 0x2000000,0x0,0x0,0x0,0x0,0x0,0x4000000,0xf222222,0x17212121,0x191e1e1e,0x191e1e1e,0x1a272727,0x1a272727,0x1a272727, + 0x1a272727,0x1a272727,0x191e1e1e,0x17212121,0xf222222,0x4000000,0x0,0x0,0x0,0x3555555,0x13505050,0x106f6f6f,0xfefefe,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xfefefe,0x11696969,0x144c4c4c,0x3555555,0x0,0xffffff,0xa999999, + 0x13868686,0xffffff,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfcfcfc,0x14898989, + 0xa999999,0xffffff,0x2ffffff,0x15cecece,0xfcfcfc,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd, + 0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfcfcfc,0x16cacaca,0x2ffffff,0x3ffffff,0x1edcdcdc,0xffffff,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd, + 0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0x1fd9d9d9,0x3ffffff,0x4ffffff,0x22dddddd,0xfdfdfd,0xfdfdfd, + 0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd,0xfefefe,0xfdfdfd,0x22e1e1e1,0x4ffffff, + 0x4ffffff,0x22dddddd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd, + 0xfdfdfd,0xfdfdfd,0x22e1e1e1,0x4ffffff,0x4ffffff,0x22e1e1e1,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe, + 0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd,0x22e1e1e1,0x4ffffff,0x4ffffff,0x22e1e1e1,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe, + 0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd,0x22e1e1e1,0x4ffffff,0x4ffffff,0x22e1e1e1, + 0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd, + 0x22e1e1e1,0x4ffffff,0x4ffffff,0x22e1e1e1,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe, + 0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd,0x22e1e1e1,0x4ffffff,0x4ffffff,0x22e1e1e1,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe, + 0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd,0x22e1e1e1,0x4ffffff,0x4ffffff,0x20efefef,0xfdfdfd,0xfdfdfd, + 0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd,0xffffff,0x20efefef,0x4ffffff, + 0x3ffffff,0x1afefefe,0x20ededed,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfefefe,0xfdfdfd,0xfdfdfd, + 0xfdfdfd,0x20ededed,0x1bffffff,0x3ffffff,0x2ffffff,0x11ffffff,0x35fefefe,0x25f6f6f6,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd, + 0xfdfdfd,0xfdfdfd,0xfdfdfd,0xfdfdfd,0x25f8f8f8,0x35fefefe,0x12fefefe,0x2ffffff,0xffffff,0x6ffffff,0x19fafafa,0x35fcfcfc,0x48fdfdfd,0x4effffff, + 0x4ffdfdfd,0x4ffdfdfd,0x4ffdfdfd,0x4ffdfdfd,0x4ffdfdfd,0x4ffdfdfd,0x4ffdfdfd,0x48fdfdfd,0x35fefefe,0x19ffffff,0x7efefef,0xffffff,0x0,0x1ffffff, + 0x6ffffff,0x11ffffff,0x1afefefe,0x1dffffff,0x1effffff,0x1effffff,0x1effffff,0x1effffff,0x1effffff,0x1effffff,0x1effffff,0x1afefefe,0x11ffffff,0x6ffffff, + 0x1ffffff,0x0,0x0,0x0,0xffffff,0x2ffffff,0x3ffffff,0x3ffffff,0x3ffffff,0x4ffffff,0x4ffffff,0x4ffffff,0x4ffffff,0x4ffffff, + 0x3ffffff,0x3ffffff,0x2ffffff,0xffffff,0x0,0x0 +}; + +static const QRgb checkListExclusiveIndicator_data[] = { + 0x0,0x0,0x3000000,0x28000000,0x76000000,0x9c000000,0xa3000000,0x9c000000,0x76000000,0x28000000,0x3000000,0x0,0x0,0x0, + 0x4000000,0x61000000,0xad000000,0x71000000,0x42000000,0x31000000,0x42000000,0x71000000,0xad000000,0x61000000,0x4000000,0x0,0x3000000,0x65000000, + 0xaf000000,0x20000000,0x4000000,0x1000000,0x1000000,0x1000000,0x4000000,0x20000000,0xaf000000,0x65000000,0x3000000,0x29000000,0xb1000000,0x21000000, + 0x2000000,0x0,0x0,0x0,0x0,0x0,0x2000000,0x21000000,0xb1000000,0x29000000,0x79000000,0x82000000,0x4000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x82000000,0x79000000,0xa3000000,0x4a000000,0x1000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x1000000,0x4a000000,0xa3000000,0xae000000,0x38000000,0x1000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1000000,0x38000000,0xae000000,0xa3000000,0x4a000000,0x1000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1000000,0x4a000000,0xa3000000,0x79000000,0x82000000,0x4000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x4000000,0x82000000,0x79000000,0x29000000,0xb1000000,0x21000000,0x2000000,0x0,0x0,0x0,0x0,0x0, + 0x2000000,0x21000000,0xb1000000,0x29000000,0x3000000,0x65000000,0xaf000000,0x20000000,0x4000000,0x1000000,0x1000000,0x1000000,0x4000000,0x20000000, + 0xaf000000,0x65000000,0x3000000,0x0,0x4000000,0x61000000,0xad000000,0x6d000000,0x42000000,0x31000000,0x42000000,0x6d000000,0xad000000,0x61000000, + 0x4000000,0x0,0x0,0x0,0x3000000,0x28000000,0x76000000,0x9c000000,0xa3000000,0x9c000000,0x76000000,0x28000000,0x3000000,0x0, + 0x0 +}; + +static const QRgb checkmark_data[] = { + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0x37000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x28000000,0xf1000000,0x46000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xf000000,0xd8000000,0xd7000000,0x9000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0xb7000000,0xfe000000,0x34000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x3e000000,0x2000000,0xffffff,0xffffff,0x82000000,0xff000000,0x7f000000,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x48000000,0xfb000000,0xa3000000,0xffffff,0x50000000,0xff000000,0xd0000000,0x3000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x12000000,0xe1000000,0xff000000,0x91000000,0xf5000000,0xf5000000,0x27000000, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1f000000,0xee000000,0xff000000,0xff000000, + 0x6d000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2f000000, + 0xf8000000,0xbb000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0x54000000,0x15000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff +}; + +static const QRgb dockBack_data[] = { + 0x0,0x0,0x1ffffff,0x360c0c0c,0x65030303,0x79010101,0x79010101,0x65030303,0x360c0c0c,0x1ffffff,0x0,0x0,0x0,0x1ffffff, + 0x4d070707,0x6f000000,0x60000000,0x59000000,0x59000000,0x60000000,0x6f000000,0x4d070707,0x1bfbfbf,0x0,0x1ffffff,0x36141414,0x68000000,0x55000000, + 0x4f000000,0x3d5a5a5a,0x3c5c5c5c,0x4f000000,0x55000000,0x68000000,0x36141414,0x1ffffff,0x4ffffff,0x5a0b0b0b,0x55000000,0x4d000000,0x4c000000,0x3c606060, + 0x3b626262,0x4c000000,0x4d000000,0x55000000,0x5a0b0b0b,0x4ffffff,0x9f6f6f6,0x5e020202,0x4f000000,0x4c000000,0x4c000000,0x39585858,0x385a5a5a,0x4c000000, + 0x4c000000,0x4f000000,0x5e020202,0x9ffffff,0xbffffff,0x57040404,0x4d000000,0x4c000000,0x4c000000,0x2e303030,0x2d323232,0x4c000000,0x4c000000,0x4d000000, + 0x57040404,0xbffffff,0xbffffff,0x4e242424,0x4d000000,0x3d000000,0x478a8a8a,0x31fdfdfd,0x32fdfdfd,0x478a8a8a,0x3d000000,0x4d000000,0x4e242424,0xbffffff, + 0x9ffffff,0x3f6b6b6b,0x4f000000,0x4c000000,0x45000000,0x4b838383,0x46858585,0x45000000,0x4c000000,0x4f000000,0x3f6c6c6c,0x9ffffff,0x4eeeeee,0x1dfcfcfc, + 0x46505050,0x4d000000,0x4c000000,0x4c000000,0x4c000000,0x4c000000,0x4d000000,0x46505050,0x1dfcfcfc,0x4ffffff,0x1ffffff,0x9ffffff,0x26fdfdfd,0x43858585, + 0x492e2e2e,0x4c050505,0x4c050505,0x492e2e2e,0x43858585,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff,0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd, + 0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff,0x9ffffff,0xbffffff,0xbffffff,0x9ffffff, + 0x4ffffff,0x1ffffff,0x0,0x0,0x0,0x0,0x1ffffff,0x41090909,0x7b010101,0x94010101,0x94010101,0x7b010101,0x41090909,0x1ffffff, + 0x0,0x0,0x0,0x1ffffff,0x5f060606,0x8e000000,0x83000000,0x7d000000,0x7d000000,0x83000000,0x8e000000,0x5f060606,0x1bfbfbf,0x0, + 0x1ffffff,0x42111111,0x89000000,0x7a000000,0x75000000,0x4e404040,0x4d414141,0x75000000,0x7a000000,0x89000000,0x42111111,0x1ffffff,0x4ffffff,0x73090909, + 0x7a000000,0x74000000,0x73000000,0x4d454545,0x4c454545,0x73000000,0x74000000,0x7a000000,0x73090909,0x4ffffff,0x9f6f6f6,0x7f010101,0x75000000,0x73000000, + 0x73000000,0x4a3d3d3d,0x493e3e3e,0x73000000,0x73000000,0x75000000,0x7f010101,0x9ffffff,0xbffffff,0x7a030303,0x74000000,0x73000000,0x73000000,0x41222222, + 0x40232323,0x73000000,0x73000000,0x74000000,0x7a030303,0xbffffff,0xbffffff,0x68161616,0x74000000,0x5c000000,0x556e6e6e,0x31fdfdfd,0x32fdfdfd,0x556e6e6e, + 0x5c000000,0x74000000,0x68161616,0xbffffff,0x9ffffff,0x49555555,0x75000000,0x73000000,0x68000000,0x5a626262,0x54666666,0x68000000,0x73000000,0x75000000, + 0x49565656,0x9ffffff,0x4eeeeee,0x1dfcfcfc,0x593a3a3a,0x74000000,0x73000000,0x73000000,0x73000000,0x73000000,0x74000000,0x593a3a3a,0x1dfcfcfc,0x4ffffff, + 0x1ffffff,0x9ffffff,0x26fdfdfd,0x4e6c6c6c,0x641d1d1d,0x71030303,0x71030303,0x641d1d1d,0x4e6c6c6c,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff, + 0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd,0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff, + 0x9ffffff,0xbffffff,0xbffffff,0x9ffffff,0x4ffffff,0x1ffffff,0x0,0x0 +}; + +static const QRgb dockClose_data[] = { + 0x0,0x0,0x1ffffff,0x360c0c0c,0x65030303,0x79010101,0x79010101,0x65030303,0x360c0c0c,0x1ffffff,0x0,0x0,0x0,0x1ffffff, + 0x4d070707,0x6f000000,0x60000000,0x59000000,0x59000000,0x60000000,0x6f000000,0x4d070707,0x1bfbfbf,0x0,0x1ffffff,0x36141414,0x68000000,0x3c7a7a7a, + 0x3f131313,0x4d000000,0x4d000000,0x3f131313,0x3e8a8a8a,0x68000000,0x36141414,0x1ffffff,0x4ffffff,0x5a0b0b0b,0x55000000,0x434a4a4a,0x23f4f4f4,0x32141414, + 0x2c161616,0x25f8f8f8,0x452f2f2f,0x55000000,0x5a0b0b0b,0x4ffffff,0x9f6f6f6,0x5e020202,0x4f000000,0x4c000000,0x36414141,0xbf8f8f8,0xcf8f8f8,0x39353535, + 0x4c000000,0x4f000000,0x5e020202,0x9ffffff,0xbffffff,0x57040404,0x4d000000,0x4c000000,0x352a2a2a,0x23fcfcfc,0x26fdfdfd,0x352a2a2a,0x4c000000,0x4d000000, + 0x57040404,0xbffffff,0xbffffff,0x4e242424,0x4d000000,0x431e1e1e,0x31f7f7f7,0x415d5d5d,0x434b4b4b,0x33f3f3f3,0x421e1e1e,0x4d000000,0x4e242424,0xbffffff, + 0x9ffffff,0x3f6b6b6b,0x4f000000,0x42a1a1a1,0x46363636,0x4c000000,0x4c000000,0x472e2e2e,0x428d8d8d,0x4f000000,0x3f6c6c6c,0x9ffffff,0x4eeeeee,0x1dfcfcfc, + 0x46505050,0x4d000000,0x4c000000,0x4c000000,0x4c000000,0x4c000000,0x4d000000,0x46505050,0x1dfcfcfc,0x4ffffff,0x1ffffff,0x9ffffff,0x26fdfdfd,0x43858585, + 0x492e2e2e,0x4c050505,0x4c050505,0x492e2e2e,0x43858585,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff,0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd, + 0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff,0x9ffffff,0xbffffff,0xbffffff,0x9ffffff, + 0x4ffffff,0x1ffffff,0x0,0x0,0x0,0x0,0x1ffffff,0x41090909,0x7b010101,0x94010101,0x94010101,0x7b010101,0x41090909,0x1ffffff, + 0x0,0x0,0x0,0x1ffffff,0x5f060606,0x8e000000,0x83000000,0x7d000000,0x7d000000,0x83000000,0x8e000000,0x5f060606,0x1bfbfbf,0x0, + 0x1ffffff,0x42111111,0x89000000,0x44656565,0x5b0d0d0d,0x74000000,0x74000000,0x5b0d0d0d,0x45757575,0x89000000,0x42111111,0x1ffffff,0x4ffffff,0x73090909, + 0x7a000000,0x58333333,0x23f4f4f4,0x4a0d0d0d,0x410f0f0f,0x25f8f8f8,0x601c1c1c,0x7a000000,0x73090909,0x4ffffff,0x9f6f6f6,0x7f010101,0x75000000,0x73000000, + 0x4a2c2c2c,0xbf8f8f8,0xcf8f8f8,0x4f232323,0x73000000,0x75000000,0x7f010101,0x9ffffff,0xbffffff,0x7a030303,0x74000000,0x73000000,0x4a1b1b1b,0x23fcfcfc, + 0x26fdfdfd,0x4b1a1a1a,0x73000000,0x74000000,0x7a030303,0xbffffff,0xbffffff,0x68161616,0x74000000,0x60121212,0x32f2f2f2,0x54424242,0x59303030,0x33eeeeee, + 0x5f121212,0x74000000,0x68161616,0xbffffff,0x9ffffff,0x49555555,0x75000000,0x4c858585,0x60222222,0x73000000,0x73000000,0x621c1c1c,0x4e717171,0x75000000, + 0x49565656,0x9ffffff,0x4eeeeee,0x1dfcfcfc,0x593a3a3a,0x74000000,0x73000000,0x73000000,0x73000000,0x73000000,0x74000000,0x593a3a3a,0x1dfcfcfc,0x4ffffff, + 0x1ffffff,0x9ffffff,0x26fdfdfd,0x4e6c6c6c,0x641d1d1d,0x71030303,0x71030303,0x641d1d1d,0x4e6c6c6c,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff, + 0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd,0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff, + 0x9ffffff,0xbffffff,0xbffffff,0x9ffffff,0x4ffffff,0x1ffffff,0x0,0x0 +}; + +static const QRgb dockStay_data[] = { + 0x0,0x0,0x1ffffff,0x360c0c0c,0x65030303,0x79010101,0x79010101,0x65030303,0x360c0c0c,0x1ffffff,0x0,0x0,0x0,0x1ffffff, + 0x4d070707,0x6f000000,0x60000000,0x59000000,0x59000000,0x60000000,0x6f000000,0x4d070707,0x1bfbfbf,0x0,0x1ffffff,0x36141414,0x68000000,0x403b3b3b, + 0x3fa2a2a2,0x44b3b3b3,0x44b2b2b2,0x3fa2a2a2,0x403b3b3b,0x68000000,0x36141414,0x1ffffff,0x4ffffff,0x5a0b0b0b,0x55000000,0x277b7b7b,0x3d000000,0x4c000000, + 0x4c000000,0x3d000000,0x277b7b7b,0x55000000,0x5a0b0b0b,0x4ffffff,0x9f6f6f6,0x5e020202,0x4f000000,0x267f7f7f,0x4c000000,0x4c000000,0x4c000000,0x4c000000, + 0x267f7f7f,0x4f000000,0x5e020202,0x9ffffff,0xbffffff,0x57040404,0x4d000000,0x257c7c7c,0x4c000000,0x4c000000,0x4c000000,0x4c000000,0x257c7c7c,0x4d000000, + 0x57040404,0xbffffff,0xbffffff,0x4e242424,0x4d000000,0x267d7d7d,0x3d000000,0x4c000000,0x4c000000,0x3d000000,0x267d7d7d,0x4d000000,0x4e242424,0xbffffff, + 0x9ffffff,0x3f6b6b6b,0x4f000000,0x50848484,0x43b5b5b5,0x43b5b5b5,0x43b5b5b5,0x43b5b5b5,0x50848484,0x4f000000,0x3f6c6c6c,0x9ffffff,0x4eeeeee,0x1dfcfcfc, + 0x46505050,0x4d000000,0x4c000000,0x4c000000,0x4c000000,0x4c000000,0x4d000000,0x46505050,0x1dfcfcfc,0x4ffffff,0x1ffffff,0x9ffffff,0x26fdfdfd,0x43858585, + 0x492e2e2e,0x4c050505,0x4c050505,0x492e2e2e,0x43858585,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff,0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd, + 0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff,0x9ffffff,0xbffffff,0xbffffff,0x9ffffff, + 0x4ffffff,0x1ffffff,0x0,0x0,0x0,0x0,0x1ffffff,0x41090909,0x7b010101,0x94010101,0x94010101,0x7b010101,0x41090909,0x1ffffff, + 0x0,0x0,0x0,0x1ffffff,0x5f060606,0x8e000000,0x83000000,0x7d000000,0x7d000000,0x83000000,0x8e000000,0x5f060606,0x1bfbfbf,0x0, + 0x1ffffff,0x42111111,0x89000000,0x522b2b2b,0x47898989,0x4c999999,0x4c989898,0x47898989,0x522b2b2b,0x89000000,0x42111111,0x1ffffff,0x4ffffff,0x73090909, + 0x7a000000,0x31616161,0x5c000000,0x73000000,0x73000000,0x5c000000,0x31616161,0x7a000000,0x73090909,0x4ffffff,0x9f6f6f6,0x7f010101,0x75000000,0x30646464, + 0x73000000,0x73000000,0x73000000,0x73000000,0x30646464,0x75000000,0x7f010101,0x9ffffff,0xbffffff,0x7a030303,0x74000000,0x2e5e5e5e,0x73000000,0x73000000, + 0x73000000,0x73000000,0x2e5e5e5e,0x74000000,0x7a030303,0xbffffff,0xbffffff,0x68161616,0x74000000,0x30636363,0x5c000000,0x73000000,0x73000000,0x5c000000, + 0x30636363,0x74000000,0x68161616,0xbffffff,0x9ffffff,0x49555555,0x75000000,0x60646464,0x4b9b9b9b,0x4b9b9b9b,0x4b9b9b9b,0x4b9b9b9b,0x60646464,0x75000000, + 0x49565656,0x9ffffff,0x4eeeeee,0x1dfcfcfc,0x593a3a3a,0x74000000,0x73000000,0x73000000,0x73000000,0x73000000,0x74000000,0x593a3a3a,0x1dfcfcfc,0x4ffffff, + 0x1ffffff,0x9ffffff,0x26fdfdfd,0x4e6c6c6c,0x641d1d1d,0x71030303,0x71030303,0x641d1d1d,0x4e6c6c6c,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff, + 0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd,0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff, + 0x9ffffff,0xbffffff,0xbffffff,0x9ffffff,0x4ffffff,0x1ffffff,0x0,0x0 +}; + +static const QRgb dockToDesktop2_data[] = { + 0x0,0x0,0x1ffffff,0x360c0c0c,0x64030303,0x79010101,0x79010101,0x64030303,0x360c0c0c,0x1ffffff,0x0,0x0,0x0,0x1ffffff, + 0x4d070707,0x6f000000,0x60000000,0x59000000,0x59000000,0x60000000,0x6f000000,0x4d070707,0x1bfbfbf,0x0,0x1ffffff,0x36151515,0x68000000,0x55000000, + 0x4f000000,0x32707070,0x2d8d8d8d,0x30868686,0x3b5c5c5c,0x68000000,0x36151515,0x1ffffff,0x4ffffff,0x5a0c0c0c,0x55000000,0x4d000000,0x4c000000,0x2a8b8b8b, + 0x4c000000,0x4c000000,0x2b888888,0x55000000,0x5a0c0c0c,0x4ffffff,0x9f6f6f6,0x5e030303,0x4f000000,0x33787878,0x2c909090,0x2c909090,0x31727272,0x4c000000, + 0x2a8b8b8b,0x4f000000,0x5e030303,0x9ffffff,0xbffffff,0x57050505,0x4d000000,0x2a8b8b8b,0x4c000000,0x4c000000,0x2a8b8b8b,0x3dafafaf,0x41959595,0x4d000000, + 0x57060606,0xbffffff,0xbffffff,0x4e232323,0x4d000000,0x2a8b8b8b,0x4c000000,0x4c000000,0x2a8b8b8b,0x4c000000,0x4c000000,0x4d000000,0x4e232323,0xbffffff, + 0x9ffffff,0x3f6c6c6c,0x4f000000,0x41959595,0x3dafafaf,0x3dafafaf,0x41959595,0x4c000000,0x4c000000,0x4f000000,0x3f6c6c6c,0x9ffffff,0x4eeeeee,0x1dfcfcfc, + 0x46505050,0x4d000000,0x4c000000,0x4c000000,0x4c000000,0x4c000000,0x4d000000,0x46505050,0x1dfcfcfc,0x4ffffff,0x1ffffff,0x9ffffff,0x26fdfdfd,0x42848484, + 0x492f2f2f,0x4c070707,0x4c070707,0x492f2f2f,0x42848484,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff,0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd, + 0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff,0x9ffffff,0xbffffff,0xbffffff,0x9ffffff, + 0x4ffffff,0x1ffffff,0x0,0x0,0x0,0x0,0x1ffffff,0x41090909,0x7b020202,0x94000000,0x94000000,0x7b020202,0x41090909,0x1ffffff, + 0x0,0x0,0x0,0x1ffffff,0x5f050505,0x8e000000,0x83000000,0x7d000000,0x7d000000,0x83000000,0x8e000000,0x5f050505,0x1bfbfbf,0x0, + 0x1ffffff,0x41101010,0x89000000,0x7a000000,0x75000000,0x3f555555,0x35737373,0x386f6f6f,0x46494949,0x89000000,0x41101010,0x1ffffff,0x4ffffff,0x72080808, + 0x7a000000,0x74000000,0x73000000,0x32707070,0x73000000,0x73000000,0x336e6e6e,0x7a000000,0x72080808,0x4ffffff,0x9f6f6f6,0x7f020202,0x75000000,0x405b5b5b, + 0x34757575,0x34757575,0x3e565656,0x73000000,0x32707070,0x75000000,0x7f020202,0x9ffffff,0xbffffff,0x79030303,0x74000000,0x32707070,0x73000000,0x73000000, + 0x32707070,0x44969696,0x4d777777,0x74000000,0x79030303,0xbffffff,0xbffffff,0x68161616,0x74000000,0x32707070,0x73000000,0x73000000,0x32707070,0x73000000, + 0x73000000,0x74000000,0x68161616,0xbffffff,0x9ffffff,0x4a565656,0x75000000,0x4d777777,0x44969696,0x44969696,0x4d777777,0x73000000,0x73000000,0x75000000, + 0x4a575757,0x9ffffff,0x4eeeeee,0x1dfcfcfc,0x593a3a3a,0x74000000,0x73000000,0x73000000,0x73000000,0x73000000,0x74000000,0x593a3a3a,0x1dfcfcfc,0x4ffffff, + 0x1ffffff,0x9ffffff,0x26fdfdfd,0x4d6b6b6b,0x641e1e1e,0x70030303,0x70030303,0x641e1e1e,0x4d6b6b6b,0x26fdfdfd,0xaf7f7f7,0x1ffffff,0x0,0x1ffffff, + 0x9ffffff,0x1dffffff,0x30fdfdfd,0x39fdfdfd,0x3afdfdfd,0x30fdfdfd,0x1dfcfcfc,0x9ffffff,0x1ffffff,0x0,0x0,0x0,0x1ffffff,0x4ffffff, + 0x9ffffff,0xbffffff,0xbffffff,0x9ffffff,0x4ffffff,0x1ffffff,0x0,0x0 +}; + +static const QRgb focusRectEdges_data[] = { + 0x0,0x3b000000,0xbb000000,0xbb000000,0x3b000000,0x0,0x33000000,0xc1000000,0x20000000,0x20000000,0xc1000000,0x33000000,0xbb000000,0x17000000, + 0x0,0x0,0x17000000,0xbb000000,0xbb000000,0x17000000,0x0,0x0,0x17000000,0xbb000000,0x33000000,0xc1000000,0x20000000,0x20000000, + 0xc1000000,0x33000000,0x0,0x3b000000,0xbb000000,0xbb000000,0x3b000000,0x0 +}; + +static const QRgb groupBoxMask_small_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x1bff0000,0x88ff0000,0xd1ff0000,0xffff0000,0xffff0000,0xd1ff0000,0x88ff0000,0x1bff0000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x64ff0000,0xf6ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xf6ff0000,0x64ff0000,0x0,0x0,0x0,0x0,0x0,0x64ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x64ff0000,0x0,0x0,0x0,0x1bff0000,0xf6ff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xf6ff0000,0x1bff0000,0x0,0x0,0x88ff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x88ff0000,0x0,0x0,0xd1ff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xd1ff0000,0x0, + 0x0,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0x0,0x0,0xd1ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xd1ff0000,0x0,0x0,0x88ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x88ff0000,0x0,0x0,0x1bff0000,0xf6ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xf6ff0000,0x1bff0000,0x0,0x0,0x0,0x64ff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x64ff0000,0x0,0x0,0x0,0x0,0x0,0x64ff0000, + 0xf6ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xf6ff0000,0x64ff0000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1bff0000,0x88ff0000,0xd1ff0000,0xffff0000,0xffff0000,0xd1ff0000,0x88ff0000,0x1bff0000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,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 groupBox_small_data[] = { + 0xffffff,0xffffff,0xffffff,0xffffff,0x3ffffff,0xbffffff,0x13ffffff,0x17ffffff,0x17ffffff,0x13ffffff,0xbffffff,0x3ffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x1ffffff,0xbffffff,0x27b8b8b8,0x464d4d4d,0x4e212121,0x48000000,0x48000000,0x4e212121,0x464d4d4d,0x27b8b8b8, + 0xbffffff,0x1ffffff,0xffffff,0xffffff,0xffffff,0x1ffffff,0xfffffff,0x40707070,0x44080808,0x37000000,0x29000000,0x21000000,0x20000000,0x28000000, + 0x37000000,0x44080808,0x40707070,0xfffffff,0x2ffffff,0xffffff,0xffffff,0xcffffff,0x417a7a7a,0x39000000,0x23000000,0x12000000,0xa000000,0x5000000, + 0x5000000,0xa000000,0x12000000,0x22000000,0x39000000,0x417a7a7a,0xcffffff,0xffffff,0x6ffffff,0x2bc4c4c4,0x3d0d0d0d,0x1c000000,0x9000000,0x3000000, + 0x1000000,0xffffff,0xffffff,0x1000000,0x3000000,0x9000000,0x1c000000,0x3d0d0d0d,0x2bc4c4c4,0x6ffffff,0x12ffffff,0x3e5f5f5f,0x22000000,0x9000000, + 0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0x9000000,0x22000000,0x3e5f5f5f,0x13ffffff,0x20ffffff,0x39363636, + 0x13000000,0x3000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x3000000,0x12000000,0x39363636,0x20ffffff, + 0x22ffffff,0x21000000,0xa000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1000000,0xa000000, + 0x21000000,0x22ffffff,0x22ffffff,0x2a4c4c4c,0x7000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0x6000000,0x2a4c4c4c,0x21ffffff,0x1dffffff,0x38878787,0xe000000,0x1000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0x1000000,0xe040404,0x38878787,0x1affffff,0x11ffffff,0x37dbdbdb,0x1c1b1b1b,0x4000000,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x40d0d0d,0x1c1a1a1a,0x37dbdbdb,0x11ffffff,0x8ffffff,0x23ffffff,0x40aaaaaa,0x15010101,0x2000000,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0x15040404,0x469c9c9c,0x23ffffff,0x9ffffff,0x3ffffff,0x11ffffff,0x30ffffff,0x47a9a9a9, + 0x1b1e1e1e,0x9000000,0x2000000,0xffffff,0xffffff,0x2000000,0x9000000,0x1a202020,0x47a9a9a9,0x30ffffff,0x11ffffff,0x3ffffff,0xffffff,0x5ffffff, + 0x15ffffff,0x30ffffff,0x49e4e4e4,0x439c9c9c,0x2a6d6d6d,0x1a050505,0x19050505,0x2a6d6d6d,0x429f9f9f,0x49e8e8e8,0x30ffffff,0x15ffffff,0x5ffffff,0xffffff, + 0xffffff,0x1ffffff,0x5ffffff,0x11ffffff,0x23ffffff,0x35ffffff,0x44ffffff,0x4cffffff,0x4cffffff,0x44ffffff,0x36ffffff,0x23ffffff,0x11ffffff,0x5ffffff, + 0x1ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x3ffffff,0x8ffffff,0x11ffffff,0x18ffffff,0x1cffffff,0x1cffffff,0x18ffffff,0x11ffffff,0x8ffffff, + 0x3ffffff,0xffffff,0xffffff,0xffffff +}; + +static const QRgb lineedit4edges_data[] = { + 0x0,0x1e121212,0x56141414,0x7a181818,0x7a181818,0x56141414,0x1e121212,0x0,0x1e000000,0x6c171717,0x51151515,0x3a131313,0x3a131313,0x51151515, + 0x6c171717,0x1e000000,0x4a000000,0x3f000000,0x1b111111,0xb111111,0xb111111,0x1b111111,0x3f000000,0x4a000000,0x4e000000,0x1d000000,0x5101010,0x20a0a0a, + 0x20a0a0a,0x5101010,0x1c000000,0x4e000000,0x4f000000,0xc000000,0x0,0x0,0x0,0x0,0xa000000,0x4f000000,0x36000000,0x14000000, + 0x2000000,0x0,0x0,0x0,0x12000000,0x36000000,0x16000000,0x34000000,0xe000000,0x3000000,0x0,0xd000000,0x34000000,0x16000000, + 0x0,0x11000000,0x1d000000,0x1f000000,0x1f000000,0x1d000000,0x11000000,0x0 +}; + +static const QRgb lineedit4inside_data[] = { + 0x0,0x0,0x59ffffff,0xbfffffff,0xbfffffff,0x59ffffff,0x0,0x0,0x0,0x8cffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0x8cffffff,0x0,0x59ffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x59ffffff,0xbfffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xbfffffff,0xbfffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xbfffffff,0x59ffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x59ffffff,0x0,0x8cffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x8cffffff,0x0, + 0x0,0x0,0x59ffffff,0xbfffffff,0xbfffffff,0x59ffffff,0x0,0x0 +}; + +static const QRgb lineEditBtnEdges_d_data[] = { + 0x0,0x66ededed,0xbeededed,0xbeededed,0x66ededed,0x0,0x66ededed,0xf1ededed,0xffededed,0xffededed,0xf1ededed,0x66ededed,0xbeededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xbeededed,0xbeededed,0xffededed,0xffededed,0xffededed,0xffededed,0xbeededed,0x66ededed,0xf1ededed,0xffededed,0xffededed, + 0xf1ededed,0x66ededed,0x0,0x66ededed,0xbeededed,0xbeededed,0x66ededed,0x0 +}; + +static const QRgb lineEditBtnEdges_data[] = { + 0x0,0x2fededed,0xafededed,0xafededed,0x2fededed,0x0,0x2fededed,0xefededed,0xffededed,0xffededed,0xefededed,0x2fededed,0xafededed,0xffededed, + 0xffededed,0xffededed,0xffededed,0xafededed,0xafededed,0xffededed,0xffededed,0xffededed,0xffededed,0xafededed,0x2fededed,0xefededed,0xffededed,0xffededed, + 0xefededed,0x2fededed,0x0,0x2fededed,0xafededed,0xafededed,0x2fededed,0x0 +}; + +static const QRgb lineEditBtnShadow_data[] = { + 0x0,0x1d000000,0x25000000,0x25000000,0x1d000000,0x0,0x1d000000,0x2b000000,0x1e000000,0x1e000000,0x2b000000,0x1d000000,0x18000000,0x16000000, + 0xc000000,0xc000000,0x16000000,0x18000000,0x13000000,0xa000000,0x2000000,0x2000000,0xa000000,0x13000000,0x1a000000,0xf000000,0x6000000,0x6000000, + 0xf000000,0x1a000000,0x0,0x19000000,0xb000000,0xb000000,0x19000000,0x0 +}; + +static const QRgb lveTriangular_data[] = { + 0x4c000000,0xb000000,0x0,0x0,0x0,0x0,0x0,0x7c000000,0x77000000,0x31000000,0x0,0x0,0x0,0x0, + 0x7c000000,0x7f000000,0x7f000000,0x60000000,0xd000000,0x0,0x0,0x7c000000,0x7f000000,0x7f000000,0x7f000000,0x7d000000,0x41000000,0x1000000, + 0x7c000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x7f000000,0x49000000,0x7c000000,0x7f000000,0x7f000000,0x7f000000,0x7d000000,0x41000000,0x1000000, + 0x7c000000,0x7f000000,0x7f000000,0x60000000,0xd000000,0x0,0x0,0x7c000000,0x77000000,0x31000000,0x0,0x0,0x0,0x0, + 0x4c000000,0xb000000,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb menuItem_data[] = { + 0x0,0x42000000,0xb3000000,0xc5000000,0x5c000000,0x3000000,0x36000000,0xff000000,0xff000000,0xff000000,0xff000000,0x62000000,0xa0000000,0xff000000, + 0xff000000,0xff000000,0xff000000,0xcc000000,0x92000000,0xff000000,0xff000000,0xff000000,0xff000000,0xbe000000,0x28000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0x52000000,0x0,0x24000000,0x92000000,0xa4000000,0x3b000000,0x0 +}; + +static const QRgb popup5_data[] = { + 0x0,0x0,0x3a575757,0xaf575757,0xfa575757,0xfa575757,0xaf575757,0x3a575757,0x0,0x0,0x0,0x5a575757,0xec575757,0x53575757, + 0x4575757,0x4575757,0x53575757,0xec575757,0x5a575757,0x0,0x22575757,0xeb575757,0x1c575757,0x0,0x0,0x0,0x0,0x1c575757, + 0xeb575757,0x22575757,0x9c575757,0x74575757,0x0,0x0,0x0,0x0,0x0,0x0,0x74575757,0x9c575757,0xd1575757,0x2c575757, + 0x0,0x0,0x0,0x0,0x0,0x0,0x2c575757,0xd1575757,0xd1575757,0x2c575757,0x0,0x0,0x0,0x0, + 0x0,0x0,0x2c575757,0xd1575757,0x9c575757,0x75575757,0x0,0x0,0x0,0x0,0x0,0x0,0x75575757,0x9c575757, + 0x22575757,0xeb575757,0x1c575757,0x0,0x0,0x0,0x0,0x1c575757,0xeb575757,0x22575757,0x0,0x5a575757,0xec575757,0x54575757, + 0x4575757,0x4575757,0x54575757,0xec575757,0x5a575757,0x0,0x0,0x0,0x3a575757,0xae575757,0xfa575757,0xfa575757,0xae575757,0x3a575757, + 0x0,0x0 +}; + +static const QRgb progressShadow2_data[] = { + 0xc6000000,0xb2000000,0xb2000000,0xc6000000,0x8d000000,0x65000000,0x65000000,0x8d000000,0x65000000,0x2f000000,0x2f000000,0x65000000,0x65000000,0x2e000000, + 0x2e000000,0x64000000 +}; + +static const QRgb progressTile_data[] = { + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000, + 0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000, + 0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000, + 0x12000000,0xc000000,0x7000000,0x3000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000, + 0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000, + 0x12000000,0xc000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000, + 0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000, + 0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000, + 0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x23000000,0x1f000000, + 0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000, + 0x25000000,0x27000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000, + 0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000, + 0x25000000,0x27000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000, + 0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000, + 0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000, + 0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x1b000000,0x20000000, + 0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0x10000000,0x16000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000, + 0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000,0xa000000,0x10000000,0x10000000,0x16000000,0x1b000000,0x20000000, + 0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000,0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000, + 0x6000000,0xa000000,0xa000000,0x10000000,0x16000000,0x1b000000,0x20000000,0x23000000,0x25000000,0x27000000,0x27000000,0x27000000,0x23000000,0x1f000000, + 0x19000000,0x12000000,0xc000000,0x7000000,0x3000000,0x2000000,0x3000000,0x6000000 +}; + +static const QRgb radio3circle_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x8000000,0xd000000,0xd000000,0xd000000,0x8000000, + 0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9000000,0x38000000,0xa4000000,0xb9000000, + 0xbd000000,0xb9000000,0xa4000000,0x38000000,0x9000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe000000,0x94000000, + 0xbe000000,0x53000000,0x10000000,0xd000000,0x10000000,0x53000000,0xbe000000,0x94000000,0xe000000,0x0,0x0,0x0,0x0,0x0, + 0xa000000,0x93000000,0x98000000,0x12000000,0x4000000,0x0,0x0,0x0,0x4000000,0x12000000,0x98000000,0x93000000,0xa000000,0x0, + 0x0,0x0,0x2000000,0x37000000,0xbb000000,0x13000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x13000000, + 0xbb000000,0x37000000,0x2000000,0x0,0x0,0x9000000,0x9e000000,0x53000000,0x4000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x4000000,0x53000000,0x9e000000,0x9000000,0x0,0x0,0xc000000,0xc5000000,0x10000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0xc5000000,0xc000000,0x0,0x0,0xd000000,0xc6000000,0xd000000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xd000000,0xc6000000,0xd000000,0x0,0x0, + 0xc000000,0xc5000000,0x10000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0xc5000000, + 0xc000000,0x0,0x0,0x9000000,0x9e000000,0x53000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x4000000,0x53000000,0x9e000000,0x9000000,0x0,0x0,0x2000000,0x37000000,0xbb000000,0x13000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x13000000,0xbb000000,0x37000000,0x2000000,0x0,0x0,0x0,0xa000000,0x93000000,0x98000000,0x12000000, + 0x4000000,0x0,0x0,0x0,0x4000000,0x12000000,0x98000000,0x93000000,0xa000000,0x0,0x0,0x0,0x0,0x0, + 0xe000000,0x94000000,0xbe000000,0x53000000,0x10000000,0xd000000,0x10000000,0x53000000,0xbe000000,0x94000000,0xe000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x9000000,0x38000000,0xa4000000,0xba000000,0xbe000000,0xba000000,0xa4000000,0x38000000,0x9000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x8000000,0xd000000,0xd000000,0xd000000,0x8000000, + 0x2000000,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 radio3inside_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,0xffffff,0xffffff,0xffffff,0xffffff,0x8ffffff,0x26ffffff, + 0x2affffff,0x26ffffff,0x8ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x0,0x0,0x0,0x0,0xffffff,0xffffff,0x4ffffff, + 0x5bffffff,0xe8ffffff,0xffffffff,0xffffffff,0xffffffff,0xe8ffffff,0x5bffffff,0x4ffffff,0xffffff,0xffffff,0x0,0x0,0x0,0x0, + 0xffffff,0x4ffffff,0x95ffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x95ffffff,0x4ffffff,0xffffff,0x0, + 0x0,0x0,0x0,0xffffff,0x5effffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0x5effffff,0xffffff,0x0,0x0,0x0,0x0,0x7ffffff,0xe8ffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xe8ffffff,0x7ffffff,0x0,0x0,0x0,0x0,0x27ffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x27ffffff,0x0,0x0,0x0,0x0,0x33ffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x33ffffff,0x0,0x0,0x0, + 0x0,0x2cffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x2cffffff, + 0x0,0x0,0x0,0x0,0x11ffffff,0xebffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xebffffff,0x11ffffff,0x0,0x0,0x0,0x0,0xffffff,0x7dffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x7dffffff,0xffffff,0x0,0x0,0x0,0x0,0xffffff,0x14ffffff,0xb9ffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb9ffffff,0x14ffffff,0xffffff,0x0,0x0,0x0,0x0,0xffffff, + 0xffffff,0x1bffffff,0x8effffff,0xebffffff,0xffffffff,0xffffffff,0xffffffff,0xebffffff,0x8effffff,0x1bffffff,0xffffff,0xffffff,0x0,0x0, + 0x0,0x0,0xffffff,0xffffff,0xffffff,0xffffff,0x8ffffff,0x26ffffff,0x2affffff,0x26ffffff,0x8ffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,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 radio3pressed_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, + 0xf000000,0x2e000000,0x32000000,0x32000000,0x32000000,0x2e000000,0xf000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1f000000,0x30000000,0x19000000,0xf000000,0xc000000,0xf000000,0x19000000,0x2f000000,0x1f000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xf000000,0x30000000,0x11000000,0x5000000,0x2000000,0x1000000,0x1000000,0x5000000,0x11000000,0x30000000, + 0xf000000,0x0,0x0,0x0,0x0,0x0,0x0,0x2e000000,0x19000000,0x5000000,0x0,0x0,0x0,0x0, + 0x0,0x5000000,0x19000000,0x2d000000,0x0,0x0,0x0,0x0,0x0,0x0,0x32000000,0xf000000,0x2000000,0x0, + 0x0,0x0,0x0,0x0,0x2000000,0xf000000,0x32000000,0x0,0x0,0x0,0x0,0x0,0xb0b0b,0x32000000, + 0xd000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x1000000,0xc000000,0x31000000,0xb0b0b,0x0,0x0,0x0, + 0x0,0x242424,0x32000000,0xf000000,0x2000000,0x0,0x0,0x0,0x0,0x0,0x2000000,0xf000000,0x32000000,0x242424, + 0x0,0x0,0x0,0x0,0x666666,0x2d000000,0x19000000,0x5000000,0x0,0x0,0x0,0x0,0x0,0x5000000, + 0x19000000,0x2d000000,0x666666,0x0,0x0,0x0,0x0,0x7f7f7f,0xf141414,0x30000000,0x11000000,0x5000000,0x2000000,0x1000000, + 0x1000000,0x5000000,0x11000000,0x30000000,0xf141414,0x7f7f7f,0x0,0x0,0x0,0x0,0x0,0x757575,0x1f050505,0x30000000, + 0x19000000,0xf000000,0xc000000,0xf000000,0x19000000,0x30000000,0x1e080808,0x757575,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x777777,0xf1e1e1e,0x2d000000,0x31000000,0x31000000,0x31000000,0x2d000000,0xf1e1e1e,0x777777,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x7f7f7f,0x6d6d6d,0x4f4f4f,0x414141,0x4f4f4f,0x6d6d6d,0x7f7f7f,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,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 radio3shadow_data[] = { + 0x0,0x0,0x0,0x0,0x1000000,0x3000000,0x7000000,0xa000000,0xc000000,0xa000000,0x7000000,0x3000000,0x1000000,0x0, + 0x0,0x0,0x0,0xffffff,0xffffff,0xffffff,0x2000000,0x8000000,0x10000000,0x1b090909,0x24151515,0x26141414,0x24151515,0x1b090909, + 0x11000000,0x8000000,0x2000000,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x2000000,0xa000000,0x1b1c1c1c,0x2e2c2c2c,0xdffffff,0xbffffff, + 0xbffffff,0xbffffff,0xdffffff,0x2e2c2c2c,0x1b1c1c1c,0xa000000,0x2000000,0xffffff,0xffffff,0xffffff,0x1000000,0x91c1c1c,0x1d2b2b2b,0x10ffffff, + 0x6ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x6ffffff,0x10ffffff,0x1d2b2b2b,0x91c1c1c,0x1000000,0xffffff,0xffffff,0x3000000, + 0x17424242,0x14ffffff,0x2ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1ffffff,0x15ffffff,0x17424242,0x4000000, + 0xffffff,0x1000000,0xa4c4c4c,0x2b6a6a6a,0x8ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0x8ffffff,0x2b6a6a6a,0xa4c4c4c,0x1000000,0x27f7f7f,0x14727272,0x31919191,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x1effffff,0x15797979,0x27f7f7f,0x3aaaaaa,0x1f9c9c9c,0x1dffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1dffffff,0x1f9c9c9c,0x47f7f7f,0x5cccccc,0x27b7b7b7,0x1dffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x1dffffff,0x27b7b7b7,0x5cccccc,0x5cccccc, + 0x26d0d0d0,0x27ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x27ffffff, + 0x27d1d1d1,0x5cccccc,0x4ffffff,0x20e7e7e7,0x44d5d5d5,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0x44d5d5d5,0x21e0e0e0,0x4ffffff,0x2ffffff,0x15f2f2f2,0x3fe2e2e2,0x14d8d8d8,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0x15dadada,0x40dfdfdf,0x15f2f2f2,0x2ffffff,0x1ffffff,0x9ffffff,0x30f4f4f4,0x59e8e8e8,0x5cccccc,0xffffff, + 0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x6d4d4d4,0x59e8e8e8,0x30f4f4f4,0xaffffff,0x1ffffff,0xffffff,0x3ffffff,0x15ffffff, + 0x45f7f7f7,0x62efefef,0x16e7e7e7,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x16e7e7e7,0x62efefef,0x45f7f7f7,0x16ffffff,0x3ffffff,0xffffff, + 0xffffff,0xffffff,0x6ffffff,0x1bffffff,0x44fbfbfb,0x63f4f4f4,0x5df1f1f1,0x3feeeeee,0x34ebebeb,0x3feeeeee,0x5df1f1f1,0x63f4f4f4,0x44fbfbfb,0x1bffffff, + 0x6ffffff,0x1ffffff,0xffffff,0xffffff,0xffffff,0x1ffffff,0x6ffffff,0x15ffffff,0x2effffff,0x4afbfbfb,0x5dfcfcfc,0x63fcfcfc,0x5dfcfcfc,0x4afbfbfb, + 0x2effffff,0x15ffffff,0x6ffffff,0x1ffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0xffffff,0x3ffffff,0xaffffff,0x14ffffff,0x1dffffff, + 0x21ffffff,0x1dffffff,0x14ffffff,0xaffffff,0x3ffffff,0xffffff,0xffffff,0xffffff,0xffffff +}; + +static const QRgb rb_dot2_data[] = { + 0x221d1d1d,0x9f060606,0xcc010101,0x9f060606,0x221d1d1d,0xa2121212,0xd2010101,0xd2000000,0xd2010101,0xa2121212,0xd11f1f1f,0xd3060606,0xd2000000,0xd3060606, + 0xd11f1f1f,0xac393939,0xd71e1e1e,0xd5121212,0xd71e1e1e,0xac393939,0x27404040,0xaf424242,0xd8434343,0xaf424242,0x27404040 +}; + +static const QRgb rb_dot2_shadow_data[] = { + 0x4fefefe,0x4ffffff,0x1ffffff,0x4ffffff,0x4fcfcfc,0xcfafafa,0x1ffffff,0x0,0x1ffffff,0xcfafafa,0x1afcfcfc,0x5ffffff,0x1bfbfbf,0x5ffffff, + 0x1afcfcfc,0x27fdfdfd,0x1afcfcfc,0x10fafafa,0x1afcfcfc,0x27fdfdfd,0xafdfdfd,0x2efdfdfd,0x3afdfdfd,0x2efdfdfd,0xafdfdfd +}; + +static const QRgb scroll2BtnHContour2_data[] = { + 0xff000000,0xff000000,0xff000000,0xff000000,0xd5000000,0x78000000,0x40000000,0x11000000,0x0,0x0,0x11000000,0x40000000,0x78000000,0xd5000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0x23000000,0x23000000,0x331b1b1b,0x30000000,0x95000000,0x2c000000,0x1000000,0x0,0x0,0x0, + 0x0,0x1000000,0x2c000000,0x95000000,0x30000000,0x331b1b1b,0x23000000,0x23000000,0x0,0xe000000,0x36000000,0xaa000000,0x2f000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2f000000,0xaa000000,0x36000000,0xe000000,0x0,0x2000000,0x25000000, + 0xa1000000,0x34000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34000000,0xa1000000, + 0x25000000,0x2000000,0x11000000,0x55000000,0x7c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x7c000000,0x55000000,0x11000000,0x1d000000,0x8e000000,0x28000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x28000000,0x8e000000,0x1d000000,0x23000000,0xaf000000,0x1000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0xaf000000,0x23000000, + 0x28000000,0xb0000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0xb0000000,0x28000000,0x23000000,0xaf000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x1000000,0xaf000000,0x23000000,0x1d000000,0x8e000000,0x28000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x28000000,0x8e000000,0x1d000000,0x11000000,0x55000000, + 0x7c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7c000000, + 0x55000000,0x11000000,0x2000000,0x25000000,0xa1000000,0x34000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x34000000,0xa1000000,0x25000000,0x2000000,0x0,0xe000000,0x36000000,0xaa000000,0x2f000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x2f000000,0xaa000000,0x36000000,0xe000000,0x0,0x23000000,0x23000000,0x331b1b1b,0x30000000, + 0x95000000,0x2c000000,0x1000000,0x0,0x0,0x0,0x0,0x1000000,0x2c000000,0x95000000,0x30000000,0x331b1b1b,0x23000000,0x23000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xd5000000,0x78000000,0x40000000,0x11000000,0x0,0x0,0x11000000,0x40000000,0x78000000,0xd5000000, + 0xff000000,0xff000000,0xff000000,0xff000000 +}; + +static const QRgb scroll2BtnHMask_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xb4ff0000,0x25ff0000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x25ff0000,0xb4ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x8dff0000,0x1ff0000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff0000,0x8dff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xb4ff0000,0x1ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff0000,0xb4ff0000, + 0xffff0000,0xffff0000,0xffff0000,0xfcff0000,0x24ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x24ff0000,0xfcff0000,0xffff0000,0xffff0000,0xbfff0000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbfff0000,0xffff0000,0xffff0000,0x88ff0000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88ff0000,0xffff0000, + 0xffff0000,0x76ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x76ff0000,0xffff0000,0xffff0000,0x88ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x88ff0000,0xffff0000,0xffff0000,0xbfff0000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbfff0000,0xffff0000,0xffff0000,0xfcff0000, + 0x24ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24ff0000, + 0xfcff0000,0xffff0000,0xffff0000,0xffff0000,0xb4ff0000,0x1ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1ff0000,0xb4ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x8dff0000,0x1ff0000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x1ff0000,0x8dff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xb4ff0000,0x25ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x25ff0000,0xb4ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0 +}; + +static const QRgb scroll2BtnHShadow2_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x13000000,0x12000000,0x7000000,0x7000000,0x12000000,0x13000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x17ffffff,0x17ffffff,0x12ffffff,0x19ffffff,0x16171717,0x24000000,0x17000000,0x7000000,0x2000000,0x2000000, + 0x7000000,0x17000000,0x24000000,0x16171717,0x19ffffff,0x12ffffff,0x17ffffff,0x17ffffff,0x0,0xcffffff,0x19ffffff,0x170b0b0b,0x21000000,0x11000000, + 0x8000000,0x2000000,0x0,0x0,0x2000000,0x8000000,0x11000000,0x21000000,0x170b0b0b,0x19ffffff,0xcffffff,0x0,0x5ffffff,0x1bffffff, + 0x112d2d2d,0x22000000,0xf000000,0x5000000,0x2000000,0x0,0x0,0x0,0x0,0x2000000,0x5000000,0xf000000,0x22000000,0x112d2d2d, + 0x1bffffff,0x5ffffff,0xeffffff,0x18ffffff,0x24000000,0x14000000,0x6000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x1000000,0x6000000,0x14000000,0x24000000,0x18ffffff,0xeffffff,0x17ffffff,0x186a6a6a,0x20000000,0xb000000,0x2000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x2000000,0xb000000,0x20000000,0x186a6a6a,0x17ffffff,0x1bffffff,0x1a000000,0x19000000,0x7000000, + 0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x7000000,0x19000000,0x1a000000,0x1bffffff, + 0x1cffffff,0x1e000000,0x17000000,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x6000000,0x17000000,0x1e000000,0x1cffffff,0x1bffffff,0x1a000000,0x19000000,0x7000000,0x1000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1000000,0x7000000,0x19000000,0x1a000000,0x1bffffff,0x17ffffff,0x19666666,0x20000000,0xa000000,0x2000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0xa000000,0x20000000,0x19666666,0x17ffffff,0xeffffff,0x18ffffff, + 0x24000000,0x13000000,0x6000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x6000000,0x13000000,0x24000000, + 0x18ffffff,0xeffffff,0x5ffffff,0x1bffffff,0x122a2a2a,0x22000000,0xf000000,0x5000000,0x1000000,0x0,0x0,0x0,0x0,0x1000000, + 0x5000000,0xf000000,0x22000000,0x122a2a2a,0x1bffffff,0x5ffffff,0x0,0xcffffff,0x19ffffff,0x180a0a0a,0x20000000,0x10000000,0x7000000,0x2000000, + 0x0,0x0,0x2000000,0x7000000,0x10000000,0x20000000,0x180a0a0a,0x19ffffff,0xcffffff,0x0,0x17ffffff,0x17ffffff,0x12ffffff,0x19ffffff, + 0x17161616,0x24000000,0x15000000,0x6000000,0x2000000,0x2000000,0x6000000,0x15000000,0x24000000,0x17161616,0x19ffffff,0x12ffffff,0x17ffffff,0x17ffffff, + 0x0,0x0,0x0,0x0,0x0,0x0,0x14000000,0xe000000,0x4000000,0x4000000,0xe000000,0x14000000,0x0,0x0, + 0x0,0x0,0x0,0x0 +}; + +static const QRgb scroll2BtnVContour2_data[] = { + 0xff000000,0x23000000,0x0,0x2000000,0x11000000,0x1d000000,0x23000000,0x28000000,0x23000000,0x1d000000,0x11000000,0x2000000,0x0,0x23000000, + 0xff000000,0xff000000,0x23000000,0xe000000,0x25000000,0x55000000,0x8e000000,0xaf000000,0xb0000000,0xaf000000,0x8e000000,0x55000000,0x25000000,0xe000000, + 0x23000000,0xff000000,0xff000000,0x331b1b1b,0x36000000,0xa1000000,0x7c000000,0x28000000,0x1000000,0x0,0x1000000,0x28000000,0x7c000000,0xa1000000, + 0x36000000,0x331b1b1b,0xff000000,0xff000000,0x30000000,0xaa000000,0x34000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x34000000,0xaa000000,0x30000000,0xff000000,0xd5000000,0x95000000,0x2f000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x2f000000,0x95000000,0xd5000000,0x78000000,0x2c000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x2c000000,0x78000000,0x40000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x1000000,0x40000000,0x11000000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11000000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11000000,0x40000000,0x1000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x40000000,0x78000000,0x2c000000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2c000000,0x78000000,0xd5000000, + 0x95000000,0x2f000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2f000000,0x95000000,0xd5000000, + 0xff000000,0x30000000,0xaa000000,0x34000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x34000000,0xaa000000,0x30000000, + 0xff000000,0xff000000,0x331b1b1b,0x36000000,0xa1000000,0x7c000000,0x28000000,0x1000000,0x0,0x1000000,0x28000000,0x7c000000,0xa1000000,0x36000000, + 0x331b1b1b,0xff000000,0xff000000,0x23000000,0xe000000,0x25000000,0x55000000,0x8e000000,0xaf000000,0xb0000000,0xaf000000,0x8e000000,0x55000000,0x25000000, + 0xe000000,0x23000000,0xff000000,0xff000000,0x23000000,0x0,0x2000000,0x11000000,0x1d000000,0x23000000,0x28000000,0x23000000,0x1d000000,0x11000000, + 0x2000000,0x0,0x23000000,0xff000000 +}; + +static const QRgb scroll2BtnVMask_data[] = { + 0x0,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0x0,0x0,0xffff0000,0xffff0000,0xffff0000,0xfcff0000,0xbfff0000,0x88ff0000,0x76ff0000,0x88ff0000,0xbfff0000,0xfcff0000,0xffff0000,0xffff0000, + 0xffff0000,0x0,0x0,0xffff0000,0xffff0000,0xb4ff0000,0x24ff0000,0x0,0x0,0x0,0x0,0x0,0x24ff0000,0xb4ff0000, + 0xffff0000,0xffff0000,0x0,0x0,0xffff0000,0x8dff0000,0x1ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x1ff0000,0x8dff0000,0xffff0000,0x0,0x0,0xb4ff0000,0x1ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1ff0000,0xb4ff0000,0x0,0x0,0x25ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x25ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x25ff0000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x25ff0000,0x0,0x0, + 0xb4ff0000,0x1ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff0000,0xb4ff0000,0x0, + 0x0,0xffff0000,0x8dff0000,0x1ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ff0000,0x8dff0000,0xffff0000, + 0x0,0x0,0xffff0000,0xffff0000,0xb4ff0000,0x24ff0000,0x0,0x0,0x0,0x0,0x0,0x24ff0000,0xb4ff0000,0xffff0000, + 0xffff0000,0x0,0x0,0xffff0000,0xffff0000,0xffff0000,0xfcff0000,0xbfff0000,0x88ff0000,0x76ff0000,0x88ff0000,0xbfff0000,0xfcff0000,0xffff0000, + 0xffff0000,0xffff0000,0x0,0x0,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0x0 +}; + +static const QRgb scroll2BtnVShadow2_data[] = { + 0x0,0x17ffffff,0x0,0x5ffffff,0xeffffff,0x17ffffff,0x1bffffff,0x1cffffff,0x1bffffff,0x17ffffff,0xeffffff,0x5ffffff,0x0,0x17ffffff, + 0x0,0x0,0x17ffffff,0xcffffff,0x1bffffff,0x18ffffff,0x186a6a6a,0x1a000000,0x1e000000,0x1a000000,0x19666666,0x18ffffff,0x1bffffff,0xcffffff, + 0x17ffffff,0x0,0x0,0x12ffffff,0x19ffffff,0x112d2d2d,0x24000000,0x20000000,0x19000000,0x17000000,0x19000000,0x20000000,0x24000000,0x122a2a2a, + 0x19ffffff,0x12ffffff,0x0,0x0,0x19ffffff,0x170b0b0b,0x22000000,0x14000000,0xb000000,0x7000000,0x6000000,0x7000000,0xa000000,0x13000000, + 0x22000000,0x180a0a0a,0x19ffffff,0x0,0x0,0x16171717,0x21000000,0xf000000,0x6000000,0x2000000,0x1000000,0x0,0x1000000,0x2000000, + 0x6000000,0xf000000,0x20000000,0x17161616,0x0,0x0,0x24000000,0x11000000,0x5000000,0x1000000,0x0,0x0,0x0,0x0, + 0x0,0x1000000,0x5000000,0x10000000,0x24000000,0x0,0x13000000,0x17000000,0x8000000,0x2000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1000000,0x7000000,0x15000000,0x14000000,0x12000000,0x7000000,0x2000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x2000000,0x6000000,0xe000000,0x7000000,0x2000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x4000000,0x7000000,0x2000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x4000000,0x12000000,0x7000000,0x2000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2000000,0x6000000,0xe000000,0x13000000,0x17000000,0x8000000, + 0x2000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x7000000,0x15000000,0x14000000,0x0,0x24000000, + 0x11000000,0x5000000,0x1000000,0x0,0x0,0x0,0x0,0x0,0x1000000,0x5000000,0x10000000,0x24000000,0x0,0x0, + 0x16171717,0x21000000,0xf000000,0x6000000,0x2000000,0x1000000,0x0,0x1000000,0x2000000,0x6000000,0xf000000,0x20000000,0x17161616,0x0, + 0x0,0x19ffffff,0x170b0b0b,0x22000000,0x14000000,0xb000000,0x7000000,0x6000000,0x7000000,0xa000000,0x13000000,0x22000000,0x180a0a0a,0x19ffffff, + 0x0,0x0,0x12ffffff,0x19ffffff,0x112d2d2d,0x24000000,0x20000000,0x19000000,0x17000000,0x19000000,0x20000000,0x24000000,0x122a2a2a,0x19ffffff, + 0x12ffffff,0x0,0x0,0x17ffffff,0xcffffff,0x1bffffff,0x18ffffff,0x186a6a6a,0x1a000000,0x1e000000,0x1a000000,0x19666666,0x18ffffff,0x1bffffff, + 0xcffffff,0x17ffffff,0x0,0x0,0x17ffffff,0x0,0x5ffffff,0xeffffff,0x17ffffff,0x1bffffff,0x1cffffff,0x1bffffff,0x17ffffff,0xeffffff, + 0x5ffffff,0x0,0x17ffffff,0x0 +}; + +static const QRgb scroll2SliderHContour_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x64000000,0x8f000000,0x8f000000,0x64000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x18000000,0x9b000000,0x7c000000,0x3e000000,0x3e000000,0x7c000000,0x9b000000,0x18000000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c000000,0xb2000000,0x44000000,0x1c000000,0xa000000,0xa000000,0x1c000000, + 0x44000000,0xb2000000,0x1c000000,0x0,0x0,0x0,0x0,0x0,0x2000000,0xa8000000,0x48000000,0x17000000,0x0,0x0, + 0x0,0x0,0x17000000,0x48000000,0xa8000000,0x2000000,0x0,0x0,0x0,0x0,0x56000000,0x87000000,0x1e000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x1e000000,0x87000000,0x56000000,0x0,0x0,0x0,0x0,0x91000000,0x40000000, + 0xb000000,0x0,0x0,0x0,0x0,0x0,0x0,0xb000000,0x40000000,0x91000000,0x0,0x0,0x0,0x0, + 0xb8000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23000000,0xb8000000,0x0,0x0, + 0x0,0x0,0xb9000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23000000,0xb9000000, + 0x0,0x0,0x0,0x0,0xb8000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x23000000,0xb8000000,0x0,0x0,0x0,0x0,0x98000000,0x40000000,0xb000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0xb000000,0x40000000,0x91000000,0x0,0x0,0x0,0x0,0x4a000000,0x87000000,0x1e000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1e000000,0x87000000,0x56000000,0x0,0x0,0x0,0x0,0x2000000,0xa8000000,0x48000000,0x17000000, + 0x0,0x0,0x0,0x0,0x17000000,0x48000000,0xa8000000,0x2000000,0x0,0x0,0x0,0x0,0x0,0x1c000000, + 0xb2000000,0x44000000,0x1c000000,0xa000000,0xa000000,0x1c000000,0x44000000,0xb2000000,0x1c000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x18000000,0x9b000000,0x7c000000,0x3e000000,0x3e000000,0x7c000000,0x9b000000,0x18000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x64000000,0x8f000000,0x8f000000,0x64000000,0x0,0x0,0x0,0x0, + 0x0,0x0 +}; + +static const QRgb scroll2SliderHDockedContour_data[] = { + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000,0x23000000,0x23000000,0x23000000,0x2b000000,0x44121212,0x9c000000,0x7c000000,0x3e000000,0x3e000000,0x7c000000,0x9c000000,0x44121212, + 0x2b000000,0x23000000,0x23000000,0x23000000,0x0,0x0,0xe000000,0x2f000000,0xb2000000,0x71000000,0x1c000000,0xa000000,0xa000000,0x1c000000, + 0x71000000,0xb2000000,0x2f000000,0xe000000,0x0,0x0,0x0,0x2000000,0x25000000,0xa9000000,0x48000000,0x17000000,0x0,0x0, + 0x0,0x0,0x17000000,0x48000000,0xa9000000,0x25000000,0x2000000,0x0,0x0,0x11000000,0x63000000,0x87000000,0x1e000000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x1e000000,0x87000000,0x63000000,0x11000000,0x0,0x0,0x1d000000,0x94000000,0x40000000, + 0xb000000,0x0,0x0,0x0,0x0,0x0,0x0,0xb000000,0x40000000,0x94000000,0x1d000000,0x0,0x0,0x23000000, + 0xb8000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23000000,0xb8000000,0x23000000,0x0, + 0x0,0x23000000,0xb9000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23000000,0xb9000000, + 0x23000000,0x0,0x0,0x23000000,0xb8000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x23000000,0xb8000000,0x23000000,0x0,0x0,0x1d000000,0x94000000,0x40000000,0xb000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0xb000000,0x40000000,0x94000000,0x1d000000,0x0,0x0,0x11000000,0x63000000,0x87000000,0x1e000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1e000000,0x87000000,0x63000000,0x11000000,0x0,0x0,0x2000000,0x25000000,0xa9000000,0x48000000,0x17000000, + 0x0,0x0,0x0,0x0,0x17000000,0x48000000,0xa9000000,0x25000000,0x2000000,0x0,0x0,0x0,0xe000000,0x2f000000, + 0xb2000000,0x71000000,0x1c000000,0xa000000,0xa000000,0x1c000000,0x71000000,0xb2000000,0x2f000000,0xe000000,0x0,0x0,0x23000000,0x23000000, + 0x23000000,0x2b000000,0x44121212,0x9c000000,0x7c000000,0x3e000000,0x3e000000,0x7c000000,0x9c000000,0x44121212,0x2b000000,0x23000000,0x23000000,0x23000000, + 0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000,0xff000000, + 0xff000000,0xff000000 +}; + +static const QRgb scroll2SliderHDockedShadow_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x17ffffff,0x17ffffff,0x17ffffff,0x17ffffff,0x11ffffff,0x16ffffff,0xbffffff,0x13ffffff,0x13ffffff,0xbffffff,0x16ffffff,0x11ffffff, + 0x17ffffff,0x17ffffff,0x17ffffff,0x17ffffff,0x0,0x0,0xaffffff,0x19ffffff,0x18ffffff,0x17ffffff,0x15ffffff,0x7ffffff,0x7ffffff,0x15ffffff, + 0x17ffffff,0x18ffffff,0x19ffffff,0xaffffff,0x0,0x0,0x0,0x5ffffff,0x19ffffff,0x13ffffff,0x11ffffff,0x11ffffff,0x0,0x0, + 0x0,0x0,0x11ffffff,0x11ffffff,0x13ffffff,0x19ffffff,0x5ffffff,0x0,0x0,0xdffffff,0x1effffff,0x7ffffff,0x16ffffff,0x0, + 0x0,0x0,0x0,0x0,0x0,0x16ffffff,0x7ffffff,0x1effffff,0xdffffff,0x0,0x0,0x16ffffff,0x9ffffff,0x13ffffff, + 0x8ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x8ffffff,0x13ffffff,0x9ffffff,0x16ffffff,0x0,0x0,0x1effffff, + 0x0,0x19ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19ffffff,0x0,0x1effffff,0x0, + 0x0,0x1effffff,0x0,0x1affffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1affffff,0x0, + 0x1effffff,0x0,0x0,0x1effffff,0x0,0x19ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x19ffffff,0x0,0x1effffff,0x0,0x0,0x16ffffff,0x9ffffff,0x13ffffff,0x8ffffff,0x0,0x0,0x0,0x0,0x0, + 0x0,0x8ffffff,0x13ffffff,0x9ffffff,0x16ffffff,0x0,0x0,0xdffffff,0x1effffff,0x7ffffff,0x16ffffff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x16ffffff,0x7ffffff,0x1effffff,0xdffffff,0x0,0x0,0x5ffffff,0x19ffffff,0x13ffffff,0x11ffffff,0x11ffffff, + 0x0,0x0,0x0,0x0,0x11ffffff,0x11ffffff,0x13ffffff,0x19ffffff,0x5ffffff,0x0,0x0,0x0,0xaffffff,0x19ffffff, + 0x18ffffff,0x17ffffff,0x15ffffff,0x7ffffff,0x7ffffff,0x15ffffff,0x17ffffff,0x18ffffff,0x19ffffff,0xaffffff,0x0,0x0,0x17ffffff,0x17ffffff, + 0x17ffffff,0x17ffffff,0x11ffffff,0x16ffffff,0xbffffff,0x13ffffff,0x13ffffff,0xbffffff,0x16ffffff,0x11ffffff,0x17ffffff,0x17ffffff,0x17ffffff,0x17ffffff, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0 +}; + +static const QRgb scroll2SliderHMask_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4bff0000,0xdaff0000,0xffff0000,0xffff0000,0xdaff0000,0x4bff0000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x72ff0000,0xfeff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xfeff0000,0x72ff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4bff0000,0xfeff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xfeff0000,0x4bff0000,0x0,0x0,0x0,0x0,0x0,0x3ff0000,0xdbff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xdbff0000,0x3ff0000,0x0,0x0,0x0,0x0,0x40ff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x40ff0000,0x0,0x0,0x0,0x0, + 0x77ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x77ff0000,0x0,0x0, + 0x0,0x0,0x89ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x89ff0000, + 0x0,0x0,0x0,0x0,0x77ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0x77ff0000,0x0,0x0,0x0,0x0,0x40ff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0x40ff0000,0x0,0x0,0x0,0x0,0x3ff0000,0xdbff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xdbff0000,0x3ff0000,0x0,0x0,0x0,0x0,0x0,0x4bff0000,0xfeff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xfeff0000,0x4bff0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x72ff0000,0xfeff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xfeff0000,0x72ff0000,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x4bff0000,0xdaff0000,0xffff0000,0xffff0000,0xdaff0000,0x4bff0000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0 +}; + +static const QRgb scroll2SliderHShadow2_data[] = { + 0x0,0x0,0x0,0x3000000,0xa000000,0x15000000,0x1f000000,0x17000000,0x17000000,0x1f000000,0x15000000,0xa000000,0x3000000,0x0, + 0x0,0x0,0x0,0x0,0x3000000,0xb000000,0x1a000000,0x1a000000,0xce9e9e9,0x13ffffff,0x13ffffff,0xce9e9e9,0x1a000000,0x1a000000, + 0xb000000,0x3000000,0x0,0x0,0x0,0x2000000,0xa000000,0x1a000000,0x1b000000,0x10ffffff,0x15ffffff,0x7ffffff,0x7ffffff,0x15ffffff, + 0x10ffffff,0x1b000000,0x1a000000,0xa000000,0x2000000,0x0,0x1000000,0x6000000,0x16000000,0x18000000,0x11ffffff,0x11ffffff,0x0,0x0, + 0x0,0x0,0x11ffffff,0x11ffffff,0x18000000,0x16000000,0x6000000,0x1000000,0x2000000,0xc000000,0x20000000,0x7ffffff,0x16ffffff,0x0, + 0x0,0x0,0x0,0x0,0x0,0x16ffffff,0x7ffffff,0x20000000,0xc000000,0x2000000,0x4000000,0x12000000,0x15000000,0x13ffffff, + 0x8ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x8ffffff,0x13ffffff,0x15000000,0x12000000,0x4000000,0x5000000,0x16000000, + 0x16000000,0x19ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19ffffff,0x16000000,0x16000000,0x5000000, + 0x6000000,0x16000000,0x16000000,0x1affffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1affffff,0x16000000, + 0x16000000,0x6000000,0x5000000,0x16000000,0x16000000,0x19ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x19ffffff,0x16000000,0x16000000,0x5000000,0x4000000,0x12000000,0x15000000,0x13ffffff,0x8ffffff,0x0,0x0,0x0,0x0,0x0, + 0x0,0x8ffffff,0x13ffffff,0x15000000,0x12000000,0x4000000,0x2000000,0xc000000,0x20000000,0x7ffffff,0x16ffffff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x16ffffff,0x7ffffff,0x20000000,0xc000000,0x2000000,0x1000000,0x6000000,0x16000000,0x18000000,0x11ffffff,0x11ffffff, + 0x0,0x0,0x0,0x0,0x11ffffff,0x11ffffff,0x18000000,0x16000000,0x6000000,0x1000000,0x0,0x2000000,0xa000000,0x1a000000, + 0x1b000000,0x10ffffff,0x15ffffff,0x7ffffff,0x7ffffff,0x15ffffff,0x10ffffff,0x1b000000,0x1a000000,0xa000000,0x2000000,0x0,0x0,0x0, + 0x3000000,0xb000000,0x1a000000,0x1a000000,0xce9e9e9,0x13ffffff,0x13ffffff,0xce9e9e9,0x1a000000,0x1a000000,0xb000000,0x3000000,0x0,0x0, + 0x0,0x0,0x1000000,0x3000000,0xa000000,0x16000000,0x1f000000,0x17000000,0x17000000,0x1f000000,0x16000000,0xa000000,0x3000000,0x1000000, + 0x0,0x0 +}; + +static const QRgb scroll2SliderVContour_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,0x2000000,0x4a000000,0x98000000,0xb8000000,0xb9000000,0xb8000000,0x91000000,0x56000000,0x2000000, + 0x0,0x0,0x0,0x0,0x0,0x1c000000,0xa8000000,0x87000000,0x40000000,0x23000000,0x23000000,0x23000000,0x40000000,0x87000000, + 0xa8000000,0x1c000000,0x0,0x0,0x0,0x18000000,0xb2000000,0x48000000,0x1e000000,0xb000000,0x0,0x0,0x0,0xb000000, + 0x1e000000,0x48000000,0xb2000000,0x18000000,0x0,0x0,0x9b000000,0x44000000,0x17000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x17000000,0x44000000,0x9b000000,0x0,0x64000000,0x7c000000,0x1c000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1c000000,0x7c000000,0x64000000,0x8f000000,0x3e000000,0xa000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xa000000,0x3e000000,0x8f000000,0x8f000000,0x3e000000,0xa000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xa000000,0x3e000000,0x8f000000,0x64000000,0x7c000000,0x1c000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c000000,0x7c000000,0x64000000,0x0,0x9b000000,0x44000000,0x17000000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17000000,0x44000000,0x9b000000,0x0,0x0,0x18000000,0xb2000000, + 0x48000000,0x1e000000,0xb000000,0x0,0x0,0x0,0xb000000,0x1e000000,0x48000000,0xb2000000,0x18000000,0x0,0x0,0x0, + 0x1c000000,0xa8000000,0x87000000,0x40000000,0x23000000,0x23000000,0x23000000,0x40000000,0x87000000,0xa8000000,0x1c000000,0x0,0x0,0x0, + 0x0,0x0,0x2000000,0x56000000,0x91000000,0xb8000000,0xb9000000,0xb8000000,0x91000000,0x56000000,0x2000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,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 scroll2SliderVDockedContour_data[] = { + 0xff000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x23000000, + 0xff000000,0xff000000,0x23000000,0x0,0x2000000,0x11000000,0x1d000000,0x23000000,0x23000000,0x23000000,0x1d000000,0x11000000,0x2000000,0x0, + 0x23000000,0xff000000,0xff000000,0x23000000,0xe000000,0x25000000,0x63000000,0x94000000,0xb8000000,0xb9000000,0xb8000000,0x94000000,0x63000000,0x25000000, + 0xe000000,0x23000000,0xff000000,0xff000000,0x2b000000,0x2f000000,0xa9000000,0x87000000,0x40000000,0x23000000,0x23000000,0x23000000,0x40000000,0x87000000, + 0xa9000000,0x2f000000,0x2b000000,0xff000000,0xff000000,0x44121212,0xb2000000,0x48000000,0x1e000000,0xb000000,0x0,0x0,0x0,0xb000000, + 0x1e000000,0x48000000,0xb2000000,0x44121212,0xff000000,0xff000000,0x9c000000,0x71000000,0x17000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x17000000,0x71000000,0x9c000000,0xff000000,0xff000000,0x7c000000,0x1c000000,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1c000000,0x7c000000,0xff000000,0xff000000,0x3e000000,0xa000000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xa000000,0x3e000000,0xff000000,0xff000000,0x3e000000,0xa000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xa000000,0x3e000000,0xff000000,0xff000000,0x7c000000,0x1c000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c000000,0x7c000000,0xff000000,0xff000000,0x9c000000,0x71000000,0x17000000, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17000000,0x71000000,0x9c000000,0xff000000,0xff000000,0x44121212,0xb2000000, + 0x48000000,0x1e000000,0xb000000,0x0,0x0,0x0,0xb000000,0x1e000000,0x48000000,0xb2000000,0x44121212,0xff000000,0xff000000,0x2b000000, + 0x2f000000,0xa9000000,0x87000000,0x40000000,0x23000000,0x23000000,0x23000000,0x40000000,0x87000000,0xa9000000,0x2f000000,0x2b000000,0xff000000,0xff000000, + 0x23000000,0xe000000,0x25000000,0x63000000,0x94000000,0xb8000000,0xb9000000,0xb8000000,0x94000000,0x63000000,0x25000000,0xe000000,0x23000000,0xff000000, + 0xff000000,0x23000000,0x0,0x2000000,0x11000000,0x1d000000,0x23000000,0x23000000,0x23000000,0x1d000000,0x11000000,0x2000000,0x0,0x23000000, + 0xff000000,0xff000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x23000000,0xff000000 +}; + +static const QRgb scroll2SliderVDockedShadow_data[] = { + 0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x17ffffff, + 0x0,0x0,0x17ffffff,0x0,0x5ffffff,0xdffffff,0x16ffffff,0x1effffff,0x1effffff,0x1effffff,0x16ffffff,0xdffffff,0x5ffffff,0x0, + 0x17ffffff,0x0,0x0,0x17ffffff,0xaffffff,0x19ffffff,0x1effffff,0x9ffffff,0x0,0x0,0x0,0x9ffffff,0x1effffff,0x19ffffff, + 0xaffffff,0x17ffffff,0x0,0x0,0x17ffffff,0x19ffffff,0x13ffffff,0x7ffffff,0x13ffffff,0x19ffffff,0x1affffff,0x19ffffff,0x13ffffff,0x7ffffff, + 0x13ffffff,0x19ffffff,0x17ffffff,0x0,0x0,0x11ffffff,0x18ffffff,0x11ffffff,0x16ffffff,0x8ffffff,0x0,0x0,0x0,0x8ffffff, + 0x16ffffff,0x11ffffff,0x18ffffff,0x11ffffff,0x0,0x0,0x16ffffff,0x17ffffff,0x11ffffff,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x11ffffff,0x17ffffff,0x16ffffff,0x0,0x0,0xbffffff,0x15ffffff,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x15ffffff,0xbffffff,0x0,0x0,0x13ffffff,0x7ffffff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x7ffffff,0x13ffffff,0x0,0x0,0x13ffffff,0x7ffffff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x7ffffff,0x13ffffff,0x0,0x0,0xbffffff,0x15ffffff,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x15ffffff,0xbffffff,0x0,0x0,0x16ffffff,0x17ffffff,0x11ffffff, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11ffffff,0x17ffffff,0x16ffffff,0x0,0x0,0x11ffffff,0x18ffffff, + 0x11ffffff,0x16ffffff,0x8ffffff,0x0,0x0,0x0,0x8ffffff,0x16ffffff,0x11ffffff,0x18ffffff,0x11ffffff,0x0,0x0,0x17ffffff, + 0x19ffffff,0x13ffffff,0x7ffffff,0x13ffffff,0x19ffffff,0x1affffff,0x19ffffff,0x13ffffff,0x7ffffff,0x13ffffff,0x19ffffff,0x17ffffff,0x0,0x0, + 0x17ffffff,0xaffffff,0x19ffffff,0x1effffff,0x9ffffff,0x0,0x0,0x0,0x9ffffff,0x1effffff,0x19ffffff,0xaffffff,0x17ffffff,0x0, + 0x0,0x17ffffff,0x0,0x5ffffff,0xdffffff,0x16ffffff,0x1effffff,0x1effffff,0x1effffff,0x16ffffff,0xdffffff,0x5ffffff,0x0,0x17ffffff, + 0x0,0x0,0x17ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x17ffffff,0x0 +}; + +static const QRgb scroll2SliderVMask_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,0x3ff0000,0x40ff0000,0x77ff0000,0x89ff0000,0x77ff0000,0x40ff0000,0x3ff0000,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x4bff0000,0xdbff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xdbff0000, + 0x4bff0000,0x0,0x0,0x0,0x0,0x0,0x72ff0000,0xfeff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xfeff0000,0x72ff0000,0x0,0x0,0x0,0x4bff0000,0xfeff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xfeff0000,0x4bff0000,0x0,0x0,0xdaff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xdaff0000,0x0,0x0,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x0,0x0,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0x0,0x0,0xdaff0000,0xffff0000,0xffff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xdaff0000,0x0,0x0,0x4bff0000,0xfeff0000,0xffff0000, + 0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xfeff0000,0x4bff0000,0x0,0x0,0x0,0x72ff0000, + 0xfeff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xfeff0000,0x72ff0000,0x0,0x0,0x0,0x0, + 0x0,0x4bff0000,0xdbff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xffff0000,0xdbff0000,0x4bff0000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x3ff0000,0x40ff0000,0x77ff0000,0x89ff0000,0x77ff0000,0x40ff0000,0x3ff0000,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,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 scroll2SliderVShadow2_data[] = { + 0x0,0x0,0x0,0x1000000,0x2000000,0x4000000,0x5000000,0x6000000,0x5000000,0x4000000,0x2000000,0x1000000,0x0,0x0, + 0x0,0x0,0x0,0x2000000,0x6000000,0xc000000,0x12000000,0x16000000,0x16000000,0x16000000,0x12000000,0xc000000,0x6000000,0x2000000, + 0x0,0x0,0x0,0x3000000,0xa000000,0x16000000,0x20000000,0x15000000,0x16000000,0x16000000,0x16000000,0x15000000,0x20000000,0x16000000, + 0xa000000,0x3000000,0x1000000,0x3000000,0xb000000,0x1a000000,0x18000000,0x7ffffff,0x13ffffff,0x19ffffff,0x1affffff,0x19ffffff,0x13ffffff,0x7ffffff, + 0x18000000,0x1a000000,0xb000000,0x3000000,0xa000000,0x1a000000,0x1b000000,0x11ffffff,0x16ffffff,0x8ffffff,0x0,0x0,0x0,0x8ffffff, + 0x16ffffff,0x11ffffff,0x1b000000,0x1a000000,0xa000000,0x15000000,0x1a000000,0x10ffffff,0x11ffffff,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x11ffffff,0x10ffffff,0x1a000000,0x16000000,0x1f000000,0xce9e9e9,0x15ffffff,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x15ffffff,0xce9e9e9,0x1f000000,0x17000000,0x13ffffff,0x7ffffff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x7ffffff,0x13ffffff,0x17000000,0x17000000,0x13ffffff,0x7ffffff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x7ffffff,0x13ffffff,0x17000000,0x1f000000,0xce9e9e9,0x15ffffff,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x15ffffff,0xce9e9e9,0x1f000000,0x15000000,0x1a000000,0x10ffffff,0x11ffffff, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x11ffffff,0x10ffffff,0x1a000000,0x16000000,0xa000000,0x1a000000,0x1b000000, + 0x11ffffff,0x16ffffff,0x8ffffff,0x0,0x0,0x0,0x8ffffff,0x16ffffff,0x11ffffff,0x1b000000,0x1a000000,0xa000000,0x3000000,0xb000000, + 0x1a000000,0x18000000,0x7ffffff,0x13ffffff,0x19ffffff,0x1affffff,0x19ffffff,0x13ffffff,0x7ffffff,0x18000000,0x1a000000,0xb000000,0x3000000,0x0, + 0x3000000,0xa000000,0x16000000,0x20000000,0x15000000,0x16000000,0x16000000,0x16000000,0x15000000,0x20000000,0x16000000,0xa000000,0x3000000,0x1000000, + 0x0,0x0,0x2000000,0x6000000,0xc000000,0x12000000,0x16000000,0x16000000,0x16000000,0x12000000,0xc000000,0x6000000,0x2000000,0x0, + 0x0,0x0,0x0,0x0,0x1000000,0x2000000,0x4000000,0x5000000,0x6000000,0x5000000,0x4000000,0x2000000,0x1000000,0x0, + 0x0,0x0 +}; + +static const QRgb scrollBarArrows_data[] = { + 0x0,0x0,0x0,0x23000000,0xa2000000,0xa2000000,0x23000000,0x0,0x0,0x0,0x0,0x0,0x4000000,0x77000000, + 0x4000000,0x0,0x0,0xa2000000,0xe5000000,0xeb000000,0xef000000,0xeb000000,0xe5000000,0xa2000000,0x0,0x0,0x42000000,0xbb000000, + 0xe5000000,0xe5000000,0xbb000000,0x42000000,0x0,0x0,0x0,0x0,0x7b000000,0xf5000000,0x7b000000,0x0,0x0,0x2a000000, + 0xbb000000,0xff000000,0xff000000,0xff000000,0xbb000000,0x23000000,0x4000000,0x7b000000,0xe4000000,0xff000000,0xeb000000,0xeb000000,0xff000000,0xe4000000, + 0x7b000000,0x4000000,0x0,0x42000000,0xe4000000,0xff000000,0xe4000000,0x42000000,0x0,0x0,0x42000000,0xe4000000,0xff000000,0xe4000000, + 0x42000000,0x0,0x77000000,0xf5000000,0xff000000,0xff000000,0xef000000,0xef000000,0xff000000,0xff000000,0xf5000000,0x77000000,0x2a000000,0xbb000000, + 0xff000000,0xff000000,0xff000000,0xbb000000,0x23000000,0x0,0x0,0x7b000000,0xf5000000,0x7b000000,0x0,0x0,0x4000000,0x7b000000, + 0xe4000000,0xff000000,0xeb000000,0xeb000000,0xff000000,0xe4000000,0x7b000000,0x4000000,0xa2000000,0xe5000000,0xeb000000,0xef000000,0xeb000000,0xe5000000, + 0xa2000000,0x0,0x0,0x4000000,0x77000000,0x4000000,0x0,0x0,0x0,0x0,0x42000000,0xbb000000,0xe5000000,0xe5000000, + 0xbb000000,0x42000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2a000000,0xa2000000,0xa2000000,0x2a000000,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; + +static const QRgb sizeGrip_data[] = { + 0x33bebebe,0x78bbbbbb,0x6bababab,0x278f8f8f,0x5e9d9d9d,0x6e9b9b9b,0x678a8a8a,0x4e6b6b6b,0x4b6c6c6c,0x576c6c6c,0x53595959,0x41363636,0x19282828,0x3a1e1e1e, + 0x390d0d0d,0x18000000 +}; + +static const QRgb sliderGrooveHBody_data[] = { + 0xb000000,0xb000000,0xb000000,0xb000000,0x9b353535,0x9b353535,0x9b353535,0x9b353535,0x92434343,0x92434343,0x92434343,0x92434343,0x8c535353,0x8c535353, + 0x8c535353,0x8c535353,0x86656565,0x86656565,0x86656565,0x86656565,0x2bfefefe,0x2bfefefe,0x2bfefefe,0x2bfefefe,0x9ffffff,0x9ffffff,0x9ffffff,0x9ffffff +}; + +static const QRgb sliderGroove_h_data[] = { + 0x1000000,0x5000000,0x9000000,0x9000000,0x5000000,0x1000000,0x2000000,0x41353535,0x89353535,0x89353535,0x41353535,0x2000000,0x5999999,0x83444444, + 0x92434343,0x92434343,0x83444444,0x5999999,0x8dfdfdf,0x7f575757,0x8c535353,0x8c535353,0x7f575757,0x8dfdfdf,0x7ffffff,0x488e8e8e,0x7c6c6c6c,0x7c6c6c6c, + 0x488e8e8e,0x7ffffff,0x3ffffff,0x14fcfcfc,0x25ffffff,0x25ffffff,0x14fcfcfc,0x3ffffff,0x0,0x3ffffff,0x7ffffff,0x7ffffff,0x3ffffff,0x0 +}; + +static const QRgb sliderGroove_v_data[] = { + 0x1000000,0x2000000,0x5999999,0x8dfdfdf,0x7ffffff,0x3ffffff,0x0,0x5000000,0x41353535,0x83444444,0x7f575757,0x488e8e8e,0x14fcfcfc,0x3ffffff, + 0x9000000,0x89353535,0x92434343,0x8c535353,0x7c6c6c6c,0x25ffffff,0x7ffffff,0x9000000,0x89353535,0x92434343,0x8c535353,0x7c6c6c6c,0x25ffffff,0x7ffffff, + 0x5000000,0x41353535,0x83444444,0x7f575757,0x488e8e8e,0x14fcfcfc,0x3ffffff,0x1000000,0x2000000,0x5999999,0x8dfdfdf,0x7ffffff,0x3ffffff,0x0 +}; + +static const QRgb sliderHandle2inside2_data[] = { + 0x0,0x0,0x0,0x0,0x0,0xfffffff,0x39ffffff,0x51ffffff,0x39ffffff,0xfffffff,0x0,0x0,0x0,0x0, + 0x0,0x0,0xffffff,0xffffff,0x4ffffff,0x71ffffff,0xf4ffffff,0xffffffff,0xffffffff,0xffffffff,0xf3ffffff,0x6fffffff,0x3ffffff,0xffffff, + 0x0,0x0,0x0,0xffffff,0x4ffffff,0xabffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xabffffff, + 0x3ffffff,0x0,0x0,0x0,0xffffff,0x71ffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0x71ffffff,0x0,0x0,0x0,0xbffffff,0xf6ffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xf2ffffff,0xbffffff,0x0,0x0,0x3affffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x3affffff,0x0,0x0,0x4affffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x4affffff,0x0,0x0,0x3cffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x3cffffff,0x0,0x0,0x10ffffff,0xf6ffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xf6ffffff,0x10ffffff,0x0,0x0,0xffffff,0xffffffff,0xffffffff,0xffffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0x0,0x0,0x0,0xffffff,0x6ffffff,0xb8ffffff, + 0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xffffffff,0xb0ffffff,0x6ffffff,0x0,0x0,0x0,0xffffff,0xffffff, + 0x7ffffff,0x7dffffff,0xf7ffffff,0xffffffff,0xffffffff,0xffffffff,0xf7ffffff,0x7affffff,0x6ffffff,0xffffff,0x0,0x0,0x0,0xffffff, + 0xffffff,0xffffff,0xffffff,0xfffffff,0x39ffffff,0x51ffffff,0x39ffffff,0xfffffff,0xffffff,0xffffff,0xffffff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,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 sliderHandle2circle_data[] = { + 0x0,0x0,0x0,0x0,0x1e8b8b8b,0x815e5e5e,0x95595959,0x995d5d5d,0x95595959,0x815e5e5e,0x1e8b8b8b,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x6c5e5e5e,0x92585858,0x336e6e6e,0x0,0x0,0x0,0x336e6e6e,0x92585858,0x6c5e5e5e,0x0, + 0x0,0x0,0x0,0x0,0x6f595959,0x75595959,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x75595959, + 0x6f595959,0x0,0x0,0x0,0x1e6b6b6b,0xa8525252,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0xa8525252,0x1e6b6b6b,0x0,0x0,0x874f4f4f,0x30545454,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x30545454,0x874f4f4f,0x0,0x0,0xab4c4c4c,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xab4c4c4c,0x0,0x0,0xae4c4c4c,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0xb14c4c4c,0x0,0x0,0xab4c4c4c,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0xab4c4c4c,0x0,0x0,0x7b4d4d4d,0x304a4a4a,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x304a4a4a,0x784d4d4d,0x0,0x0,0x1b4c4c4c,0xa84c4c4c,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa84c4c4c,0x1b4c4c4c,0x0,0x0,0x0,0x6f4c4c4c,0x784d4d4d, + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x784d4d4d,0x6c4c4c4c,0x0,0x0,0x0,0x0,0x0, + 0x6c4c4c4c,0x864c4c4c,0x334b4b4b,0x0,0x0,0x0,0x334b4b4b,0x864c4c4c,0x6c4c4c4c,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1e4d4d4d,0x814b4b4b,0x954b4b4b,0x994d4d4d,0x954b4b4b,0x7e4d4d4d,0x1e4d4d4d,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x0,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 sliderHandle2shadow_data[] = { + 0x0,0x0,0x1000000,0x3000000,0x5000000,0x4000000,0x2000000,0x5d5d5d,0x2000000,0x4000000,0x5000000,0x3000000,0x1000000,0x0, + 0x0,0x0,0x1000000,0x4000000,0x5000000,0xefefefe,0x32fefefe,0x45fefefe,0x4cfefefe,0x45fefefe,0x32fefefe,0xefefefe,0x5000000,0x4000000, + 0x1000000,0x0,0x1000000,0x4000000,0x6000000,0x17fefefe,0x3bfefefe,0x35fefefe,0x30fefefe,0x2efefefe,0x30fefefe,0x35fefefe,0x3bfefefe,0x17fefefe, + 0x6000000,0x4000000,0x1000000,0x3000000,0x9000000,0x8fefefe,0x29fefefe,0x20fefefe,0x1cffffff,0x1bffffff,0x1affffff,0x1bfdfdfd,0x1cfdfdfd,0x20fefefe, + 0x29fefefe,0x8fefefe,0x9000000,0x3000000,0x7000000,0x8000000,0x14fdfdfd,0x12fdfdfd,0xcffffff,0xbffffff,0xbffffff,0xbffffff,0xbffffff,0xbffffff, + 0xcffffff,0x12fefefe,0x14fdfdfd,0x8000000,0x7000000,0xc000000,0x3000000,0xcfcfcfc,0x2ffffff,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x2f0f0f0,0xcffffff,0x3000000,0xc000000,0xf000000,0x1000000,0x8fbfbfb,0x1ffffff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x1ffffff,0x8fbfbfb,0x1000000,0x10000000,0x11000000,0x4000000,0x89c9c9c,0x1010101,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1000000,0x98b8b8b,0x4000000,0x11000000,0xf000000,0xe000000,0xa7e7e7e,0x91f1f1f,0x2000000,0x0, + 0x0,0x0,0x0,0x0,0x2000000,0xa1c1c1c,0xa7e7e7e,0xe000000,0x10000000,0xc000000,0x19000000,0x2fcfcfc,0xe242424,0xc030303, + 0x4010101,0x2000000,0x1000000,0x2000000,0x4000000,0xc000000,0xf232323,0x2fcfcfc,0x19000000,0xc000000,0x7000000,0x19000000,0x13000000,0x2fefefe, + 0xf121212,0x12020202,0xb030303,0x8040404,0xb030303,0x12020202,0xf121212,0x2fefefe,0x13000000,0x19000000,0x7000000,0x3000000,0xd000000,0x21000000, + 0x15000000,0x1fefefe,0x91e1e1e,0x11020202,0x16020202,0x11020202,0x91e1e1e,0x1fafafa,0x15000000,0x21000000,0xd000000,0x3000000,0x1000000,0x4000000, + 0x10000000,0x21000000,0x22000000,0x12000000,0x6000000,0x1000000,0x6000000,0x12000000,0x22000000,0x21000000,0x10000000,0x4000000,0x1000000,0x0, + 0x1000000,0x4000000,0xd000000,0x19000000,0x24000000,0x2a000000,0x2d000000,0x2a000000,0x24000000,0x19000000,0xd000000,0x4000000,0x1000000,0x0, + 0x0,0x0,0x1000000,0x3000000,0x7000000,0xc000000,0x10000000,0x11000000,0x10000000,0xc000000,0x7000000,0x3000000,0x1000000,0x0, + 0x0 +}; + +static const QRgb spinBoxArrows_data[] = { + 0x0,0x0,0x0,0xd000000,0x0,0x0,0x0,0x0,0x0,0x24000000,0xa5000000,0x24000000,0x0,0x0, + 0x0,0x19000000,0xb5000000,0xff000000,0xb5000000,0x19000000,0x0,0x18000000,0x99000000,0xff000000,0xff000000,0xff000000,0x99000000,0x12000000, + 0x79000000,0xca000000,0xcc000000,0xd7000000,0xcc000000,0xca000000,0x78000000,0x79000000,0xca000000,0xcc000000,0xd7000000,0xcc000000,0xca000000,0x78000000, + 0x18000000,0x99000000,0xff000000,0xff000000,0xff000000,0x99000000,0x12000000,0x0,0x19000000,0xb5000000,0xff000000,0xb5000000,0x19000000,0x0, + 0x0,0x0,0x24000000,0xa5000000,0x24000000,0x0,0x0,0x0,0x0,0x0,0xd000000,0x0,0x0,0x0 +}; + +static const QRgb tabHLines_data[] = { + 0x4effffff,0x4effffff,0x4effffff,0x4effffff,0x1effffff,0x1effffff,0x1effffff,0x1effffff,0x19f9f9f9,0x19f9f9f9,0x19f9f9f9,0x19f9f9f9 +}; + +static const QRgb tabInsideWhiteLines_data[] = { + 0x19ffffff,0x19ffffff,0x19ffffff,0x19ffffff,0x19ffffff,0x0,0x0,0x0,0x19ffffff,0x0,0x0,0x0,0x19ffffff,0x0, + 0x0,0x0 +}; + +static const QRgb tabInsideWhite_data[] = { + 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0xaffffff,0x13ffffff,0x18ffffff,0x18ffffff,0x13ffffff,0xaffffff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x3ffffff,0x17ffffff,0x14ffffff,0x9ffffff,0x3ffffff,0x3ffffff,0x9ffffff,0x14ffffff,0x17ffffff,0x3ffffff,0x0,0x0, + 0x0,0x1ffffff,0x18ffffff,0xbffffff,0x0,0x0,0x0,0x0,0x0,0x0,0xbffffff,0x18ffffff,0x1ffffff,0x0, + 0x0,0xcffffff,0x13ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x13ffffff,0xcffffff,0x0, + 0x0,0x19ffffff,0x9ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9ffffff,0x19ffffff,0x0, + 0x0,0x19ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19ffffff,0x0, + 0x0,0x19ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x19ffffff,0x0, + 0x0,0x13ffffff,0x8ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8ffffff,0x13ffffff,0x0, + 0x0,0x7ffffff,0xbffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xbffffff,0x7ffffff,0x0, + 0x0,0x0,0x8ffffff,0x4ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x4ffffff,0x8ffffff,0x0,0x0, + 0x0,0x0,0x0,0x2ffffff,0x2ffffff,0x1ffffff,0x0,0x0,0x1ffffff,0x2ffffff,0x2ffffff,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,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 tabVlines_data[] = { + 0x1effffff,0x1effffff,0x1effffff,0x1effffff +}; + +static const QRgb tabWidget_data[] = { + 0x0,0x0,0x0,0x0,0x3000000,0xb000000,0x13000000,0x17000000,0x17000000,0x13000000,0xb000000,0x3000000,0x0,0x0, + 0x0,0x0,0x0,0x0,0x1000000,0xb000000,0x27474747,0x46b2b2b2,0x4ededede,0x48ffffff,0x48ffffff,0x4ededede,0x46b2b2b2,0x27474747, + 0xb000000,0x1000000,0x0,0x0,0x0,0x1000000,0xf000000,0x408f8f8f,0x44f7f7f7,0x37ffffff,0x29ffffff,0x21ffffff,0x20ffffff,0x28ffffff, + 0x37ffffff,0x44f7f7f7,0x408f8f8f,0xf000000,0x2000000,0x0,0x0,0xc000000,0x41858585,0x39ffffff,0x23ffffff,0x12ffffff,0xaffffff,0x5ffffff, + 0x5ffffff,0xaffffff,0x12ffffff,0x22ffffff,0x39ffffff,0x41858585,0xc000000,0x0,0x6000000,0x2b3b3b3b,0x3df2f2f2,0x1cffffff,0x9ffffff,0x3ffffff, + 0x1ffffff,0x0,0x0,0x1ffffff,0x3ffffff,0x9ffffff,0x1cffffff,0x3df2f2f2,0x2b3b3b3b,0x6000000,0x12000000,0x3ea0a0a0,0x22ffffff,0x9ffffff, + 0x1ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffffff,0x9ffffff,0x22ffffff,0x3ea0a0a0,0x13000000,0x20000000,0x39c9c9c9, + 0x13ffffff,0x3ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffff,0x12ffffff,0x39c9c9c9,0x20000000, + 0x22000000,0x21ffffff,0xaffffff,0x1ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1ffffff,0xaffffff, + 0x21ffffff,0x22000000,0x22000000,0x2ab3b3b3,0x7ffffff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x6ffffff,0x2ab3b3b3,0x21000000,0x1d000000,0x38787878,0xeffffff,0x1ffffff,0x0,0x0,0x0,0x0,0x0,0x0, + 0x0,0x0,0x1ffffff,0xefbfbfb,0x38787878,0x1a000000,0x11000000,0x37242424,0x1ce4e4e4,0x4ffffff,0x0,0x0,0x0,0x0, + 0x0,0x0,0x0,0x0,0x4f2f2f2,0x1ce5e5e5,0x37242424,0x11000000,0x8000000,0x23000000,0x40555555,0x15fefefe,0x2ffffff,0x0, + 0x0,0x0,0x0,0x0,0x0,0x2ffffff,0x15fbfbfb,0x46636363,0x23000000,0x9000000,0x3000000,0x11000000,0x30000000,0x47565656, + 0x1be1e1e1,0x9ffffff,0x2ffffff,0x0,0x0,0x2ffffff,0x9ffffff,0x1adfdfdf,0x47565656,0x30000000,0x11000000,0x3000000,0x0,0x5000000, + 0x15000000,0x30000000,0x491b1b1b,0x43636363,0x2a929292,0x1afafafa,0x19fafafa,0x2a929292,0x42606060,0x49171717,0x30000000,0x15000000,0x5000000,0x0, + 0x0,0x1000000,0x5000000,0x11000000,0x23000000,0x35000000,0x44000000,0x4c000000,0x4c000000,0x44000000,0x36000000,0x23000000,0x11000000,0x5000000, + 0x1000000,0x0,0x0,0x0,0x0,0x3000000,0x8000000,0x11000000,0x18000000,0x1c000000,0x1c000000,0x18000000,0x11000000,0x8000000, + 0x3000000,0x0,0x0,0x0 +}; + +static const QRgb tooltipframe2_data[] = { + 0x0,0x0,0x0,0xa575757,0x50575757,0x98575757,0xcc575757,0xcc575757,0x98575757,0x50575757,0xa575757,0x0,0x0,0x0, + 0x0,0x0,0x27575757,0xd3575757,0x99575757,0x56575757,0x1c575757,0x1c575757,0x56575757,0x99575757,0xd3575757,0x27575757,0x0,0x0, + 0x0,0x2d575757,0xe9575757,0x47575757,0x0,0x0,0x0,0x0,0x0,0x0,0x47575757,0xe9575757,0x2d575757,0x0, + 0x0,0xbf575757,0x4c575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4c575757,0xbf575757,0x0, + 0x51575757,0xb7575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb7575757,0x51575757, + 0x99575757,0x52575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x52575757,0x99575757, + 0xc5575757,0x26575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x26575757,0xc5575757, + 0xc8575757,0x24575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x24575757,0xc8575757, + 0x9b575757,0x50575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x50575757,0x9b575757, + 0x57575757,0xb0575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb0575757,0x57575757, + 0x1575757,0xc6575757,0x45575757,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x45575757,0xc6575757,0x1575757, + 0x0,0x33575757,0xe6575757,0x3a575757,0x0,0x0,0x0,0x0,0x0,0x0,0x3a575757,0xe6575757,0x33575757,0x0, + 0x0,0x0,0x2f575757,0xda575757,0x8d575757,0x49575757,0x10575757,0x10575757,0x49575757,0x8d575757,0xda575757,0x2f575757,0x0,0x0, + 0x0,0x0,0x0,0xf575757,0x5d575757,0xa5575757,0xd9575757,0xd9575757,0xa5575757,0x5d575757,0xf575757,0x0,0x0,0x0 +}; + +static const QRgb toolBtnFrameThin_data[] = { + 0x0,0x12000000,0x4e000000,0x9d000000,0x9d000000,0x4e000000,0x12000000,0x0,0xd000000,0x81000000,0x6d000000,0x19000000,0x19000000,0x6d000000, + 0x81000000,0xd000000,0x4a000000,0x66000000,0x0,0x0,0x0,0x0,0x66000000,0x4a000000,0x9c000000,0x19000000,0x0,0x0, + 0x0,0x0,0x19000000,0x9c000000,0x9c000000,0x19000000,0x0,0x0,0x0,0x0,0x19000000,0x9c000000,0x4a000000,0x66000000, + 0x0,0x0,0x0,0x0,0x66000000,0x4a000000,0xd000000,0x81000000,0x6d000000,0x19000000,0x19000000,0x6d000000,0x81000000,0xd000000, + 0x0,0x12000000,0x4e000000,0x9d000000,0x9d000000,0x4e000000,0x12000000,0x0 +}; + + +static struct EmbedImage { + int width, height, depth; + const unsigned char *data; + int numColors; + const QRgb *colorTable; + bool alpha; + const char *name; + } embed_image_vec[] = { + { 5, 4, 32, (const unsigned char*)arrow_down_small_data, 0, 0, TRUE, "arrow_down" }, + { 4, 7, 32, (const unsigned char*)btn17H_data, 0, 0, TRUE, "btnH" }, + { 4, 7, 32, (const unsigned char*)btn17HRaisedShadow_data, 0, 0, TRUE, "btnHRSh" }, + { 4, 7, 32, (const unsigned char*)btn17HRaisedShadowPressed_data, 0, 0, TRUE, "btnHRSPr" }, + { 4, 7, 32, (const unsigned char*)btn17HSunkenShadow_data, 0, 0, TRUE, "btnHSSh" }, + { 12, 13, 32, (const unsigned char*)btn17_data, 0, 0, TRUE, "btn" }, + { 12, 13, 32, (const unsigned char*)btn17RaisedShadow3_data, 0, 0, TRUE, "btn17RaisedShadow3" }, + { 12, 13, 32, (const unsigned char*)btn17RaisedShadowPressed_data, 0, 0, TRUE, "btnRSPr" }, + { 12, 13, 32, (const unsigned char*)btn17SunkenShadow_data, 0, 0, TRUE, "btnSSh" }, + { 6, 4, 32, (const unsigned char*)btn17V_data, 0, 0, TRUE, "btnV" }, + { 6, 4, 32, (const unsigned char*)btn17VRaisedShadow_data, 0, 0, TRUE, "btnVRSh" }, + { 6, 4, 32, (const unsigned char*)btn17VRaisedShadowPressed_data, 0, 0, TRUE, "btnVRSPr" }, + { 6, 4, 32, (const unsigned char*)btn17VSunkenShadow_data, 0, 0, TRUE, "btnVSSh" }, + { 4, 5, 32, (const unsigned char*)btnPressedShadowHLines_data, 0, 0, TRUE, "btnPressedShadowHLines" }, + { 10, 9, 32, (const unsigned char*)btnPressedShadowRectangular_data, 0, 0, TRUE, "btnPressedShadowRectangular" }, + { 10, 9, 32, (const unsigned char*)btnPressedShadowRound_data, 0, 0, TRUE, "btnPressedShadowRound" }, + { 6, 4, 32, (const unsigned char*)btnPressedShadowVLines_data, 0, 0, TRUE, "btnPressedShadowVLines" }, + { 18, 19, 32, (const unsigned char*)checkbox2inside_data, 0, 0, TRUE, "checkbox2inside" }, + { 18, 19, 32, (const unsigned char*)checkbox2pressed_data, 0, 0, TRUE, "checkbox2pressed" }, + { 18, 19, 32, (const unsigned char*)checkbox2rect_data, 0, 0, TRUE, "checkbox2rect" }, + { 18, 19, 32, (const unsigned char*)checkbox2shadow_data, 0, 0, TRUE, "checkbox2shadow" }, + { 13, 13, 32, (const unsigned char*)checkListExclusiveIndicator_data, 0, 0, TRUE, "checkListExclusiveIndicator" }, + { 16, 17, 32, (const unsigned char*)checkmark_data, 0, 0, TRUE, "checkmark" }, + { 12, 24, 32, (const unsigned char*)dockBack_data, 0, 0, TRUE, "DockbackButton" }, + { 12, 24, 32, (const unsigned char*)dockClose_data, 0, 0, TRUE, "DockCloseButton" }, + { 12, 24, 32, (const unsigned char*)dockStay_data, 0, 0, TRUE, "OverlapButton" }, + { 12, 24, 32, (const unsigned char*)dockToDesktop2_data, 0, 0, TRUE, "ToDesktopButton" }, + { 6, 6, 32, (const unsigned char*)focusRectEdges_data, 0, 0, TRUE, "focusRectEdges" }, + { 16, 16, 32, (const unsigned char*)groupBoxMask_small_data, 0, 0, TRUE, "groupBoxMask" }, + { 16, 16, 32, (const unsigned char*)groupBox_small_data, 0, 0, TRUE, "groupBox" }, + { 8, 8, 32, (const unsigned char*)lineedit4edges_data, 0, 0, TRUE, "lineedit4edges" }, + { 8, 8, 32, (const unsigned char*)lineedit4inside_data, 0, 0, TRUE, "lineedit4inside" }, + { 6, 6, 32, (const unsigned char*)lineEditBtnEdges_d_data, 0, 0, TRUE, "lineEditBtnEdges-d" }, + { 6, 6, 32, (const unsigned char*)lineEditBtnEdges_data, 0, 0, TRUE, "lineEditBtnEdges" }, + { 6, 6, 32, (const unsigned char*)lineEditBtnShadow_data, 0, 0, TRUE, "lineEditBtnShadow" }, + { 7, 9, 32, (const unsigned char*)lveTriangular_data, 0, 0, TRUE, "lveTriangular" }, + { 6, 6, 32, (const unsigned char*)menuItem_data, 0, 0, TRUE, "menuItem" }, + { 10, 10, 32, (const unsigned char*)popup5_data, 0, 0, TRUE, "popup5" }, + { 4, 4, 32, (const unsigned char*)progressShadow2_data, 0, 0, TRUE, "progressShadow2" }, + { 20, 20, 32, (const unsigned char*)progressTile_data, 0, 0, TRUE, "progressTile" }, + { 17, 17, 32, (const unsigned char*)radio3circle_data, 0, 0, TRUE, "radio3circle" }, + { 17, 17, 32, (const unsigned char*)radio3inside_data, 0, 0, TRUE, "radio3inside" }, + { 17, 17, 32, (const unsigned char*)radio3pressed_data, 0, 0, TRUE, "radio3pressed" }, + { 17, 17, 32, (const unsigned char*)radio3shadow_data, 0, 0, TRUE, "radio3shadow" }, + { 5, 5, 32, (const unsigned char*)rb_dot2_data, 0, 0, TRUE, "rb-dot" }, + { 5, 5, 32, (const unsigned char*)rb_dot2_shadow_data, 0, 0, TRUE, "rb-dot-shadow" }, + { 18, 15, 32, (const unsigned char*)scroll2BtnHContour2_data, 0, 0, TRUE, "scrollBtnHContour" }, + { 18, 15, 32, (const unsigned char*)scroll2BtnHMask_data, 0, 0, TRUE, "scrollBtnHMask" }, + { 18, 15, 32, (const unsigned char*)scroll2BtnHShadow2_data, 0, 0, TRUE, "scrollBtnHShadow" }, + { 15, 18, 32, (const unsigned char*)scroll2BtnVContour2_data, 0, 0, TRUE, "scrollBtnVContour" }, + { 15, 18, 32, (const unsigned char*)scroll2BtnVMask_data, 0, 0, TRUE, "scrollBtnVMask" }, + { 15, 18, 32, (const unsigned char*)scroll2BtnVShadow2_data, 0, 0, TRUE, "scrollBtnVShadow" }, + { 16, 15, 32, (const unsigned char*)scroll2SliderHContour_data, 0, 0, TRUE, "scrollSliderHContour" }, + { 16, 15, 32, (const unsigned char*)scroll2SliderHDockedContour_data, 0, 0, TRUE, "scrollSliderHDockedContour" }, + { 16, 15, 32, (const unsigned char*)scroll2SliderHDockedShadow_data, 0, 0, TRUE, "scrollSliderHDockedShadow" }, + { 16, 15, 32, (const unsigned char*)scroll2SliderHMask_data, 0, 0, TRUE, "scrollSliderHMask" }, + { 16, 15, 32, (const unsigned char*)scroll2SliderHShadow2_data, 0, 0, TRUE, "scrollSliderHShadow" }, + { 15, 16, 32, (const unsigned char*)scroll2SliderVContour_data, 0, 0, TRUE, "scrollSliderVContour" }, + { 15, 16, 32, (const unsigned char*)scroll2SliderVDockedContour_data, 0, 0, TRUE, "scrollSliderVDockedContour" }, + { 15, 16, 32, (const unsigned char*)scroll2SliderVDockedShadow_data, 0, 0, TRUE, "scrollSliderVDockedShadow" }, + { 15, 16, 32, (const unsigned char*)scroll2SliderVMask_data, 0, 0, TRUE, "scrollSliderVMask" }, + { 15, 16, 32, (const unsigned char*)scroll2SliderVShadow2_data, 0, 0, TRUE, "scrollSliderVShadow" }, + { 24, 7, 32, (const unsigned char*)scrollBarArrows_data, 0, 0, TRUE, "scrollBarArrows" }, + { 4, 4, 32, (const unsigned char*)sizeGrip_data, 0, 0, TRUE, "sizeGrip" }, + { 4, 7, 32, (const unsigned char*)sliderGrooveHBody_data, 0, 0, TRUE, "slGHBody" }, + { 6, 7, 32, (const unsigned char*)sliderGroove_h_data, 0, 0, TRUE, "slGh" }, + { 7, 6, 32, (const unsigned char*)sliderGroove_v_data, 0, 0, TRUE, "slGv" }, + { 15, 15, 32, (const unsigned char*)sliderHandle2inside2_data, 0, 0, TRUE, "sliderHandle2inside" }, + { 15, 15, 32, (const unsigned char*)sliderHandle2circle_data, 0, 0, TRUE, "sliderHandle2circle" }, + { 15, 15, 32, (const unsigned char*)sliderHandle2shadow_data, 0, 0, TRUE, "sliderHandle2shadow" }, + { 7, 10, 32, (const unsigned char*)spinBoxArrows_data, 0, 0, TRUE, "spinBoxArrows" }, + { 4, 3, 32, (const unsigned char*)tabHLines_data, 0, 0, TRUE, "tabHLines" }, + { 4, 4, 32, (const unsigned char*)tabInsideWhiteLines_data, 0, 0, TRUE, "tabInsideWhiteLines" }, + { 14, 14, 32, (const unsigned char*)tabInsideWhite_data, 0, 0, TRUE, "tabInsideWhite" }, + { 1, 4, 32, (const unsigned char*)tabVlines_data, 0, 0, TRUE, "tabVLines" }, + { 16, 16, 32, (const unsigned char*)tabWidget_data, 0, 0, TRUE, "tabWidget" }, + { 14, 14, 32, (const unsigned char*)tooltipframe2_data, 0, 0, TRUE, "border1" }, + { 8, 8, 32, (const unsigned char*)toolBtnFrameThin_data, 0, 0, TRUE, "toolBtnFrameThin" }, + { 0, 0, 0, 0, 0, 0, 0, 0 } +}; + +static const QImage& qembed_findImage( const QString& name ) +{ + static QDict<QImage> dict; + QImage* img = dict.find( name ); + if ( !img ) { + for ( int i = 0; embed_image_vec[i].data; i++ ) { + if ( strcmp(embed_image_vec[i].name, name.latin1()) == 0 ) { + img = new QImage((uchar*)embed_image_vec[i].data, + embed_image_vec[i].width, + embed_image_vec[i].height, + embed_image_vec[i].depth, + (QRgb*)embed_image_vec[i].colorTable, + embed_image_vec[i].numColors, + QImage::BigEndian ); + if ( embed_image_vec[i].alpha ) + img->setAlphaBuffer( TRUE ); + dict.insert( name, img ); + break; + } + } + if ( !img ) { + static QImage dummy; + return dummy; + } + } + return *img; +} + +#endif diff --git a/domino/domino.cpp b/domino/domino.cpp new file mode 100644 index 0000000..837d0af --- /dev/null +++ b/domino/domino.cpp @@ -0,0 +1,8139 @@ +/* Domino widget style for KDE 3 + Copyright (C) 2006 Michael Lentner <michaell@gmx.net> + + based on the KDE style "Plastik": + Copyright (C) 2003 Sandro Giessl <ceebx@users.sourceforge.net> + + based on the KDE style "dotNET": + Copyright (C) 2001-2002, Chris Lee <clee@kde.org> + Carsten Pfeiffer <pfeiffer@kde.org> + Karol Szwed <gallium@kde.org> + Drawing routines completely reimplemented from KDE3 HighColor, which was + originally based on some stuff from the KDE2 HighColor. + + based on drawing routines of the style "Keramik": + Copyright (c) 2002 Malte Starostik <malte@kde.org> + (c) 2002,2003 Maksim Orlovich <mo002j@mail.rochester.edu> + based on the KDE3 HighColor Style + Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org> + (C) 2001-2002 Fredrik Höglund <fredrik@kde.org> + Drawing routines adapted from the KDE2 HCStyle, + Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org> + (C) 2000 Dirk Mueller <mueller@kde.org> + (C) 2001 Martijn Klingens <klingens@kde.org> + Progressbar code based on KStyle, + Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +#include <kglobalsettings.h> +#include <qpainter.h> +#include <qtabbar.h> +#include <qprogressbar.h> +#include <qcheckbox.h> +#include <qlineedit.h> +#include <qlistbox.h> +#include <qstyleplugin.h> +#include <qpushbutton.h> +#include <qtoolbutton.h> +#include <kpopupmenu.h> +#include <qradiobutton.h> +#include <qslider.h> +#include <qsettings.h> +#include <kpixmap.h> +#include <qgroupbox.h> +#include <qmenudata.h> +#include <qdockarea.h> +#include <qobjectlist.h> +#include <qheader.h> +#include <klistview.h> +#include <qstatusbar.h> +#include <qcombobox.h> +#include <qtabwidget.h> +#include <ktoolbar.h> +#include <qlabel.h> +#include <qsimplerichtext.h> +#include <qiconview.h> +#include <kconfig.h> +#include <qapplication.h> +#include <qtoolbox.h> +#include <qstylesheet.h> +// #include <qsplitter.h> +#include <qwidgetstack.h> +#include <qtimer.h> +#include <kmultitabbar.h> +#include <qspinbox.h> +#include <qcursor.h> +#include <qtextedit.h> +#include <kdeversion.h> +#include <kimageeffect.h> + +#include <X11/Xlib.h> +#include <ft2build.h> +#include FT_FREETYPE_H + +#include "domino.h" + +#include <X11/Xft/Xft.h> +// #include <X11/extensions/Xrender.h> +#include <X11/extensions/shape.h> + + + +// popupmenu item constants... +static const int itemHMargin = 6; +static const int itemFrame = 7; +static const int arrowHMargin = 6; + +ButtonContour::ButtonContour() +{ + + state = Contour_Default; + alpha_mode = false; + + for(int t = 0; t < num_types; t++) + for(int s = 0; s < num_states; s++) + created[t][s] = 0; + + for(int s = 0; s < num_states; s++) + shadowCreated[s] = 0; + + ContourType ty; + ty = Contour_Sunken; + for(int s = 0; s < num_states; s++) { + c1[ty][s] = qRgba(31, 31, 31, 32); // top first shadow line + c4[ty][s] = qRgba(255, 255, 255, 78); // bottom first shadow line + c5[ty][s] = qRgba(255, 255, 255, 30); // bottom second shadow line + c6[ty][s] = qRgba(217, 217, 217, 34); // first left shadow line + } + ty = Contour_Raised; + for(int s = 0; s < num_states; s++) { + c1[ty][s] = qRgba(0, 0, 0, 14); // top first shadow line + c4[ty][s] = qRgba(0, 0, 0, 26); // bottom first shadow line + c5[ty][s] = qRgba(0, 0, 0, 10); // bottom second shadow line + c6[ty][s] = qRgba(0, 0, 0, 12); // first left shadow line + } + ty = Contour_Simple; + for(int s = 0; s < num_states; s++) { + c1[ty][s] = qRgba(0, 0, 0, 0); // top first shadow line + c4[ty][s] = qRgba(0, 0, 0, 0); // bottom first shadow line + c5[ty][s] = qRgba(0, 0, 0, 0); // bottom second shadow line + c6[ty][s] = qRgba(0, 0, 0, 0); // first left shadow line + } + drawButtonSunkenShadow = true; +} + + +ButtonContour::~ButtonContour() +{ + + for(int t = 0; t < num_types; t++) { + for(int s = 0; s < num_states; s++) { + if(created[t][s]) { + delete btnEdges[t][s]; + delete btnVLines[t][s]; + delete btnHLines[t][s]; + } + } + } + for(int s = 0; s < num_states; s++) { + if(shadowCreated[s]) + delete buttonShadowRectangular[s]; + } +} + +RubberWidget::RubberWidget(Window window ) + : QWidget() +{ + setWState(WState_Disabled|WState_Polished); + QWidget::create( window, true, true); +} + +RubberWidget::~RubberWidget() +{ +} + + + +Rubber::Rubber(uint col) +{ + + rubber = 0; + parent = 0; + window = 0; + mask = QRegion(); + Display *dpy = qt_xdisplay(); + int screen = qt_xscreen(); + visual = 0; + colormap = 0; + int event_base, error_base; + + if ( XRenderQueryExtension( dpy, &event_base, &error_base ) ) + { + int nvi; + XVisualInfo templ; + templ.screen = screen; + templ.depth = 32; + templ.c_class = TrueColor; + XVisualInfo *xvi = XGetVisualInfo( dpy, VisualScreenMask | VisualDepthMask + | VisualClassMask, &templ, &nvi ); + + for ( int i = 0; i < nvi; i++ ) { + XRenderPictFormat *format = XRenderFindVisualFormat( dpy, xvi[i].visual ); + if ( format->type == PictTypeDirect && format->direct.alphaMask ) { + visual = xvi[i].visual; + colormap = XCreateColormap( dpy, RootWindow( dpy, screen ), visual, AllocNone ); + break; + } + } + } + + wsa.border_pixel = 0; + wsa.colormap = colormap; + wsa.background_pixel = 0x00000000; + wsa.override_redirect = true; + + color = col; +} + +void Rubber::create(QRect& r, QRegion& m) { + if(parent) + return; + + mask = m; + + wsa.background_pixel = 0x00000000; + Window parentwin = XCreateWindow(qt_xdisplay(), qApp->desktop()->winId(), r.x(), r.y(), r.width(), r.height(), 0, 32, InputOutput, visual, CWBackPixel|CWColormap|CWBorderPixel|CWOverrideRedirect, &wsa); + parent = new RubberWidget(parentwin); + + wsa.background_pixel = color; + window = XCreateWindow(qt_xdisplay(), parentwin, 0, 0, r.width(), r.height(), 0, 32, InputOutput, visual, CWBackPixel|CWColormap|CWBorderPixel|CWOverrideRedirect, &wsa); + rubber = new RubberWidget(window); + +#ifdef ShapeInput + QBitmap bm(r.width(), r.height(), true); + XShapeCombineMask(qt_xdisplay(), rubber->winId(), ShapeInput, 0, 0, bm.handle(), ShapeSet); +#endif + XShapeCombineRegion( qt_xdisplay(), rubber->winId(), ShapeBounding, 0, 0, mask.handle(), ShapeSet ); + + rubber->show(); + parent->show(); + + XFlush(qt_xdisplay()); +} + +Rubber::~Rubber() +{ +} + +void Rubber::updateMask(QRegion& m) { + if(mask != m) + XShapeCombineRegion( qt_xdisplay(), rubber->winId(), ShapeBounding, 0, 0, m.handle(), ShapeSet ); +} + + +// -- Style Plugin Interface ------------------------- +class DominoStylePlugin : public QStylePlugin +{ + public: + DominoStylePlugin() {} + ~DominoStylePlugin() {} + + QStringList keys() const { + return QStringList() << "Domino"; + } + + QStyle* create( const QString& key ) { + if (key.lower() == "domino") + return new DominoStyle; + return 0; + } +}; + +KDE_Q_EXPORT_PLUGIN( DominoStylePlugin ) +// -- end -- + + DominoStyle::DominoStyle() : KStyle( KStyle::Default /*AllowMenuTransparency*/, ThreeButtonScrollBar ) +{ + konsoleMode = false; + kickerMode = false; + konquerorMode = false; + flatMode = false; + viewPortPressed = false; + oldRubberRect = QRect(); + rubber = 0; + ignoreNextFocusRect = false; +#if KDE_VERSION < 0x30506 + compositeManagerRunning = true; +#endif + configMode = "0"; // temporaly to avoid cache problems between the configs previewStyle and this style + spinWidgetDown = false; + + popupTimer = new QTimer(this); + + QColor background = qApp->palette().active().background(); + QColor buttonColor = qApp->palette().active().button(); + QColor highlight = qApp->palette().active().highlight(); + QSettings settings; +// _contrast = settings.readNumEntry("/Qt/KDE/contrast", 0); + + settings.beginGroup("/domino/Settings"); + + //konqTabBarContrast = 150; + konqTabBarContrast = settings.readNumEntry("/konqTabBarContrast", 15)+100; + + _animateProgressBar = settings.readBoolEntry("/animateProgressBar", true); + _centerTabs = settings.readBoolEntry("/centerTabs", false); + _drawTriangularExpander = settings.readBoolEntry("/drawTriangularExpander", true); + _customCheckMarkColor = settings.readBoolEntry("/customCheckMarkColor", false); + _checkMarkColor.setNamedColor( settings.readEntry("/checkMarkColor", "black") ); + groupBoxSettings.tintBackground = settings.readBoolEntry("/tintGroupBoxBackground", true); + groupBoxSettings.customColor = settings.readBoolEntry("/customGroupBoxBackgroundColor", false); + groupBoxSettings.brightness = settings.readNumEntry("/groupBoxBrightness", 10); + groupBoxSettings.color = settings.readEntry("/groupBoxBackgroundColor", darkenColor(background, 10).name()); + bool customToolTipColor = settings.readBoolEntry("/customToolTipColor", false); + _toolTipColor = customToolTipColor? settings.readEntry("/toolTipColor", QColor(218,218,179).name()) : QColor(218,218,179); + //_toolTipColor = QColor(255,255,220); // yellow + _smoothScrolling = settings.readBoolEntry("/smoothScrolling", true); + _buttonHeightAdjustment = settings.readNumEntry("/buttonHeightAdjustment", 0); + _customPopupMenuColor = settings.readBoolEntry("/customPopupMenuColor", false); + _popupMenuColor = _customPopupMenuColor ? settings.readEntry("/popupMenuColor", background.name()) : background.name(); + _customSelMenuItemColor = settings.readBoolEntry("/customSelMenuItemColor", false); + _selMenuItemColor = _customSelMenuItemColor ? settings.readEntry("/selMenuItemColor", highlight.name()) : highlight.name(); + _drawPopupMenuGradient = settings.readBoolEntry("/drawPopupMenuGradient", true); + _indentPopupMenuItems = settings.readBoolEntry("/indentPopupMenuItems", true); + _toolBtnAsBtn = settings.readBoolEntry("/drawToolButtonAsButton", true); + _highlightToolBtnIcon = settings.readBoolEntry("/highlightToolBtnIcon", false); + + rubberBandType = (RubberType) settings.readNumEntry("/rubberBandType", DistRubber); + if(rubberBandType == ArgbRubber) { + int dummy; + if(XQueryExtension(qt_xdisplay(), "Composite", &dummy, &dummy, &dummy)) { + QColor c = settings.readEntry("/rubberBandColor", highlight.name()); + int a = settings.readNumEntry("/rubberBandOpacity", 30)*255/100; + _argbRubberBandColor = qRgba(c.red(), c.green(), c.blue(), a); + + rubber = new Rubber(preMultiplyColor(_argbRubberBandColor)); + } + else + rubberBandType = DistRubber; + } + + + focusIndicatorSettings.indicateFocus = settings.readBoolEntry("/indicateFocus", true); + if(focusIndicatorSettings.indicateFocus) { + focusIndicatorSettings.color = settings.readEntry("/indicatorColor", highlight.name()); + focusIndicatorSettings.opacity = settings.readNumEntry("/indicatorColorOpacity", 60)*255/100; + focusIndicatorSettings.buttonColor = settings.readEntry("/indicatorButtonColor", highlight.name()); + focusIndicatorSettings.buttonOpacity = settings.readNumEntry("/indicatorColorButtonOpacity", 60)*255/100; + } + focusIndicatorSettings.drawUnderline = settings.readBoolEntry("/drawFocusUnderline", true); + + buttonContour = new ButtonContour(); + buttonContour->setDefaultType((ContourType)settings.readNumEntry("/buttonContourType", Contour_Raised), false); // we need to know the ContourType to adjust the contour colors + buttonContour->setColor(Contour_Default, settings.readEntry("/buttonContourColor", background.dark(250).name())); + buttonContour->setColor(Contour_DefaultButton, settings.readEntry("/buttonDefaultContourColor", highlight.name())); + buttonContour->setColor(Contour_MouseOver, settings.readEntry("/buttonMouseOverContourColor", background.dark(250).name())); + buttonContour->setColor(Contour_Pressed, settings.readEntry("/buttonPressedContourColor", background.dark(250).name())); + buttonContour->drawButtonSunkenShadow = settings.readBoolEntry("/drawButtonSunkenShadow", true); + buttonContour->setDefaultType(buttonContour->defaultType); // create this time the tinted pixmaps + + if(buttonContour->defaultType == Contour_Raised) + buttonContour->drawButtonSunkenShadow = false; + + _customSliderHandleContourColor = settings.readBoolEntry("/customSliderHandleContourColor", false); + + bool drawTextEffect = settings.readBoolEntry("/drawTextEffect", true); + if(drawTextEffect) { + + textEffectSettings.mode = settings.readNumEntry("/textEffectMode", 0) ? TextEffect_Everywhere : TextEffect_OnlyButton; + textEffectSettings.color = settings.readEntry("/textEffectColor", Qt::white.name()); + textEffectSettings.opacity = settings.readNumEntry("/textEffectOpacity", 60)*255/100; + textEffectSettings.buttonColor = settings.readEntry("/textEffectButtonColor", Qt::white.name()); + textEffectSettings.buttonOpacity = settings.readNumEntry("/textEffectButtonOpacity", 60)*255/100; + int textEffectPos = settings.readNumEntry("/textEffectPos", 5); + switch(textEffectPos) { + case 0: + textEffectSettings.pos = QPoint(-1,-1); + break; + case 1: + textEffectSettings.pos = QPoint(0,-1); + break; + case 2: + textEffectSettings.pos = QPoint(1,-1); + break; + case 3: + textEffectSettings.pos = QPoint(1,0); + break; + case 4: + textEffectSettings.pos = QPoint(1,1); + break; + case 5: + textEffectSettings.pos = QPoint(0,1); + break; + case 6: + textEffectSettings.pos = QPoint(-1,1); + break; + case 7: + textEffectSettings.pos = QPoint(-1,0); + break; + default: + textEffectSettings.pos = QPoint(0,1); + } + + int textEffectButtonPos = settings.readNumEntry("/textEffectButtonPos", 5); + switch(textEffectButtonPos) { + case 0: + textEffectSettings.buttonPos = QPoint(-1,-1); + break; + case 1: + textEffectSettings.buttonPos = QPoint(0,-1); + break; + case 2: + textEffectSettings.buttonPos = QPoint(1,-1); + break; + case 3: + textEffectSettings.buttonPos = QPoint(1,0); + break; + case 4: + textEffectSettings.buttonPos = QPoint(1,1); + break; + case 5: + textEffectSettings.buttonPos = QPoint(0,1); + break; + case 6: + textEffectSettings.buttonPos = QPoint(-1,1); + break; + case 7: + textEffectSettings.buttonPos = QPoint(-1,0); + break; + default: + textEffectSettings.buttonPos = QPoint(0,1); + } + } + else + textEffectSettings.mode = TextEffect_None; + + btnSurface.numGradients = settings.readNumEntry("/btnSurface_numGradients", 2); + btnSurface.g1Color1 = settings.readEntry("/btnSurface_g1Color1", buttonColor.name()); + btnSurface.g1Color2 = settings.readEntry("/btnSurface_g1Color2", buttonColor.dark(120).name()); + btnSurface.g2Color1 = settings.readEntry("/btnSurface_g2Color1", buttonColor.dark(120).name()); + btnSurface.g2Color2 = settings.readEntry("/btnSurface_g2Color2", buttonColor.dark(110).name()); + btnSurface.background = settings.readEntry("/btnSurface_background", buttonColor.name()); + btnSurface.g1Top = settings.readNumEntry("/btnSurface_g1Top", 0); + btnSurface.g1Bottom = settings.readNumEntry("/btnSurface_g1Bottom", 50); + btnSurface.g2Top = settings.readNumEntry("/btnSurface_g2Top", 50); + btnSurface.g2Bottom = settings.readNumEntry("/btnSurface_g2Bottom", 100); + + activeTabTopSurface.numGradients = settings.readNumEntry("/activeTabTopSurface_numGradients", 2); + activeTabTopSurface.g1Color1 = settings.readEntry("/activeTabTopSurface_g1Color1", background.light(110).name()); + activeTabTopSurface.g1Color2 = settings.readEntry("/activeTabTopSurface_g1Color2", background.name()); + activeTabTopSurface.g2Color1 = settings.readEntry("/activeTabTopSurface_g2Color1", background.name()); + activeTabTopSurface.g2Color2 = settings.readEntry("/activeTabTopSurface_g2Color2", background.name()); + activeTabTopSurface.background = settings.readEntry("/activeTabTopSurface_background", background.name()); + activeTabTopSurface.g1Top = settings.readNumEntry("/activeTabTopSurface_g1Top", 0); + activeTabTopSurface.g1Bottom = settings.readNumEntry("/activeTabTopSurface_g1Bottom", 50); + activeTabTopSurface.g2Top = settings.readNumEntry("/activeTabTopSurface_g2Top", 50); + activeTabTopSurface.g2Bottom = settings.readNumEntry("/activeTabTopSurface_g2Bottom", 100); + + tabTopSurface.numGradients = settings.readNumEntry("/tabTopSurface_numGradients", 2); + tabTopSurface.g1Color1 = settings.readEntry("/tabTopSurface_g1Color1", background.light(110).name()); + tabTopSurface.g1Color2 = settings.readEntry("/tabTopSurface_g1Color2", background.dark(110).name()); + tabTopSurface.g2Color1 = settings.readEntry("/tabTopSurface_g2Color1", background.dark(110).name()); + tabTopSurface.g2Color2 = settings.readEntry("/tabTopSurface_g2Color2", background.dark(110).name()); + tabTopSurface.background = settings.readEntry("/tabTopSurface_background", background.dark(110).name()); + tabTopSurface.g1Top = settings.readNumEntry("/tabTopSurface_g1Top", 0); + tabTopSurface.g1Bottom = settings.readNumEntry("/tabTopSurface_g1Bottom", 50); + tabTopSurface.g2Top = settings.readNumEntry("/tabTopSurface_g2Top", 50); + tabTopSurface.g2Bottom = settings.readNumEntry("/tabTopSurface_g2Bottom", 100); + + activeTabBottomSurface.numGradients = settings.readNumEntry("/activeTabBottomSurface_numGradients", 2); + activeTabBottomSurface.g1Color1 = settings.readEntry("/activeTabBottomSurface_g1Color1", background.name()); + activeTabBottomSurface.g1Color2 = settings.readEntry("/activeTabBottomSurface_g1Color2", background.name()); + activeTabBottomSurface.g2Color1 = settings.readEntry("/activeTabBottomSurface_g2Color1", background.name()); + activeTabBottomSurface.g2Color2 = settings.readEntry("/activeTabBottomSurface_g2Color2", background.dark(120).name()); + activeTabBottomSurface.background = settings.readEntry("/activeTabBottomSurface_background", background.name()); + activeTabBottomSurface.g1Top = settings.readNumEntry("/activeTabBottomSurface_g1Top", 0); + activeTabBottomSurface.g1Bottom = settings.readNumEntry("/activeTabBottomSurface_g1Bottom", 50); + activeTabBottomSurface.g2Top = settings.readNumEntry("/activeTabBottomSurface_g2Top", 50); + activeTabBottomSurface.g2Bottom = settings.readNumEntry("/activeTabBottomSurface_g2Bottom", 100); + + tabBottomSurface.numGradients = settings.readNumEntry("/tabBottomSurface_numGradients", 2); + tabBottomSurface.g1Color1 = settings.readEntry("/tabBottomSurface_g1Color1", background.dark(110).name()); + tabBottomSurface.g1Color2 = settings.readEntry("/tabBottomSurface_g1Color2", background.dark(110).name()); + tabBottomSurface.g2Color1 = settings.readEntry("/tabBottomSurface_g2Color1", background.dark(110).name()); + tabBottomSurface.g2Color2 = settings.readEntry("/tabBottomSurface_g2Color2", background.dark(120).name()); + tabBottomSurface.background = settings.readEntry("/tabBottomSurface_background", background.dark(110).name()); + tabBottomSurface.g1Top = settings.readNumEntry("/tabBottomSurface_g1Top", 0); + tabBottomSurface.g1Bottom = settings.readNumEntry("/tabBottomSurface_g1Bottom", 50); + tabBottomSurface.g2Top = settings.readNumEntry("/tabBottomSurface_g2Top", 50); + tabBottomSurface.g2Bottom = settings.readNumEntry("/tabBottomSurface_g2Bottom", 100); + + scrollBarSurface.numGradients = settings.readNumEntry("/scrollBarSurface_numGradients", 2); + scrollBarSurface.g1Color1 = settings.readEntry("/scrollBarSurface_g1Color1", buttonColor.name()); + scrollBarSurface.g1Color2 = settings.readEntry("/scrollBarSurface_g1Color2", buttonColor.dark(120).name()); + scrollBarSurface.g2Color1 = settings.readEntry("/scrollBarSurface_g2Color1", buttonColor.dark(120).name()); + scrollBarSurface.g2Color2 = settings.readEntry("/scrollBarSurface_g2Color2", buttonColor.dark(110).name()); + scrollBarSurface.background = settings.readEntry("/scrollBarSurface_background", buttonColor.name()); + scrollBarSurface.g1Top = settings.readNumEntry("/scrollBarSurface_g1Top", 0); + scrollBarSurface.g1Bottom = settings.readNumEntry("/scrollBarSurface_g1Bottom", 50); + scrollBarSurface.g2Top = settings.readNumEntry("/scrollBarSurface_g2Top", 50); + scrollBarSurface.g2Bottom = settings.readNumEntry("/scrollBarSurface_g2Bottom", 100); + + scrollBarGrooveSurface.numGradients = settings.readNumEntry("/scrollBarGrooveSurface_numGradients", 0); + scrollBarGrooveSurface.g1Color1 = settings.readEntry("/scrollBarGrooveSurface_g1Color1", background.name()); + scrollBarGrooveSurface.g1Color2 = settings.readEntry("/scrollBarGrooveSurface_g1Color2", background.dark(120).name()); + scrollBarGrooveSurface.g2Color1 = settings.readEntry("/scrollBarGrooveSurface_g2Color1", background.dark(120).name()); + scrollBarGrooveSurface.g2Color2 = settings.readEntry("/scrollBarGrooveSurface_g2Color2", background.dark(110).name()); + scrollBarGrooveSurface.background = settings.readEntry("/scrollBarGrooveSurface_background", background.dark(150).name()); + scrollBarGrooveSurface.g1Top = settings.readNumEntry("/scrollBarGrooveSurface_g1Top", 0); + scrollBarGrooveSurface.g1Bottom = settings.readNumEntry("/scrollBarGrooveSurface_g1Bottom", 50); + scrollBarGrooveSurface.g2Top = settings.readNumEntry("/scrollBarGrooveSurface_g2Top", 50); + scrollBarGrooveSurface.g2Bottom = settings.readNumEntry("/scrollBarGrooveSurface_g2Bottom", 100); + + headerSurface.numGradients = settings.readNumEntry("/headerSurface_numGradients", 2); + headerSurface.g1Color1 = settings.readEntry("/headerSurface_g1Color1", background.name()); + headerSurface.g1Color2 = settings.readEntry("/headerSurface_g1Color2", background.dark(120).name()); + headerSurface.g2Color1 = settings.readEntry("/headerSurface_g2Color1", background.dark(120).name()); + headerSurface.g2Color2 = settings.readEntry("/headerSurface_g2Color2", background.dark(110).name()); + headerSurface.background = settings.readEntry("/headerSurface_background", background.name()); + headerSurface.g1Top = settings.readNumEntry("/headerSurface_g1Top", 0); + headerSurface.g1Bottom = settings.readNumEntry("/headerSurface_g1Bottom", 50); + headerSurface.g2Top = settings.readNumEntry("/headerSurface_g2Top", 50); + headerSurface.g2Bottom = settings.readNumEntry("/headerSurface_g2Bottom", 100); + + // checkBoxes + radioButtons + checkItemSurface.numGradients = settings.readNumEntry("/checkItemSurface_numGradients", 2); + checkItemSurface.g1Color1 = settings.readEntry("/checkItemSurface_g1Color1", buttonColor.name()); + checkItemSurface.g1Color2 = settings.readEntry("/checkItemSurface_g1Color2", buttonColor.dark(120).name()); + checkItemSurface.g2Color1 = settings.readEntry("/checkItemSurface_g2Color1", buttonColor.dark(120).name()); + checkItemSurface.g2Color2 = settings.readEntry("/checkItemSurface_g2Color2", buttonColor.dark(110).name()); + checkItemSurface.background = settings.readEntry("/checkItemSurface_background", buttonColor.name()); + checkItemSurface.g1Top = settings.readNumEntry("/checkItemSurface_g1Top", 0); + checkItemSurface.g1Bottom = settings.readNumEntry("/checkItemSurface_g1Bottom", 50); + checkItemSurface.g2Top = settings.readNumEntry("/checkItemSurface_g2Top", 50); + checkItemSurface.g2Bottom = settings.readNumEntry("/checkItemSurface_g2Bottom", 100); + + settings.endGroup(); + + if(!strcmp(qApp->argv()[0], "konqueror")) { + KGlobal::config()->setGroup("General"); + minTabLength = KGlobal::config()->readNumEntry("MinimumTabLength", 3); + } + else + minTabLength = 0; + + if(!strcmp(qApp->className(), "KApplication")) { + QString oldgroup = KGlobal::config()->group(); + KGlobal::config()->setGroup("KDE"); + macStyleBar = KGlobal::config()->readBoolEntry("macStyle", false); + KGlobal::config()->setGroup(oldgroup); // reset the group, do not interfere with the application + KApplicationMode = true; + } + else { + macStyleBar = false; + KApplicationMode = false; + } + + + hoverWidget = 0; + horizontalLine = 0; + verticalLine = 0; + sideRepaint = 0; + hoveredToolBoxTab = 0; + + checkMark = createCheckMark(_customCheckMarkColor? _checkMarkColor : qApp->palette().active().foreground()); + radioIndicator = createRadioIndicator(_customCheckMarkColor? _checkMarkColor : qApp->palette().active().foreground()); + + popupFrame = new QPixmap(tintImage(qembed_findImage("popup5"), _popupMenuColor.dark(150) )); + + // setup pixmap cache... + pixmapCache = new QIntCache<CacheEntry>(150000, 499); + pixmapCache->setAutoDelete(true); + + if ( _animateProgressBar ) + { + animationTimer = new QTimer( this ); + connect( animationTimer, SIGNAL(timeout()), this, SLOT(updateProgressPos()) ); + } + + scrollDistance = 0; + scrollWidget = 0; + scrollTimer = new QTimer(this); + connect( scrollTimer, SIGNAL(timeout()), this, SLOT(updateScrollPos()) ); + + QColor tabContour2 = qApp->palette().active().background().dark(150); + border1= new QPixmap(tintImage(qembed_findImage("border1"), tabContour2)); +} + +void DominoStyle::updateProgressPos() +{ + + QProgressBar* pb; + //Update the registered progressbars. + QMap<QWidget*, int>::iterator iter; + bool visible = false; + for (iter = progAnimWidgets.begin(); iter != progAnimWidgets.end(); iter++) + { + if ( !dynamic_cast<QProgressBar*>(iter.key()) ) + continue; + + pb = dynamic_cast<QProgressBar*>(iter.key()); + if ( iter.key() -> isEnabled() && + pb->progress() != pb->totalSteps() && pb->progress()) + { + // update animation Offset of the current Widget + iter.data() = (iter.data() + 1) % 20; + iter.key()->update(); + } + if (iter.key()->isVisible()) + visible = true; + } + if (!visible) + animationTimer->stop(); +} + +void DominoStyle::updateScrollPos() +{ + if(dynamic_cast<QScrollView*>(scrollWidget) && scrollDistance != 0) { + int scroll; + if(scrollDistance < 0) { + if(scrollDistance < -200) + scroll = +45; + else if(scrollDistance < -100) + scroll = +30; + else + scroll = +15; + + scrollDistance += scroll; + scrollDistance = QMIN(scrollDistance, 0); + } + else { + if(scrollDistance > 200) + scroll = -45; + else if(scrollDistance > 100) + scroll = -30; + else + scroll = -15; + + scrollDistance += scroll; + scrollDistance = QMAX(scrollDistance, 0); + } + + if(scrollVertical) + scrollWidget->scrollBy(0, scroll); + else + scrollWidget->scrollBy(scroll, 0); + } + else if(scrollTimer->isActive()) { + scrollTimer->stop(); + } +} + + +DominoStyle::~DominoStyle() +{ + delete pixmapCache; + delete horizontalLine; + delete verticalLine; + + delete checkMark; + delete radioIndicator; + delete border1; + delete popupFrame; + + delete buttonContour; +} + +void DominoStyle::polish(QApplication* app) +{ + if(!qstrcmp(app->name(), "konsole")) + konsoleMode = true; + else if(!qstrcmp(app->name(), "konqueror")) + konquerorMode = true; + else if(!qstrcmp(app->name(), "kicker")) + kickerMode = true; + + QPixmapCache::clear(); +} + +void DominoStyle::polish(QPalette &p) { + + p.setBrush(QColorGroup::Button, p.active().background()); + + if(!_customPopupMenuColor) + _popupMenuColor = qApp->palette().active().background(); + if(!_customSelMenuItemColor) + _selMenuItemColor = qApp->palette().active().highlight(); + + QColor tabContour2 = qApp->palette().active().background().dark(150); + delete border1; + border1= new QPixmap(tintImage(qembed_findImage("border1"), tabContour2)); + delete popupFrame; + popupFrame = new QPixmap(tintImage(qembed_findImage("popup5"), _popupMenuColor.dark(150))); + if(!_customCheckMarkColor) { + delete checkMark; + checkMark = createCheckMark(qApp->palette().active().foreground()); + delete radioIndicator; + radioIndicator = createRadioIndicator(qApp->palette().active().foreground()); + } +} + +void DominoStyle::polish(QWidget* widget) +{ + + if(!strcmp(widget->name(), "__khtml")) { // is it a khtml widget...? + khtmlWidgets[widget] = true; + connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(khtmlWidgetDestroyed(QObject*))); + } + else if((!strcmp(widget->name(), "kfile button") || (widget->isA("KLineEdit") && widget->parentWidget())) && !strcmp(widget->parentWidget()->name(), "__khtml")) { + widget->setBackgroundMode(Qt::NoBackground); + widget->parentWidget()->setBackgroundMode(Qt::NoBackground); + khtmlWidgets[widget] = true; + connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(khtmlWidgetDestroyed(QObject*))); + } + + if(dynamic_cast<QPushButton*>(widget)) { + + setDominoButtonPalette(widget, Palette_Widget); + + if (widget->isA("KDockButton_Private")) + widget->setFixedSize(13, 13); // 12x12 pixmap + 1px top and right spacing + else { + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + if(widget->parentWidget() && widget->parentWidget()->paletteBackgroundPixmap() && !khtmlWidgets.contains(widget)) { + widget->setBackgroundMode(Qt::PaletteButton); + widget->setBackgroundPixmap(*widget->parentWidget()->paletteBackgroundPixmap()); + widget->setBackgroundOrigin(setPixmapOrigin(widget->parentWidget()->backgroundOrigin())); + } + } + + widget->installEventFilter(this); + } + else if(dynamic_cast<QCheckBox*>(widget)) { + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + widget->installEventFilter(this); + } + else if(dynamic_cast<KToolBarButton*>(widget)) { + KToolBarButton* tb = static_cast<KToolBarButton*>(widget); + //setDominoButtonPalette(widget); // ### changing the palette breaks them! + + if(tb->popupDelay() < 1) + tb->setPopupDelay(5); // now we have time to draw a pressed button + widget->installEventFilter(this); + } + else if(dynamic_cast<QToolButton*>(widget)) { + QToolButton* tb = static_cast<QToolButton*>(widget); + tb->setBackgroundMode(Qt::PaletteBackground); + tb->setPaletteForegroundColor(tb->palette().active().buttonText()); + setDominoButtonPalette(widget, Palette_Widget); + + if(tb->popupDelay() < 1) { + disconnect(tb, SIGNAL(pressed()), tb, SLOT(popupPressed())); + connect(tb, SIGNAL(pressed()), this, SLOT(toolPopupPressed())); + connect(tb, SIGNAL(released()), this, SLOT(toolPopupReleased())); + } + + if(tb->popupDelay() < 1) + tb->setPopupDelay(5); + + if(tb->parentWidget() && tb->parentWidget()->paletteBackgroundPixmap()) { + tb->setPaletteBackgroundPixmap(*tb->parentWidget()->paletteBackgroundPixmap()); + tb->setBackgroundOrigin(setPixmapOrigin(tb->parentWidget()->backgroundOrigin())); + } + +// if(widget->isA("TaskContainer")) +// ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); +// else + widget->installEventFilter(this); + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + } + else if(dynamic_cast<QRadioButton*>(widget)) { + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + widget->installEventFilter(this); + } + else if(dynamic_cast<QComboBox*>(widget)) { + QComboBox* cb = static_cast<QComboBox*>(widget); + + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + if(widget->parentWidget() && widget->parentWidget()->paletteBackgroundPixmap() && !khtmlWidgets.contains(widget)) { + widget->setBackgroundMode(Qt::PaletteButton); + widget->setBackgroundOrigin(setPixmapOrigin(widget->parentWidget()->backgroundOrigin())); + } + + setDominoButtonPalette(widget, Palette_Widget); + if(cb->listBox()) + cb->listBox()->setFrameStyle(QFrame::Panel|QFrame::Sunken); + widget->installEventFilter(this); + } + else if(dynamic_cast<QGroupBox*>(widget)) { + QGroupBox* gb = dynamic_cast<QGroupBox*>(widget); + gb->setAlignment(Qt::AlignHCenter); + + if(!gb->isFlat() && !gb->lineWidth() <= 0) { + if(gb->layout() && gb->layout()->margin() < 7) + gb->layout()->setMargin(7); + bool groupBoxFrame = gb->frameShape() == QFrame::GroupBoxPanel; + if(groupBoxFrame) + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + + if(groupBoxSettings.tintBackground && groupBoxFrame) { + QColor color = getGroupBoxColor(gb); + QPalette pal(widget->palette()); + int h, s, v; + pal.active().foreground().hsv(&h, &s, &v); + pal.setColor(QPalette::Active, QColorGroup::Background, color); + pal.setColor(QPalette::Inactive, QColorGroup::Background, color); + pal.setColor(QPalette::Disabled, QColorGroup::Background, color); + pal.setColor(QPalette::Disabled, QColorGroup::Text, alphaBlendColors(pal.active().foreground(), color, 40)); + gb->setPalette(pal); + + if(gb->isCheckable()) { + ((QCheckBox*)gb->child("qt_groupbox_checkbox", 0, false))->setPaletteBackgroundColor(gb->parentWidget()->paletteBackgroundColor()); + } + } + connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(groupBoxDestroyed(QObject*))); + } + widget->installEventFilter(this); + } + else if(dynamic_cast<QSpinWidget*>(widget)) { + // Don't like this widget... too much private stuff and the spinBox/spinWidget mess. + // We check here if the spinBox has a backgroundPixmap. If it's a spinWidget without a spinBox, well, maybe we should fill the widget black then >:) + if(widget->parentWidget() && widget->parentWidget()->parentWidget() && widget->parentWidget()->parentWidget()->paletteBackgroundPixmap()) { + QWidget::BackgroundOrigin origin = widget->parentWidget()->backgroundOrigin(); + if(origin == QWidget::WidgetOrigin) { + widget->parentWidget()->setBackgroundOrigin(QWidget::ParentOrigin); + widget->setBackgroundOrigin(QWidget::AncestorOrigin); + } + else + widget->setBackgroundOrigin(setPixmapOrigin(origin)); + } + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + setDominoButtonPalette(widget, Palette_Widget); + widget->installEventFilter(this); + } + else if(dynamic_cast<QSpinBox*>(widget)) { + connect(dynamic_cast<QSpinBox*>(widget), SIGNAL(valueChanged(int)), this, SLOT(spinBoxValueChanged(int))); + } + else if(dynamic_cast<QLineEdit*>(widget)) { + QLineEdit* le = dynamic_cast<QLineEdit*>(widget); + QRect r = le->rect(); + le->setFrameRect(QRect(r.x()+1, r.y(), r.width()-1, r.height())); + widget->installEventFilter(this); + } + else if(dynamic_cast<QScrollBar*>(widget)) { + widget->installEventFilter(this); + } + else if(dynamic_cast<QStatusBar*>(widget)) { + widget->installEventFilter(this); + } + else if(dynamic_cast<QHeader*>(widget)) { + setDominoButtonPalette(widget, Palette_Widget); + widget->installEventFilter(this); + } + else if(dynamic_cast<QPopupMenu*>(widget)) { + + if(widget->isA("PanelKMenu")) + widget->setPaletteForegroundColor(alphaBlendColors(_popupMenuColor, qApp->palette().active().foreground(), 150)); + + widget->setBackgroundMode( NoBackground ); + widget->installEventFilter(this); + } + else if(dynamic_cast<QTabWidget*>(widget)) { + widget->installEventFilter(this); + } + else if(dynamic_cast<QTabBar*>(widget)) { + QTabBar* tb = dynamic_cast<QTabBar*>(widget); + if(widget->parentWidget() && widget->parentWidget()->isA("KonqFrameTabs")) { + tb->setShape(QTabBar::RoundedBelow); + widget->setEraseColor(widget->paletteBackgroundColor().dark(konqTabBarContrast)); + } + connect(tb, SIGNAL(layoutChanged()), this, SLOT(updateTabWidgetFrame())); + connect(tb, SIGNAL(selected(int)), this, SLOT(updateTabWidgetFrame())); + setDominoButtonPalette(widget, Palette_Widget); + widget->installEventFilter(this); + } + else if(dynamic_cast<QIconView*>(widget)) { + ((DominoQWidget*)dynamic_cast<QIconView*>(widget)->viewport())->setWFlags(Qt::WNoAutoErase); + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + dynamic_cast<QIconView*>(widget)->viewport()->installEventFilter(this); // rubberband + if(strcmp(widget->className(), "KDIconView")) + widget->installEventFilter(this); + } + else if(dynamic_cast<QListView*>(widget)) { + dynamic_cast<QListView*>(widget)->viewport()->installEventFilter(this); // rubberband + if(widget->isA("KonqTreeViewWidget")) { // konqi frames + QFrame* f = dynamic_cast<QFrame*>(widget); + f->setFrameStyle(QFrame::Box|QFrame::Plain); + f->setLineWidth(1); + } + + if(!widget->isA("KopeteContactListView") && !widget->isA("ViewTree")) // they have their own mousewheel handling + widget->installEventFilter(this); + } + else if(widget->isA("KActiveLabel")) { // before QScrollView + if(dynamic_cast<QGroupBox*>(widget->parentWidget())) + widget->setPaletteBackgroundColor(widget->parentWidget()->paletteBackgroundColor()); + } + else if(dynamic_cast<QTextEdit*>(widget)) { + dynamic_cast<QTextEdit*>(widget)->viewport()->installEventFilter(this); + widget->installEventFilter(this); + } + else if(dynamic_cast<QScrollView*>(widget)) { + QFrame* f = dynamic_cast<QFrame*>(widget); + if((konquerorMode && widget->isA("KHTMLView")) || f->parentWidget() && !strcmp(f->parentWidget()->name(), "KonqFrame")) { // konqi frames + f->setFrameStyle(QFrame::Box|QFrame::Plain); + f->setLineWidth(1); + widget->installEventFilter(this); + } + else if(_smoothScrolling && !widget->isA("TaskBar") && !widget->isA("Gwenview::ImageView")) + widget->installEventFilter(this); + } + else if(dynamic_cast<QSlider*>(widget)) { + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + } + else if(dynamic_cast<QListBox*>(widget)) { + widget->installEventFilter(this); + } + else if(dynamic_cast<KToolBarSeparator*>(widget) || dynamic_cast<QToolBar*>(widget)) { + widget->setBackgroundMode(Qt::PaletteBackground); + } + + else if(widget->isA("KonqCheckBox")) { + widget->installEventFilter(this); + } + else if(widget->isA("QTipLabel")) { + widget->installEventFilter(this); + } + else if(widget->isA("QWhatsThat")) { + widget->installEventFilter(this); + } + else if(widget->isA("KonqFileTip")) { + widget->installEventFilter(this); + } + + else if(dynamic_cast<QButton*>(widget) && widget->parentWidget() && widget->parentWidget()->isA("QToolBox")) { + widget->installEventFilter(this); + } + else if( dynamic_cast<QProgressBar*>(widget) && _animateProgressBar) + { + setDominoButtonPalette(widget, Palette_Widget); + + progAnimWidgets[widget] = 0; + connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(progressBarDestroyed(QObject*))); +// if (!animationTimer->isActive()) +// animationTimer->start( 50, false ); + widget->installEventFilter(this); + } + else if(dynamic_cast<KPopupTitle*>(widget)) { + widget->installEventFilter(this); + } + else if(dynamic_cast<QFrame*>(widget)) { + QFrame* f = dynamic_cast<QFrame*>(widget); + + switch (f->frameShape()) { + case QFrame::Box: + f->setFrameStyle(QFrame::StyledPanel|QFrame::Sunken); + f->setLineWidth(2); + break; + case QFrame::Panel: + if(kickerMode && f->parentWidget() && f->parentWidget()->isA("ClockApplet")) { + f->setLineWidth(0); + break; + } + case QFrame::WinPanel: + f->setLineWidth(1); + widget->installEventFilter(this); + break; + case QFrame::LineEditPanel: { + widget->installEventFilter(this); + break; + } + case QFrame::TabWidgetPanel: + if(dynamic_cast<QWidgetStack*>(widget)) { + if(f->parentWidget() && f->parentWidget()->isA("KonqFrameTabs")) + break; + + f->setLineWidth(4); + f->setFrameRect(QRect(0, 0, f->width(), f->height()-1)); + f->setMargin(0); + + QWidget* w = widget->parentWidget(); + for(int i=0; i<3; i++) { // the third parentcheck is for the tabWidget on kcm khtml_plugins + if(!w) break; + if(dynamic_cast<QGroupBox*>(w)) { + widget->setPaletteBackgroundColor(qApp->palette().active().background()); + break; + } + w = w->parentWidget(); + } + + if(dynamic_cast<QWidgetStack*>(widget)->widget(0)) // only if it has contents + ((DominoQWidget*)widget)->setWFlags(Qt::WNoAutoErase); + } + case QFrame::HLine: + case QFrame::VLine: { + widget->installEventFilter(this); + break; + } + case QFrame::StyledPanel: + if(dynamic_cast<QDockWindow*>(widget)) { + widget->installEventFilter(this); + } + else if(widget->isA("QWorkspaceChild")) { + f->setFrameStyle(QFrame::Panel|QFrame::Sunken); + f->setLineWidth(1); + widget->installEventFilter(this); + } + else if(widget->isA("KAnimWidget")) + f->setLineWidth(0); + + default: + break; + } + } +// else if (dynamic_cast<KDockSplitter*>(widget)) { +// widget->installEventFilter(this); +// } else if (dynamic_cast<KDockWidgetAbstractHeaderDrag*>(widget)) { +// widget->installEventFilter(this); + else if(widget->isA("QDateTimeEditor")) { + widget->installEventFilter(this); + } + else if(widget->inherits("QDockWindowHandle") || widget->isA("QDockWindowResizeHandle") || + widget->isA("AppletHandleDrag")) { // !qstrcmp(widget->name(), "qt_dockwidget_internal") + widget->installEventFilter(this); + } + else if(widget->isA("KDockWidget") && widget->parentWidget() && widget->parentWidget()->parentWidget() + && widget->parentWidget()->parentWidget()->isA("Sidebar_Widget")) { + widget->setEraseColor(widget->palette().active().base()); + } + +// widget->installEventFilter(this); + //qDebug("className %s, name: %s", widget->className(), widget->name()); + +} + +void DominoStyle::unPolish(QWidget* widget) +{ + + if( !strcmp(widget->name(), "__khtml") || (!strcmp(widget->name(), "kfile button") && !strcmp(widget->parentWidget()->name(), "__khtml"))) { // is it a khtml widget...? + khtmlWidgets.remove(widget); + } + + if (dynamic_cast<QPushButton*>(widget) || + dynamic_cast<QSpinWidget*>(widget) || dynamic_cast<QSlider*>(widget) || + dynamic_cast<QRadioButton*>(widget) || + dynamic_cast<QListBox*>(widget) || dynamic_cast<QListView*>(widget) || + dynamic_cast<QStatusBar*>(widget) || widget->isA("AppletHandleDrag") || + widget->isA("QDockWindowHandle")) + { + ((DominoQWidget*)widget)->clearWFlags(Qt::WNoAutoErase); + widget->removeEventFilter(this); + } + else if(widget->isA("KonqCheckBox") || widget->isA("QWhatsThat") || widget->isA("QTipLabel")) { + widget->removeEventFilter(this); + widget->setPaletteBackgroundColor(qApp->palette().active().background()); + widget->setBackgroundMode(Qt::PaletteBackground); + } + else if(dynamic_cast<QTabWidget*>(widget) || dynamic_cast<QTabBar*>(widget)) { + widget->removeEventFilter(this); + widget->setBackgroundMode(Qt::PaletteBackground); + } + else if(dynamic_cast<QCheckBox*>(widget)) { + ((DominoQWidget*)widget)->clearWFlags(Qt::WNoAutoErase); + widget->removeEventFilter(this); + } + else if(dynamic_cast<QComboBox*>(widget)) { // after KonqCheckBox + ((DominoQWidget*)widget)->clearWFlags(Qt::WNoAutoErase); + widget->removeEventFilter(this); + } + else if(dynamic_cast<QHeader*>(widget)) { + widget->removeEventFilter(this); + widget->setBackgroundMode(Qt::PaletteButton); + } + else if(dynamic_cast<QPopupMenu*>(widget)) { + widget->removeEventFilter(this); + widget->setBackgroundMode(Qt::PaletteBackground); + static_cast<QFrame*>(widget)->setLineWidth(2); + widget->clearMask(); + } + else if(dynamic_cast<KToolBarButton*>(widget)) { + widget->removeEventFilter(this); + widget->setBackgroundMode(Qt::PaletteBackground); + } + else if(dynamic_cast<QGroupBox*>(widget)) { + widget->removeEventFilter(this); + ((DominoQWidget*)widget)->clearWFlags(Qt::WNoAutoErase); + QGroupBox* gb = dynamic_cast<QGroupBox*>(widget); + gb->setBackgroundMode(Qt::PaletteBackground); + gb->setPalette(qApp->palette()); + gb->setAlignment(Qt::AlignLeft|Qt::AlignBottom); + } + else if(dynamic_cast<QLineEdit*>(widget)) { + widget->removeEventFilter(this); + widget->setBackgroundMode(Qt::PaletteBase); + QLineEdit* le = dynamic_cast<QLineEdit*>(widget); + QRect r = le->rect(); + le->setFrameRect(QRect(r.x()-1, r.y(), r.width()+1, r.height())); + widget->clearMask(); + } + else if(dynamic_cast<QProgressBar*>(widget) ) { + progAnimWidgets.remove(widget); + } + else if(dynamic_cast<KToolBarSeparator*>(widget) || dynamic_cast<QToolBar*>(widget) ) { + widget->removeEventFilter(this); + widget->setBackgroundMode(Qt::PaletteButton); + } + if(widget->isA("KonqFileTip")) { + widget->removeEventFilter(this); + widget->setPaletteBackgroundColor(widget->palette().active().background()); + QFrame* f = dynamic_cast<QFrame*>(widget); + f->setMargin(1); + f->setFrameStyle(QFrame::Plain|QFrame::Box); + + QObjectList *list = const_cast<QObjectList *>(widget->children()); + QObjectListIt it( *list ); + QObject * o; + while ( (o = it.current()) != 0 ) { + ++it; + if(dynamic_cast<QLabel*>(o)) { + QLabel* l = dynamic_cast<QLabel*>(o); + l->setBackgroundOrigin(QWidget::WidgetOrigin); + l->setBackgroundMode(Qt::PaletteBackground); + l->setPaletteBackgroundColor(l->palette().active().background()); + } + } + } + else if(dynamic_cast<QScrollView*>(widget)) { + QFrame* f = dynamic_cast<QFrame*>(widget); + if((konquerorMode && widget->isA("KHTMLView")) || f->parentWidget() && !strcmp(f->parentWidget()->name(), "KonqFrame")) { // konqi frames + widget->removeEventFilter(this); + f->setFrameStyle(QFrame::NoFrame|QFrame::Plain); + f->setLineWidth(0); + } + } + else if(dynamic_cast<KPopupTitle*>(widget)) { + widget->removeEventFilter(this); + } + else if(dynamic_cast<QFrame*>(widget)) { + widget->removeEventFilter(this); + QFrame* f = dynamic_cast<QFrame*>(widget); + switch(f->frameShape()) { + case QFrame::Panel: + if(widget->isA("QWorkspaceChild")) { + f->setFrameStyle(QFrame::StyledPanel|QFrame::Sunken); + f->setLineWidth(2); + } + break; + case QFrame::WinPanel: + f->setLineWidth(2); + break; + case QFrame::TabWidgetPanel: + f->setLineWidth(2); + f->setMargin(2); + f->setFrameRect(QRect(0, 0, 0, 0)); + break; + case QFrame::StyledPanel: + if(widget->isA("KAnimWidget")) + f->setLineWidth(2); + break; + default: + break; + } + } + + + KStyle::unPolish(widget); +} + +void DominoStyle::khtmlWidgetDestroyed(QObject* obj) +{ + khtmlWidgets.remove(static_cast<QWidget*>(obj)); +} + +void DominoStyle::groupBoxDestroyed(QObject* obj) +{ + groupBoxPixmaps.remove(static_cast<QGroupBox*>(obj)); +} + +void DominoStyle::progressBarDestroyed(QObject* obj) +{ + progAnimWidgets.remove(static_cast<QWidget*>(obj)); +} + + +void DominoStyle::renderContour(QPainter *p, const QRect &r, const QColor &backgroundColor, const QColor &contour, const uint flags) const { + + if((r.width() <= 0)||(r.height() <= 0)) + return; + + const bool drawLeft = flags&Draw_Left; + const bool drawRight = flags&Draw_Right; + const bool drawTop = flags&Draw_Top; + const bool drawBottom = flags&Draw_Bottom; +// const bool disabled = flags&Is_Disabled; + const bool alphaBlend = flags&Draw_AlphaBlend; + + const bool roundUpperLeft = flags&Round_UpperLeft; + const bool roundUpperRight = flags&Round_UpperRight; + const bool roundBottomLeft = flags&Round_BottomLeft; + const bool roundBottomRight = flags&Round_BottomRight; + const bool isButton = flags&Is_Button; + const bool isHorizontal = flags&Is_Horizontal; + const bool isScrollBarBtn = flags&Is_ScrollBarBtn; + + QColor appButtonColor = qApp->palette().active().button(); + + if(isButton) { + + QRect sr = QRect(r.x(), r.y()+2, r.width(), r.height()-5); // surface rect + int top = sr.y()+sr.height()*btnSurface.g1Top/100; + int bottom = sr.height()*btnSurface.g1Bottom/100; + int top2 = sr.y()+sr.height()*btnSurface.g2Top/100; + int bottom2 = sr.y()+sr.height()*btnSurface.g2Bottom/100-top2; + + int left = sr.x()+sr.width()*btnSurface.g1Top/100; + int width = sr.width()*btnSurface.g1Bottom/100; + int left2 = sr.x()+sr.width()*btnSurface.g2Top/100; + int width2 = sr.width()*btnSurface.g2Bottom/100-left2; + + // darker surface colors for the inner part of the contour + QColor insideBackground; + QColor gr1TopColor; + QColor gr1BottomColor; + QColor gr2TopColor; + QColor gr2BottomColor; + + const int alphaInside = qAlpha(buttonContour->color3()); + + insideBackground = alphaBlendColors(buttonContour->color3(), + ((contour != appButtonColor) ? alphaBlendColors(contour, btnSurface.background, 127) : btnSurface.background), alphaInside); + + switch (btnSurface.numGradients) { + case 2:{ + + gr1TopColor = alphaBlendColors(buttonContour->color3(), + ((contour != appButtonColor) ? alphaBlendColors(contour, btnSurface.g1Color1, 127) : btnSurface.g1Color1), alphaInside); + + gr1BottomColor = alphaBlendColors(buttonContour->color3(), + ((contour != appButtonColor) ? alphaBlendColors(contour, btnSurface.g1Color2, 127) : btnSurface.g1Color2), alphaInside); + + gr2TopColor = alphaBlendColors(buttonContour->color3(), + ((contour != appButtonColor) ? alphaBlendColors(contour, btnSurface.g2Color1, 127) : btnSurface.g2Color1), alphaInside); + + gr2BottomColor = alphaBlendColors(buttonContour->color3(), + ((contour != appButtonColor) ? alphaBlendColors(contour, btnSurface.g2Color2, 127) : btnSurface.g2Color2), alphaInside); + + break; + } + case 1: { + gr1TopColor = alphaBlendColors(buttonContour->color3(), + ((contour != appButtonColor) ? alphaBlendColors(contour, btnSurface.g1Color1, 127) : btnSurface.g1Color1), alphaInside); + + gr1BottomColor = alphaBlendColors(buttonContour->color3(), + ((contour != appButtonColor) ? alphaBlendColors(contour, btnSurface.g1Color2, 127) : btnSurface.g1Color2), alphaInside); + break; + } + default: { + insideBackground = insideBackground; + gr1TopColor = insideBackground; + gr1BottomColor = insideBackground; + gr2TopColor = insideBackground; + gr2BottomColor = insideBackground; + break; + } + } + + if(flags & Is_Down) { + gr1TopColor = darkenColor(gr1TopColor, 15); + gr1BottomColor = darkenColor(gr1BottomColor, 15); + gr2TopColor = darkenColor(gr2TopColor, 15); + gr2BottomColor = darkenColor(gr2BottomColor, 15); + insideBackground = darkenColor(insideBackground, 15); + } + + + + QRegion clip; + if(drawTop) + clip += QRegion(r.left()+6, r.top()+2, r.width()-12, 1); + if(drawBottom) + clip += QRegion(r.left()+6, r.bottom()-3, r.width()-12, 1); + if(drawLeft) + clip += QRegion(r.left()+2, r.top()+6, 1, r.height()-13); + if(drawRight) + clip += QRegion(r.right()-2, r.top()+6, 1, r.height()-13); + p->setClipRegion(clip); + + + p->fillRect(sr, insideBackground); + switch(btnSurface.numGradients) { + case 1: + if(isHorizontal) + renderGradient(p, QRect(sr.x(), top, sr.width(), bottom), gr1TopColor, gr1BottomColor, true); + else + renderGradient(p, QRect(left, sr.y(), width, sr.height()), gr1TopColor, gr1BottomColor, false); + break; + case 2: + if(isHorizontal) { + renderGradient(p, QRect(r.x(), top, r.width(), bottom), gr1TopColor, gr1BottomColor, true); + renderGradient(p, QRect(r.x(), top2, r.width(), bottom2), gr2TopColor, gr2BottomColor, true); + } + else { + renderGradient(p, QRect(left, sr.y(), width, sr.height()), gr1TopColor,gr1BottomColor, false); + renderGradient(p, QRect(left2, sr.y(), width2, sr.height()), gr2TopColor,gr2BottomColor, false); + } + default: + break; + } + p->setClipping(false); + + + const QColor color1 = alphaBlendColors(buttonContour->color1(), backgroundColor, qAlpha(buttonContour->color1())); // 1.top + const QColor color4 = alphaBlendColors(buttonContour->color4(), backgroundColor, qAlpha(buttonContour->color4())); // 3.bottom + const QColor color5 = alphaBlendColors(buttonContour->color5(), backgroundColor, qAlpha(buttonContour->color5())); // 4.bottom + const QColor color2 = alphaBlendColors(buttonContour->color2(), backgroundColor, qAlpha(buttonContour->color2())); // 2.top 2.left 2.bottom + const QColor color6 = alphaBlendColors(buttonContour->color6(), backgroundColor, qAlpha(buttonContour->color6())); // 1.left + + + if(roundUpperLeft) + p->drawPixmap(r.left(), r.top(), *buttonContour->buttonEdges(), 0, 0, 6, 6); + + if(roundUpperRight) + p->drawPixmap(r.right()-5, r.top(), *buttonContour->buttonEdges(), 6, 0, 6, 6); + + if(roundBottomLeft) + p->drawPixmap(r.left(), r.bottom()-6, *buttonContour->buttonEdges(), 0, 6, 6, 7); + + if(roundBottomRight) + p->drawPixmap(r.right()-5, r.bottom()-6, *buttonContour->buttonEdges(), 6, 6, 6, 7); + + if(drawTop) { + if(!alphaBlend) { + p->setPen(color1); + p->drawLine(r.left()+6, r.top(), r.right()-6, r.top()); + p->setPen(color2); + p->drawLine(r.left()+6, r.top()+1, r.right()-6, r.top()+1); + } + else { + p->drawTiledPixmap(r.left()+6, r.top(), r.width()-12, 2, *buttonContour->buttonHLines(), 0, 0); + } + } + + if(drawBottom) { + if(!alphaBlend) { + p->setPen(color2); + p->drawLine(r.left()+6, r.bottom()-2, r.right()-6, r.bottom()-2); + p->setPen(color4); + p->drawLine(r.left()+6, r.bottom()-1, r.right()-6, r.bottom()-1); + p->setPen(color5); + p->drawLine(r.left()+6, r.bottom(), r.right()-6, r.bottom()); + } + else { + p->drawTiledPixmap(r.left()+6, r.bottom()-2, r.width()-12, 3, *buttonContour->buttonHLines(), 0, 4); + } + } + + if(drawLeft) { + if(!alphaBlend) { + p->setPen(color6); + p->drawLine(r.left(), r.top()+6, r.left(), r.bottom()-7); + p->setPen(color2); + p->drawLine(r.left()+1, r.top()+6, r.left()+1, r.bottom()-7); + } + else { + p->drawTiledPixmap(r.left(), r.top()+6, 2, r.height()-13, *buttonContour->buttonVLines(), 0, 0); + } + } + + if(drawRight) { + if(!alphaBlend) { + p->setPen(color2); + p->drawLine(r.right()-1, r.top()+6, r.right()-1, r.bottom()-7); + p->setPen(color6); + p->drawLine(r.right(), r.top()+6, r.right(), r.bottom()-7); + } + else { + p->drawTiledPixmap(r.right()-1, r.top()+6, 2, r.height()-13, *buttonContour->buttonVLines(), 4, 0); + } + } + + + + + } + else if(isScrollBarBtn) { + + QColor background; + QColor gr1TopColor; + QColor gr1BottomColor; + QColor gr2TopColor; + QColor gr2BottomColor; + + + if(contour != appButtonColor) { + gr1TopColor = alphaBlendColors(contour, scrollBarSurface.g1Color1, 127); + gr1BottomColor = alphaBlendColors(contour, scrollBarSurface.g1Color2, 127); + gr2TopColor = alphaBlendColors(contour, scrollBarSurface.g2Color1, 127); + gr2BottomColor = alphaBlendColors(contour, scrollBarSurface.g2Color2, 127); + background = alphaBlendColors(contour, scrollBarSurface.background, 127); + } + else { + gr1TopColor = scrollBarSurface.g1Color1; + gr1BottomColor = scrollBarSurface.g1Color2; + gr2TopColor = scrollBarSurface.g2Color1; + gr2BottomColor = scrollBarSurface.g2Color2; + background = scrollBarSurface.background; + } + + QColor btnContour = buttonContour->contourColor(Contour_Default); + QColor whiteColor( qRgba(Qt::white.red(), Qt::white.green(), Qt::white.blue(), 23)); // first white layer + QColor blackColor( qRgba(btnContour.red(), btnContour.green(), btnContour.blue(), 35)); // second contour layer + + + gr1TopColor = blendColors(gr1TopColor, whiteColor); + gr1TopColor = blendColors(gr1TopColor, blackColor); + + gr1BottomColor = blendColors(gr1BottomColor, whiteColor); + gr1BottomColor = blendColors(gr1BottomColor, blackColor); + + gr2TopColor = blendColors(gr2TopColor, whiteColor); + gr2TopColor = blendColors(gr2TopColor, blackColor); + + gr2BottomColor = blendColors(gr2BottomColor, whiteColor); + gr2BottomColor = blendColors(gr2BottomColor, blackColor); + + background = blendColors(background, whiteColor); + background = blendColors(background, blackColor); + + + + + QRegion clip; + if(drawTop) + clip += QRegion(r.left(), r.top()+1, r.width(), 1); + if(drawBottom) + clip += QRegion(r.left(), r.bottom()-1, r.width(), 1); + if(drawLeft) + clip += QRegion(r.left()+1, r.top(), 1, r.height()); + if(drawRight) + clip += QRegion(r.right()-1, r.top(), 1, r.height()); + + p->setClipRegion(clip); + + + QRect sr = r; + int top = sr.y()+sr.height()*scrollBarSurface.g1Top/100; + int bottom = sr.height()*scrollBarSurface.g1Bottom/100; + int top2 = sr.y()+sr.height()*scrollBarSurface.g2Top/100; + int bottom2 = sr.height()*scrollBarSurface.g2Bottom/100-top2; + int left = sr.x()+sr.width()*scrollBarSurface.g1Top/100; + int width = sr.width()*scrollBarSurface.g1Bottom/100; + int left2 = sr.x()+sr.width()*scrollBarSurface.g2Top/100; + int width2 = sr.width()*scrollBarSurface.g2Bottom/100-left2; + + p->fillRect(sr, background); + switch(scrollBarSurface.numGradients) { + case 1: + if(isHorizontal) + renderGradient(p, QRect(sr.x(), top, sr.width(), bottom), gr1TopColor, gr1BottomColor, true); + else + renderGradient(p, QRect(left, sr.y(), width, sr.height()), gr1TopColor, gr1BottomColor, false); + break; + case 2: + if(isHorizontal) { + renderGradient(p, QRect(r.x(), top, r.width(), bottom), gr1TopColor, gr1BottomColor, true); + renderGradient(p, QRect(r.x(), top2, r.width(), bottom2), gr2TopColor, gr2BottomColor, true); + } + else { + renderGradient(p, QRect(left, sr.y(), width, sr.height()), gr1TopColor,gr1BottomColor, false); + renderGradient(p, QRect(left2, sr.y(), width2, sr.height()), gr2TopColor,gr2BottomColor, false); + } + default: + break; + } + p->setClipping(false); + + + + QColor color1 = alphaBlendColors(buttonContour->contourColor(Contour_Default), backgroundColor, 203); // like btn contour + QColor color2 = alphaBlendColors(QColor(255, 255, 255), color1, 25); + + p->setPen(color1); + if(drawTop) { + p->drawLine(r.left(), r.top(), r.right(), r.top()); // top + } + if(drawBottom) { + p->drawLine(r.left(), r.bottom(), r.right(), r.bottom()); // bottom + } + if(drawLeft) { + p->drawLine(r.left(), r.top(), r.left(), r.bottom()); // left + } + if(drawRight) { + p->drawLine(r.right(), r.top(), r.right(), r.bottom()); // right + } + + + color1 = blendColors(color1, whiteColor); + p->setPen(color2); + if(roundUpperLeft) { + renderPixel(p, QPoint(r.x()+1, r.y()+1), 127, color1, color1, true); + p->drawPoint(r.x(), r.y()); + } + if(roundUpperRight) { + renderPixel(p, QPoint(r.right()-1, r.top()+1), 127, color1, color1, true); + p->drawPoint(r.right(), r.y()); + + } + if(roundBottomLeft) { + renderPixel(p, QPoint(r.x()+1, r.bottom()-1), 127, color1, color1, true); + p->drawPoint(r.x(), r.bottom()); + } + if(roundBottomRight) { + renderPixel(p, QPoint(r.right()-1, r.bottom()-1), 127, color1, color1, true); + p->drawPoint(r.right(), r.bottom()); + } + } + return; +} + + +void DominoStyle::renderSurface(QPainter *p, + const QRect &r, + const QColor &backgroundColor, + const QColor &buttonColor, + const QColor &/*highlightColor*/, + const uint flags) const +{ + + if((r.width() <= 0)||(r.height() <= 0)) + return; + + const DSurface* ds = 0; + const bool isButton = flags&Is_Button; + const bool isScrollBarBtn = flags&Is_ScrollBarBtn; + const bool isScrollBarGroove = flags&Is_ScrollBarGroove; + const bool isCheckItem = flags&Is_CheckItem; + const bool isHeader = flags&Is_Header; + const bool isTabTop = flags&Is_TabTop; + const bool isActiveTabTop = flags&Is_ActiveTabTop; + const bool isTabBottom = flags&Is_TabBottom; + const bool isActiveTabBottom = flags&Is_ActiveTabBottom; + const bool horizontal = flags&Is_Horizontal; + const bool isDown = flags&Is_Down; + + if(isButton) + ds = &btnSurface; + else if(isCheckItem) + ds = &checkItemSurface; + else if(isScrollBarBtn) + ds = &scrollBarSurface; + else if(isScrollBarGroove) + ds = &scrollBarGrooveSurface; + else if(isHeader) + ds = &headerSurface; + else if(isTabTop) + ds = &tabTopSurface; + else if(isActiveTabTop) + ds = &activeTabTopSurface; + else if(isTabBottom) + ds = &tabBottomSurface; + else if(isActiveTabBottom) + ds = &activeTabBottomSurface; + + + + + + QColor g1Color1; + QColor g1Color2; + QColor g2Color1; + QColor g2Color2; + QColor background; + + if(buttonColor != qApp->palette().active().button()) { + g2Color1 = alphaBlendColors(buttonColor, ds->g2Color1, 127); + g2Color2 = alphaBlendColors(buttonColor, ds->g2Color2, 127); + g1Color1 = alphaBlendColors(buttonColor, ds->g1Color1, 127); + g1Color2 = alphaBlendColors(buttonColor, ds->g1Color2, 127); + background = alphaBlendColors(buttonColor, ds->background, 127); + } + else { + g1Color1 = ds->g1Color1; + g1Color2 = ds->g1Color2; + g2Color1 = ds->g2Color1; + g2Color2 = ds->g2Color2; + background = ds->background; + } + if(isDown) { + g1Color1 = darkenColor(g1Color1, 15); + g1Color2 = darkenColor(g1Color2, 15); + g2Color1 = darkenColor(g2Color1, 15); + g2Color2 = darkenColor(g2Color2, 15); + background = darkenColor(background, 15); + } + + if(isButton) { // button / toolButton / comboBox / spinWidget / slider / progressBar + + if(!flatMode) { + QRegion mask(r.x()+2, r.y(), r.width()-4, r.height()); + mask += QRegion(r.x()+1, r.y()+1, r.width()-2, r.height()-2); + mask += QRegion(r.x(), r.y()+2, r.width(), r.height()-4); + p->setClipRegion(mask, QPainter::CoordPainter); + } + + + QRect re = r; + if(re.x() < 0 ) { + re.setWidth(re.width()+QABS(re.x())); + re.setX(0); + } + else if(re.y() < 0 ) { + re.setHeight(re.height()+QABS(re.y())); + re.setY(0); + } + + QPixmap pix(re.width(), re.height()); + pix.fill(background); + QPainter painter(&pix); + + int top = re.height()*btnSurface.g1Top/100; + int bottom = re.height()*btnSurface.g1Bottom/100; + int top2 = re.height()*btnSurface.g2Top/100; + int bottom2 = re.height()*btnSurface.g2Bottom/100-top2; + + int left = re.width()*btnSurface.g1Top/100; + int width = re.width()*btnSurface.g1Bottom/100; + int left2 = re.width()*btnSurface.g2Top/100; + int width2 = re.width()*btnSurface.g2Bottom/100-left2; + + switch (btnSurface.numGradients) { + case 1:{ + if(horizontal) { + renderGradient(&painter, QRect(0, top, re.width(), bottom), g1Color1, g1Color2, true); + } + else { + renderGradient(&painter, QRect(left, 0, width, re.height()), g1Color1, g1Color2, false); + } + break; + } + case 2: { + if(horizontal) { + renderGradient(&painter, QRect(0, top, re.width(), bottom), g1Color1, g1Color2, true); + renderGradient(&painter, QRect(0, top2, re.width(), bottom2), g2Color1, g2Color2, true); + } + else { + renderGradient(&painter, QRect(left, 0, width, re.height()), g1Color1, g1Color2, false); + renderGradient(&painter, QRect(left2, 0, width2, re.height()), g2Color1, g2Color2, false); + } + } + default: break; + } + + p->drawPixmap(r.x(), r.y(), pix); + p->setClipping(false); + + } + else if(isTabTop || isActiveTabTop || isTabBottom || isActiveTabBottom) { + + int top = r.y()+r.height()*ds->g1Top/100; + int bottom = r.height()*ds->g1Bottom/100; + int top2 = r.y()+r.height()*ds->g2Top/100; + int bottom2 = r.height()*ds->g2Bottom/100-top2; + + p->fillRect(r, background); + switch (ds->numGradients) { + case 1:{ + renderGradient(p, QRect(r.x(), top, r.width(), bottom), g1Color1, g1Color2, true); + break; + } + case 2: { + renderGradient(p, QRect(r.x(), top, r.width(), bottom), g1Color1, g1Color2, true); + renderGradient(p, QRect(r.x(), top2, r.width(), bottom2), g2Color1, g2Color2, true); + } + default: break; + } + } + else if(isScrollBarBtn) { + + int top = r.height()*scrollBarSurface.g1Top/100; + int bottom = r.height()*scrollBarSurface.g1Bottom/100; + int top2 = r.height()*scrollBarSurface.g2Top/100; + int bottom2 = r.height()*scrollBarSurface.g2Bottom/100-top2; + int left = r.width()*scrollBarSurface.g1Top/100; + int width = r.width()*scrollBarSurface.g1Bottom/100; + int left2 = r.width()*scrollBarSurface.g2Top/100; + int width2 = r.width()*scrollBarSurface.g2Bottom/100-left2; + + p->fillRect(r, background); + switch (scrollBarSurface.numGradients) { + case 1: { + if(horizontal) { + renderGradient(p, QRect(r.left(), top, r.width(), bottom), g1Color1, g1Color2, true); + } + else { + renderGradient(p, QRect(left, r.top(), width, r.height()), g1Color1, g1Color2, false); + } + break; + } + case 2: { + if(horizontal) { + renderGradient(p, QRect(r.left(), top, r.width(), bottom), g1Color1, g1Color2, true); + renderGradient(p, QRect(r.left(), top2, r.width(), bottom2), g2Color1, g2Color2, true); + } + else { + renderGradient(p, QRect(left, r.top(), width, r.height()), g1Color1, g1Color2, false); + renderGradient(p, QRect(left2, r.top(), width2, r.height()), g2Color1, g2Color2, false); + } + } + default: + break; + } + + + } + else if(isScrollBarGroove) { + + int top = r.height()*scrollBarGrooveSurface.g1Top/100; + int bottom = r.height()*scrollBarGrooveSurface.g1Bottom/100; + int top2 = r.height()*scrollBarGrooveSurface.g2Top/100; + int bottom2 = r.height()*scrollBarGrooveSurface.g2Bottom/100-top2; + int left = r.width()*scrollBarGrooveSurface.g1Top/100; + int width = r.width()*scrollBarGrooveSurface.g1Bottom/100; + int left2 = r.width()*scrollBarGrooveSurface.g2Top/100; + int width2 = r.width()*scrollBarGrooveSurface.g2Bottom/100-left2; + + p->fillRect(r, background); + switch (scrollBarGrooveSurface.numGradients) { + case 1: { + if(horizontal) { + renderGradient(p, QRect(r.left(), top, r.width(), bottom), g1Color1, g1Color2, true); + } + else { + renderGradient(p, QRect(left, r.top(), width, r.height()), g1Color1, g1Color2, false); + } + break; + } + case 2: { + if(horizontal) { + renderGradient(p, QRect(r.left(), top, r.width(), bottom), g1Color1, g1Color2, true); + renderGradient(p, QRect(r.left(), top2, r.width(), bottom2), g2Color1, g2Color2, true); + } + else { + renderGradient(p, QRect(left, r.top(), width, r.height()), g1Color1, g1Color2, false); + renderGradient(p, QRect(left2, r.top(), width2, r.height()), g2Color1, g2Color2, false); + } + } + default: + break; + } + + } + else if(isCheckItem) { + + QPixmap pix(r.width(), r.height()); + pix.fill(background); + QPainter painter(&pix); + + int top = r.height()*checkItemSurface.g1Top/100; + int bottom = r.height()*checkItemSurface.g1Bottom/100; + int top2 = r.height()*checkItemSurface.g2Top/100; + int bottom2 = r.height()*checkItemSurface.g2Bottom/100-top2; + + switch(checkItemSurface.numGradients) { + case 1:{ + renderGradient(&painter, QRect(0, top, r.width(), bottom), g1Color1, g1Color2, true); + break; + } + case 2: { + renderGradient(&painter, QRect(0, top, r.width(), bottom), g1Color1, g1Color2, true); + renderGradient(&painter, QRect(0, top2, r.width(), bottom2), g2Color1, g2Color2, true); + break; + } + default: break; + } + painter.end(); + p->drawPixmap(QRect(r.x(), r.y()+3, r.width(), r.height()-7), pix); + + } + else if(isHeader) { + QHeader* hdr = dynamic_cast<QHeader*>(p->device()); + bool needErasePixmap = false; + QRect re = r; + bool horizontal = false; + bool drawTop = false; + + if(hdr) { + if(hdr->orientation() == Qt::Horizontal) { + horizontal = true; + bool hasErasePixmap = hdr->erasePixmap(); + if(hasErasePixmap && !isDown) { + hdr->erase(r); + return; + } + else if(!hasErasePixmap && !isDown) { + needErasePixmap = true; + re = QRect(0, 0, 10, r.height()); + } + } + else if(hdr->sectionAt(r.top()+hdr->offset()) == 0 && r.y() == 0) + drawTop = true; + } + + QPixmap pix(re.width(), re.height()); + pix.fill(background); + QPainter painter(&pix); + + int top = re.height()*headerSurface.g1Top/100; + int bottom = re.height()*headerSurface.g1Bottom/100; + int top2 = re.height()*headerSurface.g2Top/100; + int bottom2 = re.height()*headerSurface.g2Bottom/100-top2; + + switch (headerSurface.numGradients) { + case 1:{ + renderGradient(&painter, QRect(0, top, re.width(), bottom), g1Color1, g1Color2, true); + break; + } + case 2: { + renderGradient(&painter, QRect(0, top, re.width(), bottom), g1Color1, g1Color2, true); + renderGradient(&painter, QRect(0, top2, re.width(), bottom2), g2Color1, g2Color2, true); + break; + } + default: break; + } + + painter.setPen(alphaBlendColors(buttonContour->contourColor(Contour_Default), backgroundColor, 179)); + if(horizontal || drawTop) + painter.drawLine(0, re.y(), re.width(), re.y()); + painter.drawLine(0, re.height()-1, re.width(), re.height()-1); + + if(needErasePixmap) { + hdr->setUpdatesEnabled(false); + hdr->setErasePixmap(pix); + hdr->setUpdatesEnabled(true); + hdr->erase(r); + } + else { + // same problem as with the scrollbars, if we don't clip, the text above will be randomly erased. + p->setClipRect(re); + p->drawPixmap(r.x(), r.y(), pix); + p->setClipping(false); + } + } +} + + +void DominoStyle::renderPixel(QPainter *p, + const QPoint &pos, + const int alpha, + const QColor &color, + const QColor &background, + bool fullAlphaBlend) const +{ + if(fullAlphaBlend) + // full alpha blend: paint into an image with alpha buffer and convert to a pixmap ... + { + QRgb rgb = color.rgb(); + // generate a quite unique key -- use the unused width field to store the alpha value. + CacheEntry search(cAlphaDot, alpha, 0, rgb); + int key = search.key(); + + CacheEntry *cacheEntry; + if( (cacheEntry = pixmapCache->find(key)) ) { + if( search == *cacheEntry ) { // match! we can draw now... + if(cacheEntry->pixmap) + p->drawPixmap(pos, *(cacheEntry->pixmap) ); + return; + } else { //Remove old entry in case of a conflict! + pixmapCache->remove( key ); + } + } + + + QImage aImg(1,1,32); // 1x1 + aImg.setAlphaBuffer(true); + aImg.setPixel(0,0,qRgba(qRed(rgb),qGreen(rgb),qBlue(rgb),alpha)); + QPixmap *result = new QPixmap(aImg); + + p->drawPixmap(pos, *result); + + // add to the cache... + CacheEntry *toAdd = new CacheEntry(search); + toAdd->pixmap = result; + bool insertOk = pixmapCache->insert( key, toAdd, result->depth()/8); + if(!insertOk) + delete result; + } else + // don't use an alpha buffer: calculate the resulting color from the alpha value, the fg- and the bg-color. + { + QRgb rgb_a = color.rgb(); + QRgb rgb_b = background.rgb(); + int a = alpha; + if(a>255) a = 255; + if(a<0) a = 0; + int a_inv = 255 - a; + + QColor res = QColor( qRgb(qRed(rgb_b)*a_inv/255 + qRed(rgb_a)*a/255, + qGreen(rgb_b)*a_inv/255 + qGreen(rgb_a)*a/255, + qBlue(rgb_b)*a_inv/255 + qBlue(rgb_a)*a/255) ); + p->setPen(res); + p->drawPoint(pos); + } +} + +void DominoStyle::renderButtonShadow(QPainter *p, const QRect &r, const uint flags) const { + + if((!buttonContour->drawButtonSunkenShadow && buttonContour->defaultType == Contour_Sunken) || (buttonContour->defaultType != Contour_Sunken && !flatMode)) + return; + + + if(flags&Round_UpperLeft) { + bitBlt(p->device(), r.left(), r.top(), buttonContour->shadowRound(), 0, 0, 5, 5, Qt::CopyROP); + } + else if(flags&Rectangular_UpperLeft){ + bitBlt(p->device(), r.left(), r.top(), buttonContour->shadowRectangular(), 0, 0, 5, 5, Qt::CopyROP); + } + if(flags&Round_UpperRight) { + bitBlt(p->device(), r.right()-6, r.top(), buttonContour->shadowRound(), 5, 0, 5, 5, Qt::CopyROP); + } + else if(flags&Rectangular_UpperRight){ + bitBlt(p->device(), r.right()-6, r.top(), buttonContour->shadowRectangular(), 5, 0, 5, 5, Qt::CopyROP); + } + if(flags&Round_BottomLeft) { + bitBlt(p->device(), r.left(), r.bottom()-5, buttonContour->shadowRound(), 0, 5, 4, 4, Qt::CopyROP); + } + else if(flags&Rectangular_BottomLeft) + bitBlt(p->device(), r.left(), r.bottom()-5, buttonContour->shadowRectangular(), 0, 5, 4, 4, Qt::CopyROP); + if(flags&Round_BottomRight) { + bitBlt(p->device(), r.right()-5, r.bottom()-5, buttonContour->shadowRound(), 4, 5, 4, 4, Qt::CopyROP); + } + else if(flags&Rectangular_BottomRight) + bitBlt(p->device(), r.right()-5, r.bottom()-5, buttonContour->shadowRectangular(), 4, 5, 4, 4, Qt::CopyROP); + + if(flags&Draw_Top) + p->drawTiledPixmap(r.left()+5, r.top(), r.width()-12, 3, *buttonContour->shadowHLines(), 0, 0); + if(flags&Draw_Left) + p->drawTiledPixmap(r.left(), r.top()+5, 3, r.height()-11, *buttonContour->shadowVLines(), 0, 0); + if(flags&Draw_Right) + p->drawTiledPixmap(r.right()-4, r.top()+5, 3, r.height()-11, *buttonContour->shadowVLines(), 3, 0); + if(flags&Draw_Bottom) + p->drawTiledPixmap(r.left()+4, r.bottom()-3, r.width()-10, 2, *buttonContour->shadowHLines(), 0, 3); + +} + +void DominoStyle::renderButton(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool sunken, + bool /*mouseOver*/, + bool horizontal, + bool enabled, + bool khtmlMode) const +{ + + uint contourFlags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom; + + if(!enabled) contourFlags|=Is_Disabled; + + if(khtmlMode || buttonContour->alphaMode() /* || kickerMode*/) { + contourFlags|=Draw_AlphaBlend; + } + + uint surfaceFlags = Is_Button; + if(horizontal) { + surfaceFlags|=Is_Horizontal; + contourFlags|=Is_Horizontal; + } + if(!enabled) + surfaceFlags|=Is_Disabled; + else { + if(sunken) { + surfaceFlags|=Is_Down; + contourFlags|=Is_Down; + } + } + +// QColor buttonColor = khtmlMode ? g.button() : qApp->palette().active().background(); + + if (!flatMode) { + contourFlags |= Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight|Is_Button; + renderSurface(p, QRect(r.x()+2, r.y()+2, r.width()-4, r.height()-5), g.background(), g.button(), g.button(), surfaceFlags); + renderContour(p, r, g.background(), g.button(), contourFlags); + if(sunken) { + renderButtonShadow(p, QRect(r.x()+2, r.y()+2, r.width()-2, r.height()-3), contourFlags); + } + } + else { + renderSurface(p, QRect(r.x()-3, r.y()-1, r.width()+6, r.height()+2), g.background(), g.button(), g.button(), surfaceFlags); + + if(sunken) { + contourFlags |= Rectangular_UpperLeft|Rectangular_UpperRight|Rectangular_BottomLeft|Rectangular_BottomRight; + renderButtonShadow(p, QRect(r.x()-2, r.y()-2, r.width()+4, r.height()+4), contourFlags); + } + } +} + +void DominoStyle::renderHeader(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool sunken, + bool /*mouseOver*/, + bool /*horizontal*/, + bool /*enabled*/) const +{ + p->save(); + bool drawLeft = true; + QHeader* hd = dynamic_cast<QHeader*>(p->device()); + if(hd && hd->orientation() == Qt::Horizontal) + drawLeft = r.x() == 0 && hd->sectionAt(r.left()+hd->offset()) == 0; + + uint surfaceFlags = Is_Header|Is_Horizontal; + if(sunken) + surfaceFlags |= Is_Down; + renderSurface(p, QRect(r.left(), r.top(), r.width(), r.height()), g.button(), g.button(), g.button(), surfaceFlags); + +// p->setPen(buttonContour->contourColor(Contour_Default)); + p->setPen(alphaBlendColors(buttonContour->contourColor(Contour_Default), g.background(), 179)); + if(drawLeft) + p->drawLine(r.left(), r.top(), r.left(), r.bottom()); + if(!hd) + p->drawLine(r.right(), r.top(), r.left(), r.top()); + p->drawLine(r.right(), r.top(), r.right(), r.bottom()); + p->restore(); +} + + +void DominoStyle::renderGradient(QPainter *painter, + const QRect &rect, + const QColor &c1, + const QColor &c2, + bool horizontal) const +{ + if((rect.width() <= 0)||(rect.height() <= 0)) + return; + + // generate a quite unique key for this surface. + CacheEntry search(cGradientTile, + horizontal ? 0 : rect.width(), + horizontal ? rect.height() : 0, + c1.rgb(), c2.rgb(), horizontal ); + int key = search.key(); + + CacheEntry *cacheEntry; + if( (cacheEntry = pixmapCache->find(key)) ) { + if( search == *cacheEntry ) { // match! we can draw now... + if(cacheEntry->pixmap) { + painter->drawTiledPixmap(rect, *(cacheEntry->pixmap) ); + } + return; + } else { + // Remove old entry in case of a conflict! + // This shouldn't happen very often, see comment in CacheEntry. + pixmapCache->remove(key); + } + } + + // there wasn't anything matching in the cache, create the pixmap now... + QPixmap *result = new QPixmap(horizontal ? 10 : rect.width(), + horizontal ? rect.height() : 10); + QPainter p(result); + + int r_w = result->rect().width(); + int r_h = result->rect().height(); + int r_x, r_y, r_x2, r_y2; + result->rect().coords(&r_x, &r_y, &r_x2, &r_y2); + + int rDiff, gDiff, bDiff; + int rc, gc, bc; + + register int x, y; + + rDiff = ( c2.red()) - (rc = c1.red()); + gDiff = ( c2.green()) - (gc = c1.green()); + bDiff = ( c2.blue()) - (bc = c1.blue()); + + register int rl = rc << 16; + register int gl = gc << 16; + register int bl = bc << 16; + + int rdelta = ((1<<16) / (horizontal ? r_h : r_w)) * rDiff; + int gdelta = ((1<<16) / (horizontal ? r_h : r_w)) * gDiff; + int bdelta = ((1<<16) / (horizontal ? r_h : r_w)) * bDiff; + + // these for-loops could be merged, but the if's in the inner loop + // would make it slow + if(horizontal) { + for ( y = 0; y < r_h; y++ ) { + rl += rdelta; + gl += gdelta; + bl += bdelta; + + p.setPen(QColor(rl>>16, gl>>16, bl>>16)); + p.drawLine(r_x, r_y+y, r_x2, r_y+y); + } + } else { + for( x = 0; x < r_w; x++) { + rl += rdelta; + gl += gdelta; + bl += bdelta; + + p.setPen(QColor(rl>>16, gl>>16, bl>>16)); + p.drawLine(r_x+x, r_y, r_x+x, r_y2); + } + } + + p.end(); + + // draw the result... + painter->drawTiledPixmap(rect, *result); + + // insert into cache using the previously created key. + CacheEntry *toAdd = new CacheEntry(search); + toAdd->pixmap = result; + bool insertOk = pixmapCache->insert( key, toAdd, result->width()*result->height()*result->depth()/8 ); + + if(!insertOk) + delete result; +} + +void DominoStyle::renderTab(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool /*mouseOver*/, + const bool selected, + const bool bottom, + const TabPosition pos, + const bool /*triangular*/, + const bool /*cornerWidget*/, + const bool konqTab) const +{ + + const bool isFirst = (pos == First); + const bool isLast = (pos == Last); + const bool isSingle = (pos == Single); + + QPixmap buffer(r.width(), r.height()); + QPainter painter(&buffer); + + QColor tabContour2 = g.background().dark(150); + QPixmap* tabEdges; + if(!(tabEdges = QPixmapCache::find(QString::number(tabContour2.pixel(), 16)+"tabEdges"))) { + QImage img1 = tintImage(qembed_findImage("border1"), tabContour2); + QImage img2 = qembed_findImage("tabInsideWhite"); + blend(img1, img2, img2); + tabEdges = new QPixmap(img2); + QPixmapCache::insert(QString::number(tabContour2.pixel(), 16)+"tabEdges", tabEdges); + } + + QPixmap* tabHLines; + if(!(tabHLines = QPixmapCache::find("tabHLines"))) { + tabHLines = new QPixmap(qembed_findImage("tabHLines")); + QPixmapCache::insert("tabHLines", tabHLines); + } + + QPixmap* tabVLines; + if(!(tabVLines = QPixmapCache::find("tabVLines"))) { + tabVLines = new QPixmap(qembed_findImage("tabVLines")); + QPixmapCache::insert("tabVLines", tabVLines); + } + + + if(konqTab) { + + const QColor background = g.background().dark(konqTabBarContrast); + + if (selected) { + + ///painter.fillRect(0, r.height()-9, r.width(), 9, background); // rect below gradient + ///painter.fillRect(0, 0, r.width(), r.height()-9, g.background()); // rect above gradient + painter.fillRect(0, 0, r.width(), 2, g.background()); // rect above gradient + + painter.translate(0, 2); + renderSurface(&painter, QRect(1, 0, r.width()-2, r.height()-3), g.background(), g.button(), g.button(), Is_ActiveTabBottom); + painter.translate(0, -2); + + + QPixmap* tabEdges2; + QString position = isFirst ? "first" : isLast ? "last" : isSingle ? "single" : "middle"; + if(!(tabEdges2 = QPixmapCache::find(position+"tabEdges2-k-sel"+QString::number(g.background().pixel(), 16)+QString::number(r.height())))) { + tabEdges2 = new QPixmap(16, 8); + tabEdges2->fill(background); + QPainter painter2(tabEdges2); + + // parts of the unselected tabs under the rounded edges + if(!isSingle) { + if(!isFirst) { + painter2.translate(0, -r.height()+12); + renderSurface(&painter2, QRect(0, 0, 3, r.height()-5-3), g.background(), g.button(), g.button(), Is_TabBottom); + painter2.resetXForm(); + painter2.drawTiledPixmap(0, 3, 3, 1, *tabHLines, 0, 2); // left + painter2.setPen(alphaBlendColors(QColor(0,0,0), background, 79)); // bottomShadow1 + painter2.drawLine(0, 4, 1, 4); + painter2.setPen(alphaBlendColors(QColor(0,0,0), background, 30)); // bottomShadow2 + painter2.drawPoint(2,4); // last point from bottomShadow1 a tad lighter (will be overpainted by the circle) + painter2.drawLine(0, 5, 3, 5); + } + if(!isLast) { + painter2.translate(0, -r.height()+12); + renderSurface(&painter2, QRect(13, 0, 3, r.height()-5-3), g.background(), g.button(), g.button(), Is_TabBottom); + painter2.resetXForm(); + painter2.drawTiledPixmap(13, 3, 3, 1, *tabHLines, 0, 2); // right + painter2.setPen(alphaBlendColors(QColor(0,0,0), background, 79)); // bottomShadow1 + painter2.drawLine(14, 4, 15, 4); + painter2.setPen(alphaBlendColors(QColor(0,0,0), background, 30)); // bottomShadow2 + painter2.drawPoint(13,4); + painter2.drawLine(12, 5, 15, 5); + } + } + // fill the rect under the gradients (faster as clipping the gradients) + painter2.fillRect(QRect(0, 6, 16, 2), background); + painter2.end(); + + QPixmap tabEdgesMask = qembed_findImage("groupBoxMask"); // this fits because the tab frame is just an inverted groupbox frame, but pssst ;) + painter2.begin(&tabEdgesMask); + painter2.translate(0, -r.height()+19); + renderSurface(&painter2, QRect(0, 0, 16, r.height()-3), g.background(), g.button(), g.button(), Is_ActiveTabBottom); + painter2.end(); + bitBlt(tabEdges2, 0, 0, &tabEdgesMask, 0, 8); + + QPixmap circle = qembed_findImage("tabWidget"); + bitBlt(tabEdges2, 0, 0, &circle, 0, 8); + + QPixmapCache::insert(position+"tabEdges2-k-sel"+QString::number(g.background().pixel(), 16)+QString::number(r.height()), tabEdges2); + } + + + + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 79)); // bottomShadow1 + painter.drawLine(8, r.height()-3, r.width()-9, r.height()-3); + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 30)); // bottomShadow2 + painter.drawLine(8, r.height()-2, r.width()-9, r.height()-2); + + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 35)); + painter.translate(0,3); + if(isFirst || isSingle) + painter.drawLine(0, -1, 0, r.height()-13); // left + else + renderTabSeparator(&painter, QRect(0, 0, 1, r.height()-5-3), g.button(), false); + if(isLast || isSingle) + painter.drawLine(r.width()-1, -1, r.width()-1, r.height()-13); // right + else + renderTabSeparator(&painter, QRect(r.width()-1, 0, 1, r.height()-5-3), g.button(), false); + painter.translate(0,-3); + + bitBlt(&buffer, 0, r.height()-9, tabEdges2, 0, 0, 8, 8); + bitBlt(&buffer, r.width()-8, r.height()-9, tabEdges2, 8, 0, 8, 8); + + painter.drawTiledPixmap(8, r.height()-4, r.width()-16, 1, *tabHLines, 0, 2); + painter.drawTiledPixmap(1, 2, 1, r.height()-11, *tabVLines); // left + painter.drawTiledPixmap(r.width()-2, 2, 1, r.height()-11, *tabVLines); // right + + + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 20)); + painter.drawPoint(0,1); + painter.drawPoint(r.width()-1,1); + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 50)); + painter.drawPoint(0,2); + painter.drawPoint(r.width()-1,2); + //QColor tmp = alphaBlendColors(QColor(255,255,255), g.background(), 14); + QColor tmp = g.background(); + painter.setPen(alphaBlendColors(tmp, activeTabBottomSurface.g1Top == 0 ? activeTabBottomSurface.g1Color1 : activeTabBottomSurface.background, 127)); +// painter.drawPoint(1,2); +// painter.drawPoint(r.width()-2,2); + painter.drawLine(1,2, r.width()-2, 2); + + // under the tab + painter.setPen(background); + painter.drawLine(0, r.height()-1, r.width(), r.height()-1); + + } + else { // unselected + + painter.setPen(g.background());// 0. tabbarline + painter.drawLine(0, 0, r.width(), 0); + painter.setPen(g.background().dark(120));//QColor(110,110,110) // 1. tabbarline + painter.drawLine(0, 1, r.width(), 1); + painter.setPen(g.background().dark(konqTabBarContrast+20)); //QColor(110,110,110) + + + // topline +// painter.setPen(g.background().dark(150-15)); + painter.setPen(g.background().dark(150-15)); + painter.drawLine(0, 2, r.width(), 2); + + + if(isFirst || isLast) { + + painter.translate(0, 3); + renderSurface(&painter, QRect(1, 0, r.width()-2, r.height()-5-3), g.background(), g.button(), g.button(), Is_TabBottom); + painter.translate(0, -3); + + + QPixmap* tabEdges2; + if(!(tabEdges2 = QPixmapCache::find("tabEdges2-k"+QString::number(g.background().pixel(), 16)+QString::number(r.height())))) { + tabEdges2 = new QPixmap(16, 8); + tabEdges2->fill(background); + + QPixmap tabEdgesMask = qembed_findImage("groupBoxMask"); + QPainter painter2(&tabEdgesMask); + painter2.translate(0, -r.height()+19+3); + renderSurface(&painter2, QRect(1, 0, 14, r.height()-5-3), g.background(), g.button(), g.button(), Is_TabBottom); + painter2.end(); + bitBlt(tabEdges2, 0, 0, &tabEdgesMask, 0, 8); + + QPixmap circle = qembed_findImage("tabWidget"); + bitBlt(tabEdges2, 0, 0, &circle, 0, 8); + + QPixmapCache::insert("tabEdges2-k"+QString::number(g.background().pixel(), 16)+QString::number(r.height()), tabEdges2); + } + + + if(isFirst) { + + painter.translate(0,3); + renderTabSeparator(&painter, QRect(r.width()-1, 0, 1, r.height()-5-3), g.button(), false);// right + painter.translate(0,-3); + + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 79)); // bottomShadow1 + painter.drawLine(8, r.height()-5, r.width()-1, r.height()-5); + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 30)); // bottomShadow2 + painter.drawLine(8, r.height()-4, r.width()-1, r.height()-4); + + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 35)); + painter.drawLine(0, 2, 0, r.height()-11); // left + + + bitBlt(&buffer, 0, r.height()-11, tabEdges2, 0, 0, 8, 8); + + painter.drawTiledPixmap(8, r.height()-6, r.width()-8, 1, *tabHLines, 0, 2); // bottom + painter.drawTiledPixmap(1, 3, 1, r.height()-14, *tabVLines); // left + + } + else { + + painter.translate(0,3); + renderTabSeparator(&painter, QRect(0, 0, 1, r.height()-5-3), g.button(), false); // left + painter.translate(0,-3); + + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 79)); // bottomShadow1 + painter.drawLine(0, r.height()-5, r.width()-8, r.height()-5); + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 30)); // bottomShadow2 + painter.drawLine(0, r.height()-4, r.width()-8, r.height()-4); + + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 35)); + painter.drawLine(r.width()-1, 2, r.width()-1, r.height()-11); // right + + + bitBlt(&buffer, r.width()-8, r.height()-11, tabEdges2, 8, 0, 8, 8); + + painter.drawTiledPixmap(0, r.height()-6, r.width()-8, 1, *tabHLines, 0, 2); // bottom + painter.drawTiledPixmap(r.width()-2, 3, 1, r.height()-14, *tabVLines); // right + } + } + else { // middle + + painter.translate(0,3); + renderTabSeparator(&painter, QRect(0, 0, 1, r.height()-5-3), g.button(), false); // left + renderTabSeparator(&painter, QRect(r.width()-1, 0, 1, r.height()-5-3), g.button(), false);// right + painter.translate(0,-3); + + painter.translate(0, 3); + renderSurface(&painter, QRect(1, 0, r.width()-2, r.height()-5-3), g.background(), g.button(), g.button(), Is_TabBottom); + painter.translate(0, -3); + + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 79)); // bottomShadow1 + painter.drawLine(0, r.height()-5, r.width()-1, r.height()-5); + painter.setPen(alphaBlendColors(QColor(0,0,0), background, 30)); // bottomShadow2 + painter.drawLine(0, r.height()-4, r.width()-1, r.height()-4); + + painter.drawTiledPixmap(0, r.height()-6, r.width(), 1, *tabHLines, 0, 2); // bottom + + } + painter.fillRect(QRect(0, r.height()-3, r.width(), 3), background); + } + p->drawPixmap(r.left(), r.top(), buffer); + } + else { // standard tabs + + if(bottom) { + if (selected) { + + renderSurface(&painter, QRect(1, 0, r.width()-2, r.height()-2), g.background(), g.button(), g.button(), Is_ActiveTabBottom); + + + QPixmap* tabEdges2; + QString position = isFirst ? "first" : isLast ? "last" : isSingle ? "single" : "middle"; + if(!(tabEdges2 = QPixmapCache::find(position+"tabEdges2-bottom-sel"+QString::number(g.background().pixel(), 16)+QString::number(r.height())))) { + tabEdges2 = new QPixmap(16, 8); + tabEdges2->fill(g.background()); + QPainter painter2(tabEdges2); + + if(!isSingle) { + if(!isFirst) { + painter2.translate(0, -r.height()+8); + renderSurface(&painter2, QRect(0, 0, 2, r.height()-5), g.background(), g.button(), g.button(), Is_TabBottom); + painter2.resetXForm(); + painter2.drawTiledPixmap(0, 2, 2, 1, *tabHLines, 0, 2); // left + painter2.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 79)); + painter2.drawLine(0, 3, 1,3); + painter2.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 30)); + painter2.drawLine(0, 4, 3, 4); + } + if(!isLast) { + + painter2.translate(0, -r.height()+8); + renderSurface(&painter2, QRect(14, 0, 2, r.height()-5), g.background(), g.button(), g.button(), Is_TabBottom); + painter2.resetXForm(); + painter2.drawTiledPixmap(14, 2, 2, 1, *tabHLines, 0, 2); // right + painter2.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 79)); + painter2.drawLine(14, 3, 15, 3); + painter2.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 30)); + painter2.drawLine(12, 4, 15, 4); + } + } + painter2.fillRect(QRect(0, 5, 16, 3), g.background()); + painter2.end(); + + + QPixmap tabEdgesMask = qembed_findImage("groupBoxMask"); + painter2.begin(&tabEdgesMask); + painter2.translate(0, -r.height()+16); + renderSurface(&painter2, QRect(1, 0, 14, r.height()-2), g.background(), g.button(), g.button(), Is_ActiveTabBottom); + painter2.end(); + bitBlt(tabEdges2, 0, 0, &tabEdgesMask, 0, 8); + + QPixmap circle = qembed_findImage("tabWidget"); + bitBlt(tabEdges2, 0, 0, &circle, 0, 8); + + QPixmapCache::insert(position+"tabEdges2-bottom-sel"+QString::number(g.background().pixel(), 16)+QString::number(r.height()), tabEdges2); + } + + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 79)); // bottomShadow1 + painter.drawLine(8, r.height()-2, r.width()-9, r.height()-2); + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 30)); // bottomShadow2 + painter.drawLine(8, r.height()-1, r.width()-9, r.height()-1); + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); + if(isFirst || isSingle) + painter.drawLine(0, 0, 0, r.height()-8); // left + else + renderTabSeparator(&painter, QRect(0, 0, 1, r.height()-5), g.button(), false); + if(isLast || isSingle) + painter.drawLine(r.width()-1, 0, r.width()-1, r.height()-8); // right + else + renderTabSeparator(&painter, QRect(r.width()-1, 0, 1, r.height()-5), g.button(), false); + + bitBlt(&buffer, 0, r.bottom()-7, tabEdges2, 0, 0, 8, 8); + bitBlt(&buffer, r.width()-8, r.bottom()-7, tabEdges2, 8, 0, 8, 8); + + + painter.drawTiledPixmap(8, r.height()-3, r.width()-16, 1, *tabHLines, 0, 2); // bottom + painter.drawTiledPixmap(1, 0, 1, r.height()-8, *tabVLines); // left + painter.drawTiledPixmap(r.width()-2, 0, 1, r.height()-8, *tabVLines); // right + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); // clip the first pixels of the separators + painter.drawPoint(0, 0); + painter.drawPoint(r.width()-1, 0); + + } + else { // unselected + + renderSurface(&painter, QRect(1, 0, r.width()-2, r.height()-5), g.background(), g.button(), g.button(), Is_TabBottom); + + + if(isFirst || isLast) { + + QPixmap* tabEdges2; + if(!(tabEdges2 = QPixmapCache::find("tabEdges2-bottom"+QString::number(g.background().pixel(), 16)+QString::number(r.height())))) { + tabEdges2 = new QPixmap(16, 8); + tabEdges2->fill(g.background()); + + QPixmap tabEdgesMask = qembed_findImage("groupBoxMask"); + QPainter painter2(&tabEdgesMask); + painter2.translate(0, -r.height()+19); + renderSurface(&painter2, QRect(1, 0, 14, r.height()-5), g.background(), g.button(), g.button(), Is_TabBottom); + painter2.end(); + bitBlt(tabEdges2, 0, 0, &tabEdgesMask, 0, 8); + + QPixmap circle = qembed_findImage("tabWidget"); + bitBlt(tabEdges2, 0, 0, &circle, 0, 8); + + QPixmapCache::insert("tabEdges2-bottom"+QString::number(g.background().pixel(), 16)+QString::number(r.height()), tabEdges2); + } + + + if(isFirst) { + renderTabSeparator(&painter, QRect(r.width()-1, 0, 1, r.height()-5), g.button(), false);// right + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 79)); // bottomShadow1 + painter.drawLine(8, r.height()-5, r.width()-1, r.height()-5); + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 30)); // bottomShadow2 + painter.drawLine(8, r.height()-4, r.width()-1, r.height()-4); + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); + painter.drawLine(0, 1, 0, r.height()-12); // left + + bitBlt(&buffer, 0, r.height()-11, tabEdges2, 0, 0, 8, 8); + + painter.drawTiledPixmap(1, 1, 1, r.height()-12, *tabVLines); // left + painter.drawTiledPixmap(8, r.height()-6, r.width()-8, 1, *tabHLines, 0, 2); // bottom + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 55)); + painter.drawLine(0, 0, r.width()-1, 0); // top + + } + else { + renderTabSeparator(&painter, QRect(0, 0, 1, r.height()-5), g.button(), false); // left + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 79)); // bottomShadow1 + painter.drawLine(0, r.height()-5, r.width()-8, r.height()-5); + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 30)); // bottomShadow2 + painter.drawLine(0, r.height()-4, r.width()-8, r.height()-4); + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); + painter.drawLine(r.width()-1, 1, r.width()-1, r.height()-12); // right + + bitBlt(&buffer, r.width()-8, r.height()-11, tabEdges2, 8, 0, 8, 8); + + painter.drawTiledPixmap(r.width()-2, 1, 1, r.height()-12, *tabVLines); // right + painter.drawTiledPixmap(0, r.height()-6, r.width()-8, 1, *tabHLines, 0, 2); // bottom + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 55)); + painter.drawLine(0, 0, r.width()-1, 0); // top + } + } + else { // middle + renderTabSeparator(&painter, QRect(0, 0, 1, r.height()-5), g.button(), false); // left + renderTabSeparator(&painter, QRect(r.width()-1, 0, 1, r.height()-5), g.button(), false);// right + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 79)); // bottomShadow1 + painter.drawLine(0, r.height()-5, r.width()-1, r.height()-5); + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 30)); // bottomShadow2 + painter.drawLine(0, r.height()-4, r.width()-1, r.height()-4); + painter.drawTiledPixmap(0, r.height()-6, r.width(), 1, *tabHLines, 0, 2); // bottom + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 55)); + painter.drawLine(0, 0, r.width()-1, 0); // top + } + + painter.fillRect(QRect(0, r.height()-3, r.width(), 3), g.background()); // rect under the tab, clips also the tabSeperator + + } + } + else { // above + if (selected) { + + renderSurface(&painter, QRect(1, 1, r.width()-2, r.height()), g.background(), g.button(), g.button(), Is_ActiveTabTop); + + QPixmap* tabEdges2; + QString position = isFirst ? "first" : isLast ? "last" : isSingle ? "single" : "middle"; + if(!(tabEdges2 = QPixmapCache::find(position+"tabEdges2-top-sel"+QString::number(g.background().pixel(), 16)+QString::number(r.height())))) { + tabEdges2 = new QPixmap(16,8); + tabEdges2->fill(g.background()); + QPainter painter2(tabEdges2); + + if(!isSingle) { + painter2.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 25)); + if(!isFirst) { + renderSurface(&painter2, QRect(0, 4, 2, r.height()), g.background(), g.button(), g.button(), Is_TabTop); + painter2.drawLine(0, 3, 1, 3); // topLine + painter2.drawTiledPixmap(0, 4, 2, 2, *tabHLines); + } + if(!isLast) { + renderSurface(&painter2, QRect(14, 4, 2, r.height()), g.background(), g.button(), g.button(), Is_TabTop); + painter2.drawLine(14, 3, 15, 3); // topLine + painter2.drawTiledPixmap(14, 4, 2, 2, *tabHLines); + } + } + painter2.end(); + + QPixmap tabEdgesMask = qembed_findImage("groupBoxMask"); + painter2.begin(&tabEdgesMask); + renderSurface(&painter2, QRect(1, 1, 14, r.height()), g.background(), g.button(), g.button(), Is_ActiveTabTop); + painter2.end(); + bitBlt(tabEdges2, 0, 0, &tabEdgesMask); + + QPixmap circle = qembed_findImage("tabWidget"); + bitBlt(tabEdges2, 0, 0, &circle); + + QPixmapCache::insert(position+"tabEdges2-top-sel"+QString::number(g.background().pixel(), 16)+QString::number(r.height()), tabEdges2); + } + + /////////////////////////////////////////////// + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); + ///painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 40)); + if(isFirst || isSingle) + painter.drawLine(0, 8, 0, r.height()-1); // left + else + renderTabSeparator(&painter, QRect(0, 4, 1, r.height()), g.button(), true); + if(isLast || isSingle) + painter.drawLine(r.width()-1, 8, r.width()-1, r.height()-1); // right + else + renderTabSeparator(&painter, QRect(r.width()-1, 4, 1, r.height()), g.button(), true); + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 25)); + painter.drawLine(8, 0, r.width()-9, 0); // top + + + bitBlt(&buffer, 0, 0, tabEdges2, 0, 0, 8, 8, Qt::CopyROP); + bitBlt(&buffer, r.width()-8, 0, tabEdges2, 8, 0, 8, 8, Qt::CopyROP); + + painter.drawTiledPixmap(8, 1, r.width()-16, 2, *tabHLines); // top + painter.drawTiledPixmap(1, 8, 1, r.height()-1, *tabVLines); // left + painter.drawTiledPixmap(r.width()-2, 8, 1, r.height()-1, *tabVLines); // right + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); // clip the last pixels of the separators + painter.drawPoint(0, r.height()-1); + painter.drawPoint(r.width()-1, r.height()-1); + + + } + else { // unselected + + painter.fillRect(0, 0, r.width(), 10, g.background()); + painter.setPen(g.background().dark(150)); + + renderSurface(&painter, QRect(1, 4, r.width()-2, r.height()), g.background(), g.button(), g.button(), Is_TabTop); + + if(isFirst || isLast) { + + QPixmap* tabEdges2; + if(!(tabEdges2 = QPixmapCache::find("tabEdges2-top"+QString::number(g.background().pixel(), 16)+QString::number(r.height())))) { + tabEdges2 = new QPixmap(16, 8); + tabEdges2->fill(g.background()); + + QPixmap tabEdgesMask = qembed_findImage("groupBoxMask"); + QPainter painter2(&tabEdgesMask); + renderSurface(&painter2, QRect(1, 1, r.width()-2, r.height()), g.background(), g.button(), g.button(), Is_TabTop); + painter2.end(); + bitBlt(tabEdges2, 0, 0, &tabEdgesMask); + + QPixmap circle = qembed_findImage("tabWidget"); + bitBlt(tabEdges2, 0, 0, &circle); + + QPixmapCache::insert("tabEdges2-top"+QString::number(g.background().pixel(), 16)+QString::number(r.height()), tabEdges2); + } + + + + if(isFirst) { + // darker separator + renderTabSeparator(&painter, QRect(r.width()-1, 4, 1, r.height()), g.button(), true); // left + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 25)); + painter.drawLine(8, 3, r.width()-1, 3); // topLine + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); + painter.drawLine(0, 10, 0, r.height()-1); // left + painter.drawLine(1, r.height()-1, r.width()-1, r.height()-1); // bottom + + painter.drawTiledPixmap(8, 4, r.width()-1, 2, *tabHLines); // top + painter.drawTiledPixmap(1, 11, 1, r.height()-12, *tabVLines); // left + + bitBlt(&buffer, 0, 3, tabEdges2, 0, 0, 8, 8); + + } + else { + // darker separator + renderTabSeparator(&painter, QRect(0, 4, 1, r.height()), g.button(), true); // right + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 25)); + painter.drawLine(0, 3, r.width()-9, 3); // topLine + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); + painter.drawLine(r.width()-1, 10, r.width()-1, r.height()-1); // right + painter.drawLine(0, r.height()-1, r.width()-2, r.height()-1); // bottom + + painter.drawTiledPixmap(0, 4, r.width()-8, 2, *tabHLines); // top + painter.drawTiledPixmap(r.width()-2, 11, 1, r.height()-12, *tabVLines); // right + + bitBlt(&buffer, r.width()-8, 3, tabEdges2, 8, 0, 8, 8); + } + + } + else { // middle + + renderTabSeparator(&painter, QRect(r.width()-1, 4, 1, r.height()), g.button(), true); // left + renderTabSeparator(&painter, QRect(0, 4, 1, r.height()), g.button(), true); // right + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 25)); + painter.drawLine(0, 3, r.width()-1, 3); // top + painter.drawTiledPixmap(0, 4, r.width(), 2, *tabHLines); + + painter.setPen(alphaBlendColors(QColor(0,0,0), g.background(), 35)); + painter.drawLine(0, r.height()-1, r.width()-1, r.height()-1); // bottom + + } + } + } + p->drawPixmap(r.left(), r.top(), buffer); + } +} + +void DominoStyle::drawKStylePrimitive(KStylePrimitive kpe, + QPainter *p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + const QStyleOption& opt) const +{ + //return KStyle::drawKStylePrimitive(kpe, p, widget, r, cg, flags, opt); + +// SLIDER +// ------ + switch( kpe ) { + case KPE_SliderGroove: { + + bool horizontal = ((const QSlider*)widget)->orientation() == Horizontal; + + QRect re; + if(horizontal) + re.setRect(r.left(), r.y()+r.height()/2-3, r.width(), 4); + else + re.setRect(r.x()+r.width()/2-3, r.top(), 4, r.height()); + + bool parentBgPix = widget->parentWidget() ? widget->parentWidget()->paletteBackgroundPixmap() : 0; + QString hori = horizontal ? "1" : "0"; + QString trans = parentBgPix ? "1" : "0"; + QPixmap* sliderGroove; + if(!(sliderGroove = QPixmapCache::find(QString::number(cg.background().pixel(), 16)+"sliderGroove"+hori+trans))) { + + if(parentBgPix) { // ### the pix are transparent! + if(!horizontal) { + QWMatrix m; + m.rotate(-90); + sliderGroove = new QPixmap(qembed_findImage("slGHBody").xForm(m)); + } + else + sliderGroove = new QPixmap(qembed_findImage("slGHBody")); + } + else { + const QColor c1 = alphaBlendColors(QColor(0,0,0), cg.background(), 11); + const QColor c2 = alphaBlendColors(QColor(53,53,53), cg.background(), 155); + const QColor c3 = alphaBlendColors(QColor(67,67,67), cg.background(), 146); + const QColor c4 = alphaBlendColors(QColor(83,83,83), cg.background(), 140); + const QColor c5 = alphaBlendColors(QColor(101,101,101), cg.background(), 134); + const QColor c6 = alphaBlendColors(QColor(254,254,254), cg.background(), 43); + const QColor c7 = alphaBlendColors(QColor(255,255,255), cg.background(), 9); + + sliderGroove = new QPixmap(7, 7); + QPainter painter(sliderGroove); + QRect rr = sliderGroove->rect(); + + if (horizontal) { + painter.setPen(c1); + painter.drawLine(0, 0, 7, 0); + painter.setPen(c2); + painter.drawLine(0, 1, 7, 1); + painter.setPen(c3); + painter.drawLine(0, 2, 7, 2); + painter.setPen(c4); + painter.drawLine(0, 3, 7, 3); + painter.setPen(c5); + painter.drawLine(0, 4, 7, 4); + painter.setPen(c6); + painter.drawLine(0, 5, 7, 5); + painter.setPen(c7); + painter.drawLine(0, 6, 7, 6); + } + else { + painter.setPen(c1); + painter.drawLine(0, 0, 0, 7); + painter.setPen(c2); + painter.drawLine(1, 0, 1 , 7); + painter.setPen(c3); + painter.drawLine(2, 0, 2 , 7); + painter.setPen(c4); + painter.drawLine(3, 0, 3, 7); + painter.setPen(c5); + painter.drawLine(4, 0, 4, 7); + painter.setPen(c6); + painter.drawLine(5, 0, 5, 7); + painter.setPen(c7); + painter.drawLine(6, 0, 6, 7); + } + } + QPixmapCache::insert(QString::number(cg.background().pixel(), 16)+"sliderGroove"+hori+trans, sliderGroove); + } + + if (horizontal) { + QPixmap* slGh; + if(parentBgPix || !(slGh = QPixmapCache::find(QString::number(cg.background().pixel(), 16)+"slGh"))) { // rounded edges + + if(parentBgPix) + slGh = new QPixmap(qembed_findImage("slGh")); + else { + slGh = new QPixmap(6, 7); + slGh->fill(cg.background()); + QPixmap pix = qembed_findImage("slGh"); + bitBlt(slGh, 0, 0, &pix, 0, 0, -1, -1, Qt::CopyROP); + } + QPixmapCache::insert(QString::number(cg.background().pixel(), 16)+"slGh",slGh ); + } + + bitBlt(p->device(), re.x(), re.y(), slGh, 0, 0, 3, 7, Qt::CopyROP); + bitBlt(p->device(), r.width()-3, re.y(), slGh, 3, 0, 3, 7, Qt::CopyROP); + p->drawTiledPixmap(re.x()+3, re.y(), r.width()-6, 7, *sliderGroove); + } + else { + QPixmap* slGv; + if(parentBgPix || !(slGv = QPixmapCache::find(QString::number(cg.background().pixel(), 16)+"slGv"))) { + if(parentBgPix) + slGv = new QPixmap(qembed_findImage("slGv")); + else { + slGv = new QPixmap(7, 6); + slGv->fill(cg.background()); + QPixmap pix = qembed_findImage("slGv"); + bitBlt(slGv, 0, 0, &pix, 0, 0, -1, -1, Qt::CopyROP); + } + QPixmapCache::insert(QString::number(cg.background().pixel(), 16)+"slGv",slGv ); + } + bitBlt(p->device(), re.x(), re.y(), slGv, 0, 0, 7, 3, Qt::CopyROP); + bitBlt(p->device(), re.x(), re.height()-3, slGv, 0, 3, 7, 3, Qt::CopyROP); + p->drawTiledPixmap(re.x(), re.y()+3, 7, r.height()-6, *sliderGroove); + } + + break; + } + + case KPE_SliderHandle: { + const QSlider* slider = (const QSlider*)widget; + + int y, x; + if(slider->orientation() == Horizontal) { + x = r.x(); + y =r.y()+r.height()/2-8+1; + } + else { + y = r.y()+1; + x = r.x()+r.width()/2-8; + } + + QPixmap* handle; + if(!(handle = QPixmapCache::find("sliderHandle"+QString::number(cg.button().pixel(), 16)))) { + QPixmap insidePix = qembed_findImage("sliderHandle2inside"); // a filled antialiased circle to draw the gradients on + QPainter painter(&insidePix); + flatMode=true; + renderSurface(&painter, QRect(1, 0, 13, 15), cg.background(), cg.button(), cg.button(), Is_Button|Is_Horizontal); + flatMode=false; + QImage inside = insidePix.convertToImage(); + + QImage circle = tintImage(qembed_findImage("sliderHandle2circle"), + _customSliderHandleContourColor ? buttonContour->contourColor(Contour_Default) : alphaBlendColors(black, cg.button(), 110)); + + QImage shadow = qembed_findImage("sliderHandle2shadow"); + blend(shadow, inside, inside); + blend(circle, inside, inside); + handle = new QPixmap(inside); + QPixmapCache::insert("sliderHandle"+QString::number(cg.button().pixel(), 16), handle ); + } + bitBlt(p->device(), x, y, handle, 0, 0, -1, -1, Qt::CopyROP); + + break; + } + + case KPE_ListViewExpander: { + + QWidget* w = dynamic_cast<QWidget*>(p->device()); + p->setPen( cg.text() ); + QColor bg = w ? w->paletteBackgroundColor() : cg.background(); + QString hasBgPix = w && w->paletteBackgroundPixmap() ? "1" : "0"; + QString expanded = flags & Style_Off ? "1" : "0"; + QPixmap* lve; + + if(_drawTriangularExpander) { + + if(!(lve = QPixmapCache::find(QString::number(bg.pixel(), 16)+QString::number(cg.text().pixel(), 16)+"lveT"+hasBgPix+expanded))) { + QWMatrix m; + m.rotate(90); + if(w && !w->paletteBackgroundPixmap()) { + QImage img = tintImage(qembed_findImage("lveTriangular"), cg.text()); + int w=7, h=9; + if(flags & Style_Off) { + w=9, h=7; + img = img.xForm(m); + } + QImage imgBG(w,h,32); + imgBG.fill(bg.rgb()); + bitBlt(&imgBG, 0, 0, &img); + lve = new QPixmap(imgBG); + } + else { + if(flags & Style_Off) + lve = new QPixmap(tintImage(qembed_findImage("lveTriangular").xForm(m), cg.text())); + else + lve = new QPixmap(tintImage(qembed_findImage("lveTriangular"), cg.text())); + } + QPixmapCache::insert(QString::number(bg.pixel(), 16)+QString::number(cg.text().pixel(), 16)+"lveT"+hasBgPix+expanded, lve); + } + + p->drawPixmap(r.x(), r.y(), *lve); + + } + else { + + if(!(lve = QPixmapCache::find(QString::number(bg.pixel(), 16)+QString::number(cg.text().pixel(), 16)+"lveC"+hasBgPix+expanded))) { + if(w && !w->paletteBackgroundPixmap()) { + lve = new QPixmap(11,11); + lve->fill(bg); + QPainter painter(lve); + painter.drawPixmap(0, 0, tintImage(qembed_findImage("lve"), cg.text())); + + // plus or minus + painter.drawLine( 3, 5, 7, 5 ); + if ( flags & Style_On ) // Collapsed = On + painter.drawLine( 5, 3, 5, 7 ); + + QPixmapCache::insert(QString::number(bg.pixel(), 16)+QString::number(cg.text().pixel(), 16)+"lveC"+hasBgPix+expanded, lve); + } + else { + QImage img = QImage(11, 11, 32); + img.setAlphaBuffer(true); + for(int x=0; x < img.width(); ++x) { + for(int y=0; y < img.height(); ++y) { + img.setPixel(x, y, qRgba(0, 0, 0, 0)); + } + } + + + QImage img2 = tintImage(qembed_findImage("lve"), cg.text()); + bitBlt(&img, 0, 0, &img2); + + int r, b, g; + int a = 255; + cg.text().getRgb(&r, &g, &b); + + // minus + img.setPixel(3, 5, qRgba(r, b, g, a)); + img.setPixel(4, 5, qRgba(r, b, g, a)); + img.setPixel(5, 5, qRgba(r, b, g, a)); + img.setPixel(6, 5, qRgba(r, b, g, a)); + img.setPixel(7, 5, qRgba(r, b, g, a)); + + + if ( flags & Style_Off ) + lve = new QPixmap(img); + QPixmapCache::insert(QString::number(bg.pixel(), 16)+QString::number(cg.text().pixel(), 16)+"lveC"+hasBgPix+"1", new QPixmap(img)); + + // plus + img.setPixel(5, 3, qRgba(r, b, g, a)); + img.setPixel(5, 4, qRgba(r, b, g, a)); + img.setPixel(5, 6, qRgba(r, b, g, a)); + img.setPixel(5, 7, qRgba(r, b, g, a)); + + if ( flags & Style_On ) + lve = new QPixmap(img); + + QPixmapCache::insert(QString::number(bg.pixel(), 16)+QString::number(cg.text().pixel(), 16)+"lveC"+hasBgPix+"0", new QPixmap(img)); + } + } + p->drawPixmap(r.x()-1,r.y()-1, *lve); + } + break; + } + + // copied and slightly modified from KStyle. + case KPE_ListViewBranch: { + if(_drawTriangularExpander) break; + // Typical Windows style listview branch element (dotted line). + + // Create the dotline pixmaps if not already created + if ( !verticalLine ) + { + // make 128*1 and 1*128 bitmaps that can be used for + // drawing the right sort of lines. + verticalLine = new QBitmap( 1, 129, true ); + horizontalLine = new QBitmap( 128, 1, true ); + QPointArray a( 64 ); + QPainter p2; + p2.begin( verticalLine ); + + int i; + for( i=0; i < 64; i++ ) + a.setPoint( i, 0, i*2+1 ); + p2.setPen( color1 ); + p2.drawPoints( a ); + p2.end(); + QApplication::flushX(); + verticalLine->setMask( *verticalLine ); + + p2.begin( horizontalLine ); + for( i=0; i < 64; i++ ) + a.setPoint( i, i*2+1, 0 ); + p2.setPen( color1 ); + p2.drawPoints( a ); + p2.end(); + QApplication::flushX(); + horizontalLine->setMask( *horizontalLine ); + } + + p->setPen( cg.mid() ); + + if (flags & Style_Horizontal) + { + int point = r.x(); + int other = r.y(); + int end = r.x()+r.width(); + int thickness = r.height(); + + while( point < end ) + { + int i = 128; + if ( i+point > end ) + i = end-point; + p->drawPixmap( point, other, *horizontalLine, 0, 0, i, thickness ); + point += i; + } + + } else { + int point = r.y(); + int other = r.x(); + int end = r.y()+r.height(); + int thickness = r.width(); + int pixmapoffset = (flags & Style_NoChange) ? 0 : 1; // ### Hackish + + while( point < end ) + { + int i = 128; + if ( i+point > end ) + i = end-point; + p->drawPixmap( other, point, *verticalLine, 0, pixmapoffset, thickness, i ); + point += i; + } + } + break; + } + + default: + KStyle::drawKStylePrimitive(kpe, p, widget, r, cg, flags, opt); + } +} + + +void DominoStyle::drawPrimitive(PrimitiveElement pe, + QPainter *p, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + const QStyleOption &opt ) const +{ + bool down = flags & Style_Down; + bool on = flags & Style_On; + bool sunken = flags & Style_Sunken; + bool horiz = flags & Style_Horizontal; + const bool enabled = flags & Style_Enabled; + const bool mouseOver = flags & Style_MouseOver; + +// bool hasFocus = flags & Style_HasFocus; + + int x = r.x(); + int y = r.y(); + int w = r.width(); + int h = r.height(); + + + + //return KStyle::drawPrimitive(pe, p, r, cg, flags, opt); + + switch(pe) { + + case PE_FocusRect: { + + if(rubberBandType == DistRubber || (rubberBandType == ArgbRubber && !compositeManagerRunning)) { + p->drawWinFocusRect( r ); + break; + } + + QWidget* w = dynamic_cast<QWidget*>(p->device()); + if(rubberBandType == ArgbRubber && compositeManagerRunning && viewPortPressed && dynamic_cast<QListView*>(w->parentWidget())) { + QListView* lv = dynamic_cast<QListView*>(w->parentWidget()); + if(!lv->currentItem()) + break; + QRect sr = lv->itemRect(lv->currentItem()); + QRect rr = r.normalize(); + int step = lv->rootIsDecorated() ? (lv->currentItem()->depth()+1)*lv->treeStepSize() : lv->currentItem()->depth()*lv->treeStepSize(); + if(dynamic_cast<QCheckListItem*>(lv->currentItem())) + step += 16+lv->itemMargin()+4; + + // why is the focusrect misused as a rubberband!? + if((lv->selectionMode() == QListView::Multi || lv->selectionMode() == QListView::Extended) && + !((sr.y() == rr.y()) && (sr.height() == rr.height()) && (sr.x()+step == rr.x()))) { + + QScrollView* sv = static_cast<QScrollView*>(w); + + QPoint po = w->mapFrom(sv, r.topLeft()); + QRect re = QRect(po.x(), po.y(), r.width(), r.height()); + + drawPrimitive(PE_RubberBand, p, r, cg, flags, opt); + break; + } + } + if(ignoreNextFocusRect) { + ignoreNextFocusRect= false; + break; + } + + QColor color = alphaBlendColors(cg.highlight(), cg.foreground(), 160); + + if(w && (w->isA("QViewportWidget") || dynamic_cast<QWidget*>(p->device())->isA("RegionGrabber"))) { // QListView, QListBox, KSnapshot... + // we can't be sure if the pixamp edges will be erased, so only a simple rect. + p->setPen(QPen(color, 1, Qt::SolidLine)); + p->drawRect(r); + break; + } + + QPixmap* edges; + if(!(edges = QPixmapCache::find("fre"+QString::number(color.pixel(), 16)))) { + edges = new QPixmap(tintImage(qembed_findImage("focusRectEdges"), color)); + QPixmapCache::insert("fre"+QString::number(color.pixel(), 16), edges); + } + + p->drawPixmap(r.left(), r.top(), *edges, 0, 0, 3, 3); + p->drawPixmap(r.left(), r.bottom()-2, *edges, 0, 3, 3, 3); + p->drawPixmap(r.right()-2, r.top(), *edges, 3, 0, 3, 3); + p->drawPixmap(r.right()-2, r.bottom()-2, *edges, 3, 3, 3, 3); + + p->setPen(color); + p->drawLine(r.left()+3, r.top(), r.right()-2, r.y()); + p->drawLine(r.left()+3, r.bottom(), r.right()-2, r.bottom()); + p->drawLine(r.left(), r.top()+3, r.left(), r.bottom()-2); + p->drawLine(r.right(), r.top()+3, r.right(), r.bottom()-2); + + break; + } + + case PE_HeaderSection: { // also taskbar buttons + if(dynamic_cast<QWidget*>(p->device()) && dynamic_cast<QWidget*>(p->device())->isA("PanelKMenu")) { + QWidget* w = dynamic_cast<QWidget*>(p->device()); + + if(w->parentWidget() && w->parentWidget()->paletteBackgroundPixmap()) { + + QPixmap pix(w->width(), w->height()); + QPainter painter(&pix); + QPoint point = QPoint(w->geometry().x(), w->geometry().y()); + painter.drawTiledPixmap( 0, 0, w->width(), w->height(), + *w->parentWidget()->backgroundPixmap(), + point.x(), point.y() ); + // if the PopupTitle is hovered by the mouse, we don't have access to the parent background pixmap, + // so it must have have its own one. + w->setUpdatesEnabled(false); + w->setErasePixmap(pix); + w->setUpdatesEnabled(true); + w->erase(); + } + else + w->erase(r); + break; + } + + renderHeader(p, r, cg, (on||down||sunken), mouseOver, true, enabled ); + break; + } + + + // BUTTONS + // ------- + + case PE_ButtonTool: + case PE_ButtonDropDown: + case PE_ButtonBevel: + case PE_ButtonCommand: { + + // the above promitives are not called from within the style + if(dynamic_cast<QPixmap*>(p->device())) // more likely a backgroundPixmap than a doublebuffer + buttonContour->setAlphaMode(); + + renderButton(p, r, cg, (on||down), mouseOver, true, enabled, khtmlWidgets.contains(opt.widget()) ); + buttonContour->reset(); + break; + } + + case PE_ButtonDefault: { + break; + } + + case PE_SpinWidgetPlus: + case PE_SpinWidgetMinus: { + p->setPen( cg.buttonText() ); + + int l = QMIN( w-2, h-2 ); + // make the length even so that we get a nice symmetric plus... + if(l%2 != 0) + --l; + QPoint c = r.center(); + + p->drawLine( c.x()-l/2, c.y(), c.x()+l/2, c.y() ); + if ( pe == PE_SpinWidgetPlus ) { + p->drawLine( c.x(), c.y()-l/2, c.x(), c.y()+l/2 ); + } + break; + } + + case PE_ScrollBarSlider: { + + QColor buttonColor = cg.button(); + + QPixmap buffer; + if(horiz) + buffer.resize(r.width()-14, r.height()); + else + buffer.resize(r.width(), r.height()-14); + if(buffer.isNull()) break; + + QRect br = buffer.rect(); + QPainter painter(&buffer); + + if(horiz) { + uint surfaceFlags = Is_ScrollBarBtn|Is_Horizontal; + renderSurface(&painter, br, cg.button(), cg.button(), buttonColor, surfaceFlags); + + uint contourFlags = Is_ScrollBarBtn|Is_Horizontal|Draw_Top|Draw_Bottom; + renderContour(&painter, QRect(-2, 0, br.width()+4, br.height()), cg.button(), buttonColor, contourFlags); + + p->drawPixmap(r.left()+7, r.y(), buffer); + } + else { + uint surfaceFlags = Is_ScrollBarBtn; + renderSurface(&painter, br, cg.button(), cg.button(), buttonColor, surfaceFlags); + + uint contourFlags = Is_ScrollBarBtn|Draw_Left|Draw_Right; + renderContour(&painter, QRect(0, -2, br.width(), br.height()+4), cg.button(), buttonColor, contourFlags); + + bitBlt(p->device(), r.x(), r.y()+7, &buffer, 0, 0, -1, -1, Qt::CopyROP); + } + break; + } + + case PE_ScrollBarAddPage: { // bottom / right + + QColor buttonColor = cg.button(); + QColor contourColor = alphaBlendColors(buttonContour->contourColor(Contour_Default), buttonColor, 203); + QPixmap* addPageBtn; + QPixmap buffer; + + uint surfaceFlags = Is_ScrollBarBtn; + if(horiz) + surfaceFlags |= Is_Horizontal; + + int sl = 6; + if(sliderlen < 14) + sl = sliderlen/2-1; + + //// button part + if(horiz) { + buffer.resize(r.width()+sl, r.height()); + if(buffer.isNull()) break; + + if(!(addPageBtn = QPixmapCache::find(QString::number(buttonColor.pixel(), 16)+"ah"+configMode ))) { + + QPixmap gradientPix = qembed_findImage("scrollBtnHMask"); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollBtnHShadow"); + QImage img3 = tintImage(qembed_findImage("scrollBtnHContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + addPageBtn = new QPixmap(img1); + + QPixmapCache::insert(QString::number(buttonColor.pixel(), 16)+"ah"+configMode, addPageBtn); + } + } + else { + buffer.resize(r.width(), r.height()+sl); + if(buffer.isNull()) break; + if(!(addPageBtn = QPixmapCache::find(QString::number(buttonColor.pixel(), 16)+"av"+configMode ))) { + + QPixmap gradientPix = qembed_findImage("scrollBtnVMask"); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollBtnVShadow"); + QImage img3 = tintImage(qembed_findImage("scrollBtnVContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + addPageBtn = new QPixmap(img1); + + QPixmapCache::insert(QString::number(buttonColor.pixel(), 16)+"av"+configMode, addPageBtn); + } + } + + QRect br(buffer.rect() ); + QPainter bp(&buffer); + + //// groove + if(sliderlen >= 10) { + surfaceFlags = Is_ScrollBarGroove; + if(horiz) + surfaceFlags |= Is_Horizontal; + + QColor grooveLine = alphaBlendColors(black, buttonColor, 80); + renderSurface(&bp, QRect(0, 0, br.width(), br.height()), grooveLine, grooveLine, grooveLine, surfaceFlags); + bp.setClipRegion(horiz ? QRect(0, 1, br.width(), br.height()-2) : QRect(1, 0, br.width()-2, br.height())); + renderSurface(&bp, QRect(0, 0, br.width(), br.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + bp.setClipping(false); + } + else { + renderSurface(&bp, QRect(0, 0, br.width(), br.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + uint contourFlags = Is_ScrollBarBtn; + contourFlags |= (horiz)? Draw_Top|Draw_Bottom : Draw_Left|Draw_Right; + renderContour(&bp, horiz?QRect(-2, 0, br.width()+4, br.height()):QRect(0, -2, br.width(), br.height()+4), buttonColor, buttonColor, contourFlags); + } + + + + QString docked = (!horiz && r.height() == 1) || (horiz && r.width() == 1) ? "1" : "0"; + QPixmap* sliderCap; + if(horiz) { + if(!(sliderCap = QPixmapCache::find("sHCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode))) { + if(r.width() == 1) { + QPixmap gradientPix(16, 15); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn|Is_Horizontal); + QImage img1 = gradientPix.convertToImage(); + + QImage img2 = qembed_findImage("scrollSliderHDockedShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderHDockedContour"), contourColor); + + bitBlt(&img1, 0, 0, &img2); + bitBlt(&img1, 0, 0, &img3); + + sliderCap = new QPixmap(img1); + } + else { + QPixmap gradientPix = qembed_findImage("scrollSliderHMask"); + QPainter painter(&gradientPix); + + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn|Is_Horizontal); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollSliderHShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderHContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + sliderCap = new QPixmap(img1); + } + QPixmapCache::insert("sHCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode, sliderCap); + } + } + else { + if(!(sliderCap = QPixmapCache::find("sVCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode))) { + if(r.height() == 1) { + QPixmap gradientPix(15, 16); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn); + QImage img1 = gradientPix.convertToImage(); + + QImage img2 = qembed_findImage("scrollSliderVDockedShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderVDockedContour"), contourColor); + + bitBlt(&img1, 0, 0, &img2); + bitBlt(&img1, 0, 0, &img3); + + sliderCap = new QPixmap(img1); + } + else { + QPixmap gradientPix = qembed_findImage("scrollSliderVMask"); + QPainter painter(&gradientPix); + + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollSliderVShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderVContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + sliderCap = new QPixmap(img1); + } + QPixmapCache::insert("sVCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode, sliderCap); + } + } + + + //////////// + + if(horiz) { + if(sliderlen >= 10) { + bp.drawPixmap(br.right()-8, 0, *addPageBtn, 9, 0, 9, 15); + bp.drawPixmap(-6+sl, 0, *sliderCap, 8, 0, 8, 15); + } + bitBlt(p->device(), r.x()-sl, r.y(), &buffer, 0, 0, br.width(), br.height(), Qt::CopyROP); + } + else { + if(sliderlen >= 10) { + bp.drawPixmap(0, br.bottom()-8, *addPageBtn, 0, 9, 15, 9); + bp.drawPixmap(0, (br.height() <= 6)? br.bottom()-6 :br.top(), *sliderCap, 0, 8, 15, 8); + } + bitBlt(p->device(), r.x(), r.y()-sl, &buffer, 0, 0, br.width(), br.height(), Qt::CopyROP); + } + break; + } + + case PE_ScrollBarSubPage: { // top / left + + QColor buttonColor = cg.button(); + QColor contourColor = alphaBlendColors(buttonContour->contourColor(Contour_Default), buttonColor, 203); + QPixmap* subPageBtn; + QPixmap buffer; + + uint surfaceFlags = Is_ScrollBarBtn; + + if(horiz) + surfaceFlags |= Is_Horizontal; + + + int sl = 6; + if(sliderlen < 14) + sl = sliderlen/2; + + + //// button part + if(horiz) { + buffer.resize(r.width()+sl, r.height()); + if(buffer.isNull()) break; + + if(!(subPageBtn = QPixmapCache::find(QString::number(buttonColor.pixel(), 16)+"sh"+configMode ))) { + + QPixmap gradientPix = qembed_findImage("scrollBtnHMask"); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollBtnHShadow"); + QImage img3 = tintImage(qembed_findImage("scrollBtnHContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + subPageBtn = new QPixmap(img1); + + QPixmapCache::insert(QString::number(buttonColor.pixel(), 16)+"sh"+configMode, subPageBtn); + } + } + else { + buffer.resize(r.width(), r.height()+sl); + if(buffer.isNull()) break; + + if(!(subPageBtn = QPixmapCache::find(QString::number(buttonColor.pixel(), 16)+"sv"+configMode ))) { + + QPixmap gradientPix = qembed_findImage("scrollBtnVMask"); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollBtnVShadow"); + QImage img3 = tintImage(qembed_findImage("scrollBtnVContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + subPageBtn = new QPixmap(img1); + + QPixmapCache::insert(QString::number(buttonColor.pixel(), 16)+"sv"+configMode, subPageBtn); + } + } + + QRect br(buffer.rect()); + QPainter bp(&buffer); + + //// groove + if(sliderlen >= 10) { + surfaceFlags = Is_ScrollBarGroove; + if(horiz) + surfaceFlags |= Is_Horizontal; + + QColor grooveLine = alphaBlendColors(black, buttonColor, 80); + renderSurface(&bp, QRect(0, 0, br.width(), br.height()), grooveLine, grooveLine, grooveLine, surfaceFlags); + bp.setClipRegion(horiz ? QRect(0, 1, br.width(), br.height()-2) : QRect(1, 0, br.width()-2, br.height())); + renderSurface(&bp, QRect(0, 0, br.width(), br.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + bp.setClipping(false); + } + else { + renderSurface(&bp, QRect(0, 0, br.width(), br.height()), buttonColor, buttonColor, buttonColor, surfaceFlags); + uint contourFlags = Is_ScrollBarBtn; + contourFlags |= (horiz)? Draw_Top|Draw_Bottom : Draw_Left|Draw_Right; + renderContour(&bp, horiz?QRect(-2, 0, br.width()+4, br.height()):QRect(0, -2, br.width(), br.height()+4), buttonColor, buttonColor, contourFlags); + } + + + QString docked = (!horiz && r.bottom() == 15) || (horiz && r.right() == 15) ? "1" : "0"; + QPixmap* sliderCap; + if(horiz) { + if(!(sliderCap = QPixmapCache::find("sHCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode))) { + + if(r.right() == 15) { + QPixmap gradientPix(16, 15); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn|Is_Horizontal); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollSliderHDockedShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderHDockedContour"), contourColor); + + bitBlt(&img1, 0, 0, &img2); + bitBlt(&img1, 0, 0, &img3); + + sliderCap = new QPixmap(img1); + } + else { + QPixmap gradientPix = qembed_findImage("scrollSliderHMask"); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn|Is_Horizontal); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollSliderHShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderHContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + sliderCap = new QPixmap(img1); + } + + QPixmapCache::insert("sHCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode, sliderCap); + } + } + else { + if(!(sliderCap = QPixmapCache::find("sVCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode))) { + + if(r.bottom() == 15) { + QPixmap gradientPix(15, 16); + QPainter painter(&gradientPix); + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn); + QImage img1 = gradientPix.convertToImage(); + + QImage img2 = qembed_findImage("scrollSliderVDockedShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderVDockedContour"), contourColor); + + bitBlt(&img1, 0, 0, &img2); + bitBlt(&img1, 0, 0, &img3); + + sliderCap = new QPixmap(img1); + } + else { + QPixmap gradientPix = qembed_findImage("scrollSliderVMask"); + QPainter painter(&gradientPix); + + renderSurface(&painter, QRect(0, 0, gradientPix.width(), gradientPix.height()), cg.button(), cg.button(), buttonColor, Is_ScrollBarBtn); + QImage img1 = gradientPix.convertToImage(); + QImage img2 = qembed_findImage("scrollSliderVShadow"); + QImage img3 = tintImage(qembed_findImage("scrollSliderVContour"), contourColor); + + blend(img2, img1, img1); + blend(img3, img1, img1); + + sliderCap = new QPixmap(img1); + } + + + QPixmapCache::insert("sVCap"+QString::number(buttonColor.pixel(), 16)+docked+configMode, sliderCap); + } + } + + if(horiz) { + if(sliderlen >= 10) { + bp.drawPixmap(0, 0, *subPageBtn, 0, 0, 9, 15); + bp.drawPixmap((br.width() <= 6)? -2 : br.width()-8, 0, *sliderCap, 0, 0, 8, 15); + } + } + else { + if(sliderlen >= 10) { + bp.drawPixmap(0, 0, *subPageBtn, 0, 0, 15, 9); + bp.drawPixmap(0, br.bottom()-sl-2+1, *sliderCap, 0, 0, 15, 8); + } + } + + bitBlt(p->device(), r.x(), r.y(), &buffer, 0, 0, br.width(), br.height(), Qt::CopyROP); + break; + } + + // SCROLLBAR BUTTONS + // ----------------- + + case PE_ScrollBarSubLine: { // top / left button + + uint contourFlags = Is_ScrollBarBtn; + + QRect cr = r; + QRect ar = r; + QRect sr = r; + + if(horiz) { + contourFlags |= Is_Horizontal|Draw_Top|Draw_Bottom; + if(r.x() == 0) { // = single Button + sr.setX(2); + sr.setWidth(13); + ar.setX(3); + contourFlags |= Draw_Left|Round_BottomLeft|Round_UpperLeft; + } + else { + cr.setWidth(17); + cr.setX(cr.x()-2); + } + } + else { + ar.setX(1); + contourFlags |= Draw_Left|Draw_Right; + if(r.y() == 0) { + sr.setY(2); + sr.setHeight(13); + ar.setY(3); + contourFlags |= Draw_Top|Round_UpperLeft|Round_UpperRight; + } + else { + cr.setHeight(17); + cr.setY(cr.y()-2); + } + } + + if(horiz) { + renderSurface(p, QRect(sr.x(), sr.y(), sr.width(), sr.height()), cg.button(), cg.button(), cg.button(), Is_ScrollBarBtn|Is_Horizontal); + renderContour(p, QRect(cr.x(), cr.y(), cr.width(), cr.height()), cg.button(), cg.button(), contourFlags); + } + else { + p->setClipRegion(QRect(sr.x()+2, sr.y(), sr.width()-4, sr.height())); + renderSurface(p, QRect(sr.x(), sr.y(), sr.width(), sr.height()), cg.button(), cg.button(), cg.button(), Is_ScrollBarBtn); + p->setClipping(false); + renderContour(p, QRect(cr.x(), cr.y(), cr.width(), cr.height()), cg.button(), cg.button(), contourFlags); + } + + QColor color = dynamic_cast<QWidget*>(p->device()) ? dynamic_cast<QWidget*>(p->device())->palette().active().buttonText() : cg.buttonText(); + p->setPen(color); + drawPrimitive((horiz ? PE_ArrowLeft : PE_ArrowUp), p, ar, cg, flags); + + break; + } + + case PE_ScrollBarAddLine: { // bottom / right button + + QRect cr = r; + QRect ar = r; + QRect sr = r; + if(horiz) { + sr.setWidth(13); + ar.setX(r.x()-4); + } + else { + sr.setHeight(13); + ar.setY(r.y()-2); + ar.setX(r.x()+1); + } + + if(horiz) { + uint contourFlags = Is_ScrollBarBtn|Is_Horizontal|Draw_Top|Draw_Bottom|Draw_Right|Round_UpperRight|Round_BottomRight; + renderSurface(p, QRect(sr.x(), sr.y(), sr.width(), sr.height()), cg.button(), cg.button(), cg.button(), Is_ScrollBarBtn|Is_Horizontal); + renderContour(p, QRect(cr.x(), cr.y(), cr.width(), cr.height()), cg.button(), cg.button(), contourFlags); + } + else { + p->setClipRegion(QRect(sr.x()+2, sr.y(), sr.width()-4, sr.height())); + renderSurface(p, QRect(sr.x(), sr.y(), sr.width(), sr.height()), cg.button(), cg.button(), cg.button(), Is_ScrollBarBtn); + p->setClipping(false); + uint contourFlags = Is_ScrollBarBtn|Draw_Bottom|Draw_Left|Draw_Right|Round_BottomLeft|Round_BottomRight; + renderContour(p, QRect(cr.x(), cr.y(), cr.width(), cr.height()), cg.button(), cg.button(), contourFlags); + } + + QColor color = dynamic_cast<QWidget*>(p->device()) ? dynamic_cast<QWidget*>(p->device())->palette().active().buttonText() : cg.buttonText(); + p->setPen(color); + drawPrimitive((horiz ? PE_ArrowRight : PE_ArrowDown), p, ar, cg, flags); + + + break; + } + + case PE_ScrollBarSubLine2: { // second top / left button // ### remove + + uint contourFlags = Is_ScrollBarBtn; + + QRect cr = r; + QRect ar = r; + QRect sr = r; + + if(horiz) { + contourFlags |= Is_Horizontal|Draw_Top|Draw_Bottom; + } + else { + ar.setX(1); + contourFlags |= Draw_Left|Draw_Right; + } + + if(horiz) { + renderSurface(p, QRect(sr.x(), sr.y(), sr.width(), sr.height()), cg.button(), cg.button(), cg.button(), Is_ScrollBarBtn|Is_Horizontal); + renderContour(p, QRect(cr.x(), cr.y(), cr.width(), cr.height()), cg.button(), cg.button(), contourFlags); + } + else { + p->setClipRegion(QRect(sr.x()+2, sr.y(), sr.width()-4, sr.height())); + renderSurface(p, QRect(sr.x(), sr.y(), sr.width(), sr.height()), cg.button(), cg.button(), cg.button(), Is_ScrollBarBtn); + p->setClipping(false); + renderContour(p, QRect(cr.x(), cr.y(), cr.width(), cr.height()), cg.button(), cg.button(), contourFlags); + } + + QColor color = dynamic_cast<QWidget*>(p->device()) ? dynamic_cast<QWidget*>(p->device())->palette().active().buttonText() : cg.buttonText(); + p->setPen(color); + drawPrimitive((horiz ? PE_ArrowLeft : PE_ArrowUp), p, ar, cg, flags); + + break; + } + + // CHECKBOXES + // ---------- + case PE_Indicator: { + break; + } + + case PE_IndicatorMask: { + p->fillRect (r.x()+3, r.y()+3, r.width()-6, r.height()-7, color1); + break; + } + + // RADIOBUTTONS + // ------------ + case PE_ExclusiveIndicator: { + break; + } + + case PE_ExclusiveIndicatorMask: { + + QPointArray pa(8); + pa.setPoint(0, 3,6); + pa.setPoint(1, 6,3); + pa.setPoint(2, 10,3); + pa.setPoint(3, 13,6); + pa.setPoint(4, 13,10); + pa.setPoint(5, 10,13); + pa.setPoint(6, 6,13); + pa.setPoint(7, 3,10); + + p->setBrush(color1); + p->setPen(color1); + p->drawPolygon(pa); + break; + } + + // GENERAL PANELS + // -------------- + case PE_Splitter: { + + p->fillRect(r, cg.background()); + int ch, cs, cv; + cg.background().getHsv(ch, cs, cv); + if(cv < 100) + p->setPen(alphaBlendColors(cg.background(), white, 120)); + else + p->setPen(alphaBlendColors(cg.background(), black, 180)); + + p->setPen(dGetColor(cg.background(), 55)); + if (w > h) { + int ycenter = r.height()/2; + for(int k =r.width()/2-5; k < r.width()/2+5; k+=3) { + p->drawRect(k, ycenter-1, 2,2); + } + } + else { + int xcenter = r.width()/2; + for(int k =r.height()/2-5; k < r.height()/2+5; k+=3) { + p->drawRect( xcenter-1, k, 2,2); + } + } + + break; + } + + case PE_GroupBoxFrame: + case PE_PanelGroupBox: { // QFrame::GroupBoxPanel + break; + } + + case PE_WindowFrame: { + if ( opt.isDefault() || opt.lineWidth() <= 0 ) + break; + + p->setPen(cg.background().dark(120)); + p->drawRect(r); + p->setPen(cg.background().light(110)); + p->drawRect(QRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2)); + + break; + } + + case PE_Panel: { // QFrame::StyledPanel + if(kickerMode) + break; + + p->save(); + // inside rect + p->setPen(cg.background().dark(120)); + p->drawLine(r.x()+1, r.y()+1, r.right()-1, r.y()+1); //top + p->drawLine(r.x()+1, r.bottom()-1, r.right()-1, r.bottom()-1); + p->drawLine(r.x()+1, r.y()+1, r.x()+1, r.bottom()-1); + p->drawLine(r.right()-1, r.y()+1, r.right()-1, r.bottom()-1); + + // outside rect + p->setPen(cg.background()); + p->drawLine(r.x(), r.y(), r.right(), r.y()); //top + p->setPen(alphaBlendColors(white, cg.background(), 30)); + p->drawLine(r.x(), r.y()+1, r.x(), r.bottom()); + p->drawLine(r.right(), r.y()+1, r.right(), r.bottom()); + p->setPen(alphaBlendColors(white, cg.background(), 50)); + p->drawLine(r.x()+1, r.bottom(), r.right()-1, r.bottom()); + + p->restore(); // maybe we are a KArrowButton and need to draw the arrow + break; + } + + case PE_PanelLineEdit: { // QFrame::LineEditPanel + break; + } + + case PE_PanelTabWidget: { // QFrame::TabWidgetPanel + + // we get a wrong clip rect + p->setClipping(false); + + bool roundTopLeft = true; + bool roundTopRight = true; + bool roundBottomLeft = true; + bool roundBottomRight = true; + bool tabsAbove = true; + +// p->fillRect(QRect(r.x()-10, r.y()-10, r.width()+20, r.height()+20), yellow); + + QRect tr; + QWidget* w = dynamic_cast<QWidget*>(p->device()); + QTabWidget* tw = w ? dynamic_cast<QTabWidget*>(w->parentWidget()) : 0; + bool tabBarHidden = tw && !((DominoQTabWidget*)tw)->tabBar()->isVisible(); + if(tw && !tabBarHidden) { + + tabsAbove = tw->tabPosition() == QTabWidget::Top; + + if(tw->count() != 0) { + + QTabBar* tb = ((DominoQTabWidget*)tw)->tabBar(); + QRect gr = tb->geometry(); + + if(tb->isVisible()) { + tr = tb->tabAt(tw->currentPageIndex())->rect(); + tr.setHeight(3); + tr.moveBy(gr.x(), tabsAbove ? 0 : r.height()-2); + } + + if(!tw->cornerWidget(Qt::TopLeft) && gr.x() < 7) { + if(tabsAbove) + roundTopLeft = false; + else + roundBottomLeft = false; + } + if(!tw->cornerWidget(Qt::TopRight) && gr.x()+gr.width() > tw->width()-7) { + if(tabsAbove) + roundTopRight = false; + else + roundBottomRight = false; + } + } + } + QBrush background = tw ? tw->colorGroup().brush(QColorGroup::Background) : cg.brush(QColorGroup::Background); + QColor bottomGradient = alphaBlendColors(QColor(0,0,0), cg.background(), 11); + QColor topGradient = alphaBlendColors(QColor(255,255,255), cg.background(), 15); + QColor tabContour2 = cg.background().dark(150); + + + QString tabPos = tabsAbove ? "1" : "0"; + QPixmap* tabWEdges; + if(!(tabWEdges = QPixmapCache::find("tabWEdges"+tabPos+QString::number(background.color().pixel(), 16)+QString::number(cg.background().pixel(), 16)))) { + tabWEdges = new QPixmap(16,16); + QPainter painter(tabWEdges); + painter.fillRect(tabWEdges->rect(), background); + painter.end(); + + QPixmap tabWEdgesMask = qembed_findImage("groupBoxMask"); + painter.begin(&tabWEdgesMask); + painter.fillRect(tabWEdgesMask.rect(), cg.brush(QColorGroup::Background)); + painter.end(); + bitBlt(tabWEdges, 0, 0, &tabWEdgesMask); + + QPixmap circle = qembed_findImage("tabWidget"); + bitBlt(tabWEdges, 0, 0, &circle); + + QPixmapCache::insert("tabWEdges"+tabPos+QString::number(background.color().pixel(), 16)+QString::number(cg.background().pixel(), 16), tabWEdges); + } + + + QRect re = QRect(r.x(), r.y(), r.width(), r.height()+1); + QColor bg = cg.background(); + QColor bg2 = background.color(); // parent color + + // top + QColor c1 = alphaBlendColors(QColor(0,0,0), bg2, 25); + QColor c2 = alphaBlendColors(QColor(255,255,255), bg, 70); + QColor c3 = alphaBlendColors(QColor(255,255,255), bg, 30); + + // left + right + QColor c4 = alphaBlendColors(QColor(0,0,0), bg2, 40); +// QColor c5 = alphaBlendColors(QColor(255,255,255), bg, 30); + QColor c6 = alphaBlendColors(QColor(255,255,255), bg, 4); + + // bottom + QColor c7 = alphaBlendColors(QColor(249,249,249), bg, 25); + QColor c8 = alphaBlendColors(QColor(0,0,0), bg2, 79); + QColor c9 = alphaBlendColors(QColor(0,0,0), bg2, 30); + + // top + p->setPen(c1); + p->drawLine(re.left(), re.y(), re.right(), re.y()); + p->setPen(c2); + p->drawLine(re.left(), re.y()+1, re.right(), re.y()+1); + p->setPen(c3); + p->drawLine(re.left(), re.y()+2, re.right(), re.y()+2); + // bottom + p->setPen(c7); + p->drawLine(re.left()+1, re.bottom()-2, re.right(), re.bottom()-2); + p->setPen(c8); + p->drawLine(re.left()+1, re.bottom()-1, re.right(), re.bottom()-1); + p->setPen(c9); + p->drawLine(re.left(), re.bottom(), re.right(), re.bottom()); + // left + p->setPen(c4); + p->drawLine(re.left(), re.y()+1, re.left(), re.bottom()-1); + p->setPen(c3); + p->drawLine(re.left()+1, re.y()+2, re.left()+1, re.bottom()-2); + p->setPen(c6); + p->drawLine(re.left()+2, re.y()+3, re.left()+2, re.bottom()-3); + // right + p->drawLine(re.right()-2, re.y()+3, re.right()-2, re.bottom()-3); + p->setPen(c3); + p->drawLine(re.right()-1, re.y()+2, re.right()-1, re.bottom()-2); + p->setPen(c4); + p->drawLine(re.right(), re.y()+1, re.right(), re.bottom()-1); + + + // unpainted area + p->setPen(bg); + p->drawLine(re.left()+3, re.y()+3, re.right()-3, re.y()+3); + p->drawLine(re.left()+3, re.bottom()-4, re.right()-3, re.bottom()-4); + p->drawLine(re.left()+3, re.bottom()-3, re.right()-3, re.bottom()-3); + p->drawLine(re.left()+3, re.y()+3, re.left()+3, re.bottom()-4); + p->drawLine(re.right()-3, re.y()+3, re.right()-3, re.bottom()-4); + + + if(roundTopLeft) { + bitBlt(p->device(), re.x(), re.y(), tabWEdges, 0, 0, 8, 8, Qt::CopyROP); + } + if(roundTopRight) { + bitBlt(p->device(), re.width()-8, re.y(), tabWEdges, 8, 0, 8, 8, Qt::CopyROP); + } + if(roundBottomLeft) { + bitBlt(p->device(), re.x(), re.height()-8, tabWEdges, 0, 8, 8, 8, Qt::CopyROP); + } + if(roundBottomRight) { + bitBlt(p->device(), re.width()-8, re.height()-8, tabWEdges, 8, 8, 8, 8, Qt::CopyROP); + } + + + // paint over the frame to not disturb the transition from the tabWidget to the current tab + if(tr.isValid()) { + p->fillRect(tr, cg.background()); // ### shrink + + if(tabsAbove) { + QColor p1 = alphaBlendColors(QColor(255,255,255), bg, 50); + QColor p2 = alphaBlendColors(QColor(255,255,255), bg, 25); + QColor p3 = alphaBlendColors(QColor(255,255,255), bg, 10); + + p->setPen(p1); + p->drawPoint(tr.left(), tr.top()+1); + p->drawPoint(tr.right(), tr.top()+1); + p->setPen(p2); + p->drawPoint(tr.left()+1, tr.top()+1); + p->drawPoint(tr.left(), tr.top()+2); + p->drawPoint(tr.right()-1, tr.top()+1); + p->drawPoint(tr.right(), tr.top()+2); + p->setPen(p3); + p->drawPoint(tr.left()+1, tr.top()+2); + p->drawPoint(tr.right()-1, tr.top()+2); + } + else { + QColor p1 = alphaBlendColors(QColor(255,255,255), bg, 17); + QColor p2 = alphaBlendColors(QColor(255,255,255), bg, 10); + + p->setPen(p1); + p->drawPoint(tr.left(), tr.top()); + p->drawPoint(tr.right(), tr.top()); + + p->setPen(p2); + p->drawPoint(tr.left()+1, tr.top()); + p->drawPoint(tr.right()-1, tr.top()); + + } + + } + + break; + } + + case PE_PanelPopup: { // QFrame::PopupPanel + + QPopupMenu* pm = dynamic_cast<QPopupMenu*>(p->device()); + QColor background = dynamic_cast<QListBox*>(p->device()) ? cg.base() : _customPopupMenuColor ? _popupMenuColor : cg.background(); + + QRegion mask(x, y+5, w, h-10); + mask += QRegion(x+5, y, w-10, h); + mask += QRegion(x+1, y+2, w-2, h-4); + mask += QRegion(x+2, y+1, w-4, h-2); + + if(_drawPopupMenuGradient) { + QPixmap buffer(r.width(), r.height()); + QPainter bp(&buffer); + renderGradient(&bp, r, lightenColor(background, 18), darkenColor(background, 12), true); + + if(pm) { + pm->setUpdatesEnabled(false); + pm->setPaletteBackgroundPixmap(buffer); + pm->setUpdatesEnabled(true); + } + else { + p->setClipRegion(mask); + p->drawPixmap(r, buffer); + p->setClipping(false); + } + } + else { + if(pm) { + pm->setUpdatesEnabled(false); + pm->setPaletteBackgroundColor(background); + pm->setUpdatesEnabled(true); + } + } + + if(pm) { + if(pm->isA("PrettyPopupMenu") || pm->isA("Amarok::Menu") || pm->isA("Digikam::DPopupMenu")) { + // these popups have a side pixmap and are drawing the frame after the contents + QRect cr = pm->contentsRect(); + if(QApplication::reverseLayout()) + pm->erase(mask-QRegion(cr.width()+3, cr.y(), r.width()-cr.width()-6, cr.height()-1)); + else + pm->erase(mask-QRegion(r.x()+3, cr.y(), r.width()-cr.width()-6, cr.height()-1)); + ((DominoQFrame*)pm)->drawContents(p ); + } + else + pm->erase(mask); + } + + + bitBlt(p->device(), r.x(), r.y(), popupFrame, 0, 0, 5, 5, Qt::CopyROP); + bitBlt(p->device(), r.width()-5, r.y(), popupFrame, 5, 0, 5, 5, Qt::CopyROP); + bitBlt(p->device(), r.x(), r.bottom()-4, popupFrame, 0, 5, 5, 5, Qt::CopyROP); + bitBlt(p->device(), r.width()-5, r.bottom()-4, popupFrame, 5, 5, 5, 5, Qt::CopyROP); + + p->setPen(background.dark(150)); + p->drawLine(r.x()+5, r.y(), r.width()-6, r.y()); + p->drawLine(r.x()+5, r.bottom(), r.width()-6, r.bottom()); + p->drawLine(r.x(), r.y()+5, r.x(), r.bottom()-5); + p->drawLine(r.width()-1, r.y()+5, r.width()-1, r.bottom()-5); + + break; + } + + // MENU / TOOLBAR PANEL + // -------------------- + case PE_PanelMenuBar: // QFrame::MenuBarPanel + case PE_PanelDockWindow: { // QFrame::ToolBarPanel + + p->setPen(cg.background()); + // overpainting the menus leads to flicker so we draw only the frame here. + if(dynamic_cast<QWidget*>(p->device())) + p->drawRect(r); + else + p->fillRect(r, cg.brush(QColorGroup::Background)); // colorpreview in kcontrol + break; + } + + case PE_StatusBarSection: { + break; + } + + case PE_TabBarBase: { + break; + } + + // TOOLBAR/DOCK WINDOW HANDLE + // -------------------------- + case PE_DockWindowResizeHandle: { + QWidget* w = dynamic_cast<QWidget*>(p->device()); // QDockWindowResizeHandle + + if(w && !w->erasePixmap()) { + QPixmap pix(r.size()); + QPainter painter(&pix); + renderGradient(&painter, r, lightenColor(cg.background(), 40), darkenColor(cg.background(), 30), horiz); + w->setErasePixmap(pix); + } + break; + } + + case PE_DockWindowHandle: { + QWidget* widget = dynamic_cast<QWidget*>(p->device()); // qt_dockwidget_internal - QDockWindowHandle + + int ch, cs, cv; + cg.background().getHsv(ch, cs, cv); + if(cv < 100) + p->setPen(alphaBlendColors(cg.background(), white, 120)); + else + p->setPen(alphaBlendColors(cg.background(), black, 180)); + + if(widget && widget == hoverWidget) { + if (w > h) { + int ycenter = r.height()/2; + for(int k = r.width()/2-5; k < r.width()/2+5; k+=3) { + p->drawRect(k, ycenter-1, 2, 2); + } + } + else { + int xcenter = r.width()/2; + for(int k = r.height()/2-5; k < r.height()/2+5; k+=3) { + p->drawRect(xcenter-1, k, 2, 2); + } + } + } + break; + } + + // TOOLBAR SEPARATOR + // ----------------- + case PE_DockWindowSeparator: { + if(!_toolBtnAsBtn) { + int ch, cs, cv; + cg.background().getHsv(ch, cs, cv); + if(cv < 100) + p->setPen(alphaBlendColors(cg.background(), white, 150)); + else + p->setPen(alphaBlendColors(cg.background(), black, 150)); + + if(horiz) { + int x = r.width()/2; + for(int i = 2; i < r.height()-4; i += 3) + p->drawPoint(x, i); + } + else { + int y = r.height()/2; + for(int i = 2; i < r.width()-4; i += 3) + p->drawPoint(i, y); + } + } + break; + } + case PE_CheckMark: { + if( flags & Style_On ) { + if(flags & Style_Enabled) + p->drawPixmap(r.x()+1, r.y()+1, *checkMark, 0, 0, 16, 17); + else + p->drawPixmap(r.x()+1, r.y()+1, *checkMark, 16, 0, 16, 17); + } + else if ( flags & Style_Off ) { + } + else {// tristate + p->setPen(_customCheckMarkColor ? _checkMarkColor : qApp->palette().active().foreground()); + p->drawLine(6,6,11,6); + p->drawLine(6,8,11,8); + p->drawLine(6,10,11,10); + } + + break; + } + + case PE_SpinWidgetUp: + case PE_SpinWidgetDown: { + QPixmap* arrow; + bool isEnabled = (flags & Style_Enabled); + QString enabled = isEnabled ? "1" : "0"; + QColor color = p->pen().color(); + + if(!(arrow = QPixmapCache::find(QString::number(color.pixel(), 16)+"spinArrows"+enabled))) { + QImage ar = tintImage(qembed_findImage("spinBoxArrows"), color); + if(!isEnabled) { // make it transparent + ar = setImageOpacity(ar, 25); + } + arrow = new QPixmap(ar); + QPixmapCache::insert(QString::number(color.pixel(), 16)+"spinArrows"+enabled, arrow); + } + + if(textEffectSettings.mode) { + QPixmap* effectArrow; + if(!(effectArrow = QPixmapCache::find(QString::number(textEffectSettings.buttonColor.pixel(), 16)+"spinEArrows"+enabled))) { + QImage img = tintImage(qembed_findImage("spinBoxArrows"), textEffectSettings.buttonColor); + int opacity = textEffectSettings.buttonOpacity*100/255; + effectArrow = new QPixmap(setImageOpacity(img, !isEnabled ? opacity*25/100 : opacity)); + QPixmapCache::insert(QString::number(textEffectSettings.buttonColor.pixel(), 16)+"spinEArrows"+enabled, effectArrow); + } + bitBlt(p->device(), r.x()+7/2+1+textEffectSettings.buttonPos.x(), r.y()+r.height()/2-3+textEffectSettings.buttonPos.y(), effectArrow, 0, pe == PE_SpinWidgetDown ? 5 : 0, 7, 5); + + } + + bitBlt(p->device(), r.x()+7/2+1, r.y()+r.height()/2-3, arrow, 0, pe == PE_SpinWidgetDown ? 5 : 0, 7, 5); + break; + } + case PE_HeaderArrow: + case PE_ArrowUp: + case PE_ArrowDown: + case PE_ArrowLeft: + case PE_ArrowRight: { + + QRect re = r; + int x2, w2, h2; + int x = -4; + switch (pe) { + case PE_ArrowUp: { + + x2 = 10; + w2 = 7; + h2 = 5; + break; + } + case PE_ArrowDown: { + x2 = 17; + w2 = 7; + h2 = 5; + break; + } + case PE_ArrowLeft: { + x += 1; + x2 = 0; + w2 = 5; + h2 = 7; + break; + } + case PE_ArrowRight: { + x += 2; + x2 = 5; + w2 = 5; + h2 = 7; + break; + } + default: { + if(flags & Style_Up) { + x2 = 10; + w2 = 7; + h2 = 5; + } + else { + x2 = 17; + w2 = 7; + h2 = 5; + } + break; + } + } + + + QPixmap* arrow; + bool isEnabled = (flags & Style_Enabled); + QString enabled = isEnabled ? "1" : "0"; + QColor color = p->pen().color(); + + if(!(arrow = QPixmapCache::find(QString::number(color.pixel(), 16)+"scrollBarArrows"+enabled))) { + QImage ar = tintImage(qembed_findImage("scrollBarArrows"), color); + if(!isEnabled) { + ar = setImageOpacity(ar, 25); + } + arrow = new QPixmap(ar); + QPixmapCache::insert(QString::number(color.pixel(), 16)+"scrollBarArrows"+enabled, arrow); + } + + if(/*pe == PE_HeaderArrow &&*/ textEffectSettings.mode) { + QPixmap* effectArrow; + if(!(effectArrow = QPixmapCache::find(QString::number(textEffectSettings.buttonColor.pixel(), 16)+"scrollBarEArrows"+enabled))) { + QImage img = tintImage(qembed_findImage("scrollBarArrows"), textEffectSettings.buttonColor); + int opacity = textEffectSettings.buttonOpacity*100/255; + effectArrow = new QPixmap(setImageOpacity(img, !isEnabled ? opacity*25/100 : opacity)); + QPixmapCache::insert(QString::number(textEffectSettings.buttonColor.pixel(), 16)+"scrollBarEArrows"+enabled, effectArrow); + } + p->drawPixmap(re.x()+re.width()/2+x+textEffectSettings.buttonPos.x(), re.y()+re.height()/2-3+textEffectSettings.buttonPos.y(), *effectArrow, x2, 0, w2, h2); + } + + p->drawPixmap(re.x()+re.width()/2+x, re.y()+re.height()/2-3, *arrow, x2, 0, w2, h2); + break; + } + + case PE_CheckListIndicator: { + // the rect in not correctly calculated in Qt, so the controller rect is 2px above the drawn rect. + + QCheckListItem *item = opt.checkListItem(); + QListView *lv = item->listView(); + if(!item) + return; + + QString state = flags& Style_On ? "1" : "0"; + state += flags& Style_Selected ? "1" : "0"; + state += flags& Style_NoChange ? "1" : "0"; + + QColor background = flags& Style_Selected ? cg.highlight() : cg.base(); + QColor foreground = cg.text(); + + QPixmap* pix; + if(!(pix = QPixmapCache::find(QString::number(background.pixel(), 16)+QString::number(foreground.pixel(), 16)+"checkListIndicator"+state))) { + pix = new QPixmap(r.x()+lv->itemMargin()+r.width()+4, item->height()); + pix->fill(background); + QPainter painter(pix); + + painter.setPen(alphaBlendColors(foreground, background, 127)); + painter.drawLine(r.x()+1, r.y()+1, r.x()+12, r.y()+1); // t + painter.drawLine(r.x()+1, r.y()+14, r.x()+12, r.y()+14); // b + painter.drawLine(r.x(), r.y()+2, r.x(), r.y()+13); // l + painter.drawLine(r.x()+13, r.y()+2, r.x()+13, r.y()+13); // r + + painter.setPen(alphaBlendColors(foreground, background, 80)); + painter.drawPoint(r.x(), r.y()+1); + painter.drawPoint(r.x()+13, r.y()+1); + painter.drawPoint(r.x(), r.y()+14); + painter.drawPoint(r.x()+13, r.y()+14); + + + if(flags& Style_NoChange) { + painter.fillRect(r.x()+1, r.y()+2, 12, 12, dGetColor(background, 30)); + painter.drawPixmap(r.x()-1, r.y(), tintImage(qembed_findImage("checkmark"), foreground)); + } + if(flags& Style_On) + painter.drawPixmap(r.x()-1, r.y(), tintImage(qembed_findImage("checkmark"), foreground)); + + QPixmapCache::insert(QString::number(background.pixel(), 16)+QString::number(foreground.pixel(), 16)+"checkListIndicator"+state, pix); + } + + p->drawPixmap(0, 0, *pix); + break; + } + + case PE_CheckListExclusiveIndicator: { + QColor background = flags& Style_Selected ? cg.highlight() : cg.base(); + p->drawPixmap(r.left()+3, r.top()+1, tintImage(qembed_findImage("checkListExclusiveIndicator"), alphaBlendColors(cg.text(), background, 127))); + + if(flags&Style_On) + p->drawPixmap(r.x()+7, r.y()+5, tintImage(qembed_findImage("rb-dot"),cg.text())); + break; + } + + case PE_SizeGrip: { + + bool parentBgPix = cg.brush(QColorGroup::Background).pixmap(); + QString trans = parentBgPix ? "1" : "0"; + QPixmap* grip; + if(!(grip = QPixmapCache::find(QString::number(cg.background().pixel(), 16)+"sizeGrip"+trans))) { + if(parentBgPix) + grip = new QPixmap(qembed_findImage("sizeGrip")); + else { + grip = new QPixmap(4, 4); + grip->fill(cg.background()); + QPixmap tmpPix = qembed_findImage("sizeGrip"); + bitBlt(grip, 0, 0, &tmpPix, 0, 0, -1, -1, Qt::CopyROP); + } + QPixmapCache::insert(QString::number(cg.background().pixel(), 16)+"sizeGrip"+trans, grip); + } + + bitBlt(p->device(), r.width()-(QApplication::reverseLayout() ? 12 : 6), r.height()-12, grip, 0, 0, -1, -1, Qt::CopyROP); + bitBlt(p->device(), r.width()-6, r.height()-6, grip, 0, 0, -1, -1, Qt::CopyROP); + bitBlt(p->device(), r.width()-12, r.height()-6, grip, 0, 0, -1, -1, Qt::CopyROP); + break; + } + + + + + case PE_RubberBand: { + +#if KDE_VERSION >= 0x30506 + if(rubberBandType != ArgbRubber || !compositeManagerRunning) { +#else + if(rubberBandType != ArgbRubber) { +#endif + if(rubberBandType == LineRubber) { + p->save(); + p->setPen(QPen(black, 1, Qt::SolidLine)); + p->drawRect(r); + p->restore(); + } + else { + KStyle::drawPrimitive(pe, p, r, cg, flags, opt); + } + break; + } + + + + bool normalized = r.width() < 0 || r.height() < 0; + QRect re = normalized? r.normalize(): r; + + if(re.y() < 0) + re.setY(-3); + if(re.x() < 0) + re.setX(-3); + + + if(!viewPortPressed || re == oldRubberRect || re.width() == 0 || re.height() == 0) { + break; + } + + QColor fg = alphaBlendColors(_argbRubberBandColor, black, 127); + const QWidget* w = dynamic_cast<QWidget*>(p->device()); + if(!w) + w = rubberViewPort; + + QPoint po = w->mapToGlobal(QPoint(0,0)); + QRect gr = QRect(po.x(), po.y(), w->width(), w->height()); + + QRegion mask(re.x()+1, re.y(), re.width()-2, re.height()); + mask += QRegion(re.x(), re.y()+1, re.width(), re.height()-2); + + rubber->create(gr, mask); + + + GC gc2 = XCreateGC(qt_xdisplay(), rubber->window, 0, 0); + + /////// erasing + XRectangle xrect; + XRectangle outline[4]; + int num = 0; + if(re.y() < oldRubberRect.y()) {// ^ top + outline[num].x = oldRubberRect.x(); + outline[num].y = oldRubberRect.y(); + outline[num].width = oldRubberRect.width(); + outline[num].height = 1; + num += 1; + + } + if(oldRubberRect.y()+oldRubberRect.height() < re.y()+re.height()) {// v bottom + outline[num].x = oldRubberRect.x(); + outline[num].y = oldRubberRect.y()+oldRubberRect.height()-1; + outline[num].width = oldRubberRect.width(); + outline[num].height = 1; + num += 1; + } + if(re.x() < oldRubberRect.x()) {// < left + outline[num].x = oldRubberRect.x(); + outline[num].y = oldRubberRect.y(); + outline[num].width = 1; + outline[num].height = oldRubberRect.height()-1; + num += 1; + } + + if(oldRubberRect.x()+oldRubberRect.width() < re.x()+re.width()) {// > right + outline[num].x = oldRubberRect.x()+oldRubberRect.width()-1; + outline[num].y = oldRubberRect.y(); + outline[num].width = 1; + outline[num].height = oldRubberRect.height()-1; + num += 1; + } + + for(int i = 0; i<num; i++) + XClearArea(qt_xdisplay(), rubber->window, outline[i].x, outline[i].y, outline[i].width, outline[i].height, false); + + xrect.x = oldRubberRect.x()+1; + xrect.y = oldRubberRect.y()+1; + xrect.width = 2; + xrect.height = 2; + XClearArea(qt_xdisplay(), rubber->window, xrect.x, xrect.y, xrect.width, xrect.height, false); + + xrect.x = oldRubberRect.x()+1; + xrect.y = oldRubberRect.y()+oldRubberRect.height()-3; + xrect.width = 2; + xrect.height = 2; + XClearArea(qt_xdisplay(), rubber->window, xrect.x, xrect.y, xrect.width, xrect.height, false); + + xrect.x = oldRubberRect.x()+oldRubberRect.width()-3; + xrect.y = oldRubberRect.y()+1; + xrect.width = 2; + xrect.height = 2; + XClearArea(qt_xdisplay(), rubber->window, xrect.x, xrect.y, xrect.width, xrect.height, false); + + xrect.x = oldRubberRect.x()+oldRubberRect.width()-3; + xrect.y = oldRubberRect.y()+oldRubberRect.height()-3; + xrect.width = 2; + xrect.height = 2; + XClearArea(qt_xdisplay(), rubber->window, xrect.x, xrect.y, xrect.width, xrect.height, false); + + + rubber->updateMask(mask); + + ///////////// painting + + XSetForeground(qt_xdisplay(), gc2, preMultiplyColor(qRgba(fg.red(), fg.green(), fg.blue(),153))); + XDrawRectangle(qt_xdisplay(), rubber->window, gc2, re.x(), re.y(), re.width()-1, re.height()-1); + + // inside + XRectangle xrects[8]; + // top left + xrects[0].x = re.x()+2; + xrects[0].y = re.y()+1; + xrects[0].width = 1; + xrects[0].height = 1; + + xrects[1].x = re.x()+1; + xrects[1].y = re.y()+2; + xrects[1].width = 1; + xrects[1].height = 1; + // top right + xrects[2].x = re.x()+re.width()-3; + xrects[2].y = re.y()+1; + xrects[2].width = 1; + xrects[2].height = 1; + + xrects[3].x = re.x()+re.width()-2; + xrects[3].y = re.y()+2; + xrects[3].width = 1; + xrects[3].height = 1; + // bottom left + xrects[4].x = re.x()+1; + xrects[4].y = re.y()+re.height()-3; + xrects[4].width = 1; + xrects[4].height = 1; + + xrects[5].x = re.x()+2; + xrects[5].y = re.y()+re.height()-2; + xrects[5].width = 1; + xrects[5].height = 1; + // bottom right + xrects[6].x = re.x()+re.width()-2; + xrects[6].y = re.y()+re.height()-3; + xrects[6].width = 1; + xrects[6].height = 1; + + xrects[7].x = re.x()+re.width()-3; + xrects[7].y = re.y()+re.height()-2; + xrects[7].width = 1; + xrects[7].height = 1; + + QColor blendc = qRgba(fg.red(), fg.green(), fg.blue(), 36); + XSetForeground(qt_xdisplay(), gc2, preMultiplyColor(blendColors(_argbRubberBandColor, blendc).rgb())); + XSetClipRectangles(qt_xdisplay(), gc2, 0, 0, xrects, 8, Unsorted); + XDrawRectangle(qt_xdisplay(), rubber->window, gc2, re.x()+1, re.y()+1, re.width()-3, re.height()-3); + + XRectangle xrects2[8]; + // top left + xrects2[0].x = re.x()+2; + xrects2[0].y = re.y(); + xrects2[0].width = 1; + xrects2[0].height = 1; + + xrects2[1].x = re.x()+1; + xrects2[1].y = re.y()+1; + xrects2[1].width = 1; + xrects2[1].height = 1; + + xrects2[2].x = re.x(); + xrects2[2].y = re.y()+2; + xrects2[2].width = 1; + xrects2[2].height = 1; + // top right + xrects2[3].x = re.x()+re.width()-3; + xrects2[3].y = re.y(); + xrects2[3].width = 1; + xrects2[3].height = 1; + + xrects2[4].x = re.x()+re.width()-2; + xrects2[4].y = re.y()+1; + xrects2[4].width = 1; + xrects2[4].height = 1; + + xrects2[5].x = re.x()+re.width()-1; + xrects2[5].y = re.y()+2; + xrects2[5].width = 1; + xrects2[5].height = 1; + // bottom left + xrects2[6].x = re.x()+2; + xrects2[6].y = re.y()+re.height()-1; + xrects2[6].width = 1; + xrects2[6].height = 1; + + xrects2[7].x = re.x()+1; + xrects2[7].y = re.y()+re.height()-2; + xrects2[7].width = 1; + xrects2[7].height = 1; + + xrects2[8].x = re.x(); + xrects2[8].y = re.y()+re.height()-3; + xrects2[8].width = 1; + xrects2[8].height = 1; + // bottom right + xrects2[9].x = re.x()+re.width()-3; + xrects2[9].y = re.y()+re.height()-1; + xrects2[9].width = 1; + xrects2[9].height = 1; + + xrects2[10].x = re.x()+re.width()-2; + xrects2[10].y = re.y()+re.height()-2; + xrects2[10].width = 1; + xrects2[10].height = 1; + + xrects2[11].x = re.x()+re.width()-1; + xrects2[11].y = re.y()+re.height()-3; + xrects2[11].width = 1; + xrects2[11].height = 1; + + + XSetForeground(qt_xdisplay(), gc2, preMultiplyColor(qRgba(fg.red(), fg.green(), fg.blue(), 121))); + XSetClipRectangles(qt_xdisplay(), gc2, 0, 0, xrects2, 12, Unsorted); + XDrawRectangle(qt_xdisplay(), rubber->window, gc2, re.x()+1, re.y()+1, re.width()-3, re.height()-3); + XDrawRectangle(qt_xdisplay(), rubber->window, gc2, re.x(), re.y(), re.width()-1, re.height()-1); + + // outermost pixels + XRectangle xrects3[8]; + // top left + xrects3[0].x = re.x()+1; + xrects3[0].y = re.y(); + xrects3[0].width = 1; + xrects3[0].height = 1; + + xrects3[1].x = re.x(); + xrects3[1].y = re.y()+1; + xrects3[1].width = 1; + xrects3[1].height = 1; + // top right + xrects3[2].x = re.x()+re.width()-2; + xrects3[2].y = re.y(); + xrects3[2].width = 1; + xrects3[2].height = 1; + + xrects3[3].x = re.x()+re.width()-1; + xrects3[3].y = re.y()+1; + xrects3[3].width = 1; + xrects3[3].height = 1; + // bottom left + xrects3[4].x = re.x()+1; + xrects3[4].y = re.y()+re.height()-1; + xrects3[4].width = 1; + xrects3[4].height = 1; + + xrects3[5].x = re.x(); + xrects3[5].y = re.y()+re.height()-2; + xrects3[5].width = 1; + xrects3[5].height = 1; + // bottom right + xrects3[6].x = re.x()+re.width()-2; + xrects3[6].y = re.y()+re.height()-1; + xrects3[6].width = 1; + xrects3[6].height = 1; + + xrects3[7].x = re.x()+re.width()-1; + xrects3[7].y = re.y()+re.height()-2; + xrects3[7].width = 1; + xrects3[7].height = 1; + + XSetForeground(qt_xdisplay(), gc2, preMultiplyColor(qRgba(fg.red(), fg.green(), fg.blue(), 37))); + XSetClipRectangles(qt_xdisplay(), gc2, 0, 0, xrects3, 8, Unsorted); + XDrawRectangle(qt_xdisplay(), rubber->window, gc2, re.x(), re.y(), re.width()-1, re.height()-1); + + XFlush(qt_xdisplay()); + XFreeGC(qt_xdisplay(),gc2); + oldRubberRect = re; + + break; + } + + default: { + return KStyle::drawPrimitive(pe, p, r, cg, flags, opt); + } + } +} + +void DominoStyle::drawControl(ControlElement element, + QPainter *p, + const QWidget *widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + const QStyleOption& opt) const +{ + + const bool enabled = (flags & Style_Enabled); + + //return KStyle::drawControl(element, p, widget, r, cg, flags, opt); + + switch (element) { + + case CE_ToolButtonLabel: { + + if(widget->isA("KToolBarButton")) { + DominoKToolBarButton* tb= (DominoKToolBarButton *) widget; + + QStyle::SFlags flags = QStyle::Style_Default; + QStyle::SCFlags active = QStyle::SC_None; + + if (tb->isDown()) { + flags |= QStyle::Style_Down; + active |= QStyle::SC_ToolButton; + } + if (tb->isEnabled()) flags |= QStyle::Style_Enabled; + if (tb->isOn()) flags |= QStyle::Style_On; + if (tb->isEnabled() && tb->hasMouse()) flags |= QStyle::Style_Raised; + if (tb->hasFocus()) flags |= QStyle::Style_HasFocus; + + int dx, dy; + QFont tmp_font(KGlobalSettings::toolBarFont()); + QFontMetrics fm(tmp_font); + QRect textRect; + int textFlags = 0; + + + QPixmap pixmap; + if (tb->iconTextMode() != KToolBar::TextOnly) { + pixmap =tb->iconSet().pixmap( QIconSet::Automatic, + tb->isEnabled() ? (tb->isActive() ? QIconSet::Active : QIconSet::Normal) : + QIconSet::Disabled, + tb->isOn() ? QIconSet::On : QIconSet::Off ); + + QImage img = pixmap.convertToImage(); + if((_toolBtnAsBtn || tb->isToggleButton()) && (tb->isDown() || tb->isOn())) + pixmap = KImageEffect::fade(img, 0.10, black); + else if(tb->isDown() || tb->isOn()) + pixmap = KImageEffect::fade(img, 0.15, black); + else if(_highlightToolBtnIcon && tb->hasMouse() && tb->isEnabled()) + pixmap = KImageEffect::fade(img, 0.25, white); + + } + + QPixmap outlinePixmap = 0; + bool drawOutlinePixmap = false; + if(flags &QStyle::Style_HasFocus && focusIndicatorSettings.indicateFocus && !pixmap.isNull()) { + outlinePixmap = renderOutlineIcon(&pixmap); + drawOutlinePixmap = true; + } + + if (tb->iconTextMode() == KToolBar::IconOnly) // icon only + { + if( !pixmap.isNull()) + { + + dx = ( tb->width() - pixmap.width() ) / 2; + dy = ( tb->height()-1 - pixmap.height() ) / 2; + + if(drawOutlinePixmap) { + p->drawPixmap( dx-1, dy-1, outlinePixmap ); + } + + p->drawPixmap( dx, dy, pixmap ); + } + } + + else if (tb->iconTextMode() == KToolBar::IconTextRight) // icon and text (if any) + { + if( !pixmap.isNull()) + { + dx = 4; + dy = ( tb->height()-1 - pixmap.height() ) / 2; + + if(drawOutlinePixmap) { + p->drawPixmap( dx-1, dy-1, outlinePixmap ); + } + + p->drawPixmap( dx, dy, pixmap ); + } + if (!tb->textLabel().isNull()) + { + textFlags = AlignVCenter|AlignLeft; + if (!pixmap.isNull()) + dx = 4 + pixmap.width() + 2; + else + dx = 4; + dy = 0; + + textRect = QRect(dx, dy, tb->width()-dx, tb->height()-1); + } + } + else if (tb->iconTextMode() == KToolBar::TextOnly) + { + if (!tb->textLabel().isNull()) + { + textFlags = AlignVCenter|AlignLeft; + dx = (tb->width() - fm.width(tb->textLabel())) / 2; + dy = (tb->height()-1 - fm.lineSpacing()) / 2; + + textRect = QRect( dx, dy, fm.width(tb->textLabel()), fm.lineSpacing() ); + } + } + else if (tb->iconTextMode() == KToolBar::IconTextBottom) + { + if( !pixmap.isNull()) + { + dx = (tb->width() - pixmap.width()) / 2; + dy = (tb->height()-1 - fm.lineSpacing() - pixmap.height()) / 2; + + if(drawOutlinePixmap) { + p->drawPixmap( dx-1, dy-1, outlinePixmap ); + } + + p->drawPixmap( dx, dy, pixmap ); + } + + if (!tb->textLabel().isNull()) + { + textFlags = AlignBottom|AlignHCenter; + dx = (tb->width() - fm.width(tb->textLabel())) / 2; + dy = tb->height()-1 - fm.lineSpacing() - 4; + + textRect = QRect( dx, dy, fm.width(tb->textLabel()), fm.lineSpacing() ); + } + } + if (!tb->textLabel().isNull() && !textRect.isNull()) + { + p->setFont(KGlobalSettings::toolBarFont()); + QColor pencolor; + if (!tb->isEnabled()) + pencolor = tb->palette().disabled().dark(); + // replaced through icon highlights +// else if(tb->isRaised()) +// pencolor = KGlobalSettings::toolBarHighlightColor(); + else + pencolor = tb->colorGroup().buttonText(); + + dominoDrawItem( p, textRect, textFlags, cg, enabled, 0, tb->textLabel(), -1, &pencolor, textEffectSettings.mode > 0 ? 1 : 0); + } + } + else { // QToolButton - bye bye win95 iconset mode :) + + const QToolButton *toolbutton = (const QToolButton *) widget; + QRect rect = r; + Qt::ArrowType arrowType = opt.isDefault() ? Qt::DownArrow : opt.arrowType(); + + if (!opt.isDefault()) { + PrimitiveElement pe; + switch (arrowType) { + case Qt::LeftArrow: pe = PE_ArrowLeft; break; + case Qt::RightArrow: pe = PE_ArrowRight; break; + case Qt::UpArrow: pe = PE_ArrowUp; break; + default: + case Qt::DownArrow: pe = PE_ArrowDown; break; + } + + drawPrimitive(pe, p, rect, cg, flags, opt); + } + else { + + QColor btext = toolbutton->paletteForegroundColor(); + + if (toolbutton->iconSet().isNull() && ! toolbutton->text().isNull() && ! toolbutton->usesTextLabel()) { + int alignment = AlignCenter | ShowPrefix; + if (!styleHint(SH_UnderlineAccelerator, widget, QStyleOption::Default, 0)) + alignment |= NoAccel; + dominoDrawItem( p, rect, alignment, cg, enabled, 0, toolbutton->text(), toolbutton->text().length(), &btext, textEffectSettings.mode > 0 ? 1 : 0); + } + else { + QPixmap pm; + QIconSet::Size size = toolbutton->usesBigPixmap() ? QIconSet::Large : QIconSet::Small; + QIconSet::State state = toolbutton->isOn() ? QIconSet::On : QIconSet::Off; + QIconSet::Mode mode; +/* if (!toolbutton->isEnabled()) + mode = QIconSet::Disabled; + else*/ if (flags & (Style_Down | Style_On) || (flags & Style_Raised) && (flags & Style_AutoRaise)) + mode = QIconSet::Active; + else + mode = QIconSet::Normal; + + pm = toolbutton->iconSet().pixmap( size, mode, state ); + + if(!toolbutton->isEnabled()) + pm = disableIcon(&pm); + + QImage img = pm.convertToImage(); + if((_toolBtnAsBtn || toolbutton->isToggleButton()) && (toolbutton->isDown() || toolbutton->isOn())) + pm = KImageEffect::fade(img, 0.10, black); + else if(toolbutton->isDown() || toolbutton->isOn()) + pm = KImageEffect::fade(img, 0.15, black); + else if(_highlightToolBtnIcon && toolbutton->hasMouse() && toolbutton->isEnabled()) + pm = KImageEffect::fade(img, 0.25, white); + + QPixmap outlinePixmap = 0; + bool drawOutlinePixmap = false; + if(flags &QStyle::Style_HasFocus && focusIndicatorSettings.indicateFocus) { + outlinePixmap = renderOutlineIcon(&pm); + drawOutlinePixmap = true; + } + + if ( toolbutton->usesTextLabel() ) { + p->setFont( toolbutton->font() ); + QRect pr = rect, tr = rect; + int alignment = ShowPrefix; + if (!styleHint(SH_UnderlineAccelerator, widget, QStyleOption::Default, 0)) + alignment |= NoAccel; + + if ( toolbutton->textPosition() == QToolButton::Under ) { + int fh = p->fontMetrics().height(); + pr.addCoords( 0, 1, 0, -fh-3 ); + tr.addCoords( 0, pr.bottom(), 0, -3 ); + + if(drawOutlinePixmap) + drawItem( p, pr, AlignCenter, cg, TRUE, &outlinePixmap, QString::null ); + + drawItem( p, pr, AlignCenter, cg, TRUE, &pm, QString::null ); + alignment |= AlignCenter; + } else { + pr.setWidth( pm.width() + 8 ); + tr.addCoords( pr.right(), 0, 0, 0 ); + + if(drawOutlinePixmap) + drawItem( p, pr, AlignCenter, cg, TRUE, &outlinePixmap, QString::null ); + + drawItem( p, pr, AlignCenter, cg, TRUE, &pm, QString::null ); + alignment |= AlignLeft | AlignVCenter; + } + dominoDrawItem( p, tr, alignment, cg, enabled, 0, toolbutton->textLabel(), toolbutton->textLabel().length(), &btext, textEffectSettings.mode > 0 ? 1 : 0); + } + else { + if(drawOutlinePixmap) + drawItem( p, rect, AlignCenter, cg, TRUE, &outlinePixmap, QString::null ); + + drawItem( p, rect, AlignCenter, cg, TRUE, &pm, QString::null ); + } + } + } + } + break; + } + + // PROGRESSBAR + // ----------- + case CE_ProgressBarGroove: { + drawPrimitive(PE_Panel, p, r, cg, flags, opt); + break; + } + + case CE_ProgressBarContents: { + + const QProgressBar *pb = dynamic_cast<const QProgressBar*>(widget); + int steps = pb->totalSteps(); + + const QColor bg = enabled? cg.base(): cg.background(); // background + const QColor fg = cg.background(); + bool reverseLayout = QApplication::reverseLayout(); + + QPixmap* prBgShadow; + + int h, s, v, bv; + bg.getHsv(&h, &s, &v); + cg.background().getHsv(&h, &s, &bv); + int diff = KMAX(v-bv, 0); + + // if we don't adjust the shadow to the background, it will look strange + QColor tintColor = alphaBlendColors(Qt::black, bg, diff+30); + + if(!(prBgShadow = QPixmapCache::find(QString::number(bg.pixel(), 16)+QString::number(cg.background().pixel(), 16)+"prBgShadow"))) { + prBgShadow = new QPixmap(4,4); + prBgShadow->fill(bg); + QPainter painter(prBgShadow); + painter.drawPixmap(0, 0, tintImage(qembed_findImage("progressShadow2"), tintColor)); + QPixmapCache::insert(QString::number(bg.pixel(), 16)+QString::number(cg.background().pixel(), 16)+"prBgShadow", prBgShadow); + } + + QRect surface; + QRect rightBg; + QRect leftBg; + p->setClipRegion(r); + + + if( steps == 0 ) { // Busy indicator + static const int barWidth = 10; + int progress = pb->progress() % (2*(r.width()-barWidth)); + if( progress < 0) + progress = 0; + if( progress > r.width()-barWidth ) + progress = (r.width()-barWidth)-(progress-(r.width()-barWidth)); + + surface = QRect(reverseLayout? r.right()-progress+1: r.x()+progress+1, r.top(), barWidth-2, r.height()); + rightBg = reverseLayout ? QRect(r.x(), r.y(), r.width()-(progress-1), r.height()) : + QRect(r.x()+progress+barWidth-1, r.y(), r.width()-(progress+barWidth-1), r.height()); + + if(rightBg.width()+surface.width() < r.width()) { + leftBg = reverseLayout ? QRect(rightBg.width()+surface.width(), r.y(), r.width()-(rightBg.width()+surface.width()-2), r.height()) : + QRect(r.x(), r.y(), r.x()+progress+1, r.height()); + } + } + else { + double percent = static_cast<double>(pb->progress()) / static_cast<double>(steps); + int w = static_cast<int>(r.width() * percent); + if(w < 0) + w = 0; + int w2 = r.width()-(r.width()-w); + rightBg = QRect(reverseLayout? r.left(): r.left()+w, r.top(), r.width()-w, r.height()); + surface = QRect(reverseLayout? r.right()-w2+1: r.left(), r.top(), w2, r.height()); + } + + + + QPixmap* surfaceTile; + if(!(surfaceTile = QPixmapCache::find("prTile"+QString::number(surface.height())+QString::number(bg.pixel(), 16)))) { + surfaceTile = new QPixmap(20, surface.height()); + QPainter tilePainter(surfaceTile); + + flatMode=true; + renderSurface(&tilePainter, QRect(0, 0, 20, surface.height()), fg, cg.background(), fg , Is_Button|Is_Horizontal); + flatMode=false; + + QPixmap pix = qembed_findImage("progressTile"); + tilePainter.drawTiledPixmap(0,0, 20, surface.height(), pix); + + QPixmapCache::insert("prTile"+QString::number(surface.height())+QString::number(bg.pixel(), 16), surfaceTile); + } + + + int staticShift = 0; + int animShift = 0; + + // find the animation Offset for the current Widget + QWidget* nonConstWidget = const_cast<QWidget*>(widget); + QMapConstIterator<QWidget*, int> iter = progAnimWidgets.find(nonConstWidget); + if (iter != progAnimWidgets.end()) + animShift = iter.data(); + + int counter = 0; + while(counter < (surface.width()+20)) { + counter += 20; + if (reverseLayout) { + p->drawPixmap(surface.right()-counter+animShift+staticShift+1, r.top(), *surfaceTile); + } + else { + p->drawPixmap(surface.left()+counter-20-animShift+staticShift, r.top(), *surfaceTile); + } + } + + + // empty area + + QColor color_d = alphaBlendColors(tintColor, bg, 170); + QColor color_m = alphaBlendColors(tintColor, bg, 85); + QColor color_l = alphaBlendColors(tintColor, bg, 25); + + if(leftBg.isValid()) { + p->setClipRegion(leftBg); + p->fillRect(leftBg, bg); + + p->setPen(color_d); + p->drawLine(leftBg.x()+2, leftBg.y(), leftBg.right()-2, leftBg.y()); + p->setPen(color_m); + p->drawLine(leftBg.x()+2, leftBg.y()+1, leftBg.right()-2, leftBg.y()+1); + p->setPen(color_l); + p->drawLine(leftBg.x()+2, leftBg.y()+2, leftBg.right()-2, leftBg.y()+2); + p->drawLine(leftBg.x()+2, leftBg.bottom(), leftBg.right()-2, leftBg.bottom()); + + //p->setPen(color_l); + p->drawLine(leftBg.x()+1, leftBg.y()+3, leftBg.x()+1, leftBg.bottom()-1); // l + p->drawLine(leftBg.right()-1, leftBg.y()+3, leftBg.right()-1, leftBg.bottom()-1); // r + + p->setPen(color_m); + p->drawLine(leftBg.x(), leftBg.y()+3, leftBg.x(), leftBg.bottom()-1); // l + p->drawLine(leftBg.right(), leftBg.y()+3, leftBg.right(), leftBg.bottom()-1); // r + + p->drawPixmap(leftBg.right()-1, leftBg.y(), *prBgShadow, 2, 0, 2, 3); // tr + p->drawPixmap(leftBg.x(), leftBg.y(), *prBgShadow, 0, 0, 2, 3); + p->drawPixmap(leftBg.right()-1, leftBg.bottom(), *prBgShadow, 2, 3, 2, 1); // br + p->drawPixmap(leftBg.x(), leftBg.bottom(), *prBgShadow, 0, 3, 2, 1); + } + + p->setClipRegion(rightBg); + p->fillRect(rightBg, bg); + + p->setPen(color_d); + p->drawLine(rightBg.x()+2, rightBg.y(), rightBg.right()-2, rightBg.y()); + p->setPen(color_m); + p->drawLine(rightBg.x()+2, rightBg.y()+1, rightBg.right()-2, rightBg.y()+1); + p->setPen(color_l); + p->drawLine(rightBg.x()+2, rightBg.y()+2, rightBg.right()-2, rightBg.y()+2); + p->drawLine(rightBg.x()+2, rightBg.bottom(), rightBg.right()-2, rightBg.bottom()); + + //p->setPen(color_l); + p->drawLine(rightBg.x()+1, rightBg.y()+3, rightBg.x()+1, rightBg.bottom()-1); // l + p->drawLine(rightBg.right()-1, rightBg.y()+3, rightBg.right()-1, rightBg.bottom()-1); // r + + p->setPen(color_m); + p->drawLine(rightBg.x(), rightBg.y()+3, rightBg.x(), rightBg.bottom()-1); // l + p->drawLine(rightBg.right(), rightBg.y()+3, rightBg.right(), rightBg.bottom()-1); // r + + + p->drawPixmap(rightBg.right()-1, rightBg.y(), *prBgShadow, 2, 0, 2, 3); // tr + p->drawPixmap(rightBg.x(), rightBg.y(), *prBgShadow, 0, 0, 2, 3); + p->drawPixmap(rightBg.right()-1, rightBg.bottom(), *prBgShadow, 2, 3, 2, 1); // br + p->drawPixmap(rightBg.x(), rightBg.bottom(), *prBgShadow, 0, 3, 2, 1); + + if(rightBg.width() == 2) { // must overpaint two lighter pixel + p->drawPixmap(rightBg.right(), rightBg.y()+2, *prBgShadow, 0, 3, 1, 1); // br + p->drawPixmap(rightBg.right(), rightBg.bottom(), *prBgShadow, 0, 3, 1, 1); // br + } + + p->setClipping(false); + + break; + } + case CE_ProgressBarLabel: { + const QProgressBar *progressbar = (const QProgressBar *) widget; + QFont font = p->font(); + font.setBold(false); + p->setFont(font); + p->setPen(cg.buttonText()); + //p->drawText(r, AlignCenter | SingleLine, progressbar->progressString()); + dominoDrawItem( p, r, AlignCenter | SingleLine, cg, false, 0, progressbar->progressString(), -1,&cg.buttonText(), false); + break; + } + + case CE_CheckBox: { + + QColorGroup g = cg; + if(!khtmlWidgets.contains(widget)) + g.setColor(QColorGroup::Button, qApp->palette().active().background()); + + QPixmap insidePix = qembed_findImage("checkbox2inside"); + QPainter painter(&insidePix); + renderSurface(&painter, QRect(3, 0, 14, 19), g.background(), g.button(), g.button(), Is_CheckItem); + painter.end(); + QImage inside = insidePix.convertToImage(); + + QImage checkbox; + QImage shadow = qembed_findImage("checkbox2shadow"); + QImage circle = tintImage(qembed_findImage("checkbox2rect"), buttonContour->contourColor(Contour_Default)); + blend(shadow, inside, checkbox); + blend(circle, checkbox, checkbox); + + if(flags&Style_Down) { + QImage pressed = tintImage(qembed_findImage("checkbox2pressed"), buttonContour->contourColor(Contour_Pressed)); + blend(pressed, checkbox, checkbox); + } + + QPixmap pix = QPixmap(checkbox); + if(flags&Style_On || flags&Style_NoChange) { + painter.begin(&pix); + drawPrimitive(PE_CheckMark, &painter, r, cg, flags); + painter.end(); + } + + p->drawPixmap(r.left(), r.top(), pix); + break; + } + + case CE_CheckBoxLabel: { + const QCheckBox *cb = (const QCheckBox *) widget; + + int alignment = QApplication::reverseLayout() ? AlignRight : AlignLeft; + if (!styleHint(SH_UnderlineAccelerator, widget, QStyleOption::Default, 0)) + alignment |= NoAccel; + + QRect re = focusIndicatorSettings.drawUnderline ? subRect(SR_CheckBoxFocusRect, cb) : r; + + if (flags& Style_HasFocus && focusIndicatorSettings.indicateFocus) + drawFocusIndicator(p, re, alignment | AlignVCenter |ShowPrefix, cg, flags & Style_Enabled, cb->pixmap(), cb->text(), -1, focusIndicatorSettings.color, focusIndicatorSettings.drawUnderline); + + drawItem(p, r, alignment | AlignVCenter | ShowPrefix, cg, + flags & Style_Enabled, cb->pixmap(), cb->text()); + break; + } + + // RADIOBUTTONS + // ------------ + case CE_RadioButton: { + QColorGroup g = cg; + if(!khtmlWidgets.contains(widget)) + g.setColor(QColorGroup::Button, qApp->palette().active().background()); + + QString down = flags& Style_Down ? "1" : "0"; + + QPixmap* radio; + if((flags & Domino_noCache) || !(radio = QPixmapCache::find("tabEdges"+down))) { + QImage radioImg; + + QPixmap insidePix = qembed_findImage("radio3inside"); + QPainter painter(&insidePix); + renderSurface(&painter, QRect(r.left(), r.top(), r.width(), r.height()+1), g.background(), g.button(), g.background(), Is_CheckItem); + QImage inside = insidePix.convertToImage(); + + QImage shadow = qembed_findImage("radio3shadow"); + QImage circle = tintImage(qembed_findImage("radio3circle"), buttonContour->contourColor(Contour_Default)); + blend(shadow, inside, inside); + blend(circle, inside, radioImg); + + if(flags&Style_Down) { + QImage pressed = tintImage(qembed_findImage("radio3pressed"), buttonContour->contourColor(Contour_Default)); + blend(pressed, radioImg, radioImg); + } + + radio = new QPixmap(radioImg); + if(!(flags & Domino_noCache)) + QPixmapCache::insert("radio"+down, radio); + + } + + if(flags & Style_On) { + if(flags & Style_Enabled) + bitBlt(radio, 6, 6, radioIndicator, 0, 0, 5, 5); + else + bitBlt(radio, 6, 6, radioIndicator, 5, 0, 5, 5); + } + + bitBlt(p->device(), r.x(), r.y(), radio); + break; + } + + case CE_RadioButtonLabel: { + const QRadioButton *radiobutton = (const QRadioButton *) widget; + + int alignment = QApplication::reverseLayout() ? AlignRight : AlignLeft; + if (!styleHint(SH_UnderlineAccelerator, widget, QStyleOption::Default, 0)) + alignment |= NoAccel; + + QRect re = focusIndicatorSettings.drawUnderline ? subRect(SR_RadioButtonFocusRect, radiobutton) : r; + + if (flags& Style_HasFocus && focusIndicatorSettings.indicateFocus) + drawFocusIndicator(p, re, alignment | AlignVCenter |ShowPrefix, cg, flags & Style_Enabled, radiobutton->pixmap(), radiobutton->text(), -1, focusIndicatorSettings.color, focusIndicatorSettings.drawUnderline); + + drawItem(p, r, alignment | AlignVCenter | ShowPrefix, cg, + flags & Style_Enabled, radiobutton->pixmap(), radiobutton->text()); + + break; + } + + // TABS + // ---- + case CE_TabBarTab: { + + QTabBar * tb = (QTabBar *) widget; + + bool konqTab = false; + bool kickoffTab = false; + if(tb->parentWidget()) { + const QWidget* w = tb->parentWidget(); + if(w->isA("KonqFrameTabs")) + konqTab = true; + else if(!strcmp(w->name(), "SUSE::Kickoff::KMenu")) + kickoffTab = true; + } + + QTabBar::Shape tbs = tb->shape(); + bool selected = false; + bool reverseLayout = QApplication::reverseLayout(); + if (flags & Style_Selected) selected = true; + TabPosition pos; + if (tb->count() == 1) { + pos = Single; + } else if ((tb->indexOf(opt.tab()->identifier()) == 0)) { + pos = reverseLayout?Last:First; + } else if (tb->indexOf(opt.tab()->identifier()) == tb->count() - 1) { + pos = reverseLayout?First:Last; + } else { + pos = Middle; + } + + switch (tbs) { + case QTabBar::TriangularAbove: + renderTab(p, r, cg, (flags & Style_MouseOver), selected, false, pos, true, false, konqTab); + break; + case QTabBar::RoundedAbove: + renderTab(p, r, cg, (flags & Style_MouseOver), selected, false, pos, false, false, konqTab); + break; + case QTabBar::TriangularBelow: + renderTab(p, r, cg, (flags & Style_MouseOver), selected, true, pos, true, false, konqTab); + break; + case QTabBar::RoundedBelow: + renderTab(p, r, cg, (flags & Style_MouseOver), selected, true, pos, false, false, konqTab); + break; + default: + KStyle::drawControl(element, p, widget, r, cg, flags, opt); + } + + // Qt3 uses this painter to draw the iconSet between CE_TabBarTab and CE_TabBarLabel. If we clip the painter here + // we will have a clean area to draw the icon at the right position in CE_TabBarLabel. + if(!kickoffTab) + p->setClipRect(QRect()); + break; + } + + case CE_PushButton: { + + QPushButton *button = (QPushButton *)widget; + bool khtmlMode = khtmlWidgets.contains(button); + bool isDefault = enabled && button->isDefault(); + bool isHoverWidget = enabled && button == hoverWidget; + bool isSunken = flags & Style_On || flags & Style_Down; + + uint contourFlags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom; + uint surfaceFlags = Is_Button|Is_Horizontal; + flatMode = button->isFlat(); + + QColor bg; + if(!khtmlMode && !button->paletteBackgroundPixmap()) { + + if(dynamic_cast<QGroupBox*>(button->parentWidget())) { + bg = button->parentWidget()->paletteBackgroundColor(); + } + else { + bg = cg.background(); + } + + p->fillRect(QRect(r.x(), r.y(), 6, 6), bg); + p->fillRect(QRect(r.width()-6, r.y(), 6, 6), bg); + p->fillRect(QRect(r.width()-6, r.height()-7, 6,7), bg); + p->fillRect(QRect(r.x(), r.height()-7, 6, 7), bg); + } + else { + buttonContour->setAlphaMode(); + contourFlags|=Draw_AlphaBlend; + } + if(khtmlMode) contourFlags|=Draw_AlphaBlend; + if(!enabled) { + contourFlags|=Is_Disabled; + surfaceFlags|=Is_Disabled; + } + if(isSunken) { + surfaceFlags|=Is_Down; + contourFlags|=Is_Down; + } + + if(button->isDown()) + buttonContour->setState(Contour_Pressed); + else if(isHoverWidget) + buttonContour->setState(Contour_MouseOver); + else if(isDefault) + buttonContour->setState(Contour_DefaultButton); + + if(!flatMode) { + renderSurface(p, QRect(r.x()+2, r.y()+2, r.width()-4, r.height()-5), cg.background(), cg.button(), cg.button(), surfaceFlags); + + contourFlags |= Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight|Is_Button|Is_Horizontal; + renderContour(p, r, bg, cg.button(), contourFlags); + + if(isSunken) { + renderButtonShadow(p, QRect(r.x()+2, r.y()+2, r.width()-2, r.height()-3), contourFlags); + } + } + else { + renderSurface(p, QRect(r.x()-3, r.y()-1, r.width()+6, r.height()+2), cg.background(), cg.button(), cg.button(), surfaceFlags); + + QColor contourColor = alphaBlendColors(buttonContour->contourColor(buttonContour->state), cg.background(), 179); + p->setPen(contourColor); + if(dynamic_cast<KMultiTabBarTab*>(button)) { + + const QWidget* parent = button->parentWidget(); + bool horizontal = parent->width() >= parent->height(); + + KMultiTabBar* tabBar = static_cast<KMultiTabBar*>(widget->parentWidget()->parentWidget()->parentWidget()->parentWidget()); + + KMultiTabBarTab* tab; + QPtrList<KMultiTabBarTab>* list = tabBar->tabs(); + for(tab = list->first(); tab; tab = list->next()) { + if(horizontal && tab->x()+tab->width() == widget->x()) + break; + else if(tab->y()+tab->height() == widget->y()) + break; + } + + if(tab) { + QPainter painter(tab); + painter.setPen(contourColor); + QRect re = tab->rect(); + if(horizontal) + painter.drawLine(re.right(), re.y(), re.right(), re.bottom()); // right lines + else + painter.drawLine(re.x(), re.bottom(), re.right(), re.bottom()); + } + + if(horizontal) { + if(button->x() == parent->x()) + p->drawLine(r.x(), r.y(), r.x(), r.bottom()); // first left line + p->drawLine(r.right(), r.y(), r.right(), r.bottom()); // right lines + } + else { + if(button->y() == parent->y()) + p->drawLine(r.right(), r.y(), r.right(), r.bottom()); + p->drawLine(r.x(), r.y(), r.x(), r.bottom()); + } + // middle lines + p->drawLine(r.x(), r.y(), r.right(), r.y()); + p->drawLine(r.x(), r.bottom(), r.right(), r.bottom()); + +// if(isSunken) { +// contourFlags = Draw_Top|Draw_Left|Draw_Right|Draw_Bottom|Rectangular_UpperLeft|Rectangular_UpperRight|Rectangular_BottomLeft|Rectangular_BottomRight; +// renderButtonShadow(p, QRect(r.x()-1, r.y()-1, r.width()+5, r.height()+2), contourFlags); +// renderButtonShadow(p, re), contourFlags); +// } + + + } + else { + p->drawRect(r); + } + flatMode = false; + } + + buttonContour->reset(); + break; + } + + case CE_PushButtonLabel: + { + + int x, y, w, h; + r.rect( &x, &y, &w, &h ); + + const QPushButton* button = static_cast<const QPushButton *>( widget ); + bool cornArrow = false; + bool hasFocus = button->hasFocus(); + + p->setPen(button->colorGroup().buttonText()); + + // Does the button have a popup menu? + if ( button->popup() ) + { + int dx = pixelMetric( PM_MenuButtonIndicator, widget ); + if ( button->iconSet() && !button->iconSet()->isNull() && + (dx + button->iconSet()->pixmap (QIconSet::Small, QIconSet::Normal, QIconSet::Off ).width()) >= w ) + { + cornArrow = true; //To little room. Draw the arrow in the corner, don't adjust the widget + } + else + { + drawPrimitive( PE_ArrowDown, p, visualRect( QRect(x + w - dx - 8, y + 3, dx, h - 3), r ), cg, flags, opt ); + w -= dx; + } + } + + + // Draw the icon if there is one + if ( button->iconSet() && !button->iconSet()->isNull() ) + { + QIconSet::Mode mode = QIconSet::Disabled; + QIconSet::State state = QIconSet::Off; + + if (button->isEnabled()) + mode = button->hasFocus() ? QIconSet::Active : QIconSet::Normal; + if (button->isToggleButton() && button->isOn()) + state = QIconSet::On; + + QPixmap pixmap = button->iconSet()->pixmap( QIconSet::Small, mode, state ); + bool focusIcon = hasFocus && focusIndicatorSettings.indicateFocus && !focusIndicatorSettings.drawUnderline; + int pw = pixmap.width(); + + if(button->text().isEmpty()) { + int bpw = button->pixmap() ? button->pixmap()->width() : 0; + if(focusIcon) { + QPixmap outlinePixmap = renderOutlineIcon(&pixmap); + p->drawPixmap( x + (w - bpw -outlinePixmap.width())/2, y + (h - outlinePixmap.height())/ 2, outlinePixmap ); + } + p->drawPixmap( x + (w - bpw - pw)/2, y + (h- pixmap.height()) / 2, pixmap ); + } + else { + int cw = p->fontMetrics().size(Qt::ShowPrefix, button->text()).width()+pw; + if(focusIcon) { + QPixmap outlinePixmap = renderOutlineIcon(&pixmap); + p->drawPixmap( x + (w - cw)/2 - 1 , y + (h - outlinePixmap.height())/ 2, outlinePixmap ); + } + p->drawPixmap( x + (w - cw)/2 , y + (h - pixmap.height())/ 2, pixmap ); + + } + + if (cornArrow) //Draw over the icon + drawPrimitive( PE_ArrowDown, p, visualRect( QRect(x + w - 6, x + h - 6, 7, 7), r ), cg, flags, opt ); + + x += pw + 4; + w -= pw + 4; + } + + QRect re = focusIndicatorSettings.drawUnderline ? subRect(SR_PushButtonFocusRect, button) : QRect(x, y, w, h); + + if(hasFocus && focusIndicatorSettings.indicateFocus && !button->text().isNull()) + drawFocusIndicator(p, re, AlignCenter|ShowPrefix, cg, button->isEnabled(), 0, button->text(), -1, focusIndicatorSettings.buttonColor, focusIndicatorSettings.drawUnderline, true); + + QPixmap buttonPixmap; + if(button->pixmap()) { + if(!enabled) + buttonPixmap = disableIcon(button->pixmap()); + else + buttonPixmap = *button->pixmap(); + } + dominoDrawItem( p, QRect(x, y, w, h), AlignCenter|ShowPrefix, button->colorGroup(), + enabled, button->pixmap() ? &buttonPixmap : 0, button->text(), -1, &button->colorGroup().buttonText(), textEffectSettings.mode > 0 ? 1 : 0 ); + + break; + } + case CE_TabBarLabel: { + p->setClipping(false); // was set in CE_TabBarTab to clip the icon drawing + + if ( opt.isDefault() ) + break; + const QTabBar * tb = (const QTabBar *) widget; + QTab * t = opt.tab(); + bool konqTab = false; + bool kickoffTab = false; + int shift, cshift; + + switch (tb->shape()) { + case QTabBar::RoundedAbove: + shift = 4; + cshift = 3; + break; + case QTabBar::RoundedBelow: + if((konqTab = tb->parentWidget() && tb->parentWidget()->isA("KonqFrameTabs")) || + (kickoffTab = tb->parentWidget() && !strcmp(tb->parentWidget()->name(), "SUSE::Kickoff::KMenu"))) { + shift = 0; + cshift = 0; + } + else { + shift = -3; + cshift = -1; + } + break; + case QTabBar::TriangularAbove: + shift = 4; + cshift = 3; + break; + case QTabBar::TriangularBelow: + shift = -5; + cshift = -3; + break; + default: + shift = 0; + cshift = 0; + } + + QRect tr = r; + bool currentTab = t->identifier() == tb->currentTab(); + if (!currentTab) + tr.setTop( tr.top() +shift ); + else + tr.setTop( tr.top() +cshift ); + + int alignment = AlignCenter | ShowPrefix; + + if (flags& Style_HasFocus && focusIndicatorSettings.indicateFocus && !t->text().isEmpty()) + drawFocusIndicator(p, QRect(tr.x(), tr.y(), tr.width(), tr.height()), alignment, cg, flags & Style_Enabled, 0, t->text(), -1, focusIndicatorSettings.buttonColor, focusIndicatorSettings.drawUnderline, true); + + if(t->iconSet() && !tb->isA("KickoffTabBar")) { + bool enabled = t->isEnabled() && tb->isEnabled(); + QPixmap pixmap; + + if(!KApplicationMode) { + QIconSet::Mode mode = (t->identifier() && tb->keyboardFocusTab()) ? QIconSet::Active : QIconSet::Normal; + pixmap = t->iconSet()->pixmap( QIconSet::Small, mode ); + if(!enabled) + pixmap = disableIcon(&pixmap); + } + else { + QIconSet::Mode mode = enabled ? QIconSet::Normal : QIconSet::Disabled; + if ( mode == QIconSet::Normal && (t->identifier() && tb->keyboardFocusTab()) ) + mode = QIconSet::Active; + pixmap = t->iconSet()->pixmap( QIconSet::Small, mode ); + } + + int pixw = pixmap.width(); + int pixh = pixmap.height(); + QRect ir = r; + ir.setLeft( tr.left() - pixw - 4 ); + ir.setRight( tr.right() - 2 ); + int yoff = 0; + if(!currentTab) { + yoff = pixelMetric(QStyle::PM_TabBarTabShiftVertical, tb); + } + + switch(tb->shape()) { + case QTabBar::RoundedAbove: + case QTabBar::TriangularAbove: + ir.setHeight(ir.height()+4); + break; + default: + if(!konqTab) + ir.setHeight(ir.height()-2); + } + + p->drawPixmap( ir.left() + 2, ir.center().y()-pixh/2+ yoff, pixmap ); + } + + QColor textColor = cg.foreground(); + if(konqTab) + textColor = cg.foreground() != tb->palette().active().foreground() ? cg.foreground() : tb->palette().active().foreground(); + else if(konsoleMode) + textColor = tb->palette().active().foreground(); + + dominoDrawItem( p, tr, alignment, cg, flags & Style_Enabled, 0, t->text(), -1, &textColor/*&cg.foreground()*/, textEffectSettings.mode > 0 ? 1 : 0); + break; + } + + case CE_MenuBarItem: { + + bool active = flags & Style_Active; + bool focused = flags & Style_HasFocus; + bool down = flags & Style_Down; + + if (active && focused) { + + if(!macStyleBar) + p->fillRect(r, cg.background()); // gtk-qt engine fix + + QColor c = down ? dGetColor(cg.background(), 15) : dGetColor(cg.background(), 25); + + p->fillRect(QRect(r.left()+3,r.y()+1, r.width()-7, r.height()), c); + p->fillRect(QRect(r.left(),r.top()+4, 3, r.height()-7), c); + p->fillRect(QRect(r.right()-3, r.y()+4, 3, r.height()-7), c); + + QPixmap pix = tintImage(qembed_findImage("menuItem"), c); + p->drawPixmap(r.left(),r.y()+1, pix, 0, 0, 3, 3); + p->drawPixmap(r.left(),r.bottom()-2, pix, 0, 3, 3, 3); + p->drawPixmap(r.right()-3,r.y()+1, pix, 3, 0, 3, 3); + p->drawPixmap(r.right()-3,r.bottom()-2, pix, 3, 3, 3, 3); + } + + p->setPen(cg.foreground() ); + drawItem(p, r, AlignVCenter | AlignHCenter | ShowPrefix | DontClip | SingleLine, cg, true, 0, + opt.menuItem()->text(), -1, &cg.foreground() ); + break; + } + + // POPUPMENU ITEM (highlighted on mouseover) + // ------------------------------------------ + case CE_PopupMenuItem: { + + const QPopupMenu *popupmenu = static_cast< const QPopupMenu * >( widget ); + QMenuItem *mi = opt.menuItem(); + + if ( !mi ) + break; + + bool checked = popupmenu->isCheckable() && mi->isChecked(); + int tab = opt.tabWidth(); + int maxpmw = mi->iconSet() || _indentPopupMenuItems ? opt.maxIconWidth() : 0; + int cmwidth = _indentPopupMenuItems ? maxpmw ? 0 : 12 : 16; // checkmark, visible 10 + if(!_indentPopupMenuItems && checked) + maxpmw += cmwidth-1; + bool enabled = mi->isEnabled(); + bool active = flags & Style_Active; + bool reverse = QApplication::reverseLayout(); + bool separator = mi->isSeparator(); + + + QColor color; + if(separator || (active && enabled)) { + + color = separator ? dGetColor(_popupMenuColor, 20) : _selMenuItemColor; + float val = 0; + int ph = popupmenu->rect().height()/2; + int part = separator ? QMAX(1, ph/r.y()+r.height()) : QMAX(1, ph/r.height()); + + if(_drawPopupMenuGradient) { + if(r.y()+r.height()/2 < ph) { + for( int i=r.y(); i < ph; i += part) { + val += 0.5; + } + color = lightenColor(color, (int)val); + } + else { + for( int i=0; i < r.y()-ph; i += part) { + val += 0.5; + } + color = darkenColor(color, (int)val); + } + } + } + + + + // Draw the menu item background + if (active) { + if (enabled) { + QColor c = color; + p->fillRect(QRect(r.x()+3, r.y(), r.width()-6, r.height()), c); + p->fillRect(QRect(r.x(), r.y()+3, 3, r.height()-6), c); + p->fillRect(QRect(r.x()+r.width()-3, r.y()+3, 3, r.height()-6), c); + + QPixmap pix = tintImage(qembed_findImage("menuItem"), c); + bitBlt(p->device(), r.x(), r.y(), &pix, 0, 0, 3, 3, Qt::CopyROP); + bitBlt(p->device(), r.x(), r.bottom()-2, &pix, 0, 3, 3, 3, Qt::CopyROP); + bitBlt(p->device(), r.x()+r.width()-3, r.y(), &pix, 3, 0, 3, 3, Qt::CopyROP); + bitBlt(p->device(), r.x()+r.width()-3, r.bottom()-2, &pix, 3, 3, 3, 3, Qt::CopyROP); + + } + } + + // Are we a menu item separator? + if(separator) { + p->setPen(color); + p->drawLine(r.x(), r.y()+2, r.right(), r.y()+2); + break; + } + + if(checked) { + // We only have to draw the background if the menu item is inactive - + // if it's active the "pressed" background is already drawn + QRect cmr = visualRect( QRect( r.x()+itemFrame , r.y() + 1, QMIN(QMAX(maxpmw, cmwidth), r.height() - 2), r.height() - 2 ), r ); + + // Draw the checkmark + SFlags cflags = Style_On; + if (enabled) + cflags |= Style_Enabled; + + if(reverse && _indentPopupMenuItems) + drawPrimitive( PE_CheckMark, p, QRect(cmr.x() + (maxpmw ? (maxpmw-16)/2-4 : -1), cmr.y(), cmr.width(), cmr.height()), cg, cflags ); + else if(_indentPopupMenuItems) + drawPrimitive( PE_CheckMark, p, QRect(cmr.x() + (maxpmw ? (maxpmw-16)/2-3 : -6), cmr.y(), cmr.width(), cmr.height()), cg, cflags ); + else + drawPrimitive( PE_CheckMark, p, QRect(reverse ? cmr.x()+cmr.width()-15 : cmr.x()-3, cmr.y(), cmr.width(), cmr.height()), cg, cflags ); + + + + } + if(!(_indentPopupMenuItems && checked) && mi->iconSet()) { + QRect cr = visualRect( QRect( (reverse ? r.x()-2 : r.x()) + itemFrame, r.y() + 1, maxpmw -1 , r.height() - 2 ), r ); + QIconSet::Mode mode; + + // Select the correct icon from the iconset + QPixmap pixmap; + if(KApplicationMode) { + if (active) + mode = enabled ? QIconSet::Active : QIconSet::Disabled; + else + mode = enabled ? QIconSet::Normal : QIconSet::Disabled; + pixmap = mi->iconSet()->pixmap(QIconSet::Small, mode); + } + else { + pixmap = mi->iconSet()->pixmap(QIconSet::Small, active ? QIconSet::Active : QIconSet::Normal); + if(!enabled) + pixmap = disableIcon(&pixmap); + } + + if(checked && !reverse) + cr.setX(cr.x()+cmwidth); + p->drawPixmap( cr.x(), cr.y(), pixmap ); + } + + // Time to draw the menu item label... + int xm = itemFrame + maxpmw; // X position margin + if(_indentPopupMenuItems) + xm += cmwidth; + + int xp = reverse ? // X position + r.x() + tab+ itemFrame*2 + itemHMargin + maxpmw +cmwidth + (_indentPopupMenuItems ? 16 : 0) - xm: + r.x() + xm; + + + // Label width (minus the width of the accelerator portion) + int tw = r.width() - xm - tab - arrowHMargin - itemHMargin * 3 - itemFrame + 1; + + // Set the color for enabled and disabled text + // (used for both active and inactive menu items) + p->setPen( enabled ? cg.buttonText() : cg.mid() ); + + // This color will be used instead of the above if the menu item + // is active and disabled at the same time. (etched text) + QColor discol = cg.mid(); + + // Does the menu item draw it's own label? + if(mi->custom()) { + int m = 2; + // Save the painter state in case the custom + // paint method changes it in some way + mi->custom()->paint( p, cg, active, enabled, xp, r.y()+m, tw, r.height()-2*m ); + } + else { + // The menu item doesn't draw it's own label + QString s = mi->text(); + // Does the menu item have a text label? + if ( !s.isNull() ) { + int t = s.find( '\t' ); + int m = 2; + int text_flags = AlignVCenter | ShowPrefix | DontClip | SingleLine; + text_flags |= reverse ? AlignRight : AlignLeft; + + QColor draw = (active && enabled) ? cg.highlightedText() : cg.foreground(); + p->setPen(draw); + + // Does the menu item have a tabstop? (for the accelerator text) + if ( t >= 0 ) { + + int arrowMargin = (mi->popup() || _indentPopupMenuItems ) ? itemHMargin + arrowHMargin : 0; + + int tabx = reverse ? r.x() + arrowMargin + itemFrame : r.x() + r.width() - tab - arrowMargin- itemFrame; + + // Draw the right part of the label (accelerator text) + //p->drawText( tabx, r.y()+m, tab, r.height()-2*m, text_flags, s.mid( t+1 ) ); + dominoDrawItem( p, QRect(tabx, r.y()+m, tab, r.height()-2*m), text_flags, cg, flags & Style_Enabled, 0, s.mid( t+1 ), -1, &draw); + s = s.left( t ); + } + + // Draw the left part of the label (or the whole label + // if there's no accelerator) + //p->drawText( xp, r.y()+m, tw, r.height()-2*m, text_flags, s, t ); + dominoDrawItem( p, QRect(xp, r.y()+m, tw, r.height()-2*m), text_flags, cg, flags & Style_Enabled, 0, s, t, &draw); + p->setPen(cg.text()); + } + + // The menu item doesn't have a text label + // Check if it has a pixmap instead + else if ( mi->pixmap() ) { + QPixmap *pixmap = mi->pixmap(); + + // Draw the pixmap + if ( pixmap->depth() == 1 ) + p->setBackgroundMode( OpaqueMode ); + + int diffw = ( ( r.width() - pixmap->width() ) / 2 ) + + ( ( r.width() - pixmap->width() ) % 2 ); + p->drawPixmap( r.x()+diffw, r.y()+1, *pixmap ); + + if ( pixmap->depth() == 1 ) + p->setBackgroundMode( TransparentMode ); + } + } + + // Does the menu item have a submenu? + if ( mi->popup() ) { + PrimitiveElement arrow = reverse ? PE_ArrowLeft : PE_ArrowRight; + + int dim = pixelMetric(PM_MenuButtonIndicator) - 1; + QRect vr = visualRect( QRect( r.x() + r.width() - 5 - 1 - dim, + r.y() + r.height() / 2 - dim / 2, dim, dim), r ); + + TextEffect textEffectMode_save = textEffectSettings.mode; + if(textEffectSettings.mode == TextEffect_OnlyButton) + textEffectSettings.mode = TextEffect_None; + if(enabled) { + p->setPen(active? cg.highlightedText(): cg.foreground()); + drawPrimitive( arrow, p, vr, cg, Style_Enabled); + } + else { + p->setPen(cg.mid()); + drawPrimitive( arrow, p, vr, cg, Style_Default); + } + textEffectSettings.mode = textEffectMode_save; + } + break; + } + + case CE_ToolBoxTab: { + + bool selected= (flags & Style_Selected && ((QToolBox*)widget)->currentItem()); + + QPixmap pix(widget->size()); + QPainter painter(&pix); + + QColor background = (flags&Style_Down && !selected) ? darkenColor(cg.background(), 15) : cg.background(); + + painter.fillRect(QRect(5, 0, r.width()-10, r.height()), background); + renderGradient(&painter, QRect(r.x(), r.y(), 5, r.height()), background.light(120), background, false); + renderGradient(&painter, QRect(r.width()-5, r.y(), 5, r.height()), background, background.light(115), false); + painter.setPen(cg.background().dark(120)); + painter.drawLine(r.x(), r.bottom(), r.width(), r.bottom()); + painter.setPen((hoveredToolBoxTab && !selected) ? dGetColor(cg.background(), 95) : dGetColor(cg.background(), 45)); + + PrimitiveElement arrow; + QRect re = QRect(r.x()+6,r.y(),r.x()+10,r.height()); + if(selected) { + arrow = PE_ArrowDown; + re.setY(re.y()+1); + } + else { + arrow = PE_ArrowRight; + } + drawPrimitive(arrow, &painter, re, cg, Style_Enabled); + + p->drawPixmap(r.x(), r.y(), pix); + break; + } + + case CE_HeaderLabel: + { + QRect rect = r; + const QHeader* header = (const QHeader *) widget; + int section = opt.headerSection(); + + QIconSet* icon = header->iconSet( section ); + if ( icon ) { + QPixmap pixmap = icon->pixmap( QIconSet::Small, + flags & Style_Enabled ? + QIconSet::Normal : QIconSet::Disabled ); + int pixw = pixmap.width(); + int pixh = pixmap.height(); + // "pixh - 1" because of tricky integer division + + QRect pixRect = rect; + pixRect.setY( rect.center().y() - (pixh - 1) / 2 ); + drawItem ( p, pixRect, AlignVCenter, cg, flags & Style_Enabled, + &pixmap, QString::null ); + if (QApplication::reverseLayout()) + rect.setRight(rect.right() - pixw - 2); + else + rect.setLeft(rect.left() + pixw + 2); + } + + if (rect.isValid()) + dominoDrawItem ( p, rect, AlignVCenter, cg, flags & Style_Enabled, + 0, header->label( section ), -1, &(cg.buttonText()), textEffectSettings.mode > 0 ? 1 : 0 ); + break; + } + default: + KStyle::drawControl(element, p, widget, r, cg, flags, opt); + } +} + +void DominoStyle::drawControlMask(ControlElement element, + QPainter *p, + const QWidget *w, + const QRect &r, + const QStyleOption &opt) const +{ + + switch (element) { + case CE_PushButton: { + break; + } + case CE_CheckBox: { + drawPrimitive(PE_IndicatorMask, p, r, w->colorGroup(), Style_Default, opt); + break; + } + case CE_RadioButton : { + drawPrimitive(PE_ExclusiveIndicatorMask, p, r, w->colorGroup(), Style_Default, opt); + break; + } + default: { + break; + //KStyle::drawControlMask (element, p, w, r, opt); + } + } +} + +void DominoStyle::drawComplexControl(ComplexControl control, + QPainter *p, + const QWidget *widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags, + SCFlags controls, + SCFlags active, + const QStyleOption& opt) const +{ + const bool reverseLayout = QApplication::reverseLayout(); + + const bool enabled = (flags & Style_Enabled); + + //return KStyle::drawComplexControl(control, p, widget, r, cg, flags, controls, active, opt); + + switch(control) { + + // COMBOBOX + // -------- + case CC_ComboBox: { + + static const unsigned int handleWidth = 15; + const QComboBox *cb = dynamic_cast<const QComboBox*>(widget); + bool editable = cb && cb->editable(); + bool isDown = cb && cb->listBox() && cb->listBox()->isVisible(); + bool hasFocus =(flags&Style_HasFocus); + const QColor inputColor = enabled ? (editable ? cg.base() : cg.button()) : cg.background(); + const QColor bg = (cb && cb->parentWidget()) ? cb->parentWidget()->paletteBackgroundColor() : cg.background(); + bool hasPixmap = cb && cb->count() > 0 && cb->pixmap(cb->currentItem()); + uint contourFlags = 0; + bool isKhtmlWidget = khtmlWidgets.contains(cb); + + if(isKhtmlWidget || (cb && cb->parentWidget() && cb->parentWidget()->paletteBackgroundPixmap())) { + contourFlags |= Draw_AlphaBlend; + buttonContour->setAlphaMode(); + } + else { + p->fillRect(QRect(r.x(), r.y(), 6, r.height()), bg); + p->fillRect(QRect(r.width()-6, r.y(), 6, r.height()), bg); + } + + if(hasPixmap && editable && r.width() > 40) { + int x = reverseLayout ? handleWidth+3 : 6; + QRegion mask(x, 0, 17, r.height()); + if(!reverseLayout) + mask += QRegion(x-2, 4, 2, r.height()-9); + p->setClipRegion(mask); + } + + contourFlags |= Round_UpperLeft|Round_BottomLeft|Round_UpperRight|Round_BottomRight|Draw_Right|Draw_Top| + Draw_Bottom|Draw_Left|Is_Button|Is_Horizontal; + uint surfaceFlags = Is_Button|Is_Horizontal; + if(isDown) { + surfaceFlags |= Is_Down; + contourFlags |= Is_Down; + } + renderSurface(p, QRect(r.left()+2, r.top()+2, r.width()-4, r.height()-5), cg.background(), cg.button(), cg.background(), surfaceFlags); + + if(isDown) + buttonContour->setState(Contour_Pressed); + else if(enabled && cb == hoverWidget) + buttonContour->setState(Contour_MouseOver); + renderContour(p, r, bg, cg.button(), contourFlags); + + + if(editable) { + QColor lineEditColor = enabled ? cg.base() : cg.background(); + QString isEnabled = enabled ? "1" : "0"; + QPixmap* lineEditBtnEdges; // shared with spinwidget + if(!(lineEditBtnEdges = QPixmapCache::find(QString::number(cg.button().pixel(), 16)+QString::number(lineEditColor.pixel(), 16)+"lineEditBtnEdges"+isEnabled))) { // + buttoncolor + + // To not make the button contour appear thicker with dark button gradiens, we need a tad smaller rounding for the lineEdit edges. + QPixmap pixmap(1, r.height()); + QPainter painter(&pixmap); + flatMode = true; + renderSurface(&painter, QRect(0, 0, 1, r.height()), cg.background(), cg.button(), cg.background(), surfaceFlags); + flatMode = false; + QImage img = pixmap.convertToImage(); + + // Test, if we have a dark button. Not accurate, but... + QColor c1 = QColor(img.pixel(0, r.y()+4)); + QColor c2 = QColor(img.pixel(0, r.height()-6)); + int v, v1, v2; + c1.getHsv(&v, &v ,&v1); + c2.getHsv(&v, &v ,&v2); + QImage edges = tintImage(qembed_findImage( (v1+v2)/2 < 200 ? "lineEditBtnEdges-d" : "lineEditBtnEdges"), lineEditColor); + + if(enabled) { + QImage shadow = qembed_findImage("lineEditBtnShadow"); + blend(shadow, edges, edges); + } + lineEditBtnEdges = new QPixmap(edges); + QPixmapCache::insert(QString::number(cg.button().pixel(), 16)+QString::number(lineEditColor.pixel(), 16)+"lineEditBtnEdges"+isEnabled, lineEditBtnEdges); + } + + if(reverseLayout) { + bitBlt(p->device(), r.width()-6, r.y()+3, lineEditBtnEdges, 3, 0, 3, 3); + bitBlt(p->device(), r.width()-6, r.height()-7, lineEditBtnEdges, 3, 3, 3, 3); + } + else { + bitBlt(p->device(), r.x()+3, r.y()+3, lineEditBtnEdges, 0, 0, 3, 3); + bitBlt(p->device(), r.x()+3, r.height()-7, lineEditBtnEdges, 0, 3, 3, 3); + } + } + + + QRect ar(reverseLayout ? r.left()+3 : r.width()-handleWidth-1, r.height()/2-2, handleWidth, 6); + if(hasFocus && focusIndicatorSettings.indicateFocus && enabled && cb) { + QRect editField = querySubControlMetrics(control, widget, SC_ComboBoxEditField); + int pw = hasPixmap ? (cb->pixmap(cb->currentItem()))->width()+2 : 0; + + if(!editable) { + int fmheight = p->fontMetrics().height(); + if(reverseLayout) + editField.addCoords(pw+17, editField.height()/2-fmheight/2-1,0 , 0); + else + editField.addCoords(2+pw, editField.height()/2-fmheight/2-1,0 , 0); + QRect re = focusIndicatorSettings.drawUnderline ? subRect(SR_ComboBoxFocusRect, cb) : editField; + drawFocusIndicator(p, re, AlignLeft, cg, true, 0, cb->currentText(), -1, focusIndicatorSettings.buttonColor, focusIndicatorSettings.drawUnderline, true); + } + } + + if(isDown) { + uint shadowFlags = Draw_Top|Draw_Right|Draw_Bottom|Draw_Left; + QRect sr; + if(editable) { + shadowFlags |= reverseLayout? Round_UpperLeft|Round_BottomLeft|Rectangular_UpperRight|Rectangular_BottomRight : + Rectangular_UpperLeft|Rectangular_BottomLeft|Round_UpperRight|Round_BottomRight; + sr = QRect(reverseLayout ? r.left()+2 : r.width()-handleWidth-3, r.y()+2, handleWidth+3, r.height()-3); + } + else { + shadowFlags |= Round_UpperLeft|Round_BottomLeft|Round_UpperRight|Round_BottomRight; + sr = QRect(r.x()+2, r.y()+2, r.width()-2, r.height()-3); + } + + renderButtonShadow(p, sr, shadowFlags); + } + buttonContour->reset(); + + p->setPen(cb ? cb->palette().active().buttonText() : qApp->palette().active().buttonText()); + uint aflags = Style_Default|Style_Raised; + if(enabled) + aflags |= Style_Enabled; + drawPrimitive(PE_ArrowDown, p, ar, cg, aflags); + + p->setPen(cg.foreground()); + break; + } + + // TOOLBUTTON + // ---------- + case CC_ToolButton: { + + QToolButton *tb = (QToolButton *) widget; + + if(_toolBtnAsBtn && ::qt_cast<KToolBarButton*>(tb)) { + + const bool reverse = QApplication::reverseLayout(); + KToolBar *bar = dynamic_cast<KToolBar*>(tb->parentWidget()); + if(!bar) break; + KToolBarButton* btn = ::qt_cast<KToolBarButton*>(tb); + KToolBarButton* prevBtn = 0; + KToolBarButton* nextBtn = 0; + bool prevBtnIsOn = false; + bool nextBtnIsOn = false; + bool isOn = flags &Style_On || flags &Style_Down; + bool isDown = flags &Style_Down; + const bool horizontal = bar->orientation() == Qt::Horizontal; + + QRect cr = r , sr = r, bsr = r; + int index = bar->itemIndex(btn->id()); + + if(bar->getButton(bar->idAt(index-1))) { + prevBtn = bar->getButton(bar->idAt(index-1)); + if((!reverse) ? (horizontal) ? prevBtn->x() + prevBtn->width() != btn->x() : prevBtn->y() + prevBtn->height() != btn->y() : + (horizontal) ? prevBtn->x() != btn->x()+btn->width() : prevBtn->y() + prevBtn->height() != btn->y() + ) + prevBtn = 0; + else + prevBtnIsOn = prevBtn->isOn(); + } + if(bar->getButton(bar->idAt(index+1))) { + nextBtn= bar->getButton(bar->idAt(index+1)); + if((!reverse) ? (horizontal) ? nextBtn->x() != btn->x() + btn->width() : nextBtn->y() != btn->y() + btn->height() : + (horizontal) ? nextBtn->x() + nextBtn->width() != btn->x() : nextBtn->y() != btn->y() + btn->height() + ) + nextBtn = 0; + else + nextBtnIsOn = nextBtn->isOn(); + } + + bool drawSeparator = false; + uint contourFlags = Is_Button; + uint surfaceFlags = Is_Button; + + if(horizontal) { + surfaceFlags |=Is_Horizontal; + contourFlags |=Is_Horizontal; + } + + if(isOn) { + surfaceFlags |= Is_Down; + contourFlags |= Is_Down; + } + + QPixmap buffer(btn->size()); + QPainter painter(&buffer); + + if(tb->parentWidget() && tb->parentWidget()->paletteBackgroundPixmap()) { + painter.drawTiledPixmap(0, 0, tb->width(), tb->height(), *tb->parentWidget()->paletteBackgroundPixmap(), tb->geometry().x(), tb->geometry().y()); + contourFlags |= Draw_AlphaBlend; + } + else + painter.fillRect(buffer.rect(), cg.brush(QColorGroup::Background)); + + + if(prevBtn) { + if(nextBtn) { + // middle + if(horizontal) { + contourFlags |= Draw_Top|Draw_Bottom; + cr.setLeft(r.left()-6); + cr.setWidth(r.width()+12); + bsr.setLeft(r.left()-2); + bsr.setWidth(r.width()+3); + sr.addCoords(-1, 2, 0, -3); + drawSeparator = true; + } + else { + contourFlags |= Draw_Left|Draw_Right; + cr.setY(r.y()-6); + cr.setHeight(r.height()+13); + bsr.addCoords(2, 0, 0, 1); + sr.addCoords(2, -1, -2, 0); + drawSeparator = true; + } + } + else { + // right / bottom + if(!horizontal) { + contourFlags |= Draw_Bottom|Draw_Right|Draw_Left|Round_BottomRight|Round_BottomLeft; + cr.setY(r.y()-6); + cr.setHeight(r.height()+6); + bsr.addCoords(2, 0, 0, -1); + sr.addCoords(2, -1, -2, -3); + } + else if(!reverse) { + contourFlags |= Draw_Top|Draw_Bottom|Draw_Right|Round_UpperRight|Round_BottomRight; + cr.setLeft(r.left()-6); + cr.setWidth(r.width()+5); + bsr.setLeft(r.left()-2); + bsr.setWidth(r.width()+1); + sr.addCoords(-1, 2, -3, -3); + + } + else { // reverse + contourFlags |= Draw_Top|Draw_Bottom|Draw_Left|Round_UpperLeft|Round_BottomLeft; + cr.setWidth(r.width()+6); + bsr.setWidth(r.width()+1); + sr.addCoords(2, 2, 0, -3); + drawSeparator = true; + } + } + } + else { + if(nextBtn) { + // left / top + if(!horizontal) { + contourFlags |= Draw_Top|Draw_Left|Draw_Right|Round_UpperLeft|Round_UpperRight; + cr.setHeight(r.height()+7); + bsr.addCoords(2, 2, 0, +1); + sr.addCoords(2, 2, -2, 0); + drawSeparator = true; + } + else if(!reverse) { + contourFlags |= Draw_Top|Draw_Bottom|Draw_Left|Round_UpperLeft|Round_BottomLeft; + cr.setWidth(r.width()+6); + bsr.setWidth(r.width()+1); + sr.addCoords(2, 2, 0, -3); + drawSeparator = true; + } + else { //reverse + contourFlags |= Draw_Top|Draw_Bottom|Draw_Right|Round_UpperRight|Round_BottomRight; + cr.setLeft(r.left()-6); + cr.setWidth(r.width()+5); + bsr.setLeft(r.left()-2); + bsr.setWidth(r.width()+1); + sr.addCoords(-1, 2, -3, -3); + } + } + else { + // full + if(horizontal) { + cr.setWidth(r.width()-1); + bsr.setWidth(r.width()-1); + sr.addCoords(2, 2, -3, -3); + } + else { + bsr.addCoords(2, 2, 0, -1); + sr.addCoords(2, 2, -2, -3); + } + contourFlags |= Draw_Top|Draw_Bottom|Draw_Left|Draw_Right|Round_UpperLeft|Round_BottomLeft| + Round_UpperRight|Round_BottomRight; + + } + } + + + renderSurface(&painter, sr, cg.background(), cg.background(), cg.background(), surfaceFlags); + drawControl(CE_ToolButtonLabel, &painter, widget, r, cg, flags,opt); + renderContour(&painter, cr, cg.background(), cg.background(), contourFlags); + + + /////////////////////////////////////////// drop down indicator + + if(tb->popup()) { + QString isEnabled = enabled ? "1" : "0"; + QPixmap* arrow; + QColor color = btn->palette().active().buttonText(); + if(!(arrow = QPixmapCache::find(QString::number(color.pixel(), 16)+"arrow_down"+isEnabled))) { + QImage ar = tintImage(qembed_findImage("arrow_down"), color); + if(!isEnabled) { + ar = setImageOpacity(ar, 25); + } + arrow = new QPixmap(ar); + QPixmapCache::insert(QString::number(color.pixel(), 16)+"arrow_down"+isEnabled, arrow); + } + + QPoint point; + if(prevBtn) + if(nextBtn) + if(horizontal) + point = QPoint(cr.width()-19, cr.bottom()-8); + else + point = QPoint(cr.width()-8, cr.bottom()-12); + else + if(!horizontal) + point = QPoint(cr.width()-8, cr.bottom()-8); + else if(!reverse) + point = QPoint(cr.width()-15, cr.bottom()-8); + else // reverse + point = QPoint(cr.width()-13, cr.bottom()-8); + else + if(nextBtn) + if(!horizontal) + point = QPoint(cr.width()-8, cr.bottom()-12); + else if(!reverse) + point = QPoint(cr.width()-13, cr.bottom()-8); + else //reverse + point = QPoint(cr.width()-15, cr.bottom()-8); + else + if(horizontal) + point = QPoint(cr.width()-9, cr.bottom()-8); + else + point = QPoint(cr.width()-8, cr.bottom()-8); + + bitBlt(&buffer, point.x(), point.y(), arrow); + + } + + + /////////////////////////////////////////// separator + + if(drawSeparator) { // on the right side of the button + + ContourState cState; + if(reverse && horizontal) { + if( ((enabled && !isDown) || (prevBtn && prevBtn == hoverWidget)) && (hoverWidget && (tb == hoverWidget || (prevBtn == hoverWidget && prevBtn->isEnabled() && !prevBtn->isDown()))) ) + cState = Contour_MouseOver; + else if(isDown || (prevBtn && prevBtn->isDown())) + cState = Contour_Pressed; + else + cState = Contour_Default; + } + else { + if( ((enabled && !isDown) || (nextBtn &&nextBtn == hoverWidget)) && (hoverWidget && (tb == hoverWidget || (nextBtn == hoverWidget && nextBtn->isEnabled() && !nextBtn->isDown()))) ) + cState = Contour_MouseOver; + else if(isDown || (nextBtn && nextBtn->isDown())) + cState = Contour_Pressed; + else + cState = Contour_Default; + } + + painter.setPen(alphaBlendColors(buttonContour->contourColor(cState), cg.background(), 218)); + if(horizontal) + painter.drawLine(r.width()-1, r.top()+1, r.width()-1, r.bottom()-2); + else + painter.drawLine(r.x()+1, r.bottom(), r.width()-2, r.bottom()); + + } + + + /////////////////////////////////////////// button shadow + + if(isOn && buttonContour->drawButtonSunkenShadow) { + uint shadowFlags; + if(prevBtnIsOn) { // or above is on + if(nextBtnIsOn) { // or below is on + if(horizontal) { + shadowFlags = Draw_Top|Draw_Bottom; + bsr.addCoords(-3, 2, +5, -1); + } + else { + shadowFlags = Draw_Left|Draw_Right; + bsr.addCoords(0, -5, 0, +4); + } + } + else { + if(horizontal) { + if(!reverse) { + shadowFlags = Draw_Top|Draw_Bottom|Draw_Right; + shadowFlags |= contourFlags& Round_UpperRight ? Round_UpperRight : Rectangular_UpperRight; + shadowFlags |= contourFlags& Round_BottomRight ? Round_BottomRight : Rectangular_BottomRight; + bsr.addCoords(-3, 2, 0, -1); + } + else { + shadowFlags = Draw_Top|Draw_Bottom|Draw_Left; + shadowFlags |= contourFlags& Round_UpperLeft ? Round_UpperLeft : Rectangular_UpperLeft; + shadowFlags |= contourFlags& Round_BottomLeft ? Round_BottomLeft : Rectangular_BottomLeft; + bsr.addCoords(2, 2, 5, -1); + } + } + else { + shadowFlags = Draw_Bottom|Draw_Left|Draw_Right; + shadowFlags |= contourFlags& Round_BottomLeft ? Round_BottomLeft : Rectangular_BottomLeft; + shadowFlags |= contourFlags& Round_BottomRight ? Round_BottomRight : Rectangular_BottomRight; + bsr.setY(bsr.y()-5); + } + } + } + else if(nextBtnIsOn) { + if(horizontal) { + if(!reverse) { + shadowFlags = Draw_Top|Draw_Bottom|Draw_Left; + shadowFlags |= (contourFlags& Round_UpperLeft) ? Round_UpperLeft : Rectangular_UpperLeft; + shadowFlags |= (contourFlags& Round_BottomLeft) ? Round_BottomLeft : Rectangular_BottomLeft; + bsr.addCoords(2, 2, 5, -1); + } + else { + shadowFlags = Draw_Top|Draw_Bottom|Draw_Right; + shadowFlags |= contourFlags& Round_UpperRight ? Round_UpperRight : Rectangular_UpperRight; + shadowFlags |= contourFlags& Round_BottomRight ? Round_BottomRight : Rectangular_BottomRight; + bsr.addCoords(-3, 2, 0, -1); + } + } + else { + shadowFlags = Draw_Top|Draw_Left|Draw_Right; + shadowFlags |= contourFlags& Round_UpperLeft ? Round_UpperLeft : Rectangular_UpperLeft; + shadowFlags |= contourFlags& Round_UpperRight ? Round_UpperRight : Rectangular_UpperRight; + bsr.setHeight(bsr.height()+4); + } + } + else { + if(horizontal) { + shadowFlags = Draw_Top|Draw_Bottom|Draw_Left|Draw_Right; + shadowFlags |= contourFlags& Round_UpperLeft ? Round_UpperLeft : Rectangular_UpperLeft; + shadowFlags |= contourFlags& Round_UpperRight ? Round_UpperRight : Rectangular_UpperRight; + shadowFlags |= contourFlags& Round_BottomRight ? Round_BottomRight : Rectangular_BottomRight; + shadowFlags |= contourFlags& Round_BottomLeft ? Round_BottomLeft : Rectangular_BottomLeft; + bsr.addCoords(2, 2, 0, -1); + } + else { + shadowFlags = Draw_Top|Draw_Bottom|Draw_Left|Draw_Right; + shadowFlags |= contourFlags& Round_UpperLeft ? Round_UpperLeft : Rectangular_UpperLeft; + shadowFlags |= contourFlags& Round_UpperRight ? Round_UpperRight : Rectangular_UpperRight; + shadowFlags |= contourFlags& Round_BottomRight ? Round_BottomRight : Rectangular_BottomRight; + shadowFlags |= contourFlags& Round_BottomLeft ? Round_BottomLeft : Rectangular_BottomLeft; + } + } + renderButtonShadow(&painter, bsr, shadowFlags); + } + + btn->setUpdatesEnabled(false); + btn->setErasePixmap(buffer); + btn->setUpdatesEnabled(true); + btn->erase(); + + } + else if(_toolBtnAsBtn) { // not a KToolBarButton + + if(kickerMode && !(flags&(Style_Raised))) + break; + + const QRect br = querySubControlMetrics(control, widget, SC_ToolButton, opt); + if(br.width() < 16 || br.height()< 16) + break; + + QColorGroup g = widget->colorGroup(); + QColor bg; + if(widget->parentWidget() && widget->paletteBackgroundColor() != widget->parentWidget()->paletteBackgroundColor()) { + bg = widget->parentWidget()->paletteBackgroundColor(); + g.setColor(QColorGroup::Background, bg); + } + else + bg = widget->paletteBackgroundColor(); + + if(!widget->paletteBackgroundPixmap()) { + p->fillRect(QRect(br.x(), br.y(), 6, 6), bg); + p->fillRect(QRect(br.width()-6, br.y(), 6, 6), bg); + p->fillRect(QRect(br.width()-6, br.height()-7, 6, 7), bg); + p->fillRect(QRect(br.x(), br.height()-7, 6, 7), bg); + } + else { + buttonContour->setAlphaMode(); + } + + if(/*flags &Style_On || */flags &Style_Down) + buttonContour->setState(Contour_Pressed); + if(enabled && tb == hoverWidget) + buttonContour->setState(Contour_MouseOver); + else if(flags & Style_Default) + buttonContour->setState(Contour_DefaultButton); + + renderButton(p, br, g, (flags & Style_On || flags & Style_Down), flags & Style_MouseOver, true, enabled, khtmlWidgets.contains(opt.widget()) ); + buttonContour->reset(); + + + if(tb->popup()) { + QString isEnabled = enabled ? "1" : "0"; + QPixmap* arrow; + QColor color = tb->palette().active().buttonText(); + if(!(arrow = QPixmapCache::find(QString::number(color.pixel(), 16)+"arrow_down"+isEnabled))) { + QImage ar = tintImage(qembed_findImage("arrow_down"), color); + if(!isEnabled) { + ar = setImageOpacity(ar, 25); + } + arrow = new QPixmap(ar); + QPixmapCache::insert(QString::number(color.pixel(), 16)+"arrow_down"+isEnabled, arrow); + } + bitBlt(p->device(), r.width()-8, r.bottom()-8, arrow); + } + + } + else { + + bool isKbtn = ::qt_cast<KToolBarButton*>(tb); + QPixmap buffer(tb->size()); + QPainter painter(&buffer); + + QColor bg = cg.background(); + + if(tb->parentWidget() && tb->parentWidget()->paletteBackgroundPixmap()) { + painter.drawTiledPixmap(0, 0, tb->width(), tb->height(), *tb->parentWidget()->paletteBackgroundPixmap(), tb->geometry().x(), tb->geometry().y()); + } + else if(tb->parentWidget() && widget->paletteBackgroundColor() != widget->parentWidget()->paletteBackgroundColor()) { + bg = widget->parentWidget()->paletteBackgroundColor(); + painter.fillRect(buffer.rect(), bg); + } + else + painter.fillRect(buffer.rect(), cg.brush(QColorGroup::Background)); + + + QRect fr = QRect(1, 1, r.width()-2, r.height()-2); + bool isOn = flags &Style_On; + if(isOn) { + QRegion reg(fr.x()+2, fr.y()+1, fr.width()-4, fr.height()-2); + reg += QRegion(fr.x()+1, fr.y()+2, fr.width()-2, fr.height()-4); + painter.setClipRegion(reg); + painter.fillRect(r, alphaBlendColors(black, bg, 15)); + painter.setClipping(false); + } + if(isKbtn) + drawControl(CE_ToolButtonLabel, &painter, widget, r, cg, flags,opt); + + if(isOn) { + QColor color = buttonContour->contourColor(Contour_Default); + QPixmap* frame; + if(!(frame = QPixmapCache::find(QString::number(color.pixel(), 16)+"toolBtnFrameThin"))) { + frame = new QPixmap(tintImage(qembed_findImage("toolBtnFrameThin"), color)); + QPixmapCache::insert(QString::number(color.pixel(), 16)+"toolBtnFrameThin", frame); + } + + bitBlt(&buffer, fr.x(), fr.y(), frame, 0, 0, 4, 4); + bitBlt(&buffer, fr.width()-3, fr.y(), frame, 4, 0, 4, 4); + bitBlt(&buffer, fr.x(), fr.height()-3, frame, 0, 4, 4, 4); + bitBlt(&buffer, fr.width()-3, fr.height()-3, frame, 4, 4, 4, 4); + + painter.setPen(alphaBlendColors(color, bg, 195)); + painter.drawLine(fr.x()+4, fr.y(), fr.width()-4, fr.y()); + painter.drawLine(fr.x(), fr.y()+4, fr.x(), fr.height()-4); + painter.drawLine(fr.width(), fr.y()+4, fr.width(), fr.height()-4); + painter.drawLine(fr.x()+4, fr.height(), fr.width()-4, fr.height()); + } + + if(tb->popup() && (!tb->iconSet().isNull() || tb->text() || tb->pixmap())) { + QString isEnabled = enabled ? "1" : "0"; + QPixmap* arrow; + QColor color = tb->palette().active().buttonText(); + if(!(arrow = QPixmapCache::find(QString::number(color.pixel(), 16)+"arrow_down"+isEnabled))) { + QImage ar = tintImage(qembed_findImage("arrow_down"), color); + if(!isEnabled) { + ar = setImageOpacity(ar, 25); + } + arrow = new QPixmap(ar); + QPixmapCache::insert(QString::number(color.pixel(), 16)+"arrow_down"+isEnabled, arrow); + } + bitBlt(&buffer, r.width()-8, r.bottom()-4, arrow); + } + + if(isKbtn) { + tb->setUpdatesEnabled(false); + tb->setErasePixmap(buffer); + tb->erase(); + tb->setUpdatesEnabled(true); + } + else + p->drawPixmap(0, 0, buffer); + } + + p->setPen(cg.buttonText() ); + break; + } + + // SPINWIDGETS + // ----------- + case CC_SpinWidget: { + + if(active == SC_SpinWidgetUp || active == SC_SpinWidgetDown) + break; + + static const unsigned int handleWidth = 15; + const QSpinWidget *sw = dynamic_cast<const QSpinWidget *>(widget); + const QColor bg = cg.background(); + SFlags sflags = flags; + PrimitiveElement pe; + bool enabled = sw && sw->isEnabled(); + const QColor buttonColor = enabled ? cg.button() : cg.background(); + + uint contourFlags = Round_UpperLeft|Round_BottomLeft|Round_UpperRight|Round_BottomRight|Draw_Right|Draw_Top| + Draw_Bottom|Draw_Left|Is_Button|Is_Horizontal; + + // fill edges + if(sw && !sw->paletteBackgroundPixmap()) { + p->fillRect(QRect(r.x(), r.y(), 6, r.height()), bg); + p->fillRect(QRect(r.width()-6, r.y(), 6, r.height()), bg); + } + else { + contourFlags |= Draw_AlphaBlend; + buttonContour->setAlphaMode(); + } + + uint surfaceFlags = Is_Button|Is_Horizontal; + if(flags& Style_Down) { + surfaceFlags |= Is_Down; + contourFlags |= Is_Down; + } + renderSurface(p, QRect(r.x()+2, r.y()+2, r.width()-4, r.height()-5), cg.background(), cg.button(), cg.button(), surfaceFlags); + + if(flags & Style_Down) + buttonContour->setState(Contour_Pressed); + else if(enabled && sw == hoverWidget) + buttonContour->setState(Contour_MouseOver); + renderContour(p, r, cg.background(), cg.button(), contourFlags); + + if(flags & Style_Down) + renderButtonShadow(p, QRect(r.x()+2, r.y()+2, r.width()-2, r.height()-3), contourFlags); + buttonContour->reset(); + + +// QColor lineEditColor = enabled ? cg.base() : cg.background(); + QColor lineEditColor = enabled ? cg.base() : dynamic_cast<QSpinBox*>(sw->parentWidget()) ? + ((DominoQSpinBox*)sw->parentWidget())->editor()->palette().active().background(): qApp->palette().active().background(); + QString isEnabled = enabled ? "1" : "0"; + QPixmap* lineEditBtnEdges; + + if(!(lineEditBtnEdges = QPixmapCache::find(QString::number(cg.button().pixel(), 16)+QString::number(lineEditColor.pixel(), 16)+"lineEditBtnEdges"+isEnabled))) { + + // To not make the button contour appear thicker with dark button gradiens, we need a tad smaller rounding for the lineEdit edges. + QPixmap pixmap(1, r.height()); + QPainter painter(&pixmap); + flatMode = true; + renderSurface(&painter, QRect(0, 0, 1, r.height()), cg.background(), cg.button(), cg.button(), surfaceFlags); + flatMode = false; + QImage img = pixmap.convertToImage(); + + // Test, if we have a dark button. Not accurate, but... + QColor c1 = QColor(img.pixel(0, r.y()+4)); + QColor c2 = QColor(img.pixel(0, r.height()-6)); + int v, v1, v2; + c1.getHsv(&v, &v ,&v1); + c2.getHsv(&v, &v ,&v2); + + QImage edges = tintImage(qembed_findImage( (v1+v2)/2 < 127 ? "lineEditBtnEdges-d" : "lineEditBtnEdges"), lineEditColor); + + if(enabled) { + QImage shadow = qembed_findImage("lineEditBtnShadow"); + blend(shadow, edges, edges); + } + lineEditBtnEdges = new QPixmap(edges); + QPixmapCache::insert(QString::number(cg.button().pixel(), 16)+QString::number(lineEditColor.pixel(), 16)+"lineEditBtnEdges"+isEnabled, lineEditBtnEdges); + } + + if(reverseLayout) { + bitBlt(p->device(), r.width()-6, r.y()+3, lineEditBtnEdges, 3, 0, 3, 3); + bitBlt(p->device(), r.width()-6, r.height()-7, lineEditBtnEdges, 3, 3, 3, 3); + } + else { + bitBlt(p->device(), r.x()+3, r.y()+3, lineEditBtnEdges, 0, 0, 3, 3); + bitBlt(p->device(), r.x()+3, r.height()-7, lineEditBtnEdges, 0, 3, 3, 3); + } + + + QRect upRect = QRect(reverseLayout ? r.left()+2 : r.right()-handleWidth-1, r.height()/2-7, handleWidth, 6); + QRect downRect = QRect(reverseLayout ? r.left()+2 : r.right()-handleWidth-1, r.height()/2+1, handleWidth, 6); + // icons... + //p->setPen(cg.foreground()); + p->setPen(sw ? sw->palette().active().buttonText() : qApp->palette().active().buttonText()); + + sflags = Style_Default; + if(enabled) + sflags |= Style_Enabled; + if (active == SC_SpinWidgetUp) { + sflags |= Style_On; + sflags |= Style_Sunken; + } else + sflags |= Style_Raised; + + if (sw->buttonSymbols() == QSpinWidget::PlusMinus) { + pe = PE_SpinWidgetPlus; + upRect.moveTop(upRect.y()+1); + } + else + pe = PE_SpinWidgetUp; + drawPrimitive(pe, p, upRect, cg, sflags); + + sflags = Style_Default; + if(enabled) + sflags |= Style_Enabled; + if (active == SC_SpinWidgetDown) { + sflags |= Style_On; + sflags |= Style_Sunken; + } else + sflags |= Style_Raised; + if (sw->buttonSymbols() == QSpinWidget::PlusMinus) + pe = PE_SpinWidgetMinus; + else + pe = PE_SpinWidgetDown; + drawPrimitive(pe, p, downRect, cg, sflags); + + break; + } + + case CC_ScrollBar: { // TODO: find a way to draw pressed buttons + + const QScrollBar *sb = (const QScrollBar*)widget; + bool maxedOut = (sb->minValue() == sb->maxValue()); + bool horizontal = (sb->orientation() == Qt::Horizontal); + SFlags sflags = ((horizontal ? Style_Horizontal : Style_Default) | + (maxedOut ? Style_Default : Style_Enabled)); + + QRect addline, subline, subline2, addpage, subpage, slider, first, last; + subline = querySubControlMetrics(control, widget, SC_ScrollBarSubLine, opt); + addline = querySubControlMetrics(control, widget, SC_ScrollBarAddLine, opt); + subpage = querySubControlMetrics(control, widget, SC_ScrollBarSubPage, opt); + addpage = querySubControlMetrics(control, widget, SC_ScrollBarAddPage, opt); + slider = querySubControlMetrics(control, widget, SC_ScrollBarSlider, opt); +// first = querySubControlMetrics(control, widget, SC_ScrollBarFirst, opt); +// last = querySubControlMetrics(control, widget, SC_ScrollBarLast, opt); +// subline2 = addline; + +// if (horizontal) +// subline2.moveBy(-addline.width(), 0); +// else +// subline2.moveBy(0, -addline.height()); + + // Draw the up/left button set + if ((controls & SC_ScrollBarSubLine) && subline.isValid()) { + drawPrimitive(PE_ScrollBarSubLine, p, subline, cg, + sflags | (active == SC_ScrollBarSubLine ? + Style_Down : Style_Default)); + + + subline2 = addline; + if (horizontal) + subline2.moveBy(-addline.width(), 0); + else + subline2.moveBy(0, -addline.height()); + + if (subline2.isValid()) + drawPrimitive((QStyle::PrimitiveElement)PE_ScrollBarSubLine2, p, subline2, cg, + sflags | (active == SC_ScrollBarSubLine ? + Style_Down : Style_Default)); + } + + if ((controls & SC_ScrollBarAddLine) && addline.isValid()) + drawPrimitive(PE_ScrollBarAddLine, p, addline, cg, + sflags | ((active == SC_ScrollBarAddLine) ? + Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarSubPage) && subpage.isValid()) + drawPrimitive(PE_ScrollBarSubPage, p, subpage, cg, + sflags | ((active == SC_ScrollBarSubPage) ? + Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarAddPage) && addpage.isValid()) + drawPrimitive(PE_ScrollBarAddPage, p, addpage, cg, + sflags | ((active == SC_ScrollBarAddPage) ? + Style_Down : Style_Default)); + +// if ((controls & SC_ScrollBarFirst) && first.isValid()) +// drawPrimitive(PE_ScrollBarFirst, p, first, cg, +// sflags | ((active == SC_ScrollBarFirst) ? +// Style_Down : Style_Default)); +// +// if ((controls & SC_ScrollBarLast) && last.isValid()) +// drawPrimitive(PE_ScrollBarLast, p, last, cg, +// sflags | ((active == SC_ScrollBarLast) ? +// Style_Down : Style_Default)); + + if ((controls & SC_ScrollBarSlider) && slider.isValid()) { + drawPrimitive(PE_ScrollBarSlider, p, slider, cg, + sflags | ((active == SC_ScrollBarSlider) ? + Style_Down : Style_Default)); + } + break; + } + + + + case CC_TitleBar: { + + QRect ir; + bool down; + QColorGroup g = widget->colorGroup(); + + if ( controls & SC_TitleBarLabel ) { + QPixmap pix(10, r.height()); + pix.fill(g.background()); + + QPainter painter(&pix); + renderGradient(&painter, QRect(0, 0, 10, r.height()/2), g.background().light(120), g.background(), true); + painter.setPen(g.background().dark(105)); + painter.drawLine(0, r.bottom(), 10, r.bottom()); + p->drawTiledPixmap(0,0, r.width(), r.height(), pix); + + ir = visualRect( querySubControlMetrics( CC_TitleBar, widget, SC_TitleBarLabel ), widget ); + p->setPen( g.foreground() ); + p->drawText(ir.x()+2, ir.y(), ir.width()-2, ir.height(), AlignCenter | AlignVCenter | SingleLine, widget->caption() ); + } + if ( controls & SC_TitleBarCloseButton ) { + ir = visualRect( querySubControlMetrics( CC_TitleBar, widget, SC_TitleBarCloseButton ), widget ); + down = active & SC_TitleBarCloseButton; + p->drawPixmap(ir.x(), ir.y(), qembed_findImage("DockCloseButton"), 0, down ? 12 : 0, 12, 12); + } + if ( controls & SC_TitleBarMaxButton ) { + ir = visualRect( querySubControlMetrics( CC_TitleBar, widget, SC_TitleBarMaxButton ), widget ); + down = active & SC_TitleBarMaxButton; + p->drawPixmap(ir.x(), ir.y(), qembed_findImage("OverlapButton"), 0, down ? 12 : 0, 12, 12); + } + if ( controls & SC_TitleBarNormalButton) { + ir = visualRect( querySubControlMetrics( CC_TitleBar, widget, SC_TitleBarNormalButton ), widget ); + down = active & SC_TitleBarNormalButton; + p->drawPixmap(ir.x(), ir.y(), qembed_findImage("ToDesktopButton"), 0, down ? 12 : 0, 12, 12); + } + if ( controls & SC_TitleBarMinButton) { + ir = visualRect( querySubControlMetrics( CC_TitleBar, widget, SC_TitleBarMinButton ), widget ); + down = active & SC_TitleBarMinButton; + p->drawPixmap(ir.x(), ir.y(), qembed_findImage("DockbackButton"), 0, down ? 12 : 0, 12, 12); + } + if ( controls & SC_TitleBarSysMenu ) { + if ( widget->icon() ) { + ir = visualRect( querySubControlMetrics( CC_TitleBar, widget, SC_TitleBarSysMenu ), widget ); + drawItem( p, ir, AlignCenter, widget->colorGroup(), TRUE, widget->icon(), QString::null ); + } + } + + break; + } + default: + KStyle::drawComplexControl(control, p, widget, + r, cg, flags, controls, + active, opt); + break; + } +} + +QRect DominoStyle::subRect(SubRect r, const QWidget *widget) const +{ + switch (r) { + case SR_PushButtonContents: { + const QPushButton* btn = static_cast<const QPushButton*>(widget); + QRect rw = widget->rect(); + if(btn->text().isEmpty()) + return QRect(rw.left()+2, rw.top()+2, rw.width()-4, rw.height()-4); + return QRect(rw.left()+2, rw.top()+3, rw.width()-4, rw.height()-7); + } + case SR_PushButtonFocusRect: + { + QRect rect, wrect(widget->rect()); + const QPushButton *button = (const QPushButton *) widget; + int dbw1 = 0, dbw2 = 0; + if (button->isDefault() || button->autoDefault()) { + dbw1 = pixelMetric(PM_ButtonDefaultIndicator, widget); + dbw2 = dbw1 * 2; + } + + int dfw1 = pixelMetric(PM_DefaultFrameWidth, widget) * 2, + dfw2 = dfw1 * 2; + + rect.setRect(wrect.x() + dfw1 + dbw1, + wrect.y() + dfw1 + dbw1, + wrect.width() - dfw2 - dbw2, + wrect.height() - dfw2 - dbw2); + return rect; + } + case SR_ComboBoxFocusRect: { + return QRect(4, 3, widget->width()-8, widget->height()-7); +// return querySubControlMetrics( CC_ComboBox, widget, SC_ComboBoxEditField ); + } + case SR_CheckBoxFocusRect: + { + QRect cr = subRect(SR_CheckBoxContents, widget); + QRect fr = KStyle::subRect(r, widget); + if(cr.width() <= 0) // no text + fr.setHeight(fr.height()+2); + else + fr.addCoords(+2, 0, -2, 0); + return fr; + } + case SR_RadioButtonFocusRect: + { + QRect cr = subRect(SR_CheckBoxContents, widget); + QRect fr = KStyle::subRect(r, widget); + if(cr.width() <= 0) // no text + fr.setHeight(fr.height()+2); + else + fr.addCoords(+2, 0, -2, 0); + return fr; + } + case SR_ProgressBarGroove: { + return QRect(widget->rect()); + } + case SR_ProgressBarContents: + case SR_ProgressBarLabel: { + QRect rw = widget->rect(); + return QRect(rw.left()+2, rw.top()+2, rw.width()-4, rw.height()-4 ); + } + case SR_ToolBoxTabContents: { + QRect rw = widget->rect(); + return QRect(rw.left()+18, rw.top(), rw.width()-18, rw.height()); + } + default: { + return KStyle::subRect(r, widget); + } + } +} + + + +QRect DominoStyle::querySubControlMetrics(ComplexControl control, + const QWidget *widget, + SubControl subcontrol, + const QStyleOption &opt) const +{ + if (!widget) { + return QRect(); + } + + QRect r(widget->rect()); + switch (control) { + case CC_ComboBox: { + switch (subcontrol) { + case SC_ComboBoxEditField: { + const QComboBox* cb = dynamic_cast<const QComboBox *>(widget); + if(!cb) // maybe kdevelop's KComboView + return QRect(r.left()+4, r.top()+3, r.width()-4-15-3, r.height()-7); + if(!cb->editable()) + return QRect(r.left()+3, r.top()+3, r.width()-4-15-2, r.height()-6); + + return QRect(r.left()+3, r.top()+3, r.width()-4-15-2, r.height()-7); + } + default: { + return KStyle::querySubControlMetrics(control, widget, subcontrol, opt); + } + } + break; + } + case CC_SpinWidget: { + const int fw = 2; // Frame width... + const int buttonsWidth = 15; + const bool heightDividable = ((r.height()%2) == 0); + + const int buttonsLeft = r.right()-buttonsWidth+1-fw; + switch (subcontrol) { + case SC_SpinWidgetUp: { // rect without 2px frame + return QRect(buttonsLeft, r.top()+3, buttonsWidth+1, r.height()/2-3 ); + } + case SC_SpinWidgetDown: { + if(heightDividable) { + return QRect(buttonsLeft, r.top()+r.height()/2+1, buttonsWidth+1, r.height()/2-3); + } else { + return QRect(buttonsLeft, r.top()+r.height()/2+1, buttonsWidth+1, r.height()/2-2); + } + } + case SC_SpinWidgetFrame: { + return QRect(r.left(), r.top(), r.width(), r.height() ); + } + case SC_SpinWidgetEditField: { + return QRect(r.left()+1+fw, r.top()+1+fw, r.width()-(buttonsWidth+2+fw*2), r.height()-3-fw*2); + } + case SC_SpinWidgetButtonField: { + return QRect(buttonsLeft, r.top()+2, buttonsWidth, r.height()-5); + } + default: { + return KStyle::querySubControlMetrics(control, widget, subcontrol, opt); + } + } + break; + } + + case CC_ScrollBar: { + + const QScrollBar *scrollbar = (const QScrollBar *) widget; + int sliderstart = scrollbar->sliderStart(); + const int buttonw = 15 /*- (fw * 2)*/; + const int buttonh = 15 /*- (fw * 2)*/; + + int maxlen = ((scrollbar->orientation() == Qt::Horizontal) ? + scrollbar->width() : scrollbar->height()) - buttonh * 3; + + // calculate slider length + if (scrollbar->maxValue() != scrollbar->minValue()) { + uint range = scrollbar->maxValue() - scrollbar->minValue(); + sliderlen = (scrollbar->pageStep() * maxlen) / + (range + scrollbar->pageStep()); + + if ( sliderlen < 32 || range > INT_MAX/2 ) + sliderlen = 32; + if ( sliderlen > maxlen ) + sliderlen = maxlen; + } + else + sliderlen = maxlen; + + switch(subcontrol) { + case SC_ScrollBarAddLine: { // bottom/right button + if (scrollbar->orientation() == Qt::Horizontal) { + return QRect(scrollbar->width() - buttonw , 0, buttonw, buttonh); + } else { + return QRect(0, scrollbar->height() - buttonh, buttonw, buttonh); + } + } + case SC_ScrollBarSubLine: { // top/left button + return QRect(0, 0, buttonw, buttonh); + } + case SC_ScrollBarSubPage: // top/left + if (scrollbar->orientation() == Qt::Horizontal) + return QRect(buttonw, 0, sliderstart-buttonw+1, buttonw); + return QRect(0, buttonh, buttonw, sliderstart-buttonw+1); + + case SC_ScrollBarAddPage: // bottom/left + if (scrollbar->orientation() == Qt::Horizontal) + return QRect(sliderstart + sliderlen-1, 0, maxlen - sliderstart - sliderlen + buttonw+1, buttonw); + return QRect(0, sliderstart + sliderlen-1, buttonw, maxlen - sliderstart - sliderlen + buttonw+1); + + case SC_ScrollBarGroove: + if (scrollbar->orientation() == Qt::Horizontal) + return QRect(buttonw , 0, maxlen, buttonw); + return QRect(0, buttonw, buttonw, maxlen); + + case SC_ScrollBarSlider: + if (scrollbar->orientation() == Qt::Horizontal) + return QRect(sliderstart, 0, sliderlen, buttonw); + return QRect(0, sliderstart, buttonw, sliderlen); + default: + break; + } + } + default: { + return KStyle::querySubControlMetrics(control, widget, subcontrol, opt); + } + } +} + +int DominoStyle::pixelMetric(PixelMetric m, const QWidget *widget) const +{ + //return KStyle::pixelMetric(m, widget); + + switch(m) { + // FRAMES + // ------ + case PM_DefaultFrameWidth: { + + if(widget) { + if(dynamic_cast<const QPopupMenu*>(widget)) + return 3; + + // stolen from baghira + if (dynamic_cast<QTabWidget*>(widget->parentWidget()) && widget->parentWidget()->parentWidget() && (widget->parentWidget()->parentWidget()->isA("KonqMainWindow") || widget->parentWidget()->parentWidget()->isA("KonqFrameContainer"))) + return 0; + + } + return 2; + } + case PM_MenuBarFrameWidth: + return 1; + case PM_SpinBoxFrameWidth: + return 2; + + // CHECKBOXES / RADIO BUTTONS + // -------------------------- + case PM_IndicatorWidth: // Checkbox 18x19 + return 18; + case PM_IndicatorHeight: + return 19; + + case PM_ExclusiveIndicatorWidth: // Radiobutton 17x17 + case PM_ExclusiveIndicatorHeight: + return 17; + + // TABS + // ---- + case PM_TabBarTabVSpace: { + const QTabBar * tb = (const QTabBar *) widget; + + switch(tb->shape()) { + case QTabBar::RoundedAbove: + case QTabBar::RoundedBelow: + return 12; + default: + return 4; + } + + } + case PM_TabBarTabShiftVertical: { + + const QTabBar * tb = (const QTabBar *) widget; + switch (tb->shape()) { + case QTabBar::RoundedAbove: + return 1; + case QTabBar::RoundedBelow: + return (tb->parentWidget() && tb->parentWidget()->isA("KonqFrameTabs"))? 0 : -1; + default: + return 0; + } + } + case PM_TabBarTabShiftHorizontal: { + return 0; + } + case PM_TabBarTabOverlap: { + return 1; + } + case PM_TabBarBaseOverlap: { + const QTabWidget * tw = (const QTabWidget *) widget; + if(((DominoQTabWidget*)tw)->tabBar()->isHidden() || tw->isA("KonqFrameTabs")) + return 0; + return (tw->tabPosition() == QTabWidget::Top) ? -3 : -4; + } +#if (QT_VERSION >= 0x030300) // requires Qt 3.3 + // extra space between menubar items + case PM_MenuBarItemSpacing: { + return 6; + } +#endif + +// #if (QT_VERSION >= 0x030300) // requires Qt 3.3 +// // extra space between toolbar items +// case PM_ToolBarItemSpacing: { +// return 4; +// } +// #endif + + // SCROLL BAR +// case PM_ScrollBarSliderMin: { +// return 21; +// } + + case PM_ScrollBarExtent: { + return 15; + } + + case PM_DockWindowSeparatorExtent: + return 6; + + // SPLITTERS + // --------- + case PM_SplitterWidth: { + return 6; + } + + // PROGRESSBARS + // ------------ + case PM_ProgressBarChunkWidth: + return 10; + + // SLIDER + // ------ + case PM_SliderLength: + case PM_SliderThickness: + return 15; + + // MENU INDICATOR + // -------------- + case PM_MenuButtonIndicator: + return 8; + + case PM_ButtonDefaultIndicator: { + return 0; + } + + case PM_ButtonMargin: { + //return 2; + return 4; + } + case PM_HeaderMargin: + return 2; + case PM_ButtonShiftVertical: + case PM_ButtonShiftHorizontal: { + return 0; + } + case PM_CheckListControllerSize: // radio controller + case PM_CheckListButtonSize: { // box controller + return 16; + } +// case PM_PopupMenuFrameVerticalExtra: +// return 1; +// case PM_PopupMenuFrameHorizontalExtra: +// return 1; + default: + return KStyle::pixelMetric(m, widget); + } +} + + +QSize DominoStyle::sizeFromContents(ContentsType t, + const QWidget *widget, + const QSize &s, + const QStyleOption &opt) const +{ + //return KStyle::sizeFromContents (t, widget, s, opt); + + switch (t) { + + case CT_PushButton: + { + const QPushButton* btn = static_cast<const QPushButton*>(widget); + + int w = s.width(); + int h = s.height(); + if ( btn->text().isEmpty() && s.width() < 32 ) { + w += pixelMetric(PM_ButtonMargin, widget)*2; + h += pixelMetric(PM_ButtonMargin, widget)*2; + return QSize(w, h); + } + + int bm = pixelMetric(PM_ButtonMargin, widget); + int fw = pixelMetric(PM_DefaultFrameWidth, widget) * 2; + w += bm + fw + 22; + h += bm + fw; + return QSize(w, h < 26 ? 26+_buttonHeightAdjustment : h+4 ); + } + case CT_ComboBox: { + int bm = pixelMetric(PM_ButtonMargin, widget); + int fw = pixelMetric(PM_DefaultFrameWidth, widget) * 2; + int w = s.width(); + int h = s.height(); + w += bm + fw + 22; + h += bm + fw-3; + return QSize(w, h < 26 ? 26+_buttonHeightAdjustment : h+4 ); + } + + case CT_TabBarTab: { + // konqi = tabbar + // other = tab control + // this is total crap but it helps to reduce the flicker in konqi. + ///////////////////// + QTabBar* tb = 0; + if(::qt_cast<QTabBar*>(widget)) + tb = ::qt_cast<QTabBar*>(widget); + else + return QSize(s.width(), s.height()); + + if(!strcmp(widget->name(), "tabbar") && widget->parentWidget()->isA("KonqFrameTabs")) { + + QTab* tab = opt.tab(); + int count = tb->count(); + + int fm = tb->fontMetrics().width("about:blank"); + if(tb->parentWidget()->width() <= opt.tab()->rect().x()+44+fm) + return QSize(s.width(), s.height()); + + int dots = tb->fontMetrics().width("."); + if((dots*minTabLength+44)*count >= tb->width()) // 44 = frame+iconwidth + return QSize(s.width(), s.height()); + + QSize sz = KStyle::sizeFromContents( t, widget, s, opt ); + + QString str; + str.fill(' ', minTabLength); + if( tab->text().isEmpty() || tab->text() == str) { + tab->setText("about:blank"); + //return QSize( fm+44, 26 ); + return QSize( fm+44, s.height()); + } + return QSize(s.width(), s.height()); + } + else { + switch (tb->shape()) { + case QTabBar::RoundedAbove: + case QTabBar::RoundedBelow: + return QSize( s.width(), s.height()-2 ); + default: + return QSize( s.width(), s.height() ); // triangular + } + } + } + + case CT_ToolButton: { + if(dynamic_cast<const QToolButton*>(widget)) { + if(dynamic_cast<QTabWidget*>(widget->parentWidget())) // smaller cornerWidget + return QSize( s.width()+9, s.height()+7 ); + return QSize( s.width()+11, s.height()+7 ); + } + return KStyle::sizeFromContents (t, widget, s, opt); // KMultiTabBar buttons + } + case CT_SpinBox: { + QSize sz = KStyle::sizeFromContents( t, widget, s, opt ); + int h = sz.height()%2 != 0 ? sz.height()+1 : sz.height(); + return ( QSize( sz.width(), h < 24 ? 24 : h) ); + } + + case CT_Header: { + QSize sz = KStyle::sizeFromContents( t, widget, s, opt ); + return QSize(sz.width(), sz.height()-2); + } + + case CT_PopupMenuItem: { + if (!widget || opt.isDefault()) + return s; +// static const int itemHMargin = 6; +// static const int itemFrame = 7; +// static const int arrowHMargin = 6; + + const QPopupMenu *popup = dynamic_cast<const QPopupMenu *>(widget); + QMenuItem *mi = opt.menuItem(); + int maxpmw = opt.maxIconWidth(); + int w = s.width(), h = s.height(); // includes pixmap width + int cmwidth = 16; + + + if (mi->custom()) { + w = mi->custom()->sizeHint().width(); + h = mi->custom()->sizeHint().height(); + if (!mi->custom()->fullSpan() ) + h += 4; + } else if (mi->widget()) { + // don't change the size in this case. + } else if (mi->isSeparator()) { + w = 20; + h = 5; + } else { + if (mi->pixmap()) { + h = QMAX(h, mi->pixmap()->height() + 2); + } else { + h = QMAX(h, 16 + 2 ); + h = QMAX(h, popup->fontMetrics().height() + 4 ); + } + + if (mi->iconSet()) { + h = QMAX(h, mi->iconSet()->pixmap(QIconSet::Small, QIconSet::Normal).height() + 2); + } + } + + if(_indentPopupMenuItems) { + w += itemHMargin + arrowHMargin + itemFrame*2; + } + else { + w += itemFrame*2; + + if (mi->popup()) { + w += itemHMargin + arrowHMargin; + } + if (maxpmw) { + w += itemHMargin; + } + } + + int t; + if (!mi->text().isNull() && (t = mi->text().find('\t')) && t >= 0 && mi->text().at(t+1) != 0) { + // space between text and accel + checkmark width (in guiStyle "Windows" isCheckable() returns always true...) + w += 18+cmwidth; + } + else + w += cmwidth; + + return QSize(w, h); + } + default: + return KStyle::sizeFromContents (t, widget, s, opt); + } + + return KStyle::sizeFromContents (t, widget, s, opt); +} + +int DominoStyle::styleHint( StyleHint stylehint, + const QWidget *widget, + const QStyleOption &option, + QStyleHintReturn* returnData ) const +{ + switch (stylehint) { + case SH_PopupMenu_SubMenuPopupDelay: + //return 96; // Motif-like delay... + return 250; + case SH_GroupBox_TextLabelVerticalAlignment: { + return Qt::AlignTop; + } + case SH_ScrollBar_BackgroundMode: { + return Qt::PaletteBackground; + } + case SH_ScrollBar_ScrollWhenPointerLeavesControl: + // if set to false (the default) it will also scroll when the subPage button is pressed, so no choice here (Qt 3.6) + return true; + case SH_TabBar_Alignment: { + return _centerTabs ? AlignHCenter : AlignLeft; + } + case SH_ToolBox_SelectedPageTitleBold: { + return false; + } + case SH_LineEdit_PasswordCharacter: + { + if (widget) { + const QFontMetrics &fm = widget->fontMetrics(); + if (fm.inFont(QChar(0x25CF))) { + return 0x25CF; + } else if (fm.inFont(QChar(0x2022))) { + return 0x2022; + } + } + return '*'; + } + default: + return KStyle::styleHint(stylehint, widget, option, returnData); + } +} + +QPixmap DominoStyle::stylePixmap(StylePixmap stylepixmap, const QWidget* widget, const QStyleOption& opt) const { + + switch (stylepixmap) { + case SP_DockWindowCloseButton: + case SP_TitleBarCloseButton: + return QPixmap(qembed_findImage("DockCloseButton").copy(0,0,12,12)); + case SP_TitleBarMinButton: + return QPixmap(qembed_findImage("DockbackButton").copy(0,0,12,12)); + case SP_TitleBarMaxButton: + return QPixmap(qembed_findImage("OverlapButton").copy(0,0,12,12)); + case SP_TitleBarNormalButton: + return QPixmap(qembed_findImage("ToDesktopButton").copy(0,0,12,12)); + default: + return KStyle::stylePixmap(stylepixmap, widget, opt); + } +} + + +QColor DominoStyle::lightenColor(const QColor &color, const int value) const +{ + if(value < 0) + return darkenColor(color, QABS(value)); + int r, g, b; + color.getRgb(&r, &g, &b); + r += value; + if(r > 255) + r =255; + g += value; + if(g > 255) + g =255; + b += value; + if(b > 255) + b =255; + return QColor(r, g, b); +} + +QColor DominoStyle::darkenColor(const QColor &color, const int value) const +{ + if(value < 0) + return lightenColor(color, QABS(value)); + int r, g, b; + color.getRgb(&r, &g, &b); + r -= value; + if(r < 0) + r = 0; + g -= value; + if(g < 0) + g = 0; + b -= value; + if(b < 0) + b = 0; + return QColor(r, g, b); +} + +QColor DominoStyle::dGetColor(const QColor &color, const int value) const +{ + int h, s, v; + color.getHsv(&h, &s, &v); + return (v<127)? lightenColor(color, value): darkenColor(color, value); +} + + +QPixmap* DominoStyle::renderLineEditShadow(QWidget* widget, QRect r, QColor bg, uint flags, bool /*reverse*/) { + + bool drawLeft = flags& Draw_Left; + bool drawRight = flags& Draw_Right; + + int x, y, w, h; + r.rect(&x, &y, &w, &h); + if(!drawLeft) { + x = -3; + w += 3; + } + else if(!drawRight) + w += 3; + QRect rect(x, y, w, h); + + + QColor tintColor; + QString enabled = widget->isEnabled() ? "1" : "0"; + if(!widget->isEnabled()) + tintColor =bg; + else + tintColor = alphaBlendColors(Qt::black, bg, 30+35); + + QPixmap* prBgShadow; + if(!(prBgShadow = QPixmapCache::find(QString::number(bg.pixel(), 16)+QString::number(qApp->palette().active().background().pixel(), 16)+"leBgShadow"+enabled))) { + prBgShadow = new QPixmap(4,4); + prBgShadow->fill(bg); + QPixmap pix = tintImage(qembed_findImage("progressShadow2"), tintColor); + bitBlt(prBgShadow, 0, 0, &pix); + QPixmapCache::insert(QString::number(bg.pixel(), 16)+QString::number(qApp->palette().active().background().pixel(), 16)+"leBgShadow"+enabled, prBgShadow); + } + + + QPixmap* pix = new QPixmap(rect.size()); + pix->fill(bg); + + if(widget->isEnabled()) { + QPainter p(pix); + + QColor color_d = alphaBlendColors(tintColor, bg, 170); + QColor color_m = alphaBlendColors(tintColor, bg, 85); + QColor color_l = alphaBlendColors(tintColor, bg, 25); + + p.setPen(color_d); + p.drawLine(rect.x()+2, rect.y(), rect.right()-2, rect.y()); + p.setPen(color_m); + p.drawLine(rect.x()+2, rect.y()+1, rect.right()-2, rect.y()+1); + p.setPen(color_l); + p.drawLine(rect.x()+2, rect.y()+2, rect.right()-2, rect.y()+2); + p.drawLine(rect.x()+2, rect.bottom(), rect.right()-2, rect.bottom()); + + //p.setPen(color_l); + p.drawLine(rect.x()+1, rect.y()+3, rect.x()+1, rect.bottom()-1); // l + p.drawLine(rect.right()-1, rect.y()+3, rect.right()-1, rect.bottom()-1); // r + + p.setPen(color_m); + p.drawLine(rect.x(), rect.y()+3, rect.x(), rect.bottom()-1); // l + p.drawLine(rect.right(), rect.y()+3, rect.right(), rect.bottom()-1); // r + + bitBlt(pix, rect.right()-1, rect.y(), prBgShadow, 2, 0, 2, 3, Qt::CopyROP); + bitBlt(pix, rect.x(), rect.y(), prBgShadow, 0, 0, 2, 3, Qt::CopyROP); + bitBlt(pix, rect.right()-1, rect.bottom(), prBgShadow, 2, 3, 2, 1, Qt::CopyROP); + bitBlt(pix, rect.x(), rect.bottom(), prBgShadow, 0, 3, 2, 1, Qt::CopyROP); + + p.end(); + } + return pix; +} + +QColor DominoStyle::getGroupBoxColor(const QWidget* w) const { + QWidget* parent = w->parentWidget(); + int tint = groupBoxSettings.customColor ? 0 : groupBoxSettings.brightness; + while(dynamic_cast<QGroupBox*>(parent)) { + parent = parent->parentWidget(); + tint += groupBoxSettings.brightness; + } + + return QColor(darkenColor(groupBoxSettings.customColor ? groupBoxSettings.color : + qApp->palette().active().background(), tint)); + +} + +QPixmap* DominoStyle::createCheckMark(const QColor color) const { + + QImage checkMark_enabled = qembed_findImage("checkmark"); + QImage checkMark_disabled = setImageOpacity(checkMark_enabled, 25); + + QImage img(32, 17, 32); // left enabled, right disabled + img.setAlphaBuffer(true); + for(int x=0; x < checkMark_enabled.width(); ++x) { + for(int y=0; y < checkMark_enabled.height(); ++y) { + img.setPixel(x, y, checkMark_enabled.pixel(x, y)); + } + } + for(int x=0; x < checkMark_disabled.width(); ++x) { + for(int y=0; y < checkMark_disabled.height(); ++y) { + img.setPixel(x+16, y, checkMark_disabled.pixel(x, y)); + } + } + + return new QPixmap(tintImage(img, color)); +} + +QPixmap* DominoStyle::createRadioIndicator(const QColor color) const { + + QImage dot_enabled = tintImage(qembed_findImage("rb-dot"),color); + + blend(qembed_findImage("rb-dot-shadow"), dot_enabled, dot_enabled); + QImage dot_disabled = setImageOpacity(dot_enabled, 25); + + QImage img(10, 5, 32); + img.setAlphaBuffer(true); + for(int x=0; x < dot_enabled.width(); ++x) { + for(int y=0; y < dot_enabled.height(); ++y) { + img.setPixel(x, y, dot_enabled.pixel(x, y)); + } + } + for(int x=0; x < dot_disabled.width(); ++x) { + for(int y=0; y < dot_disabled.height(); ++y) { + img.setPixel(x+5, y, dot_disabled.pixel(x, y)); + } + } + + return new QPixmap(img); +} + + +void DominoStyle::drawFocusIndicator(QPainter *p, const QRect &r, int flags, const QColorGroup cg, bool /*enabled*/, + const QPixmap* /*pixmap*/, const QString & text, int /*len = -1*/, const QColor& highlight, bool drawLine, bool isButton) const +{ + + if(drawLine) { +// p->setPen(cg.foreground()); +// QPixmap edges = tintImage(qembed_findImage("indicatorEdges"), cg.foreground()); +// bitBlt(p->device(), r.x(), r.bottom()-1, &edges, 0, 0, 2, 1, Qt::CopyROP); +// bitBlt(p->device(), r.right()-2, r.bottom()-1, &edges, 2, 0, 2, 1, Qt::CopyROP); +// p->drawLine(r.x()+2, r.bottom()-1, r.right()-3, r.bottom()-1); + QFont font = p->font(); + font.setUnderline(true); + p->setFont(font); + } + else { + QRect br = p->fontMetrics().boundingRect(r.x(), r.y(), r.width(), r.height(), flags, text); + QPainter pixPainter; + QPixmap textPixmap(br.width()+2, br.height()+2); + textPixmap.fill(QColor(0,0,0)); + pixPainter.begin(&textPixmap); + pixPainter.setPen(white); + pixPainter.setFont(p->font()); + pixPainter.drawText( QRect(1, 1, br.width()-1, br.height()-1), flags, text ); + pixPainter.end(); + + + DominoQPixmap* pixm = (DominoQPixmap*)&textPixmap; + + uint height = pixm->height(); + uint width = pixm->width(); + + pixm->data->alphapm = new QPixmap; + + DominoQPixmap* alphapm = (DominoQPixmap*)pixm->data->alphapm; + + alphapm->data->w = width; + alphapm->data->h = height; + alphapm->data->d = 8; + alphapm->hd = XCreatePixmap(alphapm->x11Display(), RootWindow(alphapm->x11Display(), alphapm->x11Screen()), width, height, 8); + alphapm->rendhd = (HANDLE) XftDrawCreateAlpha( alphapm->x11Display(), alphapm->hd, 8 ); + + XImage *axi = XCreateImage(alphapm->x11Display(), (Visual *) alphapm->x11Visual(), 8, ZPixmap, 0, 0, width, height, 8, 0); + axi->data = (char *) malloc((unsigned) axi->bytes_per_line * height); + + XImage* xi = XGetImage( qt_xdisplay(), pixm->handle(), 0, 0, width, height, AllPlanes, ZPixmap ); + + register int alpha; + register float AXIS_FACTOR = 2.0; + register float DIAGONAL_FACTOR = 1.0; + register double alphaShadow; + register int customalpha = isButton ? focusIndicatorSettings.buttonOpacity : focusIndicatorSettings.opacity; + + for(register uint x = 1; x < width-1; ++x) { + for(register uint y = 1; y < height-1; ++y) { + + alphaShadow = (qBlue(XGetPixel(xi,x-1,y-1)) * DIAGONAL_FACTOR + + qBlue(XGetPixel(xi,x-1,y )) * AXIS_FACTOR + + qBlue(XGetPixel(xi,x-1,y+1)) * DIAGONAL_FACTOR + + qBlue(XGetPixel(xi,x ,y-1)) * AXIS_FACTOR + + 0 + + qBlue(XGetPixel(xi,x ,y+1)) * AXIS_FACTOR + + qBlue(XGetPixel(xi,x+1,y-1)) * DIAGONAL_FACTOR + + qBlue(XGetPixel(xi,x+1,y )) * AXIS_FACTOR + + qBlue(XGetPixel(xi,x+1,y+1)) * DIAGONAL_FACTOR) / 2.0; // / multiplicationFactor + + alpha = (int)alphaShadow; + XPutPixel(axi, x, y, QMIN(255, alpha) *customalpha >> 8); + } + } + + GC gc = XCreateGC(alphapm->x11Display(), alphapm->hd, 0, 0); + XPutImage(alphapm->x11Display(), alphapm->hd, gc, axi, 0, 0, 0, 0, width, height); + + textPixmap.fill(highlight); + + QRect fr = QRect(br.x(), br.y(), QMIN((int)width-2, r.width()) , QMIN((int)height-2, r.height())); + if(fr.x() < r.x()) { + p->setClipRegion(r); + fr.setWidth(fr.width()+abs(fr.x())+2); + } + if(fr.isValid()) + p->drawPixmap(fr.x(), fr.y(), textPixmap, 1, 1, fr.width() , fr.height()); + if(fr.x() < r.x()) + p->setClipping(false); + + if(axi) + XDestroyImage(axi); + if(xi) + XDestroyImage(xi); + XFreeGC(alphapm->x11Display(), gc); + + p->setPen(cg.foreground()); + } +} + +QPixmap DominoStyle::renderOutlineIcon(const QPixmap* icon) const +{ + QImage img = icon->convertToImage(); + QImage outlineIcon(img.width()+2, img.height()+2, 32); + outlineIcon.setAlphaBuffer(true); + + register unsigned int *outlineIconData = (unsigned int*) outlineIcon.bits(); + register uint total = outlineIcon.width()*outlineIcon.height(); + for (register uint current = 0 ; current < total ; ++current ) { + outlineIconData[ current ] = 0x00000000; + } + + bitBlt(&outlineIcon, 0, 0, &img); + bitBlt(&outlineIcon, 1, 0, &img); + bitBlt(&outlineIcon, 2, 0, &img); + bitBlt(&outlineIcon, 0, 1, &img); + bitBlt(&outlineIcon, 2, 1, &img); + bitBlt(&outlineIcon, 0, 2, &img); + bitBlt(&outlineIcon, 1, 2, &img); + bitBlt(&outlineIcon, 2, 2, &img); + + register uint customalpha = focusIndicatorSettings.buttonOpacity; + for (register uint current = 0 ; current < total ; ++current ) { + outlineIconData[ current ] = qRgba( focusIndicatorSettings.buttonColor.red(), focusIndicatorSettings.buttonColor.green(), focusIndicatorSettings.buttonColor.blue(), qAlpha(outlineIconData[ current ]) * customalpha >> 8); + } + + return QPixmap(outlineIcon); +} + + + + +void DominoStyle::drawItem( QPainter *p, const QRect &r, + int flags, const QColorGroup &g, bool enabled, + const QPixmap *pixmap, const QString& text, int len, + const QColor* penColor ) const +{ + dominoDrawItem(p, r, flags, g, enabled, pixmap, text, len, penColor, false); +} + +void DominoStyle::dominoDrawItem( QPainter *p, const QRect &r, + int flags, const QColorGroup &g, bool enabled, + const QPixmap *pixmap, const QString& text, int len, + const QColor* penColor, bool buttonTextEffect ) const +{ + + int x = r.x(); + int y = r.y(); + int w = r.width(); + int h = r.height(); + + p->setPen( penColor?*penColor:g.foreground() ); + if ( pixmap ) { + QPixmap pm( *pixmap ); + bool clip = (flags & Qt::DontClip) == 0; + if ( clip ) { + if ( pm.width() < w && pm.height() < h ) { + clip = FALSE; + } else { + p->save(); + QRegion cr = QRect(x, y, w, h); + if (p->hasClipping()) + cr &= p->clipRegion(QPainter::CoordPainter); + p->setClipRegion(cr); + } + } + if ( (flags & Qt::AlignVCenter) == Qt::AlignVCenter ) + y += h/2 - pm.height()/2; + else if ( (flags & Qt::AlignBottom) == Qt::AlignBottom) + y += h - pm.height(); + if ( (flags & Qt::AlignRight) == Qt::AlignRight ) + x += w - pm.width(); + else if ( (flags & Qt::AlignHCenter) == Qt::AlignHCenter ) + x += w/2 - pm.width()/2; + else if ( ((flags & Qt::AlignLeft) != Qt::AlignLeft) && QApplication::reverseLayout() ) // AlignAuto && rightToLeft + x += w - pm.width(); + + p->drawPixmap( x, y, pm ); + if ( clip ) + p->restore(); + } + else if ( !text.isNull() ) { + + + if(textEffectSettings.mode > 1 || buttonTextEffect) { // 0=none, 1=only buttons, 2=everywhere + + QRect br = p->fontMetrics().boundingRect(x, y, w, h, flags, text); + QPainter pixPainter; + QPixmap textPixmap(br.width(), br.height()); + textPixmap.fill(QColor(0,0,0)); + pixPainter.begin(&textPixmap); + pixPainter.setPen(white); + pixPainter.setFont(p->font()); + pixPainter.drawText( QRect(0,0,br.width(), br.height()), flags, text ); + pixPainter.end(); + + DominoQPixmap* pixm = (DominoQPixmap*)&textPixmap; + + uint height = pixm->height(); + uint width = pixm->width(); + + pixm->data->alphapm = new QPixmap; + + DominoQPixmap* alphapm = (DominoQPixmap*)pixm->data->alphapm; + + alphapm->data->w = width; + alphapm->data->h = height; + alphapm->data->d = 8; + alphapm->hd = XCreatePixmap(alphapm->x11Display(), RootWindow(alphapm->x11Display(), alphapm->x11Screen()), width, height, 8); + alphapm->rendhd = (HANDLE) XftDrawCreateAlpha( alphapm->x11Display(), alphapm->hd, 8 ); + + XImage *axi = XCreateImage(alphapm->x11Display(), (Visual *) alphapm->x11Visual(), 8, ZPixmap, 0, 0, width, height, 8, 0); + axi->data = (char *) malloc((unsigned) axi->bytes_per_line * height); + XImage* xi = XGetImage( qt_xdisplay(), pixm->handle(), 0, 0, width, height, AllPlanes, ZPixmap ); + + register int alpha; + register int customalpha = buttonTextEffect ? textEffectSettings.buttonOpacity : textEffectSettings.opacity; + for(register uint y = 0; y < height; ++y) { + for(register uint x = 0; x < width; ++x) { + alpha = (XGetPixel(xi, x, y)& 0xff ) * customalpha >> 8; // blue as alpha + XPutPixel(axi, x, y, alpha); + } + } + + GC gc = XCreateGC(alphapm->x11Display(), alphapm->hd, 0, 0); + XPutImage(alphapm->x11Display(), alphapm->hd, gc, axi, 0, 0, 0, 0, width, height); + + + if(buttonTextEffect) { + textPixmap.fill(textEffectSettings.buttonColor); + + QRect tr = QRect(br.x()+textEffectSettings.buttonPos.x(), br.y()+textEffectSettings.buttonPos.y(), r.width(), r.height()); + if(tr.x() < r.x()) { + p->setClipRegion(r); + tr.setWidth(tr.width()+r.x()+abs(tr.x())); + } + p->drawPixmap(tr.x(), tr.y(), textPixmap, 0, 0, tr.width(), tr.height()); + if(tr.x() < r.x()) + p->setClipping(false); + } + else { + textPixmap.fill(textEffectSettings.color); + + QRect tr = QRect(br.x()+textEffectSettings.pos.x(), br.y()+textEffectSettings.pos.y(), r.width(), r.height()); + if(tr.x() < r.x()) { + p->setClipRegion(r); + tr.setWidth(tr.width()+r.x()+abs(tr.x())); + } + p->drawPixmap(tr.x(), tr.y(), textPixmap, 0, 0, tr.width(), tr.height()); + if(tr.x() < r.x()) + p->setClipping(false); + } + + if(axi); + XDestroyImage(axi); + if(xi) + XDestroyImage(xi); + XFreeGC(alphapm->x11Display(), gc); + } + + if(!enabled) + p->setPen(g.text()); + p->drawText( r.x(), r.y(), r.width(), r.height(), flags, text, len ); + + + } +} + + +QWidget::BackgroundOrigin DominoStyle::setPixmapOrigin(QWidget::BackgroundOrigin origin) +{ + switch(origin) { + case QWidget::WidgetOrigin: + return QWidget::ParentOrigin; + case QWidget::ParentOrigin: + return QWidget::AncestorOrigin; + default: + return origin; + break; + } +} + +void DominoStyle::setDominoButtonPalette(QWidget* widget, PaletteTyp type) { + QPalette pal; + switch(type) { + case Palette_Application: + pal = qApp->palette(); + break; + case Palette_Parent: + pal = widget->parentWidget()->palette(); + break; + case Palette_Widget: + pal = widget->palette(); + default: + break; + } + + int h, s, v; + pal.active().buttonText().hsv(&h, &s, &v); + QColor disabledColor = alphaBlendColors(pal.active().buttonText(), v < 127 ? white : black, 150); + pal.setColor(QPalette::Disabled, QColorGroup::Text, disabledColor); + + widget->setPalette(pal); +} + + +void DominoStyle::updateTabWidgetFrame() { + + QTabWidget* tw = dynamic_cast<QTabWidget*>(sender()->parent()); + QWidget* w = tw ? tw->currentPage() : 0; + if(!w) + return; + QFrame* f = dynamic_cast<QFrame*>(w->parentWidget()); + if(f) { + QRect r = f->rect(); + if(tw->tabPosition() == QTabWidget::Top) + r= QRect(r.x(), r.y(), r.width(), 3); + else + r= QRect(r.x(), r.y()+r.height()-4, r.width(), 2); + f->repaint(r, false); + } +} + +QPixmap DominoStyle::disableIcon(const QPixmap* icon) const { + + QImage img = icon->convertToImage(); + register uint pixels = img.depth() > 8 ? img.width()*img.height() : img.numColors(); + register uint *data = img.depth() > 8 ? (unsigned int *)img.bits() : (unsigned int *)img.colorTable(); + register uint val, i; + for(i=0; i < pixels; ++i){ + val = qGray(data[i]); + data[i] = qRgba(val, val, val, qAlpha(data[i])); + } + img = setImageOpacity(img, 50); + + return QPixmap(img); +} + + +// same as in renderSurface() but with darker colors +void DominoStyle::renderTabSeparator(QPainter *p, const QRect &r, const QColor buttonColor, bool tabAbove) const { + + const DSurface* ds = tabAbove ? &tabTopSurface : &tabBottomSurface; + + int top = r.y()+r.height()*ds->g1Top/100; + int bottom = r.height()*ds->g1Bottom/100; + int top2 = r.y()+r.height()*ds->g2Top/100; + int bottom2 = r.height()*ds->g2Bottom/100-top2; + + QColor c1; + QColor c2; + QColor c3; + QColor c4; + QColor bg; + + if(buttonColor != qApp->palette().active().button()) { + c1 = alphaBlendColors(buttonColor, ds->g1Color1, 127); + c2 = alphaBlendColors(buttonColor, ds->g1Color2, 127); + c3 = alphaBlendColors(buttonColor, ds->g2Color1, 127); + c4 = alphaBlendColors(buttonColor, ds->g2Color2, 127); + bg = alphaBlendColors(buttonColor, ds->background, 127); + } + else { + c1 = ds->g1Color1; + c2 = ds->g1Color2; + c3 = ds->g2Color1; + c4 = ds->g2Color2; + bg = ds->background; + } + + const int alpha = 35; // 55, 25 + p->fillRect(r, alphaBlendColors(QColor(0,0,0),bg , alpha)); + switch(ds->numGradients) { + case 1: { + c1 = alphaBlendColors(QColor(0,0,0), c1, alpha); + c2 = alphaBlendColors(QColor(0,0,0), c2, alpha); + renderGradient(p, QRect(r.x(), top, r.width(), bottom), c1, c2, true); + break; + } + case 2: { + c1 = alphaBlendColors(QColor(0,0,0), c1, alpha); + c2 = alphaBlendColors(QColor(0,0,0), c2, alpha); + c3 = alphaBlendColors(QColor(0,0,0), c3, alpha); + c4 = alphaBlendColors(QColor(0,0,0), c4, alpha); + renderGradient(p, QRect(r.x(), top, r.width(), bottom), c1, c2, true); + renderGradient(p, QRect(r.x(), top2, r.width(), bottom2), c3, c4, true); + } + default: + break; + } +} + +void DominoStyle::renderGroupBox(QObject *obj, QEvent *ev) { + + QGroupBox* gb = dynamic_cast<QGroupBox*>(obj); + bool paintEvent = ev->type() == QEvent::Paint; + QRect r = gb->rect(); + + if(gb->isFlat()) { + + QString title = gb->title(); + int titleHeight = gb->fontMetrics().height(); + int titleWidth = gb->fontMetrics().width(title); + if(title.contains("&")) + titleWidth -= gb->fontMetrics().width("&"); + QPainter p(gb); +// p.setPen(qApp->palette().active().background().dark(120)); + p.setPen(alphaBlendColors(gb->paletteForegroundColor(), gb->paletteBackgroundColor(), 40)); + p.drawLine(0, titleHeight/2-2, r.width()/2-titleWidth/2-4, titleHeight/2-2); + p.drawLine(r.width()/2+titleWidth/2+4, titleHeight/2-2, r.width(), titleHeight/2-2); + + QColorGroup cg = gb->parentWidget()->colorGroup(); + dominoDrawItem(&p, QRect(r.width()/2-titleWidth/2, -1, r.width(), titleHeight), ShowPrefix, cg, Style_Enabled, 0, title, -1, &cg.foreground(), false); + p.setPen(cg.foreground()); + ((DominoQGroupBox*)gb)->drawContents(&p); + } + else { + QString title = gb->title(); + int titleHeight = gb->fontMetrics().height(); + QColor outsideColor = gb->parentWidget() ? gb->parentWidget()->paletteBackgroundColor() : gb->paletteBackgroundColor(); + QColor insideColor = groupBoxSettings.tintBackground ? getGroupBoxColor(gb) : gb->paletteBackgroundColor(); + bool pixmapExists = groupBoxPixmaps.contains(gb); + + if(paintEvent && pixmapExists) { + QPainter p; + if(!title.isEmpty()) { + int titleWidth = gb->fontMetrics().width(title); + if(title.contains("&")) + titleWidth -= gb->fontMetrics().width("&"); + + QPainter p(groupBoxPixmaps[gb]); + QRect titleRect = QRect((r.width()-titleWidth)/2, -1, r.width(), titleHeight); + p.fillRect(titleRect, outsideColor); + dominoDrawItem(&p, titleRect, ShowPrefix, gb->colorGroup(), true, 0, title, -1, &gb->foregroundColor(), false); + p.end(); + } + // only needed for the case if a disabled groupbox gets disabled for a second time. + // Qt3 just changes the palette to disabled without checking if it already is (and removes here the "hidden" background pixmap) + bitBlt(gb, 0, 0, groupBoxPixmaps[gb]); + p.begin(gb); + ((DominoQGroupBox*)gb)->drawContents(&p); + return; + } + + bool isCheckable = gb->isCheckable(); + int x = r.x(); + int y = isCheckable ? r.y()+titleHeight+5 : (title.isNull() || title.isEmpty()) ? QMAX(r.y()-1, 0) : r.y()+titleHeight-1; + int w = r.width(); + int h = r.height(); + +// if(y+16 > h || 16 > w) // don't overlap the pixmaps +// return; + + + QPixmap buffer(r.width(), r.height()); + + QPainter p(&buffer); + p.fillRect(QRect(0, 0, w, y), outsideColor); + p.fillRect(QRect(x+3, y+3, w-6, h-6-y), insideColor); + + QPixmap* gbPix = 0; + if(!(gbPix = QPixmapCache::find(QString::number(outsideColor.pixel(), 16)+QString::number(insideColor.pixel(), 16)+"groupbox"))) { + gbPix = new QPixmap(16, 16); + gbPix->fill(outsideColor); + + QPixmap groupBoxPixMask = qembed_findImage("groupBoxMask"); + groupBoxPixMask.fill(insideColor); + bitBlt(gbPix, 0, 0, &groupBoxPixMask); + + QPixmap groupBoxPix = qembed_findImage("groupBox"); + bitBlt(gbPix, 0, 0, &groupBoxPix); + + QPixmapCache::insert(QString::number(outsideColor.pixel(), 16)+QString::number(insideColor.pixel(), 16)+"groupbox", gbPix); + } + + bitBlt(&buffer, 0, y, gbPix, 0, 0, 8, 8); + bitBlt(&buffer, w-8, y, gbPix, 8, 0, 8, 8); + bitBlt(&buffer, 0, h-8, gbPix, 0, 8, 8, 8); + bitBlt(&buffer, w-8, h-8, gbPix, 8, 8, 8, 8 ); + + // top + QColor c1 = alphaBlendColors(QColor(255,255,255), outsideColor, 25); + QColor c2 = alphaBlendColors(QColor(0,0,0), insideColor, 70); + QColor c3 = alphaBlendColors(QColor(0,0,0), insideColor, 30); + // left + right + QColor c4 = alphaBlendColors(QColor(255,255,255), outsideColor, 40); + QColor c5 = c3; //alphaBlendColors(QColor(0,0,0), insideColor, 30); + QColor c6 = alphaBlendColors(QColor(0,0,0), insideColor, 4); + // bottom + QColor c7 = alphaBlendColors(QColor(6,6,6), insideColor, 25); + QColor c8 = alphaBlendColors(QColor(255,255,255), outsideColor, 79); + QColor c9 = alphaBlendColors(QColor(255,255,255), outsideColor, 30); + + + // top + p.setPen(c1); + p.drawLine(r.left()+8, y, r.right()-8, y); + p.setPen(c2); + p.drawLine(r.left()+8, y+1, r.right()-8, y+1); + p.setPen(c3); + p.drawLine(r.left()+8, y+2, r.right()-8, y+2); + // bottom + p.setPen(c7); + p.drawLine(r.left()+8, r.bottom()-2, r.right()-8, r.bottom()-2); + p.setPen(c8); + p.drawLine(r.left()+8, r.bottom()-1, r.right()-8, r.bottom()-1); + p.setPen(c9); + p.drawLine(r.left()+8, r.bottom(), r.right()-8, r.bottom()); + // left / right + p.setPen(c4); + p.drawLine(r.left(), y+8, r.left(), r.bottom()-8); + p.drawLine(r.right(), y+8, r.right(), r.bottom()-8); + p.setPen(c5); + p.drawLine(r.left()+1, y+8, r.left()+1, r.bottom()-8); + p.drawLine(r.right()-1, y+8, r.right()-1, r.bottom()-8); + p.setPen(c6); + p.drawLine(r.left()+2, y+8, r.left()+2, r.bottom()-8); + p.drawLine(r.right()-2, y+8, r.right()-2, r.bottom()-8); + + p.end(); + + if(ev->type() == QEvent::Resize) + XSetWindowBackgroundPixmap( gb->x11Display(), gb->winId(), buffer.handle()); + else if(paintEvent) { + if(!title.isEmpty()) { + int titleWidth = gb->fontMetrics().width(title); + if(title.contains("&")) + titleWidth -= gb->fontMetrics().width("&"); + + p.begin(&buffer); + QRect titleRect = QRect((r.width()-titleWidth)/2, -1, r.width(), titleHeight); + p.fillRect(titleRect, outsideColor); + dominoDrawItem(&p, titleRect, ShowPrefix, gb->colorGroup(), true, 0, title, -1, &gb->foregroundColor(), false); + p.end(); + } + bitBlt(gb, 0, 0, &buffer); + + p.begin(gb); + ((DominoQGroupBox*)gb)->drawContents(&p); + } + + + if(pixmapExists) + delete groupBoxPixmaps[gb]; + groupBoxPixmaps[gb] = new QPixmap(buffer); + + } +} + +void DominoStyle::spinBoxValueChanged(int value) { + QSpinBox* sb = (QSpinBox*)sender(); + if(spinWidgetDown) { + spinWidgetDown = !(value == sb->maxValue() || value == sb->minValue()); + if(!spinWidgetDown) { + // if we repaint directly, the last mousePressEvent wouldn't be down + QTimer::singleShot( 200, ((DominoQSpinBox*)sb)->editor()->parentWidget(), SLOT(repaint()) ); + } + } +} + +uint DominoStyle::preMultiplyColor(const uint &c) const { + XRenderColor clr; + uint color = c << 8 | qAlpha(c); + + uint red = (color >> 24) & 0xff; + uint green = (color >> 16) & 0xff; + uint blue = (color >> 8) & 0xff; + uint alpha = (color >> 0) & 0xff; + + red = red * alpha / 255; + green = green * alpha / 255; + blue = blue * alpha / 255; + + clr.red = (red << 8) + red; + clr.green = (green << 8) + green; + clr.blue = (blue << 8) + blue; + clr.alpha = (alpha << 8) + alpha; + + return qRgba(clr.red, clr.green, clr.blue, clr.alpha); +} + +void DominoStyle::toolPopupPressed() { + QToolButton* tb = (QToolButton*)sender(); + if(!tb ) + return; + if(tb->popup() && tb->isEnabled() && tb->isDown()) { + popupButton = tb; + connect(popupTimer, SIGNAL(timeout()), this, SLOT(popupToolMenu())); + popupTimer->start(600, true); + } +} + +void DominoStyle::popupToolMenu() { + if(!popupButton ) + return; + + if(popupButton->popup() && !popupButton->popup()->isVisible() && popupButton->isEnabled() && popupButton->isDown()) { + popupButton->openPopup(); + } + popupButton = 0; +} + +void DominoStyle::toolPopupReleased() { + if(!popupButton) + return; + + if(popupTimer->isActive()) { + popupTimer->stop(); + popupButton = 0; + } +} + +#include "eventfilter.cpp" +#include "domino.moc" diff --git a/domino/domino.h b/domino/domino.h new file mode 100644 index 0000000..617f111 --- /dev/null +++ b/domino/domino.h @@ -0,0 +1,865 @@ +/* Domino widget style for KDE 3 + Copyright (C) 2006 Michael Lentner <michaell@gmx.net> + + based on the KDE style "Plastik": + Copyright (C) 2003 Sandro Giessl <ceebx@users.sourceforge.net> + + based on the KDE style "dotNET": + Copyright (C) 2001-2002, Chris Lee <clee@kde.org> + Carsten Pfeiffer <pfeiffer@kde.org> + Karol Szwed <gallium@kde.org> + Drawing routines completely reimplemented from KDE3 HighColor, which was + originally based on some stuff from the KDE2 HighColor. + + based on drawing routines of the style "Keramik": + Copyright (c) 2002 Malte Starostik <malte@kde.org> + (c) 2002,2003 Maksim Orlovich <mo002j@mail.rochester.edu> + based on the KDE3 HighColor Style + Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org> + (C) 2001-2002 Fredrik Höglund <fredrik@kde.org> + Drawing routines adapted from the KDE2 HCStyle, + Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org> + (C) 2000 Dirk Mueller <mueller@kde.org> + (C) 2001 Martijn Klingens <klingens@kde.org> + Progressbar code based on KStyle, + Copyright (C) 2001-2002 Karol Szwed <gallium@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __DOMINO_H +#define __DOMINO_H + +#include <kstyle.h> +#include <qintcache.h> +#include <ktoolbarbutton.h> +#include "misc.h" +#include "data.h" +#include <qpixmapcache.h> + + +// #include <X11/extensions/Xrender.h> +#include <X11/Xft/Xft.h> +class ButtonContour; +class RubberWidget; +class Rubber; + + + enum ContourType +{ + Contour_Sunken = 0, + Contour_Raised = 1, + Contour_Simple = 2 +}; + + enum ContourState +{ + Contour_Default = 0, + Contour_Pressed = 1, + Contour_MouseOver = 2, + Contour_DefaultButton = 3 +}; + + enum TextEffect +{ + TextEffect_None = 0, + TextEffect_OnlyButton = 1, + TextEffect_Everywhere = 2 +}; + + struct DSurface { + int numGradients; + QColor g1Color1; + QColor g1Color2; + QColor g2Color1; + QColor g2Color2; + QColor background; + int g1Top; + int g1Bottom; + int g2Top; + int g2Bottom; + }; + + +class DominoStyle : public KStyle +{ + Q_OBJECT + +public: + + DominoStyle(); + virtual ~DominoStyle(); + + enum PaletteTyp + { + Palette_Application, + Palette_Parent, + Palette_Widget + }; + + void polish(QApplication* app ); + void polish(QWidget* widget ); + void polish( QPalette &p ); + void unPolish(QWidget* widget ); + + void drawKStylePrimitive(KStylePrimitive kpe, + QPainter* p, + const QWidget* widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption& = QStyleOption::Default ) const; + + void drawPrimitive(PrimitiveElement pe, + QPainter *p, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption &opt = QStyleOption::Default ) const; + + void drawControl(ControlElement element, + QPainter *p, + const QWidget *widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + const QStyleOption& = QStyleOption::Default ) const; + + void drawControlMask( ControlElement, QPainter *, const QWidget *, const QRect &, const QStyleOption &) const; + + void drawComplexControl(ComplexControl control, + QPainter *p, + const QWidget *widget, + const QRect &r, + const QColorGroup &cg, + SFlags flags = Style_Default, + SCFlags controls = SC_All, + SCFlags active = SC_None, + const QStyleOption& = QStyleOption::Default ) const; + + int pixelMetric(PixelMetric m, + const QWidget *widget = 0 ) const; + + QRect subRect(SubRect r, + const QWidget *widget ) const; + + QRect querySubControlMetrics(ComplexControl control, + const QWidget *widget, + SubControl subcontrol, + const QStyleOption &opt = QStyleOption::Default ) const; + + QSize sizeFromContents(QStyle::ContentsType t, + const QWidget *w, + const QSize &s, + const QStyleOption &o) const; + + int styleHint(StyleHint, const QWidget * = 0, + const QStyleOption & = QStyleOption::Default, + QStyleHintReturn * = 0 ) const; + + + QPixmap stylePixmap(StylePixmap stylepixmap, const QWidget* widget, const QStyleOption& opt) const; + + void drawItem( QPainter *p, const QRect &r, + int flags, const QColorGroup &g, bool enabled, + const QPixmap *pixmap, const QString &text, + int len = -1, const QColor *penColor = 0) const; + + void dominoDrawItem( QPainter *p, const QRect &r, + int flags, const QColorGroup &g, bool enabled, + const QPixmap *pixmap, const QString &text, + int len = -1, const QColor *penColor = 0, bool buttonTextEffect = 0 ) const; + + void setDominoButtonPalette(QWidget* widget, PaletteTyp type); + + virtual void drawFocusIndicator(QPainter *p, + const QRect &r, + int flags, + const QColorGroup cg, + bool /*enabled*/, + const QPixmap* /*pixmap*/, + const QString & text, + int /*len = -1*/, + const QColor& highlight = 0, + bool drawLine = true, + bool isButton = false) const; + + QPixmap renderOutlineIcon(const QPixmap* icon) const; + + void renderSurface(QPainter *p, + const QRect &r, + const QColor &backgroundColor, + const QColor &buttonColor, + const QColor &highlightColor, + const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight|Is_Horizontal) const; + + inline QWidget::BackgroundOrigin setPixmapOrigin(QWidget::BackgroundOrigin origin); + + mutable Rubber* rubber; + mutable QRect oldRubberRect; + mutable bool viewPortPressed; + mutable bool ignoreNextFocusRect; + uint _argbRubberBandColor; + mutable bool compositeManagerRunning; + const QWidget* rubberViewPort; + +protected: + + enum RubberType + { + ArgbRubber = 1, + LineRubber = 2, + DistRubber = 3 + }; + RubberType rubberBandType; + + enum TabPosition + { + First , + Middle, + Last, + Single + }; + + struct TextEffectSettings { + TextEffect mode; + QColor color; + QColor buttonColor; + int opacity; + int buttonOpacity; + QPoint pos; + QPoint buttonPos; + }; + + struct GroupBoxSettings { + bool tintBackground; + int brightness; + bool customColor; + QColor color; + }; + + struct FocusIndicatorSettings { + QColor color; + int opacity; + QColor buttonColor; + int buttonOpacity; + bool drawUnderline; + bool indicateFocus; + }; + + + mutable TextEffectSettings textEffectSettings; + GroupBoxSettings groupBoxSettings; + FocusIndicatorSettings focusIndicatorSettings; + + ButtonContour* buttonContour; + + enum SurfaceFlags { + Draw_Left = 0x00000001, + Draw_Right = 0x00000002, + Draw_Top = 0x00000004, + Draw_Bottom = 0x00000008, + Is_Horizontal = 0x00000200, + Is_Highlight = 0x00000400, + Is_Default = 0x00000800, + Is_Disabled = 0x00001000, + Round_UpperLeft = 0x00002000, + Round_UpperRight = 0x00004000, + Round_BottomLeft = 0x00008000, + Round_BottomRight = 0x00010000, + Rectangular_UpperLeft = 0x00000010, + Rectangular_UpperRight = 0x10000020, + Rectangular_BottomLeft = 0x00000040, + Rectangular_BottomRight = 0x00000080, + + Draw_AlphaBlend = 0x00020000, + Is_ComboBox = 0x00080000, + Is_Button = 0x00100000, + Is_CheckItem = 0x00200000, + Is_RadioButton = 0x00400000, + Is_TabTop = 0x00000100, + Is_TabBottom = 0x01000000, + Is_ActiveTabTop = 0x00040000, + Is_ActiveTabBottom = 0x00800000, + Is_ScrollBarBtn = 0x02000000, + Is_Header = 0x04000000, + Is_ScrollBarGroove = 0x08000000, + Is_Slider = 0x20000000, + Is_Down = 0x40000000 + }; + + enum DominoStyleFlags { + Domino_noCache = 0x80000000 + }; + + enum DominoPrimitiveElement { + PE_ScrollBarSubLine2 = 0xf000001 + }; + + void renderContour(QPainter *p, + const QRect &r, + const QColor &backgroundColor, + const QColor &contourColor, + const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight) const; + + void renderButtonShadow(QPainter *p, const QRect &r, const uint flags = Draw_Left|Draw_Right|Draw_Top|Draw_Bottom| + Round_UpperLeft|Round_UpperRight|Round_BottomLeft|Round_BottomRight|Is_Horizontal) const; + + QPixmap* renderLineEditShadow(QWidget* widget, QRect rect, QColor bg, uint flags, bool reverse); + + inline void renderPixel(QPainter *p, + const QPoint &pos, + const int alpha, + const QColor &color, + const QColor &background = QColor(), + bool fullAlphaBlend = true) const; + + void renderButton(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool sunken = false, + bool mouseOver = false, + bool horizontal = true, + bool enabled = true, + bool khtmlMode = false) const; + + void renderHeader(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool sunken = false, + bool mouseOver = false, + bool horizontal = true, + bool enabled = true) const; + + void renderGradient(QPainter *p, + const QRect &r, + const QColor &c1, + const QColor &c2, + bool horizontal = true) const; + + void renderTab(QPainter *p, + const QRect &r, + const QColorGroup &g, + bool mouseOver = false, + const bool selected = false, + const bool bottom = false, + const TabPosition pos = Middle, + const bool triangular = false, + const bool cornerWidget = false, + const bool konqTab = false) const; + + DSurface btnSurface; + DSurface tabTopSurface; + DSurface activeTabTopSurface; + DSurface tabBottomSurface; + DSurface activeTabBottomSurface; + DSurface scrollBarSurface; + DSurface scrollBarGrooveSurface; + DSurface headerSurface; + DSurface checkItemSurface; + + bool eventFilter(QObject *, QEvent *); + + QString configMode; + void removeCachedSbPix(const QColor &color) { + QPixmapCache::remove("sHCap"+QString::number(color.pixel(), 16)+"1"+configMode); + QPixmapCache::remove("sHCap"+QString::number(color.pixel(), 16)+"0"+configMode); + QPixmapCache::remove("sVCap"+QString::number(color.pixel(), 16)+"1"+configMode); + QPixmapCache::remove("sVCap"+QString::number(color.pixel(), 16)+"0"+configMode); + QPixmapCache::remove(QString::number(color.pixel(), 16)+"sh"+configMode); + QPixmapCache::remove(QString::number(color.pixel(), 16)+"sv"+configMode); + QPixmapCache::remove(QString::number(color.pixel(), 16)+"ah"+configMode); + QPixmapCache::remove(QString::number(color.pixel(), 16)+"av"+configMode); + }; + + QColor getGroupBoxColor(const QWidget* w) const; + QPixmap* createCheckMark(const QColor color) const; + QPixmap* createRadioIndicator(const QColor color) const; + QPixmap disableIcon(const QPixmap* icon) const;; + + QWidget* hoverWidget; + + QPixmap* checkMark; + QPixmap* radioIndicator; + QPixmap* popupFrame; + QPixmap* border1; + mutable bool alphaButtonMode; + bool KApplicationMode; + QColor _checkMarkColor; + + QMap<const QGroupBox*, const QPixmap*> groupBoxPixmaps; + uint preMultiplyColor(const uint &c) const; + QToolButton* popupButton; + QTimer* popupTimer; + QPoint popupMousePressPos; + +protected slots: + void khtmlWidgetDestroyed(QObject* w); + void groupBoxDestroyed(QObject* w); + + //Animation slots. + void updateProgressPos(); + void updateScrollPos(); // smoothscroll + + void progressBarDestroyed(QObject* bar); + inline QColor dGetColor(const QColor &color, const int value) const; + inline QColor lightenColor(const QColor &color, const int value) const; + inline QColor darkenColor(const QColor &color, const int value) const; + void updateTabWidgetFrame(); + void spinBoxValueChanged(int); + void toolPopupPressed(); + void popupToolMenu(); + void toolPopupReleased(); + +private: + // Disable copy constructor and = operator + DominoStyle( const DominoStyle & ); + DominoStyle& operator=( const DominoStyle & ); + + bool kickerMode; + bool konquerorMode; + bool konsoleMode; + + mutable bool flatMode; + bool sideRepaint; + bool _animateProgressBar; + bool _drawTriangularExpander; + bool _customCheckMarkColor; + bool _smoothScrolling; + QColor _toolTipColor; + int _buttonHeightAdjustment; + bool _customPopupMenuColor; + QColor _popupMenuColor; + bool _customSelMenuItemColor; + QColor _selMenuItemColor; + bool _drawPopupMenuGradient; + bool _indentPopupMenuItems; + bool _centerTabs; + bool _wheelSwitchesTabs; + bool _customSliderHandleContourColor; + bool _drawButtonSunkenShadow; + bool _toolBtnAsBtn; + bool _highlightToolBtnIcon; + + bool konqTab; + int minTabLength; + bool macStyleBar; + int konqTabBarContrast; + bool spinWidgetDown; + + mutable int sliderlen; + + // smoothscrolling + int scrollDistance; + bool scrollVertical; + QScrollView* scrollWidget; + QTimer* scrollTimer; + + bool hoveredToolBoxTab; + + // track khtml widgets. + QMap<const QWidget*,bool> khtmlWidgets; + + //Animation support. + QMap<QWidget*, int> progAnimWidgets; + + // pixmap cache. + enum CacheEntryType { + cSurface, + cGradientTile, + cAlphaDot + }; + + struct CacheEntry + { + CacheEntryType type; + int width; + int height; + QRgb c1Rgb; + QRgb c2Rgb; + bool horizontal; + + QPixmap* pixmap; + + CacheEntry(CacheEntryType t, int w, int h, QRgb c1, QRgb c2 = 0, + bool hor = false, QPixmap* p = 0 ): + type(t), width(w), height(h), c1Rgb(c1), c2Rgb(c2), horizontal(hor), pixmap(p) + {} + + ~CacheEntry() + { + delete pixmap; + } + + int key() + { + // create an int key from the properties which is used to refer to entries in the QIntCache. + // the result may not be 100% correct as we don't have so much space in one integer -- use + // == operator after find to make sure we got the right one. :) + return horizontal ^ (type<<1) ^ (width<<5) ^ (height<<10) ^ (c1Rgb<<19) ^ (c2Rgb<<22); + } + + bool operator == (const CacheEntry& other) + { + bool match = (type == other.type) && + (width == other.width) && + (height == other.height) && + (c1Rgb == other.c1Rgb) && + (c1Rgb == other.c1Rgb) && + (horizontal = other.horizontal); +// if(!match) { +// qDebug("operator ==: CacheEntries don't match!"); +// qDebug("width: %d\t\tother width: %d", width, other.width); +// qDebug("height: %d\t\tother height: %d", height, other.height); +// qDebug("fgRgb: %d\t\tother fgRgb: %d", fgRgb, other.fgRgb); +// qDebug("bgRgb: %d\t\tother bgRgb: %d", bgRgb, other.bgRgb); +// qDebug("surfaceFlags: %d\t\tother surfaceFlags: %d", surfaceFlags, other.surfaceFlags); +// } + return match; + } + }; + QIntCache<CacheEntry> *pixmapCache; + + // For KPE_ListViewBranch + mutable QBitmap *verticalLine; + mutable QBitmap *horizontalLine; + + // For progress bar animation + QTimer *animationTimer; + + void renderTabSeparator(QPainter *p, const QRect &r, const QColor buttonColor, bool tabAbove) const; + void renderGroupBox(QObject *obj, QEvent *ev); +}; + + + +class ButtonContour +{ + friend class DominoStyleConfig; + friend class DominoStyle; + + public: + ButtonContour(); + virtual ~ButtonContour(); + + static const int num_states = 4; + static const int num_types = 3; + ContourType defaultType; + ContourType type; + ContourState state; + bool alpha_mode; + bool drawButtonSunkenShadow; + int created[num_types][num_states]; + int shadowCreated[num_states]; + + QColor contour[num_states]; + uint c1[num_types][num_states]; // top shadow + uint c2[num_types][num_states]; // outer ring + uint c3[num_types][num_states]; // inner ring + uint c4[num_types][num_states]; // bottom first shadow line + uint c5[num_types][num_states]; // bottom second shadow line + uint c6[num_types][num_states]; // first left shadow line + QPixmap* btnEdges[num_types][num_states]; + QPixmap* btnVLines[num_types][num_states]; + QPixmap* btnHLines[num_types][num_states]; + + // for sunken type and sunken flat buttons + QPixmap* buttonShadowRectangular[num_states]; + QPixmap* buttonShadowRound [num_states]; + QPixmap* buttonShadowHlines[num_states]; + QPixmap* buttonShadowVlines[num_states]; + + + bool alphaMode() { + return alpha_mode; + } + uint color1() { + return c1[type][state]; + } + uint color2() { + return c2[type][state]; + } + uint color3() { + return c3[type][state]; + } + uint color4() { + return c4[type][state]; + } + uint color5() { + return c5[type][state]; + } + uint color6() { + return c6[type][state]; + } + QColor contourColor(int t) { + return contour[t]; + } + QPixmap* buttonEdges() { + return btnEdges[type][state]; + } + QPixmap* buttonVLines() { + return btnVLines[type][state]; + } + QPixmap* buttonHLines() { + return btnHLines[type][state]; + } + void setType(ContourType t = Contour_Sunken) { + type = t; + createPixmaps(type, state); + } + void setState(ContourState s = Contour_Default) { + state = s; + if(s == Contour_Pressed && type != Contour_Sunken) + type = Contour_Simple; + createPixmaps(type, state); + } + void setContour(ContourType t = Contour_Sunken, ContourState s = Contour_Default) { + type = t; + state = s; + createPixmaps(type, state); + } + void setColor(ContourState s, QColor color) { + contour[s] = color; + + uint c2_tmp; + uint c3_tmp; + if(defaultType == Contour_Sunken /*|| defaultType == Contour_Simple*/) { + c2_tmp = qRgba(contour[s].red(), contour[s].green(), contour[s].blue(), 218); + c3_tmp = qRgba(contour[s].red(), contour[s].green(), contour[s].blue(), 35); + } + else { + c2_tmp = qRgba(contour[s].red(), contour[s].green(), contour[s].blue(), 203); + + QColor whiteColor(qRgba(Qt::white.red(), Qt::white.green(), Qt::white.blue(), 34)); + QColor blackColor(qRgba(contour[s].red(), contour[s].green(), contour[s].blue(), 35)); + + c3_tmp = blendColors(whiteColor, blackColor).rgb(); + } + + for(int t = 0; t < num_types; t++) { + c2[t][s] = c2_tmp; // outer ring + c3[t][s] = c3_tmp; // inner ring + } + } + void setDefaultType(ContourType t = Contour_Raised, bool create = true) { + defaultType = t; + type = t; + if(create) + createPixmaps(type, state); + } + void setAlphaMode() { + alpha_mode = true; + } + void reset() { + type = defaultType; + state = Contour_Default; + alpha_mode = false; + } + + QPixmap* shadowRound() { + return buttonShadowRound[state]; + } + QPixmap* shadowRectangular() { + return buttonShadowRectangular[state]; + } + QPixmap* shadowHLines() { + return buttonShadowHlines[state]; + } + QPixmap* shadowVLines() { + return buttonShadowVlines[state]; + } + + void createPixmaps(ContourType t = Contour_Sunken, ContourState s = Contour_Default) { + type = t; + state = s; + + + // for pressed sunken buttons + pressed KMultiTabbarTabs + if(drawButtonSunkenShadow && !shadowCreated[state]) { + + QColor shadowColor = alphaBlendColors(Qt::black, contour[state], 120); + buttonShadowRectangular[state] = new QPixmap(tintImage(qembed_findImage("btnPressedShadowRectangular"), shadowColor)); + buttonShadowRound[state] = new QPixmap(tintImage(qembed_findImage("btnPressedShadowRound"), shadowColor)); + buttonShadowHlines[state] = new QPixmap(tintImage(qembed_findImage("btnPressedShadowHLines"), shadowColor)); + buttonShadowVlines[state] = new QPixmap(tintImage(qembed_findImage("btnPressedShadowVLines"), shadowColor)); + shadowCreated[state] = 1; + } + + + if(created[type][state]) + return; + + QImage btnVLines_img; + QImage btnHLines_img; + QImage btnShadow_img; + + switch(type) { + case Contour_Simple: // now pressed raised! + btnShadow_img = qembed_findImage("btnRSPr"); // the inner white ring + blend(tintImage(qembed_findImage("btn"), contour[state]), btnShadow_img, btnShadow_img); + btnHLines_img = qembed_findImage("btnHRSPr"); + blend(tintImage(qembed_findImage("btnH"), contour[state]), btnHLines_img, btnHLines_img); + btnVLines_img = qembed_findImage("btnVRSPr"); + blend(tintImage(qembed_findImage("btnV"), contour[state]), btnVLines_img, btnVLines_img); + break; + case Contour_Sunken: + btnShadow_img = qembed_findImage("btnSSh"); + blend(tintImage(qembed_findImage("btn"), contour[state]), btnShadow_img, btnShadow_img); + btnHLines_img = qembed_findImage("btnHSSh"); + blend(tintImage(qembed_findImage("btnH"), contour[state]), btnHLines_img, btnHLines_img); + btnVLines_img = qembed_findImage("btnVSSh"); + blend(tintImage(qembed_findImage("btnV"), contour[state]), btnVLines_img, btnVLines_img); + break; + case Contour_Raised: + btnShadow_img = qembed_findImage("btn17RaisedShadow3"); // the inner white ring + outer shadow + blend(tintImage(qembed_findImage("btn"), contour[state]), btnShadow_img, btnShadow_img); + btnHLines_img = qembed_findImage("btnHRSh"); + blend(tintImage(qembed_findImage("btnH"), contour[state]), btnHLines_img, btnHLines_img); + btnVLines_img = qembed_findImage("btnVRSh"); + blend(tintImage(qembed_findImage("btnV"), contour[state]), btnVLines_img, btnVLines_img); + default: + break; + } + + btnEdges[type][state] = new QPixmap(btnShadow_img); + btnVLines[type][state] = new QPixmap(btnVLines_img); + btnHLines[type][state] = new QPixmap(btnHLines_img); + created[type][state] = 1; + } +}; + +class RubberWidget : public QWidget +{ + public: + RubberWidget(Window window); + ~RubberWidget(); +}; + +class Rubber +{ + friend class DominoStyle; + + public: + Rubber(uint col); + ~Rubber(); + + Visual* visual; + Colormap colormap; + XSetWindowAttributes wsa; + Window window; + + RubberWidget* parent; + RubberWidget* rubber; + QRegion mask; + uint color; + + void destroy() { + if(parent) { + delete rubber; + delete parent; + window = 0; + parent = 0; + rubber = 0; + } + } + void create(QRect& r, QRegion& mask); + void updateMask(QRegion& mask); +}; + + +// DominoXXX classes to access protected (or private...) members +class DominoQGroupBox : public QGroupBox +{ + friend class DominoStyle; + public: + DominoQGroupBox( QWidget* parent=0, const char* name=0 ) + : QGroupBox( parent, name ) {} +}; + +class DominoQWidget : public QWidget +{ + friend class DominoStyleConfig; + friend class DominoStyle; + public: + DominoQWidget( QWidget* parent=0, const char* name=0 ) + : QWidget( parent, name ) {} + +}; + +class DominoQFrame : public QFrame +{ + friend class DominoStyle; + public: + DominoQFrame( QFrame* parent=0, const char* name=0 ) + : QFrame( parent, name ) {} +}; + +// QWhatsThis +class DominoQWhatsThat : public QWidget +{ + friend class DominoStyle; + public: + DominoQWhatsThat(): QWidget() {} + private: + QString text; +}; + +class DominoKToolBarButton : public KToolBarButton +{ + friend class DominoStyle; + public: + DominoKToolBarButton(): KToolBarButton() {} +}; + +class DominoQListBoxItem : public QListBoxItem +{ + friend class DominoStyle; + public: + DominoQListBoxItem(): QListBoxItem() {} +}; + +class DominoQTabWidget : public QTabWidget +{ + friend class DominoStyleConfig; + friend class DominoStyle; + public: + DominoQTabWidget( QWidget* parent=0, const char* name=0 ) + : QTabWidget( parent, name ) {} +}; + +class DominoQSpinBox : public QSpinBox +{ + friend class DominoStyle; + public: + DominoQSpinBox( QFrame* parent=0, const char* name=0 ) + : QSpinBox( parent, name ) {} +}; + +class DominoQPixmap : public QPixmap +{ + friend class DominoStyle; + public: + DominoQPixmap( int w, int h, int depth = -1) : QPixmap(w, h, depth) {} +}; + +class DominoQButton : public QButton +{ + friend class DominoStyle; + public: + DominoQButton(): QButton() {} +}; + +#endif // __DOMINO_H diff --git a/domino/domino.themerc b/domino/domino.themerc new file mode 100644 index 0000000..30ae7f5 --- /dev/null +++ b/domino/domino.themerc @@ -0,0 +1,7 @@ +[Misc] +Name=Domino +Comment=A style with customizable color gradients +Comment[de]=Ein Stil mit anpassbaren Farbverläufen +ConfigPage=kstyle_domino_config +[KDE] +WidgetStyle=Domino diff --git a/domino/eventfilter.cpp b/domino/eventfilter.cpp new file mode 100644 index 0000000..a3dce1c --- /dev/null +++ b/domino/eventfilter.cpp @@ -0,0 +1,1840 @@ +/* + Copyright (C) 2006 Michael Lentner <michaell@gmx.net> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +*/ + +bool DominoStyle::eventFilter(QObject *obj, QEvent *ev) +{ + +// qDebug("className: %s -- name: %s", obj->className(), obj->name()); + + if(dynamic_cast<QComboBox*>(obj)) { + + switch(ev->type()) { + case QEvent::Paint: { + + QComboBox* cb = dynamic_cast<QComboBox*>(obj); + bool khtmlWidget = khtmlWidgets.contains(cb); + const QColorGroup & g = cb->colorGroup(); + + QPixmap buffer; + QPainter p; + if(khtmlWidget) + p.begin(cb); + else { + buffer.resize(cb->width(), cb->height()); + p.begin(&buffer); + } + + p.setFont(cb->font()); + + + if(!khtmlWidget && cb->parentWidget() && cb->parentWidget()->backgroundPixmap()){ + + QPoint point = cb->backgroundOffset(); + p.drawTiledPixmap( 0, 0, cb->width(), cb->height(), + *cb->parentWidget()->backgroundPixmap(), + point.x(), point.y() ); + } + + + QStyle::SFlags flags = QStyle::Style_Default; + if (cb->isEnabled()) + flags |= QStyle::Style_Enabled; + if (cb->hasFocus()) + flags |= QStyle::Style_HasFocus; + + if(!cb->listBox()) { + + drawComplexControl( QStyle::CC_ComboBox, &p, cb, cb->rect(), g, + flags, (uint)QStyle::SC_All, /*(cb->arrowDown ? */QStyle::SC_ComboBoxArrow /*: QStyle::SC_None )*/); + + QRect re = querySubControlMetrics( QStyle::CC_ComboBox, cb, QStyle::SC_ComboBoxEditField ); + re = QStyle::visualRect(re, cb); + p.setClipRect( re ); + + QString str = 0; + const QPixmap *pix = 0; + if(cb->count() > 0) { + str = cb->text(cb->currentItem()); + cb->pixmap(cb->currentItem()); + } + if ( !str.isNull() ) { +// p.save(); +// p.setFont(cb->font()); +// QFontMetrics fm(cb->font()); +// int x = re.x(), y = re.y() + fm.ascent(); +// if( pix ) +// x += pix->width() + 5; +// p.drawText( x, y, str ); +// p.restore(); + dominoDrawItem( &p, re, AlignCenter, cb->colorGroup(), + cb->isEnabled(), 0, str, -1, + &cb->colorGroup().buttonText(), textEffectSettings.mode > 0 ? 1 : 0 ); + } + if ( pix ) { + p.fillRect( re.x(), re.y(), pix->width() + 4, re.height(), + cb->colorGroup().brush( QColorGroup::Base ) ); + p.drawPixmap( re.x() + 2, re.y() + + ( re.height() - pix->height() ) / 2, *pix ); + } + } + else { + drawComplexControl( QStyle::CC_ComboBox, &p, cb, cb->rect(), g, + flags, (uint)QStyle::SC_All, /*(d->arrowDown ? */QStyle::SC_ComboBoxArrow/* : QStyle::SC_None )*/); + QRect re = querySubControlMetrics( QStyle::CC_ComboBox, cb, QStyle::SC_ComboBoxEditField ); + re = QStyle::visualRect(re, cb); + p.setClipRect( re ); + + if ( !cb->editable() ) { + + QString str = 0; + const QPixmap *pix = 0; + if(cb->count() > 0) { + str = cb->text(cb->currentItem()); + pix = cb->pixmap(cb->currentItem()); + } + + re.addCoords(+2, 0, 0, -1); + if(pix) { + drawItem( &p, QRect(re.left()+1, re.top(), re.width(), re.height()-1), AlignLeft|AlignVCenter, cb->colorGroup(), + cb->isEnabled(), pix, 0, -1, &cb->colorGroup().buttonText() ); + re.setX(re.x()+pix->width()+2); + } + if(!str.isNull()) { + dominoDrawItem( &p, QRect(re.left(), re.top(), re.width(), re.height()), AlignLeft|AlignVCenter, cb->colorGroup(), + cb->isEnabled(), 0, str, -1, &cb->colorGroup().buttonText(), textEffectSettings.mode > 0 ? 1 : 0 ); + } + else if(!pix) { + DominoQListBoxItem * item = (DominoQListBoxItem*)cb->listBox()->item( cb->currentItem() ); + if ( item ) { + int itemh = item->height( cb->listBox() ); + p.translate( re.x(), re.y() +(re.height()- itemh)/2); + item->paint( &p ); + } + } + } + else if ( cb->listBox() && cb->listBox()->item( cb->currentItem() ) ) { + + QListBoxItem * item = cb->listBox()->item( cb->currentItem() ); + const QPixmap *pix = item->pixmap(); + if ( pix ) { + if(re.width() < pix->width()) + return true; + QColor color = cb->isEnabled() ? cb->lineEdit()->paletteBackgroundColor() : cb->lineEdit()->palette().active().background(); + QPixmap* shadowPix = renderLineEditShadow(cb, QRect(0, 0, pix->width() + 3, re.height()), color, Draw_Left, QApplication::reverseLayout()); + + if(!QApplication::reverseLayout()) { + int x = re.x(); + int y = re.y(); + int w = pix->width() + 4; + int h = re.height()+re.y(); + + QRegion mask(x+3, y, w+3, h); + mask += QRegion(x, y+3, 3, h-9); + p.setClipRegion(mask); + } + bitBlt(shadowPix, 3, ( shadowPix->height() - pix->height() ) / 2, pix); + p.drawPixmap(re.x(), re.y(), *shadowPix); + delete shadowPix; + } + } + } + p.end(); + if(!khtmlWidget) { + p.begin(cb); + p.drawPixmap(0, 0, buffer); + } + + return true; + + } + case QEvent::Enter: { + QButton* btn = static_cast<QButton*>(obj); + if(btn->isEnabled()) { + hoverWidget = btn; + btn->repaint(false); + } + return false; + } + case QEvent::Leave: { + QButton* btn = static_cast<QButton*>(obj); + if(btn->isEnabled()) { + hoverWidget = 0; + btn->repaint(false); + } + return false; + } + case QEvent::PaletteChange: { + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Widget); + return true; + } + case QEvent::ParentPaletteChange: { + setDominoButtonPalette(dynamic_cast<QWidget*>(obj), Palette_Parent); + return false; + } + case QEvent::ApplicationPaletteChange: { + if(!khtmlWidgets.contains(static_cast<QWidget*>(obj))) + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Application); + return true; + } + default: + return false; + } + } + + // don't repaint the combobox if the mouse moves over the listbox. + if(dynamic_cast<QListBox*>(obj) && dynamic_cast<QComboBox*>(obj->parent())) { + + if(dynamic_cast<QComboBox*>(obj->parent())) { + if(ev->type() == QEvent::Show) { + QComboBox* cb = dynamic_cast<QComboBox*>(obj->parent()); + cb->repaint(false); + cb->setUpdatesEnabled(false); + return false; + } + if(ev->type() == QEvent::Hide) { + QComboBox* cb = dynamic_cast<QComboBox*>(obj->parent()); + cb->setUpdatesEnabled(true); + cb->repaint(false); + return false; + } + } + // don't return here + } + + if (dynamic_cast<QLineEdit*>(obj) || (dynamic_cast<QFrame*>(obj) && dynamic_cast<QFrame*>(obj)->frameShape() == QFrame::LineEditPanel) || obj->isA("QDateTimeEditor")) { + + QWidget* lineEdit = dynamic_cast<QWidget*>(obj); + bool khtmlMode = khtmlWidgets.contains(lineEdit); + bool isLineEdit = dynamic_cast<QLineEdit*>(obj); + bool isReadOnly = isLineEdit && dynamic_cast<QLineEdit*>(obj)->isReadOnly(); + QFrame* frame = dynamic_cast<QFrame*>(obj); + if((isReadOnly || khtmlMode) && frame->frameWidth() <= 0) { + return false; + } + + bool isEnabled = lineEdit->isEnabled(); + bool isSpinWidget = false; + bool isComboBox = false; + bool isDateTimeEditor = false; + bool hasPixmap = false; + bool noFrame = false; + QRect r = lineEdit->rect(); + + if(dynamic_cast<QComboBox*>(lineEdit->parentWidget())) { + isComboBox = true; + QComboBox* cb = dynamic_cast<QComboBox*>(lineEdit->parentWidget()); + if(cb->count() > 0 && cb->pixmap(cb->currentItem())) + hasPixmap = true; + } + else if(obj->isA("QDateTimeEditor")) + isDateTimeEditor = true; + else if(dynamic_cast<QSpinWidget*>(lineEdit->parentWidget())) + isSpinWidget = true; + else if(isLineEdit && frame->frameShape() == QFrame::NoFrame) + noFrame = true; + +// if(isSpinWidget && !isComboBox && frame->frameShape() == QFrame::NoFrame) +// return false; + + int x, y, w, h; + r.rect(&x, &y, &w, &h); + + switch(ev->type()) { + case QEvent::Show: + if(khtmlMode) + return true; + case QEvent::Resize: { + if(noFrame) return false; + + if(isLineEdit) { + QRect frameRect(r.x()+1, r.y(), r.width()-1, r.height()); + if(frame->frameRect() != frameRect) + frame->setFrameRect(frameRect); + + } + + if(isSpinWidget || isComboBox) { + + if(!hasPixmap && !QApplication::reverseLayout()) { + QRegion mask(x+3, y, w-3, h); + mask += QRegion(x, y+3, 3, h-6); + lineEdit->setMask(mask); + } + else if(QApplication::reverseLayout()) { + QRegion mask(x, y, w-3, h); + mask += QRegion(w-3, y+3, 3, h-6); + lineEdit->setMask(mask); + } + else if(isComboBox) + lineEdit->clearMask(); + } + else if(isDateTimeEditor) { + + if(!QApplication::reverseLayout()) { + QRegion mask(x+2, y, w-2, h); + mask += QRegion(x+1, y+1, 1, h-2); + mask += QRegion(x, y+2, 1, h-4); + lineEdit->setMask(mask); + } + else { + QRegion mask(x, y, w-2, h); + mask += QRegion(w-2, y+1, 1, h-2); + mask += QRegion(w-1, y+2, 1, h-4); + lineEdit->setMask(mask); + } + } + + if(isLineEdit) { + lineEdit->repaint(false); // not realy needed, but removes some flicker + return true; + } + return false; + } + case QEvent::Paint: { + + if(noFrame) + return false; + + const QColorGroup cg = lineEdit->colorGroup(); + const QColor bg = !isEnabled ? cg.background() : lineEdit->paletteBackgroundColor(); + QPainter p; + + if(isSpinWidget || isComboBox || isDateTimeEditor) { + + // QDateTimeEditor doesn't respect background pixmaps :( + if(w <1 || h <1 || isDateTimeEditor) + return false; + + uint flags = hasPixmap ? Draw_Right : Draw_Left|Draw_Right; + QPixmap* lineEditPix = renderLineEditShadow(lineEdit, lineEdit->rect(), bg, flags, QApplication::reverseLayout()); + lineEdit->setUpdatesEnabled(false); + lineEdit->setErasePixmap(*lineEditPix); + // update the gap which resulted from the altered frame rect... + lineEdit->erase(QRect(x, y, 1, h)); + lineEdit->setUpdatesEnabled(true); + delete lineEditPix; + return false; + } + + + // normal lineEdit + const QPixmap* parentBgPix = lineEdit->parentWidget() ? lineEdit->parentWidget()->paletteBackgroundPixmap() : 0; + QPixmap* lineEditEdges = 0; + if(khtmlMode || parentBgPix || !(lineEditEdges = QPixmapCache::find(QString::number(bg.pixel(), 16)+QString::number(cg.background().pixel(), 16)+"lEditEdges"))) { + if(khtmlMode) { + + QPixmap insidePix = tintImage(qembed_findImage("lineedit4inside"), bg); + bitBlt(lineEdit, x, y, &insidePix, 0, 0, 4, 4); + bitBlt(lineEdit, w-4, y, &insidePix, 4, 0, 4, 4); + bitBlt(lineEdit, x, h-4, &insidePix, 0, 4, 4, 4); + bitBlt(lineEdit, w-4, h-4, &insidePix, 4, 4, 4, 4); + + QPixmap edgesPix = qembed_findImage("lineedit4edges"); + bitBlt(lineEdit, x, y, &edgesPix, 0, 0, 4, 4); + bitBlt(lineEdit, w-4, y, &edgesPix, 4, 0, 4, 4); + bitBlt(lineEdit, x, h-4, &edgesPix, 0, 4, 4, 4); + bitBlt(lineEdit, w-4, h-4, &edgesPix, 4, 4, 4, 4); + } + else { + + lineEditEdges = new QPixmap(8, 8); + if(parentBgPix) { + QPoint offset = lineEdit->parentWidget()->backgroundOffset(); + offset += QPoint(lineEdit->geometry().x(), lineEdit->geometry().y()); + QPainter painter(lineEditEdges); + painter.drawTiledPixmap(0, 0, 4, 4, *parentBgPix, offset.x(), offset.y()); + painter.drawTiledPixmap(4, 0, 4, 4, *parentBgPix, offset.x()+r.width()-4, offset.y()); + painter.drawTiledPixmap(0, 4, 4, 4, *parentBgPix, offset.x(), offset.y()+r.height()-4); + painter.drawTiledPixmap(4, 4, 4, 4, *parentBgPix, offset.x()+r.width()-4, offset.y()+r.height()-4); + } + else + lineEditEdges->fill(cg.background()); + + QPixmap tmpPix = tintImage(qembed_findImage("lineedit4inside"), bg); + bitBlt(lineEditEdges, 0, 0, &tmpPix, 0, 0, 8, 8); + + QPixmap tmpPix2 = qembed_findImage("lineedit4edges"); + bitBlt(lineEditEdges, 0, 0, &tmpPix2, 0, 0, 8, 8); + + if(!parentBgPix) + QPixmapCache::insert(QString::number(bg.pixel(), 16)+QString::number(cg.background().pixel(), 16)+"lEditEdges", *lineEditEdges); + } + } + + + QPixmap* lineEditPix = 0; + + if(khtmlMode) + p.begin(lineEdit); + else { + lineEditPix = new QPixmap(w, h); + p.begin(lineEditPix); + + bitBlt(lineEditPix, x, y, lineEditEdges, 0, 0, 4, 4); + bitBlt(lineEditPix, w-4, y, lineEditEdges, 4, 0, 4, 4); + bitBlt(lineEditPix, x, h-4, lineEditEdges, 0, 4, 4, 4); + bitBlt(lineEditPix, w-4, h-4, lineEditEdges, 4, 4, 4, 4); + + } + + p.fillRect(QRect(x+4, y, w-8, h), bg); + p.fillRect(QRect(x, y+4, 4, h-8), bg); + p.fillRect(QRect(w-4, y+4, 4, h-8), bg); + + QColor top_1 = alphaBlendColors(QColor(26, 26, 26), bg, 125); + QColor top_2 = alphaBlendColors(QColor(18, 18, 18), bg, 50); + QColor top_3 = alphaBlendColors(QColor(16, 16, 16), bg, 6); + QColor bottom = alphaBlendColors(QColor(0, 0, 0), bg, 30); + + QColor left_1 = alphaBlendColors(QColor(0, 0, 0), bg, 78); + QColor left_2 = alphaBlendColors(QColor(0, 0, 0), bg, 10); + + p.setPen(top_1); + p.drawLine(x+4, y, w-5, y); + p.setPen(top_2); + p.drawLine(x+4, y+1, w-5, y+1); + p.setPen(top_3); + p.drawLine(x+4, y+2, w-5, y+2); + p.setPen(bottom); + p.drawLine(x+4, h-1, w-5, h-1); + + p.setPen(left_1); + p.drawLine(x, y+4, x, h-4); + p.drawLine(w-1, y+4, w-1, h-4); + p.setPen(left_2); + p.drawLine(x+1, y+4, x+1, h-4); + p.drawLine(w-2, y+4, w-2, h-4); + p.end(); + + + if(!khtmlMode) { + + if(isLineEdit) { + // simply drawing the pixmap would be faster, but the problem with the base color as erase color for disabled lineEdits would remain. + XSetWindowBackgroundPixmap( lineEdit->x11Display(), lineEdit->winId(), lineEditPix->handle()); +// // erase the frame + lineEdit->erase(x, y, w, 2); + lineEdit->erase(x, h-4, w, 4); + lineEdit->erase(x, y+2, 3, h-4); + lineEdit->erase(w-3, y+2, 3, h-4); + } + else { + bitBlt(lineEdit, 0, 0, lineEditPix); + } + delete lineEditPix; + } + return false; + } + case QEvent::MouseButtonPress: + case 6/*QEvent::KeyPress*/: { + // it will be reseted in QLineEdit::mouseMoveEvent() + if(isLineEdit && !khtmlMode && isEnabled && !isReadOnly && !isDateTimeEditor) + static_cast<QWidget*>(obj)->setCursor(Qt::blankCursor); + return false; + } + case QEvent::ApplicationPaletteChange: + if(!khtmlMode) { + lineEdit->setBackgroundMode(QWidget::PaletteBase); + lineEdit->setPalette(qApp->palette()); + } + return true; + case QEvent::ParentPaletteChange: + if(!khtmlMode) { + lineEdit->setBackgroundMode(QWidget::PaletteBase); + lineEdit->setPalette(lineEdit->parentWidget()->palette()); + } + return true; + case QEvent::PaletteChange: + if(!khtmlMode) { + lineEdit->setBackgroundMode(QWidget::PaletteBase); + lineEdit->setPalette(lineEdit->palette()); + } + return true; + case QEvent::Wheel: + case QEvent::Hide: + case 7/*QEvent::KeyRelease*/: + // jump to smoothscrolling + if(_smoothScrolling) + break; + default: + return false; + } + } + + + + + // argb rubberBand + if(!strcmp(obj->name(), "qt_viewport") && rubberBandType == ArgbRubber) { + switch(ev->type()) { + case QEvent::ChildRemoved: + case QEvent::DragMove: + case QEvent::DragEnter: { + if(rubber) { + viewPortPressed = false; + oldRubberRect = QRect(); + rubber->destroy(); + } + return false; + } + case QEvent::MouseButtonPress: { + viewPortPressed = true; + rubberViewPort = static_cast<const QWidget*>(obj); + break; + } + case QEvent::MouseButtonRelease: + if(rubber) { + viewPortPressed = false; + rubberViewPort = 0; + oldRubberRect = QRect(); + if(dynamic_cast<QListView*>(obj->parent()) && rubber->window) + ignoreNextFocusRect = true; + rubber->destroy(); + } + +#if KDE_VERSION >= 0x30506 + case QEvent::Show: { + char selectionName[64]; + snprintf(selectionName, 64, "_NET_WM_CM_S%d", DefaultScreen(qt_xdisplay())); + Atom compSelection = XInternAtom(qt_xdisplay(), selectionName, False); + if(XGetSelectionOwner(qt_xdisplay(), compSelection)) { + compositeManagerRunning = true; + } + else { + compositeManagerRunning = false; + } + } +#endif + default: + break; + } + } + + + // smoothscrolling + if(dynamic_cast<QScrollView*>(obj) && _smoothScrolling) { + switch(ev->type()) { + case QEvent::Wheel: { + QWheelEvent* e = (QWheelEvent*)ev; + QScrollView* sv = dynamic_cast<QScrollView*>(obj); + bool pageSteps = false; + int pageStep = sv->verticalScrollBar()->pageStep(); + int lineStep = sv->verticalScrollBar()->lineStep(); + scrollVertical = e->orientation() == Qt::Vertical; + + QScrollBar* scrollBar = scrollVertical ? sv->verticalScrollBar() : sv->horizontalScrollBar(); + + int step = QMIN( QApplication::wheelScrollLines()*lineStep, pageStep ); + if ( ( e->state() & ControlButton ) || ( e->state() & ShiftButton ) ) { + step = pageStep; + pageSteps = true; + } + int dy = (e->delta()*step)/120; + + e->accept(); + scrollWidget = sv; + scrollDistance += dy; + + // don't accumulate to much + if(scrollDistance < 0) { + scrollDistance = pageSteps? QMAX(scrollDistance, pageStep*2-(pageStep*4)): scrollDistance; + int minDistance = scrollBar->maxValue() - scrollBar->value(); + scrollDistance = QMAX(scrollDistance, minDistance-(minDistance*2)); + } + else { + scrollDistance = pageSteps? QMIN(scrollDistance, pageStep*2): scrollDistance; + scrollDistance = QMIN(scrollDistance, scrollBar->value()); + } + + if(scrollDistance != 0) { + scrollTimer->start(pageSteps? 4: 14); + } + + return true; + } + case 7: { // ?? 7 = QEvent::KeyRelease + QKeyEvent* ke = (QKeyEvent*)ev; + if(scrollTimer->isActive() && (ke->key() == Qt::Key_Shift || ke->key() == Qt::Key_Control)) { + scrollTimer->stop(); + scrollDistance = 0; + } + return false; + } + case QEvent::WindowActivate: + case QEvent::WindowDeactivate: + // fixes the scrollbar flicker + return true; + case QEvent::Hide: + case QEvent::Show: + scrollDistance = 0; + // don't return here (because of konqframe and ?) + default: + break; + } + } + + + if ( dynamic_cast<QScrollBar*>(obj) ) { + + switch(ev->type()) { + case QEvent::WindowActivate: { + QScrollBar* sb = dynamic_cast<QScrollBar*>(obj); + if(sb->backgroundMode() == Qt::NoBackground && !sb->testWState(WState_HasMouse)) { + sb->setBackgroundMode(Qt::PaletteButton); + } + return true; + } + case QEvent::Show: { + // no flicker in konqi and konsole, hits maybe others, too. + if(obj->parent()->parent() && (!strcmp(obj->parent()->parent()->name(), "KonqFrame") || !strcmp(obj->parent()->parent()->name(), "tab pages"))) { + dynamic_cast<QScrollBar*>(obj)->setBackgroundMode(Qt::NoBackground); + } + scrollDistance = 0; + return true; + } + case QEvent::Hide: + scrollDistance = 0; + return true; + case QEvent::Resize: { + QScrollBar* sb = dynamic_cast<QScrollBar*>(obj); + if(sb->backgroundMode() != Qt::NoBackground && sb->isVisible()) { + sb->setBackgroundMode(Qt::NoBackground); + } + return false; + } + case QEvent::ParentPaletteChange: { + QScrollBar* sb = dynamic_cast<QScrollBar*>(obj); + sb->setBackgroundMode(Qt::PaletteButton); + sb->setPalette(sb->parentWidget()->palette()); + return true; + } + case QEvent::PaletteChange: { + QScrollBar* sb = dynamic_cast<QScrollBar*>(obj); + sb->setBackgroundMode(Qt::PaletteButton); + sb->setPalette(sb->palette()); + return true; + } + case QEvent::ApplicationPaletteChange: { // ### + QScrollBar* sb = dynamic_cast<QScrollBar*>(obj); + removeCachedSbPix(sb->paletteBackgroundColor()); + sb->setBackgroundMode(Qt::PaletteButton); +// sb->update(); + return false; + } + case QEvent::Wheel: { + if(!_smoothScrolling) + return false; + QWheelEvent* e = (QWheelEvent*)ev; + QScrollBar* sb = dynamic_cast<QScrollBar*>(obj); + if(!dynamic_cast<QScrollView*>(sb->parentWidget())) + return false; + + bool pageSteps = false; + int pageStep = sb->pageStep(); + int lineStep = sb->lineStep(); + + int step = QMIN( QApplication::wheelScrollLines()*lineStep, pageStep ); + if ( ( e->state() & ControlButton ) || ( e->state() & ShiftButton ) ) { + step = pageStep; + pageSteps = true; + } + int dy = (e->delta()*step)/120; + + e->accept(); + scrollWidget = dynamic_cast<QScrollView*>(sb->parentWidget()); + scrollDistance += dy; + + // don't accumulate to much + if(scrollDistance < 0) { + scrollDistance = pageSteps? QMAX(scrollDistance, pageStep*2-(pageStep*4)): scrollDistance; + int minDistance = sb->maxValue() - sb->value(); + scrollDistance = QMAX(scrollDistance, minDistance-(minDistance*2)); + } + else { + scrollDistance = pageSteps? QMIN(scrollDistance, pageStep*2): scrollDistance; + scrollDistance = QMIN(scrollDistance, sb->value()); + } + + scrollVertical = sb->orientation() == Qt::Vertical; + if(scrollDistance != 0) { + scrollTimer->start(pageSteps? 4: 14); + } + + return true; + } + case 7: { // ?? 7 = QEvent::KeyRelease + QKeyEvent* ke = (QKeyEvent*)ev; + if(scrollTimer->isActive() && (ke->key() == Qt::Key_Shift || ke->key() == Qt::Key_Control)) { + scrollTimer->stop(); + scrollDistance = 0; + } + return false; + } + default: + return false; + } + } + + + if ( dynamic_cast<QProgressBar*>(obj) && _animateProgressBar) + { + switch(ev->type()) { + case QEvent::Show: + if(!animationTimer->isActive()) + animationTimer->start( 50, false ); + return true; + case QEvent::Hide: + if(animationTimer->isActive()) + animationTimer->stop(); + return true; + case QEvent::ApplicationPaletteChange: + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Application); + return true; + case QEvent::ParentPaletteChange: + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Parent); + return true; + case QEvent::PaletteChange: + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Widget); + return true; + default: + return false; + } + } + + if (dynamic_cast<QStatusBar*>(obj)) { + if(ev->type() == QEvent::PaletteChange) { + QStatusBar* sb = dynamic_cast<QStatusBar*>(obj); + sb->setPaletteBackgroundColor(qApp->palette().active().background()); + sb->setPaletteForegroundColor(qApp->palette().active().foreground()); + return true; + } + return false; + } + + if (dynamic_cast<QGroupBox*>(obj) && dynamic_cast<QFrame*>(obj)->frameShape() == QFrame::GroupBoxPanel) { + QGroupBox* gb = dynamic_cast<QGroupBox*>(obj); + QRect r = gb->rect(); + + switch(ev->type()) { + case QEvent::Paint: { +// if(y+16 > h || 16 > w) // don't overlap the pixmaps +// return false; + renderGroupBox(obj, ev); + return true; + } + case QEvent::Resize: { + if(!gb->isFlat()) + renderGroupBox(obj, ev); + return false; + } + case QEvent::ApplicationPaletteChange: + case QEvent::PaletteChange: + case QEvent::ParentPaletteChange: { + + if(gb->isFlat() || gb->lineWidth() <= 0) { + return false; + } + + QColor outsideColor = gb->parentWidget() ? gb->parentWidget()->paletteBackgroundColor() : gb->paletteBackgroundColor(); + QColor insideColor = groupBoxSettings.tintBackground ? getGroupBoxColor(gb) : gb->paletteBackgroundColor(); + + QPalette pal(qApp->palette()); + pal.setColor(QPalette::Active, QColorGroup::Background, insideColor); + pal.setColor(QPalette::Inactive, QColorGroup::Background, insideColor); + pal.setColor(QPalette::Disabled, QColorGroup::Background, insideColor); + pal.setColor(QPalette::Disabled, QColorGroup::Text, alphaBlendColors(pal.active().foreground(), insideColor, 40)); + gb->setPalette(pal); + + + if(gb->isCheckable()) { + ((QCheckBox*)gb->child("qt_groupbox_checkbox", 0, false))->setPaletteBackgroundColor(outsideColor); + } + + if(groupBoxPixmaps.contains(gb)) { + delete groupBoxPixmaps[gb]; + groupBoxPixmaps.remove(gb); + } + return false; + } + default: + return false; + } + } + + if(dynamic_cast<QSpinWidget*>(obj)) { + + switch(ev->type()) { + case QEvent::Paint: { + + QSpinWidget* sw = static_cast<QSpinWidget*>(obj); + QPixmap buffer(sw->size()); + QPainter p(&buffer); + + if(sw->parentWidget() && sw->parentWidget()->parentWidget() && sw->parentWidget()->parentWidget()->backgroundPixmap()) { + QPoint point = sw->backgroundOffset(); + p.drawTiledPixmap( 0, 0, sw->width(), sw->height(), + *sw->parentWidget()->parentWidget()->backgroundPixmap(), point.x(), point.y() ); + } + + + + /////// + QStyle::SFlags flags = QStyle::Style_Default; + if (sw->isEnabled()) + flags |= QStyle::Style_Enabled; + if (sw->hasFocus() || sw->focusProxy() && sw->focusProxy()->hasFocus()) + flags |= QStyle::Style_HasFocus; + if(spinWidgetDown && sw->hasMouse()) + flags |= QStyle::Style_Down; + QRect fr = QStyle::visualRect(querySubControlMetrics( QStyle::CC_SpinWidget, sw, QStyle::SC_SpinWidgetFrame ), sw ); + drawComplexControl( QStyle::CC_SpinWidget, &p, sw, sw->rect(), sw->colorGroup(), flags, (uint)QStyle::SC_All, QStyle::SC_None ); + p.end(); + p.begin(sw); + p.drawPixmap(0,0,buffer); + return true; + } + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonPress: + case QEvent::MouseButtonDblClick: { + QSpinWidget* sw = static_cast<QSpinWidget*>(obj); + QPainter p(sw); + + QStyle::SFlags flags = QStyle::Style_Default; + if (sw->isEnabled()) + flags |= QStyle::Style_Enabled; + if (sw->hasFocus() || sw->focusProxy() && sw->focusProxy()->hasFocus()) + flags |= QStyle::Style_HasFocus; + if(ev->type() != QEvent::MouseButtonRelease && dynamic_cast<QSpinBox*>(sw->parentWidget())) { + QSpinBox* sb = dynamic_cast<QSpinBox*>(sw->parentWidget()); + QMouseEvent* e = (QMouseEvent*)ev; + + if(sb->downRect().contains(e->pos()) && sb->value() != sb->minValue()) { + flags |= QStyle::Style_Down; + spinWidgetDown = true; + } + if(sb->upRect().contains(e->pos()) && sb->value() != sb->maxValue()) { + flags |= QStyle::Style_Down; + spinWidgetDown = true; + } + if(spinWidgetDown) { + if(sw->paletteBackgroundPixmap()) + sw->erase(); + drawComplexControl( QStyle::CC_SpinWidget, &p, sw, sw->rect(), sw->colorGroup(), flags, (uint)QStyle::SC_All, QStyle::SC_None); + } + return false; + + } + else + spinWidgetDown = false; + + if(sw->paletteBackgroundPixmap()) + sw->erase(); + drawComplexControl( QStyle::CC_SpinWidget, &p, sw, sw->rect(), sw->colorGroup(), flags, (uint)QStyle::SC_All, QStyle::SC_None); + return false; + } + case QEvent::Enter: { + QPushButton* btn = static_cast<QPushButton*>(obj); + if(!btn->isEnabled()) + return false; + hoverWidget = btn; + btn->repaint(btn->paletteBackgroundPixmap()); + return false; + } + case QEvent::Leave: { + spinWidgetDown = false; + QPushButton* btn = static_cast<QPushButton*>(obj); + if(!btn->isEnabled()) + return false; + hoverWidget = 0; + btn->repaint(btn->paletteBackgroundPixmap()); + return false; + } + case QEvent::ApplicationPaletteChange: + setDominoButtonPalette(dynamic_cast<QWidget*>(obj), Palette_Application); + return true; + case QEvent::ParentPaletteChange: + setDominoButtonPalette(dynamic_cast<QWidget*>(obj), Palette_Parent); + return true; + case QEvent::PaletteChange: + setDominoButtonPalette(dynamic_cast<QWidget*>(obj), Palette_Parent); + return true; + default: + break; + } + return false; + } + + + if (dynamic_cast<QTabBar*>(obj)) { + + switch(ev->type()) { + case QEvent::Wheel: { + QWheelEvent* e = (QWheelEvent*)ev; + QTabWidget* tw = dynamic_cast<QTabWidget*>(obj->parent()); + if(!tw) + return false; + + int current = tw->currentPageIndex(); + int count = tw->count(); + + if(count < 2) + return false; + + current = e->delta() > 0 ? current - 1 : current + 1; + + if(current > count - 1) + current = 0; + else if(current < 0) + current = count - 1; + if(tw->page(current)->isEnabled()) + tw->setCurrentPage(current ); + return true; + } + case QEvent::ApplicationPaletteChange: + setDominoButtonPalette(dynamic_cast<QWidget*>(obj), Palette_Application); + return true; + case QEvent::ParentPaletteChange: + setDominoButtonPalette(dynamic_cast<QWidget*>(obj), Palette_Parent); + return true; + case QEvent::PaletteChange: + setDominoButtonPalette(dynamic_cast<QWidget*>(obj), Palette_Widget); + return true; + default: + return false; + } + } + + if (dynamic_cast<QTabWidget*>(obj)) { + + QTabWidget* tw = dynamic_cast<QTabWidget*>(obj); + if(tw->isA("KonqFrameTabs")) { + + QColorGroup cg = qApp->palette().active(); + switch (ev->type()) { + case QEvent::Paint: { + QRect r = tw->rect(); + int top, height; + if(tw->tabPosition() == QTabWidget::Top) { + top = r.top(); + height = r.height()-tw->currentPage()->height(); + } + else { + top = r.top()+tw->currentPage()->height(); + height = r.height(); + } + + QPainter p(tw); + p.setPen(cg.background()); + p.drawLine(r.left(), top, r.width(), top); + + p.setPen(cg.background().dark(120)); + p.drawLine(r.left(), top+1, r.width(), top+1); + + p.setPen(cg.background().dark(konqTabBarContrast+20)); + p.drawLine(r.left(), top+2, r.width(), top+2); + return true; + } + case QEvent::Show: + case QEvent::PaletteChange: + case QEvent::ApplicationPaletteChange: { + if(tw->eraseColor() != cg.background().dark(konqTabBarContrast)) + tw->setEraseColor(cg.background().dark(konqTabBarContrast)); + return true; + } + default: + return false; + } + } + else if(ev->type() == QEvent::Wheel) { + if(!tw) + return false; + + QRect r = tw->rect(); + QRect re = ((DominoQTabWidget*)tw)->tabBar()->rect(); + int top; + if(tw->tabPosition() == QTabWidget::Top) { + top = r.top(); + } + else { + top = r.top() + tw->height()-re.height() - 2; + } + + QWheelEvent* e = (QWheelEvent*)ev; + if(QRect(re.x(), top, r.width(), re.height()).contains(e->pos())) { + int current = tw->currentPageIndex(); + int count = tw->count(); + if(count < 2) + return false; + + current = e->delta() > 0 ? current - 1 : current + 1; + + if(current > count - 1) + current = 0; + else if(current < 0) + current = count - 1; + if(tw->page(current)->isEnabled()) + tw->setCurrentPage(current); + return true; + } + } + if(ev->type() == QEvent::LayoutHint) { + if(!tw) + return false; + QWidget* w; + if((w = tw->cornerWidget(Qt::TopRight))) { + if(!w->width() != 25 || w->height() != 23) + w->setFixedSize(25, 23); + } + if((w = tw->cornerWidget(Qt::TopLeft))) { + if(!w->width() != 25 || w->height() != 23) + w->setFixedSize(25, 23); + } + if((w = tw->cornerWidget(Qt::BottomRight))) { + if(!w->width() != 25 || w->height() != 23) + w->setFixedSize(25, 23); + } + if((w = tw->cornerWidget(Qt::BottomLeft))) { + if(!w->width() != 25 || w->height() != 23) + w->setFixedSize(25, 23); + } + + return false; + } + return false; + } + if(::qt_cast<KToolBarButton*>(obj)) { + switch(ev->type()) { + case QEvent::Paint: { + KToolBar *bar = dynamic_cast<KToolBar*>(obj->parent()); + if(!bar) return false; // KMyMoney2 + KToolBarButton* btn = dynamic_cast<KToolBarButton*>(obj); + int index = bar->itemIndex(btn->id()); + + + if(_toolBtnAsBtn && sideRepaint == false) { + sideRepaint = true; + KToolBarButton* sideBtn; + if((sideBtn = bar->getButton(bar->idAt(index-1)))) { + sideBtn->repaint(false); + } + if((sideBtn = bar->getButton(bar->idAt(index+1)))) { + sideBtn->repaint(false); + } + sideRepaint = false; + } + + + SFlags flags = QStyle::Style_Default; + SCFlags active = QStyle::SC_None; + if(btn->isOn()) flags |= QStyle::Style_On; + if (btn->isDown()) { + flags |= QStyle::Style_Down; + active |= QStyle::SC_ToolButton; + } + if (btn->isEnabled()) flags |= QStyle::Style_Enabled; + if (btn->isEnabled() && btn->hasMouse()) flags |= QStyle::Style_Raised; + if (btn->hasFocus()) flags |= QStyle::Style_HasFocus; + //SCFlags controls, + + QPainter p(btn); + + if(btn->isDown()/* || btn->isOn()*/) + buttonContour->setState(Contour_Pressed); + else if(btn == hoverWidget && btn->isEnabled()) + buttonContour->setState(Contour_MouseOver); + + drawComplexControl(QStyle::CC_ToolButton, &p, btn, btn->rect(), btn->colorGroup(), flags, QStyle::SC_ToolButton, active, QStyleOption()); + buttonContour->reset(); + return true; + } + case QEvent::MouseButtonPress: { + if(((QMouseEvent*)ev)->button() == Qt::RightButton) + return false; + KToolBarButton* btn = dynamic_cast<KToolBarButton*>(obj); + btn->setUpdatesEnabled(false); + if(!btn->isOn()) btn->setOn(true); + btn->setUpdatesEnabled(true); + hoverWidget = 0; + return false; + } + case QEvent::MouseButtonRelease: { + if(((QMouseEvent*)ev)->button() == Qt::RightButton) + return false; + KToolBarButton* btn = dynamic_cast<KToolBarButton*>(obj); + btn->setUpdatesEnabled(false); + if(btn->isOn()) btn->setOn(false); + btn->setUpdatesEnabled(true); + if(btn->hasMouse()) + hoverWidget = btn; + return false; + } + case QEvent::MouseButtonDblClick: { + if(((QMouseEvent*)ev)->button() == Qt::RightButton) + return false; + KToolBarButton* btn = dynamic_cast<KToolBarButton*>(obj); + if(!btn->isOn()) btn->setOn(true); + hoverWidget = 0; + return false; + } + case QEvent::Enter: { + KToolBarButton* btn = dynamic_cast<KToolBarButton*>(obj); + if(btn->isEnabled()) { + hoverWidget = btn; + btn->repaint(false); + } + return false; + } + case QEvent::Leave: { + KToolBarButton* btn = dynamic_cast<KToolBarButton*>(obj); + if(btn == hoverWidget) { + hoverWidget = 0; + btn->repaint(false); + } + return false; + } + case QEvent::Move: { + if(_toolBtnAsBtn) { + KToolBarButton* btn = dynamic_cast<KToolBarButton*>(obj); + btn->repaint(false); + } + return false; + } + case QEvent::ApplicationPaletteChange: { + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Application); + return true; + } + default: + return false; + } + } + + if(dynamic_cast<QRadioButton*>(obj) && dynamic_cast<QRadioButton*>(obj)->paletteBackgroundPixmap()) { + if (ev->type() == QEvent::Paint) { + QRadioButton* rb = static_cast<QRadioButton*>(obj); + + rb->removeEventFilter(this); + QApplication::sendEvent(rb, (QPaintEvent*)ev); + rb->installEventFilter(this); + + QStyle::SFlags flags = QStyle::Style_Default; + if ( rb->isEnabled() ) + flags |= QStyle::Style_Enabled; + if ( rb->hasFocus() ) + flags |= QStyle::Style_HasFocus; + if ( rb->isDown() ) + flags |= QStyle::Style_Down; + if ( rb->hasMouse() ) + flags |= QStyle::Style_MouseOver; + if ( rb->state() == QButton::On ) + flags |= QStyle::Style_On; + else if ( rb->state() == QButton::Off ) + flags |= QStyle::Style_Off; + + QPainter p(rb); + drawControl(CE_RadioButton, &p, rb, QRect(0,0,17,17), rb->palette().active(), flags); + return true; + } + if (ev->type() == QEvent::Show && !strcmp(obj->name(), "__khtml")) { + QRadioButton* rb = static_cast<QRadioButton*>(obj); + QBitmap bm(rb->size()); + bm.fill(color0); + rb->setMask(bm); + } + return false; + } + + if (obj->isA("KonqCheckBox")) { + + if (ev->type() == QEvent::Show || ev->type() == QEvent::ApplicationPaletteChange) { // at least doesn't flicker in the unchecked state ;-) + QButton* btn = dynamic_cast<QButton*>(obj); + QPixmap pix(btn->size()); + pix.fill(qApp->palette().active().background()); + QPainter p(&pix); + drawControl( CE_CheckBox, &p, btn, QRect(0,0,18,19), qApp->palette().active(), Style_Default|Style_Off, QStyleOption::Default); + btn->setErasePixmap(pix); + return true; + } + if (ev->type() == QEvent::Paint) { + QButton* btn = dynamic_cast<QButton*>(obj); + btn->erase(); + SFlags flags = Style_Default; + if ( btn->isDown() ) + flags |= Style_Down; + if ( btn->state() == QButton::On ) + flags |= Style_On; + else if ( btn->state() == QButton::Off ) + flags |= Style_Off; + if ( btn->isEnabled() ) + flags |= Style_Enabled; + QPainter p(btn); + drawPrimitive(PE_CheckMark, &p, QRect(0,0,16,17), qApp->palette().active(), flags); + return true; + } + return false; + } + + if(dynamic_cast<QCheckBox*>(obj)) { + if (ev->type() == QEvent::Paint) { + QCheckBox* cb = static_cast<QCheckBox*>(obj); + + bool khtmlWidget = !strcmp(obj->name(), "__khtml"); + if(khtmlWidget || cb->paletteBackgroundPixmap()) { + if(khtmlWidget) { + // this prevents the checkbox been erased before the rest of the html page + QBitmap bm(cb->size()); + bm.fill(color0); + cb->setMask(bm); + } + else { + // draws a masked checkbox + cb->removeEventFilter(this); + QApplication::sendEvent(cb, (QPaintEvent*)ev); + cb->installEventFilter(this); + } + // draws the missing alpha part + QStyle::SFlags flags = QStyle::Style_Default; + if ( cb->isEnabled() ) + flags |= QStyle::Style_Enabled; + if ( cb->hasFocus() ) + flags |= QStyle::Style_HasFocus; + if ( cb->isDown() ) + flags |= QStyle::Style_Down; + if ( cb->hasMouse() ) + flags |= QStyle::Style_MouseOver; + if ( cb->state() == QButton::On ) + flags |= QStyle::Style_On; + else if ( cb->state() == QButton::Off ) + flags |= QStyle::Style_Off; + else if ( cb->state() == QButton::NoChange ) + flags |= QStyle::Style_NoChange; + + QPainter p(cb); + drawControl(CE_CheckBox, &p, cb, QRect(0,0,18,19), cb->palette().active(), flags); + return true; + } + return false; + } + return false; + } + + if(dynamic_cast<QPopupMenu*>(obj)) { + switch(ev->type()) { + case QEvent::Resize: + case QEvent::Show: { + QWidget* w = static_cast<QWidget*>(obj); + QRect r = w->rect(); + QRegion mask(r.x()+2, r.y(), r.width()-4, r.height()); + mask += QRegion(r.x(), r.y()+2, r.width(), r.height()-4); + mask += QRegion(r.x()+1, r.y()+1, r.width()-2, r.height()-2); + w->setMask(mask); + return false; + } + case QEvent::Hide: + static_cast<QWidget*>(obj)->setBackgroundMode(NoBackground); + return false; + case QEvent::ApplicationPaletteChange: + if(obj->isA("PanelKMenu")) { + QWidget* w = static_cast<QWidget*>(obj); + QPalette pal = qApp->palette(); + pal.setColor(QColorGroup::ButtonText, alphaBlendColors(_popupMenuColor, pal.active().foreground(), 150)); + w->setPalette(pal); + return true; + } + default: + return false; + } + } + + + if(dynamic_cast<QPushButton*>(obj) && !obj->isA("KDockButton_Private") || dynamic_cast<QToolButton*>(obj) ) { + QWidget* w = static_cast<QWidget*>(obj); + + switch(ev->type()) { + case QEvent::Enter: { + if(!w->isEnabled()) return false; + hoverWidget = w; + w->repaint(false); + return false; + } + case QEvent::Leave: { + if(!w->isEnabled()) return false; + hoverWidget = 0; + w->repaint(false); + return false; + } + case QEvent::MouseButtonPress: { + if(dynamic_cast<QToolButton*>(obj)) { + QMouseEvent* e = (QMouseEvent*)ev; + if(e->button() == Qt::LeftButton) + popupMousePressPos = e->pos(); + } + return false; + } + case QEvent::MouseMove: { + QMouseEvent* e = (QMouseEvent*)ev; + if(dynamic_cast<QToolButton*>(obj) && popupTimer->isActive() && ((e->pos()-popupMousePressPos).manhattanLength() > 4 /*KGlobalSettings::dndEventDelay()*/)) + popupToolMenu(); + return false; + } + case QEvent::ParentPaletteChange: { + if(obj->isA("QToolButton")) { + + if(w->parentWidget() && !khtmlWidgets.contains(w)) { + w->setUpdatesEnabled(false); + if(w->parentWidget()->paletteBackgroundPixmap()) { + w->setBackgroundOrigin(setPixmapOrigin(w->parentWidget()->backgroundOrigin())); + setDominoButtonPalette(w, Palette_Parent); + } + else { + w->setBackgroundMode(PaletteBackground); + w->setBackgroundOrigin(QWidget::WidgetOrigin); + setDominoButtonPalette(w, Palette_Parent); + } + w->setUpdatesEnabled(true); + w->repaint(true); + } + return true; + } + else + setDominoButtonPalette(w, Palette_Parent); + return true; + break; + } + case QEvent::PaletteChange: { + setDominoButtonPalette(w, Palette_Widget); + return true; + } + case QEvent::ApplicationPaletteChange: { + return true; + } + default: + return false; + } + } + if(obj->isA("QDockWindowHandle") || obj->isA("AppletHandleDrag")) { + if ((ev->type() == QEvent::Enter) && static_cast<QWidget*>(obj)->isEnabled()) { + QWidget* w = static_cast<QWidget*>(obj); + hoverWidget = w; + w->repaint(true); + return false; + } + if (ev->type() == QEvent::Leave && static_cast<QWidget*>(obj) == hoverWidget) { + hoverWidget = 0; + static_cast<QWidget*>(obj)->repaint(true); + return false; + } + return false; + } + + if(obj->isA("KDockButton_Private")) { + if (ev->type() == QEvent::Paint) { + QPixmap* btnPix = 0; + QButton* btn = static_cast<QButton*>(obj); + if(!(btnPix = QPixmapCache::find(QString::number(btn->paletteBackgroundColor().pixel(), 16)+btn->name()))) { + QPixmap* tmpPix = new QPixmap(qembed_findImage(btn->name())); + if(!tmpPix) + return false; + btnPix = new QPixmap(12, 24); + btnPix->fill(btn->paletteBackgroundColor()); + bitBlt(btnPix, 0, 0, tmpPix); + QPixmapCache::insert(QString::number(btn->paletteBackgroundColor().pixel(), 16)+btn->name(), btnPix); + } + + if(btn->isOn() || btn->isDown()) + bitBlt(btn, 0, 1, btnPix, 0, 12, 12, 12); + else + bitBlt(btn, 0, 1, btnPix, 0, 0, 12, 12); + return true; + } + return false; + } + + if(dynamic_cast<KPopupTitle*>(obj)) { + + switch(ev->type()) { + case QEvent::Paint: { + + KPopupTitle* pt = static_cast<KPopupTitle*>(obj); + QRect r = pt->rect(); + QPainter p(pt); + + if(pt->parentWidget() && pt->parentWidget()->paletteBackgroundPixmap()) { + QPoint point = QPoint(pt->geometry().x(), pt->geometry().y()); + p.drawTiledPixmap( 0, 0, pt->width(), pt->height(), + *pt->parentWidget()->backgroundPixmap(), + point.x(), point.y() ); + } + + QFont f = p.font(); + f.setBold(true); + p.setFont(f); + + if(!pt->icon().isNull()) { + int titleWidth = p.fontMetrics().width(pt->title()); + p.drawPixmap((r.width()-titleWidth)/2-4-pt->icon().width(), (r.height()-pt->icon().height())/2, pt->icon()); + } + if (!pt->title().isNull()) { + p.setPen(alphaBlendColors(_popupMenuColor, pt->paletteForegroundColor(), 150)); + p.drawText(0, 0, r.width(), r.height(), AlignCenter | SingleLine, pt->title()); + } + return true; + } + default: + return false; + } + } + if(dynamic_cast<QButton*>(obj) && obj->parent() && obj->parent()->isA("QToolBox")) { + QWidget* w = dynamic_cast<QWidget*>(obj); + if(!w->isEnabled()) + return false; + if(ev->type() == QEvent::Enter) { + hoveredToolBoxTab = true; + w->repaint(false); + return false; + } + if(ev->type() == QEvent::Leave) { + hoveredToolBoxTab = false; + w->repaint(false); + return false; + } + if(ev->type() == QEvent::Move) { + hoveredToolBoxTab = false; + return false; + } + return false; + } + if(dynamic_cast<QHeader*>(obj)) { + switch(ev->type()) { + case QEvent::ApplicationPaletteChange: + static_cast<QHeader*>(obj)->setBackgroundMode(Qt::PaletteBackground); + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Application); + return true; + case QEvent::ParentPaletteChange: + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Parent); + return true; + case QEvent::PaletteChange: + static_cast<QHeader*>(obj)->setBackgroundMode(Qt::PaletteBackground); + setDominoButtonPalette(static_cast<QWidget*>(obj), Palette_Widget); + return true; + default: + return false; + } + return false; + } + + if(dynamic_cast<QDockWindow*>(obj)) { + switch(ev->type()) { + case QEvent::LayoutHint: { + QDockWindow* dw = dynamic_cast<QDockWindow*>(obj); + if(!dw->widget()) + return false; + if(!dw->area()) { + dw->setFrameStyle(QFrame::Panel|QFrame::Sunken); + dw->setLineWidth(1); + QRect r = dw->rect(); + QRegion mask(r); + mask -= QRegion(0, 0, 1, 1); + mask -= QRegion(r.width()-1, 0, 1, 1); + mask -= QRegion(0, r.height()-1, 1, 1); + mask -= QRegion(r.width()-1, r.height()-1, 1, 1); + dw->setMask(mask); + } + else if(dw->frameStyle() == QFrame::Panel|QFrame::Sunken) { + dw->setFrameStyle(QFrame::StyledPanel|QFrame::Sunken); + dw->setLineWidth(2); + dw->clearMask(); + } + } + default: + break; + + } + } + else if(obj->isA("QWorkspaceChild")) { + switch(ev->type()) { + case QEvent::Show: + case QEvent::Resize: { + QWidget* w = static_cast<QWidget*>(obj); + QRect r = w->rect(); + QRegion mask(r); + mask -= QRegion(0, 0, 1, 1); + mask -= QRegion(r.width()-1, 0, 1, 1); + mask -= QRegion(0, r.height()-1, 1, 1); + mask -= QRegion(r.width()-1, r.height()-1, 1, 1); + w->setMask(mask); + } + default: + break; + } + } + + if(obj->isA("QDockWindowResizeHandle")) { + if(ev->type() == QEvent::PaletteChange) + static_cast<QWidget*>(obj)->setBackgroundMode(Qt::PaletteBackground); + return false; + } + + if(obj->isA("QWhatsThat")) { // QWhatsThis + + if (ev->type() == QEvent::Show) { + QWidget* w = dynamic_cast<QWidget*>(obj); + w->setBackgroundMode(Qt::NoBackground); + QRect r = w->rect(); + QRegion mask(r.x()+3, r.y(), r.width()-6, r.height()); + mask += QRegion(r.x()+2, r.y()+1, r.width()-4, r.height()-2); + mask += QRegion(r.x()+1, r.y()+2, r.width()-2, r.height()-4); + mask += QRegion(r.x(), r.y()+3, r.width(), r.height()-6); + w->setMask(mask); + return true; + } + + if (ev->type() == QEvent::Paint) { + DominoQWhatsThat* dwt = (DominoQWhatsThat*)obj; + QString text = dwt->text; + QRect r = dwt->rect(); + + int x = r.x(); + int y = r.y(); + int w = r.width(); + int h = r.height(); + + QRegion mask(x+1, y+4, w-2, h-8); + mask += QRegion(x+2, y+3, w-4, h-6); + mask += QRegion(x+3, y+2, w-6, h-4); + mask += QRegion(x+4, y+1, w-8, h-2); + + QPainter p(dwt); + p.setClipRegion(mask); + renderGradient(&p, QRect(r.left(), r.top(), r.width(), r.height()), _toolTipColor.light(110), _toolTipColor.dark(105), true); + p.setClipping(false); + + QColor tabContour2 = qApp->palette().active().background().dark(150); + + p.save(); + p.setPen(tabContour2); + p.drawLine(x+7,y, w-8,y); // top + p.drawLine(x+7,h-1, w-8,h-1); // bottom + p.drawLine(x,y+7, x,h-8); // left + p.drawLine(w-1,y+7, w-1,h-8); // right + p.restore(); + + bitBlt(dwt, x, y, border1, 0, 0, 7, 7); + bitBlt(dwt, w-7, y, border1, 7, 0, 7, 7); + bitBlt(dwt, x, h-7, border1, 0, 7, 7, 7); + bitBlt(dwt, w-7, h-7, border1, 7, 7, 7, 7); + + r.addCoords( 12, 8, -12, -8 ); + + if(QStyleSheet::mightBeRichText( text )) { + QSimpleRichText* srt = new QSimpleRichText( text, dwt->font()); + srt->draw(&p, r.x(), r.y(), r, qApp->palette().active(), 0); + } + else { + r.addCoords( 2, 3, 0, 0 ); + p.drawText( r, AlignAuto + AlignTop + WordBreak + ExpandTabs, text ); + } + + return true; + } + return false; + } + + + if(obj->isA("KonqFileTip")) { + + if (ev->type() == QEvent::Show || ev->type() == QEvent::Paint) { + + QWidget* widget = dynamic_cast<QWidget*>(obj); + QRect r = widget->rect(); + + QPixmap pix(r.size()); + QPainter p(&pix); + renderGradient(&p, QRect(r.left(), r.top(), r.width(), r.height()), _toolTipColor.light(110), _toolTipColor.dark(105), true); + + if(ev->type() == QEvent::Show) { + dynamic_cast<QFrame*>(widget)->setFrameStyle(QFrame::NoFrame); + widget->setBackgroundMode(Qt::NoBackground); + + QRegion mask(r.x()+3, r.y(), r.width()-6, r.height()); + mask += QRegion(r.x()+2, r.y()+1, r.width()-4, r.height()-2); + mask += QRegion(r.x()+1, r.y()+2, r.width()-2, r.height()-4); + mask += QRegion(r.x(), r.y()+3, r.width(), r.height()-6); + dynamic_cast<QFrame*>(widget)->setMask(mask); + + QObjectList *list = const_cast<QObjectList *>(widget->children()); + QObjectListIt it( *list ); + QObject * o; + while ( (o = it.current()) != 0 ) { + ++it; + if(dynamic_cast<QLabel*>(o)) { + QLabel* l = dynamic_cast<QLabel*>(o); + l->setBackgroundOrigin(QWidget::ParentOrigin); + l->setPaletteBackgroundPixmap(pix); + } + } + } + p.end(); + + if(ev->type() == QEvent::Paint) { + + int x = r.x(); + int y = r.y(); + int w = r.width(); + int h = r.height(); + + QRegion mask(x+1, y+4, w-2, h-8); + mask += QRegion(x+2, y+3, w-4, h-6); + mask += QRegion(x+3, y+2, w-6, h-4); + mask += QRegion(x+4, y+1, w-8, h-2); + + p.begin(widget); + p.setClipRegion(mask); + p.drawPixmap(0, 0, pix); + p.setClipping(false); + + QColor tabContour2 = qApp->palette().active().background().dark(150); + p.setPen(tabContour2); + p.drawLine(x+7,y, w-8,y); // top + p.drawLine(x+7,h-1, w-8,h-1); // bottom + p.drawLine(x,y+7, x,h-8); // left + p.drawLine(w-1,y+7, w-1,h-8); // right + + bitBlt(widget, x, y, border1, 0, 0, 7, 7); + bitBlt(widget, w-7, y, border1, 7, 0, 7, 7); + bitBlt(widget, x, h-7, border1, 0, 7, 7, 7); + bitBlt(widget, w-7, h-7, border1, 7, 7, 7, 7); + + } + + return true; + } + return false; + } + + if(obj->isA("QTipLabel")) { + + if (ev->type() == QEvent::Show) { + QLabel* l = dynamic_cast<QLabel*>(obj); + l->resize( l->width()+2, l->height()+2); + l->setBackgroundMode(Qt::NoBackground); + int x, y, w, h; + l->rect().rect(&x, &y, &w, &h); + + QRegion mask(x, y+3, w, h-6); + mask += QRegion(x+1, y+2, w-2, h-4); + mask += QRegion(x+2, y+1, w-4, h-2); + mask += QRegion(x+3, y, w-6, h); + l->setMask(mask); + return true; + } + if (ev->type() == QEvent::Paint) { + + QLabel* label = dynamic_cast<QLabel*>(obj); + QRect r = label->rect(); + + int x = r.x(); + int y = r.y(); + int w = r.width(); + int h = r.height(); + + // one pixel smaler as the mask + QRegion mask(x+1, y+4, w-2, h-8); + mask += QRegion(x+2, y+3, w-4, h-6); + mask += QRegion(x+3, y+2, w-6, h-4); + mask += QRegion(x+4, y+1, w-8, h-2); + + QPainter p(label); + p.setClipRegion(mask); + + renderGradient(&p, QRect(r.left(), r.top(), r.width(), r.height()), _toolTipColor.light(110), _toolTipColor.dark(105), true); + p.setClipping(false); + + QColor tabContour2 = qApp->palette().active().background().dark(150); + p.setPen(tabContour2); + p.drawLine(x+7,y, w-8,y); // top + p.drawLine(x+7,h-1, w-8,h-1); // bottom + p.drawLine(x,y+7, x,h-8); // left + p.drawLine(w-1,y+7, w-1,h-8); // right + + bitBlt(label, x, y, border1, 0, 0, 7, 7); + bitBlt(label, w-7, y, border1, 7, 0, 7, 7); + bitBlt(label, x, h-7, border1, 0, 7, 7, 7); + bitBlt(label, w-7, h-7, border1, 7, 7, 7, 7); + + QSimpleRichText* srt = new QSimpleRichText(label->text(), label->font()); + srt->setWidth(r.width()-5); + srt->draw(&p, r.x()+4, r.y(), r, qApp->palette().active(),0); + delete srt; + } + return true; + } + if(obj->isA("QViewportWidget") && dynamic_cast<QTextEdit*>(obj->parent())) { + switch(ev->type()) { + case QEvent::MouseButtonPress: + case 6/*QEvent::KeyPress*/: { + QTextEdit* te = dynamic_cast<QTextEdit*>(obj->parent()); + if(te->isEnabled() && !te->isReadOnly()) + static_cast<QWidget*>(obj)->setCursor(Qt::blankCursor); + return false; + } + default: + return false; + } + } + + if (dynamic_cast<QFrame*>(obj)) { // at last because other widgets may include a frame. + + QFrame* f = dynamic_cast<QFrame*>(obj); + const QRect r = f->rect(); + + if (ev->type() == QEvent::Paint) { + + switch(f->frameShape()){ + case QFrame::HLine: { + QPainter p(f); +// p.setPen(f->paletteBackgroundColor().dark(120)); + p.setPen(alphaBlendColors(f->paletteForegroundColor(), f->paletteBackgroundColor(), 40)); + p.drawLine(0,0,f->frameRect().width(),0); + return true; + } + case QFrame::VLine: { + QPainter p(f); + p.setPen(alphaBlendColors(f->paletteForegroundColor(), f->paletteBackgroundColor(), 40)); + p.drawLine(0,0,0,f->frameRect().height()); + return true; + } + case QFrame::WinPanel: + case QFrame::Panel: { + if(f->parentWidget() && f->parentWidget()->isA("KDockSplitter")) { + + if(!f->erasePixmap()) { + bool horizontal = (r.width() > r.height()); + QPixmap pix(r.size()); + QPainter p(&pix); + renderGradient(&p, r, lightenColor(f->paletteBackgroundColor(), 40), darkenColor(f->paletteBackgroundColor(), 30), horizontal); + f->setErasePixmap(pix); + } + return true; + } + + QPainter p(f); + QColor frameColor; + if(f->frameShape() == QFrame::Panel && f->frameShadow() == QFrame::Plain) // used as a selection in kspread + frameColor = f->paletteBackgroundColor().dark(160); + else if(dynamic_cast<QListBox*>(obj) && dynamic_cast<QComboBox*>(obj->parent())) + frameColor = f->paletteBackgroundColor().dark(190); + else + frameColor = f->paletteBackgroundColor().dark(120); + + + p.setPen(frameColor); + p.drawRect(f->rect()); + + QPaintEvent* e = (QPaintEvent*)ev; + p.setClipRegion(e->region().intersect(f->contentsRect())); + DominoQFrame* df = (DominoQFrame*)f; + df->drawContents(&p); + + DominoQWidget* dw = (DominoQWidget*)f; + QPaintEvent* event = new QPaintEvent(e->region().intersect(f->contentsRect())); + dw->paintEvent(event); + return true; + } + case QFrame::ToolBarPanel: { + if(f->isA("KonqSidebarTree")) { + QPainter p(f); + p.setPen(qApp->palette().active().background().dark(120)); + p.drawRect(f->rect()); + return true; + } + return false; + } + case QFrame::Box: { + if(f->parentWidget() && !strcmp(f->parentWidget()->name(), "KonqFrame")) { + QPainter p(f); + p.fillRect(r.width()-16, r.height()-16, 15, 15, qApp->palette().active().background()); // 15x15 scrollview cornerwidget gap + return true; + } + else if(konquerorMode && f->isA("KHTMLView")) { + QPainter p(f); + p.setPen(qApp->palette().active().background().dark(120)); + p.drawRect(f->rect()); + return true; + } + } + default: + return false; + } + } + + if (ev->type() == QEvent::Show || ev->type() == QEvent::ApplicationPaletteChange) { // ApplicationPaletteChange for style changes + + switch(f->frameShape()){ + case QFrame::TabWidgetPanel: + if(ev->type() == QEvent::ApplicationPaletteChange) { + + if(f->lineWidth() != 4) + f->setLineWidth(4); + if(f->frameRect() != QRect(0, 0, f->width(), f->height()-1)) + f->setFrameRect(QRect(0, 0, f->width(), f->height()-1)); + if(f->margin() != 0) + f->setMargin(0); + + QWidget* w = f->parentWidget(); + for(int i=0; i<3; i++) { // the third parentcheck is for the tabWidget on kcm khtml_plugins + if(!w) break; + if(dynamic_cast<QGroupBox*>(w)) { + f->setPaletteBackgroundColor(qApp->palette().active().background()); + break; + } + w = w->parentWidget(); + } + } + return true; + case QFrame::Box: + if(f->parentWidget() && !strcmp(f->parentWidget()->name(), "KonqFrame")) { + f->setEraseColor(qApp->palette().active().background().dark(120)); + f->erase(); + return true; + } + case QFrame::Panel: + if(ev->type() == QEvent::ApplicationPaletteChange && f->parentWidget() && f->parentWidget()->isA("KDockSplitter")) { + f->setBackgroundMode(Qt::PaletteBackground); + return true; + } + default: + return false; + } + return false; + } + if(ev->type() == QEvent::LayoutHint && f->frameShape() == QFrame::TabWidgetPanel) { // don't look broken in kcm stylePreview + if(f->lineWidth() != 4) + f->setLineWidth(4); + if(f->frameRect() != QRect(0, 0, f->width(), f->height()-1)) + f->setFrameRect(QRect(0, 0, f->width(), f->height()-1)); + if(f->margin() != 0) + f->setMargin(0); + + return false; + } + } + + // nothing matched + return false; + +} diff --git a/domino/misc.cpp b/domino/misc.cpp new file mode 100644 index 0000000..b5b337f --- /dev/null +++ b/domino/misc.cpp @@ -0,0 +1,173 @@ + + +/* + * Copyright 2003, Sandro Giessl <ceebx@users.sourceforge.net> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <qcolor.h> +#include "misc.h" +#include <qimage.h> +#include <qpixmap.h> +#include <endian.h> + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#undef WORDS_BIGENDIAN +#define WORDS_LITTLEENDIAN 1 +#endif +#if __BYTE_ORDER == __BIG_ENDIAN + #undef WORDS_LITTLEENDIAN + #define WORDS_BIGENDIAN 1 +#endif + + + + +QColor alphaBlendColors(const QColor &bgColor, const QColor &fgColor, const int a) +{ + QRgb rgb = bgColor.rgb(); + QRgb rgb_b = fgColor.rgb(); + uint alpha; + if(a > 255) alpha = 255; + else if(a < 0) alpha = 0; + else alpha = a; + uint inv_alpha = 255 - alpha; + + return QColor((qRed(rgb_b)*inv_alpha + qRed(rgb)*alpha)>>8, + (qGreen(rgb_b)*inv_alpha + qGreen(rgb)*alpha)>>8, + (qBlue(rgb_b)*inv_alpha + qBlue(rgb)*alpha)>>8 ); +} + +QColor blendColors(const QColor &bgColor, const QColor &fgColor) +{ + + uint fg_r = fgColor.red(); + uint fg_g = fgColor.green(); + uint fg_b = fgColor.blue(); + uint fg_a = qAlpha(fgColor.rgb()); + + uint bg_r = bgColor.red(); + uint bg_g = bgColor.green(); + uint bg_b = bgColor.blue(); + uint bg_a = qAlpha(bgColor.rgb()); + + uint ac = 65025 - (255 - fg_a) * (255 - bg_a); + uint res_r = ((255 - fg_a) * bg_r * bg_a + fg_a * fg_r * 255 + 127) / ac; + uint res_g = ((255 - fg_a) * bg_g * bg_a + fg_a * fg_g * 255 + 127) / ac; + uint res_b = ((255 - fg_a) * bg_b * bg_a + fg_a * fg_b * 255 + 127) / ac; + uint res_a = (ac+127)/255; + + return QColor(qRgba(res_r,res_g, res_b, res_a )); +} + +QImage tintImage(const QImage &img, const QColor &tintColor) { + + QImage *result = new QImage(img.width(), img.height(), 32, 0, QImage::IgnoreEndian); + result->setAlphaBuffer( true ); + register uint *data = (unsigned int*) img.bits(); + register uint *resultData = (unsigned int*) result->bits(); + register uint total = img.width()*img.height(); + for ( uint current = 0 ; current < total ; ++current ) { + resultData[ current ] = qRgba( tintColor.red(), tintColor.green(), tintColor.blue(), qAlpha( data[ current ] )); + } + return *result; +} + +QImage setImageOpacity(const QImage &img, const uint &p) { + QImage *result = new QImage(img.width(), img.height(), 32, 0, QImage::IgnoreEndian); + result->setAlphaBuffer( true ); + register uint *data = (unsigned int*) img.bits(); + register uint *resultData = (unsigned int*) result->bits(); + register uint alpha; + register uint total = img.width()*img.height(); + for ( uint current = 0 ; current < total ; ++current ) { + alpha = qAlpha( data[ current ] ) * p / 100; + resultData[ current ] = qRgba( qRed( data[ current ] ), qGreen( data[ current ] ), qBlue( data[ current ] ), alpha ); + } + return *result; +} + +bool blend( const QImage & upper, const QImage & lower, QImage & output) +// adopted from kimageeffect::blend - that is not endian safe and cannot handle complex alpha combinations... +{ + if + ( + upper.width() > lower.width() || + upper.height() > lower.height() || + upper.depth() != 32 || + lower.depth() != 32 + ) + return false; + + output = lower.copy(); + + uchar *i, *o; + register uint a, ab, ac; + register uint col; + register uint w = upper.width(); + int row(upper.height() - 1); + + do + { + i = upper.scanLine(row); + o = output.scanLine(row); + + col = w << 2; + + --col; + + do + { +#ifdef WORDS_BIGENDIAN + while (!(a = i[col-3]) && (col != 3)) +#else + while (!(a = i[col]) && (col != 3)) +#endif + { + --col; --col; --col; --col; + } +#ifdef WORDS_BIGENDIAN + if ((ab = o[col-3])) +#else + if ((ab = o[col])) +#endif + { + ac = 65025 - (255 - a) * (255 - ab); +#ifndef WORDS_BIGENDIAN + o[col]= (ac+127)/255; + --col; +#endif + o[col] = ((255 - a) * o[col] * ab + a * i[col] * 255 + 127) / ac; + --col; + o[col] = ((255 - a) * o[col] * ab + a * i[col] * 255 + 127) / ac; + --col; + o[col] = ((255 - a) * o[col] * ab + a * i[col] * 255 + 127) / ac; +#ifdef WORDS_BIGENDIAN + --col; + o[col]= (ac+127)/255; +#endif + } + else + { + o[col] = i[col]; --col; + o[col] = i[col]; --col; + o[col] = i[col]; --col; + o[col] = i[col]; + } + } while (col--); + } while (row--); + return true; +} diff --git a/domino/misc.h b/domino/misc.h new file mode 100644 index 0000000..18026b5 --- /dev/null +++ b/domino/misc.h @@ -0,0 +1,28 @@ + +/* + * Copyright 2003, Sandro Giessl <ceebx@users.sourceforge.net> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __MISC_H +#define __MISC_H + +QColor blendColors(const QColor &backgroundColor, const QColor &foregroundColor); +QColor alphaBlendColors(const QColor &backgroundColor, const QColor &foregroundColor, const int alpha); +QImage tintImage(const QImage &img, const QColor &tintColor); +QImage setImageOpacity(const QImage &img, const uint &p); +bool blend( const QImage & upper, const QImage & lower, QImage & output); +#endif // __MISC_H |