diff options
Diffstat (limited to 'win/ttkWinTheme.c')
-rw-r--r-- | win/ttkWinTheme.c | 409 |
1 files changed, 254 insertions, 155 deletions
diff --git a/win/ttkWinTheme.c b/win/ttkWinTheme.c index f080c8c..c0c04ff 100644 --- a/win/ttkWinTheme.c +++ b/win/ttkWinTheme.c @@ -1,6 +1,6 @@ /* winTheme.c - Copyright (C) 2004 Pat Thoyts <patthoyts@users.sf.net> * - * $Id: ttkWinTheme.c,v 1.4 2007/01/11 19:59:26 jenglish Exp $ + * $Id: ttkWinTheme.c,v 1.5 2007/04/17 14:32:28 dkf Exp $ */ #ifdef _MSC_VER @@ -17,14 +17,18 @@ #endif #include "ttk/ttkTheme.h" - + /* * BoxToRect -- * Helper routine. Converts a Ttk_Box to a Win32 RECT. */ -static RECT BoxToRect(Ttk_Box b) + +static RECT +BoxToRect( + Ttk_Box b) { RECT rc; + rc.top = b.y; rc.left = b.x; rc.bottom = b.y + b.height; @@ -34,31 +38,39 @@ static RECT BoxToRect(Ttk_Box b) /* * ReliefToEdge -- - * Convert a Tk "relief" value into an Windows "edge" value. - * NB: Caller must check for RELIEF_FLAT and RELIEF_SOLID, - * which must be handled specially. + * Convert a Tk "relief" value into an Windows "edge" value. NB: Caller + * must check for RELIEF_FLAT and RELIEF_SOLID, which must be handled + * specially. * - * Passing the BF_FLAT flag to DrawEdge() yields something similar - * to TK_RELIEF_SOLID. TK_RELIEF_FLAT can be implemented by not - * drawing anything. + * Passing the BF_FLAT flag to DrawEdge() yields something similar to + * TK_RELIEF_SOLID. TK_RELIEF_FLAT can be implemented by not drawing + * anything. */ -static unsigned int ReliefToEdge(int relief) + +static unsigned int +ReliefToEdge( + int relief) { switch (relief) { - case TK_RELIEF_RAISED: return EDGE_RAISED; - case TK_RELIEF_SUNKEN: return EDGE_SUNKEN; - case TK_RELIEF_RIDGE: return EDGE_BUMP; - case TK_RELIEF_GROOVE: return EDGE_ETCHED; - case TK_RELIEF_SOLID: return BDR_RAISEDOUTER; - default: - case TK_RELIEF_FLAT: return BDR_RAISEDOUTER; + case TK_RELIEF_RAISED: + return EDGE_RAISED; + case TK_RELIEF_SUNKEN: + return EDGE_SUNKEN; + case TK_RELIEF_RIDGE: + return EDGE_BUMP; + case TK_RELIEF_GROOVE: + return EDGE_ETCHED; + case TK_RELIEF_SOLID: + return BDR_RAISEDOUTER; + default: + case TK_RELIEF_FLAT: + return BDR_RAISEDOUTER; } } /* ---------------------------------------------------------------------- */ -static Ttk_StateTable checkbutton_statemap[] = -{ +static Ttk_StateTable checkbutton_statemap[] = { { DFCS_CHECKED|DFCS_INACTIVE, TTK_STATE_SELECTED|TTK_STATE_DISABLED, 0 }, { DFCS_CHECKED|DFCS_PUSHED, TTK_STATE_SELECTED|TTK_STATE_PRESSED, 0 }, { DFCS_CHECKED, TTK_STATE_SELECTED, 0 }, @@ -67,27 +79,24 @@ static Ttk_StateTable checkbutton_statemap[] = { 0, 0, 0 } }; -static Ttk_StateTable pushbutton_statemap[] = -{ +static Ttk_StateTable pushbutton_statemap[] = { { DFCS_INACTIVE, TTK_STATE_DISABLED, 0 }, { DFCS_PUSHED, TTK_STATE_PRESSED, 0 }, { DFCS_HOT, TTK_STATE_ACTIVE, 0 }, { 0, 0, 0 } }; -static Ttk_StateTable arrow_statemap[] = -{ +static Ttk_StateTable arrow_statemap[] = { { DFCS_INACTIVE, TTK_STATE_DISABLED, 0 }, { DFCS_PUSHED | DFCS_FLAT, TTK_STATE_PRESSED, 0 }, { 0, 0, 0 } }; - + /*------------------------------------------------------------------------ * +++ FrameControlElement -- * General-purpose element for things drawn with DrawFrameControl */ -typedef struct -{ +typedef struct { const char *name; /* element name */ int classId; /* class id for DrawFrameControl */ int partId; /* part id for DrawFrameControl */ @@ -97,8 +106,7 @@ typedef struct Ttk_Padding padding; /* additional placement padding */ } FrameControlElementData; -static FrameControlElementData FrameControlElements[] = -{ +static FrameControlElementData FrameControlElements[] = { { "Checkbutton.indicator", DFC_BUTTON, DFCS_BUTTONCHECK, SM_CYMENUCHECK, SM_CYMENUCHECK, checkbutton_statemap, {0,0,4,0} }, @@ -126,46 +134,55 @@ static FrameControlElementData FrameControlElements[] = /* ---------------------------------------------------------------------- */ -static void FrameControlElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +static void +FrameControlElementGeometry( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { FrameControlElementData *elementData = clientData; + *widthPtr = GetSystemMetrics(elementData->cxId); *heightPtr = GetSystemMetrics(elementData->cyId); *paddingPtr = elementData->padding; } -static void FrameControlElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +FrameControlElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { FrameControlElementData *elementData = clientData; RECT rc = BoxToRect(b); TkWinDCState dcState; HDC hdc = TkWinGetDrawableDC(Tk_Display(tkwin), d, &dcState); - DrawFrameControl(hdc, &rc, - elementData->classId, - elementData->partId|Ttk_StateTableLookup(elementData->stateMap, state)); + DrawFrameControl(hdc, &rc, elementData->classId, + elementData->partId|Ttk_StateTableLookup(elementData->stateMap,state)); TkWinReleaseDrawableDC(d, hdc, &dcState); } -static Ttk_ElementSpec FrameControlElementSpec = -{ +static Ttk_ElementSpec FrameControlElementSpec = { TK_STYLE_VERSION_2, sizeof(NullElement), TtkNullElementOptions, FrameControlElementGeometry, FrameControlElementDraw }; - + /*---------------------------------------------------------------------- * +++ Border element implementation. */ typedef struct { - Tcl_Obj *reliefObj; + Tcl_Obj *reliefObj; } BorderElement; static Ttk_ElementOptionSpec BorderElementOptions[] = { @@ -173,17 +190,27 @@ static Ttk_ElementOptionSpec BorderElementOptions[] = { {NULL} }; -static void BorderElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +static void +BorderElementGeometry( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { paddingPtr->left = paddingPtr->right = GetSystemMetrics(SM_CXEDGE); paddingPtr->top = paddingPtr->bottom = GetSystemMetrics(SM_CYEDGE); } -static void BorderElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +BorderElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { BorderElement *border = elementRecord; RECT rc = BoxToRect(b); @@ -195,33 +222,31 @@ static void BorderElementDraw( if (relief != TK_RELIEF_FLAT) { UINT xFlags = (relief == TK_RELIEF_SOLID) ? BF_FLAT : 0; + hdc = TkWinGetDrawableDC(Tk_Display(tkwin), d, &dcState); DrawEdge(hdc, &rc, ReliefToEdge(relief), BF_RECT | xFlags); TkWinReleaseDrawableDC(d, hdc, &dcState); } } -static Ttk_ElementSpec BorderElementSpec = -{ +static Ttk_ElementSpec BorderElementSpec = { TK_STYLE_VERSION_2, sizeof(BorderElement), BorderElementOptions, BorderElementGeometry, BorderElementDraw }; - + /* * Entry field borders: * Sunken border; also fill with window color. */ -typedef struct -{ - Tcl_Obj *backgroundObj; +typedef struct { + Tcl_Obj *backgroundObj; } FieldElement; -static Ttk_ElementOptionSpec FieldElementOptions[] = -{ +static Ttk_ElementOptionSpec FieldElementOptions[] = { { "-fieldbackground", TK_OPTION_BORDER, Tk_Offset(FieldElement,backgroundObj), "white" }, {NULL} @@ -229,8 +254,12 @@ static Ttk_ElementOptionSpec FieldElementOptions[] = static void FieldElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { paddingPtr->left = paddingPtr->right = GetSystemMetrics(SM_CXEDGE); paddingPtr->top = paddingPtr->bottom = GetSystemMetrics(SM_CYEDGE); @@ -238,8 +267,12 @@ FieldElementGeometry( static void FieldElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { FieldElement *field = elementRecord; Tk_3DBorder bg = Tk_Get3DBorderFromObj(tkwin, field->backgroundObj); @@ -247,32 +280,32 @@ FieldElementDraw( TkWinDCState dcState; HDC hdc; - Tk_Fill3DRectangle( - tkwin, d, bg, b.x, b.y, b.width, b.height, 0, TK_RELIEF_FLAT); + Tk_Fill3DRectangle(tkwin, d, bg, b.x, b.y, b.width, b.height, 0, + TK_RELIEF_FLAT); hdc = TkWinGetDrawableDC(Tk_Display(tkwin), d, &dcState); DrawEdge(hdc, &rc, EDGE_SUNKEN, BF_RECT); TkWinReleaseDrawableDC(d, hdc, &dcState); } -static Ttk_ElementSpec FieldElementSpec = -{ +static Ttk_ElementSpec FieldElementSpec = { TK_STYLE_VERSION_2, sizeof(FieldElement), FieldElementOptions, FieldElementGeometry, FieldElementDraw }; - + /*------------------------------------------------------------------------ * +++ Button borders. * Drawn with DrawFrameControl instead of DrawEdge; * Also draw default indicator and focus ring. */ + typedef struct { - Tcl_Obj *reliefObj; - Tcl_Obj *highlightColorObj; - Tcl_Obj *defaultStateObj; + Tcl_Obj *reliefObj; + Tcl_Obj *highlightColorObj; + Tcl_Obj *defaultStateObj; } ButtonBorderElement; static Ttk_ElementOptionSpec ButtonBorderElementOptions[] = { @@ -285,9 +318,14 @@ static Ttk_ElementOptionSpec ButtonBorderElementOptions[] = { {NULL} }; -static void ButtonBorderElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +static void +ButtonBorderElementGeometry( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { ButtonBorderElement *bd = elementRecord; int relief = TK_RELIEF_RAISED; @@ -302,7 +340,8 @@ static void ButtonBorderElementGeometry( /* Space for default indicator: */ if (defaultState != TTK_BUTTON_DEFAULT_DISABLED) { - ++cx; ++cy; + ++cx; + ++cy; } /* Space for focus ring: @@ -313,9 +352,14 @@ static void ButtonBorderElementGeometry( *paddingPtr = Ttk_MakePadding(cx,cy,cx,cy); } -static void ButtonBorderElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +ButtonBorderElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { ButtonBorderElement *bd = elementRecord; int relief = TK_RELIEF_FLAT; @@ -329,7 +373,7 @@ static void ButtonBorderElementDraw( if (defaultState == TTK_BUTTON_DEFAULT_ACTIVE) { XColor *highlightColor = - Tk_GetColorFromObj(tkwin, bd->highlightColorObj); + Tk_GetColorFromObj(tkwin, bd->highlightColorObj); GC gc = Tk_GCForColor(highlightColor, d); XDrawRectangle(Tk_Display(tkwin), d, gc, b.x,b.y,b.width-1,b.height-1); } @@ -340,56 +384,65 @@ static void ButtonBorderElementDraw( hdc = TkWinGetDrawableDC(Tk_Display(tkwin), d, &dcState); rc = BoxToRect(b); - DrawFrameControl(hdc, &rc, - DFC_BUTTON, /* classId */ - DFCS_BUTTONPUSH | Ttk_StateTableLookup(pushbutton_statemap, state)); + DrawFrameControl(hdc, &rc, DFC_BUTTON, /* classId */ + DFCS_BUTTONPUSH|Ttk_StateTableLookup(pushbutton_statemap, state)); /* Draw focus ring: */ if (state & TTK_STATE_FOCUS) { short int borderWidth = 3; /* @@@ Use GetSystemMetrics?*/ + rc = BoxToRect(Ttk_PadBox(b, Ttk_UniformPadding(borderWidth))); DrawFocusRect(hdc, &rc); } TkWinReleaseDrawableDC(d, hdc, &dcState); } -static Ttk_ElementSpec ButtonBorderElementSpec = -{ +static Ttk_ElementSpec ButtonBorderElementSpec = { TK_STYLE_VERSION_2, sizeof(ButtonBorderElement), ButtonBorderElementOptions, ButtonBorderElementGeometry, ButtonBorderElementDraw }; - + /*------------------------------------------------------------------------ * +++ Focus element. * Draw dashed focus rectangle. */ -static void FocusElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +static void +FocusElementGeometry( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { *paddingPtr = Ttk_UniformPadding(1); } -static void FocusElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +FocusElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { if (state & TTK_STATE_FOCUS) { RECT rc = BoxToRect(b); TkWinDCState dcState; HDC hdc = TkWinGetDrawableDC(Tk_Display(tkwin), d, &dcState); + DrawFocusRect(hdc, &rc); TkWinReleaseDrawableDC(d, hdc, &dcState); } } -static Ttk_ElementSpec FocusElementSpec = -{ +static Ttk_ElementSpec FocusElementSpec = { TK_STYLE_VERSION_2, sizeof(NullElement), TtkNullElementOptions, @@ -412,11 +465,17 @@ static Ttk_ElementOptionSpec FillFocusElementOptions[] = { }; /* @@@ FIX THIS */ -static void FillFocusElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +FillFocusElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { FillFocusElement *focus = elementRecord; + if (state & TTK_STATE_FOCUS) { RECT rc = BoxToRect(b); TkWinDCState dcState; @@ -435,61 +494,77 @@ static void FillFocusElementDraw( * ComboboxFocusElement -- * Read-only comboboxes have a filled focus ring, editable ones do not. */ -static void ComboboxFocusElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) + +static void +ComboboxFocusElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { if (state & TTK_STATE_READONLY) { FillFocusElementDraw(clientData, elementRecord, tkwin, d, b, state); } } -static Ttk_ElementSpec ComboboxFocusElementSpec = -{ +static Ttk_ElementSpec ComboboxFocusElementSpec = { TK_STYLE_VERSION_2, sizeof(FillFocusElement), FillFocusElementOptions, FocusElementGeometry, ComboboxFocusElementDraw }; - + /*---------------------------------------------------------------------- * +++ Scrollbar trough element. * * The native windows scrollbar is drawn using a pattern brush giving a - * stippled appearance when the trough might otherwise be invisible. - * We can deal with this here. + * stippled appearance when the trough might otherwise be invisible. We can + * deal with this here. */ -typedef struct { /* clientData for Trough element */ - HBRUSH PatternBrush; - HBITMAP PatternBitmap; +typedef struct { /* clientData for Trough element */ + HBRUSH PatternBrush; + HBITMAP PatternBitmap; } TroughClientData; static const WORD Pattern[] = { 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa }; -static void TroughClientDataDeleteProc(void *clientData) +static void +TroughClientDataDeleteProc( + void *clientData) { TroughClientData *cd = clientData; + DeleteObject(cd->PatternBrush); DeleteObject(cd->PatternBitmap); ckfree(clientData); } -static TroughClientData *TroughClientDataInit(Tcl_Interp *interp) +static TroughClientData * +TroughClientDataInit( + Tcl_Interp *interp) { - TroughClientData *cd = (TroughClientData*)ckalloc(sizeof(*cd)); + TroughClientData *cd = (TroughClientData *) ckalloc(sizeof(*cd)); + cd->PatternBitmap = CreateBitmap(8, 8, 1, 1, Pattern); - cd->PatternBrush = CreatePatternBrush(cd->PatternBitmap); + cd->PatternBrush = CreatePatternBrush(cd->PatternBitmap); Ttk_RegisterCleanup(interp, cd, TroughClientDataDeleteProc); return cd; } -static void TroughElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +TroughElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { TroughClientData *cd = clientData; TkWinDCState dcState; @@ -515,33 +590,34 @@ static void TroughElementDraw( TkWinReleaseDrawableDC(d, hdc, &dcState); } -static Ttk_ElementSpec TroughElementSpec = -{ +static Ttk_ElementSpec TroughElementSpec = { TK_STYLE_VERSION_2, sizeof(NullElement), TtkNullElementOptions, TtkNullElementGeometry, TroughElementDraw }; - + /*------------------------------------------------------------------------ * +++ Thumb element. */ -typedef struct -{ +typedef struct { Tcl_Obj *orientObj; } ThumbElement; -static Ttk_ElementOptionSpec ThumbElementOptions[] = -{ +static Ttk_ElementOptionSpec ThumbElementOptions[] = { { "-orient", TK_OPTION_ANY,Tk_Offset(ThumbElement,orientObj),"horizontal"}, { NULL } }; static void ThumbElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { ThumbElement *thumbPtr = elementRecord; int orient; @@ -556,52 +632,60 @@ static void ThumbElementGeometry( } } -static void ThumbElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +ThumbElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { RECT rc = BoxToRect(b); TkWinDCState dcState; HDC hdc; /* Windows doesn't show a thumb when the scrollbar is disabled */ - if (state & TTK_STATE_DISABLED) + if (state & TTK_STATE_DISABLED) { return; + } hdc = TkWinGetDrawableDC(Tk_Display(tkwin), d, &dcState); DrawEdge(hdc, &rc, EDGE_RAISED, BF_RECT | BF_MIDDLE); TkWinReleaseDrawableDC(d, hdc, &dcState); } -static Ttk_ElementSpec ThumbElementSpec = -{ +static Ttk_ElementSpec ThumbElementSpec = { TK_STYLE_VERSION_2, sizeof(ThumbElement), ThumbElementOptions, ThumbElementGeometry, ThumbElementDraw }; - + /* ---------------------------------------------------------------------- * The slider element is the shaped thumb used in the slider widget. * Windows likes to call this a trackbar. */ -typedef struct -{ +typedef struct { Tcl_Obj *orientObj; /* orientation of the slider widget */ } SliderElement; -static Ttk_ElementOptionSpec SliderElementOptions[] = -{ +static Ttk_ElementOptionSpec SliderElementOptions[] = { { "-orient", TK_OPTION_ANY, Tk_Offset(SliderElement,orientObj), "horizontal" }, { NULL } }; -static void SliderElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +static void +SliderElementGeometry( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { SliderElement *slider = elementRecord; int orient; @@ -616,9 +700,14 @@ static void SliderElementGeometry( } } -static void SliderElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +SliderElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { RECT rc = BoxToRect(b); TkWinDCState dcState; @@ -629,47 +718,56 @@ static void SliderElementDraw( TkWinReleaseDrawableDC(d, hdc, &dcState); } -static Ttk_ElementSpec SliderElementSpec = -{ +static Ttk_ElementSpec SliderElementSpec = { TK_STYLE_VERSION_2, sizeof(SliderElement), SliderElementOptions, SliderElementGeometry, SliderElementDraw }; - + /*------------------------------------------------------------------------ * +++ Notebook elements. */ -static void ClientElementGeometry( - void *clientData, void *elementRecord, Tk_Window tkwin, - int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +static void +ClientElementGeometry( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + int *widthPtr, + int *heightPtr, + Ttk_Padding *paddingPtr) { paddingPtr->left = paddingPtr->right = GetSystemMetrics(SM_CXEDGE); paddingPtr->top = paddingPtr->bottom = GetSystemMetrics(SM_CYEDGE); } -static void ClientElementDraw( - void *clientData, void *elementRecord, Tk_Window tkwin, - Drawable d, Ttk_Box b, unsigned int state) +static void +ClientElementDraw( + void *clientData, + void *elementRecord, + Tk_Window tkwin, + Drawable d, + Ttk_Box b, + unsigned int state) { RECT rc = BoxToRect(b); TkWinDCState dcState; HDC hdc = TkWinGetDrawableDC(Tk_Display(tkwin), d, &dcState); + DrawEdge(hdc, &rc, EDGE_RAISED, BF_RECT | BF_SOFT); TkWinReleaseDrawableDC(d, hdc, &dcState); } -static Ttk_ElementSpec ClientElementSpec = -{ +static Ttk_ElementSpec ClientElementSpec = { TK_STYLE_VERSION_2, sizeof(NullElement), TtkNullElementOptions, ClientElementGeometry, ClientElementDraw }; - + /*------------------------------------------------------------------------ * +++ Layouts. */ @@ -687,11 +785,13 @@ TTK_BEGIN_LAYOUT(ComboboxLayout) TTK_GROUP("Combobox.focus", TTK_PACK_LEFT|TTK_EXPAND|TTK_FILL_BOTH, TTK_NODE("Combobox.textarea", TTK_FILL_BOTH)))) TTK_END_LAYOUT - - + /* ---------------------------------------------------------------------- */ -MODULE_SCOPE int TtkWinTheme_Init(Tcl_Interp *interp, HWND hwnd) +MODULE_SCOPE int +TtkWinTheme_Init( + Tcl_Interp *interp, + HWND hwnd) { Ttk_Theme themePtr, parentPtr; FrameControlElementData *fce = FrameControlElements; @@ -704,15 +804,15 @@ MODULE_SCOPE int TtkWinTheme_Init(Tcl_Interp *interp, HWND hwnd) Ttk_RegisterElementSpec(themePtr, "border", &BorderElementSpec, NULL); Ttk_RegisterElementSpec(themePtr, "Button.border", - &ButtonBorderElementSpec, NULL); + &ButtonBorderElementSpec, NULL); Ttk_RegisterElementSpec(themePtr, "field", &FieldElementSpec, NULL); Ttk_RegisterElementSpec(themePtr, "focus", &FocusElementSpec, NULL); Ttk_RegisterElementSpec(themePtr, "Combobox.focus", - &ComboboxFocusElementSpec, NULL); + &ComboboxFocusElementSpec, NULL); Ttk_RegisterElementSpec(themePtr, "thumb", &ThumbElementSpec, NULL); Ttk_RegisterElementSpec(themePtr, "slider", &SliderElementSpec, NULL); Ttk_RegisterElementSpec(themePtr, "Scrollbar.trough", &TroughElementSpec, - TroughClientDataInit(interp)); + TroughClientDataInit(interp)); Ttk_RegisterElementSpec(themePtr, "client", &ClientElementSpec, NULL); @@ -727,4 +827,3 @@ MODULE_SCOPE int TtkWinTheme_Init(Tcl_Interp *interp, HWND hwnd) Tcl_PkgProvide(interp, "ttk::theme::winnative", TTK_VERSION); return TCL_OK; } - |