tkCanvas.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:11k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * tkCanvas.h --
  3.  *
  4.  * Declarations shared among all the files that implement
  5.  * canvas widgets.
  6.  *
  7.  * Copyright (c) 1991-1994 The Regents of the University of California.
  8.  * Copyright (c) 1994-1995 Sun Microsystems, Inc.
  9.  * Copyright (c) 1998 by Scriptics Corporation.
  10.  *
  11.  * See the file "license.terms" for information on usage and redistribution
  12.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  13.  *
  14.  * RCS: @(#) $Id: tkCanvas.h,v 1.7 2003/01/08 23:02:33 drh Exp $
  15.  */
  16. #ifndef _TKCANVAS
  17. #define _TKCANVAS
  18. #ifndef _TK
  19. #include "tk.h"
  20. #endif
  21. #ifndef USE_OLD_TAG_SEARCH
  22. typedef struct TagSearchExpr_s TagSearchExpr;
  23. struct TagSearchExpr_s {
  24.     TagSearchExpr *next;        /* for linked lists of expressions - used in bindings */
  25.     Tk_Uid uid;                 /* the uid of the whole expression */
  26.     Tk_Uid *uids;               /* expresion compiled to an array of uids */
  27.     int allocated;              /* available space for array of uids */
  28.     int length;                 /* length of expression */
  29.     int index;                  /* current position in expression evaluation */
  30.     int match;                  /* this expression matches event's item's tags*/
  31. };
  32. #endif /* not USE_OLD_TAG_SEARCH */
  33. /*
  34.  * The record below describes a canvas widget.  It is made available
  35.  * to the item procedures so they can access certain shared fields such
  36.  * as the overall displacement and scale factor for the canvas.
  37.  */
  38. typedef struct TkCanvas {
  39.     Tk_Window tkwin; /* Window that embodies the canvas.  NULL
  40.  * means that the window has been destroyed
  41.  * but the data structures haven't yet been
  42.  * cleaned up.*/
  43.     Display *display; /* Display containing widget;  needed, among
  44.  * other things, to release resources after
  45.  * tkwin has already gone away. */
  46.     Tcl_Interp *interp; /* Interpreter associated with canvas. */
  47.     Tcl_Command widgetCmd; /* Token for canvas's widget command. */
  48.     Tk_Item *firstItemPtr; /* First in list of all items in canvas,
  49.  * or NULL if canvas empty. */
  50.     Tk_Item *lastItemPtr; /* Last in list of all items in canvas,
  51.  * or NULL if canvas empty. */
  52.     /*
  53.      * Information used when displaying widget:
  54.      */
  55.     int borderWidth; /* Width of 3-D border around window. */
  56.     Tk_3DBorder bgBorder; /* Used for canvas background. */
  57.     int relief; /* Indicates whether window as a whole is
  58.  * raised, sunken, or flat. */
  59.     int highlightWidth; /* Width in pixels of highlight to draw
  60.  * around widget when it has the focus.
  61.  * <= 0 means don't draw a highlight. */
  62.     XColor *highlightBgColorPtr;
  63. /* Color for drawing traversal highlight
  64.  * area when highlight is off. */
  65.     XColor *highlightColorPtr; /* Color for drawing traversal highlight. */
  66.     int inset; /* Total width of all borders, including
  67.  * traversal highlight and 3-D border.
  68.  * Indicates how much interior stuff must
  69.  * be offset from outside edges to leave
  70.  * room for borders. */
  71.     GC pixmapGC; /* Used to copy bits from a pixmap to the
  72.  * screen and also to clear the pixmap. */
  73.     int width, height; /* Dimensions to request for canvas window,
  74.  * specified in pixels. */
  75.     int redrawX1, redrawY1; /* Upper left corner of area to redraw,
  76.  * in pixel coordinates.  Border pixels
  77.  * are included.  Only valid if
  78.  * REDRAW_PENDING flag is set. */
  79.     int redrawX2, redrawY2; /* Lower right corner of area to redraw,
  80.  * in integer canvas coordinates.  Border
  81.  * pixels will *not* be redrawn. */
  82.     int confine; /* Non-zero means constrain view to keep
  83.  * as much of canvas visible as possible. */
  84.     /*
  85.      * Information used to manage the selection and insertion cursor:
  86.      */
  87.     Tk_CanvasTextInfo textInfo; /* Contains lots of fields;  see tk.h for
  88.  * details.  This structure is shared with
  89.  * the code that implements individual items. */
  90.     int insertOnTime; /* Number of milliseconds cursor should spend
  91.  * in "on" state for each blink. */
  92.     int insertOffTime; /* Number of milliseconds cursor should spend
  93.  * in "off" state for each blink. */
  94.     Tcl_TimerToken insertBlinkHandler;
  95. /* Timer handler used to blink cursor on and
  96.  * off. */
  97.     /*
  98.      * Transformation applied to canvas as a whole:  to compute screen
  99.      * coordinates (X,Y) from canvas coordinates (x,y), do the following:
  100.      *
  101.      * X = x - xOrigin;
  102.      * Y = y - yOrigin;
  103.      */
  104.     int xOrigin, yOrigin; /* Canvas coordinates corresponding to
  105.  * upper-left corner of window, given in
  106.  * canvas pixel units. */
  107.     int drawableXOrigin, drawableYOrigin;
  108. /* During redisplay, these fields give the
  109.  * canvas coordinates corresponding to
  110.  * the upper-left corner of the drawable
  111.  * where items are actually being drawn
  112.  * (typically a pixmap smaller than the
  113.  * whole window). */
  114.     /*
  115.      * Information used for event bindings associated with items.
  116.      */
  117.     Tk_BindingTable bindingTable;
  118. /* Table of all bindings currently defined
  119.  * for this canvas.  NULL means that no
  120.  * bindings exist, so the table hasn't been
  121.  * created.  Each "object" used for this
  122.  * table is either a Tk_Uid for a tag or
  123.  * the address of an item named by id. */
  124.     Tk_Item *currentItemPtr; /* The item currently containing the mouse
  125.  * pointer, or NULL if none. */
  126.     Tk_Item *newCurrentPtr; /* The item that is about to become the
  127.  * current one, or NULL.  This field is
  128.  * used to detect deletions  of the new
  129.  * current item pointer that occur during
  130.  * Leave processing of the previous current
  131.  * item.  */
  132.     double closeEnough; /* The mouse is assumed to be inside an
  133.  * item if it is this close to it. */
  134.     XEvent pickEvent; /* The event upon which the current choice
  135.  * of currentItem is based.  Must be saved
  136.  * so that if the currentItem is deleted,
  137.  * can pick another. */
  138.     int state; /* Last known modifier state.  Used to
  139.  * defer picking a new current object
  140.  * while buttons are down. */
  141.     /*
  142.      * Information used for managing scrollbars:
  143.      */
  144.     char *xScrollCmd; /* Command prefix for communicating with
  145.  * horizontal scrollbar.  NULL means no
  146.  * horizontal scrollbar.  Malloc'ed*/
  147.     char *yScrollCmd; /* Command prefix for communicating with
  148.  * vertical scrollbar.  NULL means no
  149.  * vertical scrollbar.  Malloc'ed*/
  150.     int scrollX1, scrollY1, scrollX2, scrollY2;
  151. /* These four coordinates define the region
  152.  * that is the 100% area for scrolling (i.e.
  153.  * these numbers determine the size and
  154.  * location of the sliders on scrollbars).
  155.  * Units are pixels in canvas coords. */
  156.     char *regionString; /* The option string from which scrollX1
  157.  * etc. are derived.  Malloc'ed. */
  158.     int xScrollIncrement; /* If >0, defines a grid for horizontal
  159.  * scrolling.  This is the size of the "unit",
  160.  * and the left edge of the screen will always
  161.  * lie on an even unit boundary. */
  162.     int yScrollIncrement; /* If >0, defines a grid for horizontal
  163.  * scrolling.  This is the size of the "unit",
  164.  * and the left edge of the screen will always
  165.  * lie on an even unit boundary. */
  166.     /*
  167.      * Information used for scanning:
  168.      */
  169.     int scanX; /* X-position at which scan started (e.g.
  170.  * button was pressed here). */
  171.     int scanXOrigin; /* Value of xOrigin field when scan started. */
  172.     int scanY; /* Y-position at which scan started (e.g.
  173.  * button was pressed here). */
  174.     int scanYOrigin; /* Value of yOrigin field when scan started. */
  175.     /*
  176.      * Information used to speed up searches by remembering the last item
  177.      * created or found with an item id search.
  178.      */
  179.     Tk_Item *hotPtr; /* Pointer to "hot" item (one that's been
  180.  * recently used.  NULL means there's no
  181.  * hot item. */
  182.     Tk_Item *hotPrevPtr; /* Pointer to predecessor to hotPtr (NULL
  183.  * means item is first in list).  This is
  184.  * only a hint and may not really be hotPtr's
  185.  * predecessor. */
  186.     /*
  187.      * Miscellaneous information:
  188.      */
  189.     Tk_Cursor cursor; /* Current cursor for window, or None. */
  190.     char *takeFocus; /* Value of -takefocus option;  not used in
  191.  * the C code, but used by keyboard traversal
  192.  * scripts.  Malloc'ed, but may be NULL. */
  193.     double pixelsPerMM; /* Scale factor between MM and pixels;
  194.  * used when converting coordinates. */
  195.     int flags; /* Various flags;  see below for
  196.  * definitions. */
  197.     int nextId; /* Number to use as id for next item
  198.  * created in widget. */
  199.     Tk_PostscriptInfo psInfo;
  200. /* Pointer to information used for generating
  201.  * Postscript for the canvas.  NULL means
  202.  * no Postscript is currently being
  203.  * generated. */
  204.     Tcl_HashTable idTable; /* Table of integer indices. */
  205.     /*
  206.      * Additional information, added by the 'dash'-patch
  207.      */
  208.     VOID *reserved1;
  209.     Tk_State canvas_state; /* state of canvas */
  210.     VOID *reserved2;
  211.     VOID *reserved3;
  212.     Tk_TSOffset tsoffset;
  213. #ifndef USE_OLD_TAG_SEARCH
  214.     TagSearchExpr *bindTagExprs; /* linked list of tag expressions used in bindings */
  215. #endif
  216. } TkCanvas;
  217. /*
  218.  * Flag bits for canvases:
  219.  *
  220.  * REDRAW_PENDING - 1 means a DoWhenIdle handler has already
  221.  * been created to redraw some or all of the
  222.  * canvas.
  223.  * REDRAW_BORDERS -  1 means that the borders need to be redrawn
  224.  * during the next redisplay operation.
  225.  * REPICK_NEEDED - 1 means DisplayCanvas should pick a new
  226.  * current item before redrawing the canvas.
  227.  * GOT_FOCUS - 1 means the focus is currently in this
  228.  * widget, so should draw the insertion cursor
  229.  * and traversal highlight.
  230.  * CURSOR_ON - 1 means the insertion cursor is in the "on"
  231.  * phase of its blink cycle.  0 means either
  232.  * we don't have the focus or the cursor is in
  233.  * the "off" phase of its cycle.
  234.  * UPDATE_SCROLLBARS - 1 means the scrollbars should get updated
  235.  * as part of the next display operation.
  236.  * LEFT_GRABBED_ITEM - 1 means that the mouse left the current
  237.  * item while a grab was in effect, so we
  238.  * didn't change canvasPtr->currentItemPtr.
  239.  * REPICK_IN_PROGRESS - 1 means PickCurrentItem is currently
  240.  * executing.  If it should be called recursively,
  241.  * it should simply return immediately.
  242.  * BBOX_NOT_EMPTY - 1 means that the bounding box of the area
  243.  * that should be redrawn is not empty.
  244.  */
  245. #define REDRAW_PENDING 1
  246. #define REDRAW_BORDERS 2
  247. #define REPICK_NEEDED 4
  248. #define GOT_FOCUS 8
  249. #define CURSOR_ON 0x10
  250. #define UPDATE_SCROLLBARS 0x20
  251. #define LEFT_GRABBED_ITEM 0x40
  252. #define REPICK_IN_PROGRESS 0x100
  253. #define BBOX_NOT_EMPTY 0x200
  254. /*
  255.  * Flag bits for canvas items (redraw_flags):
  256.  *
  257.  * FORCE_REDRAW - 1 means that the new coordinates of some
  258.  * item are not yet registered using
  259.  * Tk_CanvasEventuallyRedraw(). It should still
  260.  * be done by the general canvas code.
  261.  */
  262. #define FORCE_REDRAW 8
  263. /*
  264.  * Canvas-related procedures that are shared among Tk modules but not
  265.  * exported to the outside world:
  266.  */
  267. extern int TkCanvPostscriptCmd _ANSI_ARGS_((TkCanvas *canvasPtr,
  268.     Tcl_Interp *interp, int argc, CONST char **argv));
  269. /*
  270.  * Other procedures that are shared among Tk canvas modules but not exported
  271.  * to the outside world:
  272.  */
  273. extern int  TkCanvTranslatePath _ANSI_ARGS_((TkCanvas *canvPtr,
  274.     int numVertex, double *coordPtr, int closed,
  275.     XPoint *outPtr));
  276. #endif /* _TKCANVAS */