diff options
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkTreeCtrl.c | 6 | ||||
-rw-r--r-- | generic/tkTreeCtrl.h | 2 | ||||
-rw-r--r-- | generic/tkTreeDisplay.c | 40 |
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; } + /* *-------------------------------------------------------------- * |