Hello,

  ImageMagick bug report
  Platform: Linux, X11
  Version: 6.0.7.1

We found that sometimes the "import" utility does not correctly handle
a hierarchy of subwindows under X11.  First we have seen this with
windows using the OpenMotif NotePage widget.  But it is easy to
reproduce with just a small window hierarchy.  A small test program to
show the problem is attached.  Please compile and run with

% cc -o wintree wintree.c -lX11
% ./wintree
Main Window = 0xc400001

A white window appears, and the main window's id is printed.  Now run
the import utility as follows:

% import -frame -window <window-id> /tmp/wrong.png

With "display", you will see that import did include some garbage in
the generated PNG file.

% display /tmp/wrong.png

The reason for this is that the XGetWindowImage() function in
magick/xwindow.c does not correctly compute the bounds or crop
rectangles when descending the window hierarchy.

A patch would be appreciated.
Kind regards,
-- 
Andreas Luik

Barco Orthogon GmbH
Vaihinger Str. 169, D-70567 Stuttgart
Managing Directors / Geschaeftsfuehrer: Frank Timmermans, Klaus Kaltwasser
Place of Registration / Sitz: Bremen HRB 23374
Tel. +49-711-78 19 60-744 Fax +49-711-78 19 60-711
http://www.barco-orthogon.com
[EMAIL PROTECTED]
-----------------------------
This e-mail and any further files transmitted with it are
confidential.  If you are not the intended recipient, please
notify [EMAIL PROTECTED] and delete the files.
Full disclaimer: http://www.barco-orthogon.com/html/e-mail_disclaimer.htm
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>

static struct {
    int x;
    int y;
    unsigned int width;
    unsigned int height;
    unsigned int bw;
} winlist[] = {
    {  100,  100, 550, 528, 0 },
    {    0,   28, 550, 500, 0 },
    {   10,   10, 540, 340, 0 },
    { -540, -340, 540, 340, 0 },
    {    0,  190, 538, 114, 0 },
};

int main()
{
    int i;
    Display *dpy;
    Window parent;
    Window mainw;
    Window w;

    if ((dpy = XOpenDisplay(0)) == NULL) {
        fprintf(stderr, "failed to open display\n");
        exit(1);
    }

    parent = DefaultRootWindow(dpy);
    for (i = 0; i < sizeof(winlist) / sizeof(winlist[0]); i++) {
        w = XCreateSimpleWindow(dpy, parent,
                                winlist[i].x, winlist[i].y,
                                winlist[i].width, winlist[i].height,
                                winlist[i].bw,
                                BlackPixel(dpy, DefaultScreen(dpy)),
                                WhitePixel(dpy, DefaultScreen(dpy)));
        parent = w;
        if (i == 0) {
            mainw = w;
            XSelectInput(dpy, mainw, ButtonPressMask);
        }
        XMapWindow(dpy, w);
    }

    printf("Main Window = %#lx\n", mainw);

    while (1) {
        XEvent event;
        
        XNextEvent(dpy, &event);
        
        switch (event.type) {
          case ButtonPress:
            exit(0);
            break;
        }
    }
}

_______________________________________________
Magick-bugs mailing list
[email protected]
http://studio.imagemagick.org/mailman/listinfo/magick-bugs

Reply via email to