From c851a7b1e8c817853210be85beb34c8679a004d1 Mon Sep 17 00:00:00 2001
> From: Matt Vollrath <m...@endpoint.com>
> Date: Fri, 2 Nov 2012 17:55:12 +0000
> Subject: [PATCH xwd] Translate window by -geometry
>
> This is intended to allow dumps of arbitrary sections of the root
> window.
>
> Signed-off-by: Matt Vollrath <m...@endpoint.com>
> ---
>  xwd.c |   25 +++++++++++++++++++++----
>  1 file changed, 21 insertions(+), 4 deletions(-)
>
> diff --git a/xwd.c b/xwd.c
> index 5b40121..05b8a7b 100644
> --- a/xwd.c
> +++ b/xwd.c
> @@ -98,11 +98,12 @@ static Bool standard_out = True;
>  static Bool debug = False;
>  static Bool silent = False;
>  static Bool use_installed = False;
> +static char *geom = NULL;

This is only used in main(), so it would be nice if it were declared there instead of globally.

>  static long add_pixel_value = 0;
>
>
>  extern int main(int, char **);
> -extern void Window_Dump(Window, FILE *);
> +extern void Window_Dump(Window, FILE *, char *);
>  extern int Image_Size(XImage *);
>  extern int Get_XColors(XWindowAttributes *, XColor **);
>  extern void _swapshort(register char *, register unsigned);
> @@ -196,6 +197,11 @@ main(int argc, char **argv)
>        silent = True;
>        continue;
>    }
> +        if (!strcmp(argv[i], "-geometry")) {
> +             if (++i >= argc) usage();
> +             geom = argv[i];
> +             continue;
> +        }

This add space-indented lines right next to tab-indented ones. I don't *think* my mailer munched this particular whitespace.

>    usage();
>      }
>  #ifdef WIN32
> @@ -212,7 +218,7 @@ main(int argc, char **argv)
>      /*
>       * Dump it!
>       */
> -    Window_Dump(target_win, out_file);
> +    Window_Dump(target_win, out_file, geom);
>
>      XCloseDisplay(dpy);
>      if (fclose(out_file)) {
> @@ -246,7 +252,7 @@ Get24bitDirectColors(XColor **colors)
>   */
>
>  void
> -Window_Dump(Window window, FILE *out)
> +Window_Dump(Window window, FILE *out, char *geometry)
>  {
>      unsigned long swaptest = 1;
>      XColor *colors;
> @@ -260,6 +266,8 @@ Window_Dump(Window window, FILE *out)
>      XImage *image;
>      int absx, absy, x, y;
>      unsigned width, height;
> +    int gbits, gx, gy;
> +    unsigned gwidth, gheight;
>      int dwidth, dheight;
>      Window dummywin;
>      XWDFileHeader header;
> @@ -309,6 +317,15 @@ Window_Dump(Window window, FILE *out)
>      width = win_info.width;
>      height = win_info.height;
>
> +    /* translate geometry if provided */
> +    if (geometry) {
> +        gbits = XParseGeometry( geometry, &gx, &gy, &gwidth, &gheight );

gbits isn't needed outside this block, so please declare it here.

> +        if (gbits & XValue) absx += gx;
> +        if (gbits & YValue) absy += gy;
> +        if (gbits & WidthValue) width = gwidth;
> +        if (gbits & HeightValue) height = gheight;
> +    }
> +
>      if (!nobdrs) {
>    absx -= win_info.border_width;
>    absy -= win_info.border_width;

The interaction between -geometry and !nobdrs seems wrong. This code will adjust for the border after the code you added selects a rectangle within the window, padding your sub-rectangle by the border size even if it's nowhere near the border.

-- Aaron

> @@ -522,7 +539,7 @@ usage(void)
>      fprintf (stderr,
> "usage: %s [-display host:dpy] [-debug] [-help] %s [-nobdrs] [-out <file>]",
>       program_name, "[{-root|-id <id>|-name <name>}]");
> -    fprintf (stderr, " [-xy] [-add value] [-frame]\n");
> + fprintf (stderr, " [-xy] [-add value] [-frame] [-geometry <geom>]\n");
>      exit(1);
>  }
>
> --
> 1.7.9.5
>
_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to