summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
Diffstat (limited to 'generic')
-rw-r--r--generic/tkTreeCtrl.c6
-rw-r--r--generic/tkTreeCtrl.h2
-rw-r--r--generic/tkTreeDisplay.c40
3 files changed, 41 insertions, 7 deletions
diff --git a/generic/tkTreeCtrl.c b/generic/tkTreeCtrl.c
index 26d8eb0..7c6af90 100644
--- a/generic/tkTreeCtrl.c
+++ b/generic/tkTreeCtrl.c
@@ -130,6 +130,12 @@ static Tk_OptionSpec optionSpecs[] = {
"doubleBuffer", "DoubleBuffer",
"item", -1, Tk_Offset(TreeCtrl, doubleBuffer),
0, (ClientData) doubleBufferST, TREE_CONF_REDISPLAY},
+
+ {TK_OPTION_PIXELS, "-fillstripes", "fillStripes", "FillStripes",
+ "1", Tk_Offset(TreeCtrl, fillStripesObj),
+ Tk_Offset(TreeCtrl, fillStripes),
+ 0, (ClientData) NULL, TREE_CONF_RELAYOUT},
+
{TK_OPTION_SYNONYM, "-fg", (char *) NULL, (char *) NULL,
(char *) NULL, 0, -1, 0, (ClientData) "-foreground"},
{TK_OPTION_FONT, "-font", "font", "Font",
diff --git a/generic/tkTreeCtrl.h b/generic/tkTreeCtrl.h
index cbca317..fa60492 100644
--- a/generic/tkTreeCtrl.h
+++ b/generic/tkTreeCtrl.h
@@ -405,6 +405,8 @@ struct TreeCtrl
int itemTagExpr; /* Enable/disable operators in item tags */
int columnTagExpr; /* Enable/disable operators in column tags */
+ Tcl_Obj* fillStripesObj; /* Enable filling empty space with more stripes. */
+ int fillStripes; /* Enable filling empty space with more stripes. */
};
#define TREE_CONF_FONT 0x0001
diff --git a/generic/tkTreeDisplay.c b/generic/tkTreeDisplay.c
index 8ad6c09..fdf887e 100644
--- a/generic/tkTreeDisplay.c
+++ b/generic/tkTreeDisplay.c
@@ -4706,6 +4706,7 @@ DrawColumnBackground(
rowBox.y = top;
rowBox.width = bounds->width;
rowBox.height = rItem ? rItem->size : height;
+
if (Tree_IntersectRect(&drawBox, &rowBox, &dirtyBox)) {
if (rItem != NULL) {
index = GetItemBgIndex(tree, rItem);
@@ -4825,19 +4826,39 @@ ComplexWhitespace(
TreeCtrl *tree
)
{
+ if (tree->fillStripes) {
+ return 1;
+ }
+
if (tree->columnBgCnt == 0 &&
- TreeColumn_BackgroundCount(tree->columnTail) == 0)
+ TreeColumn_BackgroundCount(tree->columnTail) == 0) {
return 0;
+ }
- if (!tree->vertical || tree->wrapMode != TREE_WRAP_NONE)
+ if (!tree->vertical || tree->wrapMode != TREE_WRAP_NONE) {
return 0;
-
- if (tree->itemHeight <= 0 && tree->minItemHeight <= 0)
+ }
+ if (tree->itemHeight <= 0 && tree->minItemHeight <= 0) {
return 0;
+ }
return 1;
}
+float Tree_AverageItemHeight(TreeDInfo dInfo) {
+ DItem *dItem;
+ int cnt = 0;
+ float averageRowHeight = 0;
+
+ for (dItem = dInfo->dItem;
+ dItem != NULL;
+ dItem = dItem->next) {
+ averageRowHeight += dItem->height;
+ cnt ++;
+ }
+ return averageRowHeight / cnt;
+}
+
/*
*--------------------------------------------------------------
*
@@ -4890,12 +4911,15 @@ DrawWhitespace(
bottom = Tree_ContentBottom(tree);
/* Figure out the height of each row of color below the items. */
- if (tree->backgroundMode == BG_MODE_COLUMN)
+ if (tree->backgroundMode == BG_MODE_COLUMN) {
height = bottom - top; /* solid block of color */
- else if (tree->itemHeight > 0)
+ } else if (tree->itemHeight > 0) {
height = tree->itemHeight;
- else
+ } else if (tree->minItemHeight) {
height = tree->minItemHeight;
+ } else {
+ height = Tree_AverageItemHeight(dInfo);
+ }
columnRgn = Tree_GetRegion(tree);
@@ -4939,6 +4963,7 @@ DrawWhitespace(
}
}
+
if (top < bottom) {
/* Get the display index of the last visible item. */
@@ -5282,6 +5307,7 @@ DisplayGetPixmap(
return dPixmap->drawable;
}
+
/*
*--------------------------------------------------------------
*