|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 4976 (0x1370) Types: TextFile Names: »selectRaster.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/Toolkit/Xr/usr/contrib/RB/selectRaster.c«
/* * $Source: /u1/Xr/usr/contrib/RB/RCS/selectRaster.c,v $ * $Header: selectRaster.c,v 1.1 86/12/17 08:54:06 swick Exp $ */ #ifndef lint static char *rcsid_selectRaster_c = "$Header: selectRaster.c,v 1.1 86/12/17 08:54:06 swick Exp $"; #endif lint static char rcsid[] = "$Header: selectRaster.c,v 1.1 86/12/17 08:54:06 swick Exp $"; /*************************************<+>************************************* ***************************************************************************** ** ** File: selectRaster.c ** ** Project: X-ray Toolbox ** ** Description: The file contains the routines that select a portion ** of the display. ** ** ******************************************************************* ** * (c) Copyright Hewlett-Packard Company, 1986. All rights are * ** * reserved. Copying or other reproduction of this program except * ** * for archival purposes is prohibited without the prior written * ** * consent of Hewlett-Packard Company. * ** ******************************************************************* ** ** ** ------------------------ MODIFICATION RECORD ------------------------ * * $Log: selectRaster.c,v $ * Revision 1.1 86/12/17 08:54:06 swick * Initial revision * * ***************************************************************************** *************************************<+>*************************************/ #include <X/Xlib.h> #include <Xr/defs.h> #include <Xr/types.h> extern xrRasterEditInfo rasterEditInfo; SelectRaster () { XButtonEvent buttonEvent; Window subWin; INT32 x, y; INT32 oldX, oldY; POINT point1, point2; RECTANGLE grabRect; /* * Grab the mouse buttons and initialize the necessary data. */ XGrabButton (RootWindow, xrDefaultCursor, LeftMask, ButtonPressed | ButtonReleased); point1.x = point2.x = point1.y = point2.y = -1; /* * Set up a loop to catch the select point. */ while (1) { if (XrInput (0, MSG_BLKREAD, &buttonEvent)) { if (XrMapButton (XrSELECT, &buttonEvent)) { XQueryMouse (RootWindow, &x, &y, &subWin); point1.x = oldX = x; point1.y = oldY = y; break; } } } /* * Set up a loop to catch the select up point. */ while (1) { XQueryMouse (RootWindow, &x, &y, &subWin); if (x != oldX || y != oldY) { if (point2.x != -1) DrawRect (&point1, &point2); point2.x = oldX = x; point2.y = oldY = y; DrawRect (&point1, &point2); } if (XrInput (0, MSG_NONBLKREAD, &buttonEvent)) if (XrMapButton (XrSELECTUP, &buttonEvent)) { DrawRect (&point1, &point2); break; } } XUngrabButton (LeftMask); /* * Calculate the grabbed rectangle and return is less than the minimum. */ XrPt2Rect (&point1, &point2, &grabRect); if (grabRect.width < 16 || grabRect.height < 16) return; /* * Initialize a raster to hold the image to be read from the display. */ RasterInit (grabRect.width, grabRect.height, DisplayPlanes()); if (DisplayPlanes() == 1) XPixmapGetXY (RootWindow, grabRect.x, grabRect.y, grabRect.width, grabRect.height, rasterEditInfo.rasterData.raster); else XPixmapGetZ (RootWindow, grabRect.x, grabRect.y, grabRect.width, grabRect.height, rasterEditInfo.rasterData.raster); /* * Reinitialize the main and image windows. */ MainWindowInit(); } /************************************************************************ * * DrawRect * DrawRect takes two points as input and draws a rectangle with * a line width and height of 3 around the rectangle generated * by the two points. The rectangle is drawn XOR so that it * can be erased. * ************************************************************************/ DrawRect (point1, point2) POINT * point1; POINT * point2; { RECTANGLE drawRect; XrPt2Rect (point1, point2, &drawRect); XPixFill (RootWindow, drawRect.x, drawRect.y, drawRect.width, 3, WhitePixel, 0, GXxor, AllPlanes); XPixFill (RootWindow, drawRect.x + drawRect.width - 3, drawRect.y + 3, 3, drawRect.height - 3, WhitePixel, 0, GXxor, AllPlanes); XPixFill (RootWindow, drawRect.x, drawRect.y + drawRect.height - 3, drawRect.width - 3, 3, WhitePixel, 0, GXxor, AllPlanes); XPixFill (RootWindow, drawRect.x, drawRect.y + 3, 3, drawRect.height - 6, WhitePixel, 0, GXxor, AllPlanes); }