summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2015-10-08 12:44:36 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2015-10-08 12:44:36 (GMT)
commit140d3f094e4f173b1d6c757c3bcee4dbc6ed130a (patch)
tree7a4b149f38a502ea8a6c86a8935623541f5f0c04
parentc7881f1311665010dcf5da4bab4d7a5f3b0ca631 (diff)
parent0fd7498333267e04ada475c48f369451aa941a5e (diff)
downloadtk-140d3f094e4f173b1d6c757c3bcee4dbc6ed130a.zip
tk-140d3f094e4f173b1d6c757c3bcee4dbc6ed130a.tar.gz
tk-140d3f094e4f173b1d6c757c3bcee4dbc6ed130a.tar.bz2
TIP #437: Tk panedwindow options for proxy window
-rw-r--r--doc/panedwindow.n10
-rw-r--r--generic/tkPanedWindow.c19
-rw-r--r--macosx/tkMacOSXDefault.h1
-rw-r--r--tests/panedwindow.test95
-rw-r--r--unix/tkUnixDefault.h1
-rw-r--r--win/tkWinDefault.h1
6 files changed, 91 insertions, 36 deletions
diff --git a/doc/panedwindow.n b/doc/panedwindow.n
index 48e4c41..e2c954a 100644
--- a/doc/panedwindow.n
+++ b/doc/panedwindow.n
@@ -29,6 +29,16 @@ drawn as squares. May be any value accepted by \fBTk_GetPixels\fR.
Specifies a desired height for the overall panedwindow widget. May be any
value accepted by \fBTk_GetPixels\fR. If an empty string, the widget will be
made high enough to allow all contained widgets to have their natural height.
+.OP \-proxybackground proxyBackground ProxyBackground
+Background color to use when drawing the proxy. If an empty string, the
+value of the \fB-background\fR option will be used.
+.OP \-proxyborderwidth proxyBorderWidth ProxyBorderWidth
+Specifies the borderwidth of the proxy. May be any value accepted by
+\fBTk_GetPixels\fR.
+.OP \-proxyrelief proxyRelief ProxyRelief
+Relief to use when drawing the proxy. May be any of the standard Tk
+relief values. If an empty string, the value of the \fB-sashrelief\fR
+option will be used.
.OP \-opaqueresize opaqueResize OpaqueResize
Specifies whether panes should be resized as a sash is moved (true),
or if resizing should be deferred until the sash is placed (false).
diff --git a/generic/tkPanedWindow.c b/generic/tkPanedWindow.c
index f84a34f..2451647 100644
--- a/generic/tkPanedWindow.c
+++ b/generic/tkPanedWindow.c
@@ -147,6 +147,10 @@ typedef struct PanedWindow {
GC gc; /* Graphics context for copying from
* off-screen pixmap onto screen. */
int proxyx, proxyy; /* Proxy x,y coordinates. */
+ Tk_3DBorder proxyBackground;/* Background color used to draw proxy. If NULL, use background. */
+ Tcl_Obj *proxyBorderWidthPtr; /* Tcl_Obj rep for proxyBorderWidth */
+ int proxyBorderWidth; /* Borderwidth used to draw proxy. */
+ int proxyRelief; /* Relief used to draw proxy, if TK_RELIEF_NULL then use relief. */
Slave **slaves; /* Pointer to array of Slaves. */
int numSlaves; /* Number of slaves. */
int sizeofSlaves; /* Number of elements in the slaves array. */
@@ -298,6 +302,15 @@ static const Tk_OptionSpec optionSpecs[] = {
{TK_OPTION_STRING_TABLE, "-orient", "orient", "Orient",
DEF_PANEDWINDOW_ORIENT, -1, Tk_Offset(PanedWindow, orient),
0, orientStrings, GEOMETRY},
+ {TK_OPTION_BORDER, "-proxybackground", "proxyBackground", "ProxyBackground",
+ 0, -1, Tk_Offset(PanedWindow, proxyBackground), TK_OPTION_NULL_OK,
+ (ClientData) DEF_PANEDWINDOW_BG_MONO},
+ {TK_OPTION_PIXELS, "-proxyborderwidth", "proxyBorderWidth", "ProxyBorderWidth",
+ DEF_PANEDWINDOW_PROXYBORDER, Tk_Offset(PanedWindow, proxyBorderWidthPtr),
+ Tk_Offset(PanedWindow, proxyBorderWidth), 0, 0, GEOMETRY},
+ {TK_OPTION_RELIEF, "-proxyrelief", "proxyRelief", "Relief",
+ 0, -1, Tk_Offset(PanedWindow, proxyRelief),
+ TK_OPTION_NULL_OK, 0, 0},
{TK_OPTION_RELIEF, "-relief", "relief", "Relief",
DEF_PANEDWINDOW_RELIEF, -1, Tk_Offset(PanedWindow, relief), 0, 0, 0},
{TK_OPTION_CURSOR, "-sashcursor", "sashCursor", "Cursor",
@@ -2776,8 +2789,10 @@ DisplayProxyWindow(
* Redraw the widget's background and border.
*/
- Tk_Fill3DRectangle(tkwin, pixmap, pwPtr->background, 0, 0,
- Tk_Width(tkwin), Tk_Height(tkwin), 2, pwPtr->sashRelief);
+ Tk_Fill3DRectangle(tkwin, pixmap,
+ pwPtr->proxyBackground ? pwPtr->proxyBackground : pwPtr->background,
+ 0, 0, Tk_Width(tkwin), Tk_Height(tkwin), pwPtr->proxyBorderWidth,
+ (pwPtr->proxyRelief != TK_RELIEF_NULL) ? pwPtr->proxyRelief : pwPtr->sashRelief);
#ifndef TK_NO_DOUBLE_BUFFERING
/*
diff --git a/macosx/tkMacOSXDefault.h b/macosx/tkMacOSXDefault.h
index e95560f..528ea10 100644
--- a/macosx/tkMacOSXDefault.h
+++ b/macosx/tkMacOSXDefault.h
@@ -409,6 +409,7 @@
#define DEF_PANEDWINDOW_HEIGHT ""
#define DEF_PANEDWINDOW_OPAQUERESIZE "1"
#define DEF_PANEDWINDOW_ORIENT "horizontal"
+#define DEF_PANEDWINDOW_PROXYBORDER "2"
#define DEF_PANEDWINDOW_RELIEF "flat"
#define DEF_PANEDWINDOW_SASHCURSOR ""
#define DEF_PANEDWINDOW_SASHPAD "0"
diff --git a/tests/panedwindow.test b/tests/panedwindow.test
index 4bc59a8..666ed9c 100644
--- a/tests/panedwindow.test
+++ b/tests/panedwindow.test
@@ -98,168 +98,195 @@ test panedwindow-1.17 {configuration options: -orient (good)} -body {
test panedwindow-1.18 {configuration options: -orient (bad)} -body {
.p configure -orient badValue
} -returnCodes error -result {bad orient "badValue": must be horizontal or vertical}
-test panedwindow-1.19 {configuration options: -relief (good)} -body {
+test panedwindow-1.19 {configuration options: -proxybackground (good)} -body {
+ .p configure -proxybackground "#f0a0a0"
+ list [lindex [.p configure -proxybackground] 4] [.p cget -proxybackground]
+} -cleanup {
+ .p configure -proxybackground [lindex [.p configure -proxybackground] 3]
+} -result {{#f0a0a0} #f0a0a0}
+test panedwindow-1.20 {configuration options: -proxybackground (bad)} -body {
+ .p configure -proxybackground badValue
+} -returnCodes error -result {unknown color name "badValue"}
+test panedwindow-1.21 {configuration options: -proxyborderwidth (good)} -body {
+ .p configure -proxyborderwidth 1.3
+ list [lindex [.p configure -proxyborderwidth] 4] [.p cget -proxyborderwidth]
+} -cleanup {
+ .p configure -proxyborderwidth [lindex [.p configure -proxyborderwidth] 3]
+} -result {1.3 1.3}
+test panedwindow-1.22 {configuration options: -proxyborderwidth (bad)} -body {
+ .p configure -proxyborderwidth badValue
+} -returnCodes error -result {bad screen distance "badValue"}
+test panedwindow-1.23 {configuration options: -proxyrelief (good)} -body {
+ .p configure -proxyrelief groove
+ list [lindex [.p configure -proxyrelief] 4] [.p cget -proxyrelief]
+} -cleanup {
+ .p configure -proxyrelief [lindex [.p configure -proxyrelief] 3]
+} -result {groove groove}
+test panedwindow-1.24 {configuration options: -proxyrelief (bad)} -body {
+ .p configure -proxyrelief 1.5
+} -returnCodes error -result {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}
+test panedwindow-1.25 {configuration options: -relief (good)} -body {
.p configure -relief groove
list [lindex [.p configure -relief] 4] [.p cget -relief]
} -cleanup {
.p configure -relief [lindex [.p configure -relief] 3]
} -result {groove groove}
-test panedwindow-1.20 {configuration options: -relief (bad)} -body {
+test panedwindow-1.26 {configuration options: -relief (bad)} -body {
.p configure -relief 1.5
} -returnCodes error -result {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}
-test panedwindow-1.21 {configuration options: -sashcursor (good)} -body {
+test panedwindow-1.27 {configuration options: -sashcursor (good)} -body {
.p configure -sashcursor arrow
list [lindex [.p configure -sashcursor] 4] [.p cget -sashcursor]
} -cleanup {
.p configure -sashcursor [lindex [.p configure -sashcursor] 3]
} -result {arrow arrow}
-test panedwindow-1.22 {configuration options: -sashcursor (bad)} -body {
+test panedwindow-1.28 {configuration options: -sashcursor (bad)} -body {
.p configure -sashcursor badValue
} -returnCodes error -result {bad cursor spec "badValue"}
-test panedwindow-1.23 {configuration options: -sashpad (good)} -body {
+test panedwindow-1.29 {configuration options: -sashpad (good)} -body {
.p configure -sashpad 1.3
list [lindex [.p configure -sashpad] 4] [.p cget -sashpad]
} -cleanup {
.p configure -sashpad [lindex [.p configure -sashpad] 3]
} -result {1 1}
-test panedwindow-1.24 {configuration options: -sashpad (bad)} -body {
+test panedwindow-1.30 {configuration options: -sashpad (bad)} -body {
.p configure -sashpad badValue
} -returnCodes error -result {bad screen distance "badValue"}
-test panedwindow-1.25 {configuration options: -sashrelief (good)} -body {
+test panedwindow-1.31 {configuration options: -sashrelief (good)} -body {
.p configure -sashrelief groove
list [lindex [.p configure -sashrelief] 4] [.p cget -sashrelief]
} -cleanup {
.p configure -sashrelief [lindex [.p configure -sashrelief] 3]
} -result {groove groove}
-test panedwindow-1.26 {configuration options: -sashrelief (bad)} -body {
+test panedwindow-1.32 {configuration options: -sashrelief (bad)} -body {
.p configure -sashrelief 1.5
} -returnCodes error -result {bad relief "1.5": must be flat, groove, raised, ridge, solid, or sunken}
-test panedwindow-1.27 {configuration options: -sashwidth (good)} -body {
+test panedwindow-1.33 {configuration options: -sashwidth (good)} -body {
.p configure -sashwidth 10
list [lindex [.p configure -sashwidth] 4] [.p cget -sashwidth]
} -cleanup {
.p configure -sashwidth [lindex [.p configure -sashwidth] 3]
} -result {10 10}
-test panedwindow-1.28 {configuration options: -sashwidth (bad)} -body {
+test panedwindow-1.34 {configuration options: -sashwidth (bad)} -body {
.p configure -sashwidth badValue
} -returnCodes error -result {bad screen distance "badValue"}
-test panedwindow-1.29 {configuration options: -showhandle (good)} -body {
+test panedwindow-1.35 {configuration options: -showhandle (good)} -body {
.p configure -showhandle true
list [lindex [.p configure -showhandle] 4] [.p cget -showhandle]
} -cleanup {
.p configure -showhandle [lindex [.p configure -showhandle] 3]
} -result {1 1}
-test panedwindow-1.30 {configuration options: -showhandle (bad)} -body {
+test panedwindow-1.36 {configuration options: -showhandle (bad)} -body {
.p configure -showhandle foo
} -returnCodes error -result {expected boolean value but got "foo"}
-test panedwindow-1.31 {configuration options: -width (good)} -body {
+test panedwindow-1.37 {configuration options: -width (good)} -body {
.p configure -width 402
list [lindex [.p configure -width] 4] [.p cget -width]
} -cleanup {
.p configure -width [lindex [.p configure -width] 3]
} -result {402 402}
-test panedwindow-1.32 {configuration options: -width (bad)} -body {
+test panedwindow-1.38 {configuration options: -width (bad)} -body {
.p configure -width badValue
} -returnCodes error -result {bad screen distance "badValue"}
-test panedwindow-1.33 {configuration options: -after (good)} -body {
+test panedwindow-1.39 {configuration options: -after (good)} -body {
.p paneconfigure .b -after .c
list [lindex [.p paneconfigure .b -after] 4] \
[.p panecget .b -after]
} -cleanup {
.p paneconfig .b -after [lindex [.p paneconfig .b -after] 3]
} -result {.c .c}
-test panedwindow-1.34 {configuration options: -after (bad)} -body {
+test panedwindow-1.40 {configuration options: -after (bad)} -body {
.p paneconfigure .b -after badValue
} -returnCodes error -result {bad window path name "badValue"}
-test panedwindow-1.35 {configuration options: -before (good)} -body {
+test panedwindow-1.41 {configuration options: -before (good)} -body {
.p paneconfigure .b -before .c
list [lindex [.p paneconfigure .b -before] 4] \
[.p panecget .b -before]
} -cleanup {
.p paneconfig .b -before [lindex [.p paneconfig .b -before] 3]
} -result {.c .c}
-test panedwindow-1.36 {configuration options: -before (bad)} -body {
+test panedwindow-1.42 {configuration options: -before (bad)} -body {
.p paneconfigure .b -before badValue
} -returnCodes error -result {bad window path name "badValue"}
-test panedwindow-1.37 {configuration options: -height (good)} -body {
+test panedwindow-1.43 {configuration options: -height (good)} -body {
.p paneconfigure .b -height 10
list [lindex [.p paneconfigure .b -height] 4] \
[.p panecget .b -height]
} -cleanup {
.p paneconfig .b -height [lindex [.p paneconfig .b -height] 3]
} -result {10 10}
-test panedwindow-1.38 {configuration options: -height (bad)} -body {
+test panedwindow-1.44 {configuration options: -height (bad)} -body {
.p paneconfigure .b -height badValue
} -returnCodes error -result {bad screen distance "badValue"}
-test panedwindow-1.39 {configuration options: -hide (good)} -body {
+test panedwindow-1.45 {configuration options: -hide (good)} -body {
.p paneconfigure .b -hide false
list [lindex [.p paneconfigure .b -hide] 4] \
[.p panecget .b -hide]
} -cleanup {
.p paneconfig .b -hide [lindex [.p paneconfig .b -hide] 3]
} -result {0 0}
-test panedwindow-1.40 {configuration options: -hide (bad)} -body {
+test panedwindow-1.46 {configuration options: -hide (bad)} -body {
.p paneconfigure .b -hide foo
} -returnCodes error -result {expected boolean value but got "foo"}
-test panedwindow-1.41 {configuration options: -minsize (good)} -body {
+test panedwindow-1.47 {configuration options: -minsize (good)} -body {
.p paneconfigure .b -minsize 10
list [lindex [.p paneconfigure .b -minsize] 4] \
[.p panecget .b -minsize]
} -cleanup {
.p paneconfig .b -minsize [lindex [.p paneconfig .b -minsize] 3]
} -result {10 10}
-test panedwindow-1.42 {configuration options: -minsize (bad)} -body {
+test panedwindow-1.48 {configuration options: -minsize (bad)} -body {
.p paneconfigure .b -minsize badValue
} -returnCodes error -result {bad screen distance "badValue"}
-test panedwindow-1.43 {configuration options: -padx (good)} -body {
+test panedwindow-1.49 {configuration options: -padx (good)} -body {
.p paneconfigure .b -padx 1.3
list [lindex [.p paneconfigure .b -padx] 4] \
[.p panecget .b -padx]
} -cleanup {
.p paneconfig .b -padx [lindex [.p paneconfig .b -padx] 3]
} -result {1 1}
-test panedwindow-1.44 {configuration options: -padx (bad)} -body {
+test panedwindow-1.50 {configuration options: -padx (bad)} -body {
.p paneconfigure .b -padx badValue
} -returnCodes error -result {bad screen distance "badValue"}
-test panedwindow-1.45 {configuration options: -pady (good)} -body {
+test panedwindow-1.51 {configuration options: -pady (good)} -body {
.p paneconfigure .b -pady 1.3
list [lindex [.p paneconfigure .b -pady] 4] \
[.p panecget .b -pady]
} -cleanup {
.p paneconfig .b -pady [lindex [.p paneconfig .b -pady] 3]
} -result {1 1}
-test panedwindow-1.46 {configuration options: -pady (bad)} -body {
+test panedwindow-1.52 {configuration options: -pady (bad)} -body {
.p paneconfigure .b -pady badValue
} -returnCodes error -result {bad screen distance "badValue"}
-test panedwindow-1.47 {configuration options: -sticky (good)} -body {
+test panedwindow-1.53 {configuration options: -sticky (good)} -body {
.p paneconfigure .b -sticky nsew
list [lindex [.p paneconfigure .b -sticky] 4] \
[.p panecget .b -sticky]
} -cleanup {
.p paneconfig .b -sticky [lindex [.p paneconfig .b -sticky] 3]
} -result {nesw nesw}
-test panedwindow-1.48 {configuration options: -sticky (bad)} -body {
+test panedwindow-1.54 {configuration options: -sticky (bad)} -body {
.p paneconfigure .b -sticky abcd
} -returnCodes error -result {bad stickyness value "abcd": must be a string containing zero or more of n, e, s, and w}
-test panedwindow-1.49 {configuration options: -stretch (good)} -body {
+test panedwindow-1.55 {configuration options: -stretch (good)} -body {
.p paneconfigure .b -stretch alw
list [lindex [.p paneconfigure .b -stretch] 4] \
[.p panecget .b -stretch]
} -cleanup {
.p paneconfig .b -stretch [lindex [.p paneconfig .b -stretch] 3]
} -result {always always}
-test panedwindow-1.50 {configuration options: -stretch (bad)} -body {
+test panedwindow-1.56 {configuration options: -stretch (bad)} -body {
.p paneconfigure .b -stretch foo
} -returnCodes error -result {bad stretch "foo": must be always, first, last, middle, or never}
-test panedwindow-1.51 {configuration options: -width (good)} -body {
+test panedwindow-1.57 {configuration options: -width (good)} -body {
.p paneconfigure .b -width 10
list [lindex [.p paneconfigure .b -width] 4] \
[.p panecget .b -width]
} -cleanup {
.p paneconfig .b -width [lindex [.p paneconfig .b -width] 3]
} -result {10 10}
-test panedwindow-1.52 {configuration options: -width (bad)} -body {
+test panedwindow-1.58 {configuration options: -width (bad)} -body {
.p paneconfigure .b -width badValue
} -returnCodes error -result {bad screen distance "badValue"}
deleteWindows
diff --git a/unix/tkUnixDefault.h b/unix/tkUnixDefault.h
index b922278..d214aa5 100644
--- a/unix/tkUnixDefault.h
+++ b/unix/tkUnixDefault.h
@@ -367,6 +367,7 @@
#define DEF_PANEDWINDOW_HEIGHT ""
#define DEF_PANEDWINDOW_OPAQUERESIZE "1"
#define DEF_PANEDWINDOW_ORIENT "horizontal"
+#define DEF_PANEDWINDOW_PROXYBORDER "2"
#define DEF_PANEDWINDOW_RELIEF "flat"
#define DEF_PANEDWINDOW_SASHCURSOR ""
#define DEF_PANEDWINDOW_SASHPAD "0"
diff --git a/win/tkWinDefault.h b/win/tkWinDefault.h
index 11c3e6d..c52cc4d 100644
--- a/win/tkWinDefault.h
+++ b/win/tkWinDefault.h
@@ -370,6 +370,7 @@
#define DEF_PANEDWINDOW_HEIGHT ""
#define DEF_PANEDWINDOW_OPAQUERESIZE "1"
#define DEF_PANEDWINDOW_ORIENT "horizontal"
+#define DEF_PANEDWINDOW_PROXYBORDER "2"
#define DEF_PANEDWINDOW_RELIEF "flat"
#define DEF_PANEDWINDOW_SASHCURSOR ""
#define DEF_PANEDWINDOW_SASHPAD "0"