• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/tcl-105/tk/tk/generic/

Lines Matching defs:canvasPtr

41     TkCanvas *canvasPtr;	/* Canvas widget being searched. */
71 TkCanvas *canvasPtr; /* Canvas widget being searched. */
253 static void CanvasDoEvent(TkCanvas *canvasPtr, XEvent *eventPtr);
258 static Tk_Item * CanvasFindClosest(TkCanvas *canvasPtr,
260 static void CanvasFocusProc(TkCanvas *canvasPtr, int gotFocus);
262 static void CanvasSelectTo(TkCanvas *canvasPtr,
264 static void CanvasSetOrigin(TkCanvas *canvasPtr,
266 static void CanvasUpdateScrollbars(TkCanvas *canvasPtr);
273 TkCanvas *canvasPtr, int argc,
282 static int FindItems(Tcl_Interp *interp, TkCanvas *canvasPtr,
286 static int FindItems(Tcl_Interp *interp, TkCanvas *canvasPtr,
291 static int FindArea(Tcl_Interp *interp, TkCanvas *canvasPtr,
299 static void PickCurrentItem(TkCanvas *canvasPtr, XEvent *eventPtr);
303 static void RelinkItems(TkCanvas *canvasPtr,
305 static Tk_Item * StartTagSearch(TkCanvas *canvasPtr,
308 static int RelinkItems(TkCanvas *canvasPtr, Tcl_Obj *tag,
313 static int TagSearchScan(TkCanvas *canvasPtr,
339 (itemPtr) = StartTagSearch(canvasPtr,(objPtr),&search)
341 for ((itemPtr) = StartTagSearch(canvasPtr, (objPtr), &search); \
345 if ((result=TagSearchScan(canvasPtr,(objPtr),(searchPtrPtr))) != TCL_OK){ \
350 if ((result=TagSearchScan(canvasPtr,(objPtr),(searchPtrPtr))) != TCL_OK){ \
384 TkCanvas *canvasPtr;
407 canvasPtr = (TkCanvas *) ckalloc(sizeof(TkCanvas));
408 canvasPtr->tkwin = newWin;
409 canvasPtr->display = Tk_Display(newWin);
410 canvasPtr->interp = interp;
411 canvasPtr->widgetCmd = Tcl_CreateObjCommand(interp,
412 Tk_PathName(canvasPtr->tkwin), CanvasWidgetCmd,
413 (ClientData) canvasPtr, CanvasCmdDeletedProc);
414 canvasPtr->firstItemPtr = NULL;
415 canvasPtr->lastItemPtr = NULL;
416 canvasPtr->borderWidth = 0;
417 canvasPtr->bgBorder = NULL;
418 canvasPtr->relief = TK_RELIEF_FLAT;
419 canvasPtr->highlightWidth = 0;
420 canvasPtr->highlightBgColorPtr = NULL;
421 canvasPtr->highlightColorPtr = NULL;
422 canvasPtr->inset = 0;
423 canvasPtr->pixmapGC = None;
424 canvasPtr->width = None;
425 canvasPtr->height = None;
426 canvasPtr->confine = 0;
427 canvasPtr->textInfo.selBorder = NULL;
428 canvasPtr->textInfo.selBorderWidth = 0;
429 canvasPtr->textInfo.selFgColorPtr = NULL;
430 canvasPtr->textInfo.selItemPtr = NULL;
431 canvasPtr->textInfo.selectFirst = -1;
432 canvasPtr->textInfo.selectLast = -1;
433 canvasPtr->textInfo.anchorItemPtr = NULL;
434 canvasPtr->textInfo.selectAnchor = 0;
435 canvasPtr->textInfo.insertBorder = NULL;
436 canvasPtr->textInfo.insertWidth = 0;
437 canvasPtr->textInfo.insertBorderWidth = 0;
438 canvasPtr->textInfo.focusItemPtr = NULL;
439 canvasPtr->textInfo.gotFocus = 0;
440 canvasPtr->textInfo.cursorOn = 0;
441 canvasPtr->insertOnTime = 0;
442 canvasPtr->insertOffTime = 0;
443 canvasPtr->insertBlinkHandler = (Tcl_TimerToken) NULL;
444 canvasPtr->xOrigin = canvasPtr->yOrigin = 0;
445 canvasPtr->drawableXOrigin = canvasPtr->drawableYOrigin = 0;
446 canvasPtr->bindingTable = NULL;
447 canvasPtr->currentItemPtr = NULL;
448 canvasPtr->newCurrentPtr = NULL;
449 canvasPtr->closeEnough = 0.0;
450 canvasPtr->pickEvent.type = LeaveNotify;
451 canvasPtr->pickEvent.xcrossing.x = 0;
452 canvasPtr->pickEvent.xcrossing.y = 0;
453 canvasPtr->state = 0;
454 canvasPtr->xScrollCmd = NULL;
455 canvasPtr->yScrollCmd = NULL;
456 canvasPtr->scrollX1 = 0;
457 canvasPtr->scrollY1 = 0;
458 canvasPtr->scrollX2 = 0;
459 canvasPtr->scrollY2 = 0;
460 canvasPtr->regionString = NULL;
461 canvasPtr->xScrollIncrement = 0;
462 canvasPtr->yScrollIncrement = 0;
463 canvasPtr->scanX = 0;
464 canvasPtr->scanXOrigin = 0;
465 canvasPtr->scanY = 0;
466 canvasPtr->scanYOrigin = 0;
467 canvasPtr->hotPtr = NULL;
468 canvasPtr->hotPrevPtr = NULL;
469 canvasPtr->cursor = None;
470 canvasPtr->takeFocus = NULL;
471 canvasPtr->pixelsPerMM = WidthOfScreen(Tk_Screen(newWin));
472 canvasPtr->pixelsPerMM /= WidthMMOfScreen(Tk_Screen(newWin));
473 canvasPtr->flags = 0;
474 canvasPtr->nextId = 1;
475 canvasPtr->psInfo = NULL;
476 canvasPtr->canvas_state = TK_STATE_NORMAL;
477 canvasPtr->tsoffset.flags = 0;
478 canvasPtr->tsoffset.xoffset = 0;
479 canvasPtr->tsoffset.yoffset = 0;
481 canvasPtr->bindTagExprs = NULL;
483 Tcl_InitHashTable(&canvasPtr->idTable, TCL_ONE_WORD_KEYS);
485 Tk_SetClass(canvasPtr->tkwin, "Canvas");
486 Tk_SetClassProcs(canvasPtr->tkwin, &canvasClass, (ClientData) canvasPtr);
487 Tk_CreateEventHandler(canvasPtr->tkwin,
489 CanvasEventProc, (ClientData) canvasPtr);
490 Tk_CreateEventHandler(canvasPtr->tkwin, KeyPressMask|KeyReleaseMask
493 CanvasBindProc, (ClientData) canvasPtr);
494 Tk_CreateSelHandler(canvasPtr->tkwin, XA_PRIMARY, XA_STRING,
495 CanvasFetchSelection, (ClientData) canvasPtr, XA_STRING);
496 if (ConfigureCanvas(interp, canvasPtr, argc-2, argv+2, 0) != TCL_OK) {
500 Tcl_SetResult(interp, Tk_PathName(canvasPtr->tkwin), TCL_STATIC);
504 Tk_DestroyWindow(canvasPtr->tkwin);
534 TkCanvas *canvasPtr = (TkCanvas *) clientData;
576 Tcl_Preserve((ClientData) canvasPtr);
587 result = FindItems(interp, canvasPtr, objc, objv, objv[2], 3);
589 result = FindItems(interp, canvasPtr, objc, objv, objv[2], 3, &searchPtr);
666 entryPtr = Tcl_FindHashEntry(&canvasPtr->idTable, (char *) id);
683 result = TagSearchScan(canvasPtr, objv[2], &searchPtr);
690 entryPtr = Tcl_FindHashEntry(&canvasPtr->idTable,
712 if (canvasPtr->bindingTable == NULL) {
713 canvasPtr->bindingTable = Tk_CreateBindingTable(interp);
722 result = Tk_DeleteBinding(interp, canvasPtr->bindingTable,
734 lastPtr = &(canvasPtr->bindTagExprs);
762 mask = Tk_CreateBinding(interp, canvasPtr->bindingTable,
773 Tk_DeleteBinding(interp, canvasPtr->bindingTable,
785 command = Tk_GetBinding(interp, canvasPtr->bindingTable,
808 Tk_GetAllBindings(interp, canvasPtr->bindingTable, object);
822 if (Tk_GetPixelsFromObj(interp, canvasPtr->tkwin, objv[2], &x) != TCL_OK) {
827 if (Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[3],
835 x += canvasPtr->xOrigin;
850 if (Tk_GetPixelsFromObj(interp, canvasPtr->tkwin, objv[2], &y) != TCL_OK) {
855 if (Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr,
863 y += canvasPtr->yOrigin;
874 result = Tk_ConfigureValue(interp, canvasPtr->tkwin, configSpecs,
875 (char *) canvasPtr, Tcl_GetString(objv[2]), 0);
879 result = Tk_ConfigureInfo(interp, canvasPtr->tkwin, configSpecs,
880 (char *) canvasPtr, NULL, 0);
882 result = Tk_ConfigureInfo(interp, canvasPtr->tkwin, configSpecs,
883 (char *) canvasPtr, Tcl_GetString(objv[2]), 0);
885 result = ConfigureCanvas(interp, canvasPtr, objc-2, objv+2,
898 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
903 (Tk_Canvas) canvasPtr, itemPtr, objc-3, objv+3);
907 (Tk_Canvas) canvasPtr, itemPtr, objc-3,
915 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
970 itemPtr->id = canvasPtr->nextId;
971 canvasPtr->nextId++;
979 result = (*typePtr->createProc)(interp, (Tk_Canvas) canvasPtr,
983 result = (*typePtr->createProc)(interp, (Tk_Canvas) canvasPtr,
995 entryPtr = Tcl_CreateHashEntry(&canvasPtr->idTable,
998 itemPtr->prevPtr = canvasPtr->lastItemPtr;
999 canvasPtr->hotPtr = itemPtr;
1000 canvasPtr->hotPrevPtr = canvasPtr->lastItemPtr;
1001 if (canvasPtr->lastItemPtr == NULL) {
1002 canvasPtr->firstItemPtr = itemPtr;
1004 canvasPtr->lastItemPtr->nextPtr = itemPtr;
1006 canvasPtr->lastItemPtr = itemPtr;
1008 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1009 canvasPtr->flags |= REPICK_NEEDED;
1030 (Tk_Canvas) canvasPtr, itemPtr, (char *) objv[3],
1034 (Tk_Canvas) canvasPtr, itemPtr, Tcl_GetString(objv[3]),
1043 (Tk_Canvas) canvasPtr, itemPtr, (char *) objv[4],
1047 (Tk_Canvas) canvasPtr, itemPtr,
1067 (*itemPtr->typePtr->dCharsProc)((Tk_Canvas) canvasPtr,
1070 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,
1072 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1084 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1085 if (canvasPtr->bindingTable != NULL) {
1086 Tk_DeleteAllBindings(canvasPtr->bindingTable,
1089 (*itemPtr->typePtr->deleteProc)((Tk_Canvas) canvasPtr, itemPtr,
1090 canvasPtr->display);
1094 entryPtr = Tcl_FindHashEntry(&canvasPtr->idTable,
1103 if (canvasPtr->firstItemPtr == itemPtr) {
1104 canvasPtr->firstItemPtr = itemPtr->nextPtr;
1105 if (canvasPtr->firstItemPtr == NULL) {
1106 canvasPtr->lastItemPtr = NULL;
1109 if (canvasPtr->lastItemPtr == itemPtr) {
1110 canvasPtr->lastItemPtr = itemPtr->prevPtr;
1113 if (itemPtr == canvasPtr->currentItemPtr) {
1114 canvasPtr->currentItemPtr = NULL;
1115 canvasPtr->flags |= REPICK_NEEDED;
1117 if (itemPtr == canvasPtr->newCurrentPtr) {
1118 canvasPtr->newCurrentPtr = NULL;
1119 canvasPtr->flags |= REPICK_NEEDED;
1121 if (itemPtr == canvasPtr->textInfo.focusItemPtr) {
1122 canvasPtr->textInfo.focusItemPtr = NULL;
1124 if (itemPtr == canvasPtr->textInfo.selItemPtr) {
1125 canvasPtr->textInfo.selItemPtr = NULL;
1127 if ((itemPtr == canvasPtr->hotPtr)
1128 || (itemPtr == canvasPtr->hotPrevPtr)) {
1129 canvasPtr->hotPtr = NULL;
1166 result = FindItems(interp, canvasPtr, objc, objv, NULL, 2);
1168 result = FindItems(interp, canvasPtr, objc, objv, NULL, 2,
1178 itemPtr = canvasPtr->textInfo.focusItemPtr;
1188 if ((itemPtr != NULL) && (canvasPtr->textInfo.gotFocus)) {
1189 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1192 canvasPtr->textInfo.focusItemPtr = NULL;
1203 canvasPtr->textInfo.focusItemPtr = itemPtr;
1204 if (canvasPtr->textInfo.gotFocus) {
1205 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1237 (Tk_Canvas) canvasPtr, itemPtr, (char *) objv[3],
1241 (Tk_Canvas) canvasPtr, itemPtr, Tcl_GetString(objv[3]),
1247 (*itemPtr->typePtr->icursorProc)((Tk_Canvas) canvasPtr, itemPtr,
1249 if ((itemPtr == canvasPtr->textInfo.focusItemPtr)
1250 && (canvasPtr->textInfo.cursorOn)) {
1251 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1277 result = itemPtr->typePtr->indexProc(interp, (Tk_Canvas) canvasPtr,
1280 result = itemPtr->typePtr->indexProc(interp, (Tk_Canvas) canvasPtr,
1306 (Tk_Canvas) canvasPtr, itemPtr, (char *) objv[3],
1310 (Tk_Canvas) canvasPtr, itemPtr, Tcl_GetString(objv[3]),
1328 (*itemPtr->typePtr->insertProc)((Tk_Canvas) canvasPtr,
1331 (*itemPtr->typePtr->insertProc)((Tk_Canvas) canvasPtr,
1335 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,
1337 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1351 result = Tk_ConfigureValue(canvasPtr->interp, canvasPtr->tkwin,
1364 result = Tk_ConfigureInfo(canvasPtr->interp, canvasPtr->tkwin,
1368 result = Tk_ConfigureInfo(canvasPtr->interp, canvasPtr->tkwin,
1372 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1375 (Tk_Canvas) canvasPtr, itemPtr, objc-3, objv+3,
1380 (Tk_Canvas) canvasPtr, itemPtr, objc-3,
1386 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1387 canvasPtr->flags |= REPICK_NEEDED;
1419 RelinkItems(canvasPtr, objv[2], itemPtr);
1421 result = RelinkItems(canvasPtr, objv[2], itemPtr, &searchPtr);
1433 if ((Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[3],
1435 (Tk_Canvas) canvasPtr, objv[4], &yAmount) != TCL_OK)) {
1440 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1441 (void) (*itemPtr->typePtr->translateProc)((Tk_Canvas) canvasPtr,
1443 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1444 canvasPtr->flags |= REPICK_NEEDED;
1451 result = TkCanvPostscriptCmd(canvasPtr, interp, objc, args);
1471 prevPtr = canvasPtr->lastItemPtr;
1485 RelinkItems(canvasPtr, objv[2], prevPtr);
1487 result = RelinkItems(canvasPtr, objv[2], prevPtr, &searchPtr);
1499 if ((Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr,
1501 || (Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr,
1514 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1515 (void) (*itemPtr->typePtr->scaleProc)((Tk_Canvas) canvasPtr,
1517 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
1518 canvasPtr->flags |= REPICK_NEEDED;
1544 canvasPtr->scanX = x;
1545 canvasPtr->scanXOrigin = canvasPtr->xOrigin;
1546 canvasPtr->scanY = y;
1547 canvasPtr->scanYOrigin = canvasPtr->yOrigin;
1556 tmp = canvasPtr->scanXOrigin - gain*(x - canvasPtr->scanX)
1557 - canvasPtr->scrollX1;
1558 newXOrigin = canvasPtr->scrollX1 + tmp;
1559 tmp = canvasPtr->scanYOrigin - gain*(y - canvasPtr->scanY)
1560 - canvasPtr->scrollY1;
1561 newYOrigin = canvasPtr->scrollY1 + tmp;
1562 CanvasSetOrigin(canvasPtr, newXOrigin, newYOrigin);
1598 (Tk_Canvas) canvasPtr, itemPtr, (char *) objv[4],
1602 (Tk_Canvas) canvasPtr, itemPtr, Tcl_GetString(objv[4]),
1621 if (canvasPtr->textInfo.selItemPtr == itemPtr) {
1622 if (index < (canvasPtr->textInfo.selectFirst
1623 + canvasPtr->textInfo.selectLast)/2) {
1624 canvasPtr->textInfo.selectAnchor =
1625 canvasPtr->textInfo.selectLast + 1;
1627 canvasPtr->textInfo.selectAnchor =
1628 canvasPtr->textInfo.selectFirst;
1631 CanvasSelectTo(canvasPtr, itemPtr, index);
1639 if (canvasPtr->textInfo.selItemPtr != NULL) {
1640 EventuallyRedrawItem((Tk_Canvas) canvasPtr,
1641 canvasPtr->textInfo.selItemPtr);
1642 canvasPtr->textInfo.selItemPtr = NULL;
1652 canvasPtr->textInfo.anchorItemPtr = itemPtr;
1653 canvasPtr->textInfo.selectAnchor = index;
1661 if (canvasPtr->textInfo.selItemPtr != NULL) {
1663 Tcl_NewIntObj(canvasPtr->textInfo.selItemPtr->id));
1672 CanvasSelectTo(canvasPtr, itemPtr, index);
1696 canvasPtr->xOrigin + canvasPtr->inset,
1697 canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin)
1698 - canvasPtr->inset, canvasPtr->scrollX1,
1699 canvasPtr->scrollX2));
1711 newX = canvasPtr->scrollX1 - canvasPtr->inset
1712 + (int) (fraction * (canvasPtr->scrollX2
1713 - canvasPtr->scrollX1) + 0.5);
1716 newX = (int) (canvasPtr->xOrigin + count * .9
1717 * (Tk_Width(canvasPtr->tkwin) - 2*canvasPtr->inset));
1720 if (canvasPtr->xScrollIncrement > 0) {
1721 newX = canvasPtr->xOrigin
1722 + count*canvasPtr->xScrollIncrement;
1724 newX = (int) (canvasPtr->xOrigin + count * .1
1725 * (Tk_Width(canvasPtr->tkwin)
1726 - 2*canvasPtr->inset));
1730 CanvasSetOrigin(canvasPtr, newX, canvasPtr->yOrigin);
1742 canvasPtr->yOrigin + canvasPtr->inset,
1743 canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin)
1744 - canvasPtr->inset,
1745 canvasPtr->scrollY1, canvasPtr->scrollY2));
1757 newY = canvasPtr->scrollY1 - canvasPtr->inset
1758 + (int) (fraction*(canvasPtr->scrollY2
1759 - canvasPtr->scrollY1) + 0.5);
1762 newY = (int) (canvasPtr->yOrigin + count * .9
1763 * (Tk_Height(canvasPtr->tkwin)
1764 - 2*canvasPtr->inset));
1767 if (canvasPtr->yScrollIncrement > 0) {
1768 newY = canvasPtr->yOrigin
1769 + count*canvasPtr->yScrollIncrement;
1771 newY = (int) (canvasPtr->yOrigin + count * .1
1772 * (Tk_Height(canvasPtr->tkwin)
1773 - 2*canvasPtr->inset));
1777 CanvasSetOrigin(canvasPtr, canvasPtr->xOrigin, newY);
1787 Tcl_Release((ClientData) canvasPtr);
1814 TkCanvas *canvasPtr = (TkCanvas *) memPtr;
1824 for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
1825 itemPtr = canvasPtr->firstItemPtr) {
1826 canvasPtr->firstItemPtr = itemPtr->nextPtr;
1827 (*itemPtr->typePtr->deleteProc)((Tk_Canvas) canvasPtr, itemPtr,
1828 canvasPtr->display);
1840 Tcl_DeleteHashTable(&canvasPtr->idTable);
1841 if (canvasPtr->pixmapGC != None) {
1842 Tk_FreeGC(canvasPtr->display, canvasPtr->pixmapGC);
1845 expr = canvasPtr->bindTagExprs;
1852 Tcl_DeleteTimerHandler(canvasPtr->insertBlinkHandler);
1853 if (canvasPtr->bindingTable != NULL) {
1854 Tk_DeleteBindingTable(canvasPtr->bindingTable);
1856 Tk_FreeOptions(configSpecs, (char *) canvasPtr, canvasPtr->display, 0);
1857 canvasPtr->tkwin = NULL;
1858 ckfree((char *) canvasPtr);
1877 * for canvasPtr; old resources get freed, if there were any.
1885 TkCanvas *canvasPtr, /* Information about widget; may or may not
1893 Tk_State old_canvas_state=canvasPtr->canvas_state;
1895 if (Tk_ConfigureWidget(interp, canvasPtr->tkwin, configSpecs,
1896 objc, (CONST char **) objv, (char *) canvasPtr,
1906 Tk_SetBackgroundFromBorder(canvasPtr->tkwin, canvasPtr->bgBorder);
1908 if (canvasPtr->highlightWidth < 0) {
1909 canvasPtr->highlightWidth = 0;
1911 canvasPtr->inset = canvasPtr->borderWidth + canvasPtr->highlightWidth;
1915 gcValues.foreground = Tk_3DBorderColor(canvasPtr->bgBorder)->pixel;
1916 newGC = Tk_GetGC(canvasPtr->tkwin,
1918 if (canvasPtr->pixmapGC != None) {
1919 Tk_FreeGC(canvasPtr->display, canvasPtr->pixmapGC);
1921 canvasPtr->pixmapGC = newGC;
1927 if ( old_canvas_state != canvasPtr->canvas_state ) {
1931 for ( itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
1934 result = (*itemPtr->typePtr->configProc)(canvasPtr->interp,
1935 (Tk_Canvas) canvasPtr, itemPtr, 0, NULL,
1938 Tcl_ResetResult(canvasPtr->interp);
1948 Tk_GeometryRequest(canvasPtr->tkwin, canvasPtr->width + 2*canvasPtr->inset,
1949 canvasPtr->height + 2*canvasPtr->inset);
1956 if (canvasPtr->textInfo.gotFocus) {
1957 CanvasFocusProc(canvasPtr, 1);
1964 canvasPtr->scrollX1 = 0;
1965 canvasPtr->scrollY1 = 0;
1966 canvasPtr->scrollX2 = 0;
1967 canvasPtr->scrollY2 = 0;
1968 if (canvasPtr->regionString != NULL) {
1972 if (Tcl_SplitList(canvasPtr->interp, canvasPtr->regionString,
1978 canvasPtr->regionString, "\"", NULL);
1980 ckfree(canvasPtr->regionString);
1982 canvasPtr->regionString = NULL;
1985 if ((Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,
1986 argv2[0], &canvasPtr->scrollX1) != TCL_OK)
1987 || (Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,
1988 argv2[1], &canvasPtr->scrollY1) != TCL_OK)
1989 || (Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,
1990 argv2[2], &canvasPtr->scrollX2) != TCL_OK)
1991 || (Tk_GetPixels(canvasPtr->interp, canvasPtr->tkwin,
1992 argv2[3], &canvasPtr->scrollY2) != TCL_OK)) {
1998 flags = canvasPtr->tsoffset.flags;
2000 canvasPtr->tsoffset.xoffset = 0;
2002 canvasPtr->tsoffset.xoffset = canvasPtr->width/2;
2004 canvasPtr->tsoffset.xoffset = canvasPtr->width;
2007 canvasPtr->tsoffset.yoffset = 0;
2009 canvasPtr->tsoffset.yoffset = canvasPtr->height/2;
2011 canvasPtr->tsoffset.yoffset = canvasPtr->height;
2019 CanvasSetOrigin(canvasPtr, canvasPtr->xOrigin, canvasPtr->yOrigin);
2020 canvasPtr->flags |= UPDATE_SCROLLBARS|REDRAW_BORDERS;
2021 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,
2022 canvasPtr->xOrigin, canvasPtr->yOrigin,
2023 canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin),
2024 canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin));
2053 TkCanvas *canvasPtr;
2057 canvasPtr = (TkCanvas *) instanceData;
2058 itemPtr = canvasPtr->firstItemPtr;
2060 result = (*itemPtr->typePtr->configProc)(canvasPtr->interp,
2061 (Tk_Canvas) canvasPtr, itemPtr, 0, NULL,
2064 Tcl_ResetResult(canvasPtr->interp);
2067 canvasPtr->flags |= REPICK_NEEDED;
2068 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,
2069 canvasPtr->xOrigin, canvasPtr->yOrigin,
2070 canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin),
2071 canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin));
2097 TkCanvas *canvasPtr = (TkCanvas *) clientData;
2098 Tk_Window tkwin = canvasPtr->tkwin;
2103 if (canvasPtr->tkwin == NULL) {
2116 while (canvasPtr->flags & REPICK_NEEDED) {
2117 Tcl_Preserve((ClientData) canvasPtr);
2118 canvasPtr->flags &= ~REPICK_NEEDED;
2119 PickCurrentItem(canvasPtr, &canvasPtr->pickEvent);
2120 tkwin = canvasPtr->tkwin;
2121 Tcl_Release((ClientData) canvasPtr);
2133 for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
2137 EventuallyRedrawItem((Tk_Canvas)canvasPtr, itemPtr);
2146 if ((canvasPtr->redrawX1 < canvasPtr->redrawX2)
2147 && (canvasPtr->redrawY1 < canvasPtr->redrawY2)) {
2148 screenX1 = canvasPtr->xOrigin + canvasPtr->inset;
2149 screenY1 = canvasPtr->yOrigin + canvasPtr->inset;
2150 screenX2 = canvasPtr->xOrigin + Tk_Width(tkwin) - canvasPtr->inset;
2151 screenY2 = canvasPtr->yOrigin + Tk_Height(tkwin) - canvasPtr->inset;
2152 if (canvasPtr->redrawX1 > screenX1) {
2153 screenX1 = canvasPtr->redrawX1;
2155 if (canvasPtr->redrawY1 > screenY1) {
2156 screenY1 = canvasPtr->redrawY1;
2158 if (canvasPtr->redrawX2 < screenX2) {
2159 screenX2 = canvasPtr->redrawX2;
2161 if (canvasPtr->redrawY2 < screenY2) {
2162 screenY2 = canvasPtr->redrawY2;
2200 canvasPtr->drawableXOrigin = screenX1 - 30;
2201 canvasPtr->drawableYOrigin = screenY1 - 30;
2203 (screenX2 + 30 - canvasPtr->drawableXOrigin),
2204 (screenY2 + 30 - canvasPtr->drawableYOrigin),
2207 canvasPtr->drawableXOrigin = canvasPtr->xOrigin;
2208 canvasPtr->drawableYOrigin = canvasPtr->yOrigin;
2211 screenX1 - canvasPtr->xOrigin, screenY1 - canvasPtr->yOrigin,
2219 XFillRectangle(Tk_Display(tkwin), pixmap, canvasPtr->pixmapGC,
2220 screenX1 - canvasPtr->drawableXOrigin,
2221 screenY1 - canvasPtr->drawableYOrigin, (unsigned int) width,
2232 for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
2239 || (itemPtr->x1 >= canvasPtr->redrawX2)
2240 || (itemPtr->y1 >= canvasPtr->redrawY2)
2241 || (itemPtr->x2 < canvasPtr->redrawX1)
2242 || (itemPtr->y2 < canvasPtr->redrawY1)) {
2248 canvasPtr->canvas_state == TK_STATE_HIDDEN)) {
2251 (*itemPtr->typePtr->displayProc)((Tk_Canvas) canvasPtr, itemPtr,
2252 canvasPtr->display, pixmap, screenX1, screenY1, width,
2263 canvasPtr->pixmapGC,
2264 screenX1 - canvasPtr->drawableXOrigin,
2265 screenY1 - canvasPtr->drawableYOrigin,
2267 screenX1 - canvasPtr->xOrigin, screenY1 - canvasPtr->yOrigin);
2279 if (canvasPtr->flags & REDRAW_BORDERS) {
2280 canvasPtr->flags &= ~REDRAW_BORDERS;
2281 if (canvasPtr->borderWidth > 0) {
2283 canvasPtr->bgBorder, canvasPtr->highlightWidth,
2284 canvasPtr->highlightWidth,
2285 Tk_Width(tkwin) - 2*canvasPtr->highlightWidth,
2286 Tk_Height(tkwin) - 2*canvasPtr->highlightWidth,
2287 canvasPtr->borderWidth, canvasPtr->relief);
2289 if (canvasPtr->highlightWidth != 0) {
2292 bgGC = Tk_GCForColor(canvasPtr->highlightBgColorPtr,
2294 if (canvasPtr->textInfo.gotFocus) {
2295 fgGC = Tk_GCForColor(canvasPtr->highlightColorPtr,
2298 canvasPtr->highlightWidth, Tk_WindowId(tkwin));
2301 canvasPtr->highlightWidth, Tk_WindowId(tkwin));
2307 canvasPtr->flags &= ~(REDRAW_PENDING|BBOX_NOT_EMPTY);
2308 canvasPtr->redrawX1 = canvasPtr->redrawX2 = 0;
2309 canvasPtr->redrawY1 = canvasPtr->redrawY2 = 0;
2310 if (canvasPtr->flags & UPDATE_SCROLLBARS) {
2311 CanvasUpdateScrollbars(canvasPtr);
2339 TkCanvas *canvasPtr = (TkCanvas *) clientData;
2344 x = eventPtr->xexpose.x + canvasPtr->xOrigin;
2345 y = eventPtr->xexpose.y + canvasPtr->yOrigin;
2346 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr, x, y,
2349 if ((eventPtr->xexpose.x < canvasPtr->inset)
2350 || (eventPtr->xexpose.y < canvasPtr->inset)
2352 > (Tk_Width(canvasPtr->tkwin) - canvasPtr->inset))
2354 > (Tk_Height(canvasPtr->tkwin) - canvasPtr->inset))) {
2355 canvasPtr->flags |= REDRAW_BORDERS;
2358 if (canvasPtr->tkwin != NULL) {
2359 canvasPtr->tkwin = NULL;
2360 Tcl_DeleteCommandFromToken(canvasPtr->interp,
2361 canvasPtr->widgetCmd);
2363 if (canvasPtr->flags & REDRAW_PENDING) {
2364 Tcl_CancelIdleCall(DisplayCanvas, (ClientData) canvasPtr);
2366 Tcl_EventuallyFree((ClientData) canvasPtr,
2369 canvasPtr->flags |= UPDATE_SCROLLBARS;
2376 CanvasSetOrigin(canvasPtr, canvasPtr->xOrigin, canvasPtr->yOrigin);
2377 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr, canvasPtr->xOrigin,
2378 canvasPtr->yOrigin,
2379 canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin),
2380 canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin));
2381 canvasPtr->flags |= REDRAW_BORDERS;
2384 CanvasFocusProc(canvasPtr, 1);
2388 CanvasFocusProc(canvasPtr, 0);
2399 for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
2402 (*itemPtr->typePtr->displayProc)((Tk_Canvas) canvasPtr,
2403 itemPtr, canvasPtr->display, None, 0, 0, 0, 0);
2432 TkCanvas *canvasPtr = (TkCanvas *) clientData;
2433 Tk_Window tkwin = canvasPtr->tkwin;
2443 canvasPtr->tkwin = NULL;
2474 TkCanvas *canvasPtr = (TkCanvas *) canvas;
2481 if (canvasPtr->tkwin == NULL) {
2486 (x2 < canvasPtr->xOrigin) || (y2 < canvasPtr->yOrigin) ||
2487 (x1 >= canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin)) ||
2488 (y1 >= canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin))) {
2491 if (canvasPtr->flags & BBOX_NOT_EMPTY) {
2492 if (x1 <= canvasPtr->redrawX1) {
2493 canvasPtr->redrawX1 = x1;
2495 if (y1 <= canvasPtr->redrawY1) {
2496 canvasPtr->redrawY1 = y1;
2498 if (x2 >= canvasPtr->redrawX2) {
2499 canvasPtr->redrawX2 = x2;
2501 if (y2 >= canvasPtr->redrawY2) {
2502 canvasPtr->redrawY2 = y2;
2505 canvasPtr->redrawX1 = x1;
2506 canvasPtr->redrawY1 = y1;
2507 canvasPtr->redrawX2 = x2;
2508 canvasPtr->redrawY2 = y2;
2509 canvasPtr->flags |= BBOX_NOT_EMPTY;
2511 if (!(canvasPtr->flags & REDRAW_PENDING)) {
2512 Tcl_DoWhenIdle(DisplayCanvas, (ClientData) canvasPtr);
2513 canvasPtr->flags |= REDRAW_PENDING;
2540 TkCanvas *canvasPtr = (TkCanvas *) canvas;
2542 (itemPtr->x2 < canvasPtr->xOrigin) ||
2543 (itemPtr->y2 < canvasPtr->yOrigin) ||
2544 (itemPtr->x1 >= canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin)) ||
2545 (itemPtr->y1 >= canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin))) {
2551 if (canvasPtr->flags & BBOX_NOT_EMPTY) {
2552 if (itemPtr->x1 <= canvasPtr->redrawX1) {
2553 canvasPtr->redrawX1 = itemPtr->x1;
2555 if (itemPtr->y1 <= canvasPtr->redrawY1) {
2556 canvasPtr->redrawY1 = itemPtr->y1;
2558 if (itemPtr->x2 >= canvasPtr->redrawX2) {
2559 canvasPtr->redrawX2 = itemPtr->x2;
2561 if (itemPtr->y2 >= canvasPtr->redrawY2) {
2562 canvasPtr->redrawY2 = itemPtr->y2;
2565 canvasPtr->redrawX1 = itemPtr->x1;
2566 canvasPtr->redrawY1 = itemPtr->y1;
2567 canvasPtr->redrawX2 = itemPtr->x2;
2568 canvasPtr->redrawY2 = itemPtr->y2;
2569 canvasPtr->flags |= BBOX_NOT_EMPTY;
2573 if (!(canvasPtr->flags & REDRAW_PENDING)) {
2574 Tcl_DoWhenIdle(DisplayCanvas, (ClientData) canvasPtr);
2575 canvasPtr->flags |= REDRAW_PENDING;
2713 * The return value is a pointer to the first item in canvasPtr that
2719 * SearchPtr is linked into a list of searches in progress on canvasPtr,
2729 TkCanvas *canvasPtr, /* Canvas whose items are to be searched. */
2743 tkwin = (TkWindow *) canvasPtr->tkwin;
2750 searchPtr->canvasPtr = canvasPtr;
2767 itemPtr = canvasPtr->hotPtr;
2768 lastPtr = canvasPtr->hotPrevPtr;
2772 entryPtr = Tcl_FindHashEntry(&canvasPtr->idTable, (char *) id);
2782 canvasPtr->hotPtr = itemPtr;
2783 canvasPtr->hotPrevPtr = lastPtr;
2796 searchPtr->currentPtr = canvasPtr->firstItemPtr;
2797 return canvasPtr->firstItemPtr;
2804 for (lastPtr = NULL, itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
2858 itemPtr = searchPtr->canvasPtr->firstItemPtr;
3026 * SearchPtr is linked into a list of searches in progress on canvasPtr,
3035 TkCanvas *canvasPtr, /* Canvas whose items are to be searched. */
3089 searchPtr->canvasPtr = canvasPtr;
3159 if (TagSearchScanExpr(canvasPtr->interp, searchPtr,
3641 * SearchPtr is linked into a list of searches in progress on canvasPtr,
3674 itemPtr = searchPtr->canvasPtr->hotPtr;
3675 lastPtr = searchPtr->canvasPtr->hotPrevPtr;
3678 entryPtr = Tcl_FindHashEntry(&searchPtr->canvasPtr->idTable,
3689 searchPtr->canvasPtr->hotPtr = itemPtr;
3690 searchPtr->canvasPtr->hotPrevPtr = lastPtr;
3700 searchPtr->currentPtr = searchPtr->canvasPtr->firstItemPtr;
3701 return searchPtr->canvasPtr->firstItemPtr;
3710 for (lastPtr = NULL, itemPtr = searchPtr->canvasPtr->firstItemPtr;
3727 for (lastPtr = NULL, itemPtr = searchPtr->canvasPtr->firstItemPtr;
3779 itemPtr = searchPtr->canvasPtr->firstItemPtr;
3952 TkCanvas *canvasPtr, /* Canvas whose items are to be searched. */
4017 for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
4046 if ((Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[first+1],
4048 (Tk_Canvas) canvasPtr, objv[first+2], &coords[1]) != TCL_OK)) {
4052 if (Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[first+3],
4069 startPtr = canvasPtr->firstItemPtr;
4089 canvasPtr->canvas_state == TK_STATE_HIDDEN))) {
4095 closestDist = (*itemPtr->typePtr->pointProc)((Tk_Canvas) canvasPtr,
4123 itemPtr = canvasPtr->firstItemPtr;
4131 canvasPtr->canvas_state == TK_STATE_HIDDEN)) {
4138 newDist = (*itemPtr->typePtr->pointProc)((Tk_Canvas) canvasPtr,
4156 return FindArea(interp, canvasPtr, objv+first+1, uid, 1);
4162 return FindArea(interp, canvasPtr, objv+first+1, uid, 0);
4203 TkCanvas *canvasPtr, /* Canvas whose items are to be searched. */
4218 if ((Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[0],
4220 || (Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[1],
4222 || (Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[2],
4224 || (Tk_CanvasGetCoordFromObj(interp, (Tk_Canvas) canvasPtr, objv[3],
4244 for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
4247 canvasPtr->canvas_state == TK_STATE_HIDDEN)) {
4254 if ((*itemPtr->typePtr->areaProc)((Tk_Canvas) canvasPtr, itemPtr, rect)
4285 TkCanvas *canvasPtr, /* Canvas to be modified. */
4294 TkCanvas *canvasPtr, /* Canvas to be modified. */
4330 canvasPtr->firstItemPtr = itemPtr->nextPtr;
4337 if (canvasPtr->lastItemPtr == itemPtr) {
4338 canvasPtr->lastItemPtr = itemPtr->prevPtr;
4348 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
4349 canvasPtr->flags |= REPICK_NEEDED;
4365 if (canvasPtr->firstItemPtr != NULL) {
4366 canvasPtr->firstItemPtr->prevPtr = lastMovePtr;
4368 lastMovePtr->nextPtr = canvasPtr->firstItemPtr;
4369 canvasPtr->firstItemPtr = firstMovePtr;
4380 if (canvasPtr->lastItemPtr == prevPtr) {
4381 canvasPtr->lastItemPtr = lastMovePtr;
4412 TkCanvas *canvasPtr = (TkCanvas *) clientData;
4414 Tcl_Preserve((ClientData) canvasPtr);
4418 * canvasPtr>state. This information is used to defer repicks of the
4460 canvasPtr->state = eventPtr->xbutton.state;
4461 PickCurrentItem(canvasPtr, eventPtr);
4462 canvasPtr->state ^= mask;
4463 CanvasDoEvent(canvasPtr, eventPtr);
4471 canvasPtr->state = eventPtr->xbutton.state;
4472 CanvasDoEvent(canvasPtr, eventPtr);
4474 canvasPtr->state = eventPtr->xbutton.state;
4475 PickCurrentItem(canvasPtr, eventPtr);
4481 canvasPtr->state = eventPtr->xcrossing.state;
4482 PickCurrentItem(canvasPtr, eventPtr);
4485 canvasPtr->state = eventPtr->xmotion.state;
4486 PickCurrentItem(canvasPtr, eventPtr);
4488 CanvasDoEvent(canvasPtr, eventPtr);
4491 Tcl_Release((ClientData) canvasPtr);
4510 * The current item for canvasPtr may change. If it does, then the
4520 TkCanvas *canvasPtr, /* Canvas widget in which to select current
4540 buttonDown = canvasPtr->state
4556 if (eventPtr != &canvasPtr->pickEvent) {
4559 canvasPtr->pickEvent.xcrossing.type = EnterNotify;
4560 canvasPtr->pickEvent.xcrossing.serial = eventPtr->xmotion.serial;
4561 canvasPtr->pickEvent.xcrossing.send_event
4563 canvasPtr->pickEvent.xcrossing.display = eventPtr->xmotion.display;
4564 canvasPtr->pickEvent.xcrossing.window = eventPtr->xmotion.window;
4565 canvasPtr->pickEvent.xcrossing.root = eventPtr->xmotion.root;
4566 canvasPtr->pickEvent.xcrossing.subwindow = None;
4567 canvasPtr->pickEvent.xcrossing.time = eventPtr->xmotion.time;
4568 canvasPtr->pickEvent.xcrossing.x = eventPtr->xmotion.x;
4569 canvasPtr->pickEvent.xcrossing.y = eventPtr->xmotion.y;
4570 canvasPtr->pickEvent.xcrossing.x_root = eventPtr->xmotion.x_root;
4571 canvasPtr->pickEvent.xcrossing.y_root = eventPtr->xmotion.y_root;
4572 canvasPtr->pickEvent.xcrossing.mode = NotifyNormal;
4573 canvasPtr->pickEvent.xcrossing.detail = NotifyNonlinear;
4574 canvasPtr->pickEvent.xcrossing.same_screen
4576 canvasPtr->pickEvent.xcrossing.focus = False;
4577 canvasPtr->pickEvent.xcrossing.state = eventPtr->xmotion.state;
4579 canvasPtr->pickEvent = *eventPtr;
4590 if (canvasPtr->flags & REPICK_IN_PROGRESS) {
4599 coords[0] = canvasPtr->pickEvent.xcrossing.x + canvasPtr->xOrigin;
4600 coords[1] = canvasPtr->pickEvent.xcrossing.y + canvasPtr->yOrigin;
4601 if (canvasPtr->pickEvent.type != LeaveNotify) {
4602 canvasPtr->newCurrentPtr = CanvasFindClosest(canvasPtr, coords);
4604 canvasPtr->newCurrentPtr = NULL;
4607 if ((canvasPtr->newCurrentPtr == canvasPtr->currentItemPtr)
4608 && !(canvasPtr->flags & LEFT_GRABBED_ITEM)) {
4617 canvasPtr->flags &= ~LEFT_GRABBED_ITEM;
4626 if ((canvasPtr->newCurrentPtr != canvasPtr->currentItemPtr)
4627 && (canvasPtr->currentItemPtr != NULL)
4628 && !(canvasPtr->flags & LEFT_GRABBED_ITEM)) {
4630 Tk_Item *itemPtr = canvasPtr->currentItemPtr;
4633 event = canvasPtr->pickEvent;
4643 canvasPtr->flags |= REPICK_IN_PROGRESS;
4644 CanvasDoEvent(canvasPtr, &event);
4645 canvasPtr->flags &= ~REPICK_IN_PROGRESS;
4652 if ((itemPtr == canvasPtr->currentItemPtr) && !buttonDown) {
4669 * canvasPtr->newCurrentPtr got reset to NULL because the item was
4673 if ((canvasPtr->newCurrentPtr != canvasPtr->currentItemPtr) && buttonDown) {
4674 canvasPtr->flags |= LEFT_GRABBED_ITEM;
4679 * Special note: it's possible that canvasPtr->newCurrentPtr ==
4680 * canvasPtr->currentItemPtr here. This can happen, for example, if
4684 prevItemPtr = canvasPtr->currentItemPtr;
4685 canvasPtr->flags &= ~LEFT_GRABBED_ITEM;
4686 canvasPtr->currentItemPtr = canvasPtr->newCurrentPtr;
4687 if (prevItemPtr != NULL && prevItemPtr != canvasPtr->currentItemPtr &&
4689 EventuallyRedrawItem((Tk_Canvas) canvasPtr, prevItemPtr);
4690 (*prevItemPtr->typePtr->configProc)(canvasPtr->interp,
4691 (Tk_Canvas) canvasPtr, prevItemPtr, 0, NULL,
4694 if (canvasPtr->currentItemPtr != NULL) {
4698 DoItem(NULL, canvasPtr->currentItemPtr, Tk_GetUid("current"));
4700 DoItem(NULL, canvasPtr->currentItemPtr, searchUids->currentUid);
4702 if ((canvasPtr->currentItemPtr->redraw_flags & TK_ITEM_STATE_DEPENDANT &&
4703 prevItemPtr != canvasPtr->currentItemPtr)) {
4704 (*canvasPtr->currentItemPtr->typePtr->configProc)(canvasPtr->interp,
4705 (Tk_Canvas) canvasPtr, canvasPtr->currentItemPtr, 0, NULL,
4707 EventuallyRedrawItem((Tk_Canvas) canvasPtr,
4708 canvasPtr->currentItemPtr);
4710 event = canvasPtr->pickEvent;
4713 CanvasDoEvent(canvasPtr, &event);
4739 TkCanvas *canvasPtr, /* Canvas widget to search. */
4747 x1 = (int) (coords[0] - canvasPtr->closeEnough);
4748 y1 = (int) (coords[1] - canvasPtr->closeEnough);
4749 x2 = (int) (coords[0] + canvasPtr->closeEnough);
4750 y2 = (int) (coords[1] + canvasPtr->closeEnough);
4753 for (itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL;
4756 (itemPtr->state == TK_STATE_NULL && (canvasPtr->canvas_state == TK_STATE_HIDDEN ||
4757 canvasPtr->canvas_state == TK_STATE_DISABLED))) {
4764 if ((*itemPtr->typePtr->pointProc)((Tk_Canvas) canvasPtr,
4765 itemPtr, coords) <= canvasPtr->closeEnough) {
4794 TkCanvas *canvasPtr, /* Canvas widget in which event occurred. */
4809 if (canvasPtr->bindingTable == NULL) {
4813 itemPtr = canvasPtr->currentItemPtr;
4815 itemPtr = canvasPtr->textInfo.focusItemPtr;
4848 expr = canvasPtr->bindTagExprs;
4882 expr = canvasPtr->bindTagExprs;
4896 if (canvasPtr->tkwin != NULL) {
4897 Tk_BindEvent(canvasPtr->bindingTable, eventPtr, canvasPtr->tkwin,
4928 TkCanvas *canvasPtr = (TkCanvas *) clientData;
4930 if (!canvasPtr->textInfo.gotFocus || (canvasPtr->insertOffTime == 0)) {
4933 if (canvasPtr->textInfo.cursorOn) {
4934 canvasPtr->textInfo.cursorOn = 0;
4935 canvasPtr->insertBlinkHandler = Tcl_CreateTimerHandler(
4936 canvasPtr->insertOffTime, CanvasBlinkProc,
4937 (ClientData) canvasPtr);
4939 canvasPtr->textInfo.cursorOn = 1;
4940 canvasPtr->insertBlinkHandler = Tcl_CreateTimerHandler(
4941 canvasPtr->insertOnTime, CanvasBlinkProc,
4942 (ClientData) canvasPtr);
4944 if (canvasPtr->textInfo.focusItemPtr != NULL) {
4945 EventuallyRedrawItem((Tk_Canvas) canvasPtr,
4946 canvasPtr->textInfo.focusItemPtr);
4971 TkCanvas *canvasPtr, /* Canvas that just got or lost focus. */
4975 Tcl_DeleteTimerHandler(canvasPtr->insertBlinkHandler);
4977 canvasPtr->textInfo.gotFocus = 1;
4978 canvasPtr->textInfo.cursorOn = 1;
4979 if (canvasPtr->insertOffTime != 0) {
4980 canvasPtr->insertBlinkHandler = Tcl_CreateTimerHandler(
4981 canvasPtr->insertOffTime, CanvasBlinkProc,
4982 (ClientData) canvasPtr);
4985 canvasPtr->textInfo.gotFocus = 0;
4986 canvasPtr->textInfo.cursorOn = 0;
4987 canvasPtr->insertBlinkHandler = (Tcl_TimerToken) NULL;
4989 if (canvasPtr->textInfo.focusItemPtr != NULL) {
4990 EventuallyRedrawItem((Tk_Canvas) canvasPtr,
4991 canvasPtr->textInfo.focusItemPtr);
4993 if (canvasPtr->highlightWidth > 0) {
4994 canvasPtr->flags |= REDRAW_BORDERS;
4995 if (!(canvasPtr->flags & REDRAW_PENDING)) {
4996 Tcl_DoWhenIdle(DisplayCanvas, (ClientData) canvasPtr);
4997 canvasPtr->flags |= REDRAW_PENDING;
5022 TkCanvas *canvasPtr, /* Information about widget. */
5030 oldFirst = canvasPtr->textInfo.selectFirst;
5031 oldLast = canvasPtr->textInfo.selectLast;
5032 oldSelPtr = canvasPtr->textInfo.selItemPtr;
5038 if (canvasPtr->textInfo.selItemPtr == NULL) {
5039 Tk_OwnSelection(canvasPtr->tkwin, XA_PRIMARY, CanvasLostSelection,
5040 (ClientData) canvasPtr);
5041 } else if (canvasPtr->textInfo.selItemPtr != itemPtr) {
5042 EventuallyRedrawItem((Tk_Canvas) canvasPtr,
5043 canvasPtr->textInfo.selItemPtr);
5045 canvasPtr->textInfo.selItemPtr = itemPtr;
5047 if (canvasPtr->textInfo.anchorItemPtr != itemPtr) {
5048 canvasPtr->textInfo.anchorItemPtr = itemPtr;
5049 canvasPtr->textInfo.selectAnchor = index;
5051 if (canvasPtr->textInfo.selectAnchor <= index) {
5052 canvasPtr->textInfo.selectFirst = canvasPtr->textInfo.selectAnchor;
5053 canvasPtr->textInfo.selectLast = index;
5055 canvasPtr->textInfo.selectFirst = index;
5056 canvasPtr->textInfo.selectLast = canvasPtr->textInfo.selectAnchor - 1;
5058 if ((canvasPtr->textInfo.selectFirst != oldFirst)
5059 || (canvasPtr->textInfo.selectLast != oldLast)
5061 EventuallyRedrawItem((Tk_Canvas) canvasPtr, itemPtr);
5097 TkCanvas *canvasPtr = (TkCanvas *) clientData;
5099 if (canvasPtr->textInfo.selItemPtr == NULL) {
5102 if (canvasPtr->textInfo.selItemPtr->typePtr->selectionProc == NULL) {
5105 return (*canvasPtr->textInfo.selItemPtr->typePtr->selectionProc)(
5106 (Tk_Canvas) canvasPtr, canvasPtr->textInfo.selItemPtr, offset,
5133 TkCanvas *canvasPtr = (TkCanvas *) clientData;
5135 if (canvasPtr->textInfo.selItemPtr != NULL) {
5136 EventuallyRedrawItem((Tk_Canvas) canvasPtr,
5137 canvasPtr->textInfo.selItemPtr);
5139 canvasPtr->textInfo.selItemPtr = NULL;
5251 TkCanvas *canvasPtr) /* Information about canvas. */
5260 * Save all the relevant values from the canvasPtr, because it might be
5264 interp = canvasPtr->interp;
5266 xScrollCmd = canvasPtr->xScrollCmd;
5270 yScrollCmd = canvasPtr->yScrollCmd;
5274 xOrigin = canvasPtr->xOrigin;
5275 yOrigin = canvasPtr->yOrigin;
5276 inset = canvasPtr->inset;
5277 width = Tk_Width(canvasPtr->tkwin);
5278 height = Tk_Height(canvasPtr->tkwin);
5279 scrollX1 = canvasPtr->scrollX1;
5280 scrollX2 = canvasPtr->scrollX2;
5281 scrollY1 = canvasPtr->scrollY1;
5282 scrollY2 = canvasPtr->scrollY2;
5283 canvasPtr->flags &= ~UPDATE_SCROLLBARS;
5284 if (canvasPtr->xScrollCmd != NULL) {
5333 TkCanvas *canvasPtr, /* Information about canvas. */
5349 if (canvasPtr->xScrollIncrement > 0) {
5351 xOrigin += canvasPtr->xScrollIncrement/2;
5352 xOrigin -= (xOrigin + canvasPtr->inset)
5353 % canvasPtr->xScrollIncrement;
5355 xOrigin = (-xOrigin) + canvasPtr->xScrollIncrement/2;
5356 xOrigin = -(xOrigin - (xOrigin - canvasPtr->inset)
5357 % canvasPtr->xScrollIncrement);
5360 if (canvasPtr->yScrollIncrement > 0) {
5362 yOrigin += canvasPtr->yScrollIncrement/2;
5363 yOrigin -= (yOrigin + canvasPtr->inset)
5364 % canvasPtr->yScrollIncrement;
5366 yOrigin = (-yOrigin) + canvasPtr->yScrollIncrement/2;
5367 yOrigin = -(yOrigin - (yOrigin - canvasPtr->inset)
5368 % canvasPtr->yScrollIncrement);
5383 if ((canvasPtr->confine) && (canvasPtr->regionString != NULL)) {
5384 left = xOrigin + canvasPtr->inset - canvasPtr->scrollX1;
5385 right = canvasPtr->scrollX2
5386 - (xOrigin + Tk_Width(canvasPtr->tkwin) - canvasPtr->inset);
5387 top = yOrigin + canvasPtr->inset - canvasPtr->scrollY1;
5388 bottom = canvasPtr->scrollY2
5389 - (yOrigin + Tk_Height(canvasPtr->tkwin) - canvasPtr->inset);
5392 if (canvasPtr->xScrollIncrement > 0) {
5393 delta -= delta % canvasPtr->xScrollIncrement;
5398 if (canvasPtr->xScrollIncrement > 0) {
5399 delta -= delta % canvasPtr->xScrollIncrement;
5405 if (canvasPtr->yScrollIncrement > 0) {
5406 delta -= delta % canvasPtr->yScrollIncrement;
5411 if (canvasPtr->yScrollIncrement > 0) {
5412 delta -= delta % canvasPtr->yScrollIncrement;
5418 if ((xOrigin == canvasPtr->xOrigin) && (yOrigin == canvasPtr->yOrigin)) {
5430 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,
5431 canvasPtr->xOrigin, canvasPtr->yOrigin,
5432 canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin),
5433 canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin));
5434 canvasPtr->xOrigin = xOrigin;
5435 canvasPtr->yOrigin = yOrigin;
5436 canvasPtr->flags |= UPDATE_SCROLLBARS;
5437 Tk_CanvasEventuallyRedraw((Tk_Canvas) canvasPtr,
5438 canvasPtr->xOrigin, canvasPtr->yOrigin,
5439 canvasPtr->xOrigin + Tk_Width(canvasPtr->tkwin),
5440 canvasPtr->yOrigin + Tk_Height(canvasPtr->tkwin));