Added global theme transparency feature (not finished).

SVN revision: 8943
This commit is contained in:
Kim Woelders 2004-02-12 01:17:21 +00:00
parent edae8584f6
commit a98043fe46
6 changed files with 132 additions and 48 deletions

10
src/E.h
View File

@ -53,6 +53,9 @@
#define IC_RenderDepth() DefaultDepth(disp, root.scr)
#define ENABLE_TRANSPARENCY 1
#define ENABLE_THEME_TRANSPARENCY 1
#else
#include <Imlib.h>
@ -1206,6 +1209,11 @@ typedef struct
int screen_snap_dist;
} snap;
struct
{
char *name;
int transparency;
} theme;
struct
{
char enable;
char showroottooltip;
@ -1244,7 +1252,6 @@ typedef struct
int edge_flip_resistance;
GroupConfig group_config;
char group_swapmove;
int theme_transparency;
/* Not used */
char primaryicondir;
@ -2216,6 +2223,7 @@ void ICCCM_SetMainEInfo(void);
void ICCCM_GetMainEInfo(void);
/* iclass.c */
void TransparencySet(int transparency);
ImageClass *CreateIclass(void);
void FreeImageClass(ImageClass * i);
ImageState *CreateImageState(void);

View File

@ -811,7 +811,7 @@ Config_Control(FILE * ConfigFile)
conf.backgrounds.user = i2;
break;
case CONTROL_THEME_TRANSPARENCY:
conf.theme_transparency = i2;
conf.theme.transparency = i2;
break;
case CONTROL_DOCKSTARTPOS:
sscanf(s, "%*s %d %d ", &conf.dock.startx, &conf.dock.starty);
@ -2404,7 +2404,7 @@ Config_ImageClass(FILE * ConfigFile)
ICToRead->pixmapfillstyle = atoi(s2);
break;
case ICLASS_TRANSPARENT:
ICToRead->transparent = atoi(s2);
ICToRead->transparent = strtoul(s2, NULL, 0);
break;
case CONFIG_INHERIT:
{
@ -3919,7 +3919,7 @@ SaveUserControlConfig(FILE * autosavefile)
fprintf(autosavefile, "1368 %i\n", (int)conf.tooltips.showroottooltip);
fprintf(autosavefile, "1369 %i %i %i\n", (int)conf.pagers.sel_button,
(int)conf.pagers.win_button, (int)conf.pagers.menu_button);
fprintf(autosavefile, "1373 %i\n", (int)conf.theme_transparency);
fprintf(autosavefile, "1373 %i\n", (int)conf.theme.transparency);
#ifdef HAS_XINERAMA
fprintf(autosavefile, "2013 %i\n", (int)conf.extra_head);
#endif

View File

@ -644,7 +644,7 @@ SetBackgroundTo(Window win, Background * dsk, char setbg)
/* Put image 1:1 onto the current root window */
dpmap = pmap;
}
else if (hasbg && !hasfg && dsk->bg_tile && !conf.theme_transparency)
else if (hasbg && !hasfg && dsk->bg_tile && !conf.theme.transparency)
{
/* BG only, tiled */
dpmap = ECreatePixmap(disp, win, w, h, depth);

View File

@ -22,7 +22,57 @@
*/
#include "E.h"
#define ENABLE_TRANSPARENCY USE_IMLIB2
#ifdef ENABLE_THEME_TRANSPARENCY
static Imlib_Color_Modifier *icm = NULL;
static DATA8 gray[256];
static DATA8 alpha[256];
static void
TransparencyMakeColorModifier(void)
{
int i;
for (i = 0; i < 256; i++)
{
gray[i] = i;
alpha[i] = 255 - conf.theme.transparency;
}
if (icm == NULL)
icm = imlib_create_color_modifier();
imlib_context_set_color_modifier(icm);
#if 0
imlib_modify_color_modifier_gamma(0.5);
imlib_modify_color_modifier_brightness(0.5);
imlib_modify_color_modifier_contrast(0.5);
#endif
imlib_set_color_modifier_tables(gray, gray, gray, alpha);
imlib_context_set_color_modifier(NULL);
}
void
TransparencySet(int transparency)
{
if (transparency < 0)
transparency = 0;
else if (transparency > 255)
transparency = 255;
conf.theme.transparency = transparency;
/* Generate the color modifier tables */
TransparencyMakeColorModifier();
}
#else
void
TransparencySet(int transparency)
{
}
#endif /* ENABLE_THEME_TRANSPARENCY */
ImageClass *
CreateIclass()
@ -540,7 +590,7 @@ ImageStateMakePmapMask(ImageState * is, Drawable win, PmapMask * pmm,
PmapMask pmml;
Pixmap mask = 0;
#if ENABLE_TRANSPARENCY
#ifdef ENABLE_TRANSPARENCY
Pixmap pmap = 0;
Imlib_Image *ii = NULL;
@ -568,9 +618,10 @@ ImageStateMakePmapMask(ImageState * is, Drawable win, PmapMask * pmm,
pmm->type = 1;
pmm->pmap = pmm->mask = 0;
#if ENABLE_TRANSPARENCY
if (is->transparent && is->pixmapfillstyle == FILL_STRETCH &&
imlib_image_has_alpha())
#ifdef ENABLE_TRANSPARENCY
if (conf.theme.transparency ||
(is->transparent && is->pixmapfillstyle == FILL_STRETCH &&
imlib_image_has_alpha()))
{
Window cr;
Pixmap bg;
@ -591,20 +642,29 @@ ImageStateMakePmapMask(ImageState * is, Drawable win, PmapMask * pmm,
if (is->pixmapfillstyle == FILL_STRETCH)
{
#if ENABLE_TRANSPARENCY
#ifdef ENABLE_TRANSPARENCY
if (ii)
{
imlib_context_set_blend(1);
#ifdef ENABLE_THEME_TRANSPARENCY
imlib_context_set_color_modifier(icm);
#endif
imlib_context_set_operation(IMLIB_OP_COPY);
imlib_blend_image_onto_image(is->im, 0, 0, 0, ww, hh, 0, 0, w, h);
imlib_context_set_blend(0);
#ifdef ENABLE_THEME_TRANSPARENCY
imlib_context_set_color_modifier(NULL);
#if 0
imlib_free_color_modifier();
#endif
#endif
}
#endif
pmm->type = 1;
imlib_render_pixmaps_for_whole_image_at_size(&pmm->pmap, &pmm->mask,
w, h);
mask = pmm->mask;
#if ENABLE_TRANSPARENCY
#ifdef ENABLE_TRANSPARENCY
if (ii && make_mask && (is->transparent & 0x04) == 0)
{
/* Make the scaled clip mask to be used (is this really the way?) */
@ -713,7 +773,7 @@ ImageStateMakePmapMask(ImageState * is, Drawable win, PmapMask * pmm,
}
}
#if ENABLE_TRANSPARENCY
#ifdef ENABLE_TRANSPARENCY
if (pmap)
imlib_free_pixmap_and_mask(pmap);
if (ii)

View File

@ -250,6 +250,7 @@ main(int argc, char **argv)
/* now we're going to load the configuration/theme */
LoadEConfig(themepath);
SetAreaSize(conf.areas.nx, conf.areas.ny);
TransparencySet(conf.theme.transparency);
desks.desk[0].viewable = 1;
RefreshDesktop(0);

View File

@ -30,7 +30,6 @@ typedef struct _remwinlist
}
RememberWinList;
static void CB_SettingsEscape(int val, void *data);
static void
CB_SettingsEscape(int val, void *data)
{
@ -52,7 +51,6 @@ static int tmp_pager_menu_button;
static DItem *pager_scan_speed_label = NULL;
static Dialog *pager_settings_dialog = NULL;
static void CB_ConfigurePager(int val, void *data);
static void
CB_ConfigurePager(int val, void *data)
{
@ -86,7 +84,6 @@ CB_ConfigurePager(int val, void *data)
data = NULL;
}
static void CB_PagerScanSlide(int val, void *data);
static void
CB_PagerScanSlide(int val, void *data)
{
@ -361,7 +358,6 @@ static char tmp_warpfocused;
#endif
static char tmp_clickalways;
static void CB_ConfigureFocus(int val, void *data);
static void
CB_ConfigureFocus(int val, void *data)
{
@ -632,7 +628,6 @@ int je_prevx, je_prevy;
int je_prevmode = -1;
*/
static void CB_ConfigureMoveResize(int val, void *data);
static void
CB_ConfigureMoveResize(int val, void *data)
{
@ -1022,7 +1017,6 @@ static DItem *tmp_desk_text;
static Dialog *tmp_desk_dialog;
static char tmp_desktop_wraparound;
static void CB_ConfigureDesktops(int val, void *data);
static void
CB_ConfigureDesktops(int val, void *data)
{
@ -1035,7 +1029,6 @@ CB_ConfigureDesktops(int val, void *data)
data = NULL;
}
static void CB_DesktopDisplayRedraw(int val, void *data);
static void
CB_DesktopDisplayRedraw(int val, void *data)
{
@ -1224,7 +1217,6 @@ static DItem *tmp_area_text;
static Dialog *tmp_area_dialog;
static char tmp_area_wraparound;
static void CB_ConfigureAreas(int val, void *data);
static void
CB_ConfigureAreas(int val, void *data)
{
@ -1246,7 +1238,6 @@ CB_ConfigureAreas(int val, void *data)
data = NULL;
}
static void CB_AreaDisplayRedraw(int val, void *data);
static void
CB_AreaDisplayRedraw(int val, void *data)
{
@ -1461,7 +1452,6 @@ static char tmp_manual_placement_mouse_pointer;
static char tmp_extra_head;
#endif
static void CB_ConfigurePlacement(int val, void *data);
static void
CB_ConfigurePlacement(int val, void *data)
{
@ -1603,7 +1593,6 @@ SettingsIcons(void)
static char tmp_autoraise;
static int tmp_autoraisetime;
static void CB_ConfigureAutoraise(int val, void *data);
static void
CB_ConfigureAutoraise(int val, void *data)
{
@ -1702,7 +1691,6 @@ static char tmp_tooltips;
static int tmp_tooltiptime;
static char tmp_roottip;
static void CB_ConfigureTooltips(int val, void *data);
static void
CB_ConfigureTooltips(int val, void *data)
{
@ -1807,7 +1795,6 @@ SettingsTooltips(void)
}
static char tmp_dialog_headers;
static void CB_ConfigureMiscellaneous(int val, void *data);
static void
CB_ConfigureMiscellaneous(int val, void *data)
{
@ -1888,7 +1875,6 @@ SettingsMiscellaneous(void)
static char tmp_audio;
static void CB_ConfigureAudio(int val, void *data);
static void
CB_ConfigureAudio(int val, void *data)
{
@ -1996,7 +1982,6 @@ static char tmp_effect_raindrops;
static char tmp_effect_ripples;
static char tmp_effect_waves;
static void CB_ConfigureFX(int val, void *data);
static void
CB_ConfigureFX(int val, void *data)
{
@ -2455,10 +2440,10 @@ static int tmp_bg_yperc;
static char tmp_hiq;
static char tmp_userbg;
static int tmp_bg_timeout;
static int tmp_theme_transparency;
static void BG_RedrawView(char nuke_old);
static void CB_ConfigureBG(int val, void *data);
static void
CB_ConfigureBG(int val, void *data)
{
@ -2469,6 +2454,9 @@ CB_ConfigureBG(int val, void *data)
conf.backgrounds.timeout = tmp_bg_timeout;
conf.backgrounds.hiquality = tmp_hiq;
conf.backgrounds.user = tmp_userbg;
#ifdef ENABLE_THEME_TRANSPARENCY
TransparencySet(tmp_theme_transparency);
#endif
ESetColor(&(tmp_bg->bg_solid), tmp_bg_r, tmp_bg_g, tmp_bg_b);
tmp_bg->bg_tile = tmp_bg_tile;
tmp_bg->bg.keep_aspect = tmp_bg_keep_aspect;
@ -2534,7 +2522,6 @@ CB_ConfigureBG(int val, void *data)
data = NULL;
}
static void CB_DesktopMiniDisplayRedraw(int val, void *data);
static void
CB_DesktopMiniDisplayRedraw(int val, void *data)
{
@ -2657,7 +2644,6 @@ BG_DoDialog(void)
CB_DesktopMiniDisplayRedraw(0, bg_mini_disp);
}
static void CB_ConfigureNewBG(int val, void *data);
static void
CB_ConfigureNewBG(int val, void *data)
{
@ -2691,7 +2677,6 @@ CB_ConfigureNewBG(int val, void *data)
data = NULL;
}
static void CB_ConfigureRemBG(int val, void *data);
static void
CB_ConfigureRemBG(int val, void *data)
{
@ -2742,7 +2727,6 @@ CB_ConfigureRemBG(int val, void *data)
data = NULL;
}
static void CB_ConfigureDelBG(int val, void *data);
static void
CB_ConfigureDelBG(int val, void *data)
{
@ -2817,7 +2801,6 @@ CB_ConfigureDelBG(int val, void *data)
data = NULL;
}
static void CB_ConfigureFrontBG(int val, void *data);
static void
CB_ConfigureFrontBG(int val, void *data)
{
@ -2954,7 +2937,6 @@ BG_RedrawView(char nuke_old)
XClearWindow(disp, win);
}
static void CB_BGAreaSlide(int val, void *data);
static void
CB_BGAreaSlide(int val, void *data)
{
@ -2963,7 +2945,6 @@ CB_BGAreaSlide(int val, void *data)
data = NULL;
}
static void CB_BGScan(int val, void *data);
static void
CB_BGScan(int val, void *data)
{
@ -2983,7 +2964,6 @@ CB_BGScan(int val, void *data)
data = NULL;
}
static void CB_BGAreaEvent(int val, void *data);
static void
CB_BGAreaEvent(int val, void *data)
{
@ -3030,7 +3010,6 @@ CB_BGAreaEvent(int val, void *data)
val = 0;
}
static void CB_DesktopTimeout(int val, void *data);
static void
CB_DesktopTimeout(int val, void *data)
{
@ -3086,7 +3065,6 @@ BGSettingsGoTo(Background * bg)
}
}
static void CB_BGPrev(int val, void *data);
static void
CB_BGPrev(int val, void *data)
{
@ -3115,7 +3093,6 @@ CB_BGPrev(int val, void *data)
data = NULL;
}
static void CB_BGNext(int val, void *data);
static void
CB_BGNext(int val, void *data)
{
@ -3144,7 +3121,6 @@ CB_BGNext(int val, void *data)
data = NULL;
}
static int BG_SortFileCompare(Background * bg1, Background * bg2);
static int
BG_SortFileCompare(Background * bg1, Background * bg2)
{
@ -3158,7 +3134,6 @@ BG_SortFileCompare(Background * bg1, Background * bg2)
return 0;
}
static void CB_BGSortFile(int val, void *data);
static void
CB_BGSortFile(int val, void *data)
{
@ -3189,7 +3164,6 @@ CB_BGSortFile(int val, void *data)
data = NULL;
}
static void CB_BGSortAttrib(int val, void *data);
static void
CB_BGSortAttrib(int val, void *data)
{
@ -3234,7 +3208,6 @@ CB_BGSortAttrib(int val, void *data)
data = NULL;
}
static void CB_BGSortContent(int val, void *data);
static void
CB_BGSortContent(int val, void *data)
{
@ -3262,6 +3235,21 @@ CB_BGSortContent(int val, void *data)
data = NULL;
}
#ifdef ENABLE_THEME_TRANSPARENCY
static void
CB_ThemeTransparency(int val, void *data)
{
DItem *di;
char s[256];
di = (DItem *) data;
Esnprintf(s, sizeof(s), _("Theme transparency: %2d"),
tmp_theme_transparency);
DialogItemTextSetText(di, s);
DialogDrawItems(bg_sel_dialog, di, 0, 0, 99999, 99999);
}
#endif
void
SettingsBackground(Background * bg)
{
@ -3308,6 +3296,7 @@ SettingsBackground(Background * bg)
tmp_hiq = conf.backgrounds.hiquality;
tmp_userbg = conf.backgrounds.user;
tmp_bg_timeout = conf.backgrounds.timeout;
tmp_theme_transparency = conf.theme.transparency;
d = bg_sel_dialog = DialogCreate("CONFIGURE_BG");
DialogSetTitle(d, _("Desktop Background Settings"));
@ -3678,6 +3667,36 @@ SettingsBackground(Background * bg)
DialogSetExitFunction(d, CB_ConfigureBG, 2, d);
DialogBindKey(d, "Escape", CB_SettingsEscape, 0, d);
DialogBindKey(d, "Return", CB_ConfigureBG, 0, d);
#ifdef ENABLE_THEME_TRANSPARENCY
di = DialogAddItem(table, DITEM_SEPARATOR);
DialogItemSetColSpan(di, 3);
DialogItemSetPadding(di, 2, 2, 2, 2);
DialogItemSetFill(di, 1, 0);
DialogItemSeparatorSetOrientation(di, 0);
di = label = DialogAddItem(table, DITEM_TEXT);
DialogItemSetColSpan(di, 3);
DialogItemSetPadding(di, 2, 2, 2, 2);
DialogItemSetFill(di, 1, 0);
DialogItemSetAlign(di, 512, 512);
Esnprintf(s, sizeof(s), _("Theme transparency: %2d"),
tmp_theme_transparency);
DialogItemTextSetText(di, s);
di = DialogAddItem(table, DITEM_SLIDER);
DialogItemSetColSpan(di, 3);
DialogItemSliderSetMinLength(di, 10);
DialogItemSetPadding(di, 2, 2, 2, 2);
DialogItemSetFill(di, 1, 0);
DialogItemSliderSetBounds(di, 0, 255);
DialogItemSliderSetUnits(di, 1);
DialogItemSliderSetJump(di, 16);
DialogItemSliderSetVal(di, tmp_theme_transparency);
DialogItemSliderSetValPtr(di, &tmp_theme_transparency);
DialogItemSetCallback(di, CB_ThemeTransparency, 0, (void *)label);
#endif /* ENABLE_THEME_TRANSPARENCY */
ShowDialog(d);
CB_DesktopMiniDisplayRedraw(1, area);
@ -3707,7 +3726,6 @@ static char tmp_ib_cover_hide;
static int tmp_ib_autoresize_anchor;
static char tmp_ib_animate;
static void CB_ConfigureIconbox(int val, void *data);
static void
CB_ConfigureIconbox(int val, void *data)
{
@ -4053,7 +4071,6 @@ static DItem *di_stick;
static DItem *di_shade;
static DItem *di_mirror;
static void CB_ConfigureGroupEscape(int val, void *data);
static void
CB_ConfigureGroupEscape(int val, void *data)
{
@ -4067,7 +4084,6 @@ CB_ConfigureGroupEscape(int val, void *data)
val = 0;
}
static void CB_ConfigureGroup(int val, void *data);
static void
CB_ConfigureGroup(int val, void *data)
{
@ -4347,7 +4363,6 @@ SettingsGroups(EWin * ewin)
static GroupConfig tmp_group_cfg;
static char tmp_group_swap;
static void CB_ConfigureDefaultGroupSettings(int val, void *data);
static void
CB_ConfigureDefaultGroupSettings(int val, void *data)
{