/*------------------------------------------------------------------------ * +++ Layout management hooks. */ static Ttk_Layout PanedGetLayout( Tcl_Interp *interp, Ttk_Theme themePtr, void *recordPtr) { Paned *pw = recordPtr; Ttk_Layout panedLayout = TtkWidgetGetLayout(interp, themePtr, recordPtr); if (panedLayout) { int horizontal = pw->paned.orient == TTK_ORIENT_HORIZONTAL; const char *layoutName = horizontal ? ".Vertical.Sash" : ".Horizontal.Sash"; Ttk_Layout sashLayout = Ttk_CreateSublayout( interp, themePtr, panedLayout, layoutName, pw->core.optionTable); if (sashLayout) { int sashWidth, sashHeight; Ttk_LayoutSize(sashLayout, 0, &sashWidth, &sashHeight); pw->paned.sashThickness = horizontal ? sashWidth : sashHeight; if (pw->paned.sashLayout) Ttk_FreeLayout(pw->paned.sashLayout); pw->paned.sashLayout = sashLayout; } else { Ttk_FreeLayout(panedLayout); return 0; } } return panedLayout; }
/* LabelframeLabelSize -- * Extract the requested width and height of the labelframe's label: * taken from the label widget if specified, otherwise the text label. */ static void LabelframeLabelSize(Labelframe *lframePtr, int *widthPtr, int *heightPtr) { Tk_Window labelWidget = lframePtr->label.labelWidget; Ttk_Layout labelLayout = lframePtr->label.labelLayout; if (labelWidget) { *widthPtr = Tk_ReqWidth(labelWidget); *heightPtr = Tk_ReqHeight(labelWidget); } else if (labelLayout) { Ttk_LayoutSize(labelLayout, 0, widthPtr, heightPtr); } else { *widthPtr = *heightPtr = 0; } }
/* * ScaleSize -- * Compute requested size of scale. */ static int ScaleSize(void *clientData, int *widthPtr, int *heightPtr) { WidgetCore *corePtr = clientData; Scale *scalePtr = clientData; int length; Ttk_LayoutSize(corePtr->layout, corePtr->state, widthPtr, heightPtr); /* Assert the -length configuration option */ Tk_GetPixelsFromObj(NULL, corePtr->tkwin, scalePtr->scale.lengthObj, &length); if (scalePtr->scale.orient == TTK_ORIENT_VERTICAL) { *heightPtr = MAX(*heightPtr, length); } else { *widthPtr = MAX(*widthPtr, length); } return 1; }