summaryrefslogtreecommitdiffstats
path: root/generic/tkObj.c
diff options
context:
space:
mode:
authorferrieux <ferrieux@users.sourceforge.net>2008-11-27 23:47:09 (GMT)
committerferrieux <ferrieux@users.sourceforge.net>2008-11-27 23:47:09 (GMT)
commit01a618069d775fcdce058d2fc203f55073e95435 (patch)
treec9fc8e9cb71b8cf58580375c8cbc29a24be76984 /generic/tkObj.c
parent713876e1f5bca010fe3fa12da61c8fdf67cd5665 (diff)
downloadtk-01a618069d775fcdce058d2fc203f55073e95435.zip
tk-01a618069d775fcdce058d2fc203f55073e95435.tar.gz
tk-01a618069d775fcdce058d2fc203f55073e95435.tar.bz2
Millimeter patch. Fixes [1813597,2218964] by eliminating the functional redundancy and unnecessary loss of precision of the {pixel,mm}ObjType tandem.
Diffstat (limited to 'generic/tkObj.c')
-rw-r--r--generic/tkObj.c95
1 files changed, 91 insertions, 4 deletions
diff --git a/generic/tkObj.c b/generic/tkObj.c
index 41cc589..c8bc746 100644
--- a/generic/tkObj.c
+++ b/generic/tkObj.c
@@ -8,7 +8,7 @@
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkObj.c,v 1.22 2008/10/15 06:41:06 nijtmans Exp $
+ * RCS: @(#) $Id: tkObj.c,v 1.23 2008/11/27 23:47:09 ferrieux Exp $
*/
#include "tkInt.h"
@@ -125,7 +125,7 @@ static const Tcl_ObjType windowObjType = {
/*
*----------------------------------------------------------------------
*
- * Tk_GetPixelsFromObj --
+ * GetPixelsFromObjEx --
*
* Attempt to return a pixel value from the Tcl object "objPtr". If the
* object is not already a pixel value, an attempt will be made to
@@ -143,12 +143,14 @@ static const Tcl_ObjType windowObjType = {
*----------------------------------------------------------------------
*/
+static
int
-Tk_GetPixelsFromObj(
+GetPixelsFromObjEx(
Tcl_Interp *interp, /* Used for error reporting if not NULL. */
Tk_Window tkwin,
Tcl_Obj *objPtr, /* The object from which to get pixels. */
- int *intPtr) /* Place to store resulting pixels. */
+ int *intPtr,
+ double *dblPtr) /* Places to store resulting pixels. */
{
int result;
double d;
@@ -166,6 +168,9 @@ Tk_GetPixelsFromObj(
if (SIMPLE_PIXELREP(objPtr)) {
*intPtr = GET_SIMPLEPIXEL(objPtr);
+ if (dblPtr) {
+ *dblPtr=(double)(*intPtr);
+ }
} else {
pixelPtr = GET_COMPLEXPIXEL(objPtr);
if (pixelPtr->tkwin != tkwin) {
@@ -180,6 +185,9 @@ Tk_GetPixelsFromObj(
pixelPtr->returnValue = (int) (d + 0.5);
}
pixelPtr->tkwin = tkwin;
+ if (dblPtr) {
+ *dblPtr=(double)d;
+ }
}
*intPtr = pixelPtr->returnValue;
}
@@ -189,6 +197,85 @@ Tk_GetPixelsFromObj(
/*
*----------------------------------------------------------------------
*
+ * Tk_GetPixelsFromObj --
+ *
+ * Attempt to return a pixel value from the Tcl object "objPtr". If the
+ * object is not already a pixel value, an attempt will be made to
+ * convert it to one.
+ *
+ * Results:
+ * The return value is a standard Tcl object result. If an error occurs
+ * during conversion, an error message is left in the interpreter's
+ * result unless "interp" is NULL.
+ *
+ * Side effects:
+ * If the object is not already a pixel, the conversion will free any old
+ * internal representation.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tk_GetPixelsFromObj(
+ Tcl_Interp *interp, /* Used for error reporting if not NULL. */
+ Tk_Window tkwin,
+ Tcl_Obj *objPtr, /* The object from which to get pixels. */
+ int *intPtr) /* Place to store resulting pixels. */
+{
+ return GetPixelsFromObjEx(interp,tkwin,objPtr,intPtr,NULL);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
+ * Tk_GetDoublePixelsFromObj --
+ *
+ * Attempt to return a double pixel value from the Tcl object
+ * "objPtr". If the object is not already a pixel value, an attempt will
+ * be made to convert it to one, the internal unit being pixels.
+ *
+ * Results:
+ * The return value is a standard Tcl object result. If an error occurs
+ * during conversion, an error message is left in the interpreter's
+ * result unless "interp" is NULL.
+ *
+ * Side effects:
+ * If the object is not already a pixel, the conversion will free any old
+ * internal representation.
+ *
+ *----------------------------------------------------------------------
+ */
+
+int
+Tk_GetDoublePixelsFromObj(
+ Tcl_Interp *interp, /* Used for error reporting if not NULL. */
+ Tk_Window tkwin,
+ Tcl_Obj *objPtr, /* The object from which to get pixels. */
+ double *doublePtr) /* Place to store resulting pixels. */
+{
+ double d;
+ int result,val;
+
+ result=GetPixelsFromObjEx(interp, tkwin, objPtr, &val, &d);
+ if (result != TCL_OK) {
+ return result;
+ }
+ if (!SIMPLE_PIXELREP(objPtr)) {
+ PixelRep *pixelPtr;
+ pixelPtr = GET_COMPLEXPIXEL(objPtr);
+ if (pixelPtr->units >= 0) {
+ /* internally "shimmer" to pixel units */
+ pixelPtr->units=-1;
+ pixelPtr->value=d;
+ }
+ }
+ *doublePtr = d;
+ return TCL_OK;
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
* FreePixelInternalRep --
*
* Deallocate the storage associated with a pixel object's internal