Ejemplo n.º 1
0
/*
 Assumes a Pseudo graphic display.
 */
void init_colormaps (Display *dpy)
{
   screen = XDefaultScreen (dpy);

   fprintf(stderr, "Number of display cells = %d\n",
	   XDisplayCells(dpy, screen));
   fprintf(stderr, "Number of display planes = %d\n",
	   XDisplayPlanes(dpy, screen));

   colormap = XDefaultColormap(dpy, screen);
   while (XAllocColorCells(display_, colormap, False, NULL, 0, 
			   &(pixels[cmapsize]), 1))
     cmapsize++;
   
   cmapsize = (cmapsize > 60) ? 60 : cmapsize;
   fprintf(stderr, "Number of colors available = %d\n", cmapsize);

   if (cmapsize<5)
     {
	fprintf(stderr, "Number of colors available = %d\n", cmapsize);
	fprintf(stderr, "This is too few to run the display software.\n");
	fprintf(stderr, "Shut down windows, or restart X server.\n");
	exit(-1);      
     }
  
   /* build a grey scale colormap as a default, so that other programs */
   /* can't grab the colors*/
   {
      XColor xcolor;
      int i;
      
      xcolor.flags= DoRed | DoGreen | DoBlue;
      for (i = 0 ; i < cmapsize; i++) {
	 xcolor.pixel = pixels[i];
	 xcolor.red = (unsigned short) (i<<8);
	 xcolor.green = (unsigned short) (i<<8);
	 xcolor.blue = (unsigned short) (i<<8);
	 XStoreColor (display_, colormap, &xcolor);
      }
   }
   
  /* Generate global gamma correction table for this display */
  {
    Pixel index;
    double gamma = 1.0/1.0;
    
    for(index =0; index < 255; index++) {
      GammaCorrect[index] = (Pixel)(0.5 + 255.0 * 
				     (double) pow((double)(index)/255.0, 
						  gamma));
    }
  }

  /* Set up the internal histogram tables*/
  translate_init();

  return;
}
Ejemplo n.º 2
0
void SDesktop::init(){
    dpy = XOpenDisplay(NULL);
    scr = DefaultScreen(dpy);

    width = XDisplayWidth(dpy, scr);
    height = XDisplayHeight(dpy, scr);

    GLint att[]={
        GLX_RGBA,           True,
        GLX_DEPTH_SIZE,     XDisplayPlanes(dpy, scr),
        GLX_DOUBLEBUFFER,   True,
        None
    };

    vi = glXChooseVisual(dpy, scr, att);

    XSetWindowAttributes swa;

    swa.background_pixel = 0;
    swa.colormap = XCreateColormap(dpy, DefaultRootWindow(dpy), vi->visual, AllocNone);
    swa.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | PointerMotionMask;

    win = XCreateWindow(dpy, DefaultRootWindow(dpy), 0, 0, width, height, 0, vi->depth, InputOutput,
                       vi->visual, CWColormap | CWEventMask | CWBackPixel, &swa);

    //Atom atoms[2]={XInternAtom(dpy,"_NET_WM_STATE_FULLSCREEN",False), None};
    //XChangeProperty(dpy,win,XInternAtom(dpy,"_NET_WM_STATE",False),XA_ATOM,32,PropModeReplace,(const unsigned char *)atoms,1);

    glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);
    glXMakeCurrent(dpy, win, glc);

    play = false;

    glEnable(GL_DEPTH_TEST);

    pointer = new Pointer();
