summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authoroehhar <harald.oehlmann@elmicron.de>2024-06-14 11:52:50 (GMT)
committeroehhar <harald.oehlmann@elmicron.de>2024-06-14 11:52:50 (GMT)
commitbab006a2f63bf6a5b2e2b0c63e5f1bf3c5a47f59 (patch)
tree659745f7c898fe78117b1d4e8e413eca2fad6d59 /generic
parente9fc9ea2605337871420f15bb402842cf075e530 (diff)
parent281a718a515c5e0a632bfbfb1ca9409101548408 (diff)
downloadtk-bab006a2f63bf6a5b2e2b0c63e5f1bf3c5a47f59.zip
tk-bab006a2f63bf6a5b2e2b0c63e5f1bf3c5a47f59.tar.gz
tk-bab006a2f63bf6a5b2e2b0c63e5f1bf3c5a47f59.tar.bz2
Merge 8.6
Diffstat (limited to 'generic')
-rw-r--r--generic/ks_names.h2
-rw-r--r--generic/tk3d.h2
-rw-r--r--generic/tkButton.h2
-rw-r--r--generic/tkCanvLine.c2
-rw-r--r--generic/tkCanvas.h2
-rw-r--r--generic/tkColor.h2
-rw-r--r--generic/tkDecls.h2
-rw-r--r--generic/tkError.c2
-rw-r--r--generic/tkGrid.c2
-rw-r--r--generic/tkImgGIF.c15
-rw-r--r--generic/tkImgPNG.c80
-rw-r--r--generic/tkImgPhoto.c2
-rw-r--r--generic/tkInt.h2
-rw-r--r--generic/tkIntDecls.h2
-rw-r--r--generic/tkIntPlatDecls.h2
-rw-r--r--generic/tkIntXlibDecls.h2
-rw-r--r--generic/tkMacWinMenu.c2
-rw-r--r--generic/tkMain.c106
-rw-r--r--generic/tkMenu.h2
-rw-r--r--generic/tkMenuDraw.c2
-rw-r--r--generic/tkMenubutton.h2
-rw-r--r--generic/tkMessage.c2
-rw-r--r--generic/tkOldTest.c2
-rw-r--r--generic/tkPlatDecls.h2
-rw-r--r--generic/tkPointer.c2
-rw-r--r--generic/tkScale.c2
-rw-r--r--generic/tkScale.h4
-rw-r--r--generic/tkScrollbar.h2
-rw-r--r--generic/tkStubInit.c2
-rw-r--r--generic/tkStubLib.c2
-rw-r--r--generic/tkTest.c2
-rw-r--r--generic/tkText.h9
-rw-r--r--generic/tkUndo.c4
-rw-r--r--generic/tkWindow.c22
-rw-r--r--generic/ttk/ttkButton.c35
-rw-r--r--generic/ttk/ttkClamTheme.c355
-rw-r--r--generic/ttk/ttkClassicTheme.c172
-rw-r--r--generic/ttk/ttkDefaultTheme.c411
-rw-r--r--generic/ttk/ttkElements.c669
-rw-r--r--generic/ttk/ttkEntry.c53
-rw-r--r--generic/ttk/ttkFrame.c4
-rw-r--r--generic/ttk/ttkImage.c4
-rw-r--r--generic/ttk/ttkLabel.c62
-rw-r--r--generic/ttk/ttkLayout.c1
-rw-r--r--generic/ttk/ttkNotebook.c48
-rw-r--r--generic/ttk/ttkPanedwindow.c20
-rw-r--r--generic/ttk/ttkProgress.c37
-rw-r--r--generic/ttk/ttkScale.c20
-rw-r--r--generic/ttk/ttkScrollbar.c11
-rw-r--r--generic/ttk/ttkSeparator.c4
-rw-r--r--generic/ttk/ttkSquare.c23
-rw-r--r--generic/ttk/ttkState.c84
-rw-r--r--generic/ttk/ttkTheme.c12
-rw-r--r--generic/ttk/ttkTrace.c10
-rw-r--r--generic/ttk/ttkTreeview.c269
-rw-r--r--generic/ttk/ttkWidget.c5
56 files changed, 1641 insertions, 962 deletions
diff --git a/generic/ks_names.h b/generic/ks_names.h
index 3fce645..2462e79 100644
--- a/generic/ks_names.h
+++ b/generic/ks_names.h
@@ -212,6 +212,7 @@
{ "ISO_Level3_Shift", 0xFE03 },
{ "ISO_Level3_Latch", 0xFE04 },
{ "ISO_Level3_Lock", 0xFE05 },
+{ "ISO_Group_Shift", 0xFF7E },
{ "ISO_Group_Latch", 0xFE06 },
{ "ISO_Group_Lock", 0xFE07 },
{ "ISO_Next_Group", 0xFE08 },
@@ -307,6 +308,7 @@
{ "dead_SCHWA", 0xFE8B },
{ "dead_capital_schwa", 0xFE8B },
{ "dead_greek", 0xFE8C },
+{ "dead_hamza", 0xFE8D },
{ "dead_lowline", 0xFE90 },
{ "dead_aboveverticalline", 0xFE91 },
{ "dead_belowverticalline", 0xFE92 },
diff --git a/generic/tk3d.h b/generic/tk3d.h
index ec7f7c7..b9deb01 100644
--- a/generic/tk3d.h
+++ b/generic/tk3d.h
@@ -3,7 +3,7 @@
*
* Declarations of types and functions shared by the 3d border module.
*
- * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkButton.h b/generic/tkButton.h
index edf7efe..73b5718 100644
--- a/generic/tkButton.h
+++ b/generic/tkButton.h
@@ -4,7 +4,7 @@
* Declarations of types and functions used to implement button-like
* widgets.
*
- * Copyright (c) 1996-1998 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1998 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkCanvLine.c b/generic/tkCanvLine.c
index de46813..a001677 100644
--- a/generic/tkCanvLine.c
+++ b/generic/tkCanvLine.c
@@ -5,7 +5,7 @@
*
* Copyright (c) 1991-1994 The Regents of the University of California.
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkCanvas.h b/generic/tkCanvas.h
index e2221a8..75e1f92 100644
--- a/generic/tkCanvas.h
+++ b/generic/tkCanvas.h
@@ -5,7 +5,7 @@
*
* Copyright (c) 1991-1994 The Regents of the University of California.
* Copyright (c) 1994-1995 Sun Microsystems, Inc.
- * Copyright (c) 1998 by Scriptics Corporation.
+ * Copyright (c) 1998 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkColor.h b/generic/tkColor.h
index 54e8cdc..46993e8 100644
--- a/generic/tkColor.h
+++ b/generic/tkColor.h
@@ -3,7 +3,7 @@
*
* Declarations of data types and functions used by the Tk color module.
*
- * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkDecls.h b/generic/tkDecls.h
index 91f8332..86196ef 100644
--- a/generic/tkDecls.h
+++ b/generic/tkDecls.h
@@ -3,7 +3,7 @@
*
* Declarations of functions in the platform independent public Tcl API.
*
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkError.c b/generic/tkError.c
index 6ff5475..eadeffe 100644
--- a/generic/tkError.c
+++ b/generic/tkError.c
@@ -110,7 +110,7 @@ Tk_CreateErrorHandler(
errorPtr = (TkErrorHandler *)ckalloc(sizeof(TkErrorHandler));
errorPtr->dispPtr = dispPtr;
errorPtr->firstRequest = NextRequest(display);
- errorPtr->lastRequest = (unsigned) -1;
+ errorPtr->lastRequest = (unsigned long) -1;
errorPtr->error = error;
errorPtr->request = request;
errorPtr->minorCode = minorCode;
diff --git a/generic/tkGrid.c b/generic/tkGrid.c
index f1e06ba..b58acdc 100644
--- a/generic/tkGrid.c
+++ b/generic/tkGrid.c
@@ -3,7 +3,7 @@
*
* Grid based geometry manager.
*
- * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkImgGIF.c b/generic/tkImgGIF.c
index 62fc935..549a997 100644
--- a/generic/tkImgGIF.c
+++ b/generic/tkImgGIF.c
@@ -683,6 +683,7 @@ FileReadGIF(
}
if ((width > 0) && (height > 0)) {
+ unsigned char* pixelPtr;
Tk_PhotoImageBlock block;
/*
@@ -705,23 +706,25 @@ FileReadGIF(
goto error;
}
nBytes = block.pitch * imageHeight;
- block.pixelPtr = ckalloc(nBytes);
- if (block.pixelPtr) {
- memset(block.pixelPtr, 0, nBytes);
+ pixelPtr = ckalloc(nBytes);
+ if (pixelPtr) {
+ memset(pixelPtr, 0, nBytes);
}
+ block.pixelPtr = pixelPtr;
if (ReadImage(gifConfPtr, interp, block.pixelPtr, chan, imageWidth,
imageHeight, colorMap, srcX, srcY, BitSet(buf[8], INTERLACE),
transparent) != TCL_OK) {
- ckfree(block.pixelPtr);
+ ckfree(pixelPtr);
goto error;
}
+ block.pixelPtr += srcX * block.pixelSize + srcY * block.pitch;
if (Tk_PhotoPutBlock(interp, imageHandle, &block, destX, destY,
width, height, TK_PHOTO_COMPOSITE_SET) != TCL_OK) {
- ckfree(block.pixelPtr);
+ ckfree(pixelPtr);
goto error;
}
- ckfree(block.pixelPtr);
+ ckfree(pixelPtr);
}
/*
diff --git a/generic/tkImgPNG.c b/generic/tkImgPNG.c
index 83406d9..fccb465 100644
--- a/generic/tkImgPNG.c
+++ b/generic/tkImgPNG.c
@@ -196,7 +196,8 @@ static void CleanupPNGImage(PNGImage *pngPtr);
static int DecodeLine(Tcl_Interp *interp, PNGImage *pngPtr);
static int DecodePNG(Tcl_Interp *interp, PNGImage *pngPtr,
Tcl_Obj *fmtObj, Tk_PhotoHandle imageHandle,
- int destX, int destY);
+ int destX, int destY, int width, int height,
+ int srcX, int srcY);
static int EncodePNG(Tcl_Interp *interp,
Tk_PhotoImageBlock *blockPtr, PNGImage *pngPtr);
static int FileMatchPNG(Tcl_Channel chan, const char *fileName,
@@ -2374,15 +2375,19 @@ ParseFormat(
static int
DecodePNG(
- Tcl_Interp *interp,
- PNGImage *pngPtr,
- Tcl_Obj *fmtObj,
- Tk_PhotoHandle imageHandle,
- int destX,
- int destY)
+ Tcl_Interp *interp, /* Interpreter to use for reporting errors. */
+ PNGImage *pngPtr, /* PNG image information record. */
+ Tcl_Obj *fmtObj, /* User-specified format object, or NULL. */
+ Tk_PhotoHandle imageHandle, /* The photo image to write into. */
+ int destX, int destY, /* Coordinates of top-left pixel in photo
+ * image to be written to. */
+ int width, int height, /* Dimensions of block of photo image to be
+ * written to. */
+ int srcX, int srcY) /* Coordinates of top-left pixel to be used in
+ * image being read. */
{
unsigned long chunkType;
- int chunkSz;
+ int result, chunkSz;
unsigned long crc;
/*
@@ -2483,8 +2488,8 @@ DecodePNG(
* to negative here: Tk will not shrink the image.
*/
- if (Tk_PhotoExpand(interp, imageHandle, destX + pngPtr->block.width,
- destY + pngPtr->block.height) == TCL_ERROR) {
+ if (Tk_PhotoExpand(interp, imageHandle, destX + width,
+ destY + height) == TCL_ERROR) {
return TCL_ERROR;
}
@@ -2638,13 +2643,12 @@ DecodePNG(
* Copy the decoded image block into the Tk photo image.
*/
- if (Tk_PhotoPutBlock(interp, imageHandle, &pngPtr->block, destX, destY,
- pngPtr->block.width, pngPtr->block.height,
- TK_PHOTO_COMPOSITE_SET) == TCL_ERROR) {
- return TCL_ERROR;
- }
+ pngPtr->block.pixelPtr += srcX * pngPtr->block.pixelSize + srcY * pngPtr->block.pitch;
+ result = Tk_PhotoPutBlock(interp, imageHandle, &pngPtr->block, destX, destY,
+ width, height, TK_PHOTO_COMPOSITE_SET);
+ pngPtr->block.pixelPtr -= srcX * pngPtr->block.pixelSize + srcY * pngPtr->block.pitch;
- return TCL_OK;
+ return result;
}
/*
@@ -2711,17 +2715,17 @@ FileMatchPNG(
static int
FileReadPNG(
- Tcl_Interp *interp,
- Tcl_Channel chan,
- const char *fileName,
- Tcl_Obj *fmtObj,
- Tk_PhotoHandle imageHandle,
- int destX,
- int destY,
- int width,
- int height,
- int srcX,
- int srcY)
+ Tcl_Interp* interp, /* Interpreter to use for reporting errors. */
+ Tcl_Channel chan, /* The image file, open for reading. */
+ const char* fileName, /* The name of the image file. */
+ Tcl_Obj *fmtObj, /* User-specified format object, or NULL. */
+ Tk_PhotoHandle imageHandle, /* The photo image to write into. */
+ int destX, int destY, /* Coordinates of top-left pixel in photo
+ * image to be written to. */
+ int width, int height, /* Dimensions of block of photo image to be
+ * written to. */
+ int srcX, int srcY) /* Coordinates of top-left pixel to be used in
+ * image being read. */
{
PNGImage png;
int result = TCL_ERROR;
@@ -2729,7 +2733,7 @@ FileReadPNG(
result = InitPNGImage(interp, &png, chan, NULL, TCL_ZLIB_STREAM_INFLATE);
if (TCL_OK == result) {
- result = DecodePNG(interp, &png, fmtObj, imageHandle, destX, destY);
+ result = DecodePNG(interp, &png, fmtObj, imageHandle, destX, destY, width, height, srcX, srcY);
}
CleanupPNGImage(&png);
@@ -2799,16 +2803,16 @@ StringMatchPNG(
static int
StringReadPNG(
- Tcl_Interp *interp,
+ Tcl_Interp* interp, /* Interpreter to use for reporting errors. */
Tcl_Obj *pObjData,
- Tcl_Obj *fmtObj,
- Tk_PhotoHandle imageHandle,
- int destX,
- int destY,
- int width,
- int height,
- int srcX,
- int srcY)
+ Tcl_Obj *fmtObj, /* User-specified format object, or NULL. */
+ Tk_PhotoHandle imageHandle, /* The photo image to write into. */
+ int destX, int destY, /* Coordinates of top-left pixel in photo
+ * image to be written to. */
+ int width, int height, /* Dimensions of block of photo image to be
+ * written to. */
+ int srcX, int srcY) /* Coordinates of top-left pixel to be used in
+ * image being read. */
{
PNGImage png;
int result = TCL_ERROR;
@@ -2817,7 +2821,7 @@ StringReadPNG(
TCL_ZLIB_STREAM_INFLATE);
if (TCL_OK == result) {
- result = DecodePNG(interp, &png, fmtObj, imageHandle, destX, destY);
+ result = DecodePNG(interp, &png, fmtObj, imageHandle, destX, destY, width, height, srcX, srcY);
}
CleanupPNGImage(&png);
diff --git a/generic/tkImgPhoto.c b/generic/tkImgPhoto.c
index cadbb2d..e619910 100644
--- a/generic/tkImgPhoto.c
+++ b/generic/tkImgPhoto.c
@@ -577,7 +577,7 @@ ImgPhotoCmd(
return TCL_ERROR;
}
Tk_PhotoGetImage(srcHandle, &block);
- if ((options.fromX2 > block.width) || (options.fromY2 > block.height)
+ if ((options.fromX > block.width) || (options.fromY > block.height)
|| (options.fromX2 > block.width)
|| (options.fromY2 > block.height)) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
diff --git a/generic/tkInt.h b/generic/tkInt.h
index 0742563..00a55be 100644
--- a/generic/tkInt.h
+++ b/generic/tkInt.h
@@ -6,7 +6,7 @@
*
* Copyright (c) 1990-1994 The Regents of the University of California.
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
- * Copyright (c) 1998 by Scriptics Corporation.
+ * Copyright (c) 1998 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkIntDecls.h b/generic/tkIntDecls.h
index 51ab978..60aec8e 100644
--- a/generic/tkIntDecls.h
+++ b/generic/tkIntDecls.h
@@ -6,7 +6,7 @@
* interfaces are not guaranteed to remain the same between
* versions. Use at your own risk.
*
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkIntPlatDecls.h b/generic/tkIntPlatDecls.h
index 3e6bfb2..8bffa2c 100644
--- a/generic/tkIntPlatDecls.h
+++ b/generic/tkIntPlatDecls.h
@@ -6,7 +6,7 @@
* interfaces are not guaranteed to remain the same between
* versions. Use at your own risk.
*
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
* All rights reserved.
*/
diff --git a/generic/tkIntXlibDecls.h b/generic/tkIntXlibDecls.h
index 4c1d4ac..795edfb 100644
--- a/generic/tkIntXlibDecls.h
+++ b/generic/tkIntXlibDecls.h
@@ -6,7 +6,7 @@
* interfaces are not guaranteed to remain the same between
* versions. Use at your own risk.
*
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
* All rights reserved.
*/
diff --git a/generic/tkMacWinMenu.c b/generic/tkMacWinMenu.c
index 7749c6d..71ed414 100644
--- a/generic/tkMacWinMenu.c
+++ b/generic/tkMacWinMenu.c
@@ -4,7 +4,7 @@
* This module implements the common elements of the Mac and Windows
* specific features of menus. This file is not used for UNIX.
*
- * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkMain.c b/generic/tkMain.c
index ab44c77..3174499 100644
--- a/generic/tkMain.c
+++ b/generic/tkMain.c
@@ -17,7 +17,7 @@
#include "tkInt.h"
#if defined(_WIN32) && !defined(UNICODE) && !defined(STATIC_BUILD)
-MODULE_SCOPE int TkCygwinMainEx(int, char **, Tcl_AppInitProc *, Tcl_Interp *);
+MODULE_SCOPE void TkCygwinMainEx(int, char **, Tcl_AppInitProc *, Tcl_Interp *);
#endif
/*
@@ -25,6 +25,7 @@ MODULE_SCOPE int TkCygwinMainEx(int, char **, Tcl_AppInitProc *, Tcl_Interp *);
*/
static const char DEFAULT_PRIMARY_PROMPT[] = "% ";
+static const char ENCODING_ERROR[] = "\n\t(encoding error in stderr)";
/*
* This file can be compiled on Windows in UNICODE mode, as well as on all
@@ -68,21 +69,23 @@ NewNativeObj(
{
Tcl_Obj *obj;
Tcl_DString ds;
+ const char *str;
#if defined(_WIN32) && defined(UNICODE)
Tcl_DStringInit(&ds);
Tcl_WCharToUtfDString(string, wcslen(string), &ds);
+ str = Tcl_DStringValue(&ds);
#else
- Tcl_ExternalToUtfDString(NULL, (char *)string, -1, &ds);
+ str = Tcl_ExternalToUtfDString(NULL, (char *)string, strlen(string), &ds);
#endif
- obj = Tcl_NewStringObj(Tcl_DStringValue(&ds), Tcl_DStringLength(&ds));
+ obj = Tcl_NewStringObj(str, Tcl_DStringLength(&ds));
Tcl_DStringFree(&ds);
return obj;
}
/*
* Declarations for various library functions and variables (don't want to
- * include tkInt.h or tkPort.h here, because people might copy this file out
+ * include tclInt.h or tclPort.h here, because people might copy this file out
* of the Tk source directory to make their own modified versions). Note: do
* not declare "exit" here even though a declaration is really needed, because
* it will conflict with a declaration elsewhere on some systems.
@@ -139,7 +142,7 @@ typedef struct {
*/
static void Prompt(Tcl_Interp *interp, InteractiveState *isPtr);
-static void StdinProc(ClientData clientData, int mask);
+static void StdinProc(void *clientData, int mask);
/*
*----------------------------------------------------------------------
@@ -170,12 +173,18 @@ Tk_MainEx(
* but before starting to execute commands. */
Tcl_Interp *interp)
{
+ int i=0; /* argv[i] index */
Tcl_Obj *path, *argvPtr, *appName;
const char *encodingName;
int code, nullStdin = 0;
Tcl_Channel chan;
InteractiveState is;
+ if (0 < argc) {
+ --argc; /* "consume" argv[0] */
+ ++i;
+ }
+
/*
* Ensure that we are getting a compatible version of Tcl.
*/
@@ -197,15 +206,13 @@ Tk_MainEx(
* Tk_MainEx function of libtk8.?.dll, not this one. */
if (Tcl_GetVar2(interp, "env", "DISPLAY", TCL_GLOBAL_ONLY)) {
loadCygwinTk:
- if (TkCygwinMainEx(argc, argv, appInitProc, interp)) {
- /* Should never reach here. */
- return;
- }
+ TkCygwinMainEx(argc, argv, appInitProc, interp);
+ /* Only returns when Tk_MainEx() was not found */
} else {
- int i;
+ int j;
- for (i = 1; i < argc; ++i) {
- if (!_tcscmp(argv[i], TEXT("-display"))) {
+ for (j = 1; j < argc; ++j) {
+ if (!strcmp(argv[j], "-display")) {
goto loadCygwinTk;
}
}
@@ -251,23 +258,24 @@ Tk_MainEx(
* -file FILENAME (ancient history support only)
*/
- if ((argc > 3) && (0 == _tcscmp(TEXT("-encoding"), argv[1]))
+ /* mind argc is being adjusted as we proceed */
+ if ((argc >= 3) && (0 == _tcscmp(TEXT("-encoding"), argv[1]))
&& ('-' != argv[3][0])) {
Tcl_Obj *value = NewNativeObj(argv[2]);
Tcl_SetStartupScript(NewNativeObj(argv[3]), Tcl_GetString(value));
Tcl_DecrRefCount(value);
argc -= 3;
- argv += 3;
- } else if ((argc > 1) && ('-' != argv[1][0])) {
+ i += 3;
+ } else if ((argc >= 1) && ('-' != argv[1][0])) {
Tcl_SetStartupScript(NewNativeObj(argv[1]), NULL);
argc--;
- argv++;
- } else if ((argc > 2) && (length = _tcslen(argv[1]))
+ i++;
+ } else if ((argc >= 2) && (length = _tcslen(argv[1]))
&& (length > 1) && (0 == _tcsncmp(TEXT("-file"), argv[1], length))
&& ('-' != argv[2][0])) {
Tcl_SetStartupScript(NewNativeObj(argv[2]), NULL);
argc -= 2;
- argv += 2;
+ i += 2;
}
}
@@ -278,14 +286,12 @@ Tk_MainEx(
appName = path;
}
Tcl_SetVar2Ex(interp, "argv0", NULL, appName, TCL_GLOBAL_ONLY);
- argc--;
- argv++;
Tcl_SetVar2Ex(interp, "argc", NULL, Tcl_NewIntObj(argc), TCL_GLOBAL_ONLY);
argvPtr = Tcl_NewListObj(0, NULL);
while (argc--) {
- Tcl_ListObjAppendElement(NULL, argvPtr, NewNativeObj(*argv++));
+ Tcl_ListObjAppendElement(NULL, argvPtr, NewNativeObj(argv[i++]));
}
Tcl_SetVar2Ex(interp, "argv", NULL, argvPtr, TCL_GLOBAL_ONLY);
@@ -308,7 +314,7 @@ Tk_MainEx(
}
#endif
Tcl_SetVar2Ex(interp, "tcl_interactive", NULL,
- Tcl_NewIntObj(!path && (is.tty || nullStdin)), TCL_GLOBAL_ONLY);
+ Tcl_NewBooleanObj(!path && (is.tty || nullStdin)), TCL_GLOBAL_ONLY);
/*
* Invoke application-specific initialization.
@@ -403,7 +409,7 @@ Tk_MainEx(
static void
StdinProc(
- ClientData clientData, /* The state of interactive cmd line */
+ void *clientData, /* The state of interactive cmd line */
int mask) /* Not used. */
{
char *cmd;
@@ -418,10 +424,15 @@ StdinProc(
if ((length < 0) && !isPtr->gotPartial) {
if (isPtr->tty) {
+ /*
+ * Would be better to find a way to exit the mainLoop? Or perhaps
+ * evaluate [exit]? Leaving as is for now due to compatibility
+ * concerns.
+ */
+
Tcl_Exit(0);
- } else {
- Tcl_DeleteChannelHandler(chan, StdinProc, isPtr);
}
+ Tcl_DeleteChannelHandler(chan, StdinProc, isPtr);
return;
}
@@ -443,20 +454,33 @@ StdinProc(
Tcl_CreateChannelHandler(chan, 0, StdinProc, isPtr);
code = Tcl_RecordAndEval(interp, cmd, TCL_EVAL_GLOBAL);
-
- isPtr->input = Tcl_GetStdChannel(TCL_STDIN);
- if (isPtr->input) {
- Tcl_CreateChannelHandler(isPtr->input, TCL_READABLE, StdinProc, isPtr);
+ isPtr->input = chan = Tcl_GetStdChannel(TCL_STDIN);
+ if (chan != NULL) {
+ Tcl_CreateChannelHandler(chan, TCL_READABLE, StdinProc, isPtr);
}
Tcl_DStringFree(&isPtr->command);
- if (Tcl_GetString(Tcl_GetObjResult(interp))[0] != '\0') {
- if ((code != TCL_OK) || (isPtr->tty)) {
- chan = Tcl_GetStdChannel((code != TCL_OK) ? TCL_STDERR : TCL_STDOUT);
- if (chan) {
- Tcl_WriteObj(chan, Tcl_GetObjResult(interp));
- Tcl_WriteChars(chan, "\n", 1);
+ if (code != TCL_OK) {
+ chan = Tcl_GetStdChannel(TCL_STDERR);
+
+ if (chan != NULL) {
+ if (Tcl_WriteObj(chan, Tcl_GetObjResult(interp)) < 0) {
+ Tcl_WriteChars(chan, ENCODING_ERROR, -1);
+ }
+ Tcl_WriteChars(chan, "\n", 1);
+ }
+ } else if (isPtr->tty) {
+ Tcl_Obj *resultPtr = Tcl_GetObjResult(interp);
+ chan = Tcl_GetStdChannel(TCL_STDOUT);
+
+ Tcl_IncrRefCount(resultPtr);
+ (void)Tcl_GetStringFromObj(resultPtr, &length);
+ if ((length > 0) && (chan != NULL)) {
+ if (Tcl_WriteObj(chan, resultPtr) < 0) {
+ Tcl_WriteChars(chan, "\n\t(encoding error in stdout)", -1);
}
+ Tcl_WriteChars(chan, "\n", 1);
}
+ Tcl_DecrRefCount(resultPtr);
}
/*
@@ -512,12 +536,12 @@ Prompt(
if (code != TCL_OK) {
Tcl_AddErrorInfo(interp,
"\n (script that generates prompt)");
- if (Tcl_GetString(Tcl_GetObjResult(interp))[0] != '\0') {
- chan = Tcl_GetStdChannel(TCL_STDERR);
- if (chan != NULL) {
- Tcl_WriteObj(chan, Tcl_GetObjResult(interp));
- Tcl_WriteChars(chan, "\n", 1);
- }
+ chan = Tcl_GetStdChannel(TCL_STDERR);
+ if (chan != NULL) {
+ if (Tcl_WriteObj(chan, Tcl_GetObjResult(interp)) < 0) {
+ Tcl_WriteChars(chan, ENCODING_ERROR, -1);
+ }
+ Tcl_WriteChars(chan, "\n", 1);
}
goto defaultPrompt;
}
diff --git a/generic/tkMenu.h b/generic/tkMenu.h
index 51e8cb2..ccc365a 100644
--- a/generic/tkMenu.h
+++ b/generic/tkMenu.h
@@ -4,7 +4,7 @@
* Declarations shared among all of the files that implement menu
* widgets.
*
- * Copyright (c) 1996-1998 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1998 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkMenuDraw.c b/generic/tkMenuDraw.c
index 3851a06..1ac4558 100644
--- a/generic/tkMenuDraw.c
+++ b/generic/tkMenuDraw.c
@@ -4,7 +4,7 @@
* This module implements the platform-independent drawing and geometry
* calculations of menu widgets.
*
- * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkMenubutton.h b/generic/tkMenubutton.h
index a5a1d3a..7c25509 100644
--- a/generic/tkMenubutton.h
+++ b/generic/tkMenubutton.h
@@ -4,7 +4,7 @@
* Declarations of types and functions used to implement the menubutton
* widget.
*
- * Copyright (c) 1996-1997 by Sun Microsystems, Inc.
+ * Copyright (c) 1996-1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkMessage.c b/generic/tkMessage.c
index cc67b46..6f5d0ce 100644
--- a/generic/tkMessage.c
+++ b/generic/tkMessage.c
@@ -7,7 +7,7 @@
*
* Copyright (c) 1990-1994 The Regents of the University of California.
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
- * Copyright (c) 1998-2000 by Ajuba Solutions.
+ * Copyright (c) 1998-2000 Ajuba Solutions.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkOldTest.c b/generic/tkOldTest.c
index 1c0c575..b4d7f04 100644
--- a/generic/tkOldTest.c
+++ b/generic/tkOldTest.c
@@ -8,7 +8,7 @@
*
* Copyright (c) 1993-1994 The Regents of the University of California.
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
* Contributions by Don Porter, NIST, 2007. (not subject to US copyright)
*
* See the file "license.terms" for information on usage and redistribution of
diff --git a/generic/tkPlatDecls.h b/generic/tkPlatDecls.h
index bad633f..0e11746 100644
--- a/generic/tkPlatDecls.h
+++ b/generic/tkPlatDecls.h
@@ -3,7 +3,7 @@
*
* Declarations of functions in the platform-specific public Tcl API.
*
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkPointer.c b/generic/tkPointer.c
index 1227215..905489a 100644
--- a/generic/tkPointer.c
+++ b/generic/tkPointer.c
@@ -6,7 +6,7 @@
* to generate appropriate enter/leave events, and to update the global
* grab window information.
*
- * Copyright (c) 1996 by Sun Microsystems, Inc.
+ * Copyright (c) 1996 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkScale.c b/generic/tkScale.c
index 2d6502d..d8d0915 100644
--- a/generic/tkScale.c
+++ b/generic/tkScale.c
@@ -11,7 +11,7 @@
*
* Copyright (c) 1990-1994 The Regents of the University of California.
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
- * Copyright (c) 1998-2000 by Scriptics Corporation.
+ * Copyright (c) 1998-2000 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkScale.h b/generic/tkScale.h
index 2ce2190..94839c3 100644
--- a/generic/tkScale.h
+++ b/generic/tkScale.h
@@ -4,8 +4,8 @@
* Declarations of types and functions used to implement the scale
* widget.
*
- * Copyright (c) 1996 by Sun Microsystems, Inc.
- * Copyright (c) 1999-2000 by Scriptics Corporation.
+ * Copyright (c) 1996 Sun Microsystems, Inc.
+ * Copyright (c) 1999-2000 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkScrollbar.h b/generic/tkScrollbar.h
index 2d521ae..4d62263 100644
--- a/generic/tkScrollbar.h
+++ b/generic/tkScrollbar.h
@@ -4,7 +4,7 @@
* Declarations of types and functions used to implement the scrollbar
* widget.
*
- * Copyright (c) 1996 by Sun Microsystems, Inc.
+ * Copyright (c) 1996 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkStubInit.c b/generic/tkStubInit.c
index 8c37474..7cfbd3d 100644
--- a/generic/tkStubInit.c
+++ b/generic/tkStubInit.c
@@ -3,7 +3,7 @@
*
* This file contains the initializers for the Tk stub vectors.
*
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkStubLib.c b/generic/tkStubLib.c
index 0400bfa..5cea659 100644
--- a/generic/tkStubLib.c
+++ b/generic/tkStubLib.c
@@ -4,7 +4,7 @@
* Stub object that will be statically linked into extensions that want
* to access Tk.
*
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
* Copyright (c) 1998 Paul Duffin.
*
* See the file "license.terms" for information on usage and redistribution of
diff --git a/generic/tkTest.c b/generic/tkTest.c
index 96793df..755a6be 100644
--- a/generic/tkTest.c
+++ b/generic/tkTest.c
@@ -8,7 +8,7 @@
*
* Copyright (c) 1993-1994 The Regents of the University of California.
* Copyright (c) 1994-1997 Sun Microsystems, Inc.
- * Copyright (c) 1998-1999 by Scriptics Corporation.
+ * Copyright (c) 1998-1999 Scriptics Corporation.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkText.h b/generic/tkText.h
index 9aa3282..962a269 100644
--- a/generic/tkText.h
+++ b/generic/tkText.h
@@ -168,9 +168,12 @@ typedef struct TkTextSegment {
int size; /* Size of this segment (# of bytes of index
* space it occupies). */
union {
- char chars[TCL_UTF_MAX]; /* Characters that make up character info.
- * Actual length varies to hold as many
- * characters as needed.*/
+ /* The TKFLEXARRAY macro - unfortunately - doesn't work inside a union. */
+#if defined(__GNUC__) && (__GNUC__ > 2)
+ char chars[0]; /* Characters that make up character info. */
+#else /* Actual length varies to hold as many */
+ char chars[1]; /* characters as needed. See [dacd18294b] */
+#endif
TkTextToggle toggle; /* Information about tag toggle. */
TkTextMark mark; /* Information about mark. */
TkTextEmbWindow ew; /* Information about embedded window. */
diff --git a/generic/tkUndo.c b/generic/tkUndo.c
index 7494332..ba3a3a5 100644
--- a/generic/tkUndo.c
+++ b/generic/tkUndo.c
@@ -3,8 +3,8 @@
*
* This module provides the implementation of an undo stack.
*
- * Copyright (c) 2002 by Ludwig Callewaert.
- * Copyright (c) 2003-2004 by Vincent Darley.
+ * Copyright (c) 2002 Ludwig Callewaert.
+ * Copyright (c) 2003-2004 Vincent Darley.
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
diff --git a/generic/tkWindow.c b/generic/tkWindow.c
index ccc62bc..5d664b9 100644
--- a/generic/tkWindow.c
+++ b/generic/tkWindow.c
@@ -2940,7 +2940,7 @@ static HMODULE tkcygwindll = NULL;
* encoding conversions.
*/
-MODULE_SCOPE int
+MODULE_SCOPE void
TkCygwinMainEx(
int argc, /* Number of arguments. */
char **argv, /* Array of argument strings. */
@@ -2962,17 +2962,13 @@ TkCygwinMainEx(
memcpy(name+len-8, L"libtk8", 6 * sizeof(WCHAR));
tkcygwindll = LoadLibraryW(name);
- if (!tkcygwindll) {
- /* dll is not present */
- return 0;
- }
- tkmainex = (void (*)(int, char **, Tcl_AppInitProc *, Tcl_Interp *))
- (void *)GetProcAddress(tkcygwindll, "Tk_MainEx");
- if (!tkmainex) {
- return 0;
+ if (tkcygwindll) {
+ tkmainex = (void (*)(int, char **, Tcl_AppInitProc *, Tcl_Interp *))
+ (void *)GetProcAddress(tkcygwindll, "Tk_MainEx");
+ if (tkmainex) {
+ tkmainex(argc, argv, appInitProc, interp);
+ }
}
- tkmainex(argc, argv, appInitProc, interp);
- return 1;
}
#endif /* _WIN32 */
@@ -3003,7 +2999,7 @@ int
Tk_Init(
Tcl_Interp *interp) /* Interpreter to initialize. */
{
-#if defined(_WIN32)
+#if defined(_WIN32) && !defined(STATIC_BUILD)
if (tkcygwindll) {
int (*tkinit)(Tcl_Interp *);
@@ -3076,7 +3072,7 @@ Tk_SafeInit(
* checked at several places to differentiate the two initialisations.
*/
-#if defined(_WIN32)
+#if defined(_WIN32) && !defined(STATIC_BUILD)
if (tkcygwindll) {
int (*tksafeinit)(Tcl_Interp *);
diff --git a/generic/ttk/ttkButton.c b/generic/ttk/ttkButton.c
index 92edea2..a02bfa5 100644
--- a/generic/ttk/ttkButton.c
+++ b/generic/ttk/ttkButton.c
@@ -91,8 +91,8 @@ static Tk_OptionSpec BaseOptionSpecs[] =
* Compatibility/legacy options
*/
{TK_OPTION_STRING, "-state", "state", "State",
- "normal", Tk_Offset(Base,base.stateObj), -1,
- 0,0,STATE_CHANGED },
+ "normal", Tk_Offset(Base,base.stateObj), -1,
+ 0,0,STATE_CHANGED },
WIDGET_INHERIT_OPTIONS(ttkCoreOptionSpecs)
};
@@ -119,10 +119,11 @@ static void TextVariableChanged(void *clientData, const char *value)
}
static void
-BaseInitialize(Tcl_Interp *dummy, void *recordPtr)
+BaseInitialize(
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr)
{
Base *basePtr = (Base *)recordPtr;
- (void)dummy;
basePtr->base.textVariableTrace = 0;
basePtr->base.imageSpec = NULL;
@@ -140,16 +141,15 @@ BaseCleanup(void *recordPtr)
static void
BaseImageChanged(
- ClientData clientData, int x, int y, int width, int height,
- int imageWidth, int imageHeight)
+ void *clientData,
+ TCL_UNUSED(int),
+ TCL_UNUSED(int),
+ TCL_UNUSED(int),
+ TCL_UNUSED(int),
+ TCL_UNUSED(int),
+ TCL_UNUSED(int))
{
Base *basePtr = (Base *)clientData;
- (void)x;
- (void)y;
- (void)width;
- (void)height;
- (void)imageWidth;
- (void)imageHeight;
TtkResizeWidget(&basePtr->core);
}
@@ -199,12 +199,13 @@ error:
}
static int
-BasePostConfigure(Tcl_Interp *dummy, void *recordPtr, int mask)
+BasePostConfigure(
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr,
+ TCL_UNUSED(int))
{
Base *basePtr = (Base *)recordPtr;
int status = TCL_OK;
- (void)dummy;
- (void)mask;
if (basePtr->base.textVariableTrace) {
status = Ttk_FireTrace(basePtr->base.textVariableTrace);
@@ -862,8 +863,8 @@ TTK_END_LAYOUT
* +++ Initialization.
*/
-MODULE_SCOPE
-void TtkButton_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkButton_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkClamTheme.c b/generic/ttk/ttkClamTheme.c
index 1081c4b..8c2b33b 100644
--- a/generic/ttk/ttkClamTheme.c
+++ b/generic/ttk/ttkClamTheme.c
@@ -67,24 +67,24 @@ static void DrawSmoothBorder(
if ( outerColorObj
&& (gc=Ttk_GCForColor(tkwin,outerColorObj,d)))
{
- XDrawLine(display,d,gc, x1+1,y1, x2-1+w,y1); /* N */
- XDrawLine(display,d,gc, x1+1,y2, x2-1+w,y2); /* S */
- XDrawLine(display,d,gc, x1,y1+1, x1,y2-1+w); /* E */
- XDrawLine(display,d,gc, x2,y1+1, x2,y2-1+w); /* W */
+ XDrawLine(display,d,gc, x1+1,y1, x2-1+w,y1); /* N */
+ XDrawLine(display,d,gc, x1+1,y2, x2-1+w,y2); /* S */
+ XDrawLine(display,d,gc, x1,y1+1, x1,y2-1+w); /* W */
+ XDrawLine(display,d,gc, x2,y1+1, x2,y2-1+w); /* E */
}
if ( upperColorObj
&& (gc=Ttk_GCForColor(tkwin,upperColorObj,d)))
{
- XDrawLine(display,d,gc, x1+1,y1+1, x2-1+w,y1+1); /* N */
- XDrawLine(display,d,gc, x1+1,y1+1, x1+1,y2-1); /* E */
+ XDrawLine(display,d,gc, x1+1,y1+1, x2-1+w,y1+1); /* N */
+ XDrawLine(display,d,gc, x1+1,y1+1, x1+1,y2-1); /* W */
}
if ( lowerColorObj
&& (gc=Ttk_GCForColor(tkwin,lowerColorObj,d)))
{
- XDrawLine(display,d,gc, x2-1,y2-1, x1+1-w,y2-1); /* S */
- XDrawLine(display,d,gc, x2-1,y2-1, x2-1,y1+1-w); /* W */
+ XDrawLine(display,d,gc, x2-1,y2-1, x1+1-w,y2-1); /* S */
+ XDrawLine(display,d,gc, x2-1,y2-1, x2-1,y1+1-w); /* E */
}
}
@@ -129,14 +129,15 @@ static Ttk_ElementOptionSpec BorderElementOptions[] = {
*/
static void BorderElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
BorderElement *border = (BorderElement*)elementRecord;
int borderWidth = 2;
- (void)dummy;
- (void)widthPtr;
- (void)heightPtr;
Tk_GetPixelsFromObj(NULL, tkwin, border->borderWidthObj, &borderWidth);
if (borderWidth == 1) ++borderWidth;
@@ -144,15 +145,17 @@ static void BorderElementSize(
}
static void BorderElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
BorderElement *border = (BorderElement *)elementRecord;
int relief = TK_RELIEF_FLAT;
int borderWidth = 2;
Tcl_Obj *outer = 0, *upper = 0, *lower = 0;
- (void)dummy;
- (void)state;
Tk_GetReliefFromObj(NULL, border->reliefObj, &relief);
Tk_GetPixelsFromObj(NULL, tkwin, border->borderWidthObj, &borderWidth);
@@ -198,7 +201,6 @@ static Ttk_ElementSpec BorderElementSpec = {
typedef struct {
Tcl_Obj *borderColorObj;
Tcl_Obj *lightColorObj;
- Tcl_Obj *darkColorObj;
Tcl_Obj *backgroundObj;
} FieldElement;
@@ -207,37 +209,35 @@ static Ttk_ElementOptionSpec FieldElementOptions[] = {
Tk_Offset(FieldElement,borderColorObj), DARKEST_COLOR },
{ "-lightcolor", TK_OPTION_COLOR,
Tk_Offset(FieldElement,lightColorObj), LIGHT_COLOR },
- { "-darkcolor", TK_OPTION_COLOR,
- Tk_Offset(FieldElement,darkColorObj), DARK_COLOR },
{ "-fieldbackground", TK_OPTION_BORDER,
Tk_Offset(FieldElement,backgroundObj), "white" },
{ NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void FieldElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ TCL_UNUSED(void *), /* elementRecord */
+ TCL_UNUSED(Tk_Window),
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
- (void)dummy;
- (void)elementRecord;
- (void)tkwin;
- (void)widthPtr;
- (void)heightPtr;
-
*paddingPtr = Ttk_UniformPadding(2);
}
static void FieldElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
FieldElement *field = (FieldElement *)elementRecord;
Tk_3DBorder bg = Tk_Get3DBorderFromObj(tkwin, field->backgroundObj);
Ttk_Box f = Ttk_PadBox(b, Ttk_UniformPadding(2));
Tcl_Obj *outer = field->borderColorObj,
*inner = field->lightColorObj;
- (void)dummy;
- (void)state;
DrawSmoothBorder(tkwin, d, b, outer, inner, inner);
Tk_Fill3DRectangle(
@@ -258,7 +258,7 @@ static Ttk_ElementSpec FieldElementSpec = {
*/
static void ComboboxFieldElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ Drawable d, Ttk_Box b, Ttk_State state)
{
FieldElement *field = (FieldElement *)elementRecord;
GC gc = Ttk_GCForColor(tkwin,field->borderColorObj,d);
@@ -309,14 +309,13 @@ static Ttk_ElementOptionSpec IndicatorElementOptions[] = {
};
static void IndicatorElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
IndicatorElement *indicator = (IndicatorElement *)elementRecord;
Ttk_Padding margins;
int size = 10;
- (void)dummy;
- (void)paddingPtr;
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &margins);
Tk_GetPixelsFromObj(NULL, tkwin, indicator->sizeObj, &size);
@@ -325,7 +324,7 @@ static void IndicatorElementSize(
}
static void RadioIndicatorElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
+ TCL_UNUSED(void *), void *elementRecord, Tk_Window tkwin,
Drawable d, Ttk_Box b, unsigned state)
{
IndicatorElement *indicator = (IndicatorElement *)elementRecord;
@@ -334,7 +333,6 @@ static void RadioIndicatorElementDraw(
GC gcu=Ttk_GCForColor(tkwin,indicator->upperColorObj,d);
GC gcl=Ttk_GCForColor(tkwin,indicator->lowerColorObj,d);
Ttk_Padding padding;
- (void)dummy;
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &padding);
b = Ttk_PadBox(b, padding);
@@ -354,8 +352,8 @@ static void RadioIndicatorElementDraw(
}
static void CheckIndicatorElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ TCL_UNUSED(void *), void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b, Ttk_State state)
{
Display *display = Tk_Display(tkwin);
IndicatorElement *indicator = (IndicatorElement *)elementRecord;
@@ -366,7 +364,6 @@ static void CheckIndicatorElementDraw(
GC gcl=Ttk_GCForColor(tkwin,indicator->lowerColorObj,d);
Ttk_Padding padding;
const int w = WIN32_XDRAWLINE_HACK;
- (void)dummy;
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &padding);
b = Ttk_PadBox(b, padding);
@@ -434,14 +431,13 @@ static Ttk_ElementOptionSpec MenuIndicatorElementOptions[] =
};
static void MenuIndicatorElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
MenuIndicatorElement *indicator = (MenuIndicatorElement *)elementRecord;
Ttk_Padding margins;
int size = MENUBUTTON_ARROW_SIZE;
- (void)dummy;
- (void)paddingPtr;
Tk_GetPixelsFromObj(NULL, tkwin, indicator->sizeObj, &size);
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->paddingObj, &margins);
@@ -451,16 +447,15 @@ static void MenuIndicatorElementSize(
}
static void MenuIndicatorElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
MenuIndicatorElement *indicator = (MenuIndicatorElement *)elementRecord;
XColor *arrowColor = Tk_GetColorFromObj(tkwin, indicator->colorObj);
GC gc = Tk_GCForColor(arrowColor, d);
int size = MENUBUTTON_ARROW_SIZE;
int width, height;
- (void)dummy;
- (void)state;
Tk_GetPixelsFromObj(NULL, tkwin, indicator->sizeObj, &size);
@@ -499,22 +494,21 @@ static Ttk_ElementOptionSpec GripElementOptions[] = {
Tk_Offset(GripElement,lightColorObj), LIGHT_COLOR },
{ "-bordercolor", TK_OPTION_COLOR,
Tk_Offset(GripElement,borderColorObj), DARKEST_COLOR },
- { "-gripcount", TK_OPTION_INT,
+ { "-gripcount", TK_OPTION_PIXELS,
Tk_Offset(GripElement,gripCountObj), "5" },
{ NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void GripElementSize(
void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
int horizontal = *((Ttk_Orient*)clientData) == TTK_ORIENT_HORIZONTAL;
GripElement *grip = (GripElement *)elementRecord;
int gripCount = 0;
- (void)tkwin;
- (void)paddingPtr;
- Tcl_GetIntFromObj(NULL, grip->gripCountObj, &gripCount);
+ Tk_GetPixelsFromObj(NULL, tkwin, grip->gripCountObj, &gripCount);
if (horizontal) {
*widthPtr = 2*gripCount;
} else {
@@ -524,7 +518,8 @@ static void GripElementSize(
static void GripElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
const int w = WIN32_XDRAWLINE_HACK;
int horizontal = *((Ttk_Orient*)clientData) == TTK_ORIENT_HORIZONTAL;
@@ -534,7 +529,7 @@ static void GripElementDraw(
int gripPad = 1, gripCount = 0;
int i;
- Tcl_GetIntFromObj(NULL, grip->gripCountObj, &gripCount);
+ Tk_GetPixelsFromObj(NULL, tkwin, grip->gripCountObj, &gripCount);
if (horizontal) {
int x = b.x + b.width / 2 - gripCount;
@@ -598,22 +593,24 @@ static Ttk_ElementOptionSpec ScrollbarElementOptions[] = {
Tk_Offset(ScrollbarElement,arrowColorObj), "#000000" },
{ "-arrowsize", TK_OPTION_PIXELS,
Tk_Offset(ScrollbarElement,arrowSizeObj), STR(SCROLLBAR_THICKNESS) },
- { "-gripcount", TK_OPTION_INT,
+ { "-gripcount", TK_OPTION_PIXELS,
Tk_Offset(ScrollbarElement,gripCountObj), "5" },
- { "-sliderlength", TK_OPTION_INT,
+ { "-sliderlength", TK_OPTION_PIXELS,
Tk_Offset(ScrollbarElement,sliderlengthObj), "30" },
{ NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void TroughElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
GC gcb = Ttk_GCForColor(tkwin,sb->borderColorObj,d);
GC gct = Ttk_GCForColor(tkwin,sb->troughColorObj,d);
- (void)dummy;
- (void)state;
XFillRectangle(Tk_Display(tkwin), d, gct, b.x, b.y, b.width-1, b.height-1);
XDrawRectangle(Tk_Display(tkwin), d, gcb, b.x, b.y, b.width-1, b.height-1);
@@ -628,22 +625,27 @@ static Ttk_ElementSpec TroughElementSpec = {
};
static void ThumbElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
int size = SCROLLBAR_THICKNESS;
- (void)dummy;
- (void)tkwin;
- (void)paddingPtr;
- Tcl_GetIntFromObj(NULL, sb->arrowSizeObj, &size);
+ Tk_GetPixelsFromObj(NULL, tkwin, sb->arrowSizeObj, &size);
*widthPtr = *heightPtr = size;
}
static void ThumbElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
int gripCount = 0;
@@ -651,8 +653,6 @@ static void ThumbElementDraw(
GC lightGC, darkGC;
int x1, y1, x2, y2, dx, dy, i;
const int w = WIN32_XDRAWLINE_HACK;
- (void)dummy;
- (void)state;
DrawSmoothBorder(tkwin, d, b,
sb->borderColorObj, sb->lightColorObj, sb->darkColorObj);
@@ -664,7 +664,7 @@ static void ThumbElementDraw(
* Draw grip:
*/
Ttk_GetOrientFromObj(NULL, sb->orientObj, &orient);
- Tcl_GetIntFromObj(NULL, sb->gripCountObj, &gripCount);
+ Tk_GetPixelsFromObj(NULL, tkwin, sb->gripCountObj, &gripCount);
lightGC = Ttk_GCForColor(tkwin,sb->lightColorObj,d);
darkGC = Ttk_GCForColor(tkwin,sb->borderColorObj,d);
@@ -700,18 +700,20 @@ static Ttk_ElementSpec ThumbElementSpec = {
* +++ Slider element.
*/
static void SliderElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
int length, thickness;
int orient;
- (void)dummy;
- (void)paddingPtr;
length = thickness = SCROLLBAR_THICKNESS;
Ttk_GetOrientFromObj(NULL, sb->orientObj, &orient);
- Tcl_GetIntFromObj(NULL, sb->arrowSizeObj, &thickness);
+ Tk_GetPixelsFromObj(NULL, tkwin, sb->arrowSizeObj, &thickness);
Tk_GetPixelsFromObj(NULL, tkwin, sb->sliderlengthObj, &length);
if (orient == TTK_ORIENT_VERTICAL) {
*heightPtr = length;
@@ -720,7 +722,6 @@ static void SliderElementSize(
*heightPtr = thickness;
*widthPtr = length;
}
-
}
static Ttk_ElementSpec SliderElementSpec = {
@@ -746,12 +747,14 @@ static void PbarElementSize(
}
static void PbarElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
- (void)dummy;
- (void)state;
b = Ttk_PadBox(b, Ttk_UniformPadding(2));
if (b.width > 4 && b.height > 4) {
@@ -771,34 +774,43 @@ static Ttk_ElementSpec PbarElementSpec = {
PbarElementDraw
};
-
/*------------------------------------------------------------------------
* +++ Scrollbar arrows.
*/
static int ArrowElements[] = { ARROW_UP, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT };
static void ArrowElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ void *clientData, void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
+ ArrowDirection direction = *(ArrowDirection*)clientData;
+ Ttk_Padding padding = Ttk_UniformPadding(3);
int size = SCROLLBAR_THICKNESS;
- (void)dummy;
- (void)tkwin;
- (void)paddingPtr;
- Tcl_GetIntFromObj(NULL, sb->arrowSizeObj, &size);
- *widthPtr = *heightPtr = size;
+ Tk_GetPixelsFromObj(NULL, tkwin, sb->arrowSizeObj, &size);
+ size -= Ttk_PaddingWidth(padding);
+ TtkArrowSize(size/2, direction, widthPtr, heightPtr);
+ *widthPtr += Ttk_PaddingWidth(padding);
+ *heightPtr += Ttk_PaddingHeight(padding);
+ if (*widthPtr < *heightPtr) {
+ *widthPtr = *heightPtr;
+ } else {
+ *heightPtr = *widthPtr;
+ }
}
static void ArrowElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned state)
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- ArrowDirection direction = *(ArrowDirection*)clientData;
ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
- GC gc = Ttk_GCForColor(tkwin,sb->arrowColorObj, d);
- int h, cx, cy;
+ ArrowDirection direction = *(ArrowDirection*)clientData;
+ Ttk_Padding padding = Ttk_UniformPadding(3);
+ int cx, cy;
+ GC gc = Ttk_GCForColor(tkwin, sb->arrowColorObj, d);
DrawSmoothBorder(tkwin, d, b,
sb->borderColorObj, sb->lightColorObj, sb->darkColorObj);
@@ -807,9 +819,25 @@ static void ArrowElementDraw(
Tk_Display(tkwin), d, BackgroundGC(tkwin, sb->backgroundObj),
b.x+2, b.y+2, b.width-4, b.height-4);
- b = Ttk_PadBox(b, Ttk_UniformPadding(3));
- h = b.width < b.height ? b.width : b.height;
- TtkArrowSize(h/2, direction, &cx, &cy);
+ b = Ttk_PadBox(b, padding);
+
+ switch (direction) {
+ case ARROW_UP:
+ case ARROW_DOWN:
+ TtkArrowSize(b.width/2, direction, &cx, &cy);
+ if ((b.height - cy) % 2 == 1) {
+ ++cy;
+ }
+ break;
+ case ARROW_LEFT:
+ case ARROW_RIGHT:
+ TtkArrowSize(b.height/2, direction, &cx, &cy);
+ if ((b.width - cx) % 2 == 1) {
+ ++cx;
+ }
+ break;
+ }
+
b = Ttk_AnchorBox(b, cx, cy, TK_ANCHOR_CENTER);
TtkFillArrow(Tk_Display(tkwin), d, gc, b, direction);
@@ -823,6 +851,34 @@ static Ttk_ElementSpec ArrowElementSpec = {
ArrowElementDraw
};
+/*
+ * Modified arrow element for spinboxes:
+ * The width and height are different.
+ */
+static void SpinboxArrowElementSize(
+ void *clientData, void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
+{
+ ScrollbarElement *sb = (ScrollbarElement *)elementRecord;
+ ArrowDirection direction = *(ArrowDirection*)clientData;
+ Ttk_Padding padding = Ttk_UniformPadding(3);
+ int size = 10;
+
+ Tk_GetPixelsFromObj(NULL, tkwin, sb->arrowSizeObj, &size);
+ size -= Ttk_PaddingWidth(padding);
+ TtkArrowSize(size/2, direction, widthPtr, heightPtr);
+ *widthPtr += Ttk_PaddingWidth(padding);
+ *heightPtr += Ttk_PaddingHeight(padding);
+}
+
+static Ttk_ElementSpec SpinboxArrowElementSpec = {
+ TK_STYLE_VERSION_2,
+ sizeof(ScrollbarElement),
+ ScrollbarElementOptions,
+ SpinboxArrowElementSize,
+ ArrowElementDraw
+};
/*------------------------------------------------------------------------
* +++ Notebook elements.
@@ -851,17 +907,16 @@ static Ttk_ElementOptionSpec NotebookElementOptions[] = {
};
static void TabElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ TCL_UNUSED(void *), /* elementRecord */
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
Ttk_PositionSpec nbTabsStickBit = TTK_STICK_S;
TkMainInfo *mainInfoPtr = ((TkWindow *) tkwin)->mainPtr;
int borderWidth = 2;
- (void)dummy;
- (void)elementRecord;
- (void)tkwin;
- (void)widthPtr;
- (void)heightPtr;
if (mainInfoPtr != NULL) {
nbTabsStickBit = (Ttk_PositionSpec) mainInfoPtr->ttkNbTabsStickBit;
@@ -886,8 +941,12 @@ static void TabElementSize(
}
static void TabElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ Ttk_State state)
{
Ttk_PositionSpec nbTabsStickBit = TTK_STICK_S;
TkMainInfo *mainInfoPtr = ((TkWindow *) tkwin)->mainPtr;
@@ -898,7 +957,6 @@ static void TabElementDraw(
int x1, y1, x2, y2;
GC gc;
const int w = WIN32_XDRAWLINE_HACK;
- (void)dummy;
if (mainInfoPtr != NULL) {
nbTabsStickBit = (Ttk_PositionSpec) mainInfoPtr->ttkNbTabsStickBit;
@@ -1010,28 +1068,29 @@ static Ttk_ElementSpec TabElementSpec =
};
static void ClientElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ TCL_UNUSED(void *), /* elementRecord */
+ TCL_UNUSED(Tk_Window),
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
int borderWidth = 2;
- (void)dummy;
- (void)elementRecord;
- (void)tkwin;
- (void)widthPtr;
- (void)heightPtr;
*paddingPtr = Ttk_UniformPadding((short)borderWidth);
}
static void ClientElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
NotebookElement *ce = (NotebookElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, ce->backgroundObj);
int borderWidth = 2;
- (void)dummy;
- (void)state;
Tk_Fill3DRectangle(tkwin, d, border,
b.x, b.y, b.width, b.height, borderWidth,TK_RELIEF_FLAT);
@@ -1083,31 +1142,37 @@ TtkClamTheme_Init(Tcl_Interp *interp)
return TCL_ERROR;
}
- Ttk_RegisterElement(interp,
- theme, "border", &BorderElementSpec, NULL);
- Ttk_RegisterElement(interp,
- theme, "field", &FieldElementSpec, NULL);
- Ttk_RegisterElement(interp,
- theme, "Combobox.field", &ComboboxFieldElementSpec, NULL);
- Ttk_RegisterElement(interp,
- theme, "trough", &TroughElementSpec, NULL);
- Ttk_RegisterElement(interp,
- theme, "thumb", &ThumbElementSpec, NULL);
- Ttk_RegisterElement(interp,
- theme, "uparrow", &ArrowElementSpec, &ArrowElements[0]);
- Ttk_RegisterElement(interp,
- theme, "downarrow", &ArrowElementSpec, &ArrowElements[1]);
- Ttk_RegisterElement(interp,
- theme, "leftarrow", &ArrowElementSpec, &ArrowElements[2]);
- Ttk_RegisterElement(interp,
- theme, "rightarrow", &ArrowElementSpec, &ArrowElements[3]);
-
- Ttk_RegisterElement(interp,
- theme, "Radiobutton.indicator", &RadioIndicatorElementSpec, NULL);
- Ttk_RegisterElement(interp,
- theme, "Checkbutton.indicator", &CheckIndicatorElementSpec, NULL);
- Ttk_RegisterElement(interp,
- theme, "Menubutton.indicator", &MenuIndicatorElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "border",
+ &BorderElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "field",
+ &FieldElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "Combobox.field",
+ &ComboboxFieldElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "trough",
+ &TroughElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "thumb",
+ &ThumbElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "uparrow",
+ &ArrowElementSpec, &ArrowElements[0]);
+ Ttk_RegisterElement(interp, theme, "Spinbox.uparrow",
+ &SpinboxArrowElementSpec, &ArrowElements[0]);
+ Ttk_RegisterElement(interp, theme, "downarrow",
+ &ArrowElementSpec, &ArrowElements[1]);
+ Ttk_RegisterElement(interp, theme, "Spinbox.downarrow",
+ &SpinboxArrowElementSpec, &ArrowElements[1]);
+ Ttk_RegisterElement(interp, theme, "leftarrow",
+ &ArrowElementSpec, &ArrowElements[2]);
+ Ttk_RegisterElement(interp, theme, "rightarrow",
+ &ArrowElementSpec, &ArrowElements[3]);
+ Ttk_RegisterElement(interp, theme, "arrow",
+ &ArrowElementSpec, &ArrowElements[0]);
+
+ Ttk_RegisterElement(interp, theme, "Checkbutton.indicator",
+ &CheckIndicatorElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "Radiobutton.indicator",
+ &RadioIndicatorElementSpec, NULL);
+ Ttk_RegisterElement(interp, theme, "Menubutton.indicator",
+ &MenuIndicatorElementSpec, NULL);
Ttk_RegisterElement(interp, theme, "tab", &TabElementSpec, NULL);
Ttk_RegisterElement(interp, theme, "client", &ClientElementSpec, NULL);
diff --git a/generic/ttk/ttkClassicTheme.c b/generic/ttk/ttkClassicTheme.c
index 8436aec..7a53930 100644
--- a/generic/ttk/ttkClassicTheme.c
+++ b/generic/ttk/ttkClassicTheme.c
@@ -19,6 +19,7 @@
typedef struct {
Tcl_Obj *highlightColorObj;
Tcl_Obj *highlightThicknessObj;
+ Tcl_Obj *defaultStateObj;
} HighlightElement;
static Ttk_ElementOptionSpec HighlightElementOptions[] = {
@@ -26,39 +27,51 @@ static Ttk_ElementOptionSpec HighlightElementOptions[] = {
Tk_Offset(HighlightElement,highlightColorObj), DEFAULT_BACKGROUND },
{ "-highlightthickness",TK_OPTION_PIXELS,
Tk_Offset(HighlightElement,highlightThicknessObj), "0" },
+ { "-default", TK_OPTION_ANY,
+ Tk_Offset(HighlightElement,defaultStateObj), "disabled" },
{ NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void HighlightElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
HighlightElement *hl = (HighlightElement *)elementRecord;
int highlightThickness = 0;
- (void)dummy;
- (void)tkwin;
- (void)widthPtr;
- (void)heightPtr;
- Tcl_GetIntFromObj(NULL,hl->highlightThicknessObj,&highlightThickness);
+ Tk_GetPixelsFromObj(NULL, tkwin, hl->highlightThicknessObj, &highlightThickness);
*paddingPtr = Ttk_UniformPadding((short)highlightThickness);
}
static void HighlightElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ TCL_UNUSED(Ttk_Box),
+ TCL_UNUSED(Ttk_State))
{
HighlightElement *hl = (HighlightElement *)elementRecord;
int highlightThickness = 0;
XColor *highlightColor = Tk_GetColorFromObj(tkwin, hl->highlightColorObj);
- (void)dummy;
- (void)b;
- (void)state;
+ int defaultState = TTK_BUTTON_DEFAULT_DISABLED;
- Tcl_GetIntFromObj(NULL,hl->highlightThicknessObj,&highlightThickness);
+ Tk_GetPixelsFromObj(NULL, tkwin, hl->highlightThicknessObj,
+ &highlightThickness);
if (highlightColor && highlightThickness > 0) {
- GC gc = Tk_GCForColor(highlightColor, d);
- Tk_DrawFocusHighlight(tkwin, gc, highlightThickness, d);
+ GC gc;
+ Ttk_GetButtonDefaultStateFromObj(NULL, hl->defaultStateObj,
+ &defaultState);
+ gc = Tk_GCForColor(highlightColor, d);
+ if (defaultState == TTK_BUTTON_DEFAULT_NORMAL) {
+ TkDrawInsetFocusHighlight(tkwin, gc, highlightThickness, d, 5);
+ } else {
+ Tk_DrawFocusHighlight(tkwin, gc, highlightThickness, d);
+ }
}
}
@@ -102,18 +115,18 @@ static Ttk_ElementOptionSpec ButtonBorderElementOptions[] =
};
static void ButtonBorderElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
ButtonBorderElement *bd = (ButtonBorderElement *)elementRecord;
int defaultState = TTK_BUTTON_DEFAULT_DISABLED;
int borderWidth = 0;
- (void)dummy;
- (void)tkwin;
- (void)widthPtr;
- (void)heightPtr;
- Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, bd->borderWidthObj, &borderWidth);
Ttk_GetButtonDefaultStateFromObj(NULL, bd->defaultStateObj, &defaultState);
if (defaultState != TTK_BUTTON_DEFAULT_DISABLED) {
@@ -128,22 +141,24 @@ static void ButtonBorderElementSize(
* when the button is active.)
*/
static void ButtonBorderElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
ButtonBorderElement *bd = (ButtonBorderElement *)elementRecord;
Tk_3DBorder border = NULL;
int borderWidth = 1, relief = TK_RELIEF_FLAT;
int defaultState = TTK_BUTTON_DEFAULT_DISABLED;
int inset = 0;
- (void)dummy;
- (void)state;
/*
* Get option values.
*/
border = Tk_Get3DBorderFromObj(tkwin, bd->borderObj);
- Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, bd->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, bd->reliefObj, &relief);
Ttk_GetButtonDefaultStateFromObj(NULL, bd->defaultStateObj, &defaultState);
@@ -158,15 +173,15 @@ static void ButtonBorderElementDraw(
inset += 5;
break;
case TTK_BUTTON_DEFAULT_ACTIVE :
- Tk_Draw3DRectangle(tkwin, d, border,
+ Tk_Draw3DRectangle(tkwin, d, border,
b.x+inset, b.y+inset, b.width - 2*inset, b.height - 2*inset,
2, TK_RELIEF_FLAT);
- inset += 2;
- Tk_Draw3DRectangle(tkwin, d, border,
+ inset += 2;
+ Tk_Draw3DRectangle(tkwin, d, border,
b.x+inset, b.y+inset, b.width - 2*inset, b.height - 2*inset,
1, TK_RELIEF_SUNKEN);
++inset;
- Tk_Draw3DRectangle(tkwin, d, border,
+ Tk_Draw3DRectangle(tkwin, d, border,
b.x+inset, b.y+inset, b.width - 2*inset, b.height - 2*inset,
2, TK_RELIEF_FLAT);
inset += 2;
@@ -221,13 +236,15 @@ static Ttk_ElementOptionSpec ArrowElementOptions[] =
};
static void ArrowElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
ArrowElement *arrow = (ArrowElement *)elementRecord;
int size = 12;
- (void)dummy;
- (void)paddingPtr;
Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size);
*widthPtr = *heightPtr = size;
@@ -235,7 +252,8 @@ static void ArrowElementSize(
static void ArrowElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
int direction = *(int *)clientData;
ArrowElement *arrow = (ArrowElement *)elementRecord;
@@ -244,12 +262,10 @@ static void ArrowElementDraw(
int relief = TK_RELIEF_RAISED;
int size = b.width < b.height ? b.width : b.height;
XPoint points[3];
- (void)state;
Tk_GetPixelsFromObj(NULL, tkwin, arrow->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, arrow->reliefObj, &relief);
-
/*
* @@@ There are off-by-one pixel errors in the way these are drawn;
* @@@ need to take a look at Tk_Fill3DPolygon and X11 to find the
@@ -337,12 +353,12 @@ static Ttk_ElementOptionSpec SashOptions[] = {
static void SashElementSize(
void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
SashElement *sash = (SashElement *)elementRecord;
int sashPad = 2, sashThickness = 6, handleSize = 8;
int horizontal = *((Ttk_Orient*)clientData) == TTK_ORIENT_HORIZONTAL;
- (void)paddingPtr;
Tk_GetPixelsFromObj(NULL, tkwin, sash->sashThicknessObj, &sashThickness);
Tk_GetPixelsFromObj(NULL, tkwin, sash->handleSizeObj, &handleSize);
@@ -359,7 +375,8 @@ static void SashElementSize(
static void SashElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
SashElement *sash = (SashElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, sash->borderObj);
@@ -368,7 +385,6 @@ static void SashElementDraw(
int handleSize = 8, handlePad = 8;
int horizontal = *((Ttk_Orient*)clientData) == TTK_ORIENT_HORIZONTAL;
Ttk_Box hb;
- (void)state;
Tk_GetPixelsFromObj(NULL, tkwin, sash->handleSizeObj, &handleSize);
Tk_GetPixelsFromObj(NULL, tkwin, sash->handlePadObj, &handlePad);
@@ -435,55 +451,83 @@ TTK_BEGIN_LAYOUT_TABLE(LayoutTable)
TTK_LAYOUT("TButton",
TTK_GROUP("Button.highlight", TTK_FILL_BOTH,
- TTK_GROUP("Button.border", TTK_FILL_BOTH|TTK_BORDER,
+ TTK_GROUP("Button.border", TTK_FILL_BOTH|TTK_BORDER,
TTK_GROUP("Button.padding", TTK_FILL_BOTH,
- TTK_NODE("Button.label", TTK_FILL_BOTH)))))
+ TTK_NODE("Button.label", TTK_FILL_BOTH)))))
TTK_LAYOUT("TCheckbutton",
TTK_GROUP("Checkbutton.highlight", TTK_FILL_BOTH,
- TTK_GROUP("Checkbutton.border", TTK_FILL_BOTH,
+ TTK_GROUP("Checkbutton.border", TTK_FILL_BOTH,
TTK_GROUP("Checkbutton.padding", TTK_FILL_BOTH,
- TTK_NODE("Checkbutton.indicator", TTK_PACK_LEFT)
- TTK_NODE("Checkbutton.label", TTK_PACK_LEFT|TTK_FILL_BOTH)))))
+ TTK_NODE("Checkbutton.indicator", TTK_PACK_LEFT)
+ TTK_NODE("Checkbutton.label", TTK_PACK_LEFT|TTK_FILL_BOTH)))))
TTK_LAYOUT("TRadiobutton",
TTK_GROUP("Radiobutton.highlight", TTK_FILL_BOTH,
- TTK_GROUP("Radiobutton.border", TTK_FILL_BOTH,
+ TTK_GROUP("Radiobutton.border", TTK_FILL_BOTH,
TTK_GROUP("Radiobutton.padding", TTK_FILL_BOTH,
- TTK_NODE("Radiobutton.indicator", TTK_PACK_LEFT)
- TTK_NODE("Radiobutton.label", TTK_PACK_LEFT|TTK_FILL_BOTH)))))
+ TTK_NODE("Radiobutton.indicator", TTK_PACK_LEFT)
+ TTK_NODE("Radiobutton.label", TTK_PACK_LEFT|TTK_FILL_BOTH)))))
TTK_LAYOUT("TMenubutton",
TTK_GROUP("Menubutton.highlight", TTK_FILL_BOTH,
- TTK_GROUP("Menubutton.border", TTK_FILL_BOTH,
+ TTK_GROUP("Menubutton.border", TTK_FILL_BOTH,
TTK_NODE("Menubutton.indicator", TTK_PACK_RIGHT)
TTK_GROUP("Menubutton.padding", TTK_FILL_X,
- TTK_NODE("Menubutton.label", 0)))))
+ TTK_NODE("Menubutton.label", 0)))))
/* "classic" entry, includes highlight border */
TTK_LAYOUT("TEntry",
TTK_GROUP("Entry.highlight", TTK_FILL_BOTH,
- TTK_GROUP("Entry.field", TTK_FILL_BOTH|TTK_BORDER,
+ TTK_GROUP("Entry.field", TTK_FILL_BOTH|TTK_BORDER,
TTK_GROUP("Entry.padding", TTK_FILL_BOTH,
- TTK_NODE("Entry.textarea", TTK_FILL_BOTH)))))
-
-/* Notebook tabs -- omit focus ring */
-TTK_LAYOUT("Tab",
- TTK_GROUP("Notebook.tab", TTK_FILL_BOTH,
- TTK_GROUP("Notebook.padding", TTK_FILL_BOTH,
- TTK_NODE("Notebook.label", TTK_FILL_BOTH))))
+ TTK_NODE("Entry.textarea", TTK_FILL_BOTH)))))
+
+/* "classic" combobox, includes highlight border */
+TTK_LAYOUT("TCombobox",
+ TTK_GROUP("Combobox.highlight", TTK_FILL_BOTH,
+ TTK_GROUP("Combobox.field", TTK_FILL_BOTH,
+ TTK_NODE("Combobox.downarrow", TTK_PACK_RIGHT|TTK_FILL_Y)
+ TTK_GROUP("Combobox.padding", TTK_FILL_BOTH,
+ TTK_NODE("Combobox.textarea", TTK_FILL_BOTH)))))
+
+/* "classic" spinbox, includes highlight border */
+TTK_LAYOUT("TSpinbox",
+ TTK_GROUP("Spinbox.highlight", TTK_FILL_BOTH,
+ TTK_GROUP("Spinbox.field", TTK_FILL_BOTH|TTK_FILL_X,
+ TTK_GROUP("null", TTK_PACK_RIGHT,
+ TTK_NODE("Spinbox.uparrow", TTK_PACK_TOP|TTK_STICK_E)
+ TTK_NODE("Spinbox.downarrow", TTK_PACK_BOTTOM|TTK_STICK_E))
+ TTK_GROUP("Spinbox.padding", TTK_FILL_BOTH,
+ TTK_NODE("Spinbox.textarea", TTK_FILL_BOTH)))))
+
+/* "classic" scale, includes highlight border */
+TTK_LAYOUT("Vertical.TScale",
+ TTK_GROUP("Vertical.Scale.highlight", TTK_FILL_BOTH,
+ TTK_GROUP("Vertical.Scale.trough", TTK_FILL_BOTH,
+ TTK_NODE("Vertical.Scale.slider", TTK_PACK_TOP))))
+
+TTK_LAYOUT("Horizontal.TScale",
+ TTK_GROUP("Horizontal.Scale.highlight", TTK_FILL_BOTH,
+ TTK_GROUP("Horizontal.Scale.trough", TTK_FILL_BOTH,
+ TTK_NODE("Horizontal.Scale.slider", TTK_PACK_LEFT))))
+
+/* put highlight border around treeview */
+TTK_LAYOUT("Treeview",
+ TTK_GROUP("Treeview.highlight", TTK_FILL_BOTH,
+ TTK_GROUP("Treeview.field", TTK_FILL_BOTH|TTK_BORDER,
+ TTK_GROUP("Treeview.padding", TTK_FILL_BOTH,
+ TTK_NODE("Treeview.treearea", TTK_FILL_BOTH)))))
TTK_END_LAYOUT_TABLE
-/* POSSIBLY: include Scale layouts w/focus border
- */
-
/*------------------------------------------------------------------------
* TtkClassicTheme_Init --
* Install classic theme.
*/
-MODULE_SCOPE int TtkClassicTheme_Init(Tcl_Interp *interp)
+MODULE_SCOPE int
+TtkClassicTheme_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_CreateTheme(interp, "classic", NULL);
diff --git a/generic/ttk/ttkDefaultTheme.c b/generic/ttk/ttkDefaultTheme.c
index e4bfeca..d75dbe0 100644
--- a/generic/ttk/ttkDefaultTheme.c
+++ b/generic/ttk/ttkDefaultTheme.c
@@ -108,7 +108,7 @@ static void DrawBorder(
break;
default: /* Fall back to Motif-style borders: */
Tk_Draw3DRectangle(tkwin, d, border,
- b.x, b.y, b.width, b.height, borderWidth,relief);
+ b.x, b.y, b.width, b.height, borderWidth, relief);
break;
}
}
@@ -138,11 +138,11 @@ static void DrawFieldBorder(
* ArrowPoints --
* Compute points of arrow polygon.
*/
-static void ArrowPoints(Ttk_Box b, ArrowDirection dir, XPoint points[4])
+static void ArrowPoints(Ttk_Box b, ArrowDirection direction, XPoint points[4])
{
int cx, cy, h;
- switch (dir) {
+ switch (direction) {
case ARROW_UP:
h = (b.width - 1)/2;
cx = b.x + h;
@@ -186,9 +186,9 @@ static void ArrowPoints(Ttk_Box b, ArrowDirection dir, XPoint points[4])
}
/*public*/
-void TtkArrowSize(int h, ArrowDirection dir, int *widthPtr, int *heightPtr)
+void TtkArrowSize(int h, ArrowDirection direction, int *widthPtr, int *heightPtr)
{
- switch (dir) {
+ switch (direction) {
case ARROW_UP:
case ARROW_DOWN: *widthPtr = 2*h+1; *heightPtr = h+1; break;
case ARROW_LEFT:
@@ -202,10 +202,10 @@ void TtkArrowSize(int h, ArrowDirection dir, int *widthPtr, int *heightPtr)
*/
/*public*/
void TtkFillArrow(
- Display *display, Drawable d, GC gc, Ttk_Box b, ArrowDirection dir)
+ Display *display, Drawable d, GC gc, Ttk_Box b, ArrowDirection direction)
{
XPoint points[4];
- ArrowPoints(b, dir, points);
+ ArrowPoints(b, direction, points);
XFillPolygon(display, d, gc, points, 3, Convex, CoordModeOrigin);
XDrawLines(display, d, gc, points, 4, CoordModeOrigin);
@@ -215,10 +215,10 @@ void TtkFillArrow(
/*public*/
void TtkDrawArrow(
- Display *display, Drawable d, GC gc, Ttk_Box b, ArrowDirection dir)
+ Display *display, Drawable d, GC gc, Ttk_Box b, ArrowDirection direction)
{
XPoint points[4];
- ArrowPoints(b, dir, points);
+ ArrowPoints(b, direction, points);
XDrawLines(display, d, gc, points, 4, CoordModeOrigin);
/* Work around bug [77527326e5] - ttk artifacts on Ubuntu */
@@ -251,22 +251,26 @@ static Ttk_ElementOptionSpec BorderElementOptions[] = {
Tk_Offset(BorderElement,borderColorObj), "black" },
{ "-default", TK_OPTION_ANY, Tk_Offset(BorderElement,defaultStateObj),
"disabled" },
- { "-borderwidth",TK_OPTION_PIXELS,Tk_Offset(BorderElement,borderWidthObj),
+ { "-borderwidth",TK_OPTION_PIXELS, Tk_Offset(BorderElement,borderWidthObj),
STRINGIFY(BORDERWIDTH) },
{ "-relief", TK_OPTION_RELIEF, Tk_Offset(BorderElement,reliefObj),
"flat" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void BorderElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
- BorderElement *bd = elementRecord;
+ BorderElement *bd = (BorderElement *)elementRecord;
int borderWidth = 0;
int defaultState = TTK_BUTTON_DEFAULT_DISABLED;
- Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, bd->borderWidthObj, &borderWidth);
Ttk_GetButtonDefaultStateFromObj(NULL, bd->defaultStateObj, &defaultState);
if (defaultState != TTK_BUTTON_DEFAULT_DISABLED) {
@@ -277,10 +281,14 @@ static void BorderElementSize(
}
static void BorderElementDraw(
- void *clientData, void *elementRecord,
- Tk_Window tkwin, Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- BorderElement *bd = elementRecord;
+ BorderElement *bd = (BorderElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, bd->borderObj);
XColor *borderColor = Tk_GetColorFromObj(tkwin, bd->borderColorObj);
int borderWidth = 2;
@@ -290,7 +298,7 @@ static void BorderElementDraw(
/*
* Get option values.
*/
- Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, bd->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, bd->reliefObj, &relief);
Ttk_GetButtonDefaultStateFromObj(NULL, bd->defaultStateObj, &defaultState);
@@ -322,6 +330,8 @@ static Ttk_ElementSpec BorderElementSpec = {
typedef struct {
Tcl_Obj *borderObj;
Tcl_Obj *borderColorObj; /* Extra border color */
+ Tcl_Obj *focusWidthObj;
+ Tcl_Obj *focusColorObj;
} FieldElement;
static Ttk_ElementOptionSpec FieldElementOptions[] = {
@@ -329,27 +339,84 @@ static Ttk_ElementOptionSpec FieldElementOptions[] = {
"white" },
{ "-bordercolor",TK_OPTION_COLOR, Tk_Offset(FieldElement,borderColorObj),
"black" },
- { NULL, 0, 0, NULL }
+ { "-focuswidth", TK_OPTION_PIXELS, Tk_Offset(FieldElement,focusWidthObj),
+ "2" },
+ { "-focuscolor", TK_OPTION_COLOR, Tk_Offset(FieldElement,focusColorObj),
+ "#4a6984" },
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void FieldElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ TCL_UNUSED(void *), /* elementRecord */
+ TCL_UNUSED(Tk_Window),
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
*paddingPtr = Ttk_UniformPadding(2);
}
static void FieldElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b, Ttk_State state)
{
- FieldElement *field = elementRecord;
+ FieldElement *field = (FieldElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, field->borderObj);
XColor *borderColor = Tk_GetColorFromObj(tkwin, field->borderColorObj);
-
- Tk_Fill3DRectangle(
- tkwin, d, border, b.x, b.y, b.width, b.height, 0, TK_RELIEF_SUNKEN);
- DrawFieldBorder(tkwin, d, border, borderColor, b);
+ int focusWidth = 2;
+
+ Tk_GetPixelsFromObj(NULL, tkwin, field->focusWidthObj, &focusWidth);
+
+ if (focusWidth > 0 && (state & TTK_STATE_FOCUS)) {
+ Display *disp = Tk_Display(tkwin);
+ XColor *focusColor = Tk_GetColorFromObj(tkwin, field->focusColorObj);
+ GC focusGC = Tk_GCForColor(focusColor, d);
+
+ if (focusWidth > 1) {
+ int x1 = b.x, x2 = b.x + b.width - 1;
+ int y1 = b.y, y2 = b.y + b.height - 1;
+ int w = WIN32_XDRAWLINE_HACK;
+ GC bgGC;
+
+ /*
+ * Draw the outer rounded rectangle
+ */
+ XDrawLine(disp, d, focusGC, x1+1, y1, x2-1+w, y1); /* N */
+ XDrawLine(disp, d, focusGC, x1+1, y2, x2-1+w, y2); /* S */
+ XDrawLine(disp, d, focusGC, x1, y1+1, x1, y2-1+w); /* W */
+ XDrawLine(disp, d, focusGC, x2, y1+1, x2, y2-1+w); /* E */
+
+ /*
+ * Draw the inner rectangle
+ */
+ b.x += 1; b.y += 1; b.width -= 2; b.height -= 2;
+ XDrawRectangle(disp, d, focusGC, b.x, b.y, b.width-1, b.height-1);
+
+ /*
+ * Fill the inner rectangle
+ */
+ bgGC = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
+ XFillRectangle(disp, d, bgGC, b.x+1, b.y+1, b.width-2, b.height-2);
+ } else {
+ /*
+ * Draw the field element as usual
+ */
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ 0, TK_RELIEF_SUNKEN);
+ DrawFieldBorder(tkwin, d, border, borderColor, b);
+
+ /*
+ * Change the color of the border's outermost pixels
+ */
+ XDrawRectangle(disp, d, focusGC, b.x, b.y, b.width-1, b.height-1);
+ }
+ } else {
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ 0, TK_RELIEF_SUNKEN);
+ DrawFieldBorder(tkwin, d, border, borderColor, b);
+ }
}
static Ttk_ElementSpec FieldElementSpec = {
@@ -480,15 +547,16 @@ static Ttk_ElementOptionSpec IndicatorElementOptions[] = {
Tk_Offset(IndicatorElement,borderColorObj), "black" },
{ "-indicatormargin", TK_OPTION_STRING,
Tk_Offset(IndicatorElement,marginObj), "0 2 4 2" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void IndicatorElementSize(
void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- IndicatorSpec *spec = clientData;
- IndicatorElement *indicator = elementRecord;
+ IndicatorSpec *spec = (IndicatorSpec *)clientData;
+ IndicatorElement *indicator = (IndicatorElement *)elementRecord;
Ttk_Padding margins;
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &margins);
*widthPtr = spec->width + Ttk_PaddingWidth(margins);
@@ -514,12 +582,15 @@ static void IndicatorElementDraw(
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &padding);
b = Ttk_PadBox(b, padding);
+ /*
+ * Sanity check
+ */
if ( b.x < 0
|| b.y < 0
|| Tk_Width(tkwin) < b.x + spec->width
|| Tk_Height(tkwin) < b.y + spec->height)
{
- /* Oops! not enough room to display the image.
+ /* Oops! Not enough room to display the image.
* Don't draw anything.
*/
return;
@@ -644,26 +715,27 @@ static Ttk_ElementSpec IndicatorElementSpec = {
*/
static int ArrowElements[] = { ARROW_UP, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT };
+
typedef struct {
Tcl_Obj *sizeObj;
+ Tcl_Obj *colorObj; /* Arrow color */
Tcl_Obj *borderObj;
Tcl_Obj *borderColorObj; /* Extra color for borders */
Tcl_Obj *reliefObj;
- Tcl_Obj *colorObj; /* Arrow color */
} ArrowElement;
static Ttk_ElementOptionSpec ArrowElementOptions[] = {
{ "-arrowsize", TK_OPTION_PIXELS,
Tk_Offset(ArrowElement,sizeObj), STRINGIFY(SCROLLBAR_WIDTH) },
+ { "-arrowcolor", TK_OPTION_COLOR,
+ Tk_Offset(ArrowElement,colorObj), "black"},
{ "-background", TK_OPTION_BORDER,
Tk_Offset(ArrowElement,borderObj), DEFAULT_BACKGROUND },
{ "-bordercolor", TK_OPTION_COLOR,
Tk_Offset(ArrowElement,borderColorObj), "black" },
{ "-relief", TK_OPTION_RELIEF,
- Tk_Offset(ArrowElement,reliefObj),"raised"},
- { "-arrowcolor", TK_OPTION_COLOR,
- Tk_Offset(ArrowElement,colorObj),"black"},
- { NULL, 0, 0, NULL }
+ Tk_Offset(ArrowElement,reliefObj), "raised"},
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
/*
@@ -675,39 +747,67 @@ static Ttk_Padding ArrowPadding = { 3,3,4,4 };
static void ArrowElementSize(
void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- ArrowElement *arrow = elementRecord;
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
int direction = *(int *)clientData;
- int width = SCROLLBAR_WIDTH;
+ int size = SCROLLBAR_WIDTH;
- Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &width);
- width -= Ttk_PaddingWidth(ArrowPadding);
- TtkArrowSize(width/2, direction, widthPtr, heightPtr);
+ Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size);
+ size -= Ttk_PaddingWidth(ArrowPadding);
+ TtkArrowSize(size/2, direction, widthPtr, heightPtr);
*widthPtr += Ttk_PaddingWidth(ArrowPadding);
*heightPtr += Ttk_PaddingHeight(ArrowPadding);
+ if (*widthPtr < *heightPtr) {
+ *widthPtr = *heightPtr;
+ } else {
+ *heightPtr = *widthPtr;
+ }
}
static void ArrowElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
int direction = *(int *)clientData;
- ArrowElement *arrow = elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, arrow->borderObj);
XColor *borderColor = Tk_GetColorFromObj(tkwin, arrow->borderColorObj);
+ int borderWidth = 2, relief = TK_RELIEF_RAISED;
+ int cx = 0, cy = 0;
XColor *arrowColor = Tk_GetColorFromObj(tkwin, arrow->colorObj);
- int relief = TK_RELIEF_RAISED;
- int borderWidth = 2;
+ GC gc = Tk_GCForColor(arrowColor, d);
Tk_GetReliefFromObj(NULL, arrow->reliefObj, &relief);
- Tk_Fill3DRectangle(
- tkwin, d, border, b.x, b.y, b.width, b.height, 0, TK_RELIEF_FLAT);
- DrawBorder(tkwin,d,border,borderColor,b,borderWidth,relief);
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ 0, TK_RELIEF_FLAT);
+ DrawBorder(tkwin, d, border, borderColor, b, borderWidth, relief);
+
+ b = Ttk_PadBox(b, ArrowPadding);
+
+ switch (direction) {
+ case ARROW_UP:
+ case ARROW_DOWN:
+ TtkArrowSize(b.width/2, direction, &cx, &cy);
+ if ((b.height - cy) % 2 == 1) {
+ ++cy;
+ }
+ break;
+ case ARROW_LEFT:
+ case ARROW_RIGHT:
+ TtkArrowSize(b.height/2, direction, &cx, &cy);
+ if ((b.width - cx) % 2 == 1) {
+ ++cx;
+ }
+ break;
+ }
- TtkFillArrow(Tk_Display(tkwin), d, Tk_GCForColor(arrowColor, d),
- Ttk_PadBox(b, ArrowPadding), direction);
+ b = Ttk_AnchorBox(b, cx, cy, TK_ANCHOR_CENTER);
+
+ TtkFillArrow(Tk_Display(tkwin), d, gc, b, direction);
}
static Ttk_ElementSpec ArrowElementSpec = {
@@ -718,6 +818,71 @@ static Ttk_ElementSpec ArrowElementSpec = {
ArrowElementDraw
};
+/*
+ * Modified arrow element for comboboxes and spinboxes:
+ * The width and height are different, and the left edge is drawn in the
+ * same color as the inner part of the right one.
+ */
+
+static void BoxArrowElementSize(
+ void *clientData, void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
+{
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
+ int direction = *(int *)clientData;
+ int size = SCROLLBAR_WIDTH;
+
+ Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size);
+ size -= Ttk_PaddingWidth(ArrowPadding);
+ TtkArrowSize(size/2, direction, widthPtr, heightPtr);
+ *widthPtr += Ttk_PaddingWidth(ArrowPadding);
+ *heightPtr += Ttk_PaddingHeight(ArrowPadding);
+}
+
+static void BoxArrowElementDraw(
+ void *clientData, void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
+{
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
+ int direction = *(int *)clientData;
+ Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, arrow->borderObj);
+ XColor *borderColor = Tk_GetColorFromObj(tkwin, arrow->borderColorObj);
+ int borderWidth = 2, relief = TK_RELIEF_RAISED;
+ Display *disp = Tk_Display(tkwin);
+ GC darkGC = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
+ int w = WIN32_XDRAWLINE_HACK;
+ int cx = 0, cy = 0;
+ XColor *arrowColor = Tk_GetColorFromObj(tkwin, arrow->colorObj);
+ GC arrowGC = Tk_GCForColor(arrowColor, d);
+
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ 0, TK_RELIEF_FLAT);
+ DrawBorder(tkwin, d, border, borderColor, b, borderWidth, relief);
+
+ XDrawLine(disp, d, darkGC, b.x, b.y+1, b.x, b.y+b.height-2+w);
+
+ b = Ttk_PadBox(b, ArrowPadding);
+
+ TtkArrowSize(b.width/2, direction, &cx, &cy);
+ if ((b.height - cy) % 2 == 1) {
+ ++cy;
+ }
+
+ b = Ttk_AnchorBox(b, cx, cy, TK_ANCHOR_CENTER);
+
+ TtkFillArrow(disp, d, arrowGC, b, direction);
+}
+
+static Ttk_ElementSpec BoxArrowElementSpec = {
+ TK_STYLE_VERSION_2,
+ sizeof(ArrowElement),
+ ArrowElementOptions,
+ BoxArrowElementSize,
+ BoxArrowElementDraw
+};
+
/*----------------------------------------------------------------------
* +++ Menubutton indicator:
* Draw an arrow in the direction where the menu will be posted.
@@ -741,18 +906,22 @@ static Ttk_ElementOptionSpec MenubuttonArrowElementOptions[] = {
Tk_Offset(MenubuttonArrowElement,directionObj), "below" },
{ "-arrowsize", TK_OPTION_PIXELS,
Tk_Offset(MenubuttonArrowElement,sizeObj), STRINGIFY(MENUBUTTON_ARROW_SIZE)},
- { "-arrowcolor",TK_OPTION_COLOR,
+ { "-arrowcolor", TK_OPTION_COLOR,
Tk_Offset(MenubuttonArrowElement,colorObj), "black"},
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static Ttk_Padding MenubuttonArrowPadding = { 3, 0, 3, 0 };
static void MenubuttonArrowElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- MenubuttonArrowElement *arrow = elementRecord;
+ MenubuttonArrowElement *arrow = (MenubuttonArrowElement *)elementRecord;
int size = MENUBUTTON_ARROW_SIZE;
Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size);
*widthPtr = *heightPtr = 2 * size + 1;
@@ -761,10 +930,14 @@ static void MenubuttonArrowElementSize(
}
static void MenubuttonArrowElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- MenubuttonArrowElement *arrow = elementRecord;
+ MenubuttonArrowElement *arrow = (MenubuttonArrowElement *)elementRecord;
XColor *arrowColor = Tk_GetColorFromObj(tkwin, arrow->colorObj);
GC gc = Tk_GCForColor(arrowColor, d);
int size = MENUBUTTON_ARROW_SIZE;
@@ -907,17 +1080,23 @@ static Ttk_ElementOptionSpec ThumbElementOptions[] = {
DEFAULT_BACKGROUND },
{ "-bordercolor", TK_OPTION_COLOR, Tk_Offset(ThumbElement,borderColorObj),
"black" },
- { "-relief", TK_OPTION_RELIEF,Tk_Offset(ThumbElement,reliefObj),"raised" },
- { "-orient", TK_OPTION_ANY,Tk_Offset(ThumbElement,orientObj),"horizontal"},
- { NULL, 0, 0, NULL }
+ { "-relief", TK_OPTION_RELIEF, Tk_Offset(ThumbElement,reliefObj),"raised" },
+ { "-orient", TK_OPTION_ANY, Tk_Offset(ThumbElement,orientObj),"horizontal"},
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void ThumbElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- ThumbElement *thumb = elementRecord;
- int orient, size;
+ ThumbElement *thumb = (ThumbElement *)elementRecord;
+ int orient;
+ int size;
+
Tk_GetPixelsFromObj(NULL, tkwin, thumb->sizeObj, &size);
Ttk_GetOrientFromObj(NULL, thumb->orientObj, &orient);
@@ -931,10 +1110,14 @@ static void ThumbElementSize(
}
static void ThumbElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- ThumbElement *thumb = elementRecord;
+ ThumbElement *thumb = (ThumbElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, thumb->borderObj);
XColor *borderColor = Tk_GetColorFromObj(tkwin, thumb->borderColorObj);
int relief = TK_RELIEF_RAISED;
@@ -974,7 +1157,6 @@ static Ttk_ElementSpec ThumbElementSpec = {
*/
typedef struct {
- Tcl_Obj *lengthObj; /* Long axis dimension */
Tcl_Obj *thicknessObj; /* Short axis dimension */
Tcl_Obj *reliefObj; /* Relief for this object */
Tcl_Obj *borderObj; /* Border / background color */
@@ -984,41 +1166,42 @@ typedef struct {
} SliderElement;
static Ttk_ElementOptionSpec SliderElementOptions[] = {
- { "-sliderlength", TK_OPTION_PIXELS, Tk_Offset(SliderElement,lengthObj),
- "15" },
- { "-sliderthickness",TK_OPTION_PIXELS,Tk_Offset(SliderElement,thicknessObj),
+ { "-sliderthickness", TK_OPTION_PIXELS, Tk_Offset(SliderElement,thicknessObj),
"15" },
{ "-sliderrelief", TK_OPTION_RELIEF, Tk_Offset(SliderElement,reliefObj),
"raised" },
- { "-borderwidth", TK_OPTION_PIXELS, Tk_Offset(SliderElement,borderWidthObj),
- STRINGIFY(BORDERWIDTH) },
{ "-background", TK_OPTION_BORDER, Tk_Offset(SliderElement,borderObj),
DEFAULT_BACKGROUND },
- { "-bordercolor", TK_OPTION_COLOR, Tk_Offset(ThumbElement,borderColorObj),
+ { "-bordercolor", TK_OPTION_COLOR, Tk_Offset(SliderElement,borderColorObj),
"black" },
+ { "-borderwidth", TK_OPTION_PIXELS, Tk_Offset(SliderElement,borderWidthObj),
+ STRINGIFY(BORDERWIDTH) },
{ "-orient", TK_OPTION_ANY, Tk_Offset(SliderElement,orientObj),
"horizontal" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void SliderElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- SliderElement *slider = elementRecord;
- int orient, length, thickness, borderWidth;
+ SliderElement *slider = (SliderElement *)elementRecord;
+ int orient;
+ int thickness, borderWidth;
Ttk_GetOrientFromObj(NULL, slider->orientObj, &orient);
- Tk_GetPixelsFromObj(NULL, tkwin, slider->borderWidthObj, &borderWidth);
- Tk_GetPixelsFromObj(NULL, tkwin, slider->lengthObj, &length);
Tk_GetPixelsFromObj(NULL, tkwin, slider->thicknessObj, &thickness);
+ Tk_GetPixelsFromObj(NULL, tkwin, slider->borderWidthObj, &borderWidth);
switch (orient) {
case TTK_ORIENT_VERTICAL:
*widthPtr = thickness + (borderWidth *2);
*heightPtr = *widthPtr/2;
break;
-
case TTK_ORIENT_HORIZONTAL:
*heightPtr = thickness + (borderWidth *2);
*widthPtr = *heightPtr/2;
@@ -1027,10 +1210,14 @@ static void SliderElementSize(
}
static void SliderElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- SliderElement *slider = elementRecord;
+ SliderElement *slider = (SliderElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, slider->borderObj);
XColor *borderColor = Tk_GetColorFromObj(tkwin, slider->borderColorObj);
int relief = TK_RELIEF_RAISED, borderWidth = 2;
@@ -1072,28 +1259,33 @@ static Ttk_ElementOptionSpec TreeitemIndicatorOptions[] = {
Tk_Offset(TreeitemIndicator,diameterObj), "9" },
{ "-indicatormargins", TK_OPTION_STRING,
Tk_Offset(TreeitemIndicator,marginObj), "2 2 4 2" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void TreeitemIndicatorSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- TreeitemIndicator *indicator = elementRecord;
- int diameter = 0;
+ TreeitemIndicator *indicator = (TreeitemIndicator *)elementRecord;
+ int size = 0;
Ttk_Padding margins;
+ Tk_GetPixelsFromObj(NULL, tkwin, indicator->diameterObj, &size);
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &margins);
- Tk_GetPixelsFromObj(NULL, tkwin, indicator->diameterObj, &diameter);
- *widthPtr = diameter + Ttk_PaddingWidth(margins);
- *heightPtr = diameter + Ttk_PaddingHeight(margins);
+ *widthPtr = size + Ttk_PaddingWidth(margins);
+ *heightPtr = size + Ttk_PaddingHeight(margins);
}
static void TreeitemIndicatorDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
Drawable d, Ttk_Box b, Ttk_State state)
{
- TreeitemIndicator *indicator = elementRecord;
+ TreeitemIndicator *indicator = (TreeitemIndicator *)elementRecord;
XColor *color = Tk_GetColorFromObj(tkwin, indicator->colorObj);
GC gc = Tk_GCForColor(color, d);
Ttk_Padding padding = Ttk_UniformPadding(0);
@@ -1133,7 +1325,9 @@ static Ttk_ElementSpec TreeitemIndicatorElementSpec = {
* TtkAltTheme_Init --
* Install alternate theme.
*/
-MODULE_SCOPE int TtkAltTheme_Init(Tcl_Interp *interp)
+
+MODULE_SCOPE int
+TtkAltTheme_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_CreateTheme(interp, "alt", NULL);
@@ -1144,9 +1338,9 @@ MODULE_SCOPE int TtkAltTheme_Init(Tcl_Interp *interp)
Ttk_RegisterElement(interp, theme, "border", &BorderElementSpec, NULL);
Ttk_RegisterElement(interp, theme, "Checkbutton.indicator",
- &IndicatorElementSpec, &checkbutton_spec);
+ &IndicatorElementSpec, (void *)&checkbutton_spec);
Ttk_RegisterElement(interp, theme, "Radiobutton.indicator",
- &IndicatorElementSpec, &radiobutton_spec);
+ &IndicatorElementSpec, (void *)&radiobutton_spec);
Ttk_RegisterElement(interp, theme, "Menubutton.indicator",
&MenubuttonArrowElementSpec, NULL);
@@ -1158,8 +1352,14 @@ MODULE_SCOPE int TtkAltTheme_Init(Tcl_Interp *interp)
Ttk_RegisterElement(interp, theme, "uparrow",
&ArrowElementSpec, &ArrowElements[0]);
+ Ttk_RegisterElement(interp, theme, "Spinbox.uparrow",
+ &BoxArrowElementSpec, &ArrowElements[0]);
Ttk_RegisterElement(interp, theme, "downarrow",
&ArrowElementSpec, &ArrowElements[1]);
+ Ttk_RegisterElement(interp, theme, "Spinbox.downarrow",
+ &BoxArrowElementSpec, &ArrowElements[1]);
+ Ttk_RegisterElement(interp, theme, "Combobox.downarrow",
+ &BoxArrowElementSpec, &ArrowElements[1]);
Ttk_RegisterElement(interp, theme, "leftarrow",
&ArrowElementSpec, &ArrowElements[2]);
Ttk_RegisterElement(interp, theme, "rightarrow",
@@ -1167,11 +1367,8 @@ MODULE_SCOPE int TtkAltTheme_Init(Tcl_Interp *interp)
Ttk_RegisterElement(interp, theme, "arrow",
&ArrowElementSpec, &ArrowElements[0]);
- Ttk_RegisterElement(interp, theme, "arrow",
- &ArrowElementSpec, &ArrowElements[0]);
-
Ttk_RegisterElement(interp, theme, "Treeitem.indicator",
- &TreeitemIndicatorElementSpec, 0);
+ &TreeitemIndicatorElementSpec, NULL);
Tcl_PkgProvide(interp, "ttk::theme::alt", TTK_VERSION);
diff --git a/generic/ttk/ttkElements.c b/generic/ttk/ttkElements.c
index 2520ced..365314f 100644
--- a/generic/ttk/ttkElements.c
+++ b/generic/ttk/ttkElements.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, Joe English
+ * Copyright (c) 2003 Joe English
*
* Default implementation for themed elements.
*
@@ -25,19 +25,27 @@
* and may be used in other engines.
*/
-/* public */ Ttk_ElementOptionSpec TtkNullElementOptions[] = { { NULL, 0, 0, NULL } };
+/* public */ Ttk_ElementOptionSpec TtkNullElementOptions[] = { { NULL, TK_OPTION_BOOLEAN, 0, NULL } };
/* public */ void
TtkNullElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ TCL_UNUSED(void *), /* elementRecord */
+ TCL_UNUSED(Tk_Window),
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ TCL_UNUSED(Ttk_Padding *))
{
}
/* public */ void
TtkNullElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ TCL_UNUSED(void *), /* elementRecord */
+ TCL_UNUSED(Tk_Window),
+ TCL_UNUSED(Drawable),
+ TCL_UNUSED(Ttk_Box),
+ TCL_UNUSED(Ttk_State))
{
}
@@ -65,15 +73,19 @@ typedef struct {
static Ttk_ElementOptionSpec BackgroundElementOptions[] = {
{ "-background", TK_OPTION_BORDER,
Tk_Offset(BackgroundElement,backgroundObj), DEFAULT_BACKGROUND },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void FillElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- BackgroundElement *bg = elementRecord;
- Tk_3DBorder backgroundPtr = Tk_Get3DBorderFromObj(tkwin,bg->backgroundObj);
+ BackgroundElement *bg = (BackgroundElement *)elementRecord;
+ Tk_3DBorder backgroundPtr = Tk_Get3DBorderFromObj(tkwin, bg->backgroundObj);
XFillRectangle(Tk_Display(tkwin), d,
Tk_3DBorderGC(tkwin, backgroundPtr, TK_3D_FLAT_GC),
@@ -82,7 +94,9 @@ static void FillElementDraw(
static void BackgroundElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ Drawable d,
+ TCL_UNUSED(Ttk_Box),
+ Ttk_State state)
{
FillElementDraw(
clientData, elementRecord, tkwin,
@@ -122,34 +136,43 @@ static Ttk_ElementOptionSpec BorderElementOptions[] = {
Tk_Offset(BorderElement,borderWidthObj), DEFAULT_BORDERWIDTH },
{ "-relief", TK_OPTION_RELIEF,
Tk_Offset(BorderElement,reliefObj), "flat" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void BorderElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
- BorderElement *bd = elementRecord;
+ BorderElement *bd = (BorderElement *)elementRecord;
int borderWidth = 0;
- Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
+
+ Tk_GetPixelsFromObj(NULL, tkwin, bd->borderWidthObj, &borderWidth);
*paddingPtr = Ttk_UniformPadding((short)borderWidth);
}
static void BorderElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- BorderElement *bd = elementRecord;
+ BorderElement *bd = (BorderElement *)elementRecord;
Tk_3DBorder border = NULL;
int borderWidth = 1, relief = TK_RELIEF_FLAT;
border = Tk_Get3DBorderFromObj(tkwin, bd->borderObj);
- Tcl_GetIntFromObj(NULL, bd->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, bd->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, bd->reliefObj, &relief);
if (border && borderWidth > 0 && relief != TK_RELIEF_FLAT) {
Tk_Draw3DRectangle(tkwin, d, border,
- b.x, b.y, b.width, b.height, borderWidth,relief);
+ b.x, b.y, b.width, b.height, borderWidth, relief);
}
}
@@ -168,6 +191,8 @@ static Ttk_ElementSpec BorderElementSpec = {
typedef struct {
Tcl_Obj *borderObj;
Tcl_Obj *borderWidthObj;
+ Tcl_Obj *focusWidthObj;
+ Tcl_Obj *focusColorObj;
} FieldElement;
static Ttk_ElementOptionSpec FieldElementOptions[] = {
@@ -175,30 +200,95 @@ static Ttk_ElementOptionSpec FieldElementOptions[] = {
Tk_Offset(FieldElement,borderObj), "white" },
{ "-borderwidth", TK_OPTION_PIXELS,
Tk_Offset(FieldElement,borderWidthObj), "2" },
- { NULL, 0, 0, NULL }
+ { "-focuswidth", TK_OPTION_PIXELS,
+ Tk_Offset(FieldElement,focusWidthObj), "2" },
+ { "-focuscolor", TK_OPTION_COLOR,
+ Tk_Offset(FieldElement,focusColorObj), "#4a6984" },
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
+
static void FieldElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
- FieldElement *field = elementRecord;
- int borderWidth = 2;
+ FieldElement *field = (FieldElement *)elementRecord;
+ int borderWidth = 2, focusWidth = 2;
+
Tk_GetPixelsFromObj(NULL, tkwin, field->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, field->focusWidthObj, &focusWidth);
+ if (focusWidth > 0 && borderWidth < 2) {
+ borderWidth += (focusWidth - borderWidth);
+ }
*paddingPtr = Ttk_UniformPadding((short)borderWidth);
}
static void FieldElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b, Ttk_State state)
{
- FieldElement *field = elementRecord;
+ FieldElement *field = (FieldElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, field->borderObj);
- int borderWidth = 2;
-
- Tk_GetPixelsFromObj(NULL, tkwin, field->borderWidthObj, &borderWidth);
- Tk_Fill3DRectangle(tkwin, d, border,
- b.x, b.y, b.width, b.height, borderWidth, TK_RELIEF_SUNKEN);
+ int focusWidth = 2;
+
+ Tk_GetPixelsFromObj(NULL, tkwin, field->focusWidthObj, &focusWidth);
+
+ if (focusWidth > 0 && (state & TTK_STATE_FOCUS)) {
+ Display *disp = Tk_Display(tkwin);
+ XColor *focusColor = Tk_GetColorFromObj(tkwin, field->focusColorObj);
+ GC focusGC = Tk_GCForColor(focusColor, d);
+
+ if (focusWidth > 1) {
+ int x1 = b.x, x2 = b.x + b.width - 1;
+ int y1 = b.y, y2 = b.y + b.height - 1;
+ int w = WIN32_XDRAWLINE_HACK;
+ GC bgGC;
+
+ /*
+ * Draw the outer rounded rectangle
+ */
+ XDrawLine(disp, d, focusGC, x1+1, y1, x2-1+w, y1); /* N */
+ XDrawLine(disp, d, focusGC, x1+1, y2, x2-1+w, y2); /* S */
+ XDrawLine(disp, d, focusGC, x1, y1+1, x1, y2-1+w); /* W */
+ XDrawLine(disp, d, focusGC, x2, y1+1, x2, y2-1+w); /* E */
+
+ /*
+ * Draw the inner rectangle
+ */
+ b.x += 1; b.y += 1; b.width -= 2; b.height -= 2;
+ XDrawRectangle(disp, d, focusGC, b.x, b.y, b.width-1, b.height-1);
+
+ /*
+ * Fill the inner rectangle
+ */
+ bgGC = Tk_3DBorderGC(tkwin, border, TK_3D_FLAT_GC);
+ XFillRectangle(disp, d, bgGC, b.x+1, b.y+1, b.width-2, b.height-2);
+ } else {
+ /*
+ * Draw the field element as usual
+ */
+ int borderWidth = 2;
+ Tk_GetPixelsFromObj(NULL, tkwin, field->borderWidthObj,
+ &borderWidth);
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ borderWidth, TK_RELIEF_SUNKEN);
+
+ /*
+ * Change the color of the border's outermost pixels
+ */
+ XDrawRectangle(disp, d, focusGC, b.x, b.y, b.width-1, b.height-1);
+ }
+ } else {
+ int borderWidth = 2;
+ Tk_GetPixelsFromObj(NULL, tkwin, field->borderWidthObj, &borderWidth);
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ borderWidth, TK_RELIEF_SUNKEN);
+ }
}
static Ttk_ElementSpec FieldElementSpec = {
@@ -231,23 +321,27 @@ static Ttk_ElementOptionSpec PaddingElementOptions[] = {
Tk_Offset(PaddingElement,paddingObj), "0" },
{ "-relief", TK_OPTION_RELIEF,
Tk_Offset(PaddingElement,reliefObj), "flat" },
- { "-shiftrelief", TK_OPTION_INT,
+ { "-shiftrelief", TK_OPTION_PIXELS,
Tk_Offset(PaddingElement,shiftreliefObj), "0" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void PaddingElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
- PaddingElement *padding = elementRecord;
+ PaddingElement *padding = (PaddingElement *)elementRecord;
int shiftRelief = 0;
int relief = TK_RELIEF_FLAT;
Ttk_Padding pad;
Tk_GetReliefFromObj(NULL, padding->reliefObj, &relief);
- Tcl_GetIntFromObj(NULL, padding->shiftreliefObj, &shiftRelief);
- Ttk_GetPaddingFromObj(NULL,tkwin,padding->paddingObj,&pad);
+ Tk_GetPixelsFromObj(NULL, tkwin, padding->shiftreliefObj, &shiftRelief);
+ Ttk_GetPaddingFromObj(NULL, tkwin, padding->paddingObj, &pad);
*paddingPtr = Ttk_RelievePadding(pad, relief, shiftRelief);
}
@@ -266,6 +360,7 @@ static Ttk_ElementSpec PaddingElementSpec = {
typedef struct {
Tcl_Obj *focusColorObj;
Tcl_Obj *focusThicknessObj;
+ Tcl_Obj *focusSolidObj;
} FocusElement;
/*
@@ -273,7 +368,8 @@ typedef struct {
* Draw a dotted rectangle to indicate focus.
*/
static void DrawFocusRing(
- Tk_Window tkwin, Drawable d, Tcl_Obj *colorObj, Ttk_Box b)
+ Tk_Window tkwin, Drawable d, Tcl_Obj *colorObj, int thickness, int solid,
+ Ttk_Box b)
{
XColor *color = Tk_GetColorFromObj(tkwin, colorObj);
unsigned long mask = 0UL;
@@ -281,11 +377,16 @@ static void DrawFocusRing(
GC gc;
gcvalues.foreground = color->pixel;
- gcvalues.line_style = LineOnOffDash;
- gcvalues.line_width = 1;
- gcvalues.dashes = 1;
- gcvalues.dash_offset = 1;
- mask = GCForeground | GCLineStyle | GCDashList | GCDashOffset | GCLineWidth;
+ gcvalues.line_width = thickness < 1 ? 1 : thickness;
+ if (solid) {
+ gcvalues.line_style = LineSolid;
+ mask = GCForeground | GCLineStyle | GCLineWidth;
+ } else {
+ gcvalues.line_style = LineOnOffDash;
+ gcvalues.dashes = 1;
+ gcvalues.dash_offset = 1;
+ mask = GCForeground | GCLineStyle | GCDashList | GCDashOffset | GCLineWidth;
+ }
gc = Tk_GetGC(tkwin, mask, &gcvalues);
XDrawRectangle(Tk_Display(tkwin), d, gc, b.x, b.y, b.width-1, b.height-1);
@@ -293,34 +394,47 @@ static void DrawFocusRing(
}
static Ttk_ElementOptionSpec FocusElementOptions[] = {
- { "-focuscolor",TK_OPTION_COLOR,
+ { "-focuscolor", TK_OPTION_COLOR,
Tk_Offset(FocusElement,focusColorObj), "black" },
- { "-focusthickness",TK_OPTION_PIXELS,
+ { "-focusthickness", TK_OPTION_PIXELS,
Tk_Offset(FocusElement,focusThicknessObj), "1" },
- { NULL, 0, 0, NULL }
+ { "-focussolid", TK_OPTION_BOOLEAN,
+ Tk_Offset(FocusElement,focusSolidObj), "0" },
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void FocusElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
- FocusElement *focus = elementRecord;
+ FocusElement *focus = (FocusElement *)elementRecord;
int focusThickness = 0;
- Tcl_GetIntFromObj(NULL, focus->focusThicknessObj, &focusThickness);
+ Tk_GetPixelsFromObj(NULL, tkwin, focus->focusThicknessObj, &focusThickness);
*paddingPtr = Ttk_UniformPadding((short)focusThickness);
}
static void FocusElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ Ttk_State state)
{
- FocusElement *focus = elementRecord;
+ FocusElement *focus = (FocusElement *)elementRecord;
int focusThickness = 0;
+ int focusSolid = 0;
if (state & TTK_STATE_FOCUS) {
- Tcl_GetIntFromObj(NULL,focus->focusThicknessObj,&focusThickness);
- DrawFocusRing(tkwin, d, focus->focusColorObj, b);
+ Tk_GetPixelsFromObj(NULL, tkwin, focus->focusThicknessObj, &focusThickness);
+ Tcl_GetBooleanFromObj(NULL, focus->focusSolidObj, &focusSolid);
+ DrawFocusRing(tkwin, d, focus->focusColorObj, focusThickness,
+ focusSolid, b);
}
}
@@ -349,21 +463,29 @@ static Ttk_ElementOptionSpec SeparatorElementOptions[] = {
Tk_Offset(SeparatorElement, orientObj), "horizontal" },
{ "-background", TK_OPTION_BORDER,
Tk_Offset(SeparatorElement,borderObj), DEFAULT_BACKGROUND },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void SeparatorElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ TCL_UNUSED(void *), /* elementRecord */
+ TCL_UNUSED(Tk_Window),
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
*widthPtr = *heightPtr = 2;
}
static void HorizontalSeparatorElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- SeparatorElement *separator = elementRecord;
+ SeparatorElement *separator = (SeparatorElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, separator->borderObj);
GC lightGC = Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC);
GC darkGC = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
@@ -373,10 +495,14 @@ static void HorizontalSeparatorElementDraw(
}
static void VerticalSeparatorElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- SeparatorElement *separator = elementRecord;
+ SeparatorElement *separator = (SeparatorElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, separator->borderObj);
GC lightGC = Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC);
GC darkGC = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
@@ -387,10 +513,11 @@ static void VerticalSeparatorElementDraw(
static void GeneralSeparatorElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ Drawable d, Ttk_Box b, Ttk_State state)
{
- SeparatorElement *separator = elementRecord;
+ SeparatorElement *separator = (SeparatorElement *)elementRecord;
int orient;
+
Ttk_GetOrientFromObj(NULL, separator->orientObj, &orient);
switch (orient) {
case TTK_ORIENT_HORIZONTAL:
@@ -439,22 +566,30 @@ typedef struct {
static Ttk_ElementOptionSpec SizegripOptions[] = {
{ "-background", TK_OPTION_BORDER,
Tk_Offset(SizegripElement,backgroundObj), DEFAULT_BACKGROUND },
- {0,0,0,0}
+ {0, TK_OPTION_BOOLEAN, 0, 0}
};
static void SizegripSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
int gripCount = 3, gripSpace = 2, gripThickness = 3;
*widthPtr = *heightPtr = gripCount * (gripSpace + gripThickness);
}
static void SizegripDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- SizegripElement *grip = elementRecord;
+ SizegripElement *grip = (SizegripElement *)elementRecord;
int gripCount = 3, gripSpace = 2;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, grip->backgroundObj);
GC lightGC = Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC);
@@ -463,9 +598,9 @@ static void SizegripDraw(
while (gripCount--) {
x1 -= gripSpace; y2 -= gripSpace;
- XDrawLine(Tk_Display(tkwin), d, darkGC, x1,y1, x2,y2); --x1; --y2;
- XDrawLine(Tk_Display(tkwin), d, darkGC, x1,y1, x2,y2); --x1; --y2;
- XDrawLine(Tk_Display(tkwin), d, lightGC, x1,y1, x2,y2); --x1; --y2;
+ XDrawLine(Tk_Display(tkwin), d, darkGC, x1, y1, x2, y2); --x1; --y2;
+ XDrawLine(Tk_Display(tkwin), d, darkGC, x1, y1, x2, y2); --x1; --y2;
+ XDrawLine(Tk_Display(tkwin), d, lightGC, x1, y1, x2, y2); --x1; --y2;
}
}
@@ -510,7 +645,7 @@ static Ttk_ElementOptionSpec IndicatorElementOptions[] = {
Tk_Offset(IndicatorElement,marginObj), "0 2 4 2" },
{ "-borderwidth", TK_OPTION_PIXELS,
Tk_Offset(IndicatorElement,borderWidthObj), DEFAULT_BORDERWIDTH },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
/*
@@ -542,15 +677,15 @@ static void SquareIndicatorElementDraw(
interior = Tk_Get3DBorderFromObj(tkwin, indicator->colorObj);
border = Tk_Get3DBorderFromObj(tkwin, indicator->backgroundObj);
- Tcl_GetIntFromObj(NULL,indicator->borderWidthObj,&borderWidth);
- Tk_GetReliefFromObj(NULL,indicator->reliefObj,&relief);
- Ttk_GetPaddingFromObj(NULL,tkwin,indicator->marginObj,&padding);
+ Tk_GetPixelsFromObj(NULL, tkwin, indicator->borderWidthObj, &borderWidth);
+ Tk_GetReliefFromObj(NULL, indicator->reliefObj, &relief);
+ Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &padding);
b = Ttk_PadBox(b, padding);
diameter = b.width < b.height ? b.width : b.height;
Tk_Fill3DRectangle(tkwin, d, interior, b.x, b.y,
- diameter, diameter,borderWidth, TK_RELIEF_FLAT);
+ diameter, diameter, borderWidth, TK_RELIEF_FLAT);
Tk_Draw3DRectangle(tkwin, d, border, b.x, b.y,
diameter, diameter, borderWidth, relief);
}
@@ -562,7 +697,7 @@ static void DiamondIndicatorElementSize(
void *clientData, void *elementRecord, Tk_Window tkwin,
int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
{
- IndicatorElement *indicator = elementRecord;
+ IndicatorElement *indicator = (IndicatorElement *)elementRecord;
Ttk_Padding margins;
int diameter = 0;
Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &margins);
@@ -573,9 +708,9 @@ static void DiamondIndicatorElementSize(
static void DiamondIndicatorElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ Drawable d, Ttk_Box b, Ttk_State state)
{
- IndicatorElement *indicator = elementRecord;
+ IndicatorElement *indicator = (IndicatorElement *)elementRecord;
Tk_3DBorder border = 0, interior = 0;
int borderWidth = 2;
int relief = TK_RELIEF_RAISED;
@@ -585,9 +720,9 @@ static void DiamondIndicatorElementDraw(
interior = Tk_Get3DBorderFromObj(tkwin, indicator->colorObj);
border = Tk_Get3DBorderFromObj(tkwin, indicator->backgroundObj);
- Tcl_GetIntFromObj(NULL,indicator->borderWidthObj,&borderWidth);
- Tk_GetReliefFromObj(NULL,indicator->reliefObj,&relief);
- Ttk_GetPaddingFromObj(NULL,tkwin,indicator->marginObj,&padding);
+ Tk_GetPixelsFromObj(NULL, tkwin, indicator->borderWidthObj, &borderWidth);
+ Tk_GetReliefFromObj(NULL, indicator->reliefObj, &relief);
+ Ttk_GetPaddingFromObj(NULL, tkwin, indicator->marginObj, &padding);
b = Ttk_PadBox(b, padding);
@@ -603,8 +738,8 @@ static void DiamondIndicatorElementDraw(
points[3].x = b.x + radius;
points[3].y = b.y;
- Tk_Fill3DPolygon(tkwin,d,interior,points,4,borderWidth,TK_RELIEF_FLAT);
- Tk_Draw3DPolygon(tkwin,d,border,points,4,borderWidth,relief);
+ Tk_Fill3DPolygon(tkwin, d, interior, points, 4, borderWidth, TK_RELIEF_FLAT);
+ Tk_Draw3DPolygon(tkwin, d, border, points, 4, borderWidth, relief);
}
static Ttk_ElementSpec CheckbuttonIndicatorElementSpec = {
@@ -650,10 +785,10 @@ static Ttk_ElementOptionSpec MenuIndicatorElementOptions[] = {
Tk_Offset(MenuIndicatorElement,widthObj), "4.0m" },
{ "-indicatorheight", TK_OPTION_PIXELS,
Tk_Offset(MenuIndicatorElement,heightObj), "1.7m" },
- { "-borderwidth", TK_OPTION_PIXELS,
+ { "-indicatorborderwidth", TK_OPTION_PIXELS,
Tk_Offset(MenuIndicatorElement,borderWidthObj), DEFAULT_BORDERWIDTH },
{ "-indicatorrelief", TK_OPTION_RELIEF,
- Tk_Offset(MenuIndicatorElement,reliefObj),"raised" },
+ Tk_Offset(MenuIndicatorElement,reliefObj), "raised" },
{ "-indicatormargin", TK_OPTION_STRING,
Tk_Offset(MenuIndicatorElement,marginObj), "5 0" },
{ NULL, 0, 0, NULL }
@@ -667,7 +802,7 @@ static void MenuIndicatorElementSize(
Ttk_Padding margins;
Tk_GetPixelsFromObj(NULL, tkwin, mi->widthObj, widthPtr);
Tk_GetPixelsFromObj(NULL, tkwin, mi->heightObj, heightPtr);
- Ttk_GetPaddingFromObj(NULL,tkwin,mi->marginObj, &margins);
+ Ttk_GetPaddingFromObj(NULL, tkwin, mi->marginObj, &margins);
*widthPtr += Ttk_PaddingWidth(margins);
*heightPtr += Ttk_PaddingHeight(margins);
}
@@ -681,7 +816,7 @@ static void MenuIndicatorElementDraw(
Ttk_Padding margins;
int borderWidth = 2;
- Ttk_GetPaddingFromObj(NULL,tkwin,mi->marginObj,&margins);
+ Ttk_GetPaddingFromObj(NULL, tkwin, mi->marginObj, &margins);
b = Ttk_PadBox(b, margins);
Tk_GetPixelsFromObj(NULL, tkwin, mi->borderWidthObj, &borderWidth);
Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
@@ -704,63 +839,93 @@ static Ttk_ElementSpec MenuIndicatorElementSpec = {
*/
static int ArrowElements[] = { ARROW_UP, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT };
+
typedef struct {
+ Tcl_Obj *sizeObj;
+ Tcl_Obj *colorObj;
Tcl_Obj *borderObj;
Tcl_Obj *borderWidthObj;
Tcl_Obj *reliefObj;
- Tcl_Obj *sizeObj;
- Tcl_Obj *colorObj;
} ArrowElement;
static Ttk_ElementOptionSpec ArrowElementOptions[] = {
+ { "-arrowsize", TK_OPTION_PIXELS,
+ Tk_Offset(ArrowElement,sizeObj), "14" },
+ { "-arrowcolor", TK_OPTION_COLOR,
+ Tk_Offset(ArrowElement,colorObj), "black"},
{ "-background", TK_OPTION_BORDER,
Tk_Offset(ArrowElement,borderObj), DEFAULT_BACKGROUND },
- { "-relief",TK_OPTION_RELIEF,
- Tk_Offset(ArrowElement,reliefObj),"raised"},
{ "-borderwidth", TK_OPTION_PIXELS,
Tk_Offset(ArrowElement,borderWidthObj), "1" },
- { "-arrowcolor",TK_OPTION_COLOR,
- Tk_Offset(ArrowElement,colorObj),"black"},
- { "-arrowsize", TK_OPTION_PIXELS,
- Tk_Offset(ArrowElement,sizeObj), "14" },
- { NULL, 0, 0, NULL }
+ { "-relief", TK_OPTION_RELIEF,
+ Tk_Offset(ArrowElement,reliefObj), "raised"},
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
-static Ttk_Padding ArrowMargins = { 3,3,3,3 };
+static Ttk_Padding ArrowPadding = { 3, 3, 3, 3 };
static void ArrowElementSize(
void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- ArrowElement *arrow = elementRecord;
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
int direction = *(int *)clientData;
- int width = 14;
-
- Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &width);
- width -= Ttk_PaddingWidth(ArrowMargins);
- TtkArrowSize(width/2, direction, widthPtr, heightPtr);
- *widthPtr += Ttk_PaddingWidth(ArrowMargins);
- *heightPtr += Ttk_PaddingWidth(ArrowMargins);
+ int size = 14;
+
+ Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size);
+ size -= Ttk_PaddingWidth(ArrowPadding);
+ TtkArrowSize(size/2, direction, widthPtr, heightPtr);
+ *widthPtr += Ttk_PaddingWidth(ArrowPadding);
+ *heightPtr += Ttk_PaddingWidth(ArrowPadding);
+ if (*widthPtr < *heightPtr) {
+ *widthPtr = *heightPtr;
+ } else {
+ *heightPtr = *widthPtr;
+ }
}
static void ArrowElementDraw(
void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
int direction = *(int *)clientData;
- ArrowElement *arrow = elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, arrow->borderObj);
+ int borderWidth = 1, relief = TK_RELIEF_RAISED;
+ int cx = 0, cy = 0;
XColor *arrowColor = Tk_GetColorFromObj(tkwin, arrow->colorObj);
- int relief = TK_RELIEF_RAISED;
- int borderWidth = 1;
+ GC gc = Tk_GCForColor(arrowColor, d);
+ Tk_GetPixelsFromObj(NULL, tkwin, arrow->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, arrow->reliefObj, &relief);
- Tk_Fill3DRectangle(
- tkwin, d, border, b.x, b.y, b.width, b.height, borderWidth, relief);
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ borderWidth, relief);
+
+ b = Ttk_PadBox(b, ArrowPadding);
- TtkFillArrow(Tk_Display(tkwin), d, Tk_GCForColor(arrowColor, d),
- Ttk_PadBox(b, ArrowMargins), direction);
+ switch (direction) {
+ case ARROW_UP:
+ case ARROW_DOWN:
+ TtkArrowSize(b.width/2, direction, &cx, &cy);
+ if ((b.height - cy) % 2 == 1) {
+ ++cy;
+ }
+ break;
+ case ARROW_LEFT:
+ case ARROW_RIGHT:
+ TtkArrowSize(b.height/2, direction, &cx, &cy);
+ if ((b.width - cx) % 2 == 1) {
+ ++cx;
+ }
+ break;
+ }
+
+ b = Ttk_AnchorBox(b, cx, cy, TK_ANCHOR_CENTER);
+
+ TtkFillArrow(Tk_Display(tkwin), d, gc, b, direction);
}
static Ttk_ElementSpec ArrowElementSpec = {
@@ -771,7 +936,72 @@ static Ttk_ElementSpec ArrowElementSpec = {
ArrowElementDraw
};
-/*----------------------------------------------------------------------
+/*
+ * Modified arrow element for comboboxes and spinboxes:
+ * The width and height are different, and the left edge is drawn in the
+ * same color as the right one.
+ */
+
+static void BoxArrowElementSize(
+ void *clientData, void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
+{
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
+ int direction = *(int *)clientData;
+ int size = 14;
+
+ Tk_GetPixelsFromObj(NULL, tkwin, arrow->sizeObj, &size);
+ size -= Ttk_PaddingWidth(ArrowPadding);
+ TtkArrowSize(size/2, direction, widthPtr, heightPtr);
+ *widthPtr += Ttk_PaddingWidth(ArrowPadding);
+ *heightPtr += Ttk_PaddingWidth(ArrowPadding);
+}
+
+static void BoxArrowElementDraw(
+ void *clientData, void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
+{
+ ArrowElement *arrow = (ArrowElement *)elementRecord;
+ int direction = *(int *)clientData;
+ Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, arrow->borderObj);
+ int borderWidth = 1, relief = TK_RELIEF_RAISED;
+ Display *disp = Tk_Display(tkwin);
+ GC darkGC = Tk_3DBorderGC(tkwin, border, TK_3D_DARK_GC);
+ int w = WIN32_XDRAWLINE_HACK;
+ int cx = 0, cy = 0;
+ XColor *arrowColor = Tk_GetColorFromObj(tkwin, arrow->colorObj);
+ GC arrowGC = Tk_GCForColor(arrowColor, d);
+
+ Tk_Fill3DRectangle(tkwin, d, border, b.x, b.y, b.width, b.height,
+ borderWidth, relief);
+
+ XDrawLine(disp, d, darkGC, b.x, b.y+1, b.x, b.y+b.height-1+w);
+
+ b = Ttk_PadBox(b, ArrowPadding);
+
+ TtkArrowSize(b.width/2, direction, &cx, &cy);
+ if ((b.height - cy) % 2 == 1) {
+ ++cy;
+ }
+
+ b = Ttk_AnchorBox(b, cx, cy, TK_ANCHOR_CENTER);
+
+ TtkFillArrow(disp, d, arrowGC, b, direction);
+}
+
+static Ttk_ElementSpec BoxArrowElementSpec = {
+ TK_STYLE_VERSION_2,
+ sizeof(ArrowElement),
+ ArrowElementOptions,
+ BoxArrowElementSize,
+ BoxArrowElementDraw
+};
+
+
+/*
+ *----------------------------------------------------------------------
* +++ Trough element.
*
* Used in scrollbars and scales in place of "border".
@@ -788,14 +1018,18 @@ static Ttk_ElementOptionSpec TroughElementOptions[] = {
Tk_Offset(TroughElement,borderWidthObj), DEFAULT_BORDERWIDTH },
{ "-troughcolor", TK_OPTION_BORDER,
Tk_Offset(TroughElement,colorObj), DEFAULT_BACKGROUND },
- { "-troughrelief",TK_OPTION_RELIEF,
+ { "-troughrelief", TK_OPTION_RELIEF,
Tk_Offset(TroughElement,reliefObj), "sunken" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void TroughElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
TroughElement *troughPtr = elementRecord;
int borderWidth = 2;
@@ -805,10 +1039,12 @@ static void TroughElementSize(
}
static void TroughElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- TroughElement *troughPtr = elementRecord;
+ TroughElement *troughPtr = (TroughElement *)elementRecord;
Tk_3DBorder border = NULL;
int borderWidth = 2, relief = TK_RELIEF_SUNKEN;
@@ -854,15 +1090,18 @@ static Ttk_ElementOptionSpec ThumbElementOptions[] = {
Tk_Offset(ThumbElement,borderObj), DEFAULT_BACKGROUND },
{ "-borderwidth", TK_OPTION_PIXELS,
Tk_Offset(ThumbElement,borderWidthObj), DEFAULT_BORDERWIDTH },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void ThumbElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- ThumbElement *thumb = elementRecord;
- int orient, thickness;
+ ThumbElement *thumb = (ThumbElement *)elementRecord;
+ int orient;
+ int thickness;
Tk_GetPixelsFromObj(NULL, tkwin, thumb->thicknessObj, &thickness);
Ttk_GetOrientFromObj(NULL, thumb->orientObj, &orient);
@@ -877,10 +1116,12 @@ static void ThumbElementSize(
}
static void ThumbElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- ThumbElement *thumb = elementRecord;
+ ThumbElement *thumb = (ThumbElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, thumb->borderObj);
int borderWidth = 2, relief = TK_RELIEF_RAISED;
@@ -915,18 +1156,18 @@ typedef struct {
} SliderElement;
static Ttk_ElementOptionSpec SliderElementOptions[] = {
- { "-sliderlength", TK_OPTION_PIXELS, Tk_Offset(SliderElement,lengthObj),
- "30" },
- { "-sliderthickness",TK_OPTION_PIXELS,Tk_Offset(SliderElement,thicknessObj),
- "15" },
- { "-sliderrelief", TK_OPTION_RELIEF, Tk_Offset(SliderElement,reliefObj),
- "raised" },
- { "-borderwidth", TK_OPTION_PIXELS, Tk_Offset(SliderElement,borderWidthObj),
- DEFAULT_BORDERWIDTH },
- { "-background", TK_OPTION_BORDER, Tk_Offset(SliderElement,borderObj),
- DEFAULT_BACKGROUND },
- { "-orient", TK_OPTION_ANY, Tk_Offset(SliderElement,orientObj),
- "horizontal" },
+ { "-sliderlength", TK_OPTION_PIXELS,
+ Tk_Offset(SliderElement,lengthObj), "30" },
+ { "-sliderthickness", TK_OPTION_PIXELS,
+ Tk_Offset(SliderElement,thicknessObj), "15" },
+ { "-sliderrelief", TK_OPTION_RELIEF,
+ Tk_Offset(SliderElement,reliefObj), "raised" },
+ { "-sliderborderwidth", TK_OPTION_PIXELS,
+ Tk_Offset(SliderElement,borderWidthObj), DEFAULT_BORDERWIDTH },
+ { "-background", TK_OPTION_BORDER,
+ Tk_Offset(SliderElement,borderObj), DEFAULT_BACKGROUND },
+ { "-orient", TK_OPTION_ANY,
+ Tk_Offset(SliderElement,orientObj), "horizontal" },
{ NULL, 0, 0, NULL }
};
@@ -1038,15 +1279,18 @@ static Ttk_ElementOptionSpec PbarElementOptions[] = {
DEFAULT_BORDERWIDTH },
{ "-background", TK_OPTION_BORDER, Tk_Offset(PbarElement,borderObj),
DEFAULT_BACKGROUND },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void PbarElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ int *widthPtr, int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
- PbarElement *pbar = elementRecord;
- int orient, thickness = 15, length = 30, borderWidth = 2;
+ PbarElement *pbar = (PbarElement *)elementRecord;
+ int orient;
+ int thickness = 15, length = 30, borderWidth = 2;
Ttk_GetOrientFromObj(NULL, pbar->orientObj, &orient);
Tk_GetPixelsFromObj(NULL, tkwin, pbar->thicknessObj, &thickness);
@@ -1066,10 +1310,12 @@ static void PbarElementSize(
}
static void PbarElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- PbarElement *pbar = elementRecord;
+ PbarElement *pbar = (PbarElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, pbar->borderObj);
int relief = TK_RELIEF_RAISED, borderWidth = 2;
@@ -1096,19 +1342,28 @@ static Ttk_ElementSpec PbarElementSpec = {
typedef struct {
Tcl_Obj *borderWidthObj;
Tcl_Obj *backgroundObj;
+ Tcl_Obj *highlightObj;
+ Tcl_Obj *highlightColorObj;
} TabElement;
static Ttk_ElementOptionSpec TabElementOptions[] = {
{ "-borderwidth", TK_OPTION_PIXELS,
- Tk_Offset(TabElement,borderWidthObj),"1" },
+ Tk_Offset(TabElement,borderWidthObj), "1" },
{ "-background", TK_OPTION_BORDER,
Tk_Offset(TabElement,backgroundObj), DEFAULT_BACKGROUND },
- {0,0,0,0}
+ { "-highlight", TK_OPTION_BOOLEAN,
+ Tk_Offset(TabElement,highlightObj), "0" },
+ { "-highlightcolor", TK_OPTION_COLOR,
+ Tk_Offset(TabElement,highlightColorObj), "#4a6984" },
+ {0, TK_OPTION_BOOLEAN, 0, 0}
};
static void TabElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
TabElement *tab = (TabElement *)elementRecord;
int borderWidth = 1;
@@ -1140,13 +1395,16 @@ static void TabElementSize(
}
static void TabElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b, Ttk_State state)
{
Ttk_PositionSpec nbTabsStickBit = TTK_STICK_S;
TkMainInfo *mainInfoPtr = ((TkWindow *) tkwin)->mainPtr;
TabElement *tab = (TabElement *)elementRecord;
Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, tab->backgroundObj);
+ int highlight = 0;
+ XColor *hlColor = NULL;
XPoint pts[6];
int cut = 2;
Display *disp = Tk_Display(tkwin);
@@ -1176,6 +1434,11 @@ static void TabElementDraw(
b.width += 1; b.x -= 1;
break;
}
+
+ Tcl_GetBooleanFromObj(NULL, tab->highlightObj, &highlight);
+ if (highlight) {
+ hlColor = Tk_GetColorFromObj(tkwin, tab->highlightColorObj);
+ }
}
switch (nbTabsStickBit) {
@@ -1233,7 +1496,7 @@ static void TabElementDraw(
break;
}
- Tcl_GetIntFromObj(NULL, tab->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, tab->borderWidthObj, &borderWidth);
while (borderWidth--) {
XDrawLines(disp, d, Tk_3DBorderGC(tkwin, border, TK_3D_LIGHT_GC),
pts, 4, CoordModeOrigin);
@@ -1260,6 +1523,28 @@ static void TabElementDraw(
break;
}
}
+
+ if (highlight) {
+ switch (nbTabsStickBit) {
+ default:
+ case TTK_STICK_S:
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x + cut, b.y, b.width - 2*cut, cut);
+ break;
+ case TTK_STICK_N:
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x + cut, b.y + b.height - cut, b.width - 2*cut, cut);
+ break;
+ case TTK_STICK_E:
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x, b.y + cut, cut, b.height - 2*cut);
+ break;
+ case TTK_STICK_W:
+ XFillRectangle(disp, d, Tk_GCForColor(hlColor, d),
+ b.x + b.width - cut, b.y + cut, cut, b.height - 2*cut);
+ break;
+ }
+ }
}
static Ttk_ElementSpec TabElementSpec = {
@@ -1277,28 +1562,34 @@ static Ttk_ElementSpec TabElementSpec = {
typedef TabElement ClientElement;
#define ClientElementOptions TabElementOptions
-static void ClientElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+static void ClientElementSize(
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ TCL_UNUSED(int *), /* widthPtr */
+ TCL_UNUSED(int *), /* heightPtr */
+ Ttk_Padding *paddingPtr)
{
- ClientElement *ce = elementRecord;
- Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, ce->backgroundObj);
+ ClientElement *ce = (ClientElement *)elementRecord;
int borderWidth = 1;
- Tcl_GetIntFromObj(NULL, ce->borderWidthObj, &borderWidth);
-
- Tk_Fill3DRectangle(tkwin, d, border,
- b.x, b.y, b.width, b.height, borderWidth,TK_RELIEF_RAISED);
+ Tk_GetPixelsFromObj(0, tkwin, ce->borderWidthObj, &borderWidth);
+ *paddingPtr = Ttk_UniformPadding((short)borderWidth);
}
-static void ClientElementSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+static void ClientElementDraw(
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord, Tk_Window tkwin,
+ Drawable d, Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
- ClientElement *ce = elementRecord;
+ ClientElement *ce = (ClientElement *)elementRecord;
+ Tk_3DBorder border = Tk_Get3DBorderFromObj(tkwin, ce->backgroundObj);
int borderWidth = 1;
- Tk_GetPixelsFromObj(0, tkwin, ce->borderWidthObj, &borderWidth);
- *paddingPtr = Ttk_UniformPadding((short)borderWidth);
+
+ Tk_GetPixelsFromObj(NULL, tkwin, ce->borderWidthObj, &borderWidth);
+
+ Tk_Fill3DRectangle(tkwin, d, border,
+ b.x, b.y, b.width, b.height, borderWidth, TK_RELIEF_RAISED);
}
static Ttk_ElementSpec ClientElementSpec = {
@@ -1314,8 +1605,8 @@ static Ttk_ElementSpec ClientElementSpec = {
* Register default element implementations.
*/
-MODULE_SCOPE
-void TtkElements_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkElements_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
@@ -1323,7 +1614,7 @@ void TtkElements_Init(Tcl_Interp *interp)
* Elements:
*/
Ttk_RegisterElement(interp, theme, "background",
- &BackgroundElementSpec,NULL);
+ &BackgroundElementSpec, NULL);
Ttk_RegisterElement(interp, theme, "fill", &FillElementSpec, NULL);
Ttk_RegisterElement(interp, theme, "border", &BorderElementSpec, NULL);
@@ -1339,12 +1630,18 @@ void TtkElements_Init(Tcl_Interp *interp)
Ttk_RegisterElement(interp, theme, "Menubutton.indicator",
&MenuIndicatorElementSpec, NULL);
- Ttk_RegisterElement(interp, theme, "indicator", &ttkNullElementSpec,NULL);
+ Ttk_RegisterElement(interp, theme, "indicator", &ttkNullElementSpec, NULL);
Ttk_RegisterElement(interp, theme, "uparrow",
&ArrowElementSpec, &ArrowElements[0]);
+ Ttk_RegisterElement(interp, theme, "Spinbox.uparrow",
+ &BoxArrowElementSpec, &ArrowElements[0]);
Ttk_RegisterElement(interp, theme, "downarrow",
&ArrowElementSpec, &ArrowElements[1]);
+ Ttk_RegisterElement(interp, theme, "Spinbox.downarrow",
+ &BoxArrowElementSpec, &ArrowElements[1]);
+ Ttk_RegisterElement(interp, theme, "Combobox.downarrow",
+ &BoxArrowElementSpec, &ArrowElements[1]);
Ttk_RegisterElement(interp, theme, "leftarrow",
&ArrowElementSpec, &ArrowElements[2]);
Ttk_RegisterElement(interp, theme, "rightarrow",
diff --git a/generic/ttk/ttkEntry.c b/generic/ttk/ttkEntry.c
index 85ec1da..08fd085 100644
--- a/generic/ttk/ttkEntry.c
+++ b/generic/ttk/ttkEntry.c
@@ -330,7 +330,7 @@ EntryEditable(Entry *entryPtr)
*/
static int
EntryFetchSelection(
- ClientData clientData, int offset, char *buffer, int maxBytes)
+ void *clientData, int offset, char *buffer, int maxBytes)
{
Entry *entryPtr = (Entry *)clientData;
int byteCount;
@@ -363,7 +363,7 @@ EntryFetchSelection(
* Tk_LostSelProc for Entry widgets; called when an entry
* loses ownership of the selection.
*/
-static void EntryLostSelection(ClientData clientData)
+static void EntryLostSelection(void *clientData)
{
Entry *entryPtr = (Entry *)clientData;
entryPtr->core.flags &= ~GOT_SELECTION;
@@ -905,7 +905,7 @@ DeleteChars(
*/
#define EntryEventMask (FocusChangeMask)
static void
-EntryEventProc(ClientData clientData, XEvent *eventPtr)
+EntryEventProc(void *clientData, XEvent *eventPtr)
{
Entry *entryPtr = (Entry *)clientData;
@@ -1202,10 +1202,9 @@ static void EntryDisplay(void *clientData, Drawable d)
;
showSelection =
!(entryPtr->core.state & TTK_STATE_DISABLED)
- && selFirst > -1
+ && selFirst >= 0
&& selLast > leftIndex
- && selFirst <= rightIndex
- ;
+ && selFirst <= rightIndex;
/* Adjust selection range to keep in display bounds.
*/
@@ -1226,15 +1225,20 @@ static void EntryDisplay(void *clientData, Drawable d)
Tk_3DBorder selBorder = Tk_Get3DBorderFromObj(tkwin, es.selBorderObj);
int selStartX = EntryCharPosition(entryPtr, selFirst);
int selEndX = EntryCharPosition(entryPtr, selLast);
- int borderWidth = 1;
+ int borderWidth = 0;
- Tcl_GetIntFromObj(NULL, es.selBorderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, es.selBorderWidthObj, &borderWidth);
if (selBorder) {
- Tk_Fill3DRectangle(tkwin, d, selBorder,
+ int selWidth;
+ int textareaEnd = textarea.x + textarea.width;
+ if (selEndX > textareaEnd)
+ selEndX = textareaEnd;
+ selWidth = selEndX - selStartX + 2 * borderWidth;
+ if (selWidth > 0)
+ Tk_Fill3DRectangle(tkwin, d, selBorder,
selStartX - borderWidth, entryPtr->entry.layoutY - borderWidth,
- selEndX - selStartX + 2*borderWidth,
- entryPtr->entry.layoutHeight + 2*borderWidth,
+ selWidth, entryPtr->entry.layoutHeight + 2*borderWidth,
borderWidth, TK_RELIEF_RAISED);
}
}
@@ -1262,7 +1266,7 @@ static void EntryDisplay(void *clientData, Drawable d)
cursorHeight = entryPtr->entry.layoutHeight,
cursorWidth = 1;
- Tcl_GetIntFromObj(NULL,es.insertWidthObj,&cursorWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, es.insertWidthObj, &cursorWidth);
if (cursorWidth <= 0) {
cursorWidth = 1;
}
@@ -1827,7 +1831,7 @@ static int ComboboxCurrentCommand(
if (objc == 2) {
/* Check if currentIndex still valid:
*/
- if ( currentIndex < 0
+ if (currentIndex < 0
|| currentIndex >= nValues
|| strcmp(currentValue,Tcl_GetString(values[currentIndex]))
)
@@ -1892,11 +1896,11 @@ static int ComboboxCurrentCommand(
Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_RANGE", NULL);
return TCL_ERROR;
}
- }
+ }
cbPtr->combobox.currentIndex = currentIndex;
- return EntrySetValue(recordPtr, Tcl_GetString(values[currentIndex]));
+ return EntrySetValue((Entry *)recordPtr, Tcl_GetString(values[currentIndex]));
} else {
Tcl_WrongNumArgs(interp, 2, objv, "?newIndex?");
return TCL_ERROR;
@@ -2075,7 +2079,7 @@ static Ttk_ElementOptionSpec TextareaElementOptions[] = {
};
static void TextareaElementSize(
- TCL_UNUSED(void *),
+ TCL_UNUSED(void *), /* clientData */
void *elementRecord,
Tk_Window tkwin,
int *widthPtr,
@@ -2123,19 +2127,20 @@ TTK_BEGIN_LAYOUT(ComboboxLayout)
TTK_END_LAYOUT
TTK_BEGIN_LAYOUT(SpinboxLayout)
- TTK_GROUP("Spinbox.field", TTK_PACK_TOP|TTK_FILL_X,
- TTK_GROUP("null", TTK_PACK_RIGHT,
- TTK_NODE("Spinbox.uparrow", TTK_PACK_TOP|TTK_STICK_E)
- TTK_NODE("Spinbox.downarrow", TTK_PACK_BOTTOM|TTK_STICK_E))
- TTK_GROUP("Spinbox.padding", TTK_FILL_BOTH,
- TTK_NODE("Spinbox.textarea", TTK_FILL_BOTH)))
+ TTK_GROUP("Spinbox.field", TTK_PACK_TOP|TTK_FILL_X,
+ TTK_GROUP("null", TTK_PACK_RIGHT,
+ TTK_NODE("Spinbox.uparrow", TTK_PACK_TOP|TTK_STICK_E)
+ TTK_NODE("Spinbox.downarrow", TTK_PACK_BOTTOM|TTK_STICK_E))
+ TTK_GROUP("Spinbox.padding", TTK_FILL_BOTH,
+ TTK_NODE("Spinbox.textarea", TTK_FILL_BOTH)))
TTK_END_LAYOUT
/*------------------------------------------------------------------------
* +++ Initialization.
*/
-MODULE_SCOPE
-void TtkEntry_Init(Tcl_Interp *interp)
+
+MODULE_SCOPE void
+TtkEntry_Init(Tcl_Interp *interp)
{
Ttk_Theme themePtr = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkFrame.c b/generic/ttk/ttkFrame.c
index b8b3477..0570502 100644
--- a/generic/ttk/ttkFrame.c
+++ b/generic/ttk/ttkFrame.c
@@ -654,8 +654,8 @@ TTK_END_LAYOUT
* +++ Initialization.
*/
-MODULE_SCOPE
-void TtkFrame_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkFrame_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkImage.c b/generic/ttk/ttkImage.c
index c47e432..7de4d92 100644
--- a/generic/ttk/ttkImage.c
+++ b/generic/ttk/ttkImage.c
@@ -445,8 +445,8 @@ error:
return TCL_ERROR;
}
-MODULE_SCOPE
-void TtkImage_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkImage_Init(Tcl_Interp *interp)
{
Ttk_RegisterElementFactory(interp, "image", Ttk_CreateImageElement, NULL);
}
diff --git a/generic/ttk/ttkLabel.c b/generic/ttk/ttkLabel.c
index 54ecabd..c34d479 100644
--- a/generic/ttk/ttkLabel.c
+++ b/generic/ttk/ttkLabel.c
@@ -193,12 +193,14 @@ static void TextDraw(TextElement *text, Tk_Window tkwin, Drawable d, Ttk_Box b)
}
static void TextElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
TextElement *text = (TextElement *)elementRecord;
- (void)dummy;
- (void)paddingPtr;
if (!TextSetup(text, tkwin))
return;
@@ -212,12 +214,14 @@ static void TextElementSize(
}
static void TextElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
TextElement *text = (TextElement *)elementRecord;
- (void)dummy;
- (void)state;
if (TextSetup(text, tkwin)) {
TextDraw(text, tkwin, d, b);
@@ -365,12 +369,14 @@ static void ImageDraw(
}
static void ImageElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
ImageElement *image = (ImageElement *)elementRecord;
- (void)dummy;
- (void)paddingPtr;
if (ImageSetup(image, tkwin, 0)) {
*widthPtr = image->width;
@@ -380,11 +386,14 @@ static void ImageElementSize(
}
static void ImageElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ Ttk_State state)
{
ImageElement *image = (ImageElement *)elementRecord;
- (void)dummy;
if (ImageSetup(image, tkwin, state)) {
ImageDraw(image, tkwin, d, b, state);
@@ -569,13 +578,15 @@ static void LabelCleanup(LabelElement *c)
}
static void LabelElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
{
LabelElement *label = (LabelElement *)elementRecord;
int textReqWidth = 0;
- (void)dummy;
- (void)paddingPtr;
LabelSetup(label, tkwin, 0);
@@ -628,12 +639,15 @@ static void DrawCompound(
}
static void LabelElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ Ttk_State state)
{
LabelElement *l = (LabelElement *)elementRecord;
Tk_Anchor anchor = TK_ANCHOR_CENTER;
- (void)dummy;
LabelSetup(l, tkwin, state);
@@ -696,8 +710,8 @@ static Ttk_ElementSpec LabelElementSpec = {
* +++ Initialization.
*/
-MODULE_SCOPE
-void TtkLabel_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkLabel_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkLayout.c b/generic/ttk/ttkLayout.c
index d4c14f3..3e77ba4 100644
--- a/generic/ttk/ttkLayout.c
+++ b/generic/ttk/ttkLayout.c
@@ -257,6 +257,7 @@ Ttk_Box Ttk_PlaceBox(
* Ttk_PositionBox --
* Pack and stick a box according to PositionSpec flags.
*/
+
MODULE_SCOPE Ttk_Box
Ttk_PositionBox(Ttk_Box *cavity, int width, int height, Ttk_PositionSpec flags)
{
diff --git a/generic/ttk/ttkNotebook.c b/generic/ttk/ttkNotebook.c
index 600eca9..949e023 100644
--- a/generic/ttk/ttkNotebook.c
+++ b/generic/ttk/ttkNotebook.c
@@ -3,7 +3,6 @@
*/
#include "tkInt.h"
-
#include "ttkThemeInt.h"
#include "ttkWidget.h"
#include "ttkManager.h"
@@ -54,31 +53,31 @@ typedef struct
* relevant to the tab.
*
* PaneOptionSpecs includes additional options for child window placement
- * and is used to configure the content window.
+ * and is used to configure the pane.
*/
static Tk_OptionSpec TabOptionSpecs[] =
{
{TK_OPTION_STRING_TABLE, "-state", "", "",
- "normal", -1,Tk_Offset(Tab,state),
+ "normal", -1, Tk_Offset(Tab,state),
TK_OPTION_ENUM_VAR, TabStateStrings, 0 },
{TK_OPTION_STRING, "-text", "text", "Text", "",
- Tk_Offset(Tab,textObj), -1, 0,0,GEOMETRY_CHANGED },
+ Tk_Offset(Tab,textObj), -1, 0, 0, GEOMETRY_CHANGED },
{TK_OPTION_STRING, "-image", "image", "Image", NULL/*default*/,
- Tk_Offset(Tab,imageObj), -1, TK_OPTION_NULL_OK,0,GEOMETRY_CHANGED },
+ Tk_Offset(Tab,imageObj), -1, TK_OPTION_NULL_OK, 0, GEOMETRY_CHANGED },
{TK_OPTION_STRING_TABLE, "-compound", "compound", "Compound",
NULL, Tk_Offset(Tab,compoundObj), -1,
TK_OPTION_NULL_OK, ttkCompoundStrings, GEOMETRY_CHANGED },
{TK_OPTION_INT, "-underline", "underline", "Underline", "-1",
- Tk_Offset(Tab,underlineObj), -1, 0,0,GEOMETRY_CHANGED },
+ Tk_Offset(Tab,underlineObj), -1, 0, 0, GEOMETRY_CHANGED },
{TK_OPTION_END, NULL, NULL, NULL, NULL, 0, 0, 0, 0, 0 }
};
static Tk_OptionSpec PaneOptionSpecs[] =
{
{TK_OPTION_STRING, "-padding", "padding", "Padding", "0",
- Tk_Offset(Tab,paddingObj), -1, 0,0,GEOMETRY_CHANGED },
+ Tk_Offset(Tab,paddingObj), -1, 0, 0,GEOMETRY_CHANGED },
{TK_OPTION_STRING, "-sticky", "sticky", "Sticky", "nsew",
- Tk_Offset(Tab,stickyObj), -1, 0,0,GEOMETRY_CHANGED },
+ Tk_Offset(Tab,stickyObj), -1, 0, 0,GEOMETRY_CHANGED },
WIDGET_INHERIT_OPTIONS(TabOptionSpecs)
};
@@ -110,10 +109,10 @@ typedef struct
static Tk_OptionSpec NotebookOptionSpecs[] =
{
- {TK_OPTION_INT, "-width", "width", "Width", "0",
+ {TK_OPTION_PIXELS, "-width", "width", "Width", "0",
Tk_Offset(Notebook,notebook.widthObj),-1,
0,0,GEOMETRY_CHANGED },
- {TK_OPTION_INT, "-height", "height", "Height", "0",
+ {TK_OPTION_PIXELS, "-height", "height", "Height", "0",
Tk_Offset(Notebook,notebook.heightObj),-1,
0,0,GEOMETRY_CHANGED },
{TK_OPTION_STRING, "-padding", "padding", "Padding", NULL,
@@ -179,17 +178,17 @@ static void NotebookStyleOptions(
nbstyle->tabMargins = Ttk_UniformPadding(0);
if ((objPtr = Ttk_QueryOption(nb->core.layout, "-tabmargins", 0)) != 0) {
- Ttk_GetBorderFromObj(NULL, objPtr, &nbstyle->tabMargins);
+ Ttk_GetPaddingFromObj(NULL, tkwin, objPtr, &nbstyle->tabMargins);
}
nbstyle->padding = Ttk_UniformPadding(0);
if ((objPtr = Ttk_QueryOption(nb->core.layout, "-padding", 0)) != 0) {
- Ttk_GetPaddingFromObj(NULL,nb->core.tkwin,objPtr,&nbstyle->padding);
+ Ttk_GetPaddingFromObj(NULL, tkwin, objPtr, &nbstyle->padding);
}
nbstyle->minTabWidth = DEFAULT_MIN_TAB_WIDTH;
if ((objPtr = Ttk_QueryOption(nb->core.layout, "-mintabwidth", 0)) != 0) {
- Tcl_GetIntFromObj(NULL, objPtr, &nbstyle->minTabWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, objPtr, &nbstyle->minTabWidth);
}
}
@@ -422,8 +421,8 @@ static int NotebookSize(void *clientData, int *widthPtr, int *heightPtr)
/* Client width/height overridable by widget options:
*/
- Tcl_GetIntFromObj(NULL, nb->notebook.widthObj,&reqWidth);
- Tcl_GetIntFromObj(NULL, nb->notebook.heightObj,&reqHeight);
+ Tk_GetPixelsFromObj(NULL, nb->core.tkwin, nb->notebook.widthObj, &reqWidth);
+ Tk_GetPixelsFromObj(NULL, nb->core.tkwin, nb->notebook.heightObj, &reqHeight);
if (reqWidth > 0)
clientWidth = reqWidth;
if (reqHeight > 0)
@@ -508,7 +507,7 @@ static void PlaceTabs(
Tcl_Obj *expandObj = Ttk_QueryOption(tabLayout,"-expand",tabState);
if (expandObj) {
- Ttk_GetBorderFromObj(NULL, expandObj, &expand);
+ Ttk_GetPaddingFromObj(NULL, nb->core.tkwin, expandObj, &expand);
}
tab->parcel =
@@ -731,10 +730,10 @@ static void TabRemoved(void *managerData, int index)
}
static int TabRequest(
- TCL_UNUSED(void *),
- TCL_UNUSED(int),
- TCL_UNUSED(int),
- TCL_UNUSED(int))
+ TCL_UNUSED(void *), /* managerData */
+ TCL_UNUSED(int), /* index */
+ TCL_UNUSED(int), /* width */
+ TCL_UNUSED(int)) /* height */
{
return 1;
}
@@ -804,7 +803,7 @@ static const int NotebookEventMask
| PointerMotionMask
| LeaveWindowMask
;
-static void NotebookEventHandler(ClientData clientData, XEvent *eventPtr)
+static void NotebookEventHandler(void *clientData, XEvent *eventPtr)
{
Notebook *nb = (Notebook *)clientData;
@@ -1170,7 +1169,8 @@ static int NotebookSelectCommand(
}
return TCL_OK;
} else if (objc == 3) {
- int index, status = GetTabIndex(interp, nb, objv[2], &index);
+ int index;
+ int status = GetTabIndex(interp, nb, objv[2], &index);
if (status == TCL_OK) {
SelectTab(nb, index);
}
@@ -1425,8 +1425,8 @@ TTK_END_LAYOUT
* +++ Initialization.
*/
-MODULE_SCOPE
-void TtkNotebook_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkNotebook_Init(Tcl_Interp *interp)
{
Ttk_Theme themePtr = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkPanedwindow.c b/generic/ttk/ttkPanedwindow.c
index 133de96..f3ac1dc 100644
--- a/generic/ttk/ttkPanedwindow.c
+++ b/generic/ttk/ttkPanedwindow.c
@@ -733,11 +733,10 @@ static int PanedIdentifyCommand(
return TCL_ERROR;
}
- if ( Tcl_GetIntFromObj(interp, objv[objc-2], &x) != TCL_OK
- || Tcl_GetIntFromObj(interp, objv[objc-1], &y) != TCL_OK
- || (objc == 5 && Tcl_GetIndexFromObjStruct(interp, objv[2], whatTable,
- sizeof(char *), "option", 0, &what) != TCL_OK)
- ) {
+ if (Tcl_GetIntFromObj(interp, objv[objc-2], &x) != TCL_OK
+ || Tcl_GetIntFromObj(interp, objv[objc-1], &y) != TCL_OK
+ || (objc == 5 && Tcl_GetIndexFromObjStruct(interp, objv[2], whatTable,
+ sizeof(char *), "option", 0, &what) != TCL_OK)) {
return TCL_ERROR;
}
@@ -926,7 +925,7 @@ typedef struct {
} SashElement;
static Ttk_ElementOptionSpec SashElementOptions[] = {
- { "-sashthickness", TK_OPTION_INT,
+ { "-sashthickness", TK_OPTION_PIXELS,
Tk_Offset(SashElement,thicknessObj), "5" },
{ NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
@@ -934,7 +933,7 @@ static Ttk_ElementOptionSpec SashElementOptions[] = {
static void SashElementSize(
TCL_UNUSED(void *),
void *elementRecord,
- TCL_UNUSED(Tk_Window),
+ Tk_Window tkwin,
int *widthPtr,
int *heightPtr,
TCL_UNUSED(Ttk_Padding *))
@@ -942,7 +941,7 @@ static void SashElementSize(
SashElement *sash = (SashElement *)elementRecord;
int thickness = DEFAULT_SASH_THICKNESS;
- Tcl_GetIntFromObj(NULL, sash->thicknessObj, &thickness);
+ Tk_GetPixelsFromObj(NULL, tkwin, sash->thicknessObj, &thickness);
*widthPtr = *heightPtr = thickness;
}
@@ -969,8 +968,9 @@ TTK_END_LAYOUT
/*------------------------------------------------------------------------
* +++ Registration routine.
*/
-MODULE_SCOPE
-void TtkPanedwindow_Init(Tcl_Interp *interp)
+
+MODULE_SCOPE void
+TtkPanedwindow_Init(Tcl_Interp *interp)
{
Ttk_Theme themePtr = Ttk_GetDefaultTheme(interp);
RegisterWidget(interp, "ttk::panedwindow", &PanedWidgetSpec);
diff --git a/generic/ttk/ttkProgress.c b/generic/ttk/ttkProgress.c
index 2a0ef4a..0b6d30f 100644
--- a/generic/ttk/ttkProgress.c
+++ b/generic/ttk/ttkProgress.c
@@ -96,7 +96,7 @@ static int AnimationEnabled(Progressbar *pb)
* Increments the -phase option, redisplays the widget,
* and reschedules itself if animation still enabled.
*/
-static void AnimateProgressProc(ClientData clientData)
+static void AnimateProgressProc(void *clientData)
{
Progressbar *pb = (Progressbar *)clientData;
@@ -185,10 +185,11 @@ static void VariableChanged(void *recordPtr, const char *value)
* +++ Widget class methods:
*/
-static void ProgressbarInitialize(Tcl_Interp *dummy, void *recordPtr)
+static void ProgressbarInitialize(
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr)
{
Progressbar *pb = (Progressbar *)recordPtr;
- (void)dummy;
pb->progress.variableTrace = 0;
pb->progress.timer = 0;
@@ -236,12 +237,12 @@ static int ProgressbarConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
* Post-configuration hook:
*/
static int ProgressbarPostConfigure(
- Tcl_Interp *dummy, void *recordPtr, int mask)
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr,
+ TCL_UNUSED(int))
{
Progressbar *pb = (Progressbar *)recordPtr;
int status = TCL_OK;
- (void)dummy;
- (void)mask;
if (pb->progress.variableTrace) {
status = Ttk_FireTrace(pb->progress.variableTrace);
@@ -464,7 +465,7 @@ static int ProgressbarStartStopCommand(
prefix[0] = Tcl_NewStringObj(cmdName, -1);
prefix[1] = objv[0];
- Tcl_ListObjReplace(interp, cmd, 0,2, 2,prefix);
+ Tcl_ListObjReplace(interp, cmd, 0, 2, 2,prefix);
Tcl_IncrRefCount(cmd);
status = Tcl_EvalObjEx(interp, cmd, 0);
@@ -474,21 +475,23 @@ static int ProgressbarStartStopCommand(
}
static int ProgressbarStartCommand(
- void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ TCL_UNUSED(void *),
+ Tcl_Interp *interp,
+ int objc,
+ Tcl_Obj *const objv[])
{
- (void)recordPtr;
-
return ProgressbarStartStopCommand(
- interp, "::ttk::progressbar::start", objc, objv);
+ interp, "::ttk::progressbar::start", objc, objv);
}
static int ProgressbarStopCommand(
- void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
+ TCL_UNUSED(void *),
+ Tcl_Interp *interp,
+ int objc,
+ Tcl_Obj *const objv[])
{
- (void)recordPtr;
-
return ProgressbarStartStopCommand(
- interp, "::ttk::progressbar::stop", objc, objv);
+ interp, "::ttk::progressbar::stop", objc, objv);
}
static const Ttk_Ensemble ProgressbarCommands[] = {
@@ -539,8 +542,8 @@ TTK_END_LAYOUT
* Initialization:
*/
-MODULE_SCOPE
-void TtkProgressbar_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkProgressbar_Init(Tcl_Interp *interp)
{
Ttk_Theme themePtr = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkScale.c b/generic/ttk/ttkScale.c
index 9b9e4d2..a80d6e8 100644
--- a/generic/ttk/ttkScale.c
+++ b/generic/ttk/ttkScale.c
@@ -57,7 +57,7 @@ static Tk_OptionSpec ScaleOptionSpecs[] =
TK_OPTION_NULL_OK,0,0},
{TK_OPTION_STRING, "-variable", "variable", "Variable", "",
Tk_Offset(Scale,scale.variableObj), -1,
- 0,0,0},
+ 0, 0, 0},
{TK_OPTION_STRING_TABLE, "-orient", "orient", "Orient", "horizontal",
Tk_Offset(Scale,scale.orientObj),
Tk_Offset(Scale,scale.orient),
@@ -75,7 +75,7 @@ static Tk_OptionSpec ScaleOptionSpecs[] =
{TK_OPTION_STRING, "-state", "state", "State",
"normal", Tk_Offset(Scale,scale.stateObj), -1,
- 0,0,STATE_CHANGED},
+ 0, 0, STATE_CHANGED},
WIDGET_TAKEFOCUS_TRUE,
WIDGET_INHERIT_OPTIONS(ttkCoreOptionSpecs)
@@ -110,10 +110,11 @@ static void ScaleVariableChanged(void *recordPtr, const char *value)
/* ScaleInitialize --
* Scale widget initialization hook.
*/
-static void ScaleInitialize(Tcl_Interp *dummy, void *recordPtr)
+static void ScaleInitialize(
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr)
{
Scale *scalePtr = (Scale *)recordPtr;
- (void)dummy;
TtkTrackElementState(&scalePtr->core);
}
@@ -163,12 +164,12 @@ static int ScaleConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
* Post-configuration hook.
*/
static int ScalePostConfigure(
- Tcl_Interp *dummy, void *recordPtr, int mask)
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr,
+ TCL_UNUSED(int))
{
Scale *scale = (Scale *)recordPtr;
int status = TCL_OK;
- (void)dummy;
- (void)mask;
if (scale->scale.variableTrace) {
status = Ttk_FireTrace(scale->scale.variableTrace);
@@ -521,8 +522,9 @@ TTK_END_LAYOUT
/*
* Initialization.
*/
-MODULE_SCOPE
-void TtkScale_Init(Tcl_Interp *interp)
+
+MODULE_SCOPE void
+TtkScale_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkScrollbar.c b/generic/ttk/ttkScrollbar.c
index af2f0b0..31f291a 100644
--- a/generic/ttk/ttkScrollbar.c
+++ b/generic/ttk/ttkScrollbar.c
@@ -34,7 +34,7 @@ typedef struct
static Tk_OptionSpec ScrollbarOptionSpecs[] =
{
{TK_OPTION_STRING, "-command", "command", "Command", "",
- Tk_Offset(Scrollbar,scrollbar.commandObj), -1, 0,0,0},
+ Tk_Offset(Scrollbar,scrollbar.commandObj), -1, 0, 0, 0},
{TK_OPTION_STRING_TABLE, "-orient", "orient", "Orient", "vertical",
Tk_Offset(Scrollbar,scrollbar.orientObj),
@@ -50,10 +50,11 @@ static Tk_OptionSpec ScrollbarOptionSpecs[] =
*/
static void
-ScrollbarInitialize(Tcl_Interp *dummy, void *recordPtr)
+ScrollbarInitialize(
+ TCL_UNUSED(Tcl_Interp *),
+ void *recordPtr)
{
Scrollbar *sb = (Scrollbar *)recordPtr;
- (void)dummy;
sb->scrollbar.first = 0.0;
sb->scrollbar.last = 1.0;
@@ -330,8 +331,8 @@ TTK_END_LAYOUT
* +++ Initialization.
*/
-MODULE_SCOPE
-void TtkScrollbar_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkScrollbar_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkSeparator.c b/generic/ttk/ttkSeparator.c
index 6e305fe..26c169f 100644
--- a/generic/ttk/ttkSeparator.c
+++ b/generic/ttk/ttkSeparator.c
@@ -120,8 +120,8 @@ TTK_END_LAYOUT
/* +++ Initialization:
*/
-MODULE_SCOPE
-void TtkSeparator_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkSeparator_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkSquare.c b/generic/ttk/ttkSquare.c
index a2b2823..8629ae9 100644
--- a/generic/ttk/ttkSquare.c
+++ b/generic/ttk/ttkSquare.c
@@ -198,14 +198,17 @@ static Ttk_ElementOptionSpec SquareElementOptions[] =
*/
static void SquareElementSize(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ Ttk_Padding *paddingPtr)
{
SquareElement *square = (SquareElement *)elementRecord;
int borderWidth = 0;
- (void)dummy;
- Tcl_GetIntFromObj(NULL, square->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, square->borderWidthObj, &borderWidth);
*paddingPtr = Ttk_UniformPadding((short)borderWidth);
Tk_GetPixelsFromObj(NULL, tkwin, square->widthObj, widthPtr);
Tk_GetPixelsFromObj(NULL, tkwin, square->heightObj, heightPtr);
@@ -216,17 +219,19 @@ static void SquareElementSize(
*/
static void SquareElementDraw(
- void *dummy, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, unsigned int state)
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
{
SquareElement *square = (SquareElement *)elementRecord;
Tk_3DBorder foreground = NULL;
int borderWidth = 1, relief = TK_RELIEF_FLAT;
- (void)dummy;
- (void)state;
foreground = Tk_Get3DBorderFromObj(tkwin, square->foregroundObj);
- Tcl_GetIntFromObj(NULL, square->borderWidthObj, &borderWidth);
+ Tk_GetPixelsFromObj(NULL, tkwin, square->borderWidthObj, &borderWidth);
Tk_GetReliefFromObj(NULL, square->reliefObj, &relief);
Tk_Fill3DRectangle(tkwin, d, foreground,
diff --git a/generic/ttk/ttkState.c b/generic/ttk/ttkState.c
index 9e5cf4b..2cff741 100644
--- a/generic/ttk/ttkState.c
+++ b/generic/ttk/ttkState.c
@@ -9,28 +9,29 @@
#include "ttkTheme.h"
/*
- * Table of state names. Must be kept in sync with TTK_STATE_*
- * #defines in ttkTheme.h.
+ * Table of state names.
*/
-static const char *const stateNames[] =
-{
- "active", /* Mouse cursor is over widget or element */
- "disabled", /* Widget is disabled */
- "focus", /* Widget has keyboard focus */
- "pressed", /* Pressed or "armed" */
- "selected", /* "on", "true", "current", etc. */
- "background", /* Top-level window lost focus (Mac,Win "inactive") */
- "alternate", /* Widget-specific alternate display style */
- "invalid", /* Bad value */
- "readonly", /* Editing/modification disabled */
- "hover", /* Mouse cursor is over widget */
- "reserved1", /* Reserved for future extension */
- "reserved2", /* Reserved for future extension */
- "reserved3", /* Reserved for future extension */
- "user3", /* User-definable state */
- "user2", /* User-definable state */
- "user1", /* User-definable state */
- NULL
+static const struct {
+ char name[12];
+ int value;
+} stateNames[] = {
+ {"active", TTK_STATE_ACTIVE}, /* Mouse cursor is over widget or element */
+ {"disabled", TTK_STATE_DISABLED}, /* Widget is disabled */
+ {"focus", TTK_STATE_FOCUS}, /* Widget has keyboard focus */
+ {"pressed", TTK_STATE_PRESSED}, /* Pressed or "armed" */
+ {"selected", TTK_STATE_SELECTED}, /* "on", "true", "current", etc. */
+ {"background", TTK_STATE_BACKGROUND}, /* Top-level window lost focus (Mac,Win "inactive") */
+ {"alternate", TTK_STATE_ALTERNATE}, /* Widget-specific alternate display style */
+ {"invalid", TTK_STATE_INVALID}, /* Bad value */
+ {"readonly", TTK_STATE_READONLY}, /* Editing/modification disabled */
+ {"hover", TTK_STATE_HOVER}, /* Mouse cursor is over widget */
+ {"user6", TTK_STATE_USER6}, /* User-definable state */
+ {"user5", TTK_STATE_USER5}, /* User-definable state */
+ {"user4", TTK_STATE_USER4}, /* User-definable state */
+ {"user3", TTK_STATE_USER3}, /* User-definable state */
+ {"user2", TTK_STATE_USER2}, /* User-definable state */
+ {"user1", TTK_STATE_USER1}, /* User-definable state */
+ {"", 0}
};
/*------------------------------------------------------------------------
@@ -45,8 +46,6 @@ static const char *const stateNames[] =
*/
static int StateSpecSetFromAny(Tcl_Interp *interp, Tcl_Obj *obj);
-/* static void StateSpecFreeIntRep(Tcl_Obj *); */
-#define StateSpecFreeIntRep 0 /* not needed */
static void StateSpecDupIntRep(Tcl_Obj *, Tcl_Obj *);
static void StateSpecUpdateString(Tcl_Obj *);
@@ -54,7 +53,7 @@ static
struct Tcl_ObjType StateSpecObjType =
{
"StateSpec",
- StateSpecFreeIntRep,
+ 0,
StateSpecDupIntRep,
StateSpecUpdateString,
StateSpecSetFromAny
@@ -89,12 +88,12 @@ static int StateSpecSetFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr)
on = 1;
}
- for (j = 0; stateNames[j] != 0; ++j) {
- if (strcmp(stateName, stateNames[j]) == 0)
+ for (j = 0; stateNames[j].value; ++j) {
+ if (strcmp(stateName, stateNames[j].name) == 0)
break;
}
- if (stateNames[j] == 0) {
+ if (stateNames[j].value == 0) {
if (interp) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"Invalid state name %s", stateName));
@@ -104,9 +103,9 @@ static int StateSpecSetFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr)
}
if (on) {
- onbits |= (1<<j);
+ onbits |= stateNames[j].value;
} else {
- offbits |= (1<<j);
+ offbits |= stateNames[j].value;
}
}
@@ -124,7 +123,7 @@ static int StateSpecSetFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr)
static void StateSpecUpdateString(Tcl_Obj *objPtr)
{
- unsigned int onbits = (objPtr->internalRep.longValue & 0xFFFF0000) >> 16;
+ unsigned int onbits = objPtr->internalRep.longValue >> 16;
unsigned int offbits = objPtr->internalRep.longValue & 0x0000FFFF;
unsigned int mask = onbits | offbits;
Tcl_DString result;
@@ -133,11 +132,12 @@ static void StateSpecUpdateString(Tcl_Obj *objPtr)
Tcl_DStringInit(&result);
- for (i=0; stateNames[i] != NULL; ++i) {
- if (mask & (1<<i)) {
- if (offbits & (1<<i))
+ for (i=0; stateNames[i].value; ++i) {
+ if (mask & stateNames[i].value) {
+ if (offbits & stateNames[i].value) {
Tcl_DStringAppend(&result, "!", 1);
- Tcl_DStringAppend(&result, stateNames[i], -1);
+ }
+ Tcl_DStringAppend(&result, stateNames[i].name, -1);
Tcl_DStringAppend(&result, " ", 1);
}
}
@@ -145,14 +145,14 @@ static void StateSpecUpdateString(Tcl_Obj *objPtr)
len = Tcl_DStringLength(&result);
if (len) {
/* 'len' includes extra trailing ' ' */
- objPtr->bytes = ckalloc(len);
+ objPtr->bytes = (char *)ckalloc(len);
objPtr->length = len-1;
strncpy(objPtr->bytes, Tcl_DStringValue(&result), len-1);
objPtr->bytes[len-1] = '\0';
} else {
/* empty string */
objPtr->length = 0;
- objPtr->bytes = ckalloc(1);
+ objPtr->bytes = (char *)ckalloc(1);
*objPtr->bytes = '\0';
}
@@ -181,7 +181,7 @@ int Ttk_GetStateSpecFromObj(
return status;
}
- spec->onbits = (objPtr->internalRep.longValue & 0xFFFF0000) >> 16;
+ spec->onbits = objPtr->internalRep.longValue >> 16;
spec->offbits = objPtr->internalRep.longValue & 0x0000FFFF;
return TCL_OK;
}
@@ -200,8 +200,8 @@ Tcl_Obj *Ttk_StateMapLookup(
Ttk_State state) /* State to look up */
{
Tcl_Obj **specs;
- int nSpecs;
- int j, status;
+ int j, nSpecs;
+ int status;
status = Tcl_ListObjGetElements(interp, map, &nSpecs, &specs);
if (status != TCL_OK)
@@ -232,8 +232,8 @@ Ttk_StateMap Ttk_GetStateMapFromObj(
Tcl_Obj *mapObj) /* State map */
{
Tcl_Obj **specs;
- int nSpecs;
- int j, status;
+ int j, nSpecs;
+ int status;
status = Tcl_ListObjGetElements(interp, mapObj, &nSpecs, &specs);
if (status != TCL_OK)
@@ -261,7 +261,7 @@ Ttk_StateMap Ttk_GetStateMapFromObj(
* Ttk_StateTableLooup --
* Look up an index from a statically allocated state table.
*/
-int Ttk_StateTableLookup(Ttk_StateTable *map, unsigned int state)
+int Ttk_StateTableLookup(Ttk_StateTable *map, Ttk_State state)
{
while ((state & map->onBits) != map->onBits
|| (~state & map->offBits) != map->offBits)
diff --git a/generic/ttk/ttkTheme.c b/generic/ttk/ttkTheme.c
index 3cea404..730de5d 100644
--- a/generic/ttk/ttkTheme.c
+++ b/generic/ttk/ttkTheme.c
@@ -679,8 +679,8 @@ Ttk_GetResourceCache(Tcl_Interp *interp)
* Register a new layout specification with a style.
* @@@ TODO: Make sure layoutName is not ".", root style must not have a layout
*/
-MODULE_SCOPE
-void Ttk_RegisterLayoutTemplate(
+MODULE_SCOPE void
+Ttk_RegisterLayoutTemplate(
Ttk_Theme theme, /* Target theme */
const char *layoutName, /* Name of new layout */
Ttk_LayoutTemplate layoutTemplate) /* Template */
@@ -1143,8 +1143,8 @@ Ttk_DrawElement(
* Side effects: Sets interp's result.
*/
-MODULE_SCOPE
-int TtkEnumerateHashTable(Tcl_Interp *interp, Tcl_HashTable *ht)
+MODULE_SCOPE int
+TtkEnumerateHashTable(Tcl_Interp *interp, Tcl_HashTable *ht)
{
Tcl_HashSearch search;
Tcl_Obj *result = Tcl_NewListObj(0, NULL);
@@ -1692,8 +1692,8 @@ StyleObjCmd(
return Ttk_InvokeEnsemble(StyleEnsemble, 1, clientData,interp,objc,objv);
}
-MODULE_SCOPE
-int Ttk_InvokeEnsemble( /* Run an ensemble command */
+MODULE_SCOPE int
+Ttk_InvokeEnsemble( /* Run an ensemble command */
const Ttk_Ensemble *ensemble, int cmdIndex,
void *clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
diff --git a/generic/ttk/ttkTrace.c b/generic/ttk/ttkTrace.c
index d086c02..c292c11 100644
--- a/generic/ttk/ttkTrace.c
+++ b/generic/ttk/ttkTrace.c
@@ -24,17 +24,15 @@ struct TtkTraceHandle_
*/
static char *
VarTraceProc(
- ClientData clientData, /* Widget record pointer */
+ void *clientData, /* Widget record pointer */
Tcl_Interp *interp, /* Interpreter containing variable. */
- const char *name1, /* (unused) */
- const char *name2, /* (unused) */
+ TCL_UNUSED(const char *), /* name1 */
+ TCL_UNUSED(const char *), /* name2 */
int flags) /* Information about what happened. */
{
Ttk_TraceHandle *tracePtr = (Ttk_TraceHandle *)clientData;
const char *name, *value;
Tcl_Obj *valuePtr;
- (void)name1;
- (void)name2;
if (Tcl_InterpDeleted(interp)) {
return NULL;
@@ -116,7 +114,7 @@ Ttk_TraceHandle *Ttk_TraceVariable(
void Ttk_UntraceVariable(Ttk_TraceHandle *h)
{
if (h) {
- ClientData cd = NULL;
+ void *cd = NULL;
/*
* Workaround for Tcl Bug 3062331. The trace design problem is
diff --git a/generic/ttk/ttkTreeview.c b/generic/ttk/ttkTreeview.c
index ce37e04..944115d 100644
--- a/generic/ttk/ttkTreeview.c
+++ b/generic/ttk/ttkTreeview.c
@@ -12,21 +12,21 @@
#include "tkWinInt.h"
#endif
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-
#define DEF_TREE_ROWS "10"
#define DEF_COLWIDTH "200"
#define DEF_MINWIDTH "20"
static const int DEFAULT_ROWHEIGHT = 20;
static const int DEFAULT_INDENT = 20;
-static const int HALO = 4; /* separator */
+static const int HALO = 4; /* heading separator */
#define TTK_STATE_OPEN TTK_STATE_USER1
#define TTK_STATE_LEAF TTK_STATE_USER2
#define STATE_CHANGED (0x100) /* item state option changed */
+#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+
/*------------------------------------------------------------------------
* +++ Tree items.
*
@@ -90,7 +90,7 @@ static Tk_OptionSpec ItemOptionSpecs[] = {
*/
static TreeItem *NewItem(void)
{
- TreeItem *item = ckalloc(sizeof(*item));
+ TreeItem *item = (TreeItem *)ckalloc(sizeof(*item));
item->entryPtr = 0;
item->parent = item->children = item->next = item->prev = NULL;
@@ -125,7 +125,7 @@ static void FreeItem(TreeItem *item)
ckfree(item);
}
-static void FreeItemCB(void *clientData) { FreeItem(clientData); }
+static void FreeItemCB(void *clientData) { FreeItem((TreeItem *)clientData); }
/* + DetachItem --
* Unlink an item from the tree.
@@ -384,7 +384,7 @@ typedef struct {
int headingHeight; /* Space for headings */
int rowHeight; /* Height of each item */
- int indent; /* #pixels horizontal offset for child items */
+ int indent; /* Horizontal offset for child items (screen units) */
/* Tree data:
*/
@@ -444,24 +444,24 @@ static const char *const SelectModeStrings[] = { "none", "browse", "extended", N
static Tk_OptionSpec TreeviewOptionSpecs[] = {
{TK_OPTION_STRING, "-columns", "columns", "Columns",
"", Tk_Offset(Treeview,tree.columnsObj), -1,
- 0,0,COLUMNS_CHANGED | GEOMETRY_CHANGED /*| READONLY_OPTION*/ },
+ 0, 0, COLUMNS_CHANGED | GEOMETRY_CHANGED /*| READONLY_OPTION*/ },
{TK_OPTION_STRING, "-displaycolumns","displayColumns","DisplayColumns",
"#all", Tk_Offset(Treeview,tree.displayColumnsObj), -1,
- 0,0,DCOLUMNS_CHANGED | GEOMETRY_CHANGED },
+ 0, 0, DCOLUMNS_CHANGED | GEOMETRY_CHANGED },
{TK_OPTION_STRING, "-show", "show", "Show",
DEFAULT_SHOW, Tk_Offset(Treeview,tree.showObj), -1,
- 0,0,SHOW_CHANGED | GEOMETRY_CHANGED },
+ 0, 0, SHOW_CHANGED | GEOMETRY_CHANGED },
{TK_OPTION_STRING_TABLE, "-selectmode", "selectMode", "SelectMode",
"extended", Tk_Offset(Treeview,tree.selectModeObj), -1,
- 0,SelectModeStrings,0 },
+ 0, SelectModeStrings, 0 },
{TK_OPTION_PIXELS, "-height", "height", "Height",
DEF_TREE_ROWS, Tk_Offset(Treeview,tree.heightObj), -1,
- 0,0,GEOMETRY_CHANGED},
+ 0, 0, GEOMETRY_CHANGED},
{TK_OPTION_STRING, "-padding", "padding", "Pad",
NULL, Tk_Offset(Treeview,tree.paddingObj), -1,
- TK_OPTION_NULL_OK,0,GEOMETRY_CHANGED },
+ TK_OPTION_NULL_OK, 0, GEOMETRY_CHANGED },
{TK_OPTION_STRING, "-xscrollcommand", "xScrollCommand", "ScrollCommand",
NULL, -1, Tk_Offset(Treeview, tree.xscroll.scrollCmd),
@@ -531,7 +531,7 @@ static TreeColumn *GetColumn(
entryPtr = Tcl_FindHashEntry(
&tv->tree.columnNames, Tcl_GetString(columnIDObj));
if (entryPtr) {
- return Tcl_GetHashValue(entryPtr);
+ return (TreeColumn *)Tcl_GetHashValue(entryPtr);
}
/* Check for number:
@@ -592,7 +592,7 @@ static TreeItem *FindItem(
Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM", NULL);
return 0;
}
- return Tcl_GetHashValue(entryPtr);
+ return (TreeItem *)Tcl_GetHashValue(entryPtr);
}
/* + GetItemListFromObj --
@@ -613,7 +613,7 @@ static TreeItem **GetItemListFromObj(
return NULL;
}
- items = ckalloc((nElements + 1)*sizeof(TreeItem*));
+ items = (TreeItem **)ckalloc((nElements + 1)*sizeof(TreeItem*));
for (i = 0; i < nElements; ++i) {
items[i] = FindItem(interp, tv, elements[i]);
if (!items[i]) {
@@ -630,7 +630,7 @@ static TreeItem **GetItemListFromObj(
*/
static const char *ItemName(Treeview *tv, TreeItem *item)
{
- return Tcl_GetHashKey(&tv->tree.items, item->entryPtr);
+ return (const char *)Tcl_GetHashKey(&tv->tree.items, item->entryPtr);
}
/* + ItemID --
@@ -688,7 +688,7 @@ static int TreeviewInitColumns(Tcl_Interp *interp, Treeview *tv)
* Initialize columns array and columnNames hash table:
*/
tv->tree.nColumns = ncols;
- tv->tree.columns = ckalloc(tv->tree.nColumns * sizeof(TreeColumn));
+ tv->tree.columns = (TreeColumn *)ckalloc(tv->tree.nColumns * sizeof(TreeColumn));
for (i = 0; i < ncols; ++i) {
int isNew;
@@ -700,10 +700,10 @@ static int TreeviewInitColumns(Tcl_Interp *interp, Treeview *tv)
InitColumn(tv->tree.columns + i);
Tk_InitOptions(
- interp, (ClientData)(tv->tree.columns + i),
+ interp, (void *)(tv->tree.columns + i),
tv->tree.columnOptionTable, tv->core.tkwin);
Tk_InitOptions(
- interp, (ClientData)(tv->tree.columns + i),
+ interp, (void *)(tv->tree.columns + i),
tv->tree.headingOptionTable, tv->core.tkwin);
Tcl_IncrRefCount(columnName);
tv->tree.columns[i].idObj = columnName;
@@ -733,12 +733,12 @@ static int TreeviewInitDisplayColumns(Tcl_Interp *interp, Treeview *tv)
if (!strcmp(Tcl_GetString(tv->tree.displayColumnsObj), "#all")) {
ndcols = tv->tree.nColumns;
- displayColumns = ckalloc((ndcols+1) * sizeof(TreeColumn*));
+ displayColumns = (TreeColumn **)ckalloc((ndcols+1) * sizeof(TreeColumn*));
for (index = 0; index < ndcols; ++index) {
displayColumns[index+1] = tv->tree.columns + index;
}
} else {
- displayColumns = ckalloc((ndcols+1) * sizeof(TreeColumn*));
+ displayColumns = (TreeColumn **)ckalloc((ndcols+1) * sizeof(TreeColumn*));
for (index = 0; index < ndcols; ++index) {
displayColumns[index+1] = GetColumn(interp, tv, dcolumns[index]);
if (!displayColumns[index+1]) {
@@ -795,9 +795,8 @@ static int PickupSlack(Treeview *tv, int extra)
{
int newSlack = tv->tree.slack + extra;
- if ( (newSlack < 0 && 0 <= tv->tree.slack)
- || (newSlack > 0 && 0 >= tv->tree.slack))
- {
+ if ((newSlack < 0 && 0 <= tv->tree.slack)
+ || (newSlack > 0 && 0 >= tv->tree.slack)) {
tv->tree.slack = 0;
return newSlack;
} else {
@@ -871,7 +870,8 @@ static int DistributeWidth(Treeview *tv, int n)
{
int w = TreeWidth(tv);
int m = 0;
- int i, d, r;
+ int i;
+ int d, r;
for (i = FirstColumn(tv); i < tv->tree.nDisplayColumns; ++i) {
if (tv->tree.displayColumns[i]->stretch) {
@@ -936,7 +936,7 @@ static const unsigned long TreeviewBindEventMask =
static void TreeviewBindEventProc(void *clientData, XEvent *event)
{
- Treeview *tv = clientData;
+ Treeview *tv = (Treeview *)clientData;
TreeItem *item = NULL;
Ttk_TagSet tagset;
@@ -988,7 +988,7 @@ static void TreeviewBindEventProc(void *clientData, XEvent *event)
static void TreeviewInitialize(Tcl_Interp *interp, void *recordPtr)
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
int unused;
tv->tree.itemOptionTable =
@@ -1022,10 +1022,10 @@ static void TreeviewInitialize(Tcl_Interp *interp, void *recordPtr)
InitColumn(&tv->tree.column0);
Tk_InitOptions(
- interp, (ClientData)(&tv->tree.column0),
+ interp, (void *)(&tv->tree.column0),
tv->tree.columnOptionTable, tv->core.tkwin);
Tk_InitOptions(
- interp, (ClientData)(&tv->tree.column0),
+ interp, (void *)(&tv->tree.column0),
tv->tree.headingOptionTable, tv->core.tkwin);
Tcl_InitHashTable(&tv->tree.items, TCL_STRING_KEYS);
@@ -1036,7 +1036,7 @@ static void TreeviewInitialize(Tcl_Interp *interp, void *recordPtr)
/* Create root item "":
*/
tv->tree.root = NewItem();
- Tk_InitOptions(interp, (ClientData)tv->tree.root,
+ Tk_InitOptions(interp, (void *)tv->tree.root,
tv->tree.itemOptionTable, tv->core.tkwin);
tv->tree.root->tagset = Ttk_GetTagSetFromObj(NULL, tv->tree.tagTable, NULL);
tv->tree.root->entryPtr = Tcl_CreateHashEntry(&tv->tree.items, "", &unused);
@@ -1055,7 +1055,7 @@ static void TreeviewInitialize(Tcl_Interp *interp, void *recordPtr)
static void TreeviewCleanup(void *recordPtr)
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Tk_DeleteEventHandler(tv->core.tkwin,
TreeviewBindEventMask, TreeviewBindEventProc, tv);
@@ -1070,7 +1070,7 @@ static void TreeviewCleanup(void *recordPtr)
TreeviewFreeColumns(tv);
if (tv->tree.displayColumns)
- ckfree((ClientData)tv->tree.displayColumns);
+ ckfree((void *)tv->tree.displayColumns);
foreachHashEntry(&tv->tree.items, FreeItemCB);
Tcl_DeleteHashTable(&tv->tree.items);
@@ -1088,7 +1088,7 @@ static void TreeviewCleanup(void *recordPtr)
static int
TreeviewConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
unsigned showFlags = tv->tree.showFlags;
if (mask & COLUMNS_CHANGED) {
@@ -1104,10 +1104,9 @@ TreeviewConfigure(Tcl_Interp *interp, void *recordPtr, int mask)
TtkScrollbarUpdateRequired(tv->tree.xscrollHandle);
TtkScrollbarUpdateRequired(tv->tree.yscrollHandle);
}
- if ( (mask & SHOW_CHANGED)
- && GetEnumSetFromObj(
- interp,tv->tree.showObj,showStrings,&showFlags) != TCL_OK)
- {
+ if ((mask & SHOW_CHANGED)
+ && GetEnumSetFromObj(
+ interp,tv->tree.showObj,showStrings,&showFlags) != TCL_OK) {
return TCL_ERROR;
}
@@ -1135,7 +1134,7 @@ static int ConfigureItem(
Ttk_ImageSpec *newImageSpec = NULL;
Ttk_TagSet newTagSet = NULL;
- if (Tk_SetOptions(interp, (ClientData)item, tv->tree.itemOptionTable,
+ if (Tk_SetOptions(interp, (void *)item, tv->tree.itemOptionTable,
objc, objv, tv->core.tkwin, &savedOptions, &mask)
!= TCL_OK)
{
@@ -1215,7 +1214,7 @@ static int ConfigureColumn(
Tk_SavedOptions savedOptions;
int mask;
- if (Tk_SetOptions(interp, (ClientData)column,
+ if (Tk_SetOptions(interp, (void *)column,
tv->tree.columnOptionTable, objc, objv, tv->core.tkwin,
&savedOptions,&mask) != TCL_OK)
{
@@ -1261,7 +1260,7 @@ static int ConfigureHeading(
Tk_SavedOptions savedOptions;
int mask;
- if (Tk_SetOptions(interp, (ClientData)column,
+ if (Tk_SetOptions(interp, (void *)column,
tv->tree.headingOptionTable, objc, objv, tv->core.tkwin,
&savedOptions,&mask) != TCL_OK)
{
@@ -1470,7 +1469,8 @@ static int BoundingBox(
bbox.width = TreeWidth(tv);
if (column) {
- int xpos = 0, i = FirstColumn(tv);
+ int xpos = 0;
+ int i = FirstColumn(tv);
while (i < tv->tree.nDisplayColumns) {
if (tv->tree.displayColumns[i] == column) {
break;
@@ -1513,9 +1513,9 @@ static const char *const regionStrings[] = {
static TreeRegion IdentifyRegion(Treeview *tv, int x, int y)
{
- int x1 = 0, colno;
+ int x1 = 0;
+ int colno = IdentifyDisplayColumn(tv, x, &x1);
- colno = IdentifyDisplayColumn(tv, x, &x1);
if (Ttk_BoxContains(tv->tree.headingArea, x, y)) {
if (colno < 0) {
return REGION_NOTHING;
@@ -1567,7 +1567,7 @@ static Ttk_Layout GetSublayout(
static Ttk_Layout TreeviewGetLayout(
Tcl_Interp *interp, Ttk_Theme themePtr, void *recordPtr)
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Ttk_Layout treeLayout = TtkWidgetGetLayout(interp, themePtr, recordPtr);
Tcl_Obj *objPtr;
int unused;
@@ -1596,11 +1596,11 @@ static Ttk_Layout TreeviewGetLayout(
tv->tree.rowHeight = DEFAULT_ROWHEIGHT;
tv->tree.indent = DEFAULT_INDENT;
if ((objPtr = Ttk_QueryOption(treeLayout, "-rowheight", 0))) {
- (void)Tcl_GetIntFromObj(NULL, objPtr, &tv->tree.rowHeight);
+ (void)Tk_GetPixelsFromObj(NULL, tv->core.tkwin, objPtr, &tv->tree.rowHeight);
tv->tree.rowHeight = MAX(tv->tree.rowHeight, 1);
}
if ((objPtr = Ttk_QueryOption(treeLayout, "-indent", 0))) {
- (void)Tcl_GetIntFromObj(NULL, objPtr, &tv->tree.indent);
+ (void)Tk_GetPixelsFromObj(NULL, tv->core.tkwin, objPtr, &tv->tree.indent);
}
return treeLayout;
@@ -1616,7 +1616,7 @@ static Ttk_Layout TreeviewGetLayout(
*/
static void TreeviewDoLayout(void *clientData)
{
- Treeview *tv = clientData;
+ Treeview *tv = (Treeview *)clientData;
int totalRows, visibleRows;
Ttk_PlaceLayout(tv->core.layout,tv->core.state,Ttk_WinBox(tv->core.tkwin));
@@ -1660,7 +1660,7 @@ static void TreeviewDoLayout(void *clientData)
*/
static int TreeviewSize(void *clientData, int *widthPtr, int *heightPtr)
{
- Treeview *tv = clientData;
+ Treeview *tv = (Treeview *)clientData;
int nRows, padHeight, padWidth;
Ttk_LayoutSize(tv->core.layout, tv->core.state, &padWidth, &padHeight);
@@ -1848,13 +1848,13 @@ static int DrawForest(
*/
static void TreeviewDisplay(void *clientData, Drawable d)
{
- Treeview *tv = clientData;
+ Treeview *tv = (Treeview *)clientData;
Ttk_DrawLayout(tv->core.layout, tv->core.state, d);
if (tv->tree.showFlags & SHOW_HEADINGS) {
DrawHeadings(tv, d);
}
- DrawForest(tv, tv->tree.root->children, d, 0,0);
+ DrawForest(tv, tv->tree.root->children, d, 0, 0);
}
/*------------------------------------------------------------------------
@@ -1962,7 +1962,7 @@ static TreeItem *DeleteItems(TreeItem *item, TreeItem *delq)
static int TreeviewChildrenCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item;
Tcl_Obj *result;
@@ -1991,7 +1991,7 @@ static int TreeviewChildrenCommand(
/* Sanity-check:
*/
- for (i=0; newChildren[i]; ++i) {
+ for (i = 0; newChildren[i]; ++i) {
if (!AncestryCheck(interp, tv, newChildren[i], item)) {
ckfree(newChildren);
return TCL_ERROR;
@@ -2009,7 +2009,7 @@ static int TreeviewChildrenCommand(
/* Detach new children from their current locations:
*/
- for (i=0; newChildren[i]; ++i) {
+ for (i = 0; newChildren[i]; ++i) {
DetachItem(newChildren[i]);
}
@@ -2018,7 +2018,7 @@ static int TreeviewChildrenCommand(
* though it probably should be...
*/
child = 0;
- for (i=0; newChildren[i]; ++i) {
+ for (i = 0; newChildren[i]; ++i) {
if (newChildren[i]->parent) {
/* This is a duplicate element which has already been
* inserted. Ignore it.
@@ -2042,7 +2042,7 @@ static int TreeviewChildrenCommand(
static int TreeviewParentCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item;
if (objc != 3) {
@@ -2070,7 +2070,7 @@ static int TreeviewParentCommand(
static int TreeviewNextCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item;
if (objc != 3) {
@@ -2095,7 +2095,7 @@ static int TreeviewNextCommand(
static int TreeviewPrevCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item;
if (objc != 3) {
@@ -2120,7 +2120,7 @@ static int TreeviewPrevCommand(
static int TreeviewIndexCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item;
int index = 0;
@@ -2148,7 +2148,7 @@ static int TreeviewIndexCommand(
static int TreeviewExistsCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Tcl_HashEntry *entryPtr;
if (objc != 3) {
@@ -2167,7 +2167,7 @@ static int TreeviewExistsCommand(
static int TreeviewBBoxCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item = 0;
TreeColumn *column = 0;
Ttk_Box bbox;
@@ -2181,7 +2181,7 @@ static int TreeviewBBoxCommand(
if (!item) {
return TCL_ERROR;
}
- if (objc >=4 && (column = FindColumn(interp,tv,objv[3])) == NULL) {
+ if (objc >= 4 && (column = FindColumn(interp,tv,objv[3])) == NULL) {
return TCL_ERROR;
}
@@ -2202,20 +2202,22 @@ static int TreeviewBBoxCommand(
* row itemid
*/
static int TreeviewHorribleIdentify(
- Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], Treeview *tv)
+ Tcl_Interp *interp,
+ TCL_UNUSED(int), /* objc */
+ Tcl_Obj *const objv[],
+ Treeview *tv)
{
const char *what = "nothing", *detail = NULL;
TreeItem *item = 0;
Tcl_Obj *result;
int dColumnNumber;
- char dcolbuf[16];
+ char dcolbuf[32];
int x, y, x1;
/* ASSERT: objc == 4 */
- if ( Tcl_GetIntFromObj(interp, objv[2], &x) != TCL_OK
- || Tcl_GetIntFromObj(interp, objv[3], &y) != TCL_OK
- ) {
+ if (Tk_GetPixelsFromObj(interp, tv->core.tkwin, objv[2], &x) != TCL_OK
+ || Tk_GetPixelsFromObj(interp, tv->core.tkwin, objv[3], &y) != TCL_OK) {
return TCL_ERROR;
}
@@ -2283,7 +2285,7 @@ static int TreeviewIdentifyCommand(
{ "region", "item", "column", "row", "element", NULL };
enum { I_REGION, I_ITEM, I_COLUMN, I_ROW, I_ELEMENT };
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
int submethod;
int x, y;
@@ -2291,7 +2293,8 @@ static int TreeviewIdentifyCommand(
Ttk_Box bbox;
TreeItem *item;
TreeColumn *column = 0;
- int colno, x1;
+ int colno;
+ int x1;
if (objc == 4) { /* Old form */
return TreeviewHorribleIdentify(interp, objc, objv, tv);
@@ -2302,8 +2305,8 @@ static int TreeviewIdentifyCommand(
if (Tcl_GetIndexFromObjStruct(interp, objv[2], submethodStrings,
sizeof(char *), "command", TCL_EXACT, &submethod) != TCL_OK
- || Tcl_GetIntFromObj(interp, objv[3], &x) != TCL_OK
- || Tcl_GetIntFromObj(interp, objv[4], &y) != TCL_OK
+ || Tk_GetPixelsFromObj(interp, tv->core.tkwin, objv[3], &x) != TCL_OK
+ || Tk_GetPixelsFromObj(interp, tv->core.tkwin, objv[4], &y) != TCL_OK
) {
return TCL_ERROR;
}
@@ -2385,7 +2388,7 @@ static int TreeviewIdentifyCommand(
static int TreeviewItemCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item;
if (objc < 3) {
@@ -2413,7 +2416,7 @@ static int TreeviewItemCommand(
static int TreeviewColumnCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeColumn *column;
if (objc < 3) {
@@ -2441,7 +2444,7 @@ static int TreeviewColumnCommand(
static int TreeviewHeadingCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Tk_OptionTable optionTable = tv->tree.headingOptionTable;
Tk_Window tkwin = tv->core.tkwin;
TreeColumn *column;
@@ -2471,7 +2474,7 @@ static int TreeviewHeadingCommand(
static int TreeviewSetCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item;
TreeColumn *column;
int columnNumber;
@@ -2495,7 +2498,7 @@ static int TreeviewSetCommand(
*/
Tcl_Obj *result = Tcl_NewListObj(0,0);
Tcl_Obj *value;
- for (columnNumber=0; columnNumber<tv->tree.nColumns; ++columnNumber) {
+ for (columnNumber = 0; columnNumber < tv->tree.nColumns; ++columnNumber) {
Tcl_ListObjIndex(interp, item->valuesObj, columnNumber, &value);
if (value) {
Tcl_ListObjAppendElement(NULL, result,
@@ -2565,7 +2568,7 @@ static int TreeviewSetCommand(
static int TreeviewInsertCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *parent, *sibling, *newItem;
Tcl_HashEntry *entryPtr;
int isNew;
@@ -2621,7 +2624,7 @@ static int TreeviewInsertCommand(
*/
newItem = NewItem();
Tk_InitOptions(
- interp, (ClientData)newItem, tv->tree.itemOptionTable, tv->core.tkwin);
+ interp, (void *)newItem, tv->tree.itemOptionTable, tv->core.tkwin);
newItem->tagset = Ttk_GetTagSetFromObj(NULL, tv->tree.tagTable, NULL);
if (ConfigureItem(interp, tv, newItem, objc, objv) != TCL_OK) {
Tcl_DeleteHashEntry(entryPtr);
@@ -2640,13 +2643,13 @@ static int TreeviewInsertCommand(
return TCL_OK;
}
-/* + $tv detach $item --
- * Unlink $item from the tree.
+/* + $tv detach $items --
+ * Unlink each item in $items from the tree.
*/
static int TreeviewDetachCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem **items;
int i;
@@ -2693,9 +2696,10 @@ static int TreeviewDetachCommand(
static int TreeviewDeleteCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem **items, *delq;
- int i, selChange = 0;
+ int i;
+ int selChange = 0;
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "items");
@@ -2708,7 +2712,7 @@ static int TreeviewDeleteCommand(
/* Sanity-check:
*/
- for (i=0; items[i]; ++i) {
+ for (i = 0; items[i]; ++i) {
if (items[i] == tv->tree.root) {
ckfree(items);
Tcl_SetObjResult(interp, Tcl_NewStringObj(
@@ -2721,7 +2725,7 @@ static int TreeviewDeleteCommand(
/* Remove items from hash table.
*/
delq = 0;
- for (i=0; items[i]; ++i) {
+ for (i = 0; items[i]; ++i) {
if (items[i]->state & TTK_STATE_SELECTED) {
selChange = 1;
}
@@ -2754,7 +2758,7 @@ static int TreeviewDeleteCommand(
static int TreeviewMoveCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item, *parent;
TreeItem *sibling;
@@ -2762,9 +2766,8 @@ static int TreeviewMoveCommand(
Tcl_WrongNumArgs(interp, 2, objv, "item parent index");
return TCL_ERROR;
}
- if ( (item = FindItem(interp, tv, objv[2])) == 0
- || (parent = FindItem(interp, tv, objv[3])) == 0)
- {
+ if ((item = FindItem(interp, tv, objv[2])) == 0
+ || (parent = FindItem(interp, tv, objv[3])) == 0) {
return TCL_ERROR;
}
@@ -2817,14 +2820,14 @@ static int TreeviewMoveCommand(
static int TreeviewXViewCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
return TtkScrollviewCommand(interp, objc, objv, tv->tree.xscrollHandle);
}
static int TreeviewYViewCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
return TtkScrollviewCommand(interp, objc, objv, tv->tree.yscrollHandle);
}
@@ -2834,7 +2837,7 @@ static int TreeviewYViewCommand(
static int TreeviewSeeCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
TreeItem *item, *parent;
int rowNumber;
@@ -2880,7 +2883,7 @@ static int TreeviewSeeCommand(
static int TreeviewDragCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
int left = tv->tree.treeArea.x - tv->tree.xscroll.first;
int i = FirstColumn(tv);
TreeColumn *column;
@@ -2891,9 +2894,8 @@ static int TreeviewDragCommand(
return TCL_ERROR;
}
- if ( (column = FindColumn(interp, tv, objv[2])) == 0
- || Tcl_GetIntFromObj(interp, objv[3], &newx) != TCL_OK)
- {
+ if ((column = FindColumn(interp, tv, objv[2])) == 0
+ || Tcl_GetIntFromObj(interp, objv[3], &newx) != TCL_OK) {
return TCL_ERROR;
}
@@ -2917,7 +2919,7 @@ static int TreeviewDragCommand(
static int TreeviewDropCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, "drop");
@@ -2937,7 +2939,7 @@ static int TreeviewDropCommand(
static int TreeviewFocusCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
if (objc == 2) {
if (tv->tree.focus) {
@@ -2969,13 +2971,13 @@ static int TreeviewSelectionCommand(
"set", "add", "remove", "toggle", NULL
};
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
int selop, i, selChange = 0;
TreeItem *item, **items;
if (objc == 2) {
Tcl_Obj *result = Tcl_NewListObj(0,0);
- for (item = tv->tree.root->children; item; item=NextPreorder(item)) {
+ for (item = tv->tree.root->children; item; item = NextPreorder(item)) {
if (item->state & TTK_STATE_SELECTED)
Tcl_ListObjAppendElement(NULL, result, ItemID(tv, item));
}
@@ -3002,7 +3004,7 @@ static int TreeviewSelectionCommand(
{
case SELECTION_SET:
/* Clear */
- for (item=tv->tree.root; item; item=NextPreorder(item)) {
+ for (item=tv->tree.root; item; item = NextPreorder(item)) {
if (item->state & TTK_STATE_SELECTED) {
item->state &= ~TTK_STATE_SELECTED;
selChange = 1;
@@ -3055,7 +3057,7 @@ static int TreeviewSelectionCommand(
static int TreeviewTagBindCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Ttk_TagTable tagTable = tv->tree.tagTable;
Tk_BindingTable bindingTable = tv->tree.bindingTable;
Ttk_Tag tag;
@@ -3108,12 +3110,12 @@ static int TreeviewTagBindCommand(
static int TreeviewTagConfigureCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Ttk_TagTable tagTable = tv->tree.tagTable;
Ttk_Tag tag;
if (objc < 4) {
- Tcl_WrongNumArgs(interp, 3, objv, "tagName ?-option ?value ...??");
+ Tcl_WrongNumArgs(interp, 3, objv, "tagName ?-option ?value ...??");
return TCL_ERROR;
}
@@ -3139,7 +3141,7 @@ static int TreeviewTagConfigureCommand(
static int TreeviewTagHasCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
if (objc == 4) { /* Return list of all items with tag */
Ttk_Tag tag = Ttk_GetTagFromObj(tv->tree.tagTable, objv[3]);
@@ -3170,12 +3172,12 @@ static int TreeviewTagHasCommand(
}
}
-/* + $tv tag names $tag
+/* + $tv tag names
*/
static int TreeviewTagNamesCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
if (objc != 3) {
Tcl_WrongNumArgs(interp, 3, objv, "");
@@ -3199,7 +3201,7 @@ static void AddTag(TreeItem *item, Ttk_Tag tag)
static int TreeviewTagAddCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Ttk_Tag tag;
TreeItem **items;
int i;
@@ -3216,7 +3218,7 @@ static int TreeviewTagAddCommand(
return TCL_ERROR;
}
- for (i=0; items[i]; ++i) {
+ for (i = 0; items[i]; ++i) {
AddTag(items[i], tag);
}
@@ -3239,7 +3241,7 @@ static void RemoveTag(TreeItem *item, Ttk_Tag tag)
static int TreeviewTagRemoveCommand(
void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
- Treeview *tv = recordPtr;
+ Treeview *tv = (Treeview *)recordPtr;
Ttk_Tag tag;
if (objc < 4) {
@@ -3256,14 +3258,14 @@ static int TreeviewTagRemoveCommand(
if (!items) {
return TCL_ERROR;
}
- for (i=0; items[i]; ++i) {
+ for (i = 0; items[i]; ++i) {
RemoveTag(items[i], tag);
}
} else if (objc == 4) {
TreeItem *item = tv->tree.root;
while (item) {
RemoveTag(item, tag);
- item=NextPreorder(item);
+ item = NextPreorder(item);
}
}
@@ -3386,14 +3388,18 @@ static Ttk_ElementOptionSpec TreeitemIndicatorOptions[] = {
Tk_Offset(TreeitemIndicator,sizeObj), "12" },
{ "-indicatormargins", TK_OPTION_STRING,
Tk_Offset(TreeitemIndicator,marginsObj), "2 2 4 2" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void TreeitemIndicatorSize(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr)
-{
- TreeitemIndicator *indicator = elementRecord;
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ int *widthPtr,
+ int *heightPtr,
+ TCL_UNUSED(Ttk_Padding *))
+{
+ TreeitemIndicator *indicator = (TreeitemIndicator *)elementRecord;
Ttk_Padding margins;
int size = 0;
@@ -3405,10 +3411,14 @@ static void TreeitemIndicatorSize(
}
static void TreeitemIndicatorDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
-{
- TreeitemIndicator *indicator = elementRecord;
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ Ttk_State state)
+{
+ TreeitemIndicator *indicator = (TreeitemIndicator *)elementRecord;
ArrowDirection direction =
(state & TTK_STATE_OPEN) ? ARROW_DOWN : ARROW_RIGHT;
Ttk_Padding margins;
@@ -3453,16 +3463,21 @@ static Ttk_ElementOptionSpec RowElementOptions[] = {
Tk_Offset(RowElement,backgroundObj), DEFAULT_BACKGROUND },
{ "-rownumber", TK_OPTION_INT,
Tk_Offset(RowElement,rowNumberObj), "0" },
- { NULL, 0, 0, NULL }
+ { NULL, TK_OPTION_BOOLEAN, 0, NULL }
};
static void RowElementDraw(
- void *clientData, void *elementRecord, Tk_Window tkwin,
- Drawable d, Ttk_Box b, Ttk_State state)
-{
- RowElement *row = elementRecord;
+ TCL_UNUSED(void *), /* clientData */
+ void *elementRecord,
+ Tk_Window tkwin,
+ Drawable d,
+ Ttk_Box b,
+ TCL_UNUSED(Ttk_State))
+{
+ RowElement *row = (RowElement *)elementRecord;
XColor *color = Tk_GetColorFromObj(tkwin, row->backgroundObj);
GC gc = Tk_GCForColor(color, d);
+
XFillRectangle(Tk_Display(tkwin), d, gc,
b.x, b.y, b.width, b.height);
}
@@ -3479,8 +3494,8 @@ static Ttk_ElementSpec RowElementSpec = {
* +++ Initialisation.
*/
-MODULE_SCOPE
-void TtkTreeview_Init(Tcl_Interp *interp)
+MODULE_SCOPE void
+TtkTreeview_Init(Tcl_Interp *interp)
{
Ttk_Theme theme = Ttk_GetDefaultTheme(interp);
diff --git a/generic/ttk/ttkWidget.c b/generic/ttk/ttkWidget.c
index 37cc5ed..2c4f28e 100644
--- a/generic/ttk/ttkWidget.c
+++ b/generic/ttk/ttkWidget.c
@@ -758,9 +758,8 @@ int TtkWidgetIdentifyCommand(
}
}
- if ( Tcl_GetIntFromObj(interp, objv[objc-2], &x) != TCL_OK
- || Tcl_GetIntFromObj(interp, objv[objc-1], &y) != TCL_OK
- ) {
+ if (Tcl_GetIntFromObj(interp, objv[objc-2], &x) != TCL_OK
+ || Tcl_GetIntFromObj(interp, objv[objc-1], &y) != TCL_OK) {
return TCL_ERROR;
}