📄 tkcanvas.c
字号:
for (i = 0; i < itemPtr->numTags; i++) { Tcl_AppendElement(interp, (char *) itemPtr->tagPtr[i]); } } } else if ((c == 'i') && (strncmp(argv[1], "icursor", length) == 0) && (length >= 2)) { int index; if (argc != 4) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " icursor tagOrId index\"", (char *) NULL); goto error; } for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { if ((itemPtr->typePtr->indexProc == NULL) || (itemPtr->typePtr->icursorProc == NULL)) { goto done; } if ((*itemPtr->typePtr->indexProc)(canvasPtr, itemPtr, argv[3], &index) != TCL_OK) { goto error; } (*itemPtr->typePtr->icursorProc)(canvasPtr, itemPtr, index); if ((itemPtr == canvasPtr->focusItemPtr) && (canvasPtr->flags & CURSOR_ON)) { EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); } } } else if ((c == 'i') && (strncmp(argv[1], "index", length) == 0) && (length >= 3)) { int index; if (argc != 4) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " index tagOrId string\"", (char *) NULL); goto error; } for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { if (itemPtr->typePtr->indexProc != NULL) { break; } } if (itemPtr == NULL) { Tcl_AppendResult(interp, "can't find an indexable item \"", argv[2], "\"", (char *) NULL); goto error; } if ((*itemPtr->typePtr->indexProc)(canvasPtr, itemPtr, argv[3], &index) != TCL_OK) { goto error; } sprintf(interp->result, "%d", index); } else if ((c == 'i') && (strncmp(argv[1], "insert", length) == 0) && (length >= 3)) { int beforeThis; if (argc != 5) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " insert tagOrId beforeThis string\"", (char *) NULL); goto error; } for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { if ((itemPtr->typePtr->indexProc == NULL) || (itemPtr->typePtr->insertProc == NULL)) { continue; } if ((*itemPtr->typePtr->indexProc)(canvasPtr, itemPtr, argv[3], &beforeThis) != TCL_OK) { goto error; } /* * Redraw both item's old and new areas: it's possible * that an insertion could result in a new area either * larger or smaller than the old area. */ EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); result = (*itemPtr->typePtr->insertProc)(canvasPtr, itemPtr, beforeThis, argv[4]); EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); if (result != TCL_OK) { goto error; } } } else if ((c == 'i') && (strncmp(argv[1], "itemconfigure", length) == 0) && (length >= 2)) { if (argc < 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " itemconfigure tagOrId ?option value ...?\"", (char *) NULL); goto error; } for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { if (argc == 3) { result = Tk_ConfigureInfo(canvasPtr->interp, canvasPtr->tkwin, itemPtr->typePtr->configSpecs, (char *) itemPtr, (char *) NULL, 0); } else if (argc == 4) { result = Tk_ConfigureInfo(canvasPtr->interp, canvasPtr->tkwin, itemPtr->typePtr->configSpecs, (char *) itemPtr, argv[3], 0); } else { EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); result = (*itemPtr->typePtr->configProc)(canvasPtr, itemPtr, argc-3, argv+3, TK_CONFIG_ARGV_ONLY); EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); canvasPtr->flags |= REPICK_NEEDED; } if ((result != TCL_OK) || (argc < 5)) { break; } } } else if ((c == 'l') && (strncmp(argv[1], "lower", length) == 0)) { Tk_Item *prevPtr; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " lower tagOrId ?belowThis?\"", (char *) NULL); goto error; } /* * First find the item just after which we'll insert the * named items. */ if (argc == 3) { prevPtr = NULL; } else { prevPtr = StartTagSearch(canvasPtr, argv[3], &search); if (prevPtr != NULL) { prevPtr = search.prevPtr; } else { Tcl_AppendResult(interp, "tag \"", argv[3], "\" doesn't match any items", (char *) NULL); goto error; } } RelinkItems(canvasPtr, argv[2], prevPtr); } else if ((c == 'm') && (strncmp(argv[1], "move", length) == 0)) { double xAmount, yAmount; if (argc != 5) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " move tagOrId xAmount yAmount\"", (char *) NULL); goto error; } if ((TkGetCanvasCoord(canvasPtr, argv[3], &xAmount) != TCL_OK) || (TkGetCanvasCoord(canvasPtr, argv[4], &yAmount) != TCL_OK)) { goto error; } for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); (void) (*itemPtr->typePtr->translateProc)(canvasPtr, itemPtr, xAmount, yAmount); EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); canvasPtr->flags |= REPICK_NEEDED; } } else if ((c == 'p') && (strncmp(argv[1], "postscript", length) == 0)) { result = TkCanvPostscriptCmd(canvasPtr, interp, argc, argv); } else if ((c == 'r') && (strncmp(argv[1], "raise", length) == 0)) { Tk_Item *prevPtr; if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " raise tagOrId ?aboveThis?\"", (char *) NULL); goto error; } /* * First find the item just after which we'll insert the * named items. */ if (argc == 3) { prevPtr = canvasPtr->lastItemPtr; } else { prevPtr = NULL; for (itemPtr = StartTagSearch(canvasPtr, argv[3], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { prevPtr = itemPtr; } if (prevPtr == NULL) { Tcl_AppendResult(interp, "tagOrId \"", argv[3], "\" doesn't match any items", (char *) NULL); goto error; } } RelinkItems(canvasPtr, argv[2], prevPtr); } else if ((c == 's') && (strncmp(argv[1], "scale", length) == 0) && (length >= 3)) { double xOrigin, yOrigin, xScale, yScale; if (argc != 7) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " scale tagOrId xOrigin yOrigin xScale yScale\"", (char *) NULL); goto error; } if ((TkGetCanvasCoord(canvasPtr, argv[3], &xOrigin) != TCL_OK) || (TkGetCanvasCoord(canvasPtr, argv[4], &yOrigin) != TCL_OK) || (Tcl_GetDouble(interp, argv[5], &xScale) != TCL_OK) || (Tcl_GetDouble(interp, argv[6], &yScale) != TCL_OK)) { goto error; } if ((xScale == 0.0) || (yScale == 0.0)) { interp->result = "scale factor cannot be zero"; goto error; } for (itemPtr = StartTagSearch(canvasPtr, argv[2], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); (void) (*itemPtr->typePtr->scaleProc)(canvasPtr, itemPtr, xOrigin, yOrigin, xScale, yScale); EventuallyRedrawArea(canvasPtr, itemPtr->x1, itemPtr->y1, itemPtr->x2, itemPtr->y2); canvasPtr->flags |= REPICK_NEEDED; } } else if ((c == 's') && (strncmp(argv[1], "scan", length) == 0) && (length >= 3)) { int x, y; if (argc != 5) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " scan mark|dragto x y\"", (char *) NULL); goto error; } if ((Tcl_GetInt(interp, argv[3], &x) != TCL_OK) || (Tcl_GetInt(interp, argv[4], &y) != TCL_OK)){ goto error; } if ((argv[2][0] == 'm') && (strncmp(argv[2], "mark", strlen(argv[2])) == 0)) { canvasPtr->scanX = x; canvasPtr->scanXOrigin = canvasPtr->xOrigin; canvasPtr->scanY = y; canvasPtr->scanYOrigin = canvasPtr->yOrigin; } else if ((argv[2][0] == 'd') && (strncmp(argv[2], "dragto", strlen(argv[2])) == 0)) { int newXOrigin, newYOrigin, tmp; /* * Compute a new view origin for the canvas, amplifying the * mouse motion and rounding to the nearest multiple of the * scroll increment. */ tmp = canvasPtr->scanXOrigin - 10*(x - canvasPtr->scanX) - canvasPtr->scrollX1; if (tmp >= 0) { tmp = (tmp + canvasPtr->scrollIncrement/2) /canvasPtr->scrollIncrement; } else { tmp = -(((-tmp) + canvasPtr->scrollIncrement/2) /canvasPtr->scrollIncrement); } newXOrigin = canvasPtr->scrollX1 + tmp*canvasPtr->scrollIncrement; tmp = canvasPtr->scanYOrigin - 10*(y - canvasPtr->scanY) - canvasPtr->scrollY1; if (tmp >= 0) { tmp = (tmp + canvasPtr->scrollIncrement/2) /canvasPtr->scrollIncrement; } else { tmp = -(((-tmp) + canvasPtr->scrollIncrement/2) /canvasPtr->scrollIncrement); } newYOrigin = canvasPtr->scrollY1 + tmp*canvasPtr->scrollIncrement; CanvasSetOrigin(canvasPtr, newXOrigin, newYOrigin); } else { Tcl_AppendResult(interp, "bad scan option \"", argv[2], "\": must be mark or dragto", (char *) NULL); goto error; } } else if ((c == 's') && (strncmp(argv[1], "select", length) == 0) && (length >= 2)) { int index; if (argc < 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " select option ?tagOrId? ?arg?\"", (char *) NULL); goto error; } if (argc >= 4) { for (itemPtr = StartTagSearch(canvasPtr, argv[3], &search); itemPtr != NULL; itemPtr = NextItem(&search)) { if ((itemPtr->typePtr->indexProc != NULL) && (itemPtr->typePtr->selectionProc != NULL)){ break; } } if (itemPtr == NULL) { Tcl_AppendResult(interp, "can't find an indexable and selectable item \"", argv[3], "\"", (char *) NULL); goto error; } } if (argc == 5) { if ((*itemPtr->typePtr->indexProc)(canvasPtr, itemPtr, argv[4], &index) != TCL_OK) { goto error; } } length = strlen(argv[2]); c = argv[2][0]; if ((c == 'a') && (strncmp(argv[2], "adjust", length) == 0)) { if (argc != 5) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " select adjust tagOrId index\"", (char *) NULL); goto error; } if (canvasPtr->selItemPtr == itemPtr) { if (index < (canvasPtr->selectFirst + canvasPtr->selectLast)/2) { canvasPtr->selectAnchor = canvasPtr->selectLast + 1; } else { canvasPtr->selectAnchor = canvasPtr->selectFirst; } } CanvasSelectTo(canvasPtr, itemPtr, index); } else if ((c == 'c') && (argv[2] != NULL) && (strncmp(argv[2], "clear", length) == 0)) { if (argc != 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " select clear\"", (char *) NULL); goto error; } if (canvasPtr->selItemPtr != NULL) { EventuallyRedrawArea(canvasPtr, canvasPtr->selItemPtr->x1, canvasPtr->selItemPtr->y1, canvasPtr->selItemPtr->x2, canvasPtr->selItemPtr->y2); canvasPtr->selItemPtr = NULL; } goto done; } else if ((c == 'f') && (strncmp(argv[2], "from", length) == 0)) { if (argc != 5) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " select from tagOrId index\"", (char *) NULL); goto error; } canvasPtr->anchorItemPtr = itemPtr; canvasPtr->selectAnchor = index; } else if ((c == 'i') && (strncmp(argv[2], "item", length) == 0)) { if (argc != 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " select item\"", (char *) NULL); goto error; } if (canvasPtr->selItemPtr != NULL) { sprintf(interp->result, "%d", canvasPtr->selItemPtr->id); } } else if ((c == 't') && (strncmp(argv[2], "to", length) == 0)) { if (argc != 5) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " select to tagOrId index\"", (char *) NULL); goto error; } CanvasSelectTo(canvasPtr, itemPtr, index); } else { Tcl_AppendResult(interp, "bad select option \"", argv[2], "\": must be adjust, clear, from, item, or to", (char *) NULL); goto error; } } else if ((c == 't') && (strncmp(argv[1], "type", length) == 0)) { if (argc != 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " type tag\"", (char *) NULL); goto error; } itemPtr = StartTagSearch(canvasPtr, argv[2], &search); if (itemPtr != NULL) { interp->result = itemPtr->typePtr->name; } } else if ((c == 'x') && (strncmp(argv[1], "xview", length) == 0)) { int index; if (argc != 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " xview index\"", (char *) NULL); goto error; } if (Tcl_GetInt(canvasPtr->interp, argv[2], &index) != TCL_OK) { goto error; } CanvasSetOrigin(canvasPtr, (canvasPtr->scrollX1 + index*canvasPtr->scrollIncrement), canvasPtr->yOrigin); } else if ((c == 'y') && (strncmp(argv[1], "yview", length) == 0)) { int index; if (argc != 3) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " yview index\"", (char *) NULL); goto error; } if (Tcl_GetInt(canvasPtr->interp, argv[2], &index) != TCL_OK) { goto error; } CanvasSetOrigin(canvasPtr, canvasPtr->xOrigin, (canvasPtr->scrollY1 + index*canvasPtr->scrollIncrement)); } else { Tcl_AppendResult(interp, "bad option \"", argv[1],
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -