Re: XForms: FL_OVERLAY_POSITIONER

Trent Piepho (xyzzy@u.washington.edu)
Fri, 13 Nov 1998 10:37:02 -0800 (PST)

# To subscribers of the xforms list from Trent Piepho <xyzzy@u.washington.edu> :

On Fri, 13 Nov 1998, Joao Filipe Ferreira wrote:
> # To subscribers of the xforms list from Joao Filipe Ferreira <jfilipe@alumni.dee.uc.pt> :
>
> Trent Piepho -
>
> I am quite sure I am using it. See for yourself:

Your program seems to work fine for me. I made a quick hack to see if it
worked, and it does. Try this program.

#include "forms.h"
#include <stdlib.h>
#define WIDTH 120
#define HEIGHT 120

int size_of_pixmap(int depth);
Pixmap datatopixmap();
Display *dpy;
FL_FORM *form;
FL_OBJECT *pix;
FL_OBJECT *pos;

create_form_xfmag(void)
{
FL_OBJECT *obj;

form = fl_bgn_form(FL_NO_BOX, 310, 210);
obj = fl_add_box(FL_UP_BOX,0,0,310,210,"");
obj = fl_add_box(FL_EMBOSSED_BOX,10,10,290,40,"XForms Stereo Magnifier");
fl_set_object_lsize(obj,FL_LARGE_SIZE);
fl_set_object_lstyle(obj,FL_TIMES_STYLE+FL_ENGRAVED_STYLE);
obj = fl_add_labelframe(FL_ENGRAVED_FRAME,160,60,140,140,"Magnified Image Right");
fl_set_object_gravity(obj, FL_NoGravity, FL_SouthEast);
obj = fl_add_labelframe(FL_ENGRAVED_FRAME,10,60,140,140,"Magnified Image Left");
fl_set_object_gravity(obj, FL_NoGravity, FL_SouthWest);
pix = obj = fl_add_pixmap(FL_NORMAL_PIXMAP,20,70,120,120,"");
pos = obj = fl_add_positioner(FL_OVERLAY_POSITIONER,20,70,120,120,"");
// fl_set_object_boxtype(obj,FL_DOWN_BOX);
fl_set_positioner_return(obj,0);
obj = fl_add_pixmap(FL_NORMAL_PIXMAP,170,70,120,120,"");
obj = fl_add_positioner(FL_OVERLAY_POSITIONER,170,70,120,120,"");
// fl_set_object_boxtype(obj,FL_DOWN_BOX);
fl_set_positioner_return(obj,0);
fl_end_form();
}

int main(int argc, char *argv[])
{
fl_initialize(&argc, argv, 0, 0, 0);
dpy=fl_get_display();
create_form_xfmag();
fl_show_form(form,FL_PLACE_CENTERFREE,FL_FULLBORDER,"mag");

fl_set_pixmap_pixmap(pix,datatopixmap(),0);
fl_redraw_object(pix);
fl_redraw_object(pos);
fl_do_forms();
fl_set_pixmap_pixmap(pix,datatopixmap(),0);
fl_redraw_object(pix);
fl_redraw_object(pos);

for(;;) fl_do_forms();
}

FL_COLOR MapColors[11]={
FL_BLACK, FL_RED, FL_GREEN, FL_YELLOW,
FL_BLUE, FL_MAGENTA, FL_CYAN, FL_INDIANRED,
FL_SLATEBLUE, FL_DARKGOLD, FL_DARKTOMATO
};

Pixmap datatopixmap()
{
int x,y;
XImage *i;
Pixmap p;
XWindowAttributes xwa;
unsigned char *data;
Window w=FL_ObjWin(pix);
static int foo=0;

XGetWindowAttributes(dpy, w, &xwa);

data=malloc(size_of_pixmap(xwa.depth));
p=XCreatePixmap(dpy, w, WIDTH, HEIGHT, xwa.depth);
i=XCreateImage(dpy, xwa.visual, xwa.depth, ZPixmap,
0, data, WIDTH, HEIGHT, 8, 0);

for(x=0;x<WIDTH;x++) for(y=0;y<HEIGHT;y++) {
if(foo)
XPutPixel(i,x,y,fl_get_pixel(MapColors[(x/10)%11]));
else
XPutPixel(i,x,y,fl_get_pixel(MapColors[(y/10)%11]));
};

XPutImage(dpy, p, fl_state[fl_get_form_vclass(form)].gc[0],
i, 0,0, 0,0, WIDTH,HEIGHT);
XDestroyImage(i);

foo=1;
return p;
}

int size_of_pixmap(int depth)
{
int count;
int bits;
XPixmapFormatValues *pfv;

pfv=XListPixmapFormats(dpy, &count);
for(count--;count>0;count--) {
if(pfv[count].depth!=depth) continue;
bits = WIDTH * pfv[count].bits_per_pixel;
if(bits%pfv[count].scanline_pad) {
bits -= bits%pfv[count].scanline_pad;
bits += pfv[count].scanline_pad;
};
XFree(pfv);
return (bits/8)*HEIGHT;
};
return 0;
}
_________________________________________________
To unsubscribe, send the message "unsubscribe" to
xforms-request@bob.usuf2.usuhs.mil or see
http://bob.usuf2.usuhs.mil/mailserv/xforms.html
XForms Home Page: http://bragg.phys.uwm.edu/xforms
List Archive: http://bob.usuf2.usuhs.mil/mailserv/list-archives/