Changeset 3039 for trunk/gui


Ignore:
Timestamp:
Jun 13, 2012 4:36:48 PM (12 years ago)
Author:
gah
Message:

intermediate updates for vtkcontourviewer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gui/src/RpCanvHotspot.c

    r3038 r3039  
    4141#define REDRAW_PENDING          (1<<0)
    4242#define LAYOUT_PENDING          (1<<1)
    43 #define SUBST_PENDING           (1<<2)
     43#define SUBSTITUTIONS_PENDING   (1<<2)
    4444
    4545#undef ROUND
     
    5959    ItemSegment *nextPtr;
    6060    int type;                           /* Image, normal text, or substituted
    61                                          * text. */
     61                                         * value. */
    6262    short int x, y;                     /* Location of segment on canvas. */
    6363    short int width, height;            /* Dimension of segment. */
    6464    Tk_TextLayout layout;               /* Layout of normal or substituted
    65                                          * text */
     65                                         * value */
    6666    int length;                         /* # of bytes in below string. */
    6767    int lineNum;                        /* Line where segment if located. */
    68     char *subst;                        /* Substitututed text. */
     68    char *value;                        /* Substitututed value. */
    6969    char text[1];
    7070};
     
    9595     * Configuration settings that are updated by Tk_ConfigureWidget:
    9696     */
    97     Tcl_Interp *substInterp;            /* If non-NULL, interpreter containing
     97    Tcl_Interp *valueInterp;            /* If non-NULL, interpreter containing
    9898                                         * substituted variables.   */
    9999    const char *text;                   /* Text to be displayed */
     
    101101                                         * (x,y) */
    102102    XColor *textColor;                  /* Color for normal text */
    103     XColor *substColor;                 /* Color for substitututed text */
     103    XColor *valueColor;                 /* Color for substitututed values. */
     104    XColor *activeValueColor;           /* Color for active substitututed
     105                                         * values */
    104106    XColor *outlineColor;               /* Color for outline of rectangle */
    105107    Tk_3DBorder border;                 /* If non-NULL, background color of
    106                                          * rectangle. */
    107     int borderWidth;                    /* supports 3D border (drawn under
     108                                         * rectangle enclosing the entire
     109                                         * hotspot item. */
     110    Tk_3DBorder activeValueBorder;      /* If non-NULL, background color of
     111                                         * active substituted values. */
     112    int borderWidth;                    /* 3D border width (drawn under
    108113                                         * -outline) */
    109114    int relief;                         /* Indicates whether hotspot as a
    110115                                         * whole is raised, sunken, or flat */
    111116    Tk_Font font;                       /* Font for drawing normal text. */
    112     Tk_Font substFont;                  /* Font for drawing substituted text. */
     117    Tk_Font valueFont;                  /* Font for drawing substituted
     118                                         * values. */
    113119
    114120    const char *imageName;              /* Name of normal hotspot image. */
     
    124130    GC normalGC;                        /* Graphics context for drawing
    125131                                         * text. */
    126     GC substGC;                         /* GC for substituted text. */
     132    GC valueGC;                         /* GC for substituted values. */
     133    GC activeGC;                        /* Gc for active substituted
     134                                         * values. */
    127135    GC outlineGC;                       /* GC for outline? */
    128136    ItemSegment *firstPtr, *lastPtr;    /* List of hotspot segments. */
     
    157165    {TK_CONFIG_COLOR, "-foreground", "foreground", (char*)NULL,
    158166        "black", Tk_Offset(HotspotItem, textColor), 0},
    159     {TK_CONFIG_FONT, "-substitutionfont", (char*)NULL, (char*)NULL,
    160         "courier -12", Tk_Offset(HotspotItem, substFont), 0},
    161     {TK_CONFIG_COLOR, "-substitutionforeground", (char*)NULL, (char*)NULL,
    162         "blue", Tk_Offset(HotspotItem, substColor), 0},
     167    {TK_CONFIG_COLOR, "-activevaluebackground", (char*)NULL, (char*)NULL,
     168        "blue", Tk_Offset(HotspotItem, activeValueBorder), 0},
     169    {TK_CONFIG_FONT, "-valuefont", (char*)NULL, (char*)NULL,
     170        "courier -12", Tk_Offset(HotspotItem, valueFont), 0},
     171    {TK_CONFIG_COLOR, "-valueforeground", (char*)NULL, (char*)NULL,
     172        "blue", Tk_Offset(HotspotItem, valueColor), 0},
    163173    {TK_CONFIG_STRING, "-image", (char*)NULL, (char*)NULL, (char*)NULL,
    164174        Tk_Offset(HotspotItem, imageName), 0},
     
    484494        }
    485495    }
    486     itemPtr->flags |= SUBST_PENDING;
     496    itemPtr->flags |= SUBSTITUTIONS_PENDING;
    487497    EventuallyRedraw(itemPtr);
    488498    return NULL;                        /* Done. */
     
    562572    segPtr->text[length] = '\0';
    563573    segPtr->length = length;
    564     interp = itemPtr->substInterp;
     574    interp = itemPtr->valueInterp;
    565575    if (interp == NULL) {
    566576        interp = itemPtr->interp;
    567577    }
    568578    Tcl_TraceVar(interp, varName, VAR_FLAGS, TraceVarProc, itemPtr);
    569     segPtr->subst = NULL;
     579    segPtr->value = NULL;
    570580    segPtr->x = segPtr->y = 0;
    571581    segPtr->nextPtr = NULL;
     
    619629                itemPtr);
    620630    }
    621     if (segPtr->subst != NULL) {
    622         Tcl_Free((char *)segPtr->subst);
     631    if (segPtr->value != NULL) {
     632        Tcl_Free((char *)segPtr->value);
    623633    }
    624634    Tcl_Free((char *)segPtr);
     
    638648
    639649static void
    640 DoSubst(HotspotItem *itemPtr)
     650DoSubstitutions(HotspotItem *itemPtr)
    641651{
    642652    ItemSegment *segPtr;
    643653    Tcl_Interp *interp;
    644654
    645     itemPtr->flags &= ~SUBST_PENDING;
    646     interp = itemPtr->substInterp;
     655    itemPtr->flags &= ~SUBSTITUTIONS_PENDING;
     656    interp = itemPtr->valueInterp;
    647657    if (interp == NULL) {
    648658        interp = itemPtr->interp;
     
    658668            value = "???";
    659669        }
    660         if (segPtr->subst != NULL) {
    661             Tcl_Free((char *)segPtr->subst);
     670        if (segPtr->value != NULL) {
     671            Tcl_Free((char *)segPtr->value);
    662672        }
    663         segPtr->subst = Tcl_Alloc(strlen(value) + 1);
    664         strcpy(segPtr->subst, value);
     673        segPtr->value = Tcl_Alloc(strlen(value) + 1);
     674        strcpy(segPtr->value, value);
    665675    }
    666676    itemPtr->flags |= LAYOUT_PENDING;
     
    694704            break;
    695705        case SEGMENT_TYPE_VARIABLE:
    696             tkFont = (itemPtr->substFont != NULL) ?
    697                 itemPtr->substFont : itemPtr->font;
    698             segPtr->layout = Tk_ComputeTextLayout(tkFont, segPtr->subst,
     706            tkFont = (itemPtr->valueFont != NULL) ?
     707                itemPtr->valueFont : itemPtr->font;
     708            segPtr->layout = Tk_ComputeTextLayout(tkFont, segPtr->value,
    699709                -1, wrapLength, justify, flags, &w, &h);
    700710            break;
     
    797807        AddTextSegment(itemPtr, start, p - start);
    798808    }
    799     itemPtr->flags |= SUBST_PENDING;
     809    itemPtr->flags |= SUBSTITUTIONS_PENDING;
    800810    return TCL_OK;
    801811}
     
    861871    itemPtr->outlineGC = None;
    862872    itemPtr->relief = TK_RELIEF_FLAT;
    863     itemPtr->substColor = NULL;
    864     itemPtr->substFont = NULL;
    865     itemPtr->substGC = None;
    866     itemPtr->substInterp = interp;
     873    itemPtr->valueColor = NULL;
     874    itemPtr->valueFont = NULL;
     875    itemPtr->valueGC = None;
     876    itemPtr->activeGC = None;
     877    itemPtr->valueInterp = interp;
    867878    itemPtr->text = NULL;
    868879    itemPtr->textColor = NULL;
     
    10071018    }
    10081019
    1009     /* Substituted text GC. */
     1020    /* Substituted value GC. */
    10101021    mask = GCFont | GCForeground;
    1011     if (itemPtr->substFont != NULL) {
    1012         gcValues.font = Tk_FontId(itemPtr->substFont);
     1022    if (itemPtr->valueFont != NULL) {
     1023        gcValues.font = Tk_FontId(itemPtr->valueFont);
    10131024    } else {
    10141025        gcValues.font = Tk_FontId(itemPtr->font);
    10151026    }
    1016     if (itemPtr->substColor != NULL) {
    1017         gcValues.foreground = itemPtr->substColor->pixel;
     1027    if (itemPtr->valueColor != NULL) {
     1028        gcValues.foreground = itemPtr->valueColor->pixel;
    10181029    } else {
    10191030        gcValues.foreground = itemPtr->textColor->pixel;
    10201031    }
    10211032    newGC = Tk_GetGC(tkwin, mask, &gcValues);
    1022     if (itemPtr->substGC != None) {
    1023         Tk_FreeGC(Tk_Display(tkwin), itemPtr->substGC);
    1024     }
    1025     itemPtr->substGC = newGC;
     1033    if (itemPtr->valueGC != None) {
     1034        Tk_FreeGC(Tk_Display(tkwin), itemPtr->valueGC);
     1035    }
     1036    itemPtr->valueGC = newGC;
    10261037
    10271038    itemPtr->maxImageWidth = itemPtr->maxImageHeight = 0;
     
    11061117        Tk_FreeColor(itemPtr->textColor);
    11071118    }
    1108     if (itemPtr->substColor != NULL) {
    1109         Tk_FreeColor(itemPtr->substColor);
     1119    if (itemPtr->valueColor != NULL) {
     1120        Tk_FreeColor(itemPtr->valueColor);
    11101121    }
    11111122    if (itemPtr->outlineColor != NULL) {
     
    11301141        Tk_FreeFont(itemPtr->font);
    11311142    }
    1132     if (itemPtr->substFont != NULL) {
    1133         Tk_FreeFont(itemPtr->substFont);
     1143    if (itemPtr->valueFont != NULL) {
     1144        Tk_FreeFont(itemPtr->valueFont);
    11341145    }
    11351146    if (itemPtr->normalGC != None) {
     
    11391150        Tk_FreeGC(display, itemPtr->outlineGC);
    11401151    }
    1141     if (itemPtr->substGC != None) {
    1142         Tk_FreeGC(display, itemPtr->substGC);
     1152    if (itemPtr->valueGC != None) {
     1153        Tk_FreeGC(display, itemPtr->valueGC);
    11431154    }
    11441155    DestroySegments(itemPtr);
     
    12661277
    12671278        gc = (segPtr->type == SEGMENT_TYPE_VARIABLE) ?
    1268             itemPtr->substGC : itemPtr->normalGC;
     1279            itemPtr->valueGC : itemPtr->normalGC;
    12691280        Tk_DrawTextLayout(Tk_Display(itemPtr->tkwin), drawable, gc,
    12701281                segPtr->layout, x + segPtr->x, y + segPtr->y, 0, -1);
     
    12971308
    12981309    itemPtr->flags &= ~REDRAW_PENDING;
    1299     if (itemPtr->flags & SUBST_PENDING) {
    1300         DoSubst(itemPtr);
     1310    if (itemPtr->flags & SUBSTITUTIONS_PENDING) {
     1311        DoSubstitutions(itemPtr);
    13011312    }
    13021313    if (itemPtr->flags & LAYOUT_PENDING) {
     
    13171328    }
    13181329    for (segPtr = itemPtr->firstPtr; segPtr != NULL; segPtr = segPtr->nextPtr) {
    1319         fprintf(stderr, "Display: segment=(%s) type=%d x=%d y=%d (x=%d y=%d w=%d h=%d) lineNum=%d nextPtr=%x\n",
    1320                 segPtr->text, segPtr->type, x, y, segPtr->x, segPtr->y,
    1321                 segPtr->width, segPtr->height, segPtr->lineNum, segPtr->nextPtr);
    13221330        DrawSegment(segPtr, drawable, x, y);
    13231331    }
     
    14841492               int prepass)
    14851493{
     1494#ifdef notdef
    14861495    HotspotItem *itemPtr = (HotspotItem *)canvItemPtr;
    14871496    Tk_Window canvasWin = Tk_CanvasTkwin(canvas);
    14881497
    1489 #ifdef notdef
    14901498    int x, y;
    14911499    double xpos;
     
    15921600}
    15931601
     1602static HotspotItem *
     1603GetHotspotItem(Tcl_Interp *interp, Tcl_Obj *canvasObjPtr, Tcl_Obj *itemObjPtr)
     1604{
     1605    const char *string;
     1606    Tk_Item *canvItemPtr;
     1607    HotspotItem *itemPtr;
     1608    Tcl_CmdInfo cmdInfo;
     1609    TkCanvas *canvasPtr;
     1610    int id;
     1611    Tcl_HashEntry *hPtr;
     1612    Tk_Window tkwin;
     1613
     1614    /* See if we can find the canvas window associated by the name. */
     1615    string = Tcl_GetString(canvasObjPtr);
     1616    tkwin = Tk_NameToWindow(interp, string, Tk_MainWindow(interp));
     1617    if (tkwin == NULL) {
     1618        Tcl_AppendResult(interp, "can't find canvas \"", string, "\"",
     1619                         (char *)NULL);
     1620        return NULL;
     1621    }
     1622    if (strcmp(Tk_Class(tkwin), "Canvas") != 0) {
     1623        Tcl_AppendResult(interp, "window \"", string, "\" isn't a canvas.",
     1624                         (char *)NULL);
     1625        return NULL;
     1626    }
     1627    /* If we're this far, then we can try to get the clientData. If the widget
     1628    * command was renamed, we're out of luck. */
     1629    if (!Tcl_GetCommandInfo(interp, string, &cmdInfo)) {
     1630        Tcl_AppendResult(interp, "can't find canvas \"", string, "\"",
     1631                         (char *)NULL);
     1632        return NULL;
     1633    }
     1634    canvasPtr = cmdInfo.objClientData;
     1635    if (Tcl_GetIntFromObj(interp, itemObjPtr, &id) != TCL_OK) {
     1636        return NULL;
     1637    }
     1638    string = Tcl_GetString(itemObjPtr);
     1639    hPtr = Tcl_FindHashEntry(&canvasPtr->idTable, (char *)id);
     1640    if (hPtr == NULL) {
     1641        Tcl_AppendResult(interp, "can't find canvas item \"", string,
     1642                "\"", (char *)NULL);
     1643        return NULL;
     1644
     1645    }
     1646    canvItemPtr = Tcl_GetHashValue(hPtr);
     1647    /* The canvas item we find has to be a hotspot. */
     1648    if (canvItemPtr->typePtr != &hotspotType) {
     1649        Tcl_AppendResult(interp, "bad canvas item \"", string,
     1650                "\": must be a hotspot", (char *)NULL);
     1651        return NULL;
     1652
     1653    }
     1654    return itemPtr = (HotspotItem *)canvItemPtr;
     1655}
     1656
     1657static int
     1658HotspotCmd(ClientData clientData, Tcl_Interp *interp, int objc,
     1659           Tcl_Obj *const *objv)
     1660{
     1661    const char *string;
     1662    HotspotItem *itemPtr;
     1663    int length;
     1664    char c;
     1665
     1666    if (objc < 3) {
     1667        return TCL_ERROR;
     1668    }
     1669    itemPtr = GetHotspotItem(interp, objv[2], objv[3]);
     1670    if (itemPtr == NULL) {
     1671        return TCL_ERROR;
     1672    }
     1673    string = Tcl_GetStringFromObj(objv[1], &length);
     1674    c = string[0];
     1675    if ((c == 'a') && (strncmp(string, "activate", length) == 0)) {
     1676        /* hotspot activate .c 0 varName */
     1677    } else if ((c == 'd') && (strncmp(string, "deactivate", length) == 0)) {
     1678        /* hotspot deactivate .c 0 */
     1679        itemPtr->activePtr = NULL;
     1680    } else if ((c == 'i') && (strncmp(string, "identify", length) == 0)) {
     1681        /* hotspot identify .c 0 x y */
     1682        /* Return name of variable identified by x,y coordinate. */
     1683    } else if ((c == 'v') && (strncmp(string, "variables", length) == 0)) {
     1684        /* hotspot variables .c 0 */
     1685        /* Return list of variable names. */
     1686    } else {
     1687        Tcl_AppendResult(interp, "unknown hotspot option \"", string,
     1688                "\": should be either activate, deactivate, identity, ",
     1689                "or variables", (char *)NULL);
     1690        return TCL_ERROR;
     1691    }
     1692    return TCL_OK;
     1693}
     1694
    15941695/*
    15951696 * ------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.