summaryrefslogtreecommitdiffstats
path: root/domino
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2016-04-05 02:46:02 +0200
committerSlávek Banko <slavek.banko@axis.cz>2016-04-05 02:46:02 +0200
commit0fa8770a5566743737ef2812d1f4e6c04d968cda (patch)
tree2b21a699d9c5a5b4af649f3a7046bb9ae4cb9ad7 /domino
downloadtde-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.kcsrc27
-rw-r--r--domino/Makefile.am20
-rw-r--r--domino/data.h1306
-rw-r--r--domino/domino.cpp8139
-rw-r--r--domino/domino.h865
-rw-r--r--domino/domino.themerc7
-rw-r--r--domino/eventfilter.cpp1840
-rw-r--r--domino/misc.cpp173
-rw-r--r--domino/misc.h28
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