Exemple #1
0
void
ui_buildfilesel(const char *f, const char *m,
		void (*c) (const char *, int))
{
    if (filevisible) {
	x_fatalerror("Internal error!");
    }
    pressedbutton = activebutton = active = -1;
    if (lastdir[0] == 0)
	getcwd(lastdir, 256);
    lastdir[255] = 0;
    currdir = mystrdup(lastdir);
    callback = c;
    active = AFILE;
    filex = 0;
    filey = 0;
    filewidth = uih->image->width;
    fileheight = uih->image->height;
    namestart = dirstart = 0;
    mask = m;
    dir =
	ui_opentext(filex + 2 * BORDERWIDTH, DIRSTART + BORDERHEIGHT,
		    filewidth - 4 * BORDERWIDTH, lastdir);
    filename =
	ui_opentext(filex + 2 * BORDERWIDTH, FILESTART + BORDERHEIGHT,
		    filewidth - 4 * BORDERWIDTH, f);
    filevisible = 1;
    ui_buildnames(LISTWIDTH);
    filew = uih_registerw(uih, filepos, drawfile, 0, DRAWBORDER);
}
Exemple #2
0
static void dx_getsize(int *width, int *height)
{
    if (resized) {
	resized = 0;
	if (!ResizeDD(directX == DXFULLSCREEN)) {
	    DeInitDD();
	    x_fatalerror("Failed to resize");
	}
	if (!dx_imgparams()) {
	    DeInitDD();
	    x_fatalerror("Internal program error #34234");
	}
    }
    *width = displayX;
    *height = displayY;
    CalculateBITMAPINFO();
}
Exemple #3
0
/* Display buffer */
static void PaintDD()
{
    DWORD ddrval;
    if (!IsWindowVisible(hWnd) || !active || !initialized
	|| !BackSurface[0])
	return;
    IDirectDrawSurface_Unlock(BackSurface[0], surface[0].lpSurface);
    IDirectDrawSurface_Unlock(BackSurface[1], surface[1].lpSurface);
    if (directX == DXFULLSCREEN) {
	if (storeddata)
	    free(storeddata), storeddata = NULL;
	storeddata =
	    store(currentbuff ? buffer2 : buffer1, bitDepth, lineSize,
		  displayX, displayY, mouseX, mouseY);
	drawmouse(currentbuff ? buffer2 : buffer1, mousepointer, bitDepth,
		  lineSize, displayX, displayY, mouseX, mouseY);
	ddrval =
	    IDirectDrawSurface_BltFast(lpSurfaces[0], 0, 0,
				       BackSurface[currentbuff], &rcScreen,
				       FALSE);
	restore(currentbuff ? buffer2 : buffer1, storeddata, bitDepth,
		lineSize, displayX, displayY, mouseX, mouseY);
	oldmouseX = mouseX;
	oldmouseY = mouseY;
    } else {
	ddrval = IDirectDrawSurface_Blt(lpSurfaces[0], &rcScreen,
					BackSurface[currentbuff],
					&rcViewport, DDBLT_WAIT, NULL);
    }
    if (ddrval != DD_OK) {
	if ((int) ddrval == (int) DDERR_SURFACELOST) {
	    IDirectDrawSurface_Restore(lpSurfaces[0]);
	    IDirectDrawSurface_Restore(BackSurface[0]);
	    IDirectDrawSurface_Restore(BackSurface[1]);
	    ddrval = IDirectDrawSurface_Blt(lpSurfaces[0], &rcScreen,
					    BackSurface[currentbuff],
					    &rcViewport, DDBLT_WAIT, NULL);
	    //if (ddrval == DDERR_SURFACELOST) resized=1; /*We've lost our fractal*/
	}
    }
    ddrval = IDirectDrawSurface_Lock(BackSurface[0], NULL, &surface[0],
				     DDLOCK_WAIT, NULL);
    ddrval = IDirectDrawSurface_Lock(BackSurface[1], NULL, &surface[1],
				     DDLOCK_WAIT, NULL);
    if (buffer1 != (char *) surface[0].lpSurface ||
	buffer2 != (char *) surface[1].lpSurface) {
	DeInitDD();
	x_fatalerror
	    ("Unexpected event - buffers moved! Please contact authors!");
    }
    needredraw = 0;

}
Exemple #4
0
static int dx_imgparams(void)
{
    DDSURFACEDESC s;
    memset(&s, 0, sizeof(s));
    s.dwSize = sizeof(s);
    if (IDirectDrawSurface_GetSurfaceDesc(lpSurfaces[0], &s) != DD_OK) {
	DeInitDD();
	x_error("Failed to get pixel format");
	return 0;
    }
    switch (s.ddpfPixelFormat.u1.dwRGBBitCount) {
    case 8:
	dxw_driver.imagetype = UI_C256;
	dxf_driver.imagetype = UI_C256;
	break;
    case 16:
    case 15:
	dxw_driver.imagetype = UI_TRUECOLOR16;
	dxf_driver.imagetype = UI_TRUECOLOR16;
	break;
    case 24:
	dxw_driver.imagetype = UI_TRUECOLOR24;
	dxf_driver.imagetype = UI_TRUECOLOR24;
	break;
    case 32:
	dxw_driver.imagetype = UI_TRUECOLOR;
	dxf_driver.imagetype = UI_TRUECOLOR;
	break;
    default:
	x_fatalerror
	    ("Unsupported bit depth! Only 8bpp, 16bpp, 24bpp and 32bpp modes supported\n");
	return 0;
    }
    dxw_driver.rmask = s.ddpfPixelFormat.u2.dwRBitMask;
    dxw_driver.gmask = s.ddpfPixelFormat.u3.dwGBitMask;
    dxw_driver.bmask = s.ddpfPixelFormat.u4.dwBBitMask;
    dxf_driver.rmask = s.ddpfPixelFormat.u2.dwRBitMask;
    dxf_driver.gmask = s.ddpfPixelFormat.u3.dwGBitMask;
    dxf_driver.bmask = s.ddpfPixelFormat.u4.dwBBitMask;
    dxf_driver.textwidth = fontWidth;
    dxf_driver.textheight = fontHeight;
    dxw_driver.textwidth = fontWidth;
    dxw_driver.textheight = fontHeight;
    return 1;
}
Exemple #5
0
static int dx_alloc_buffers(char **b1, char **b2)
{
    DWORD ddrval;
    DDSURFACEDESC ddsd;
    int i;
    currentbuff = 0;
    memset(surface, 0, sizeof(DDSURFACEDESC) * 2);
    memset(&ddsd, 0, sizeof(DDSURFACEDESC));
    ddsd.dwSize = sizeof(ddsd);
    if (IDirectDrawSurface_GetSurfaceDesc(lpSurfaces[0], &ddsd) != DD_OK) {
	DeInitDD();
	x_error("Failed to get pixel format");
	return 0;
    }
    for (i = 0; i < 2; i++) {
	ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
	ddsd.dwWidth = displayX;
	ddsd.dwHeight = displayY;
	ddsd.ddsCaps.dwCaps =
	    DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;

	ddrval =
	    IDirectDraw_CreateSurface(lpDD, &ddsd, &BackSurface[i], NULL);
	if (ddrval != DD_OK) {
	    DeInitDD();
	    x_error("Failed to create back surface");
	    return 0;
	}
    }
    for (i = 0; i < 2; i++) {
	surface[i].dwSize = sizeof(DDSURFACEDESC);
	ddrval = IDirectDrawSurface_Lock(BackSurface[i], NULL, surface + i,
					 DDLOCK_WAIT, NULL);
	if (ddrval != DD_OK) {
	    DeInitDD();
	    x_fatalerror("Failed to lock offscreen surfaces");
	}
    }
    buffer1 = *b1 = (char *) surface[0].lpSurface;
    buffer2 = *b2 = (char *) surface[1].lpSurface;
    lineSize = surface[0].u1.lPitch;
    initialized = 1;
    return lineSize;
}
Exemple #6
0
static void
draw (uih_context * c, void *data)
{
  int num = (int) data;
  int flags = 0;
  int xmax, n, nr, i;
  int x = 0, y = 0;
  char *string;
  int fgcolor = 0, bgcolor = 0;
  if (c->text[num] == NULL)
    return;
  prepare (c, c->text[num], &xmax, &n);
  nr = n * xtextheight (c->font);
  switch (c->textcolor[num])
    {
    case 0:
      fgcolor = FGCOLOR (c);
      bgcolor = BGCOLOR (c);
      break;
    case 1:
      fgcolor = BGCOLOR (c);
      bgcolor = BGCOLOR (c);
      flags = TEXT_PRESSED;
      break;
    case 2:
      fgcolor = SELCOLOR (c);
      bgcolor = BGCOLOR (c);
      break;
    default:
      x_fatalerror ("playtext:unknown color\n");
    }
  if (c->image->flags & AAIMAGE)
    fgcolor = BGCOLOR (c);
  switch (num)
    {
    case 0:
      y = 0;
      break;
    case 1:
      y = (c->image->height - nr) / 2;
      break;
    case 2:
      y = c->image->height - nr;
      break;
    }
  string = c->text[num];
  for (i = 0; i < n; i++)
    {
      xmax = xtextwidth (c->font, string);
      switch (c->textpos[num])
	{
	case 0:
	  x = 0;
	  break;
	case 1:
	  x = (c->image->width - xmax) / 2;
	  break;
	case 2:
	  x = c->image->width - xmax;
	  break;
	}
      string +=
	xprint (c->image, c->font, x, y, string, fgcolor, bgcolor, flags) + 1;
      y += xtextheight (c->font);
    }
}