Tcl-Tk-Tkwidget-treectrl
view release on metacpan or search on metacpan
generic/tkTreeDisplay.c view on Meta::CPAN
int widthOfColumnsLeft; /* Last seen Tree_WidthOfLeftColumns() */
int widthOfColumnsRight; /* Last seen Tree_WidthOfRightColumns() */
Range *rangeLock; /* If there is no Range for non-locked
* columns, this range holds the vertical
* offset and height of each ReallyVisible
* item for displaying locked columns. */
#if REDRAW_RGN == 1
TkRegion redrawRgn; /* Contains all redrawn (not copied) pixels
* during a single Tree_Display call. */
#endif /* REDRAW_RGN */
int overlays; /* TRUE if the dragimage|marquee|proxy
* were drawn in non-XOR mode. */
#if CACHE_BG_IMG
TreeDrawable pixmapBgImg; /* Pixmap containing the -backgroundimage
* for efficient blitting. Not used if the
* -backgroundimage is transparent. */
#endif
};
#ifdef COMPLEX_WHITESPACE
static int ComplexWhitespace(TreeCtrl *tree);
generic/tkTreeDisplay.c view on Meta::CPAN
* If the buffering level changes then the whole list is redrawn.
*
*----------------------------------------------------------------------
*/
static void
SetBuffering(
TreeCtrl *tree)
{
TreeDInfo dInfo = tree->dInfo;
int overlays = FALSE;
if ((TreeDragImage_IsVisible(tree->dragImage) &&
!TreeDragImage_IsXOR(tree->dragImage)) ||
(TreeMarquee_IsVisible(tree->marquee) &&
!TreeMarquee_IsXOR(tree->marquee)) ||
((tree->columnProxy.xObj || tree->rowProxy.yObj) &&
!Proxy_IsXOR())) {
overlays = TRUE;
}
#if 1
tree->doubleBuffer = DOUBLEBUFFER_WINDOW;
#else
#if defined(MAC_OSX_TK) && (TK_MAJOR_VERSION==8) && (TK_MINOR_VERSION>=6)
/* Do NOT call TkScrollWindow(), it generates an <Expose> event which redraws *all*
* child windows of children of the toplevel this treectrl is in. See Tk bug 3086887. */
tree->doubleBuffer = DOUBLEBUFFER_WINDOW;
#else
if (overlays) {
tree->doubleBuffer = DOUBLEBUFFER_WINDOW;
} else {
tree->doubleBuffer = DOUBLEBUFFER_ITEM;
}
#endif
#endif
if (overlays != dInfo->overlays) {
dInfo->flags |=
DINFO_DRAW_HEADER |
DINFO_INVALIDATE |
DINFO_DRAW_WHITESPACE;
dInfo->overlays = overlays;
}
}
#if 0
struct ExposeRestrictClientData {
TreeCtrl *tree;
unsigned long serial;
};
static Tk_RestrictAction
ExposeRestrictProc(
generic/tkTreeDisplay.c view on Meta::CPAN
#if 0 && REDRAW_RGN == 1
tree->drawableXOrigin = tree->xOrigin;
tree->drawableYOrigin = tree->yOrigin;
if (TreeDragImage_IsXOR(tree->dragImage) == FALSE)
TreeDragImage_DrawClipped(tree->dragImage, tdrawable, dInfo->redrawRgn);
if (TreeMarquee_IsXOR(tree->marquee) == FALSE)
TreeMarquee_DrawClipped(tree->marquee, tdrawable, dInfo->redrawRgn);
Tree_SetEmptyRegion(dInfo->redrawRgn);
#endif /* REDRAW_RGN */
if (dInfo->overlays) {
tdrawable.width = Tk_Width(tkwin);
tdrawable.height = Tk_Height(tkwin);
if (TreeTheme_IsDesktopComposited(tree)) {
tdrawable.drawable = Tk_WindowId(tkwin);
} else {
tdrawable.drawable = DisplayGetPixmap(tree, &dInfo->pixmapT,
Tk_Width(tree->tkwin), Tk_Height(tree->tkwin));
}
/* Copy double-buffer */
/* FIXME: only copy what is in dirtyRgn plus overlays */
XCopyArea(tree->display, dInfo->pixmapW.drawable,
tdrawable.drawable,
tree->copyGC,
Tree_BorderLeft(tree), Tree_BorderTop(tree),
Tree_BorderRight(tree) - Tree_BorderLeft(tree),
Tree_BorderBottom(tree) - Tree_BorderTop(tree),
Tree_BorderLeft(tree), Tree_BorderTop(tree));
/* Draw dragimage|marquee|proxies */
tree->drawableXOrigin = tree->xOrigin;
generic/tkTreeDisplay.c view on Meta::CPAN
if (TreeMarquee_IsXOR(tree->marquee) == FALSE)
TreeMarquee_Draw(tree->marquee, tdrawable);
if (Proxy_IsXOR() == FALSE)
TreeColumnProxy_Draw(tree, tdrawable);
if (Proxy_IsXOR() == FALSE)
TreeRowProxy_Draw(tree, tdrawable);
if (TreeTheme_IsDesktopComposited(tree) == FALSE) {
/* Copy tripple-buffer to window */
/* FIXME: only copy what is in dirtyRgn plus overlays */
XCopyArea(tree->display, dInfo->pixmapT.drawable,
Tk_WindowId(tkwin),
tree->copyGC,
Tree_BorderLeft(tree), Tree_BorderTop(tree),
Tree_BorderRight(tree) - Tree_BorderLeft(tree),
Tree_BorderBottom(tree) - Tree_BorderTop(tree),
Tree_BorderLeft(tree), Tree_BorderTop(tree));
}
Tree_SetEmptyRegion(dInfo->dirtyRgn);
shellicon/shellicon.c view on Meta::CPAN
Tcl_Obj *heightObj;
int height;
#define TYPE_DIRECTORY 0
#define TYPE_FILE 1
int type; /* If specified, 'path' is assumed to exist */
#define SIZE_LARGE 0
#define SIZE_SMALL 1
int size; /* SIZE_LARGE if unspecified */
HIMAGELIST hImgList; /* the system image list */
int iIcon; /* index into hImgList */
/* FIXME: overlays no longer work in Win7 */
int addOverlays; /* only when useImgList is FALSE */
int useImgList; /* if false, create icons */
#define USE_SEL_ALWAYS 0 /* always draw selected icon */
#define USE_SEL_AUTO 1 /* draw selected icon when item is selected */
#define USE_SEL_NEVER 2 /* never draw the selected icon */
int useSelected; /* when to draw the selected icon */
HICON hIcon; /* icon */
HICON hIconSel; /* selected icon */
};
shellicon/shellicon.c view on Meta::CPAN
"large", "small", (char *) NULL
};
static CONST char *typeST[] = {
"directory", "file", (char *) NULL
};
static CONST char *useSelectedST[] = {
"always", "auto", "never", (char *) NULL
};
static Tk_OptionSpec shellIconOptionSpecs[] = {
{TK_OPTION_CUSTOM, "-addoverlays", (char *) NULL, (char *) NULL,
(char *) NULL, -1, Tk_Offset(ElementShellIcon, addOverlays),
TK_OPTION_NULL_OK, (ClientData) NULL, SHELLICON_CONF_ICON},
#ifdef DEPRECATED
{TK_OPTION_CUSTOM, "-draw", (char *) NULL, (char *) NULL,
(char *) NULL, Tk_Offset(ElementShellIcon, draw.obj),
Tk_Offset(ElementShellIcon, draw),
TK_OPTION_NULL_OK, (ClientData) NULL, SHELLICON_CONF_DRAW},
#endif
{TK_OPTION_PIXELS, "-height", (char *) NULL, (char *) NULL,
(char *) NULL, Tk_Offset(ElementShellIcon, heightObj),
shellicon/shellicon.c view on Meta::CPAN
TreeCtrl *tree = args->tree;
TreeElement elem = args->elem;
ElementShellIcon *elemX = (ElementShellIcon *) elem;
ElementShellIcon *masterX = (ElementShellIcon *) elem->master;
SHFILEINFO sfi;
Tcl_DString dString1, dString2;
UINT uFlags = SHGFI_SYSICONINDEX;
DWORD dwFileAttributes = 0;
char *nativePath;
int size = SIZE_LARGE;
int overlays = 1;
int type = -1;
int useImgList = TRUE;
DWORD_PTR result;
/* -useimagelist boolean */
if (elemX->useImgList != -1)
useImgList = elemX->useImgList;
else if (masterX != NULL && masterX->useImgList != -1)
useImgList = masterX->useImgList;
shellicon/shellicon.c view on Meta::CPAN
/* Equivalent to "file nativename $path" */
nativePath = Tcl_TranslateFileName(tree->interp, elemX->path, &dString1);
if (nativePath == NULL)
return;
/* This will be passed to system calls, so convert from UTF8 */
nativePath = Tcl_UtfToExternalDString(NULL, nativePath, -1, &dString2);
uFlags = SHGFI_ICON;
/* -addoverlays boolean */
if (elemX->addOverlays != -1)
overlays = elemX->addOverlays;
else if (masterX != NULL && masterX->addOverlays != -1)
overlays = masterX->addOverlays;
if (overlays)
uFlags |= SHGFI_ADDOVERLAYS;
/* -size small or large */
if (elemX->size != -1)
size = elemX->size;
else if (masterX != NULL && masterX->size != -1)
size = masterX->size;
switch (size) {
case SIZE_LARGE: uFlags |= SHGFI_LARGEICON | SHGFI_SHELLICONSIZE; break;
case SIZE_SMALL: uFlags |= SHGFI_SMALLICON | SHGFI_SHELLICONSIZE; break;
shellicon/shellicon.c view on Meta::CPAN
sizeof(TreeCtrlStubs) != stubs->sizeofTreeCtrlStubs ||
sizeof(TreeElement) != stubs->sizeofTreeElement ||
sizeof(TreeElementArgs) != stubs->sizeofTreeElementArgs) {
Tcl_SetResult(interp, "probably forgot to recompile shellicon",
TCL_VOLATILE);
return TCL_ERROR;
}
#endif
/* Initialize the options table */
BooleanCO_Init(shellIconOptionSpecs, "-addoverlays");
BooleanCO_Init(shellIconOptionSpecs, "-useimagelist");
PerStateCO_Init(shellIconOptionSpecs, "-draw", &pstBoolean,
TreeStateFromObj);
StringTableCO_Init(shellIconOptionSpecs, "-size", sizeST);
StringTableCO_Init(shellIconOptionSpecs, "-type", typeST);
StringTableCO_Init(shellIconOptionSpecs, "-useselected", useSelectedST);
/* Add the "shellicon" element type */
if (TreeCtrl_RegisterElementType(interp, &elemTypeShellIcon) != TCL_OK)
return TCL_ERROR;
( run in 1.154 second using v1.01-cache-2.11-cpan-49f99fa48dc )