--- rxvt-unicode/src/background.C 2011/05/30 18:39:02 1.155 +++ rxvt-unicode/src/background.C 2011/08/11 12:27:26 1.162 @@ -48,16 +48,6 @@ * the image in the window. * * Pixmap Operations : (should be prepended by a colon) - * tile Tile image. Scaling/position modifiers above will affect - * the tile size and origin. - * propscale When scaling, scale proportionally. That is, maintain the - * proper aspect ratio for the image. Any portion of the - * background not covered by the image is filled with the - * current background color. - * hscale Scale horizontally, tile vertically ? - * vscale Tile horizontally, scale vertically ? - * scale Scale both up and down - * auto Same as 100x100+50+50 */ #ifdef HAVE_BG_PIXMAP @@ -260,8 +250,49 @@ for (int i = 0; arr[i]; i++) { - if (!strcasecmp (arr[i], "tile")) + if (!strcasecmp (arr[i], "style=tiled")) { + new_flags = BG_TILE; + w = h = noScale; + x = y = 0; + geom_flags = WidthValue|HeightValue|XValue|YValue; + } + else if (!strcasecmp (arr[i], "style=aspect-stretched")) + { + new_flags = BG_PROP_SCALE; + x = y = centerAlign; + geom_flags = XValue|YValue; + } + else if (!strcasecmp (arr[i], "style=stretched")) + { + new_flags = 0; + w = h = windowScale; + geom_flags = WidthValue|HeightValue; + } + else if (!strcasecmp (arr[i], "style=centered")) + { + new_flags = 0; + w = h = noScale; + x = y = centerAlign; + geom_flags = WidthValue|HeightValue|XValue|YValue; + } + else if (!strcasecmp (arr[i], "style=root-tiled")) + { + new_flags = BG_TILE|BG_ROOT_ALIGN; + w = h = noScale; + geom_flags = WidthValue|HeightValue; + } + else if (!strcasecmp (arr[i], "op=tile")) + new_flags |= BG_TILE; + else if (!strcasecmp (arr[i], "op=pscale")) + new_flags |= BG_PROP_SCALE; + else if (!strcasecmp (arr[i], "op=root")) + new_flags |= BG_ROOT_ALIGN; + + // deprecated + else if (!strcasecmp (arr[i], "tile")) + { + new_flags |= BG_TILE; w = h = noScale; geom_flags |= WidthValue|HeightValue; } @@ -271,23 +302,21 @@ } else if (!strcasecmp (arr[i], "hscale")) { - if (w == 0) w = windowScale; - + new_flags |= BG_TILE; + w = windowScale; h = noScale; geom_flags |= WidthValue|HeightValue; } else if (!strcasecmp (arr[i], "vscale")) { - if (h == 0) h = windowScale; - + new_flags |= BG_TILE; + h = windowScale; w = noScale; geom_flags |= WidthValue|HeightValue; } else if (!strcasecmp (arr[i], "scale")) { - if (h == 0) h = windowScale; - if (w == 0) w = windowScale; - + w = h = windowScale; geom_flags |= WidthValue|HeightValue; } else if (!strcasecmp (arr[i], "auto")) @@ -298,7 +327,7 @@ } else if (!strcasecmp (arr[i], "root")) { - new_flags |= BG_ROOT_ALIGN; + new_flags |= BG_TILE|BG_ROOT_ALIGN; w = h = noScale; geom_flags |= WidthValue|HeightValue; } @@ -355,7 +384,8 @@ } bg_flags &= ~BG_IS_SIZE_SENSITIVE; - if ((bg_flags & BG_PROP_SCALE) || h_scale || v_scale + if (!(bg_flags & BG_TILE) + || (bg_flags & BG_PROP_SCALE) || h_scale || v_scale || (!(bg_flags & BG_ROOT_ALIGN) && (h_align || v_align)) || w > target_width || h > target_height) bg_flags |= BG_IS_SIZE_SENSITIVE; @@ -457,7 +487,7 @@ if (background == NULL) { - if (h_scale == 0 || v_scale == 0) + if (bg_flags & BG_TILE) { /* if tiling - pixmap has to be sized exactly as the image, but there is no need to make it bigger than the window! */ @@ -492,7 +522,7 @@ layers[0].tint = background_tint; layers[1].im = result; - if (h_scale == 0 || v_scale == 0) + if (bg_flags & BG_TILE) { /* tile horizontally */ while (x > 0) x -= (int)result->width; @@ -506,7 +536,7 @@ layers[1].clip_width = result->width; } - if (h_scale == 0 || v_scale == 0) + if (bg_flags & BG_TILE) { while (y > 0) y -= (int)result->height; layers[1].dst_y = y; @@ -566,7 +596,7 @@ int dst_width = result->width, dst_height = result->height; if (background == NULL) { - if (!(h_scale == 0 || v_scale == 0)) + if (!(bg_flags & BG_TILE)) { src_x = make_clip_rectangle (x, result->width , new_pmap_width , dst_x, dst_width ); src_y = make_clip_rectangle (y, result->height, new_pmap_height, dst_y, dst_height); @@ -744,7 +774,7 @@ } else { - if (h_scale == 0 || v_scale == 0) + if (bg_flags & BG_TILE) { new_pmap_width = min (image_width, target_width); new_pmap_height = min (image_height, target_height); @@ -767,7 +797,7 @@ if (gc) { - if (h_scale == 0 || v_scale == 0) + if (bg_flags & BG_TILE) { Pixmap tile = XCreatePixmap (dpy, vt, image_width, image_height, depth); pixbuf_to_pixmap (result, tile, gc,