//    desktop = this;
}
Ejemplo n.º 3
0
ImageDisplay* MakeDisplay (Widget parent, Widget shell)
/* Make image display widget */
{
  Widget        display;   /* return display widget */
  ImageDisplay *IDdata;     /* display data structure */
  int           i;
  Dimension     cwid, chei;
  int           sbar_width = SBAR_WIDTH;
  
  IDdata = (ImageDisplay*) XtMalloc (sizeof (ImageDisplay));

/* set size */
/*                    maximum display size */
  XtVaGetValues (parent,
		 XmNwidth, &cwid,
		 XmNheight, &chei,
		 NULL);
  cwid = cwid - CONTROLWIDTH; /* leave room for control panel */
/*  chei = chei - 40; */

  IDdata->disp_wid = cwid;
  IDdata->disp_hei = chei;

/* save main window */
  IDdata->parent = parent;

/* set top level form */
  IDdata->shell = shell;

/* make Form widget for display */
  IDdata->display = XtVaCreateManagedWidget ("display", xmFormWidgetClass,
				     parent,
/* add extra pixels for scroll bars */
				     XmNwidth,     IDdata->disp_wid+sbar_width,
				     XmNheight,    IDdata->disp_hei+sbar_width,
 				     XmNtopAttachment,  XmATTACH_FORM,
				     XmNrightAttachment,  XmATTACH_FORM,
				     NULL);

/* drawing canvas */
  IDdata->canvas = 
    XtVaCreateManagedWidget ("canvas", xmDrawingAreaWidgetClass, 
			     IDdata->display, 
/*			     XmNwidth,     IDdata->disp_wid-sbar_width,
			     XmNheight,    IDdata->disp_hei-sbar_width,*/
			     XmNwidth,     1,
			     XmNheight,    1,
			     XmNtopAttachment,  XmATTACH_FORM,
			     XmNleftAttachment,  XmATTACH_FORM,
			     NULL);
/*   Add callbacks to handle resize and exposures.  */
  XtAddCallback (IDdata->canvas, XmNexposeCallback, ImageRedispCB, 
		 (XtPointer)IDdata);

/* trap button press */
  XtAddEventHandler (IDdata->canvas, ButtonPressMask, FALSE, 
		     (XtEventHandler)ButtonEH, 
		     (XtPointer)IDdata);

/* add horizonal scroll bar ("scale" in X-Windows) */

  IDdata->hscroll = 
    XtVaCreateManagedWidget ("hscroll", xmScrollBarWidgetClass, 
				       IDdata->display,
				       XmNwidth,     IDdata->disp_wid,
				       XmNheight,     sbar_width,
     				       XmNmaximum,   IDdata->disp_wid,
				       XmNminimum,            1,
     				       XmNvalue,              1,
				       XmNshowValue,       False,
				       XmNorientation, XmHORIZONTAL,
				       XmNprocessingDirection, XmMAX_ON_RIGHT,
/*				       XmNtopAttachment, XmATTACH_WIDGET,
				       XmNtopWidget,     IDdata->canvas,*/
				       XmNbottomAttachment, XmATTACH_FORM,
				       XmNleftAttachment,  XmATTACH_FORM,
				       XmNrightAttachment,  XmATTACH_FORM,
   				       XmNrightOffset,     sbar_width,
				       NULL);
  IDdata->hscr_vis = 1;  /* it's visible */
/* add call backs */
  XtAddCallback(IDdata->hscroll, XmNvalueChangedCallback, hscrollCB, 
		(XtPointer) IDdata);
/*  XtAddCallback(IDdata->hscroll, XmNdragCallback, hscrollCB, 
		(XtPointer) IDdata); */

/* add vertical scroll bar */

  IDdata->vscroll = 
    XtVaCreateManagedWidget ("vscroll", xmScrollBarWidgetClass, 
				       IDdata->display,
				       XmNheight,     IDdata->disp_hei,
				       XmNwidth,          sbar_width,
     				       XmNmaximum,   IDdata->disp_hei,
				       XmNminimum,            1,
     				       XmNvalue,              1,
				       XmNshowValue,       False,
				       XmNorientation, XmVERTICAL,
				       XmNprocessingDirection, XmMAX_ON_BOTTOM,
   				       XmNtopAttachment,  XmATTACH_FORM,
   				       XmNbottomAttachment,  XmATTACH_FORM,
   				       XmNbottomOffset,     sbar_width,
   				       XmNrightAttachment,  XmATTACH_FORM,
/*				       XmNleftAttachment, XmATTACH_WIDGET,
				       XmNleftWidget,   IDdata->canvas,*/
				       NULL);
  IDdata->vscr_vis = 1;  /* it's visible */
/* add call back */
  XtAddCallback(IDdata->vscroll, XmNvalueChangedCallback, vscrollCB, 
		(XtPointer) IDdata);
/*  XtAddCallback(IDdata->vscroll, XmNdragCallback, vscrollCB, 
		(XtPointer) */

/* make dummy widget the size of the display which can detect when 
   it's size has changed */
  IDdata->goober = 
    XtVaCreateManagedWidget ("goober", xmDrawingAreaWidgetClass, 
			     IDdata->display, 
			     XmNtopAttachment,  XmATTACH_FORM,
			     XmNleftAttachment,  XmATTACH_FORM,
			     XmNbottomAttachment,  XmATTACH_FORM,
			     XmNrightAttachment,  XmATTACH_FORM,
			     NULL);
/* go boom  XtUnmapWidget (IDdata->goober);  make invisible */
  XtAddCallback (IDdata->goober, XmNresizeCallback, ImageResizeCB,
		 (XtPointer)IDdata);
/* number of colors */
  IDdata->ncolors = XDisplayCells (XtDisplay (IDdata->display), 
				 XDefaultScreen (XtDisplay (IDdata->display)));
  if (IDdata->ncolors>MAXCOLOR) IDdata->ncolors = MAXCOLOR;
  for (i=0; i<MAXCOLOR; i++) 
    {IDdata->colut[i]=0;
     IDdata->red[i]=0;
     IDdata->green[i]=0;
     IDdata->blue[i]=0;}

/* bit planes in display */
  IDdata->depth = XDisplayPlanes (XtDisplay (IDdata->display), 
				 XDefaultScreen (XtDisplay (IDdata->display)));
/* context */
  IDdata->gc = XCreateGC (XtDisplay (IDdata->display), 
			  DefaultRootWindow (XtDisplay(IDdata->display)),
			  0, NULL );
/* init image */
  IDdata->work = NULL;
  IDdata->zoom = 1;
  IDdata->scrollx = 0;
  IDdata->scrolly = 0;
  IDdata->iXCorn = 0;
  IDdata->iYCorn = 0;
/* no color map yet */
  IDdata->cmap = 0;

/* no slider controls yet */
  IDdata->BriScroll = NULL;
  IDdata->ConScroll = NULL;
  IDdata->value[0] = 0;
  IDdata->value[1] = 0;
  IDdata->Info1 = NULL;
  IDdata->Info2 = NULL;
  IDdata->Info3 = NULL;
  IDdata->Info4 = NULL;
  IDdata->Info5 = NULL;
  IDdata->Info6 = NULL;
  IDdata->Info7 = NULL;
  IDdata->showInfo = 0;

/* return Image display structure */
  return IDdata;

} /* end MakeDisplay */
Ejemplo n.º 4
0
int
ga_xwin_init(const char *displayname, gaImage *gaimg) {
	int ignore = 0;
	//
	bzero(&__xshminfo, sizeof(__xshminfo));
	// open display
	if((display = XOpenDisplay(displayname)) == NULL) {
		ga_error("cannot open display \"%s\"\n", displayname ? displayname : "DEFAULT");
		return -1;
	}
	// check MIT extension
	if(XQueryExtension(display, "MIT-SHM", &ignore, &ignore, &ignore) ) {
		int major, minor;
		Bool pixmaps;
		if(XShmQueryVersion(display, &major, &minor, &pixmaps) == True) {
			ga_error("XShm extention version %d.%d %s shared pixmaps\n",
					major, minor, (pixmaps==True) ? "with" : "without");
		} else {
			ga_error("XShm extension not supported.\n");
			goto xcap_init_error;
		}
	}
	// get default screen
	screenNumber = XDefaultScreen(display);
	if((screen = XScreenOfDisplay(display, screenNumber)) == NULL) {
		ga_error("cannot obtain screen #%d\n", screenNumber);
		goto xcap_init_error;
	}
	//
	width = XDisplayWidth(display, screenNumber);
	height = XDisplayHeight(display, screenNumber);
	depth = XDisplayPlanes(display, screenNumber);
	ga_error("X-Window-init: dimension: %dx%dx%d @ %d/%d\n",
			width, height, depth,
			screenNumber, XScreenCount(display));
	//
	if((image = XShmCreateImage(display,
			XDefaultVisual(display, screenNumber),
			depth, ZPixmap, NULL, &__xshminfo,
			width, height)) == NULL) {
		ga_error("XShmCreateImage failed.\n");
		goto xcap_init_error;
	}
	//
	if((__xshminfo.shmid = shmget(IPC_PRIVATE,
				image->bytes_per_line*image->height,
				IPC_CREAT | 0777)) < 0) {
		perror("shmget");
		goto xcap_init_error;
	}
	//
	__xshminfo.shmaddr = image->data = (char*) shmat(__xshminfo.shmid, 0, 0);
	__xshminfo.readOnly = False;
	if(XShmAttach(display, &__xshminfo) == 0) {
		ga_error("XShmAttach failed.\n");
		goto xcap_init_error;
	}
	//
	__xshmattached = true;
	rootWindow = XRootWindow(display, screenNumber);
	gaimg->width = image->width;
	gaimg->height = image->height;
	gaimg->bytes_per_line = image->bytes_per_line;
	//
	return 0;
	//
xcap_init_error:
	ga_xwin_deinit();
	return -1;
}