diff options
author | joye <joye> | 2013-09-13 18:43:55 (GMT) |
---|---|---|
committer | joye <joye> | 2013-09-13 18:43:55 (GMT) |
commit | d0b2a93419897fdb247ab4ba3b2cb98d7fc641ae (patch) | |
tree | 3f4fad9f628a0a02da78d1ff178d0fc1da0f7565 /src/bltGrMarker.C | |
parent | 6cb73e42988be5a1c39c6cac6d5c839101e3a12c (diff) | |
download | blt-d0b2a93419897fdb247ab4ba3b2cb98d7fc641ae.zip blt-d0b2a93419897fdb247ab4ba3b2cb98d7fc641ae.tar.gz blt-d0b2a93419897fdb247ab4ba3b2cb98d7fc641ae.tar.bz2 |
*** empty log message ***
Diffstat (limited to 'src/bltGrMarker.C')
-rw-r--r-- | src/bltGrMarker.C | 644 |
1 files changed, 1 insertions, 643 deletions
diff --git a/src/bltGrMarker.C b/src/bltGrMarker.C index 8c40ab1..89f587b 100644 --- a/src/bltGrMarker.C +++ b/src/bltGrMarker.C @@ -1,4 +1,3 @@ - /* * bltGrMarker.c -- * @@ -33,7 +32,6 @@ #include "bltGraph.h" #include "bltOp.h" #include "bltImage.h" -#include "bltPainter.h" #include "bltGrElem.h" #include "bltBitmap.h" @@ -107,14 +105,6 @@ static Blt_CustomOption colorPairOption = ObjToColorPairProc, ColorPairToObjProc, FreeColorPairProc, (ClientData)0 }; -static Blt_OptionParseProc ObjToPictImageProc; -static Blt_OptionPrintProc PictImageToObjProc; -static Blt_OptionFreeProc FreePictImageProc; -static Blt_CustomOption pictImageOption = -{ - ObjToPictImageProc, PictImageToObjProc, FreePictImageProc, (ClientData)0 -}; - extern Blt_CustomOption bltXAxisOption; extern Blt_CustomOption bltYAxisOption; extern Blt_CustomOption bltFilterOption; @@ -330,125 +320,6 @@ static MarkerClass bitmapMarkerClass = { /* *--------------------------------------------------------------------------- * - * ImageMarker -- - * - *--------------------------------------------------------------------------- - */ -typedef struct { - GraphObj obj; /* Must be first field in marker. */ - - MarkerClass *classPtr; - - Blt_HashEntry *hashPtr; - - Blt_ChainLink link; - - const char *elemName; /* Element associated with marker. Let's - * you link a marker to an element. The - * marker is drawn only if the element - * is also visible. */ - Axis2d axes; - - Point2d *worldPts; /* Coordinate array to position - * marker. */ - - int nWorldPts; /* # of points in above array. */ - - int drawUnder; /* If non-zero, draw the marker - * underneath any elements. This can be - * a performance penalty because the - * graph must be redraw entirely each - * time the marker is redrawn. */ - - int clipped; /* Indicates if the marker is totally - * clipped by the plotting area. */ - - unsigned int flags; - - - int xOffset, yOffset; /* Pixel offset from graph position */ - - int state; - - Tk_Image tkImage; /* Tk image to be displayed. */ - Tk_Anchor anchor; /* Indicates how to translate the given - * marker position. */ - Point2d anchorPt; /* Translated anchor point. */ - int width, height; /* Dimensions of the possibly scaled - * image. */ -#if 0 - Blt_Painter painter; - Blt_Picture picture; - Blt_ResampleFilter filter; - int pictX, pictY; /* */ - Blt_Picture scaled; /* Pixmap containing the scaled image */ -#endif - GC gc; - -} ImageMarker; - -static Blt_ConfigSpec imageConfigSpecs[] = -{ - {BLT_CONFIG_ANCHOR, "-anchor", "anchor", "Anchor", DEF_MARKER_ANCHOR, - Blt_Offset(ImageMarker, anchor), 0}, - {BLT_CONFIG_LIST, "-bindtags", "bindTags", "BindTags", DEF_IMAGE_TAGS, - Blt_Offset(ImageMarker, obj.tags), BLT_CONFIG_NULL_OK}, - {BLT_CONFIG_CUSTOM, "-coords", "coords", "Coords", DEF_MARKER_COORDS, - Blt_Offset(ImageMarker, worldPts), BLT_CONFIG_NULL_OK, &coordsOption}, - {BLT_CONFIG_STRING, "-element", "element", "Element", DEF_MARKER_ELEMENT, - Blt_Offset(ImageMarker, elemName), BLT_CONFIG_NULL_OK}, - {BLT_CONFIG_BITMASK, "-hide", "hide", "Hide", DEF_MARKER_HIDE, - Blt_Offset(ImageMarker, flags), BLT_CONFIG_DONT_SET_DEFAULT, - (Blt_CustomOption *)HIDE}, -#if 0 - {BLT_CONFIG_CUSTOM, "-image", "image", "Image", (char *)NULL, - Blt_Offset(ImageMarker, picture), BLT_CONFIG_NULL_OK, &pictImageOption}, -#endif - {BLT_CONFIG_CUSTOM, "-mapx", "mapX", "MapX", DEF_MARKER_MAP_X, - Blt_Offset(ImageMarker, axes.x), 0, &bltXAxisOption}, - {BLT_CONFIG_CUSTOM, "-mapy", "mapY", "MapY", DEF_MARKER_MAP_Y, - Blt_Offset(ImageMarker, axes.y), 0, &bltYAxisOption}, - {BLT_CONFIG_STRING, "-name", (char *)NULL, (char *)NULL, DEF_MARKER_NAME, - Blt_Offset(ImageMarker, obj.name), BLT_CONFIG_NULL_OK}, -#if 0 - {BLT_CONFIG_CUSTOM, "-resamplefilter", "resampleFilter", "ResampleFilter", - DEF_MARKER_FILTER, Blt_Offset(ImageMarker, filter), - BLT_CONFIG_NULL_OK | BLT_CONFIG_DONT_SET_DEFAULT, &bltFilterOption}, -#endif - {BLT_CONFIG_STATE, "-state", "state", "State", DEF_MARKER_STATE, - Blt_Offset(ImageMarker, state), BLT_CONFIG_DONT_SET_DEFAULT}, - {BLT_CONFIG_BOOLEAN, "-under", "under", "Under", DEF_MARKER_UNDER, - Blt_Offset(ImageMarker, drawUnder), BLT_CONFIG_DONT_SET_DEFAULT}, - {BLT_CONFIG_PIXELS, "-xoffset", "xOffset", "XOffset", DEF_MARKER_X_OFFSET, - Blt_Offset(ImageMarker, xOffset), BLT_CONFIG_DONT_SET_DEFAULT}, - {BLT_CONFIG_PIXELS, "-yoffset", "yOffset", "YOffset", DEF_MARKER_Y_OFFSET, - Blt_Offset(ImageMarker, yOffset), BLT_CONFIG_DONT_SET_DEFAULT}, - {BLT_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0} -}; - -static MarkerConfigProc ConfigureImageProc; -static MarkerCreateProc CreateImageProc; -static MarkerDrawProc DrawImageProc; -static MarkerFreeProc FreeImageProc; -static MarkerMapProc MapImageProc; -static MarkerPointProc PointInImageProc; -static MarkerPostscriptProc ImageToPostscriptProc; -static MarkerRegionProc RegionInImageProc; - -static MarkerClass imageMarkerClass = { - imageConfigSpecs, - ConfigureImageProc, - DrawImageProc, - FreeImageProc, - MapImageProc, - PointInImageProc, - RegionInImageProc, - ImageToPostscriptProc, -}; - -/* - *--------------------------------------------------------------------------- - * * LineMarker -- * *--------------------------------------------------------------------------- @@ -972,10 +843,6 @@ static MarkerClass windowMarkerClass = { WindowToPostscriptProc, }; -static Tk_ImageChangedProc ImageChangedProc; - - - /* *--------------------------------------------------------------------------- * @@ -1470,158 +1337,6 @@ ColorPairToObjProc( return listObjPtr; } -/* - *--------------------------------------------------------------------------- - * - * ImageChangedProc - * - * - * Results: - * None. - * - *--------------------------------------------------------------------------- - */ -/* ARGSUSED */ -static void -ImageChangedProc( - ClientData clientData, - int x, int y, int w, int h, /* Not used. */ - int imageWidth, int imageHeight) /* Not used. */ -{ -#if 0 - Graph *graphPtr; - ImageMarker *imPtr = clientData; - int isPhoto; - - graphPtr = imPtr->obj.graphPtr; - if ((imPtr->picture != NULL) && (imPtr->flags & IMAGE_PHOTO)) { - Blt_FreePicture(imPtr->picture); - } - imPtr->picture = NULL; - imPtr->flags &= ~IMAGE_PHOTO; - if (Blt_Image_IsDeleted(imPtr->tkImage)) { - Tk_FreeImage(imPtr->tkImage); - imPtr->tkImage = NULL; - return; - } - imPtr->picture = Blt_GetPictureFromImage(graphPtr->interp, imPtr->tkImage, - &isPhoto); - if (isPhoto) { - imPtr->flags |= IMAGE_PHOTO; - } - graphPtr->flags |= CACHE_DIRTY; - imPtr->flags |= MAP_ITEM; - Blt_EventuallyRedrawGraph(graphPtr); -#endif -} - -/*ARGSUSED*/ -static void -FreePictImageProc( - ClientData clientData, - Display *display, /* Not used. */ - char *widgRec, - int offset) -{ -#if 0 - ImageMarker *imPtr = (ImageMarker *)widgRec; - - if ((imPtr->picture != NULL) && (imPtr->flags & IMAGE_PHOTO)) { - Blt_FreePicture(imPtr->picture); - } - imPtr->picture = NULL; - if (imPtr->tkImage != NULL) { - Tk_FreeImage(imPtr->tkImage); - } - imPtr->tkImage = NULL; - imPtr->flags &= ~IMAGE_PHOTO; -#endif -} - -/* - *--------------------------------------------------------------------------- - * - * ObjToPictImageProc -- - * - * Given an image name, get the Tk image associated with it. - * - * Results: - * The return value is a standard TCL result. - * - *--------------------------------------------------------------------------- - */ -/*ARGSUSED*/ -static int -ObjToPictImageProc( - ClientData clientData, /* Not used. */ - Tcl_Interp *interp, /* Interpreter to return results */ - Tk_Window tkwin, /* Not used. */ - Tcl_Obj *objPtr, /* String representation of value. */ - char *widgRec, /* Widget record. */ - int offset, /* Offset to field in structure */ - int flags) -{ -#if 0 - Blt_Picture *picturePtr = (Blt_Picture *)(widgRec + offset); - Graph *graphPtr; - ImageMarker *imPtr = (ImageMarker *)widgRec; - Tk_Image tkImage; - const char *name; - int isPhoto; - - name = Tcl_GetString(objPtr); - tkImage = Tk_GetImage(interp, tkwin, name, ImageChangedProc, imPtr); - if (tkImage == NULL) { - return TCL_ERROR; - } - if (imPtr->tkImage != NULL) { - Tk_FreeImage(imPtr->tkImage); - } - imPtr->flags &= ~IMAGE_PHOTO; - if (*picturePtr != NULL) { - Blt_FreePicture(*picturePtr); - } - *picturePtr = NULL; - imPtr->tkImage = tkImage; - graphPtr = imPtr->obj.graphPtr; - *picturePtr = Blt_GetPictureFromImage(graphPtr->interp, tkImage, &isPhoto); - if (isPhoto) { - imPtr->flags |= IMAGE_PHOTO; - } -#endif - return TCL_OK; -} - -/* - *--------------------------------------------------------------------------- - * - * PictImageToObjProc -- - * - * Convert the image name into a string Tcl_Obj. - * - * Results: - * The string representation of the image is returned. - * - *--------------------------------------------------------------------------- - */ -/*ARGSUSED*/ -static Tcl_Obj * -PictImageToObjProc( - ClientData clientData, /* Not used. */ - Tcl_Interp *interp, - Tk_Window tkwin, /* Not used. */ - char *widgRec, /* Widget record */ - int offset, /* Offset to field in structure */ - int flags) -{ - ImageMarker *imPtr = (ImageMarker *)(widgRec); - - if (imPtr->tkImage == NULL) { - return Tcl_NewStringObj("", -1); - } - return Tcl_NewStringObj(Blt_Image_Name(imPtr->tkImage), -1); -} - static INLINE int IsElementHidden(Marker *markerPtr) { @@ -1767,7 +1482,7 @@ CreateMarker( markerPtr = CreateLineProc(); /* line */ break; case CID_MARKER_IMAGE: - markerPtr = CreateImageProc(); /* image */ + return NULL; /* not supported */ break; case CID_MARKER_TEXT: markerPtr = CreateTextProc(); /* text */ @@ -2335,363 +2050,6 @@ CreateBitmapProc(void) return (Marker *)bmPtr; } - -/* - *--------------------------------------------------------------------------- - * - * ConfigureImageProc -- - * - * This procedure is called to process an objv/objc list, plus the Tk - * option database, in order to configure (or reconfigure) a image - * marker. - * - * Results: - * A standard TCL result. If TCL_ERROR is returned, then interp->result - * contains an error message. - * - * Side effects: - * Configuration information, such as image pixmap, colors, rotation, - * etc. get set for markerPtr; old resources get freed, if there were - * any. The marker is eventually redisplayed. - * - *--------------------------------------------------------------------------- - */ -static int -ConfigureImageProc(Marker *markerPtr) -{ -#if 0 - ImageMarker *imPtr = (ImageMarker *)markerPtr; - Graph *graphPtr = markerPtr->obj.graphPtr; - Blt_Painter painter; - GC newGC; - - newGC = Tk_GetGC(graphPtr->tkwin, 0L, (XGCValues *)NULL); - if (imPtr->gc != NULL) { - Tk_FreeGC(graphPtr->display, imPtr->gc); - } - imPtr->gc = newGC; - - painter = Blt_GetPainter(graphPtr->tkwin, 1.0); - if (imPtr->painter != NULL) { - Blt_FreePainter(painter); - } - imPtr->painter = painter; - markerPtr->flags |= MAP_ITEM; - if (markerPtr->drawUnder) { - graphPtr->flags |= CACHE_DIRTY; - } - Blt_EventuallyRedrawGraph(graphPtr); -#endif - return TCL_OK; -} - -/* - *--------------------------------------------------------------------------- - * - * MapImageProc -- - * - * This procedure gets called each time the layout of the graph changes. - * The x, y window coordinates of the image marker are saved in the - * marker structure. - * - * In addition, if no background color was specified, the - * GCTileStipXOrigin and GCTileStipYOrigin attributes will not set in the - * private GC. - * - * Results: - * None. - * - * Side effects: - * Window coordinates are saved and if no background color was set, the - * GC stipple origins are changed to calculated window coordinates. - * - *--------------------------------------------------------------------------- - */ -static void -MapImageProc(Marker *markerPtr) -{ -#if 0 - Region2d extents; - Graph *graphPtr; - ImageMarker *imPtr; - Point2d anchorPt; - Point2d c1, c2; - int newWidth, newHeight; - int srcWidth, srcHeight; - int x, y, w, h; - int left, right, top, bottom; - - imPtr = (ImageMarker *)markerPtr; - if (imPtr->picture == NULL) { - return; - } - if (imPtr->scaled != NULL) { - Blt_FreePicture(imPtr->scaled); - imPtr->scaled = NULL; - } - graphPtr = markerPtr->obj.graphPtr; - c1 = MapPoint(markerPtr->worldPts, &markerPtr->axes); - - imPtr->width = srcWidth = Blt_PictureWidth(imPtr->picture); - imPtr->height = srcHeight = Blt_PictureHeight(imPtr->picture); - - if ((srcWidth == 0) || (srcHeight == 0)) { - markerPtr->clipped = TRUE; - return; /* Empty image. */ - } - if (markerPtr->nWorldPts > 1) { - double hold; - - c2 = MapPoint(markerPtr->worldPts + 1, &markerPtr->axes); - /* Flip the corners if necessary */ - if (c1.x > c2.x) { - hold = c1.x, c1.x = c2.x, c2.x = hold; - } - if (c1.y > c2.y) { - hold = c1.y, c1.y = c2.y, c2.y = hold; - } - } else { - c2.x = c1.x + srcWidth - 1; - c2.y = c1.y + srcHeight - 1; - } - newWidth = (int)(c2.x - c1.x) + 1; - newHeight = (int)(c2.y - c1.y) + 1; - - if (markerPtr->nWorldPts == 1) { - anchorPt = Blt_AnchorPoint(c1.x, c1.y, (double)newWidth, - (double)newHeight, imPtr->anchor); - } else { - anchorPt = c1; - } - anchorPt.x += markerPtr->xOffset; - anchorPt.y += markerPtr->yOffset; - - /* Check if the image sits at least partially in the plot area. */ - extents.left = anchorPt.x; - extents.top = anchorPt.y; - extents.right = anchorPt.x + newWidth - 1; - extents.bottom = anchorPt.y + newHeight - 1; - - markerPtr->clipped = BoxesDontOverlap(graphPtr, &extents); - if (markerPtr->clipped) { - return; /* Image is offscreen. Don't generate - * rotated or scaled images. */ - } - - /* Determine the extents of the subimage inside of the destination - * image. */ - left = MAX((int)extents.left, graphPtr->left); - top = MAX((int)extents.top, graphPtr->top); - right = MIN((int)extents.right, graphPtr->right); - bottom = MIN((int)extents.bottom, graphPtr->bottom); - - /* Reset image location and coordinates to that of the region */ - anchorPt.x = left; - anchorPt.y = top; - - x = y = 0; - if (graphPtr->left > (int)extents.left) { - x = graphPtr->left - (int)extents.left; - } - if (graphPtr->top > (int)extents.top) { - y = graphPtr->top - (int)extents.top; - } - w = (int)(right - left + 1); - h = (int)(bottom - top + 1); - - if (markerPtr->nWorldPts > 1) { - Blt_Picture scaled; - - scaled = Blt_ScalePictureArea(imPtr->picture, x, y, w, h, - newWidth, newHeight); - imPtr->scaled = scaled; - imPtr->pictX = 0; - imPtr->pictY = 0; - } else { - imPtr->pictX = x; - imPtr->pictY = y; - } - imPtr->width = newWidth; - imPtr->height = newHeight; - imPtr->anchorPt = anchorPt; -#endif -} - -/* - *--------------------------------------------------------------------------- - * - * PointInWindowProc -- - * - * Indicates if the given point is over the window marker. The area of - * the window is the rectangle. - * - * Results: - * Returns 1 is the point is over the window marker, 0 otherwise. - * - *--------------------------------------------------------------------------- - */ -static int -PointInImageProc(Marker *markerPtr, Point2d *samplePtr) -{ - ImageMarker *imPtr = (ImageMarker *)markerPtr; - double left, right, top, bottom; - - left = imPtr->anchorPt.x; - right = imPtr->anchorPt.x + imPtr->width; - top = imPtr->anchorPt.y; - bottom = imPtr->anchorPt.y + imPtr->height; - - return ((samplePtr->x >= left) && (samplePtr->x < right) && - (samplePtr->y >= top) && (samplePtr->y < bottom)); -} - -/* - *--------------------------------------------------------------------------- - * - * RegionInImageProc -- - * - *--------------------------------------------------------------------------- - */ -static int -RegionInImageProc(Marker *markerPtr, Region2d *regPtr, int enclosed) -{ - ImageMarker *imPtr = (ImageMarker *)markerPtr; - - if (markerPtr->nWorldPts > 0) { - double left, right, top, bottom; - - left = imPtr->anchorPt.x; - right = imPtr->anchorPt.x + imPtr->width; - top = imPtr->anchorPt.y; - bottom = imPtr->anchorPt.y + imPtr->height; - if (enclosed) { - return ((left >= regPtr->left) && (top >= regPtr->top) && - (right <= regPtr->right) && (bottom <= regPtr->bottom)); - } - return !((left >= regPtr->right) || (top >= regPtr->bottom) || - (right <= regPtr->left) || (bottom <= regPtr->top)); - } - return FALSE; -} - -/* - *--------------------------------------------------------------------------- - * - * DrawImageProc -- - * - * This procedure is invoked to draw a image marker. - * - * Results: - * None. - * - * Side effects: - * GC stipple origins are changed to current window coordinates. - * Commands are output to X to draw the marker in its current mode. - * - *--------------------------------------------------------------------------- - */ -static void -DrawImageProc(Marker *markerPtr, Drawable drawable) -{ -#if 0 - ImageMarker *imPtr = (ImageMarker *)markerPtr; - Blt_Picture picture; - - picture = (imPtr->scaled != NULL) ? imPtr->scaled : imPtr->picture; - if (picture != NULL) { - Blt_PaintPictureWithBlend(imPtr->painter, drawable, picture, - imPtr->pictX, imPtr->pictY, imPtr->width, imPtr->height, - (int)imPtr->anchorPt.x, (int)imPtr->anchorPt.y, 0, 0.4); - } -#endif -} - -/* - *--------------------------------------------------------------------------- - * - * ImageToPostscriptProc -- - * - * This procedure is invoked to print a image marker. - * - * Results: - * None. - * - *--------------------------------------------------------------------------- - */ -static void -ImageToPostscriptProc(Marker *markerPtr, Blt_Ps ps) -{ -#if 0 - ImageMarker *imPtr = (ImageMarker *)markerPtr; - Blt_Picture picture; - - picture = (imPtr->scaled != NULL) ? imPtr->scaled : imPtr->picture; - if (picture != NULL) { - Blt_Ps_DrawPicture(ps, picture, imPtr->anchorPt.x, imPtr->anchorPt.y); - } -#endif -} - -/* - *--------------------------------------------------------------------------- - * - * FreeImageProc -- - * - * Destroys the structure containing the attributes of the image marker. - * - * Results: - * None. - * - * Side effects: - * Image attributes (GCs, colors, image, etc) get destroyed. Memory is - * released, X resources are freed, and the graph is redrawn. - * - *--------------------------------------------------------------------------- - */ -static void -FreeImageProc(Marker *markerPtr) -{ -#if 0 - ImageMarker *imPtr = (ImageMarker *)markerPtr; - Graph *graphPtr = markerPtr->obj.graphPtr; - - if (imPtr->painter != NULL) { - Blt_FreePainter(imPtr->painter); - } - if (imPtr->scaled != NULL) { - Blt_FreePicture(imPtr->scaled); - } - if (imPtr->gc != NULL) { - Tk_FreeGC(graphPtr->display, imPtr->gc); - } -#endif -} - -/* - *--------------------------------------------------------------------------- - * - * CreateImageProc -- - * - * Allocate memory and initialize methods for the new image marker. - * - * Results: - * The pointer to the newly allocated marker structure is returned. - * - * Side effects: - * Memory is allocated for the image marker structure. - * - *--------------------------------------------------------------------------- - */ -static Marker * -CreateImageProc(void) -{ - ImageMarker *imPtr; - - imPtr = calloc(1, sizeof(ImageMarker)); - imPtr->classPtr = &imageMarkerClass; - return (Marker *)imPtr; -} - /* *--------------------------------------------------------------------------- * |