You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2048 lines
60 KiB
2048 lines
60 KiB
#ifndef __COMMON_H__
|
|
#define __COMMON_H__
|
|
|
|
/*
|
|
QtCurve (C) Craig Drummond, 2003 - 2010 craig.p.drummond@gmail.com
|
|
|
|
----
|
|
|
|
This program is free software; you can redistr ibute it and/or
|
|
modify it under the terms of the GNU General Public
|
|
License version 2 as published by the Free Software Foundation.
|
|
|
|
This program 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 program; see the file COPYING. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
/* This file is quite 'hacky' as it contains lots of static function definitions - but I want to share the code
|
|
between TQt and Gtk, but not polute the namespace with exported functions... */
|
|
|
|
#include <string.h>
|
|
#include <stdarg.h>
|
|
#include <math.h>
|
|
#include "config.h"
|
|
|
|
#if defined _WIN32 && (0x039999 >= 0x040000)
|
|
#include <sys/stat.h>
|
|
#include <float.h>
|
|
#include <direct.h>
|
|
|
|
static int isnan(double x)
|
|
{
|
|
return _isnan(x);
|
|
}
|
|
|
|
static int lstat(const char* fileName, struct stat* s)
|
|
{
|
|
return stat(fileName, s);
|
|
}
|
|
#endif
|
|
|
|
/*
|
|
The following #define disables the rounding when scrollbar type==none.
|
|
#define SIMPLE_SCROLLBARS
|
|
*/
|
|
|
|
/*
|
|
The following #define controls whether a scrollbar's slider should overlap
|
|
the scrollbar buttons when at min/max. This removes the thick looking line
|
|
between the slider and the buttons.
|
|
*/
|
|
#define INCREASE_SB_SLIDER
|
|
|
|
typedef enum
|
|
{
|
|
SHADING_SIMPLE=0,
|
|
SHADING_HSL=1,
|
|
SHADING_HSV=2,
|
|
SHADING_HCY=3
|
|
} EShading;
|
|
|
|
#ifdef __cplusplus
|
|
#include <tqconfig.h>
|
|
#ifdef CONFIG_DIALOG
|
|
#include <tqapplication.h>
|
|
#endif
|
|
#include <map>
|
|
#include <set>
|
|
#if !defined CONFIG_DIALOG && (0x039999 >= 0x040000)
|
|
#include <TQtCore/TQString>
|
|
#endif
|
|
#else
|
|
#include <glib.h>
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
#include <tqpixmap.h>
|
|
typedef TQColor color;
|
|
|
|
#if (0x039999 >= 0x040000)
|
|
#include <TQtCore/TQSet>
|
|
typedef TQSet<TQString> Strings;
|
|
#else
|
|
typedef TQStringList Strings;
|
|
#endif
|
|
|
|
#else
|
|
typedef gboolean bool;
|
|
typedef GdkColor color;
|
|
typedef gchar ** Strings;
|
|
#define true TRUE
|
|
#define false FALSE
|
|
#endif
|
|
|
|
#define SETTINGS_GROUP "Settings"
|
|
#define KWIN_GROUP "KWin"
|
|
/*#define DESCR_GROUP "Description"*/
|
|
|
|
/* qtc_<theme name>.themerc support */
|
|
#define KDE_PREFIX(V) ((4==(V)) ? KDE4PREFIX : KDE3PREFIX)
|
|
#define THEME_DIR "/share/apps/tdestyle/themes/"
|
|
#define THEME_DIR4 "/share/kde4/apps/kstyle/themes/"
|
|
#define THEME_PREFIX "qtc_"
|
|
#define THEME_SUFFIX ".themerc"
|
|
#define BORDER_SIZE_FILE "windowBorderSizes"
|
|
|
|
#define LV_SIZE 7
|
|
|
|
#define LARGE_ARR_WIDTH 7
|
|
#define LARGE_ARR_HEIGHT 4
|
|
#define SMALL_ARR_WIDTH 5
|
|
#define SMALL_ARR_HEIGHT 3
|
|
|
|
#define NUM_STD_SHADES 6
|
|
#define NUM_EXTRA_SHADES 3
|
|
|
|
enum
|
|
{
|
|
ALPHA_ETCH_LIGHT = 0,
|
|
ALPHA_ETCH_DARK,
|
|
NUM_STD_ALPHAS
|
|
};
|
|
|
|
#define TOTAL_SHADES NUM_STD_SHADES+NUM_EXTRA_SHADES
|
|
#define ORIGINAL_SHADE TOTAL_SHADES
|
|
|
|
#define SHADE_ORIG_HIGHLIGHT NUM_STD_SHADES
|
|
#define SHADE_4_HIGHLIGHT NUM_STD_SHADES+1
|
|
#define SHADE_2_HIGHLIGHT NUM_STD_SHADES+2
|
|
|
|
/* 3d effect - i.e. buttons, etc */
|
|
#define SHADES \
|
|
static const double shades[2][11][NUM_STD_SHADES]=\
|
|
{ \
|
|
{ /* HSV & HSL */ \
|
|
{ 1.05, 1.04, 0.90, 0.800, 0.830, 0.82 }, \
|
|
{ 1.06, 1.04, 0.90, 0.790, 0.831, 0.78 }, \
|
|
{ 1.07, 1.04, 0.90, 0.785, 0.832, 0.75 }, \
|
|
{ 1.08, 1.05, 0.90, 0.782, 0.833, 0.72 }, \
|
|
{ 1.09, 1.05, 0.90, 0.782, 0.834, 0.70 }, \
|
|
{ 1.10, 1.06, 0.90, 0.782, 0.836, 0.68 }, \
|
|
{ 1.12, 1.06, 0.90, 0.782, 0.838, 0.63 }, \
|
|
{ 1.16, 1.07, 0.90, 0.782, 0.840, 0.62 }, /* default */ \
|
|
{ 1.18, 1.07, 0.90, 0.783, 0.842, 0.60 }, \
|
|
{ 1.20, 1.08, 0.90, 0.784, 0.844, 0.58 }, \
|
|
{ 1.22, 1.08, 0.90, 0.786, 0.848, 0.55 } \
|
|
}, \
|
|
{ /* SIMPLE */ \
|
|
{ 1.07, 1.03, 0.91, 0.780, 0.834, 0.75 }, \
|
|
{ 1.08, 1.03, 0.91, 0.781, 0.835, 0.74 }, \
|
|
{ 1.09, 1.03, 0.91, 0.782, 0.836, 0.73 }, \
|
|
{ 1.10, 1.04, 0.91, 0.783, 0.837, 0.72 }, \
|
|
{ 1.11, 1.04, 0.91, 0.784, 0.838, 0.71 }, \
|
|
{ 1.12, 1.05, 0.91, 0.785, 0.840, 0.70 }, \
|
|
{ 1.13, 1.05, 0.91, 0.786, 0.842, 0.69 }, \
|
|
{ 1.14, 1.06, 0.91, 0.787, 0.844, 0.68 }, /* default */ \
|
|
{ 1.16, 1.06, 0.91, 0.788, 0.846, 0.66 }, \
|
|
{ 1.18, 1.07, 0.91, 0.789, 0.848, 0.64 }, \
|
|
{ 1.20, 1.07, 0.91, 0.790, 0.850, 0.62 } \
|
|
} \
|
|
} ;
|
|
|
|
#define SIMPLE_SHADING (!shading)
|
|
#define DEFAULT_CONTRAST 7
|
|
|
|
#define THIN_SBAR_MOD ((opts.sliderWidth<DEFAULT_SLIDER_WIDTH ? 3 : opts.sliderWidth>DEFAULT_SLIDER_WIDTH ? (opts.sliderWidth-9)/2 : 4)+(EFFECT_NONE==opts.buttonEffect ? 1 : 0))
|
|
#define SLIDER_SIZE (opts.sliderWidth<DEFAULT_SLIDER_WIDTH ? DEFAULT_SLIDER_WIDTH-2 : opts.sliderWidth)
|
|
#define CIRCULAR_SLIDER_SIZE 15
|
|
#define GLOW_MO 1 /*ORIGINAL_SHADE*/
|
|
#define GLOW_DEFBTN 1
|
|
#define GLOW_ALPHA(DEF) ((DEF) ? 0.5 : 0.65)
|
|
#define DEF_BNT_TINT 0.4
|
|
#define ENTRY_INNER_ALPHA 0.4
|
|
#define INACTIVE_SEL_ALPHA 0.5
|
|
|
|
#define SUNKEN_BEVEL_DARK_ALPHA(X) (X.value()/800.0) // 0.25
|
|
#define SUNKEN_BEVEL_LIGHT_ALPHA(X) (X.value()/500.0) // 0.40
|
|
|
|
#define MENU_SIZE_ATOM "_QTCURVE_MENUBAR_SIZE_"
|
|
#define STATUSBAR_ATOM "_QTCURVE_STATUSBAR_"
|
|
#define TITLEBAR_SIZE_ATOM "_QTCURVE_TITLEBAR_SIZE_"
|
|
#define ACTIVE_WINDOW_ATOM "_QTCURVE_ACTIVE_WINDOW_"
|
|
#define TOGGLE_MENUBAR_ATOM "_QTCURVE_TOGGLE_MENUBAR_"
|
|
#define TOGGLE_STATUSBAR_ATOM "_QTCURVE_TOGGLE_STATUSBAR_"
|
|
#define OPACITY_ATOM "_QTCURVE_OPACITY_"
|
|
#define BGND_ATOM "_QTCURVE_BGND_"
|
|
#define BLEND_TITLEBAR (opts.menubarAppearance==opts.titlebarAppearance && opts.menubarAppearance==opts.inactiveTitlebarAppearance && \
|
|
!(opts.windowBorder&WINDOW_BORDER_BLEND_TITLEBAR) && SHADE_WINDOW_BORDER==opts.shadeMenubars && opts.windowDrag)
|
|
|
|
#define STD_BORDER 5
|
|
#define STD_BORDER_BR 2
|
|
#define PBAR_BORDER 4
|
|
#define ARROW_MO_SHADE 4
|
|
#define LOWER_BORDER_ALPHA 0.35
|
|
#define DISABLED_BORDER STD_BORDER /*3*/
|
|
#define BORDER_VAL(E) (/*(E) ?*/ STD_BORDER/* : DISABLED_BORDER*/)
|
|
#define SLIDER_MO_BORDER_VAL 3
|
|
|
|
#define FRAME_DARK_SHADOW 2
|
|
#define FOCUS_SHADE(SEL) (FOCUS_GLOW==opts.focus ? GLOW_MO : ((SEL) ? 3 : ORIGINAL_SHADE))
|
|
#define MENU_STRIPE_SHADE (USE_LIGHTER_POPUP_MENU ? ORIGINAL_SHADE : 2)
|
|
#define MENU_SEP_SHADE (USE_LIGHTER_POPUP_MENU ? 4 : 3)
|
|
|
|
#define BGND_STRIPE_SHADE 0.95
|
|
|
|
#define SHADE(c, s) \
|
|
(c>10 || c<0 || s>=NUM_STD_SHADES || s<0 \
|
|
? 1.0 \
|
|
: opts.darkerBorders && (STD_BORDER==i || DISABLED_BORDER==i) \
|
|
? shades[SHADING_SIMPLE==opts.shading ? 1 : 0][c][s] - 0.1 \
|
|
: shades[SHADING_SIMPLE==opts.shading ? 1 : 0][c][s] )
|
|
|
|
#define TAB_APPEARANCE(A) (A) /* (APPEARANCE_GLASS==(A) ? APPEARANCE_GRADIENT : (A)) */
|
|
|
|
#define INVERT_SHADE(A) (1.0+(1.0-(A)))
|
|
|
|
#define ROUNDED (ROUND_NONE!=opts.round)
|
|
|
|
#define TOOLBAR_SEP_GAP (opts.fadeLines ? 5 : 6)
|
|
#define FADE_SIZE 0.4
|
|
#define ETCHED_DARK 0.95
|
|
|
|
#define IS_GLASS(A) (APPEARANCE_DULL_GLASS==(A) || APPEARANCE_SHINY_GLASS==(A))
|
|
#define IS_CUSTOM(A) ((A)>=APPEARANCE_CUSTOM1 && (A)<(APPEARANCE_CUSTOM1+NUM_CUSTOM_GRAD))
|
|
#define IS_FLAT(A) (APPEARANCE_FLAT==(A) || APPEARANCE_RAISED==(A) || APPEARANCE_FADE==(A))
|
|
#define IS_FLAT_BGND(A) (APPEARANCE_FLAT==(A) || APPEARANCE_RAISED==(A))
|
|
|
|
#ifdef __cplusplus
|
|
#define MENUBAR_DARK_LIMIT 160
|
|
#define TOO_DARK(A) ((A).red()<MENUBAR_DARK_LIMIT || (A).green()<MENUBAR_DARK_LIMIT || (A).blue()<MENUBAR_DARK_LIMIT)
|
|
#else
|
|
#define MENUBAR_DARK_LIMIT (160<<8)
|
|
#define TOO_DARK(A) ((A).red<MENUBAR_DARK_LIMIT || (A).green<MENUBAR_DARK_LIMIT || (A).blue<MENUBAR_DARK_LIMIT)
|
|
#endif
|
|
|
|
#define TO_FACTOR(A) ((100.0+((double)(A)))/100.0)
|
|
#define DEFAULT_HIGHLIGHT_FACTOR 3
|
|
#define DEFAULT_SPLITTER_HIGHLIGHT_FACTOR 3
|
|
#define DEFAULT_CR_HIGHLIGHT_FACTOR 0
|
|
#define DEFAULT_EXPANDER_HIGHLIGHT_FACTOR 3
|
|
#define MAX_HIGHLIGHT_FACTOR 50
|
|
#define MIN_HIGHLIGHT_FACTOR -50
|
|
#define MENUBAR_DARK_FACTOR TO_FACTOR(-3)
|
|
#define INACTIVE_HIGHLIGHT_FACTOR TO_FACTOR(20)
|
|
#define LV_HEADER_DARK_FACTOR TO_FACTOR(-10)
|
|
#define DEF_POPUPMENU_LIGHT_FACTOR 2
|
|
#define MIN_LIGHTER_POPUP_MENU -100
|
|
#define MAX_LIGHTER_POPUP_MENU 100
|
|
|
|
#define MIN_GB_FACTOR -50
|
|
#define MAX_GB_FACTOR 50
|
|
#define DEF_GB_FACTOR -3
|
|
|
|
#define TO_ALPHA(A) (((double)((A)<0 ? -(A) : (A)))/100.0)
|
|
#define DEF_COLOR_SEL_TAB_FACTOR 25
|
|
#define MIN_COLOR_SEL_TAB_FACTOR 0
|
|
#define MAX_COLOR_SEL_TAB_FACTOR 100
|
|
|
|
#define DEF_TAB_BGND 0
|
|
#define MIN_TAB_BGND -5
|
|
#define MAX_TAB_BGND 5
|
|
|
|
#define DEFAULT_MENU_DELAY 225
|
|
#define MIN_MENU_DELAY 0
|
|
#define MAX_MENU_DELAY 500
|
|
|
|
#define DEFAULT_SLIDER_WIDTH 15
|
|
#define MIN_SLIDER_WIDTH 11
|
|
#define MAX_SLIDER_WIDTH 31
|
|
|
|
#define SIZE_GRIP_SIZE 12
|
|
|
|
#define USE_LIGHTER_POPUP_MENU (opts.lighterPopupMenuBgnd)
|
|
#define USE_GLOW_FOCUS(mouseOver) (FOCUS_GLOW==opts.focus && (MO_GLOW!=opts.coloredMouseOver || !(mouseOver)))
|
|
|
|
#define USE_SHADED_MENU_BAR_COLORS (SHADE_CUSTOM==opts.shadeMenubars || SHADE_BLEND_SELECTED==opts.shadeMenubars)
|
|
#define MENUBAR_GLASS_SELECTED_DARK_FACTOR 0.9
|
|
|
|
#define MENUITEM_FADE_SIZE 48
|
|
|
|
#define NUM_SPLITTER_DASHES 21
|
|
|
|
#ifdef __cplusplus
|
|
#define WIDGET_BUTTON(w) (WIDGET_STD_BUTTON==(w) || WIDGET_DEF_BUTTON==(w) || \
|
|
WIDGET_CHECKBOX==(w) || WIDGET_RADIO_BUTTON==(w) || WIDGET_DIAL==(w) || \
|
|
WIDGET_COMBO==(w) || WIDGET_COMBO_BUTTON==(w) || WIDGET_MDI_WINDOW_BUTTON==(w) || \
|
|
WIDGET_TOOLBAR_BUTTON==(w) )
|
|
#define ETCH_WIDGET(w) (WIDGET_STD_BUTTON==(w) || WIDGET_DEF_BUTTON==(w) || WIDGET_SLIDER_TROUGH==(w) || \
|
|
WIDGET_CHECKBOX==(w) || WIDGET_RADIO_BUTTON==(w) || WIDGET_DIAL==(w) || \
|
|
(WIDGET_SLIDER==(w) && MO_GLOW==opts.coloredMouseOver) || \
|
|
WIDGET_FILLED_SLIDER_TROUGH==(w) || WIDGET_MDI_WINDOW_BUTTON==(w) || WIDGET_TOOLBAR_BUTTON==(w))
|
|
#define AGUA_WIDGET(w) (WIDGET_STD_BUTTON==(w) || WIDGET_DEF_BUTTON==(w) || IS_SLIDER((w)) || \
|
|
WIDGET_CHECKBOX==(w) || WIDGET_RADIO_BUTTON==(w) || \
|
|
WIDGET_COMBO==(w) WIDGET_COMBO_BUTTON==(w) || WIDGET_MDI_WINDOW_BUTTON==(w))
|
|
#else
|
|
#define WIDGET_BUTTON(w) (WIDGET_STD_BUTTON==(w) || WIDGET_DEF_BUTTON==(w) || WIDGET_TOGGLE_BUTTON==(w) || \
|
|
WIDGET_CHECKBOX==(w) || WIDGET_RADIO_BUTTON==(w) || \
|
|
WIDGET_RADIO_BUTTON==(w) || WIDGET_COMBO==(w) || WIDGET_COMBO_BUTTON==(w) || WIDGET_UNCOLOURED_MO_BUTTON==(w) || \
|
|
WIDGET_TOOLBAR_BUTTON==(w))
|
|
#define ETCH_WIDGET(w) (WIDGET_STD_BUTTON==(w) || WIDGET_DEF_BUTTON==(w) || WIDGET_TOGGLE_BUTTON==(w) || WIDGET_SLIDER_TROUGH==(w) || \
|
|
WIDGET_CHECKBOX==(w) || WIDGET_RADIO_BUTTON==(w) || \
|
|
(WIDGET_SLIDER==(w) && MO_GLOW==opts.coloredMouseOver) || \
|
|
WIDGET_FILLED_SLIDER_TROUGH==(w) || WIDGET_COMBO==(w) || WIDGET_UNCOLOURED_MO_BUTTON==(w) || \
|
|
WIDGET_TOOLBAR_BUTTON==(w))
|
|
#define AGUA_WIDGET(w) (WIDGET_STD_BUTTON==(w) || WIDGET_DEF_BUTTON==(w) || WIDGET_TOGGLE_BUTTON==(w) || IS_SLIDER((w)) || \
|
|
WIDGET_CHECKBOX==(w) || WIDGET_RADIO_BUTTON==(w) || \
|
|
WIDGET_COMBO==(w) WIDGET_COMBO_BUTTON==(w))
|
|
#endif
|
|
|
|
#define SLIDER(w) (WIDGET_SB_SLIDER==(w) || WIDGET_SLIDER==(w))
|
|
#define CIRCULAR_SLIDER(w) (WIDGET_SLIDER==(w) && SLIDER_CIRCULAR==opts.sliderStyle)
|
|
|
|
#define MODIFY_AGUA_X(A, X) (APPEARANCE_AGUA==(A) ? (X) : (A))
|
|
#define MODIFY_AGUA(A) MODIFY_AGUA_X((A), APPEARANCE_AGUA_MOD)
|
|
#define AGUA_MAX 32.0
|
|
#define AGUA_MID_SHADE 0.85
|
|
|
|
#define COLORED_BORDER_SIZE 3
|
|
#define PROGRESS_CHUNK_WIDTH 10
|
|
#define STRIPE_WIDTH 10
|
|
#define DRAW_LIGHT_BORDER(SUKEN, WIDGET, APP) \
|
|
(!(SUKEN) && (GB_LIGHT==getGradient(APP, &opts)->border) && WIDGET_MENU_ITEM!=(WIDGET) && !IS_TROUGH(WIDGET) && \
|
|
(WIDGET_DEF_BUTTON!=(WIDGET) || IND_COLORED!=opts.defBtnIndicator))
|
|
|
|
#define DRAW_3D_FULL_BORDER(SUNKEN, APP) \
|
|
(!(SUNKEN) && GB_3D_FULL==getGradient((APP), &opts)->border)
|
|
|
|
#define DRAW_3D_BORDER(SUNKEN, APP) \
|
|
(!(SUNKEN) && GB_3D==getGradient((APP), &opts)->border)
|
|
|
|
#define DRAW_SHINE(SUNKEN, APP) \
|
|
(!(SUNKEN) && GB_SHINE==getGradient((APP), &opts)->border)
|
|
|
|
#define LIGHT_BORDER(APP) (APPEARANCE_DULL_GLASS==(APP) ? 1 : 0)
|
|
|
|
#define PROGRESS_ANIMATION 100
|
|
#define MIN_SLIDER_SIZE(A) (LINE_DOTS==(A) ? 24 : 20)
|
|
|
|
#define CR_SMALL_SIZE 13
|
|
#define CR_LARGE_SIZE 15
|
|
|
|
#define TAB_APP(A) (APPEARANCE_BEVELLED==(A) || APPEARANCE_SPLIT_GRADIENT==(A) ? APPEARANCE_GRADIENT : (A))
|
|
#define NORM_TAB_APP TAB_APP(opts.tabAppearance)
|
|
#define SEL_TAB_APP TAB_APP(opts.activeTabAppearance)
|
|
|
|
#define SLIDER_MO_SHADE (SHADE_SELECTED==opts.shadeSliders ? 1 : (SHADE_BLEND_SELECTED==opts.shadeSliders ? 0 : ORIGINAL_SHADE))
|
|
#define SLIDER_MO_PLASTIK_BORDER (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 2 : 1)
|
|
#define SLIDER_MO_LEN (SLIDER_TRIANGULAR==opts.sliderStyle ? 2 : (SHADE_SELECTED==opts.shadeSliders || SHADE_BLEND_SELECTED==opts.shadeSliders ? 4 : 3))
|
|
#define SB_SLIDER_MO_LEN(A) ((A)<22 && !FULLLY_ROUNDED \
|
|
? 2 \
|
|
: ((A)<32 || (SHADE_SELECTED!=opts.shadeSliders && SHADE_BLEND_SELECTED!=opts.shadeSliders) \
|
|
? 4 \
|
|
: 6))
|
|
|
|
#define CR_MO_FILL 1
|
|
#define MO_DEF_BTN 2
|
|
#define MO_PLASTIK_DARK(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 3 : 2) /*? 2 : 1) */
|
|
#define MO_PLASTIK_LIGHT(W) (WIDGET_DEF_BUTTON==(W) && IND_COLORED==opts.defBtnIndicator ? 4 : 1) /*? 2 : 0) */
|
|
|
|
#define MO_STD_DARK(W) (MO_GLOW==opts.coloredMouseOver \
|
|
? 1 \
|
|
: MO_PLASTIK_DARK(W))
|
|
#define MO_STD_LIGHT(W, S) (MO_GLOW==opts.coloredMouseOver \
|
|
? 1 \
|
|
: MO_PLASTIK_LIGHT(W))
|
|
|
|
#define FULLLY_ROUNDED (opts.round>=ROUND_FULL)
|
|
#define DO_EFFECT (EFFECT_NONE!=opts.buttonEffect)
|
|
#if !defined __cplusplus || ( (0x039999 >= 0x040000))
|
|
#define SLIDER_GLOW (DO_EFFECT && MO_GLOW==opts.coloredMouseOver /*&& SLIDER_TRIANGULAR!=opts.sliderStyle*/ ? 2 : 0)
|
|
#endif
|
|
|
|
#define ENTRY_MO (opts.unifyCombo && opts.unifySpin)
|
|
|
|
#if !defined __cplusplus || ( (0x039999 >= 0x040000))
|
|
#define FOCUS_ALPHA 0.08
|
|
#define FOCUS_GLOW_LINE_ALPHA 0.5
|
|
#define BORDER_BLEND_ALPHA 0.7
|
|
#define ETCH_TOP_ALPHA 0.055
|
|
#define ETCH_BOTTOM_ALPHA 0.1
|
|
// #if (0x039999 >= 0x040000)
|
|
// #define ETCH_RADIO_TOP_ALPHA 0.055
|
|
// #define ETCH_RADIO_BOTTOM_ALPHA 0.80
|
|
// #else
|
|
#define ETCH_RADIO_TOP_ALPHA 0.09
|
|
#define ETCH_RADIO_BOTTOM_ALPHA 1.0
|
|
// #endif
|
|
|
|
#define RINGS_INNER_ALPHA(T) qtcRingAlpha[IMG_PLAIN_RINGS==(T) ? 1 : 0] //(IMG_PLAIN_RINGS==opts.bgndImage.type ? 0.25 : 0.125)
|
|
#define RINGS_OUTER_ALPHA qtcRingAlpha[2] //0.5
|
|
#define RINGS_WIDTH(T) (IMG_SQUARE_RINGS==T ? 260 : 450)
|
|
#define RINGS_HEIGHT(T) (IMG_SQUARE_RINGS==T ? 220 : 360)
|
|
|
|
#define RINGS_SQUARE_LARGE_ALPHA (RINGS_OUTER_ALPHA*0.675)
|
|
#define RINGS_SQUARE_SMALL_ALPHA (RINGS_OUTER_ALPHA*0.50)
|
|
#define RINGS_SQUARE_LINE_WIDTH 20.0
|
|
#define RINGS_SQUARE_RADIUS 18.0
|
|
#define RINGS_SQUARE_LARGE_SIZE 120.0
|
|
#define RINGS_SQUARE_SMALL_SIZE 100.0
|
|
|
|
#if !defined __cplusplus
|
|
#define MENU_AND_TOOLTIP_RADIUS (opts.round>=ROUND_FULL ? 5.0 : 3.5)
|
|
#else
|
|
#define MENU_AND_TOOLTIP_RADIUS (opts.round>=ROUND_FULL ? 5.0 : 2.5)
|
|
#endif
|
|
|
|
#define CUSTOM_BGND (!(IS_FLAT_BGND(opts.bgndAppearance)) || IMG_NONE!=opts.bgndImage.type || 100!=opts.bgndOpacity || 100!=opts.dlgOpacity)
|
|
|
|
#define GLOW_PROG_ALPHA 0.55
|
|
|
|
#endif
|
|
|
|
#if defined __cplusplus && (0x039999 >= 0x040000)
|
|
|
|
#include <tqstyle.h>
|
|
typedef enum
|
|
{
|
|
TQtC_Round = TQStyle::PM_CustomBase,
|
|
TQtC_TitleBarButtonAppearance,
|
|
TQtC_TitleAlignment,
|
|
TQtC_TitleBarButtons,
|
|
TQtC_TitleBarIcon,
|
|
TQtC_TitleBarIconColor,
|
|
TQtC_TitleBarEffect,
|
|
TQtC_BlendMenuAndTitleBar,
|
|
TQtC_ShadeMenubarOnlyWhenActive,
|
|
TQtC_ToggleButtons,
|
|
TQtC_MenubarColor,
|
|
TQtC_WindowBorder,
|
|
TQtC_CustomBgnd,
|
|
TQtC_TitleBarApp
|
|
} TQtCMetrics;
|
|
|
|
#define TQtC_StateKWin ((TQStyle::StateFlag)0x10000000)
|
|
// PE_FrameWindow
|
|
#define TQtC_StateKWinNotFull ((TQStyle::StateFlag)0x20000000)
|
|
// CC_TitleBar
|
|
#define TQtC_StateKWinFillBgnd ((TQStyle::StateFlag)0x20000000)
|
|
#define TQtC_StateKWinNoBorder ((TQStyle::StateFlag)0x40000000)
|
|
#define TQtC_StateKWinCompositing ((TQStyle::StateFlag)0x80000000)
|
|
#define TQtC_StateKWinTabDrag ((TQStyle::StateFlag)0x00000001)
|
|
|
|
#define TQtC_PE_DrawBackground ((TQStyle::PrimitiveElement)(TQStyle::PE_CustomBase+10000))
|
|
|
|
#define CLOSE_COLOR TQColor(191, 82, 82)
|
|
#define DARK_WINDOW_TEXT(A) ((A).red()<230 || (A).green()<230 || (A).blue()<230)
|
|
#define HOVER_BUTTON_ALPHA(A) (DARK_WINDOW_TEXT(A) ? 0.25 : 0.65)
|
|
#define WINDOW_TEXT_SHADOW_ALPHA(A) (EFFECT_SHADOW==(A) ? 0.10 : 0.60)
|
|
#define WINDOW_SHADOW_COLOR(A) (EFFECT_SHADOW==(A) ? TQt::black : TQt::white)
|
|
#endif
|
|
|
|
#if defined CONFIG_DIALOG || ( (0x039999 >= 0x040000))
|
|
#define QTCURVE_PREVIEW_CONFIG "QTCURVE_PREVIEW_CONFIG"
|
|
#define QTCURVE_PREVIEW_CONFIG_FULL "QTCURVE_PREVIEW_CONFIG_FULL"
|
|
|
|
typedef enum
|
|
{
|
|
DWT_BUTTONS_AS_PER_TITLEBAR = 0x0001,
|
|
DWT_COLOR_AS_PER_TITLEBAR = 0x0002,
|
|
DWT_FONT_AS_PER_TITLEBAR = 0x0004,
|
|
DWT_TEXT_ALIGN_AS_PER_TITLEBAR = 0x0008,
|
|
DWT_EFFECT_AS_PER_TITLEBAR = 0x0010,
|
|
DWT_ROUND_TOP_ONLY = 0x0020,
|
|
DWT_ICON_COLOR_AS_PER_TITLEBAR = 0x0040
|
|
} EDwtSettingsFlags;
|
|
|
|
typedef enum
|
|
{
|
|
TITLEBAR_BUTTON_ROUND = 0x0001,
|
|
TITLEBAR_BUTTON_HOVER_FRAME = 0x0002,
|
|
TITLEBAR_BUTTON_HOVER_SYMBOL = 0x0004,
|
|
TITLEBAR_BUTTON_NO_FRAME = 0x0008,
|
|
TITLEBAR_BUTTON_COLOR = 0x0010,
|
|
TITLEBAR_BUTTON_COLOR_INACTIVE = 0x0020,
|
|
TITLEBAR_BUTTON_COLOR_MOUSE_OVER = 0x0040,
|
|
TITLEBAR_BUTTON_STD_COLOR = 0x0080,
|
|
TITLEBAR_BUTTON_COLOR_SYMBOL = 0x0100,
|
|
TITLEBAR_BUTTON_HOVER_SYMBOL_FULL = 0x0200,
|
|
TITLEBAR_BUTTON_SUNKEN_BACKGROUND = 0x0400,
|
|
TITLEBAR_BUTTOM_ARROW_MIN_MAX = 0x0800,
|
|
TITLEBAR_BUTTOM_HIDE_ON_INACTIVE_WINDOW = 0x1000,
|
|
TITLEBAR_BUTTON_ICON_COLOR = 0x2000
|
|
} ETitleBarButtonFlags;
|
|
|
|
typedef enum
|
|
{
|
|
TITLEBAR_ICON_NONE,
|
|
TITLEBAR_ICON_MENU_BUTTON,
|
|
TITLEBAR_ICON_NEXT_TO_TITLE
|
|
} ETitleBarIcon;
|
|
|
|
typedef enum
|
|
{
|
|
TITLEBAR_CLOSE,
|
|
TITLEBAR_MIN,
|
|
TITLEBAR_MAX,
|
|
TITLEBAR_HELP,
|
|
TITLEBAR_MENU,
|
|
TITLEBAR_SHADE,
|
|
TITLEBAR_ALL_DESKTOPS,
|
|
TITLEBAR_KEEP_ABOVE,
|
|
TITLEBAR_KEEP_BELOW,
|
|
NUM_TITLEBAR_BUTTONS
|
|
} ETitleBarButtons;
|
|
|
|
#define TBAR_VERSION_HACK 65535
|
|
#define TBAR_BORDER_VERSION_HACK (TBAR_VERSION_HACK+1000)
|
|
|
|
typedef std::map<int, TQColor> TBCols;
|
|
#endif
|
|
|
|
typedef enum
|
|
{
|
|
WINDOW_BORDER_COLOR_TITLEBAR_ONLY = 0x01, // colorTitlebarOnly
|
|
WINDOW_BORDER_USE_MENUBAR_COLOR_FOR_TITLEBAR = 0x02, // titlebarMenuColor
|
|
WINDOW_BORDER_ADD_LIGHT_BORDER = 0x04, // titlebarBorder
|
|
WINDOW_BORDER_BLEND_TITLEBAR = 0x08, // titlebarBlend
|
|
WINDOW_BORDER_SEPARATOR = 0x10
|
|
} EWindowBorder;
|
|
|
|
typedef enum
|
|
{
|
|
IMG_NONE,
|
|
IMG_BORDERED_RINGS,
|
|
IMG_PLAIN_RINGS,
|
|
IMG_SQUARE_RINGS,
|
|
IMG_FILE
|
|
} EImageType;
|
|
|
|
typedef struct
|
|
{
|
|
EImageType type;
|
|
bool loaded;
|
|
#if defined __cplusplus
|
|
TQString file;
|
|
TQPixmap pix;
|
|
#else // __cplusplus
|
|
const char *file;
|
|
GdkPixbuf *pix;
|
|
#endif // __cplusplus
|
|
int width, height;
|
|
} TQtCImage;
|
|
|
|
typedef enum
|
|
{
|
|
SQUARE_NONE = 0x0000,
|
|
SQUARE_ENTRY = 0x0001,
|
|
SQUARE_PROGRESS = 0x0002,
|
|
SQUARE_SCROLLVIEW = 0x0004,
|
|
SQUARE_LISTVIEW_SELECTION = 0x0008,
|
|
SQUARE_FRAME = 0x0010,
|
|
SQUARE_TAB_FRAME = 0x0020,
|
|
SQUARE_SLIDER = 0x0040,
|
|
SQUARE_SB_SLIDER = 0x0080,
|
|
SQUARE_WINDOWS = 0x0100,
|
|
SQUARE_TOOLTIPS = 0x0200,
|
|
SQUARE_POPUP_MENUS = 0x0400
|
|
} ESquare;
|
|
|
|
typedef enum
|
|
{
|
|
WM_DRAG_NONE = 0,
|
|
WM_DRAG_MENUBAR = 1,
|
|
WM_DRAG_MENU_AND_TOOLBAR = 2,
|
|
WM_DRAG_ALL = 3
|
|
} EWmDrag;
|
|
|
|
typedef enum
|
|
{
|
|
EFFECT_NONE,
|
|
EFFECT_ETCH,
|
|
EFFECT_SHADOW
|
|
} EEffect;
|
|
|
|
typedef enum
|
|
{
|
|
PIX_CHECK,
|
|
#ifdef __cplusplus
|
|
#if (0x039999 < 0x040000)
|
|
PIX_RADIO_ON,
|
|
PIX_RADIO_BORDER,
|
|
PIX_RADIO_INNER,
|
|
PIX_RADIO_LIGHT,
|
|
PIX_SLIDER,
|
|
PIX_SLIDER_LIGHT,
|
|
PIX_SLIDER_V,
|
|
PIX_SLIDER_LIGHT_V,
|
|
#endif
|
|
PIX_DOT
|
|
#else
|
|
PIX_BLANK
|
|
#endif
|
|
} EPixmap;
|
|
|
|
typedef enum
|
|
{
|
|
WIDGET_TAB_TOP,
|
|
WIDGET_TAB_BOT,
|
|
WIDGET_STD_BUTTON,
|
|
WIDGET_DEF_BUTTON,
|
|
WIDGET_TOOLBAR_BUTTON,
|
|
WIDGET_LISTVIEW_HEADER,
|
|
WIDGET_SLIDER,
|
|
WIDGET_SLIDER_TROUGH,
|
|
WIDGET_FILLED_SLIDER_TROUGH,
|
|
WIDGET_SB_SLIDER,
|
|
WIDGET_SB_BUTTON,
|
|
WIDGET_SB_BGND,
|
|
WIDGET_TROUGH,
|
|
WIDGET_CHECKBOX,
|
|
WIDGET_RADIO_BUTTON,
|
|
WIDGET_COMBO,
|
|
WIDGET_COMBO_BUTTON,
|
|
WIDGET_MENU_ITEM,
|
|
WIDGET_PROGRESSBAR,
|
|
WIDGET_PBAR_TROUGH,
|
|
#ifndef __cplusplus
|
|
WIDGET_ENTRY_PROGRESSBAR,
|
|
WIDGET_TOGGLE_BUTTON,
|
|
WIDGET_SPIN_UP,
|
|
WIDGET_SPIN_DOWN,
|
|
WIDGET_UNCOLOURED_MO_BUTTON,
|
|
#else
|
|
WIDGET_CHECKBUTTON, // TQt4 only
|
|
WIDGET_MDI_WINDOW, // TQt4 only
|
|
WIDGET_MDI_WINDOW_TITLE, // TQt4 only
|
|
WIDGET_MDI_WINDOW_BUTTON, // TQt4 only
|
|
WIDGET_DOCK_WIDGET_TITLE,
|
|
WIDGET_DIAL,
|
|
#endif
|
|
WIDGET_SPIN,
|
|
WIDGET_ENTRY,
|
|
WIDGET_SCROLLVIEW,
|
|
WIDGET_SELECTION,
|
|
WIDGET_FRAME,
|
|
WIDGET_NO_ETCH_BTN,
|
|
WIDGET_MENU_BUTTON, // TQt4 only
|
|
WIDGET_FOCUS,
|
|
WIDGET_TAB_FRAME,
|
|
WIDGET_OTHER
|
|
} EWidget;
|
|
|
|
typedef enum
|
|
{
|
|
APP_ALLOW_BASIC,
|
|
APP_ALLOW_FADE,
|
|
APP_ALLOW_STRIPED,
|
|
APP_ALLOW_NONE
|
|
} EAppAllow;
|
|
|
|
typedef enum
|
|
{
|
|
APPEARANCE_CUSTOM1,
|
|
APPEARANCE_CUSTOM2,
|
|
APPEARANCE_CUSTOM3,
|
|
APPEARANCE_CUSTOM4,
|
|
APPEARANCE_CUSTOM5,
|
|
APPEARANCE_CUSTOM6,
|
|
APPEARANCE_CUSTOM7,
|
|
APPEARANCE_CUSTOM8,
|
|
APPEARANCE_CUSTOM9,
|
|
APPEARANCE_CUSTOM10,
|
|
APPEARANCE_CUSTOM11,
|
|
APPEARANCE_CUSTOM12,
|
|
APPEARANCE_CUSTOM13,
|
|
APPEARANCE_CUSTOM14,
|
|
APPEARANCE_CUSTOM15,
|
|
APPEARANCE_CUSTOM16,
|
|
APPEARANCE_CUSTOM17,
|
|
APPEARANCE_CUSTOM18,
|
|
APPEARANCE_CUSTOM19,
|
|
APPEARANCE_CUSTOM20,
|
|
APPEARANCE_CUSTOM21,
|
|
APPEARANCE_CUSTOM22,
|
|
|
|
NUM_CUSTOM_GRAD,
|
|
|
|
APPEARANCE_FLAT = NUM_CUSTOM_GRAD,
|
|
APPEARANCE_RAISED,
|
|
APPEARANCE_DULL_GLASS,
|
|
APPEARANCE_SHINY_GLASS,
|
|
APPEARANCE_AGUA,
|
|
APPEARANCE_SOFT_GRADIENT,
|
|
APPEARANCE_GRADIENT,
|
|
APPEARANCE_HARSH_GRADIENT,
|
|
APPEARANCE_INVERTED,
|
|
APPEARANCE_DARK_INVERTED,
|
|
APPEARANCE_SPLIT_GRADIENT,
|
|
APPEARANCE_BEVELLED,
|
|
APPEARANCE_FADE, /* Only for poupmenu items! */
|
|
APPEARANCE_STRIPED = APPEARANCE_FADE, /* Only for windows and menus */
|
|
APPEARANCE_NONE = APPEARANCE_FADE, /* Only for titlebars */
|
|
APPEARANCE_LV_BEVELLED, /* To be used only with getGradient */
|
|
APPEARANCE_AGUA_MOD,
|
|
APPEARANCE_LV_AGUA,
|
|
NUM_STD_APP = (APPEARANCE_LV_AGUA-NUM_CUSTOM_GRAD)+1
|
|
} EAppearance;
|
|
|
|
#define IS_SLIDER(W) (WIDGET_SLIDER==(W) || WIDGET_SB_SLIDER==(W))
|
|
#define IS_TROUGH(W) (WIDGET_SLIDER_TROUGH==(W) || WIDGET_PBAR_TROUGH==(W) || WIDGET_TROUGH==(W) || WIDGET_FILLED_SLIDER_TROUGH==(W))
|
|
#ifndef __cplusplus
|
|
#define IS_TOGGLE_BUTTON(W) (WIDGET_TOGGLE_BUTTON==(W) || WIDGET_CHECKBOX==(W))
|
|
#endif
|
|
|
|
typedef enum
|
|
{
|
|
CORNER_TL = 0x1,
|
|
CORNER_TR = 0x2,
|
|
CORNER_BR = 0x4,
|
|
CORNER_BL = 0x8
|
|
} ECornerBits;
|
|
|
|
#define ROUNDED_NONE 0x0
|
|
#define ROUNDED_TOP (CORNER_TL|CORNER_TR)
|
|
#define ROUNDED_BOTTOM (CORNER_BL|CORNER_BR)
|
|
#define ROUNDED_LEFT (CORNER_TL|CORNER_BL)
|
|
#define ROUNDED_RIGHT (CORNER_TR|CORNER_BR)
|
|
#define ROUNDED_TOPRIGHT CORNER_TR
|
|
#define ROUNDED_BOTTOMRIGHT CORNER_BR
|
|
#define ROUNDED_TOPLEFT CORNER_TL
|
|
#define ROUNDED_BOTTOMLEFT CORNER_BL
|
|
#define ROUNDED_ALL (CORNER_TL|CORNER_TR|CORNER_BR|CORNER_BL)
|
|
|
|
typedef enum
|
|
{
|
|
IND_CORNER,
|
|
IND_FONT_COLOR,
|
|
IND_COLORED,
|
|
IND_TINT,
|
|
IND_GLOW,
|
|
IND_DARKEN,
|
|
IND_SELECTED,
|
|
IND_NONE
|
|
} EDefBtnIndicator;
|
|
|
|
typedef enum
|
|
{
|
|
LINE_NONE,
|
|
LINE_SUNKEN,
|
|
LINE_FLAT,
|
|
LINE_DOTS,
|
|
LINE_1DOT,
|
|
LINE_DASHES,
|
|
} ELine;
|
|
|
|
typedef enum
|
|
{
|
|
TB_NONE,
|
|
TB_LIGHT,
|
|
TB_DARK,
|
|
TB_LIGHT_ALL,
|
|
TB_DARK_ALL
|
|
} ETBarBorder;
|
|
|
|
typedef enum
|
|
{
|
|
BORDER_FLAT,
|
|
BORDER_RAISED,
|
|
BORDER_SUNKEN,
|
|
BORDER_LIGHT
|
|
} EBorder;
|
|
|
|
/*
|
|
This whole EShade enum is a complete mess!
|
|
For menubars, we dont blend - so blend is selected, and selected is darken
|
|
For check/radios - we dont blend, so blend is selected, and we dont allow darken
|
|
*/
|
|
typedef enum
|
|
{
|
|
SHADE_NONE,
|
|
SHADE_CUSTOM,
|
|
SHADE_SELECTED,
|
|
SHADE_BLEND_SELECTED,
|
|
SHADE_DARKEN,
|
|
SHADE_WINDOW_BORDER
|
|
} EShade;
|
|
|
|
typedef enum
|
|
{
|
|
ECOLOR_BASE,
|
|
ECOLOR_BACKGROUND,
|
|
ECOLOR_DARK,
|
|
} EColor;
|
|
|
|
typedef enum
|
|
{
|
|
ROUND_NONE,
|
|
ROUND_SLIGHT,
|
|
ROUND_FULL,
|
|
ROUND_EXTRA,
|
|
ROUND_MAX
|
|
} ERound;
|
|
|
|
typedef enum
|
|
{
|
|
SCROLLBAR_KDE,
|
|
SCROLLBAR_WINDOWS,
|
|
SCROLLBAR_PLATINUM,
|
|
SCROLLBAR_NEXT,
|
|
SCROLLBAR_NONE
|
|
} EScrollbar;
|
|
|
|
typedef enum
|
|
{
|
|
FRAME_NONE,
|
|
FRAME_PLAIN,
|
|
FRAME_LINE,
|
|
FRAME_SHADED,
|
|
FRAME_FADED
|
|
} EFrame;
|
|
|
|
typedef enum
|
|
{
|
|
GB_LBL_BOLD = 0x01,
|
|
GB_LBL_CENTRED = 0x02,
|
|
GB_LBL_INSIDE = 0x04,
|
|
GB_LBL_OUTSIDE = 0x08
|
|
} EGBLabel;
|
|
|
|
#define NO_FRAME(A) (FRAME_NONE==(A) || FRAME_LINE==(A))
|
|
|
|
typedef enum
|
|
{
|
|
MO_NONE,
|
|
MO_COLORED,
|
|
MO_COLORED_THICK,
|
|
MO_PLASTIK,
|
|
MO_GLOW
|
|
} EMouseOver;
|
|
|
|
typedef enum
|
|
{
|
|
STRIPE_NONE,
|
|
STRIPE_PLAIN,
|
|
STRIPE_DIAGONAL,
|
|
STRIPE_FADE
|
|
} EStripe;
|
|
|
|
typedef enum
|
|
{
|
|
SLIDER_PLAIN,
|
|
SLIDER_ROUND,
|
|
SLIDER_PLAIN_ROTATED,
|
|
SLIDER_ROUND_ROTATED,
|
|
SLIDER_TRIANGULAR,
|
|
SLIDER_CIRCULAR
|
|
} ESliderStyle;
|
|
|
|
#define ROTATED_SLIDER (SLIDER_PLAIN_ROTATED==opts.sliderStyle || SLIDER_ROUND_ROTATED==opts.sliderStyle)
|
|
|
|
typedef enum
|
|
{
|
|
FOCUS_STANDARD,
|
|
FOCUS_RECTANGLE,
|
|
FOCUS_FULL,
|
|
FOCUS_FILLED,
|
|
FOCUS_LINE,
|
|
FOCUS_GLOW
|
|
} EFocus;
|
|
|
|
typedef enum
|
|
{
|
|
TAB_MO_TOP,
|
|
TAB_MO_BOTTOM,
|
|
TAB_MO_GLOW
|
|
} ETabMo;
|
|
|
|
typedef enum
|
|
{
|
|
GT_HORIZ,
|
|
GT_VERT
|
|
} EGradType;
|
|
|
|
typedef enum
|
|
{
|
|
GLOW_NONE,
|
|
GLOW_START,
|
|
GLOW_MIDDLE,
|
|
GLOW_END
|
|
} EGlow;
|
|
|
|
#define FULL_FOCUS (FOCUS_FULL==opts.focus || FOCUS_FILLED==opts.focus)
|
|
|
|
enum
|
|
{
|
|
HIDE_NONE = 0x00,
|
|
HIDE_KEYBOARD = 0x01,
|
|
HIDE_KWIN = 0x02
|
|
};
|
|
|
|
#if defined __cplusplus
|
|
typedef enum
|
|
{
|
|
ALIGN_LEFT,
|
|
ALIGN_CENTER,
|
|
ALIGN_FULL_CENTER,
|
|
ALIGN_RIGHT
|
|
} EAlign;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
inline
|
|
#else
|
|
static
|
|
#endif
|
|
bool equal(double d1, double d2)
|
|
{
|
|
return (fabs(d1 - d2) < 0.0001);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
struct GradientStop
|
|
#else
|
|
typedef struct
|
|
#endif
|
|
{
|
|
#ifdef __cplusplus
|
|
GradientStop(double p=0.0, double v=0.0, double a=1.0) : pos(p), val(v), alpha(a) { }
|
|
|
|
bool operator==(const GradientStop &o) const
|
|
{
|
|
return equal(pos, o.pos) && equal(val, o.val) && equal(alpha, o.alpha);
|
|
}
|
|
|
|
bool operator<(const GradientStop &o) const
|
|
{
|
|
return pos<o.pos || (equal(pos, o.pos) && (val<o.val || (equal(val, o.val) && alpha<o.alpha)));
|
|
}
|
|
#endif
|
|
|
|
double pos,
|
|
val,
|
|
alpha;
|
|
}
|
|
#ifndef __cplusplus
|
|
GradientStop
|
|
#endif
|
|
;
|
|
|
|
typedef enum
|
|
{
|
|
GB_NONE,
|
|
GB_LIGHT,
|
|
GB_3D,
|
|
GB_3D_FULL,
|
|
GB_SHINE
|
|
} EGradientBorder;
|
|
|
|
typedef enum
|
|
{
|
|
LV_NONE,
|
|
LV_NEW,
|
|
LV_OLD
|
|
} ELvLines;
|
|
|
|
typedef struct
|
|
{
|
|
int titleHeight,
|
|
toolTitleHeight,
|
|
bottom,
|
|
sides;
|
|
} WindowBorders;
|
|
|
|
#ifdef __cplusplus
|
|
struct GradientStopCont : public std::set<GradientStop>
|
|
{
|
|
GradientStopCont fix() const
|
|
{
|
|
GradientStopCont c(*this);
|
|
if(size())
|
|
{
|
|
GradientStopCont::const_iterator first(c.begin());
|
|
GradientStopCont::reverse_iterator last(c.rbegin());
|
|
|
|
if((*first).pos>0.001)
|
|
c.insert(GradientStop(0.0, 1.0));
|
|
if((*last).pos<0.999)
|
|
c.insert(GradientStop(1.0, 1.0));
|
|
}
|
|
return c;
|
|
}
|
|
};
|
|
struct Gradient
|
|
#else
|
|
typedef struct
|
|
#endif
|
|
{
|
|
#ifdef __cplusplus
|
|
Gradient() : border(GB_3D) { }
|
|
|
|
#ifdef CONFIG_DIALOG
|
|
bool operator==(const Gradient &o) const
|
|
{
|
|
return border==o.border && stops==o.stops;
|
|
}
|
|
#endif
|
|
#endif
|
|
EGradientBorder border;
|
|
#ifdef __cplusplus
|
|
GradientStopCont stops;
|
|
#else
|
|
int numStops;
|
|
GradientStop *stops;
|
|
#endif
|
|
}
|
|
#ifndef __cplusplus
|
|
Gradient
|
|
#endif
|
|
;
|
|
|
|
#define USE_CUSTOM_SHADES(A) ((A).customShades[0]>0.00001)
|
|
#define USE_CUSTOM_ALPHAS(A) ((A).customAlphas[0]>0.00001)
|
|
|
|
#ifdef __cplusplus
|
|
typedef std::map<EAppearance, Gradient> GradientCont;
|
|
struct Options
|
|
#else
|
|
typedef struct
|
|
#endif
|
|
{
|
|
|
|
int version,
|
|
contrast,
|
|
passwordChar,
|
|
highlightFactor,
|
|
lighterPopupMenuBgnd,
|
|
menuDelay,
|
|
sliderWidth,
|
|
tabBgnd,
|
|
colorSelTab,
|
|
expanderHighlight,
|
|
crHighlight,
|
|
splitterHighlight,
|
|
crSize,
|
|
gbFactor,
|
|
gbLabel;
|
|
ERound round;
|
|
bool embolden,
|
|
highlightTab,
|
|
roundAllTabs,
|
|
animatedProgress,
|
|
#ifdef TQTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT
|
|
fixParentlessDialogs,
|
|
#endif
|
|
customMenuTextColor,
|
|
menubarMouseOver,
|
|
useHighlightForMenu,
|
|
shadeMenubarOnlyWhenActive,
|
|
thinnerMenuItems,
|
|
thinnerBtns,
|
|
lvButton,
|
|
drawStatusBarFrames,
|
|
fillSlider,
|
|
roundMbTopOnly,
|
|
gtkScrollViews,
|
|
stdSidebarButtons,
|
|
toolbarTabs,
|
|
#ifdef __cplusplus
|
|
gtkComboMenus,
|
|
/*
|
|
#else
|
|
setDialogButtonOrder,
|
|
*/
|
|
#endif
|
|
mapKdeIcons,
|
|
#if defined CONFIG_DIALOG || ( (0x039999 >= 0x040000)) || !defined __cplusplus
|
|
gtkButtonOrder,
|
|
fadeLines,
|
|
#endif
|
|
reorderGtkButtons,
|
|
borderMenuitems,
|
|
colorMenubarMouseOver,
|
|
darkerBorders,
|
|
vArrows,
|
|
xCheck,
|
|
crButton,
|
|
smallRadio,
|
|
fillProgress,
|
|
comboSplitter,
|
|
highlightScrollViews,
|
|
sunkenScrollViews,
|
|
etchEntry,
|
|
colorSliderMouseOver,
|
|
thinSbarGroove,
|
|
flatSbarButtons,
|
|
borderSbarGroove,
|
|
borderProgress,
|
|
popupBorder,
|
|
unifySpinBtns,
|
|
unifyCombo,
|
|
unifySpin,
|
|
borderTab,
|
|
borderInactiveTab,
|
|
doubleGtkComboArrow,
|
|
menuIcons,
|
|
#if defined CONFIG_DIALOG || ( (0x039999 >= 0x040000))
|
|
stdBtnSizes,
|
|
#endif
|
|
#if (0x039999 >= 0x040000)
|
|
xbar,
|
|
#endif
|
|
forceAlternateLvCols,
|
|
invertBotTab,
|
|
boldProgress,
|
|
coloredTbarMo,
|
|
borderSelection,
|
|
stripedSbar,
|
|
shadePopupMenu;
|
|
EFrame groupBox;
|
|
EGlow glowProgress;
|
|
ELvLines lvLines;
|
|
EGradType bgndGrad,
|
|
menuBgndGrad;
|
|
int menubarHiding,
|
|
statusbarHiding,
|
|
square,
|
|
windowDrag,
|
|
windowBorder,
|
|
bgndOpacity,
|
|
menuBgndOpacity,
|
|
dlgOpacity;
|
|
#if (0x039999 >= 0x040000)
|
|
int dwtSettings;
|
|
#endif
|
|
#if defined CONFIG_DIALOG || ( (0x039999 >= 0x040000))
|
|
int titlebarButtons;
|
|
TBCols titlebarButtonColors;
|
|
ETitleBarIcon titlebarIcon;
|
|
#endif
|
|
EStripe stripedProgress;
|
|
ESliderStyle sliderStyle;
|
|
EMouseOver coloredMouseOver;
|
|
ETBarBorder toolbarBorders;
|
|
EDefBtnIndicator defBtnIndicator;
|
|
ELine sliderThumbs,
|
|
handles,
|
|
toolbarSeparators,
|
|
splitters;
|
|
ETabMo tabMouseOver;
|
|
/* NOTE: If add an appearance setting, increase the number of custmo gradients to match! */
|
|
EAppearance appearance,
|
|
bgndAppearance,
|
|
menuBgndAppearance,
|
|
menubarAppearance,
|
|
menuitemAppearance,
|
|
toolbarAppearance,
|
|
lvAppearance,
|
|
tabAppearance,
|
|
activeTabAppearance,
|
|
sliderAppearance,
|
|
titlebarAppearance,
|
|
inactiveTitlebarAppearance,
|
|
#ifdef __cplusplus
|
|
titlebarButtonAppearance,
|
|
dwtAppearance,
|
|
#endif
|
|
selectionAppearance,
|
|
menuStripeAppearance,
|
|
progressAppearance,
|
|
progressGrooveAppearance,
|
|
grooveAppearance,
|
|
sunkenAppearance,
|
|
sbarBgndAppearance,
|
|
sliderFill,
|
|
tooltipAppearance;
|
|
EShade shadeSliders,
|
|
shadeMenubars,
|
|
menuStripe,
|
|
shadeCheckRadio,
|
|
comboBtn,
|
|
sortedLv,
|
|
crColor,
|
|
progressColor;
|
|
EColor progressGrooveColor;
|
|
EEffect buttonEffect;
|
|
EScrollbar scrollbarType;
|
|
EFocus focus;
|
|
color customMenubarsColor,
|
|
customSlidersColor,
|
|
customMenuNormTextColor,
|
|
customMenuSelTextColor,
|
|
customMenuStripeColor,
|
|
customCheckRadioColor,
|
|
customComboBtnColor,
|
|
customSortedLvColor,
|
|
customCrBgndColor,
|
|
customProgressColor;
|
|
EShading shading;
|
|
#if defined __cplusplus
|
|
EAlign titlebarAlignment;
|
|
EEffect titlebarEffect;
|
|
bool centerTabText;
|
|
#endif
|
|
double customShades[NUM_STD_SHADES],
|
|
customAlphas[NUM_STD_ALPHAS];
|
|
#ifdef __cplusplus
|
|
GradientCont customGradient;
|
|
#else
|
|
Gradient *customGradient[NUM_CUSTOM_GRAD];
|
|
#endif
|
|
TQtCImage bgndImage,
|
|
menuBgndImage;
|
|
#if !defined __cplusplus || ( (0x039999 >= 0x040000))
|
|
/* NOTE: If add any more settings here, need to alter copyOpts/freeOpts/defaultSettings in config_file.c */
|
|
Strings noBgndGradientApps,
|
|
noBgndOpacityApps,
|
|
noMenuBgndOpacityApps,
|
|
noBgndImageApps;
|
|
#endif
|
|
#ifdef TQTC_ENABLE_PARENTLESS_DIALOG_FIX_SUPPORT
|
|
Strings noDlgFixApps;
|
|
#endif
|
|
Strings noMenuStripeApps;
|
|
#if (0x039999 >= 0x040000)
|
|
Strings menubarApps,
|
|
statusbarApps,
|
|
useTQtFileDialogApps,
|
|
windowDragWhiteList,
|
|
windowDragBlackList;
|
|
#endif
|
|
|
|
#ifndef __cplusplus
|
|
} Options;
|
|
#else
|
|
};
|
|
#endif
|
|
|
|
#ifdef COMMON_FUNCTIONS
|
|
|
|
#ifndef MIN
|
|
#define MIN(a, b) ((a) < (b) ? (a) : (b))
|
|
#endif
|
|
#ifndef MAX
|
|
#define MAX(a, b) ((b) < (a) ? (a) : (b))
|
|
#endif
|
|
|
|
/* Taken from rgb->hsl routines taken from KColor
|
|
Copyright 2007 Matthew Woehlke <mw_triad@users.sourceforge.net>
|
|
*/
|
|
static inline double normalize(double a)
|
|
{
|
|
return (a < 0.0 ? 0.0 : a > 1.0 ? 1.0 : a);
|
|
}
|
|
|
|
static inline double mix(double a, double b, double k)
|
|
{
|
|
return a + ( ( b - a ) * k );
|
|
}
|
|
|
|
static inline double wrap(double a, double d)
|
|
{
|
|
register double r = fmod( a, d );
|
|
return ( r < 0.0 ? d + r : ( r > 0.0 ? r : 0.0 ) );
|
|
}
|
|
|
|
static inline double h2c(double h, double m1, double m2)
|
|
{
|
|
h = wrap( h, 6.0 );
|
|
|
|
if ( h < 1.0 )
|
|
return mix( m1, m2, h );
|
|
if ( h < 3.0 )
|
|
return m2;
|
|
if ( h < 4.0 )
|
|
return mix( m1, m2, 4.0 - h );
|
|
return m1;
|
|
}
|
|
|
|
static inline void rgbToHsl(double r, double g, double b, double *h, double *s, double *l)
|
|
{
|
|
double min=MIN(MIN(r, g), b),
|
|
max=MAX(MAX(r, g), b);
|
|
|
|
*l = 0.5 * (max + min);
|
|
*s = 0.0;
|
|
*h = 0.0;
|
|
|
|
if (max != min)
|
|
{
|
|
double delta = max - min;
|
|
|
|
if ( *l <= 0.5 )
|
|
*s = delta / ( max + min );
|
|
else
|
|
*s = delta / ( 2.0 - max - min );
|
|
|
|
if ( r == max )
|
|
*h = ( g - b ) / delta;
|
|
else if ( g == max )
|
|
*h = 2.0 + ( b - r ) / delta;
|
|
else if ( b == max )
|
|
*h = 4.0 + ( r - g ) / delta;
|
|
|
|
*h /= 6.0;
|
|
if ( *h < 0.0 )
|
|
(*h) += 1.0;
|
|
}
|
|
}
|
|
|
|
static inline void hslToRgb(double h, double s, double l, double *r, double *g, double *b)
|
|
{
|
|
double m1, m2;
|
|
|
|
// TODO h2rgb( h, r, g, b );
|
|
h *= 6.0;
|
|
|
|
if ( l <= 0.5 )
|
|
m2 = l * ( 1.0 + s );
|
|
else
|
|
m2 = l + s * ( 1.0 - l );
|
|
m1 = 2.0 * l - m2;
|
|
|
|
*r = h2c( h + 2.0, m1, m2 );
|
|
*g = h2c( h, m1, m2 );
|
|
*b = h2c( h - 2.0, m1, m2 );
|
|
}
|
|
|
|
static void rgbToHsv(double r, double g, double b, double *h, double *s, double *v)
|
|
{
|
|
double min=MIN(MIN(r, g), b),
|
|
max=MAX(MAX(r, g), b),
|
|
delta=max - min;
|
|
|
|
*v=max;
|
|
if(max != 0)
|
|
*s=delta / max;
|
|
else
|
|
*s=0;
|
|
|
|
if (*s==0.0)
|
|
*h = 0.0;
|
|
else
|
|
{
|
|
if(r == max)
|
|
*h=(g - b) / delta; /* between yellow & magenta */
|
|
else if(g == max)
|
|
*h=2 + (b - r) / delta; /* between cyan & yellow */
|
|
else if(b == max)
|
|
*h=4 + (r - g) / delta; /* between magenta & cyan */
|
|
*h *= 60; /* degrees */
|
|
if(*h < 0)
|
|
*h += 360;
|
|
}
|
|
}
|
|
|
|
static void hsvToRgb(double *r, double *g, double *b, double h, double s, double v)
|
|
{
|
|
if(0==s)
|
|
*r=*g=*b=v;
|
|
else
|
|
{
|
|
int i;
|
|
double f,
|
|
p;
|
|
|
|
h /= 60; /* sector 0 to 5 */
|
|
i=(int)floor(h);
|
|
f=h - i; /* factorial part of h */
|
|
p=v * (1 - s);
|
|
switch(i)
|
|
{
|
|
case 0:
|
|
*r=v;
|
|
*g=v * (1 - s * (1 - f));
|
|
*b=p;
|
|
break;
|
|
case 1:
|
|
*r=v * (1 - s * f);
|
|
*g=v;
|
|
*b=p;
|
|
break;
|
|
case 2:
|
|
*r=p;
|
|
*g=v;
|
|
*b=v * (1 - s * (1 - f));
|
|
break;
|
|
case 3:
|
|
*r=p;
|
|
*g=v * (1 - s * f);
|
|
*b=v;
|
|
break;
|
|
case 4:
|
|
*r=v * (1 - s * (1 - f));
|
|
*g=p;
|
|
*b=v;
|
|
break;
|
|
/* case 5: */
|
|
default:
|
|
*r=v;
|
|
*g=p;
|
|
*b=v * (1 - s * f);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
inline int limit(double c)
|
|
{
|
|
return c < 0.0 ? 0 : (c > 255.0 ? 255 : (int)c);
|
|
}
|
|
#else
|
|
inline int limit(double c)
|
|
{
|
|
return c < 0.0
|
|
? 0
|
|
: c > 65535.0
|
|
? 65535
|
|
: (int)c;
|
|
}
|
|
#endif
|
|
|
|
#if (0x039999 >= 0x040000) && !defined TQTC_TQT_ONLY
|
|
#include <KDE/KColorUtils>
|
|
#define tint(COLA, COLB, FACTOR) KColorUtils::tint((COLA), (COLB), (FACTOR))
|
|
#define midColor(COLA, COLB) KColorUtils::mix((COLA), (COLB), 0.5)
|
|
#else
|
|
#include "colorutils.c"
|
|
#ifdef __cplusplus
|
|
#define tint(COLA, COLB, FACTOR) ColorUtils_tint(&(COLA), &(COLB), (FACTOR))
|
|
#define midColor(COLA, COLB) ColorUtils_mix(&(COLA), &(COLB), 0.5)
|
|
#define midColorF(COLA, COLB, FACTOR) ColorUtils_mix(&(COLA), &(COLB), FACTOR-0.5)
|
|
#else
|
|
#define tint(COLA, COLB, FACTOR) ColorUtils_tint((COLA), (COLB), (FACTOR))
|
|
#define midColor(COLA, COLB) ColorUtils_mix((COLA), (COLB), 0.5)
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
static void shade(const Options *opts, const color &ca, color *cb, double k)
|
|
#else
|
|
static void shade(const Options *opts, const color *ca, color *cb, double k)
|
|
#endif
|
|
{
|
|
if(equal(k, 1.0))
|
|
{
|
|
#ifdef __cplusplus
|
|
*cb=ca;
|
|
#else
|
|
cb->red = ca->red;
|
|
cb->green = ca->green;
|
|
cb->blue = ca->blue;
|
|
#endif
|
|
}
|
|
else
|
|
switch(opts->shading)
|
|
{
|
|
case SHADING_SIMPLE:
|
|
{
|
|
#ifdef __cplusplus
|
|
int v=(int)(255.0*(k-1.0));
|
|
|
|
cb->setRgb(limit(ca.red()+v), limit(ca.green()+v), limit(ca.blue()+v));
|
|
#else
|
|
double v=65535.0*(k-1.0);
|
|
|
|
cb->red = limit(ca->red+v);
|
|
cb->green = limit(ca->green+v);
|
|
cb->blue = limit(ca->blue+v);
|
|
#endif
|
|
break;
|
|
}
|
|
case SHADING_HSL:
|
|
{
|
|
#ifdef __cplusplus
|
|
double r(ca.red()/255.0),
|
|
g(ca.green()/255.0),
|
|
b(ca.blue()/255.0);
|
|
#else
|
|
double r=ca->red/65535.0,
|
|
g=ca->green/65535.0,
|
|
b=ca->blue/65535.0;
|
|
#endif
|
|
double h, s, l;
|
|
|
|
rgbToHsl(r, g, b, &h, &s, &l);
|
|
l=normalize(l*k);
|
|
s=normalize(s*k);
|
|
hslToRgb(h, s, l, &r, &g, &b);
|
|
#ifdef __cplusplus
|
|
cb->setRgb(limit(r*255.0), limit(g*255.0), limit(b*255.0));
|
|
#else
|
|
cb->red=limit(r*65535.0);
|
|
cb->green=limit(g*65535.0);
|
|
cb->blue=limit(b*65535.0);
|
|
#endif
|
|
break;
|
|
}
|
|
case SHADING_HSV:
|
|
{
|
|
#ifdef __cplusplus
|
|
double r(ca.red()/255.0),
|
|
g(ca.green()/255.0),
|
|
b(ca.blue()/255.0);
|
|
#else
|
|
double r=ca->red/65535.0,
|
|
g=ca->green/65535.0,
|
|
b=ca->blue/65535.0;
|
|
#endif
|
|
double h, s, v;
|
|
|
|
rgbToHsv(r, g, b, &h, &s, &v);
|
|
|
|
v*=k;
|
|
if (v > 1.0)
|
|
{
|
|
s -= v - 1.0;
|
|
if (s < 0)
|
|
s = 0;
|
|
v = 1.0;
|
|
}
|
|
hsvToRgb(&r, &g, &b, h, s, v);
|
|
#ifdef __cplusplus
|
|
cb->setRgb(limit(r*255.0), limit(g*255.0), limit(b*255.0));
|
|
#else
|
|
cb->red=limit(r*65535.0);
|
|
cb->green=limit(g*65535.0);
|
|
cb->blue=limit(b*65535.0);
|
|
#endif
|
|
break;
|
|
}
|
|
case SHADING_HCY:
|
|
{
|
|
#define HCY_FACTOR 0.15
|
|
#if (0x039999 >= 0x040000) && !defined TQTC_TQT_ONLY
|
|
if(k>1.0)
|
|
*cb=KColorUtils::lighten(ca, (k*(1+HCY_FACTOR))-1.0, 1.0);
|
|
else
|
|
*cb=KColorUtils::darken(ca, 1.0-(k*(1-HCY_FACTOR)), 1.0);
|
|
#elif defined __cplusplus
|
|
if(k>1.0)
|
|
*cb=ColorUtils_lighten(&ca, (k*(1+HCY_FACTOR))-1.0, 1.0);
|
|
else
|
|
*cb=ColorUtils_darken(&ca, 1.0-(k*(1-HCY_FACTOR)), 1.0);
|
|
#else
|
|
if(k>1.0)
|
|
*cb=ColorUtils_lighten(ca, (k*(1+HCY_FACTOR))-1.0, 1.0);
|
|
else
|
|
*cb=ColorUtils_darken(ca, 1.0-(k*(1-HCY_FACTOR)), 1.0);
|
|
#endif
|
|
}
|
|
}
|
|
#if defined __cplusplus && (0x039999 >= 0x040000)
|
|
cb->setAlpha(ca.alpha());
|
|
#endif
|
|
#ifndef __cplusplus
|
|
cb->pixel = ca->pixel;
|
|
#endif
|
|
}
|
|
|
|
#if (!defined CONFIG_DIALOG)
|
|
static unsigned char checkBounds(int num)
|
|
{
|
|
return num < 0 ? 0 :
|
|
num > 255 ? 255 :
|
|
num;
|
|
}
|
|
|
|
static void adjustPix(unsigned char *data, int numChannels, int w, int h, int stride,
|
|
int ro, int go, int bo, double shade)
|
|
{
|
|
int width=w*numChannels,
|
|
offset=0,
|
|
row,
|
|
r=(int)((ro*shade)+0.5),
|
|
g=(int)((go*shade)+0.5),
|
|
b=(int)((bo*shade)+0.5);
|
|
|
|
for(row=0; row<h; ++row)
|
|
{
|
|
int column;
|
|
|
|
for(column=0; column<width; column+=numChannels)
|
|
{
|
|
unsigned char source=data[offset+column+1];
|
|
|
|
#if defined __cplusplus
|
|
#if TQ_BYTE_ORDER == TQ_BIG_ENDIAN
|
|
/* ARGB */
|
|
data[offset+column+1] = checkBounds(r-source);
|
|
data[offset+column+2] = checkBounds(g-source);
|
|
data[offset+column+3] = checkBounds(b-source);
|
|
#else
|
|
/* BGRA */
|
|
data[offset+column] = checkBounds(b-source);
|
|
data[offset+column+1] = checkBounds(g-source);
|
|
data[offset+column+2] = checkBounds(r-source);
|
|
#endif
|
|
#else
|
|
/* GdkPixbuf is RGBA */
|
|
data[offset+column] = checkBounds(r-source);
|
|
data[offset+column+1] = checkBounds(g-source);
|
|
data[offset+column+2] = checkBounds(b-source);
|
|
#endif
|
|
|
|
}
|
|
offset+=stride;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
static void setupGradient(Gradient *grad, EGradientBorder border, int numStops, ...)
|
|
{
|
|
va_list ap;
|
|
int i;
|
|
|
|
grad->border=border;
|
|
#ifndef __cplusplus
|
|
grad->numStops=numStops;
|
|
grad->stops=malloc(sizeof(GradientStop) * numStops);
|
|
#endif
|
|
va_start(ap, numStops);
|
|
for(i=0; i<numStops; ++i)
|
|
{
|
|
double pos=va_arg(ap, double),
|
|
val=va_arg(ap, double);
|
|
#ifdef __cplusplus
|
|
grad->stops.insert(GradientStop(pos, val));
|
|
#else
|
|
grad->stops[i].pos=pos;
|
|
grad->stops[i].val=val;
|
|
grad->stops[i].alpha=1.0;
|
|
#endif
|
|
}
|
|
va_end(ap);
|
|
}
|
|
|
|
static const Gradient * getGradient(EAppearance app, const Options *opts)
|
|
{
|
|
if(IS_CUSTOM(app))
|
|
{
|
|
#ifdef __cplusplus
|
|
GradientCont::const_iterator grad(opts->customGradient.find(app));
|
|
|
|
if(grad!=opts->customGradient.end())
|
|
return &((*grad).second);
|
|
#else
|
|
Gradient *grad=opts->customGradient[app-APPEARANCE_CUSTOM1];
|
|
|
|
if(grad)
|
|
return grad;
|
|
#endif
|
|
app=APPEARANCE_RAISED;
|
|
}
|
|
|
|
{
|
|
static Gradient stdGradients[NUM_STD_APP];
|
|
static bool init=false;
|
|
|
|
if(!init)
|
|
{
|
|
setupGradient(&stdGradients[APPEARANCE_FLAT-APPEARANCE_FLAT], GB_3D,2,0.0,1.0,1.0,1.0);
|
|
setupGradient(&stdGradients[APPEARANCE_RAISED-APPEARANCE_FLAT], GB_3D_FULL,2,0.0,1.0,1.0,1.0);
|
|
setupGradient(&stdGradients[APPEARANCE_DULL_GLASS-APPEARANCE_FLAT], GB_LIGHT,4,0.0,1.05,0.499,0.984,0.5,0.928,1.0,1.0);
|
|
setupGradient(&stdGradients[APPEARANCE_SHINY_GLASS-APPEARANCE_FLAT], GB_LIGHT,4,0.0,1.2,0.499,0.984,0.5,0.9,1.0,1.06);
|
|
setupGradient(&stdGradients[APPEARANCE_AGUA-APPEARANCE_FLAT], GB_SHINE, 2,0.0,0.6,1.0,1.1);
|
|
setupGradient(&stdGradients[APPEARANCE_SOFT_GRADIENT-APPEARANCE_FLAT], GB_3D,2,0.0,1.04,1.0,0.98);
|
|
setupGradient(&stdGradients[APPEARANCE_GRADIENT-APPEARANCE_FLAT], GB_3D,2,0.0,1.1,1.0,0.94);
|
|
setupGradient(&stdGradients[APPEARANCE_HARSH_GRADIENT-APPEARANCE_FLAT], GB_3D,2,0.0,1.3,1.0,0.925);
|
|
setupGradient(&stdGradients[APPEARANCE_INVERTED-APPEARANCE_FLAT], GB_3D,2,0.0,0.93,1.0,1.04);
|
|
setupGradient(&stdGradients[APPEARANCE_DARK_INVERTED-APPEARANCE_FLAT], GB_NONE,3,0.0,0.8,0.7,0.95,1.0,1.0);
|
|
setupGradient(&stdGradients[APPEARANCE_SPLIT_GRADIENT-APPEARANCE_FLAT], GB_3D,4,0.0,1.06,0.499,1.004,0.5,0.986,1.0,0.92);
|
|
setupGradient(&stdGradients[APPEARANCE_BEVELLED-APPEARANCE_FLAT], GB_3D,4,0.0,1.05,0.1,1.02,0.9,0.985,1.0,0.94);
|
|
setupGradient(&stdGradients[APPEARANCE_LV_BEVELLED-APPEARANCE_FLAT], GB_3D,3,0.0,1.00,0.85,1.0,1.0,0.90);
|
|
setupGradient(&stdGradients[APPEARANCE_AGUA_MOD-APPEARANCE_FLAT], GB_NONE,3,0.0,1.5,0.49,0.85,1.0,1.3);
|
|
setupGradient(&stdGradients[APPEARANCE_LV_AGUA-APPEARANCE_FLAT], GB_NONE,4,0.0,0.98,0.35,0.95,0.4,0.93,1.0,1.15);
|
|
init=true;
|
|
}
|
|
|
|
return &stdGradients[app-APPEARANCE_FLAT];
|
|
}
|
|
|
|
return 0L; /* Will never happen! */
|
|
}
|
|
|
|
#endif
|
|
|
|
#if defined COMMON_FUNCTIONS && !defined CONFIG_DIALOG
|
|
|
|
#ifdef __cplusplus
|
|
static EAppearance widgetApp(EWidget w, const Options *opts, bool active=true)
|
|
#else
|
|
static EAppearance widgetApp(EWidget w, const Options *opts)
|
|
#endif
|
|
{
|
|
switch(w)
|
|
{
|
|
case WIDGET_SB_BGND:
|
|
return opts->sbarBgndAppearance;
|
|
case WIDGET_LISTVIEW_HEADER:
|
|
return opts->lvAppearance;
|
|
case WIDGET_SB_BUTTON:
|
|
case WIDGET_SLIDER:
|
|
case WIDGET_SB_SLIDER:
|
|
return opts->sliderAppearance;
|
|
case WIDGET_FILLED_SLIDER_TROUGH:
|
|
return opts->sliderFill;
|
|
case WIDGET_TAB_TOP:
|
|
case WIDGET_TAB_BOT:
|
|
return opts->tabAppearance;
|
|
case WIDGET_MENU_ITEM:
|
|
return opts->menuitemAppearance;
|
|
case WIDGET_PROGRESSBAR:
|
|
#ifndef __cplusplus
|
|
case WIDGET_ENTRY_PROGRESSBAR:
|
|
#endif
|
|
return opts->progressAppearance;
|
|
case WIDGET_PBAR_TROUGH:
|
|
return opts->progressGrooveAppearance;
|
|
case WIDGET_SELECTION:
|
|
return opts->selectionAppearance;
|
|
#ifdef __cplusplus
|
|
case WIDGET_DOCK_WIDGET_TITLE:
|
|
return opts->dwtAppearance;
|
|
case WIDGET_MDI_WINDOW:
|
|
case WIDGET_MDI_WINDOW_TITLE:
|
|
return active ? opts->titlebarAppearance : opts->inactiveTitlebarAppearance;
|
|
case WIDGET_MDI_WINDOW_BUTTON:
|
|
return opts->titlebarButtonAppearance;
|
|
case WIDGET_DIAL:
|
|
return IS_FLAT(opts->appearance) ? APPEARANCE_RAISED : APPEARANCE_SOFT_GRADIENT;
|
|
#endif
|
|
case WIDGET_TROUGH:
|
|
case WIDGET_SLIDER_TROUGH:
|
|
return opts->grooveAppearance;
|
|
#ifndef __cplusplus
|
|
case WIDGET_SPIN_UP:
|
|
case WIDGET_SPIN_DOWN:
|
|
#endif
|
|
case WIDGET_SPIN:
|
|
return MODIFY_AGUA(opts->appearance);
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return opts->appearance;
|
|
};
|
|
|
|
#define MIN_ROUND_FULL_SIZE 8
|
|
#ifdef __cplusplus
|
|
#define MIN_ROUND_EXTRA_SIZE(W) (WIDGET_SPIN==(W) ? 7 : 14)
|
|
#else
|
|
#define MIN_ROUND_EXTRA_SIZE(W) (WIDGET_SPIN_UP==(W) || WIDGET_SPIN_DOWN==(W) || WIDGET_SPIN==(W) ? 7 : 14)
|
|
#endif
|
|
#define MIN_ROUND_MAX_HEIGHT 12
|
|
#define MIN_ROUND_MAX_WIDTH 24
|
|
|
|
#if !defined __cplusplus || ( (0x039999 >= 0x040000))
|
|
|
|
#if defined __cplusplus
|
|
#define EXTRA_INNER_RADIUS 3.5
|
|
#define EXTRA_OUTER_RADIUS 4.5
|
|
#define EXTRA_ETCH_RADIUS 5.5
|
|
#define FULL_INNER_RADIUS 1.5
|
|
#define FULL_OUTER_RADIUS 2.5
|
|
#define FULL_ETCH_RADIUS 3.5
|
|
|
|
#if (0x039999 < 0x040600)
|
|
#define SLIGHT_INNER_RADIUS 0.5
|
|
#define SLIGHT_OUTER_RADIUS 1.5
|
|
#define SLIGHT_ETCH_RADIUS 2.5
|
|
#else
|
|
#define SLIGHT_INNER_RADIUS 0.75
|
|
#define SLIGHT_OUTER_RADIUS 1.75
|
|
#define SLIGHT_ETCH_RADIUS 2.75
|
|
#endif
|
|
|
|
#else
|
|
#define EXTRA_INNER_RADIUS 4
|
|
#define EXTRA_OUTER_RADIUS 5
|
|
#define EXTRA_ETCH_RADIUS 6
|
|
#define FULL_INNER_RADIUS 2
|
|
#define FULL_OUTER_RADIUS 3
|
|
#define FULL_ETCH_RADIUS 4
|
|
#define SLIGHT_INNER_RADIUS 1
|
|
#define SLIGHT_OUTER_RADIUS 2
|
|
#define SLIGHT_ETCH_RADIUS 3
|
|
#endif
|
|
|
|
#define MAX_RADIUS_INTERNAL 9.0
|
|
#define MAX_RADIUS_EXTERNAL (MAX_RADIUS_INTERNAL+2.0)
|
|
|
|
typedef enum
|
|
{
|
|
RADIUS_SELECTION,
|
|
RADIUS_INTERNAL,
|
|
RADIUS_EXTERNAL,
|
|
RADIUS_ETCH
|
|
} ERadius;
|
|
|
|
#ifdef __cplusplus
|
|
#define IS_MAX_ROUND_WIDGET(A) \
|
|
(WIDGET_STD_BUTTON==A || WIDGET_DEF_BUTTON==A /*|| WIDGET_MENU_BUTTON==A*/)
|
|
#define IS_EXTRA_ROUND_WIDGET(A) \
|
|
(A!=WIDGET_MENU_ITEM && A!=WIDGET_TAB_FRAME && A!=WIDGET_PBAR_TROUGH && A!=WIDGET_PROGRESSBAR && \
|
|
A!=WIDGET_MDI_WINDOW && A!=WIDGET_MDI_WINDOW_TITLE)
|
|
#else
|
|
#define IS_MAX_ROUND_WIDGET(A) \
|
|
(WIDGET_STD_BUTTON==A || WIDGET_DEF_BUTTON==A || WIDGET_TOGGLE_BUTTON==A /*|| WIDGET_MENU_BUTTON==A*/)
|
|
#define IS_EXTRA_ROUND_WIDGET(A) \
|
|
(A!=WIDGET_MENU_ITEM && A!=WIDGET_TAB_FRAME && A!=WIDGET_PBAR_TROUGH && A!=WIDGET_PROGRESSBAR)
|
|
#endif
|
|
|
|
#define CAN_EXTRA_ROUND(MOD) \
|
|
(IS_EXTRA_ROUND_WIDGET(widget) && \
|
|
(IS_SLIDER(widget) || WIDGET_TROUGH==widget || \
|
|
( ( (w>(MIN_ROUND_EXTRA_SIZE(widget)+MOD)) || (WIDGET_NO_ETCH_BTN==widget || WIDGET_MENU_BUTTON==widget) ) &&\
|
|
(h>(MIN_ROUND_EXTRA_SIZE(widget)+MOD)))))
|
|
#define CAN_FULL_ROUND(MOD) (w>(MIN_ROUND_FULL_SIZE+MOD) && h>(MIN_ROUND_FULL_SIZE+MOD))
|
|
|
|
// **NOTE** MUST KEEP IN SYNC WITH getRadius/RADIUS_ETCH !!!
|
|
ERound getWidgetRound(const Options *opts, int w, int h, EWidget widget)
|
|
{
|
|
ERound r=opts->round;
|
|
|
|
if( ((WIDGET_PBAR_TROUGH==widget || WIDGET_PROGRESSBAR==widget) && (opts->square&SQUARE_PROGRESS)) ||
|
|
(WIDGET_ENTRY==widget && (opts->square&SQUARE_ENTRY)) )
|
|
return ROUND_NONE;
|
|
|
|
if((WIDGET_CHECKBOX==widget || WIDGET_FOCUS==widget) && ROUND_NONE!=r)
|
|
r=ROUND_SLIGHT;
|
|
|
|
#if defined __cplusplus && ( (0x039999 >= 0x040000))
|
|
if((WIDGET_MDI_WINDOW_BUTTON==widget && (opts->titlebarButtons&TITLEBAR_BUTTON_ROUND)) ||
|
|
WIDGET_RADIO_BUTTON==widget || WIDGET_DIAL==widget)
|
|
return ROUND_MAX;
|
|
#endif
|
|
#ifndef __cplusplus
|
|
if(WIDGET_RADIO_BUTTON==widget)
|
|
return ROUND_MAX;
|
|
#endif
|
|
|
|
#if !defined __cplusplus || ( (0x039999 >= 0x040000))
|
|
if(WIDGET_SLIDER==widget &&
|
|
(SLIDER_ROUND==opts->sliderStyle || SLIDER_ROUND_ROTATED==opts->sliderStyle || SLIDER_CIRCULAR==opts->sliderStyle))
|
|
return ROUND_MAX;
|
|
#endif
|
|
|
|
switch(r)
|
|
{
|
|
case ROUND_MAX:
|
|
if(IS_SLIDER(widget) || WIDGET_TROUGH==widget ||
|
|
(w>(MIN_ROUND_MAX_WIDTH+2) && h>(MIN_ROUND_MAX_HEIGHT+2) && IS_MAX_ROUND_WIDGET(widget)))
|
|
return ROUND_MAX;
|
|
case ROUND_EXTRA:
|
|
if(CAN_EXTRA_ROUND(2))
|
|
return ROUND_EXTRA;
|
|
case ROUND_FULL:
|
|
if(CAN_FULL_ROUND(2))
|
|
return ROUND_FULL;
|
|
case ROUND_SLIGHT:
|
|
return ROUND_SLIGHT;
|
|
case ROUND_NONE:
|
|
return ROUND_NONE;
|
|
}
|
|
|
|
return ROUND_NONE;
|
|
}
|
|
|
|
static double getRadius(const Options *opts, int w, int h, EWidget widget, ERadius rad)
|
|
{
|
|
ERound r=opts->round;
|
|
|
|
if((WIDGET_CHECKBOX==widget || WIDGET_FOCUS==widget) && ROUND_NONE!=r)
|
|
r=ROUND_SLIGHT;
|
|
|
|
if( ((WIDGET_PBAR_TROUGH==widget || WIDGET_PROGRESSBAR==widget) && (opts->square&SQUARE_PROGRESS)) ||
|
|
(WIDGET_ENTRY==widget && (opts->square&SQUARE_ENTRY)) )
|
|
return 0.0;
|
|
|
|
#if defined __cplusplus && ( (0x039999 >= 0x040000))
|
|
if((WIDGET_MDI_WINDOW_BUTTON==widget && (opts->titlebarButtons&TITLEBAR_BUTTON_ROUND)) ||
|
|
WIDGET_RADIO_BUTTON==widget || WIDGET_DIAL==widget)
|
|
return (w>h ? h : w)/2.0;
|
|
#endif
|
|
#ifndef __cplusplus
|
|
if(WIDGET_RADIO_BUTTON==widget)
|
|
return (w>h ? h : w)/2.0;
|
|
#endif
|
|
|
|
#if !defined __cplusplus || ( (0x039999 >= 0x040000))
|
|
if(WIDGET_SLIDER==widget &&
|
|
(SLIDER_ROUND==opts->sliderStyle || SLIDER_ROUND_ROTATED==opts->sliderStyle || SLIDER_CIRCULAR==opts->sliderStyle))
|
|
return (w>h ? h : w)/2.0;
|
|
#endif
|
|
|
|
if(RADIUS_EXTERNAL==rad && !opts->fillProgress && (WIDGET_PROGRESSBAR==widget
|
|
#ifndef __cplusplus
|
|
|| WIDGET_ENTRY_PROGRESSBAR==widget
|
|
#endif
|
|
))
|
|
rad=RADIUS_INTERNAL;
|
|
|
|
switch(rad)
|
|
{
|
|
case RADIUS_SELECTION:
|
|
switch(r)
|
|
{
|
|
case ROUND_MAX:
|
|
case ROUND_EXTRA:
|
|
if(/* (WIDGET_RUBBER_BAND==widget && w>14 && h>14) || */(w>48 && h>48))
|
|
return 6.0;
|
|
case ROUND_FULL:
|
|
// if( /*(WIDGET_RUBBER_BAND==widget && w>11 && h>11) || */(w>48 && h>48))
|
|
// return 3.0;
|
|
if(w>MIN_ROUND_FULL_SIZE && h>MIN_ROUND_FULL_SIZE)
|
|
return 3.0;
|
|
case ROUND_SLIGHT:
|
|
return 2.0;
|
|
case ROUND_NONE:
|
|
return 0;
|
|
}
|
|
case RADIUS_INTERNAL:
|
|
switch(r)
|
|
{
|
|
case ROUND_MAX:
|
|
if(IS_SLIDER(widget) || WIDGET_TROUGH==widget)
|
|
{
|
|
double r=((w>h ? h : w)-(WIDGET_SLIDER==widget ? 1 : 0))/2.0;
|
|
return r>MAX_RADIUS_INTERNAL ? MAX_RADIUS_INTERNAL : r;
|
|
}
|
|
if(w>(MIN_ROUND_MAX_WIDTH-2) && h>(MIN_ROUND_MAX_HEIGHT-2) && IS_MAX_ROUND_WIDGET(widget))
|
|
{
|
|
double r=((w>h ? h : w)-2.0)/2.0;
|
|
return r>9.5 ? 9.5 : r;
|
|
}
|
|
case ROUND_EXTRA:
|
|
if(CAN_EXTRA_ROUND(-2))
|
|
return EXTRA_INNER_RADIUS;
|
|
case ROUND_FULL:
|
|
if(CAN_FULL_ROUND(-2))
|
|
return FULL_INNER_RADIUS;
|
|
case ROUND_SLIGHT:
|
|
return SLIGHT_INNER_RADIUS;
|
|
case ROUND_NONE:
|
|
return 0;
|
|
}
|
|
case RADIUS_EXTERNAL:
|
|
switch(r)
|
|
{
|
|
case ROUND_MAX:
|
|
if(IS_SLIDER(widget) || WIDGET_TROUGH==widget)
|
|
{
|
|
double r=((w>h ? h : w)-(WIDGET_SLIDER==widget ? 1 : 0))/2.0;
|
|
return r>MAX_RADIUS_EXTERNAL ? MAX_RADIUS_EXTERNAL : r;
|
|
}
|
|
if(w>MIN_ROUND_MAX_WIDTH && h>MIN_ROUND_MAX_HEIGHT && IS_MAX_ROUND_WIDGET(widget))
|
|
{
|
|
double r=((w>h ? h : w)-2.0)/2.0;
|
|
return r>10.5 ? 10.5 : r;
|
|
}
|
|
case ROUND_EXTRA:
|
|
if(CAN_EXTRA_ROUND(0))
|
|
return EXTRA_OUTER_RADIUS;
|
|
case ROUND_FULL:
|
|
if(CAN_FULL_ROUND(0))
|
|
return FULL_OUTER_RADIUS;
|
|
case ROUND_SLIGHT:
|
|
return SLIGHT_OUTER_RADIUS;
|
|
case ROUND_NONE:
|
|
return 0;
|
|
}
|
|
case RADIUS_ETCH:
|
|
// **NOTE** MUST KEEP IN SYNC WITH getWidgetRound !!!
|
|
switch(r)
|
|
{
|
|
case ROUND_MAX:
|
|
if(IS_SLIDER(widget) || WIDGET_TROUGH==widget)
|
|
{
|
|
double r=((w>h ? h : w)-(WIDGET_SLIDER==widget ? 1 : 0))/2.0;
|
|
return r>MAX_RADIUS_EXTERNAL ? MAX_RADIUS_EXTERNAL : r;
|
|
}
|
|
if(w>(MIN_ROUND_MAX_WIDTH+2) && h>(MIN_ROUND_MAX_HEIGHT+2) && IS_MAX_ROUND_WIDGET(widget))
|
|
{
|
|
double r=((w>h ? h : w)-2.0)/2.0;
|
|
return r>11.5 ? 11.5 : r;
|
|
}
|
|
case ROUND_EXTRA:
|
|
if(CAN_FULL_ROUND(2))
|
|
return EXTRA_ETCH_RADIUS;
|
|
case ROUND_FULL:
|
|
if(w>(MIN_ROUND_FULL_SIZE+2) && h>(MIN_ROUND_FULL_SIZE+2))
|
|
return FULL_ETCH_RADIUS;
|
|
case ROUND_SLIGHT:
|
|
return SLIGHT_ETCH_RADIUS;
|
|
case ROUND_NONE:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static double qtcRingAlpha[3]={0.125, 0.125, 0.5};
|
|
|
|
static void calcRingAlphas(const color *bgnd)
|
|
{
|
|
#ifdef __cplusplus
|
|
double r=bgnd->red()/255.0,
|
|
g=bgnd->green()/255.0,
|
|
b=bgnd->blue()/255.0,
|
|
#else
|
|
double r=bgnd->red/65535.0,
|
|
g=bgnd->green/65535.0,
|
|
b=bgnd->blue/65535.0,
|
|
#endif
|
|
h=0,
|
|
s=0,
|
|
v=0;
|
|
rgbToHsv(r, g, b, &h, &s, &v);
|
|
qtcRingAlpha[0]=v*0.26;
|
|
qtcRingAlpha[1]=v*0.14;
|
|
qtcRingAlpha[2]=v*0.55;
|
|
}
|
|
|
|
#define BGND_SHINE_SIZE 300
|
|
#define BGND_SHINE_STEPS 8
|
|
|
|
static double shineAlpha(const color *bgnd)
|
|
{
|
|
#ifdef __cplusplus
|
|
double r=bgnd->red()/255.0,
|
|
g=bgnd->green()/255.0,
|
|
b=bgnd->blue()/255.0,
|
|
#else
|
|
double r=bgnd->red/65535.0,
|
|
g=bgnd->green/65535.0,
|
|
b=bgnd->blue/65535.0,
|
|
#endif
|
|
h=0,
|
|
s=0,
|
|
v=0;
|
|
rgbToHsv(r, g, b, &h, &s, &v);
|
|
return v*0.8;
|
|
}
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif // __COMMON_H__
|