diff --git a/defaults/defaults b/defaults/defaults index cf0dc175b3ba913b560b475c45f7360ba4f70d12..0233e82a64f6b6f4917ce29e2566dfc4d163111f 100644 --- a/defaults/defaults +++ b/defaults/defaults @@ -20,6 +20,10 @@ raise_on_focus=false snap_to_border=true snap_to_windows=false snap_width=10 +shadow_delta_x=0 +shadow_delta_y=0 +shadow_delta_width=0 +shadow_delta_height=0 title_alignment=left title_horizontal_offset=0 title_shadow_active=false diff --git a/src/compositor.c b/src/compositor.c index b5aab1af2f157ba623a184a740cb861fa7f115d1..3b667da06ede2e1720c7ac648dde073f33016943 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -323,18 +323,29 @@ make_shadow (ScreenInfo *screen_info, gdouble opacity, gint width, gint height) XImage *ximage; guchar *data; guchar d; - gint gsize = screen_info->gaussianMap->size; + gint gsize; gint ylimit, xlimit; - gint swidth = width + gsize; - gint sheight = height + gsize; - gint center = gsize / 2; + gint swidth; + gint sheight; + gint center; gint x, y; gint x_diff; - gint opacity_gint = (gint) (opacity * 25); + gint opacity_gint; g_return_val_if_fail (screen_info != NULL, NULL); TRACE ("entering make_shadow"); + gsize = screen_info->gaussianMap->size; + swidth = width + gsize - screen_info->params->shadow_delta_width - screen_info->params->shadow_delta_x; + sheight = height + gsize - screen_info->params->shadow_delta_height - screen_info->params->shadow_delta_y; + center = gsize / 2; + opacity_gint = (gint) (opacity * 25); + + if ((swidth < 1) || (sheight < 1)) + { + return NULL; + } + data = g_malloc (swidth * sheight * sizeof (guchar)); ximage = XCreateImage (myScreenGetXDisplay (screen_info), @@ -466,7 +477,11 @@ shadow_picture (ScreenInfo *screen_info, gdouble opacity, g_return_val_if_fail (render_format != NULL, None); shadowImage = make_shadow (screen_info, opacity, width, height); - g_return_val_if_fail (shadowImage != None, None); + if (shadowImage == NULL) + { + *wp = *hp = 0; + return (None); + } shadowPixmap = XCreatePixmap (myScreenGetXDisplay (screen_info), screen_info->xroot, shadowImage->width, shadowImage->height, 8); @@ -726,8 +741,8 @@ win_extents (CWindow *cw) XRectangle sr; TRACE ("window 0x%lx (%s) has extents", cw->id, c->name); - cw->shadow_dx = SHADOW_OFFSET_X; - cw->shadow_dy = SHADOW_OFFSET_Y; + cw->shadow_dx = SHADOW_OFFSET_X + screen_info->params->shadow_delta_x; + cw->shadow_dy = SHADOW_OFFSET_Y + screen_info->params->shadow_delta_y; if (!cw->shadow) { double opacity = SHADOW_OPACITY; diff --git a/src/settings.c b/src/settings.c index e26ea7153c6a51042b4453ce0066b497e262d0ba..8a14ce06bac838b6e2b6f642a5c8a2323dd0c9a8 100644 --- a/src/settings.c +++ b/src/settings.c @@ -560,6 +560,15 @@ loadTheme (ScreenInfo *screen_info, Settings rc[]) theme = getThemeDir (getValue ("theme", rc), THEMERC); parseRc (THEMERC, theme, rc); + screen_info->params->shadow_delta_x = + abs (TOINT (getValue ("shadow_delta_x", rc))); + screen_info->params->shadow_delta_y = + abs (TOINT (getValue ("shadow_delta_y", rc))); + screen_info->params->shadow_delta_width = + abs (TOINT (getValue ("shadow_delta_width", rc))); + screen_info->params->shadow_delta_height = + abs (TOINT (getValue ("shadow_delta_height", rc))); + for (i = 0; i < 20; i++) { colsym[i].name = rc[i].option; @@ -1013,6 +1022,10 @@ loadSettings (ScreenInfo *screen_info) {"snap_to_border", NULL, TRUE}, {"snap_to_windows", NULL, TRUE}, {"snap_width", NULL, TRUE}, + {"shadow_delta_x", NULL, TRUE}, + {"shadow_delta_y", NULL, TRUE}, + {"shadow_delta_width", NULL, TRUE}, + {"shadow_delta_height", NULL, TRUE}, {"theme", NULL, TRUE}, {"title_alignment", NULL, TRUE}, {"title_font", NULL, FALSE}, @@ -1143,7 +1156,6 @@ loadSettings (ScreenInfo *screen_info) !g_ascii_strcasecmp ("true", getValue ("snap_to_windows", rc)); screen_info->params->snap_width = abs (TOINT (getValue ("snap_width", rc))); - set_settings_margin (screen_info, LEFT, TOINT (getValue ("margin_left", rc))); set_settings_margin (screen_info, RIGHT, TOINT (getValue ("margin_right", rc))); set_settings_margin (screen_info, BOTTOM, TOINT (getValue ("margin_bottom", rc))); diff --git a/src/settings.h b/src/settings.h index 6edcde514a5ad963015b4ee81e208050e2aa584d..bb2926e4e8a30ff3f72e09216e6e8fb2ecb7aa2b 100644 --- a/src/settings.h +++ b/src/settings.h @@ -153,6 +153,10 @@ struct _XfwmParams int double_click_action; int raise_delay; int snap_width; + int shadow_delta_x; + int shadow_delta_y; + int shadow_delta_width; + int shadow_delta_height; int title_alignment; int title_horizontal_offset; int wrap_resistance;