e16/src/mod-trans.c

305 lines
9.5 KiB
C

/*
* Copyright (C) 2004-2007 Jaron Omega
* Copyright (C) 2004-2014 Kim Woelders
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies of the Software, its documentation and marketing & publicity
* materials, and acknowledgment shall be given in the documentation, materials
* and software packages that this Software was used.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "E.h"
#include "dialog.h"
#include "emodule.h"
#include "iclass.h"
#include "settings.h"
#include "timers.h"
#ifdef ENABLE_THEME_TRANSPARENCY
/*
* Theme transparency settings
*/
#if ENABLE_DIALOGS
static Timer *st_timer = NULL;
static int
TransparencyChangeTimeout(void *data)
{
TransparencySet(PTR2INT(data));
st_timer = NULL;
return 0;
}
static void
TransparencyChange(int val)
{
TIMER_DEL(st_timer);
TIMER_ADD(st_timer, 10, TransparencyChangeTimeout, INT2PTR(val));
}
/*
* Configuration dialog
*/
typedef struct {
int theme_transparency;
int st_border;
int st_widget;
int st_dialog;
int st_menu;
int st_tooltip;
int st_hilight;
} TransDlgData;
static void
_DlgApplyThemeTrans(Dialog * d, int val __UNUSED__, void *data __UNUSED__)
{
TransDlgData *dd = DLG_DATA_GET(d, TransDlgData);
Conf.trans.border = dd->st_border;
Conf.trans.widget = dd->st_widget;
Conf.trans.dialog = dd->st_dialog;
Conf.trans.menu = dd->st_menu;
Conf.trans.tooltip = dd->st_tooltip;
Conf.trans.hilight = Conf.trans.menu_item = dd->st_hilight;
Conf.trans.pager = ICLASS_ATTR_BG;
Conf.trans.iconbox = ICLASS_ATTR_BG;
Conf.trans.warplist = ICLASS_ATTR_BG;
#if 0 /* Should not be necessary */
TransparencyChange(dd->theme_transparency);
#endif
autosave();
}
static void
_DlgThemeTransparencyText(DItem * di, TransDlgData * dd)
{
char s[256];
Esnprintf(s, sizeof(s), _("Theme transparency: %2d"),
dd->theme_transparency);
DialogItemSetText(di, s);
}
static void
CB_ThemeTransparency(Dialog * d, int val __UNUSED__, void *data)
{
TransDlgData *dd = DLG_DATA_GET(d, TransDlgData);
DItem *di = (DItem *) data;
_DlgThemeTransparencyText(di, dd);
TransparencyChange(dd->theme_transparency);
}
static void
_DlgFillThemeTrans(Dialog * d, DItem * table, void *data __UNUSED__)
{
TransDlgData *dd = DLG_DATA_GET(d, TransDlgData);
DItem *di, *label;
DItem *radio_border, *radio_widget, *radio_menu,
*radio_dialog, *radio_tooltip, *radio_hilight;
dd->st_border = Conf.trans.border;
dd->st_widget = Conf.trans.widget;
dd->st_dialog = Conf.trans.dialog;
dd->st_menu = Conf.trans.menu;
dd->st_tooltip = Conf.trans.tooltip;
dd->st_hilight = Conf.trans.hilight;
dd->theme_transparency = Conf.trans.alpha;
DialogItemTableSetOptions(table, 7, 0, 0, 0);
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetColSpan(di, 7);
DialogItemSetAlign(di, 0, 512);
DialogItemSetText(di, _("Changes Might Require Restart:"));
di = DialogAddItem(table, DITEM_SEPARATOR);
DialogItemSetColSpan(di, 7);
DialogAddItem(table, DITEM_NONE);
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 512);
DialogItemSetText(di, _("Borders:"));
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 512);
DialogItemSetText(di, _("Menus:"));
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 512);
DialogItemSetText(di, _("Hilights:"));
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 512);
DialogItemSetText(di, _("E Widgets:"));
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 512);
DialogItemSetText(di, _("E Dialogs:"));
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 512);
DialogItemSetText(di, _("Tooltips:"));
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 1024);
DialogItemSetText(di, _("Opaque"));
radio_border = di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_border);
DialogItemRadioButtonGroupSetVal(di, 0);
radio_menu = di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_menu);
DialogItemRadioButtonGroupSetVal(di, 0);
radio_hilight = di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_hilight);
DialogItemRadioButtonGroupSetVal(di, 0);
radio_widget = di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_widget);
DialogItemRadioButtonGroupSetVal(di, 0);
radio_dialog = di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_dialog);
DialogItemRadioButtonGroupSetVal(di, 0);
radio_tooltip = di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_tooltip);
DialogItemRadioButtonGroupSetVal(di, 0);
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 1024);
DialogItemSetText(di, _("Background"));
di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_border);
DialogItemRadioButtonGroupSetVal(di, 1);
DialogItemRadioButtonGroupSetValPtr(radio_border, &dd->st_border);
di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_menu);
DialogItemRadioButtonGroupSetVal(di, 1);
DialogItemRadioButtonGroupSetValPtr(radio_menu, &dd->st_menu);
di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_hilight);
DialogItemRadioButtonGroupSetVal(di, 1);
DialogItemRadioButtonGroupSetValPtr(radio_hilight, &dd->st_hilight);
di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_widget);
DialogItemRadioButtonGroupSetVal(di, 1);
DialogItemRadioButtonGroupSetValPtr(radio_widget, &dd->st_widget);
di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_dialog);
DialogItemRadioButtonGroupSetVal(di, 1);
DialogItemRadioButtonGroupSetValPtr(radio_dialog, &dd->st_dialog);
di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_tooltip);
DialogItemRadioButtonGroupSetVal(di, 1);
di = DialogAddItem(table, DITEM_TEXT);
DialogItemSetAlign(di, 0, 1024);
DialogItemSetText(di, _("Glass"));
di = DialogAddItem(table, DITEM_NONE);
DialogItemSetColSpan(di, 5);
di = DialogAddItem(table, DITEM_RADIOBUTTON);
DialogItemRadioButtonSetFirst(di, radio_tooltip);
DialogItemRadioButtonGroupSetVal(di, 2);
DialogItemRadioButtonGroupSetValPtr(radio_tooltip, &dd->st_tooltip);
di = DialogAddItem(table, DITEM_SEPARATOR);
DialogItemSetColSpan(di, 7);
di = label = DialogAddItem(table, DITEM_TEXT);
DialogItemSetColSpan(di, 7);
DialogItemSetAlign(di, 512, 512);
_DlgThemeTransparencyText(di, dd);
di = DialogAddItem(table, DITEM_SLIDER);
DialogItemSetColSpan(di, 7);
DialogItemSliderSetMinLength(di, 10);
DialogItemSliderSetBounds(di, 0, 255);
DialogItemSliderSetUnits(di, 4);
DialogItemSliderSetJump(di, 16);
DialogItemSliderSetValPtr(di, &dd->theme_transparency);
DialogItemSetCallback(di, CB_ThemeTransparency, 0, (void *)label);
}
const DialogDef DlgThemeTrans = {
"CONFIGURE_TRANS",
N_("Transparency"), N_("Selective Transparency Settings"),
sizeof(TransDlgData),
SOUND_SETTINGS_TRANS,
"pix/tips.png",
N_("Enlightenment Selective Transparency\n" "Settings Dialog"),
_DlgFillThemeTrans,
DLG_OAC, _DlgApplyThemeTrans, NULL
};
#endif /* ENABLE_DIALOGS */
static void
TransparencySighan(int sig, void *prm __UNUSED__)
{
switch (sig)
{
case ESIGNAL_CONFIGURE:
TransparencySet(Conf.trans.alpha);
break;
}
}
static const CfgItem TransCfgItems[] = {
CFG_ITEM_INT(Conf.trans, alpha, 0),
CFG_ITEM_INT(Conf.trans, menu, ICLASS_ATTR_BG),
CFG_ITEM_INT(Conf.trans, menu_item, ICLASS_ATTR_BG),
CFG_ITEM_INT(Conf.trans, tooltip, ICLASS_ATTR_GLASS),
CFG_ITEM_INT(Conf.trans, widget, ICLASS_ATTR_BG),
CFG_ITEM_INT(Conf.trans, hilight, ICLASS_ATTR_OPAQUE),
CFG_ITEM_INT(Conf.trans, border, ICLASS_ATTR_BG),
CFG_ITEM_INT(Conf.trans, iconbox, ICLASS_ATTR_BG),
CFG_ITEM_INT(Conf.trans, dialog, ICLASS_ATTR_BG),
CFG_ITEM_INT(Conf.trans, pager, ICLASS_ATTR_BG),
CFG_ITEM_INT(Conf.trans, warplist, ICLASS_ATTR_BG),
};
#define N_CFG_ITEMS (sizeof(TransCfgItems)/sizeof(CfgItem))
/*
* Module descriptor
*/
extern const EModule ModTransparency;
const EModule ModTransparency = {
"transparency", "tr",
TransparencySighan,
{0, NULL},
{N_CFG_ITEMS, TransCfgItems}
};
#endif /* ENABLE_THEME_TRANSPARENCY */