コード例 #1
0
ファイル: tkPathStyle.c プロジェクト: atannen/tkpath
Tcl_Obj *
PathColorGetOption(
    ClientData clientData,
    Tk_Window tkwin,
    char *recordPtr,	    /* Pointer to widget record. */
    int internalOffset)	    /* Offset within *recordPtr containing the
                             * value. */
{
    char 	*internalPtr;
    Tcl_Obj 	*objPtr = NULL;
    TkPathColor *pathColor = NULL;
    
    internalPtr = recordPtr + internalOffset;
    pathColor = *((TkPathColor **) internalPtr);
    if (pathColor != NULL) {
        if (pathColor->color) {
            objPtr = Tcl_NewStringObj(Tk_NameOfColor(pathColor->color), -1);
        } else if (pathColor->gradientInstPtr) {
            objPtr = Tcl_NewStringObj(pathColor->gradientInstPtr->masterPtr->name, -1);
        }
    }
    return objPtr;
}
コード例 #2
0
static CONST char *
FormatConfigValue(
    Tcl_Interp *interp,		/* Interpreter for use in real conversions. */
    Tk_Window tkwin,		/* Window corresponding to widget. */
    Tk_ConfigSpec *specPtr,	/* Pointer to information describing option.
				 * Must not point to a synonym option. */
    char *widgRec,		/* Pointer to record holding current values of
				 * info for widget. */
    char *buffer,		/* Static buffer to use for small values.
				 * Must have at least 200 bytes of storage. */
    Tcl_FreeProc **freeProcPtr)	/* Pointer to word to fill in with address of
				 * function to free the result, or NULL if
				 * result is static. */
{
    CONST char *ptr, *result;

    *freeProcPtr = NULL;
    ptr = widgRec + specPtr->offset;
    result = "";
    switch (specPtr->type) {
    case TK_CONFIG_BOOLEAN:
        if (*((int *) ptr) == 0) {
            result = "0";
        } else {
            result = "1";
        }
        break;
    case TK_CONFIG_INT:
        sprintf(buffer, "%d", *((int *) ptr));
        result = buffer;
        break;
    case TK_CONFIG_DOUBLE:
        Tcl_PrintDouble(interp, *((double *) ptr), buffer);
        result = buffer;
        break;
    case TK_CONFIG_STRING:
        result = (*(char **) ptr);
        if (result == NULL) {
            result = "";
        }
        break;
    case TK_CONFIG_UID: {
        Tk_Uid uid = *((Tk_Uid *) ptr);

        if (uid != NULL) {
            result = uid;
        }
        break;
    }
    case TK_CONFIG_COLOR: {
        XColor *colorPtr = *((XColor **) ptr);

        if (colorPtr != NULL) {
            result = Tk_NameOfColor(colorPtr);
        }
        break;
    }
    case TK_CONFIG_FONT: {
        Tk_Font tkfont = *((Tk_Font *) ptr);

        if (tkfont != NULL) {
            result = Tk_NameOfFont(tkfont);
        }
        break;
    }
    case TK_CONFIG_BITMAP: {
        Pixmap pixmap = *((Pixmap *) ptr);

        if (pixmap != None) {
            result = Tk_NameOfBitmap(Tk_Display(tkwin), pixmap);
        }
        break;
    }
    case TK_CONFIG_BORDER: {
        Tk_3DBorder border = *((Tk_3DBorder *) ptr);

        if (border != NULL) {
            result = Tk_NameOf3DBorder(border);
        }
        break;
    }
    case TK_CONFIG_RELIEF:
        result = Tk_NameOfRelief(*((int *) ptr));
        break;
    case TK_CONFIG_CURSOR:
    case TK_CONFIG_ACTIVE_CURSOR: {
        Tk_Cursor cursor = *((Tk_Cursor *) ptr);

        if (cursor != None) {
            result = Tk_NameOfCursor(Tk_Display(tkwin), cursor);
        }
        break;
    }
    case TK_CONFIG_JUSTIFY:
        result = Tk_NameOfJustify(*((Tk_Justify *) ptr));
        break;
    case TK_CONFIG_ANCHOR:
        result = Tk_NameOfAnchor(*((Tk_Anchor *) ptr));
        break;
    case TK_CONFIG_CAP_STYLE:
        result = Tk_NameOfCapStyle(*((int *) ptr));
        break;
    case TK_CONFIG_JOIN_STYLE:
        result = Tk_NameOfJoinStyle(*((int *) ptr));
        break;
    case TK_CONFIG_PIXELS:
        sprintf(buffer, "%d", *((int *) ptr));
        result = buffer;
        break;
    case TK_CONFIG_MM:
        Tcl_PrintDouble(interp, *((double *) ptr), buffer);
        result = buffer;
        break;
    case TK_CONFIG_WINDOW: {
        Tk_Window tkwin;

        tkwin = *((Tk_Window *) ptr);
        if (tkwin != NULL) {
            result = Tk_PathName(tkwin);
        }
        break;
    }
    case TK_CONFIG_CUSTOM:
        result = (*specPtr->customPtr->printProc)(
                     specPtr->customPtr->clientData, tkwin, widgRec,
                     specPtr->offset, freeProcPtr);
        break;
    default:
        result = "?? unknown type ??";
    }
    return result;
}